[REPRODUCCIÓ DE MÚSICA] JASON Hirschhorn: OK, tothom. Benvingut a la secció. Aquesta és CS50, la nostra mateixa primera secció super. Com tots vostès saben, la setmana que seccions regulars començaran, però aquesta setmana estem tots junts. No és a mi mateix. El meu nom és Jason. Sóc un professor de Ciències de la Computació. Tenim Andi, qui és el cap de la PA CS50. I Scaz, el professor Brian Scassellati, ell és un professor de Ciències de la Computació. Som els caps CS50 a Yale. Sempre es pot enviar per correu electrònic ens heads@cs50.yale.edu. Estarem en conferències. Estarem en horari d'oficina. Si alguna vegada hi ha alguna cosa que puguem faci per tu, tot el que necessita, no dubti en acostar-se a nosaltres. Llavors, què farem avui? O abans d'això, el que cal pujant aquesta setmana? Així horari d'oficina és de dilluns, dimarts, Dimecres i dijous, de 8:00 a 11:00. Hi ha un horari en el lloc web. Seccions, com he esmentat, estan començant la setmana que ve. I t'adonaràs del que aquesta setmana Temps de la seva secció és, quin dia és, i qui és el seu TA. Butlletí de problemes 1 es deu a dijous a les migdia, divendres al migdia amb un dia de retard. Sí, vostè té nou dies de retard. I hi ha nou butlletins de problemes. I només es pot utilitzar un dia de retard per joc problema. Sí, en efecte, tot el problema conjunts s'han divendres al migdia. Això és tot. Tot el que els detalls estan en el programa d'estudis. Tots els divendres, tenim dinars. Ens agrada fer aquest gran Per descomptat se sent una mica més petit. Així que us convidem a confirmar la seva assistència. Dinar lliure amb el seu company companys de classe i el personal. cs50.yale.edu/rsvp. Totes aquestes coses que Tinc a la pantalla, i més, vostè pot trobar cs50.yale.edu o cs50.harvard.edu, si anar a Harvard i estan veient això en línia. També en aquests llocs web, hi ha són un munt de recursos per a vostè. Cada conferència no només té el video de la conferència, però també notes. Algú observarà el conferències i prendre notes per a vostè. Pel que només pot pagar atenció durant les classes, o pot usar les seves notes / nostra notes per complementar les seves pròpies notes. Hi ha tobogans en línia. La font code-- tot David alt en la conferència, o Scaz alt conferència, que codi font està disponible en línia així com com jo, vídeos esmentat. Seccions, així mateix, tots seran filmats. Totes aquestes diapositives estarà disponible. Tot aquest codi serà estar disponible per a vostè. Hi ha pantalons curts a la pàgina web on Membres del personal CS50 passen de cinc a 10 minuts que passen per temes per a vostè. Alguns dels que ja tens trobat en els butlletins de problemes. Hores d'oficina, com he esmentat, dilluns a dijous, de 8:00 a 11:00. CS50 Estudi és un recurs fantàstic. Hi ha problemes de pràctica, diapositives de mostra, errors coneguts que els estudiants els agrada córrer a, essencialment per a tots els temes que cobrirà en aquest curs. I, finalment, en aquesta diapositiva almenys, Reference50 que li dóna la informació en totes les funcions de C vostè podria possiblement esperar d'usar i molts, molts més. Una vegada més, que dot dot dot al la part inferior de la pantalla és per indicar que hi ha fins i tot més recursos en aquests dos llocs web: cs50.yale.edu, cs50.harvard.edu. Llavors, què farem avui? Bé, primer que vaig a donar ens fixem en els recursos. Ja va fer que un. Mira'ns. Ara, anirem Tipus de dades i operadors en C. Llavors Andi vindrà aquí i anar més biblioteques en C, printf (), una funció amb la qual ja està familiars o es convertirà ràpidament en molt familiar. I vostè també es passa de condicionals i bucles. I finalment, Scaz repassarà l'ID CS50. Si no ha Paloma a Ja en el problema 1 set, així com la forma d'utilitzar el ordres de terminal i útils i després li donen alguns donem i la pràctica de codificació en l'ID CS50. Abans de saltar a aquesta el contingut d'aquest costat, Algú té alguna pregunta fins ara? Gran. D'ACORD. Canvi de marxes. [CANVI DE GEARS] Aquest era jo el canvi engranatges en un cotxe manual. Així que els tipus de dades en C, pot no només tenir una variable x i han d'estar en la línia 10, un enter, potser el número 1, en la línia 20, un nombre decimal 10.5, i les línies a continuació, un parell de més tard una cadena, m'encanta CS50. En C, les variables només poden ser una cosa i només una cosa. I el que cal donar-los tipus. I en aquest fòrum, ens tenir una llista de tipus. Hi ha caràcters, que representar caràcters. Així que això és una lletra A, B, C, D. Això també pot ser un espai, o que també es pot un caràcter de nova línia. No són nombres enters, que són només nombres, tota numbers-- o nombres enters rather-- però sense decimals. Per decimals, tenim nombres de punt flotant. Números de punt flotant són nombres amb decimals. Després hi ha els llargs, que són sencers essencialment més llargs. Es donarà compte de que un llarg es 8 mentre que un int es 4. Vaig a arribar a això en un segon. Això és perquè anhela poden emmagatzemar fins més sencers que un int poden emmagatzemar. Doble és un llarg flotador. I finalment, tenim cadena, que és un tipus de que és probable que hagi fet servir abans. Si inclou hashtag # IncludeCS50.h a l'arxiu d'origen, llavors vostè pot utilitzar un tipus de cadena. No és en realitat construïda en C. Hi ha un parell d'altres tipus també. Però aquests són els principals amb que utilitzarà i la trobada. C com, una altra vegada he dit, cada variable-- que només pot ser un tipus i un sol tipus. Això és perquè C és una forma estàtica llengua escrita a màquina, a diferència a les llengües escrites de forma dinàmica on si crea una variable vostè pot canviar el que està emmagatzemat en a mesura que avança en el seu programa. Per aquí a la mà dreta banda, tinc els diferents mides d'aquests tipus de dades en bytes. Així que un caràcter és 1 byte. Això és de 8 bits. I això vol dir, perquè 8 trossets hi ha vuit 0s i 1s. Vam veure aquestes demostracions en el primer setmana amb que les bombetes binaris. Amb 8 bits o 1 byte, podem representar els nombres del 0 al 255. Dreta. Si tots els 8 bits són 0 això és 0. Si el primer bit és 1, que és el nombre un, i així successivament, tot el camí fins a 255. I és per això que per als personatges que puguis tenen essencialment fins a 255 d'ells, però això és molt per cobrir tots els personatges que necessiten utilitzar. Per sencers, vostè pot tenir 0 i llavors vostè té 2 a l'32 almenys 1. Aquests són el nombre d'opcions vostè té per als enters. Durant molt, tens 0 a 2 a l'64 almenys 1. Així que hi ha molts, molts, més opcions per anhela. Cordes, que és un signe d'interrogació perquè això és un cliffhanger per a més endavant. Sí. Em vaig adonar que tothom és en la vora del seu seient, com el que és aquest signe d'interrogació? És un cliffhanger. Finalment ens cobrirem la mida de cordes i parlen més sobre cordes. A causa de que la cadena és en realitat una de les rodes d'entrenament ens posem en aquest curs des de l'inici i després tirar endavant successivament, perquè les cadenes en C en realitat són punters a matrius de caràcters. Però, de nou, això és un Cliffhanger per a més endavant. Abans de passar a qualsevol pregunta, comentaris, inquietuds sobre aquesta diapositiva? D'ACORD. He de ser un explicador fantàstic. També quan s'està programant, vostè va a utilitzar aquests operadors. Realment signes simples que poden fer senzilla operacions, amb el que probablement són ja molt familiar. Per exemple, a la dreta banda, veiem afegir. Per afegir, que acaba de fer un signe més. I el que podria tenir de dues variables x i y. Vostè pot fer x + i en el codi. Potser vostè vol dir que A-- tenir el número 7 i 3, desitja emmagatzemar que en una variable anomenada suma. Vostè pot fer int per al tipus, l'espai suma, el nom de la variable, = 7 + 3; Com seria aquesta botiga en suma? Qualsevol persona? Si tingués en suma = 7 + 3. El que s'emmagatzema en definitiva? Vostè només pot cridar cap a fora. AUDIÈNCIA: 10. JASON Hirschhorn: 10! Això és exactament correcte. I en suma = 7-3, Acabo d'utilitzar aquest signe tauler. ¿Què serà emmagatzemat? AUDIÈNCIA: 4. JASON Hirschhorn: 4. Suma és probablement el nom equivocat per aquesta variable, però 4 seria emmagatzemat. Per multiplicar en C, utilitzeu el petit Personatge estrella, no utilitza una x. Dividir, utilitzeu un Davanter No retallar el símbol de divisió. I per mòdul, utilitzeu el símbol de percentatge. Així que diguem que vull veure int z = 7% 3, el que s'emmagatzema en z? Llavors, això és essencialment preguntant què fa mòdul? Algú sap el que fa de mòdul? Sí. i 4. ALTAVEU 1: És la resta. JASON Hirschhorn: És la resta quan es divideix. Així 7 dividit per 3 és 2 resta gener. Així gener s'emmagatzemaria. Vas fer resta, però així és com funciona. Això és el que fa l'operador de mòdul. Es necessita un nombre el divideix per un altre número i torna a tu la resta. Així que de nou, el 7% 3 et dóna 1, perquè 7 dividit per 3 és 2 resta 1, i retorna la resta. I anem a tornar a pujar un pas al senyal de divisió. Si ho fes juliol / dividit per 3 fa Algú sap el que tornaria? ALTAVEU 2: 2. JASON Hirschhorn: Per què 2 i no 2.333? ALTAVEU 2: Crec que és curta després de tot el número. JASON Hirschhorn: Així això és exactament correcte. En C, si ho fa la divisió de dos enters 7 dividit per 3, obté la resposta que en aquest cas, 2.3333 per sempre i comprova que el punt decimal i costelles tot després del punt decimal i que només li torna febrer. Així que si ho feia 8 dividit per 3. Que en realitat, sabem que per tornar 2.666, però costelles de tot el que fos en punt decimal, trunca tot, i simplement retorna a vostè febrer. Així juny dividit per 3, 7 dividits per 3, 8 dividit per 3, tots anem a tornar a vostè febrer. Algú sap, o té una conjectura, que fa a com jo podia arribar la resposta completa si vull que decimal? Sí. Endavant. ALTAVEU 3: Utilitzeu un flotador? JASON Hirschhorn: Què vols dir? ALTAVEU 3: Perquè vostè va dir que el float és per als nombres [inaudible] JASON Hirschhorn: Correcte. Llavors, això és exactament correcte. 7 és un nombre sencer. Però si volia al seu torn que en un nombre de punt flotant, Jo hauria de emmagatzemar aquesta com 7.0 perquè l'equip que realment està stupid-- vam veure que amb l'exemple- PB i J només farà exactament el que li dius. Així que si vostè escriu 7, que crec que és un enter. Si s'escriu 7.0, tot i que saben aquestes coses són equivalents, es tracta que com un nombre de punt flotant. Així que si vostè ho va fer 7,0 dividida per 3 o dividit per 3,0, diria, OK, ara estem tractant amb flotadors. Em tornaré a vosaltres 2.333333 sempre. Però en realitat no sempre, perquè com vam veure també en la conferència, aquests nombres de punt flotant no són exactament precisa. Així que si vostè vol que decimal, o una part d'aquest decimal, llavors vostè ha de servei- un d'ells ha de ser un nombre de punt flotant i l'equip ha d'entendre que aquest és un punt flotant ets tractant, no és un enter. Teniu alguna pregunta respecte aquesta taula en la dreta, fins al moment? O la seva esquerra, la seva a l'esquerra, a mà esquerra. Sí. ALTAVEU 4: Dret. Perquè així com un regular sencers, ho faria write-- hauries d'escriure surar? JASON Hirschhorn: Sí així. Bé, si vol crear una variable que és un flotador, que necessita dir flotador z és igual a alguna cosa. ALTAVEU 4: OK. JASON Hirschhorn: Però si jo volia fer 7 dividit per 3 i aconseguir que el decimal, Jo faria flotador z = 7,0 / 3,0; i que em donaria el punt flotant nombre. ALTAVEU 4: OK. JASON Hirschhorn: Si ho vaig fer una mena int z = 7 / per 3, que em doni un nombre enter, perquè aquests són tots els enters. Això té sentit? ALTAVEU 4: Si. JASON Hirschhorn: OK. Gran. Alguna altra pregunta sobre aquesta taula? ¿De debò? Estic tan emocionada. D'ACORD. Així que algunes altres coses que utilitzarà, moltes vegades en condicions o bucles, són aquests tipus de operators-- aquest tipus d'expressions booleanes. I com hem après, == és el que utilitzar per comprovar si dues coses són iguals. Així que aquí estic comprovant si x == i, anem a una altra vegada suposi que x és 7 ei es 3. Així que si escrivia 7 == 3, el que caldria tornar a mi? És això cert o fals? AUDIÈNCIA: Fals. JASON Hirschhorn: OK. Sento que tothom pot aconseguir aquest. Així que tot el món, el que hauria de tornar? AUDIÈNCIA: Fals. JASON Hirschhorn: Fals. Gran. 7 no és igual a 3. Així 7 == 3 tornaria falsa. Vostè té un signe no és igual, així que si jo Revisat juliol! = 3, el que hauria de tornar? AUDIÈNCIA: Veritable. JASON Hirschhorn: Veritable. Excel·lent. Algú va ser molt emfàtic en la part de darrere i apreciar això. Llavors vostè té menys d'operador, menys d'o igual a operador, operador més gran que, més que o igual a operador. Així que un més prova de seny. Si tingués 7 és més gran que o igual a 3. El que hauria de tornar? AUDIÈNCIA: Veritable. JASON Hirschhorn: Veritable. Sí. Això, revers rebotiga de l'habitació, fantàstic. Pot combinar aquests expressions si es vol, també, amb una lògica i que està && O un OR lògic que és || ||. I pel que ara es pot provar de dos coses junts-- és això graciós? Per què és tan graciós? Així que si jo volia, el que puc dir és 7 més gran que 3 i 2 és de menys de 4? Bé, si 7 és més gran de 3, això és cert. 2 és inferior a 4, això és cert. Així que tot això tornaria realitat. Si he provat 7 és més gran que 3 i- Només estic recollint números aleatoris aquí-- 4 és menor que 2, bé, això és fals. Tan cert i fals maquillatge fals. I vostè pot seguir i que es combinen com moltes condicions junts com vulgui. Algú té alguna pregunta, comentaris, preocupacions fins ara? I veig que alguns de vostès fer fotografies em de a la pantalla, cosa que s'agraeix. Amb sort, no és snapchat. Amb sort, és per les seves notes. Però tots ells van que estarà disponible en línia. Així que vostè no ha de fer fotos d'això. Com he esmentat, tot estarà disponible en línia per a vostè. D'ACORD. Estic a punt d'arribar fora de l'escenari, també ho fa a ningú vull dir res abans que això passi? Preguntes? [Interposant VEUS] JASON Hirschhorn: Oh, atura't. Vostès són massa agradable. D'ACORD. Vaig a etiquetar a terme. Anem. ANDI Peng: Anem fer un canvi micròfon incòmoda ara. JASON Hirschhorn: Sóc va a portar això endavant. ANDI Peng: Agraïm el suport, nois. Em sents? ¿Això és bo? Perfecte. Bella. Permetin-me que fico a. D'ACORD. Per tant, estic a punt de fer com un gegant informació de bolcat de vostès en aquest moment. I no es preocupi en absolut si són no seguir cada petita línia del que Estic a punt de mostrar. Com va dir Jason, tot és completament en línia. Així que anem a tractar d'introduir tots els conceptes cobert en algunes d'aquestes diapositives. Així que només has de seguir endavant. No us preocupeu si vostè no entén tot; No obstant això, si en algun moment et sents perdut, aixeca la seva mà, anem a detenir, no es preocupi. Fresc. Així que crec que alguna cosa que David té Ja tipus d'esmentat en la conferència i Jason ha al·ludit tipus de al dia d'avui és el que una biblioteca és. Així que en la programació, tenim aquestes coses anomenades biblioteques. Quan, en essència, tot s'és només un conjunt de les funcions, és a dir essencialment només codi que és ja ha estat escrit per algú més que tots podem utilitzar dins dels nostres programes. Llavors, com una normal de treball de la biblioteca, oi? Vostè entra a la porta de la biblioteca. Vostè té tots aquests llibres que vostè pot treure i es pot accedir a la informació dins d'aquests llibres. El mateix en la programació. Vostè té una biblioteca que ja té escrit per altres persones. I la forma en què es pot, com a programador o un estudiant, pot tenir accés a aquesta biblioteca és a través del hashtag # include. Per exemple, en C que tindrà tres C-- més comunament utilitzat tres estàndard C libraries-- la biblioteca d'entrada / sortida, la biblioteca de cadena, i la biblioteca de matemàtiques. Així que dins de la seva primera problema de parella fixa, aquests seran els tres que vostè està utilitzant principalment. Així com David ja va explicar en conferència, l'E / S estàndard biblioteca o la biblioteca estàndard d'entrada / sortida fa exactament això. Li permet, en el codi, a l'entrada qualsevol cosa, des de l'usuari i de sortida que a la pantalla, essencialment la impressió a la pantalla. I així, cada vegada que utilitzi qualsevol de les funcions, per exemple, la funció printf (), que anirem a la següent diapositiva, vos d'incloure l'estàndard d'E / S biblioteca o en cas contrari no va a ser capaç d'utilitzar la funció printf (). Perquè, com el programador En realitat mai va escriure aquesta funció, vostè està utilitzant algú codi d'una altra persona dins del seu propi codi. Fa que tothom té sentit? Fresc. I llavors essencialment arribem a la biblioteca string.h i la math.h biblioteca, .h simplement vol dir biblioteca, altres biblioteques que eventualment a utilitzar dins del seu codi. No obstant això, per als propòsits d'aquesta biblioteca, també tener-- d'aquest class-- també tenim el que s'anomena la biblioteca CS50, cs50.h, en el qual, per la seva lectura han creat moltes funcions importants i útils. Així que com a programador pot costes fora el que ja hem escrit perquè de disponible aquesta funció per a vostè per al seu ús. Vaig a estar cobrint un parell de les funcions d'ús comú, però saben que aquests són tot Googleable línia. Siéntase lliure, tiri cap amunt de la biblioteca i CS50 llavors vostè té totes les funcions allà. Sí. ALTAVEU 5: Així que si vostè no estava usant el programari que es proporciona nosaltres per la classe, fa que significaria que hauríem de descarregar i trobar aquesta capçalera presentar a nosaltres mateixos i dir l'equip en el que és? ANDI Peng: Molt bona pregunta. Exactament. Així que és com si no estàs físicament present en una biblioteca, no hi ha manera perquè vostè pugui realment anar i accedir-hi. Així mateix amb la programació en C, ha de assegurar-se que vostè està utilitzant la nostra aparell perquè la biblioteca ja està s'han incorporat en ella. I després, quan hashtag #include, de la biblioteca allà. Sí. Bona pregunta. Cada un de bo? Fresc. Tot bé. Així que anem a colpejar, en essència, el que és la primera funció que que com a programadors són utilitzarà dins del nostre codi. Això es diu la funció printf (). Així, la funció printf (), ja que no tinc ja s'ha dit en l'última diapositiva, està inclòs en l'estàndard d'E / S, estàndard d'entrada / sortida, biblioteca. Així que assegura't del que sigui que estiguis using-- oh, deixa agafar el làser pointer-- cada vegada que vostè està utilitzant la funció printf (), vostè ha d'incloure l'estàndard d'E / S biblioteca o bé, quan es compila, vostè va a obtenir un error perquè l'equip va a ser com, oh No sé on printf () és, que no m'estàs dient on printf () és. Bé printf () està inclòs en el I / S estàndard, de manera que quan s'utilitza printf (), vos d'haver de línia per sobre del seu codi. Així, per exemple, printf () aquí és una funció. Tot el que fa és imprimir alguna cosa dins dels parèntesis per a l'usuari. Algú vol prendre una punyalada al que aquesta línia de codi correcte aquí es va a imprimir? Per tant, la resposta està a la pantalla. Qualsevol persona? VERDI: La part inferior. ANDI Peng: Verdi, ¿per què no et vas endavant i dir tota la declaració? VERDI: Hola, em dic Andi, i tinc 20 anys d'edat. ANDI Peng: Ah, encantador. Així que en aquesta línia anem a imprimir, Hola, em dic Andi, i tinc 20 anys d'edat, que és de fet una declaració veritable. Sintaxi. Així parell de qüestions sintàctiques que vostès vol assegurar-se que vostè sap. Cotitzacions. Les cometes dobles expliquen la equip que tot l'interior es va a imprimir. Tot dins de la llauna acaba de ser exactament com escriu que, a excepció de comunament a l'extrem, anem a voler incloure 1 hash-- oh sorry-- un guió n. Així que un guió n. Algú vol prendre una conjectura en el que fa al nostre codi? Sí. ALTAVEU 6: posa en una nova línia. ANDI Peng: Exactament. Així que tot això fa és permetre que passi el que passi després d'això, després d'aquesta declaració, a imprimir a una nova línia. Així que quan vostè està escrivint el seu codi que no té les coses a l'atzar tatxes fins al final que no vol. Que tot es torna prolixament imprès una línia i després vam començar a la línia següent. Algú recorda el que punt i coma fa quan estem de codificació? Sí. ALTAVEU 7: Declaració. ANDI Peng: Ho sento? ALTAVEU 7: Acaba la declaració? ANDI Peng: Sí. Així que en C, o qualsevol programació el llenguatge, el punt i coma denota el final d'una línia de programació. Així per exemple, en anglès utilitzem període dir, oh aquest és el final d'una frase. En la programació, el mateix, tenim una punt i coma per indicar el final d'una línia. Moltes vegades, quan estàs començant a programar, vostè es dóna compte oblidi afegir un punt i coma i després intenta executar la seva codi i no funciona. I vostè és com, Ah, no ho sé sé per què, que hauria d'estar treballant. És probable que vostè probablement ha oblidat un punt i coma o un suport o alguna cosa en algun lloc. Llavors, això és important recordar. Fresc. D'acord, a mà alçada, com moltes persones aquí tenen cada vegada presa AP Ciències de la Computació o programat en Java abans, alguna vegada? D'ACORD. Preciós. Això no és aplicable llavors, però en Java, tenen alguna cosa que es diu System.out.println que no existeix en C. Així que en C, sempre que que voleu afegir a les variables en tot el que vulguis imprimir, hi ha una sintaxi específica que utilitzarem. Això es diu la placeholding-- essencialment afegim marcadors de posició en el seu lloc del nombre enter o la variable que volem imprimir. Així com vostès poden veure que hem inclòs una nova capçalera biblioteca arxiu aquí. La biblioteca CS50. I continguda dins d'aquesta biblioteca CS50 és una funció comuna que utilitzarà en el nostre curs anomenat getInt (). Algú vol prendre una punyalada en el getInt () possiblement pot estar fent. AUDIÈNCIA: [inaudible] ANDI Peng: Ho sento. No es podia sentir. Maddie, ningú. MADDIE: Oh, se li sol·licita per un sencer. ANDI Peng: Exactament. Així aquesta funció, un altre funció que ja està estat escrit per algú més que podem demanar a ara. Tot el que és és demanar al qualsevol usuari, per introduir el que vulguis com el codi executa i emmagatzema whatever-- en aquest cas estem getInt () - ing, el que significa que estem l'obtenció d'un nombre enter. I anem a emmagatzemar que en un altre nombre enter que simplement hem fet cridats edat. Això té sentit per a tothom? Fresc. Així que ara que hem emmagatzemat aquest sencer, que hem ens impulsats des de l'usuari, en aquesta variable, tenim creat de tipus int anomenada edat, podem seguir endavant i lloc aquesta funció en la nostra printf (). Així que la sintaxi general de printf () és que allà on en el seu físic real línia que voleu incloure aquest nombre sencer, vostè fa aquest símbol aquí, el símbol de percentatge, amb el tipus de variable que desitgi. Així que en aquest cas l'edat és un nombre sencer. Així que anem a incloure % I perquè és un nombre enter. I després després de la seva declaració, vas fer coma i el nom de la variable. Així que aquí, anem a imprimir terme, Hola, em dic Andi, i estic any en blanc d'edat. Hashta-- o, sorry--, amb el que l'edat d'entrada I. Així que si jo fos a l'entrada 20 per a la meva getInt () aquí, seria imprimir exactament el mateix. Però, si volia alguna cosa d'entrada més, com potser 40 o 45, llavors vostè veuria que reflectien en conseqüència en el codi. Així que aquest és un exemple d'alguna cosa en el qual imprimeix i es veu a vostè com si es tracta de la mateixa cosa, però per sota de la caputxa de l'equip hi ha realment coses molt diferents passant. Fresc. Tot bé. ¿I què si volem múltiples variables? Bastant fàcil. El mateix. També tenim una nova funció aquí anomenats GetString (), També s'inclouen dins la biblioteca CS50, que l'únic que fa és demanar a l'usuari per a una cadena, que és només un conjunt de caràcters, així com una sentència o com un nom. Així que en aquest cas, tindríem dues marcadors de posició% s per a corda i% i per sencer. I continuarem que per les dues variables que voleu incloure en l'ordre en què apareixen en la sentència. Així, per exemple, el meu nom és blanc, vull un nom allà, així que vaig a tenir el nom primer. I després després, vull edat, vol tenir segona edat. I així, si volia entrada, Hola, el meu nom és Andi, i tinc 20 anys d'edat. Si introdueix Andi i 20, el exactament el mateix imprimiria; No obstant això, ara tenim dos van guardar variables de nom, així com int. Sí. ALTAVEU 8: Seria capaç d'executar si es canviés Nom i edat al final d'això? ANDI Peng: Sí. Això és realment bona pregunta. Així que conte llarg, no. A causa nom i age-- el tipus de variable és el nom? ALTAVEU 8: String. ANDI Peng: ¿I què tipus de variable és l'edat? ALTAVEU 8: Integer. ANDI Peng: Així que aquí tenim un marcador de posició de corda i sencer, no? Així que si anés a canviar aquests, l'equip no va a saber. Es va a comprovar si hi ha una cadena, i si intenta donar-li un int, que serà com esperi Estic confós, que em va dir que hauria de ser assignació de memòria per a un int. I aquí, quan que espera un nombre enter i li dónes un nom i una cadena en lloc, sinó que també serà molt confús, no s'executarà exactament de la manera que ho necessiti. Així que aquí, nomenant i la sintaxi és molt important per al funcionament de codi. Cada un de bo? Sí. Maddie. MADDIE: Aquí, sé que hem vist en exemples a classe, on demanen ¿Quin és el teu edat, quin és el seu nom. En aquest cas, seria això que doesn't-- si anéssim a executar aquest codi, no demanaria això? Però ho faria només dos números d'entrada i després s'aniria així? ANDI Peng: Sí, exactament. Així que si volia perquè pantalla, si us plau, introdueixi la seva edat, vostè pot afegir una funció printf () que diu: Si us plau introdueixi la seva edat, per sobre d'ella. Aquesta és una bona pregunta. Sí. ALTAVEU 9: Llavors, ja seria inclòs en getInt () [inaudible]. ANDI Peng: No, en realitat no ho és. Així que tot això no és més que impulsa una pantalla buida perquè l'usuari introdueixi alguna cosa. Si vostè ho vol, si vostè ho vol per imprimir cosa que li diu a l'usuari com, si us plau deme la seva edat, llavors vostè hauria de printf () que a tu mateix. A causa de que tothom utilitza aquest funció per a diferents coses, vostè podria estar emmagatzemant l'edat, vostè podria estar emmagatzemant direcció, vostè podria estar emmagatzemant números de telèfon. I el que és realment fins usos individuals dels seus homes ' pel que vols que digui. Sí. ALTAVEU 10: Per tant, només per aclarir, on fer que introduir el nom i l'edat de manera que es mostra en lloc de% s? ANDI Peng: Igual que en l'usuari? ALTAVEU 10: Sí, com la forma de fer jo fer it-- on poso Andi, i on puc posar 20? ANDI Peng: Sí. Així que si anés a realment executar aquest codi, No estic realment executa el codi, això és només aquí en aquest moment. Si hagués de executar el codi, ho faria compilar el codi, fer que l'arxiu, executar el codi, i després ho faria ser només dues places per a mi a introduir-la. Sí. Vostès veuran quan jugues tot amb el codi vostè mateix. Molt bé mourem en la següent secció del estarem cobrint en l'actualitat. Anem a repassar el sentències condicionals són. Així que si vostès recordin i recordar de conferència, sentències condicionals, tot el que són són un conjunt d'instruccions a l'ordinador en que si una determinada condició és veritable, executar el codi dins d'aquesta condició. Així que en essència Scratch-- el gran tema a partir d'avui és que vostès tenen ja tot vist la lògica darrere de tot que estem cobrint. I tot el que estem fent és traduir alguna cosa això va ser molt intuïtiu en Scratch, i difícil de codificació que en la sintaxi que utilitzarà per a la classe que és C. Així que, lògicament, tot aquest bloc era és aquest tros de codi d'allà. Sí. D'ACORD. També ens fiquem en un if ... else declaració que és només una capa afegida de complexitat a la sentència if on l'equip fes un cop d'ull a aquesta i veu si aquesta condició es compleix, fer el de dins d'aquests dos suports, else-- tan poc com el valor predeterminat si no compleix amb la condición-- fer això. És com una forquilla a la carretera. Si està plovent fora, vaig posar en una jaqueta de pluja, cosa gens una altra cosa no em vaig posar una jaqueta de pluja. ¿Aquesta lògica té sentit per a tothom? Fresc. Tot bé. Així com un dur exemple de això que veuríem en C és si jo volia crear un denominades hores de tasca variables. I si les hores de tasca és menys de cinc, dic vida és gran. Es maravellós. No obstant això, diuen que la lluita és real-- que és el que tots en aquest dilluns a la tarda fins Science Hill són probablement fent bé ara-- AUDIÈNCIA: [riu] ANDI Peng: Es forma en què que, gràcies per això. La forma en què podríem codificar això en C és si: assumim ja tenim una variable de tipus int anomenat hores de tasca aquí. Si les hores de tasca està a menys de de cinc printf (), La vida és gran. Recordeu mantenir / n, perquè vols una nova línia després. Impressió Else, La lluita és real. Tothom entén com Em va passar d'aquest bloc en aquest bloc de codi? Fresc. Tot bé. Així que ara anem a fer una ullada a múltiples sentències si en total. Així que anem a assumir la propòsit d'aquest programa era de sol·licitar a l'usuari un grau. Ens ràpida usant getInt () per a una grau, i s'introdueix un valor, i desitja mostrar quin tipus de qualificació que van obtenir. Així que si jo hagués de dissenyar un programa, significa típicament en tots els nostres ulls, El 90-100 és un A, el 80-90 és una B, i així successivament i així successivament. Quin problema hi ha amb aquest peça de codi que no és fent el que vull que faci. Sí. ALTAVEU 11: Tenen límits inferiors, però que no tenen límits superiors. ANDI Peng: Exactament. És que tothom escolta el que va dir? No serà superior límits, però no hi ha límits més baixos. Ho sentim, revés, límits més baixos, no hi ha límits superiors. Així que li agradaria prendre una punyalada en el dir el que es va a imprimir en aquesta pantalla si hagués de executar aquest codi. ALTAVEU 11: un error? ANDI Peng: un error? Gran conjectura, que no està bé. Algú té una altra punyalada? Sí, Aaron. AARON: Si vostè posa en una mica més gran que 90, seria una mostra de tots els graus que tens. Seria demostrar que tens una A, tens un B, tens una C. ANDI Peng: Sí. Això és exactament correcte. Així que, això seria meravellós. No obstant això, són mútuament exclusiu, crec. Si hagués de executar aquest tros de codi. I després direm, jo introduït el grau del 95. Així que 95 ja està guardat en INT crida grau. Així C és un llenguatge que corre per dalt a baix, així que va a sempre previ a fons. Així que vindrà aquí, llegir si grau és més gran que o igual a 90, printf () que va obtenir una A. Genial, tenir un 95, això és més gran que 90. Es va a imprimir, Tinc una A. Va fer una ullada en aquest cas, es va diuen, bé 95 també és més gran que 80, que va imprimir també té un Got un signe d'exclamació B, i així successivament i així successivament. Així com tots podem veure, aquest és un error comú que pot ocórrer quan estem escriure codi a tenir en compte. Qualsevol persona, qualsevol pregunta sobre per això el que estava succeint? Gran. D'ACORD. Llavors, com podem solucionar aquest problema, és, òbviament, la següent pregunta lògica. Bé, tenim aquests bells coses anomenades si una altra persona si la resta si else. Així es pot veure, si vostè vol per canviar aquest problema, volia fer cada un dels condicions mútuament excloents, haurà d'afegir una cosa ... if. I aquests de clar-- pensar en ells com escales, o com esglaons en la ladder-- pot afegir ja que molts d'aquests com vostè desitjar per a tantes condicions com vulgui. Així que aquí, si introdueix grau per ser 95. Si el grau és més gran que 95, printf (), tinc una A. Gran. Es va a veure una cosa ... si i va conèixer, Oh, no, Jo ja va executar la primera persona. Jo sé-- o la primera si: Sé que Jo no he de mirar a qualsevol d'aquests perquè un d'ells ja ha estat cert. Així que va a executar de dalt a baix. Tan aviat com el primer és cert, llavors que passarà per alt tota la resta dels altres ... IFS. Això té sentit? Així, d'aquesta manera vostè té diferents nivells de comprovació i tan aviat com un d'ells és fals, el resta són també, que ni tan sols comprovar. Fresc. Tot bé. Així que aquest és un exemple d'una diferent tipus de sentència condicional veiem amb menys freqüència, però veurem ells i fem servir. I són sovint més eficient per a certs casos. Així que tenim el que s'anomena una sentència switch. Així que abans hem cobert el que és una cosa declaració, un if ... else. Aquí, tenim el que són anomenada sentències switch. Així que quan el fem servir interruptor declaracions és la clau? Així, en una sentència switch, es en general, generalment, en realitat Només pot sencers d'entrada per a la seva variable que s'estigui examinant. Així que si jo volia comprovar per veure si un determinat number-- per exemple un grau, si em van donar un 90. Vull veure si això és una A, B, o C. Jo podria tenir un cas aquí. No obstant això, el cas té a ser un altre constant. Així que en aquest sentit, la sentència switch només pot comprovar la igualtat de dos nombres. No comprova per res més. Així que això és una cosa que és molt cura de quan vostè està utilitzant això. Així que aquí, si volia comprovar per veure si el meu qualificació de 90 és igual a 90 o 80 o 70 o 60, i després d'impressió el grau corresponent, M'agradaria ser capaç d'escriure que en una sentència switch. Així que vindrà aquí, xec és aquest número sencer igual a aquesta constant? Si no, que va a saltar. És igual a la constant dos, i així successivament i així successivament, fins a arribar a l'omissió, si cap d'ells són iguals. Tan aviat com un d'ells s'estableix perquè sigui igual, que va a fer això línia de codi i descans. El que vol dir que va a colpejar aquest córrer, trencar, i acaba de saltar per complet a la part inferior del codi. Així que en aquest sentit el tipus de funcions com un si else if else if comunicat. Així que aquí està un formigó exemple per a vostès. Així que anem a suposar que jo volia crear una variable anomenada anys fundada. I vull demanar a l'usuari que introdueixi l'any en què la seva escola va ser fundada. Així que pot crear una sentència switch aquí. I anem a dir, jo d'entrada 1636. Aquest codi aquí va a veure interruptor any va fundar el que equival a 1636. Es va a veure el cas 1636, oh aquests són iguals, printf () No hauria d'estar en aquesta escola al nord? Perquè se suposa que no ho fan anar aquí si van a Harvard, trencar i pas a la final. Si jo fos a l'entrada de 1701, que Suposo que tots nosaltres ho faria d'entrada, seria ometre aquest cas, anem a cas dos, que és de 1701, i imprimir Benvingut a Yale! Trencar, pas a la final. Cosa que vostè probablement està prenent aquest curs línia en què cas-- impressionant benvinguda a Yale-- que va a anar a la impressió per defecte, Hola Internet! I trencar. Sí. ALTAVEU 12: Es pot utilitzar un altre en lloc de per defecte allà? ANDI Peng: No, perquè el manera que tota aquesta funció interruptor es construeix, la sintaxi que haureu d'majúscules cas per defecte. És com el cas dels altres si, aquesta És un sol cas cas per defecte. Sí. ALTAVEU 13: Vostè potser ja es va dir això, però pot tenir més de dos casos? ANDI Peng: Sí, vostè podria tenir tants casos com vulguis. Penseu en això com la mateixa manera que afegint infinitament successivament. ALTAVEU 14: Si commutada 1701 amb 1636, en realitat no fan un dret diferència? És només serà la comprovació d'ella. ANDI Peng: Aquesta és una molt bona pregunta. I ens toquem això més endavant, però només saben que és l'interruptor declaració es infinitely-- és més eficient del que i si else if perquè opera utilitzant un tipus diferent de la funció que que permet, essencialment, a poc saltar directament a la cas que necessiti per estar en. Sí. ALTAVEU 14: Cool. Gràcies. ANDI Peng: Sí ALTAVEU 14: I no podia veure casos similars, i més gran que. ANDI Peng: No. Llavors, això és el que està limitant sobre la sentència switch és que tens tenir constants només, només nombres enters. Sí. D'ACORD. Així que això és una cosa que vostè nois es trobaran amb menys freqüència de, però jo només volia introduir-lo al cas. Aquí tenim el que és anomenat un operador ternari. Quan en essència, és com un if compila en una sola línia. Aquí, vaig a anar a la següent línia, el pàgina següent, perquè és més fàcil de veure. Així que tots hem vist aquest dret? Això és bastant fàcil de seguir. Si volgués fer una variable anomenada de corda anomenat s, si un cert nombre Li dono és inferior a 100, em vulgueu assignar baixa a la cadena, més que vull assignar alta. Això aquí és fer la mateixa cosa exacta aquests vuit línies de codi estan fent. Així que aquí vull crear una cadena variable. I aquesta és la condició que sóc comprovar, si un nombre és menor que 100, a continuació, s'assigna el valor de la baixa, una altra cosa assignar el valor d'alta. Aquestes diapositives estaran en línia, no es preocupi si vostès no ho entenc això. Això és només una manera més senzilla, una més forma eficaç d'escriure codi. D'ACORD. Així que ara anem a entrar en el que, per a la majoria de la gent són com un molt, molt confús cosa que pensar en un principi. La secció de bucle. Així que avui, parlarem al voltant de tres tipus de bucles. Anem a començar amb un temps bucle, llavors parlar d'un do while, i després parlar dels bucles. Per tant, bàsicament, pels més estudiants visuals per aquí, tenim, en essència, una gràfica descripció del que fa un bucle while. Així que en una programació, que començaria i entrar en el bucle en un moment determinat. Es comprova una condició. I si la condició és veritable, s'executa el codi dins. I vostè es torna al voltant i comprovar. Si continua sent cert que segueix corrent aquest codi voltes i voltes en un bucle. No obstant això, el segon que la condició es converteix en falsa, vostè va a trencar i posar fi al cicle. I això és essencialment el sintaxi que vas a utilitzar. Mentre que una certa condició és veritat a fer això, si no és cert, que passarà a la final i seguir endavant amb el seu programa. D'ACORD. Algú té un exemple en el que pot potencialment succeir si intento executar aquest tros de codi? Per cert, això és Scaz SAJ--, Andi, Jason-- firmarem nostres correus electrònics, L'amor, la SAJ. Aquests som nosaltres. D'ACORD. Algú té un exemple, o tenen una idea del que això imprimir? Tipus d'una pregunta amb trampa. Així que aquí, recordar la condició estem comprovant és per mentre cert. Així, mentre que això és cert, és va a imprimir, m'encanta SAJ! Hi ha algun punt en què ens havíem canviar això a alguna cosa d'una altra manera? No, oi? Així que aquí, tenim trobat el que probablement va a estar molestant molt seus programes, el bucle infinit. Trobareu que si executar aquest tros de codi, que només va a mantenir la impressió, m'encanta SAJ! Si bé apreciem el suport, no volem que els ordinadors a xocar perquè mantenir la impressió M'encanta SAJ! Així que per favor, per favor, evitar el bucle infinit perquè mai va per avaluar en false i mai vas deixar el bucle. I vostè va a ser aspirat sempre. Fresc. D'ACORD. El segon tipus de bucle parlarem d'avui és el do while, do while. I es diu un do while perquè vostè té un do i un temps. Així que això és bastant similar a un temps llaç, però una mica diferent. Aquí, farem el de dins d'aquest mentre que una certa condició és vertadera. Així que si jo fos C i l'ordinador que estic corrent per aquest tros de codi, Trobo una ullada a la part superior. Vaig a C, dic fer aquesta cosa. I llavors puc comprovar, si bé això És cert, he de repetir-ho. Però mentre que això és fals, llavors em moc cap endavant i mai torno a aquest bucle de nou. Algú pot prendre una punyalada al que la diferència entre aquest bucle i la que es va limitar a era pràcticament. Sí. ALTAVEU 15: La condició ve després i no abans? ANDI Peng: Exactament. Així que ella va dir que la condició ve després, no abans. En última instància, la diferència entre aquest i el bucle while és que només farem el de dins d'aquest, independentment de si la seva condició és veritable i, a continuació, comprovar l'estat. Així que en aquest cas, vostè és always-- d'aquesta manera, sempre estàs assegurant el que hi ha dins s'executa almenys un cop abans de la comprovació per veure si voleu que s'executi de nou. I aquí és un exemple quan volem usar-lo. Així per exemple, si jo volia tenir una variable de tipus int anomenada edat, i vull incitar l'usuari per a la seva edat, Jo faré printf () Quants anys tens? edat = getInt (), que és preguntar a l'usuari. I algunes persones serà molt molest. I no vol errors en el seu programa d'algú ingressar com, oh Estic negatiu 4 anys d'edat o el que sigui. En aquest cas, si fer això, això s'avalua true, el que significa que vaig a has de mantenir tornar i fer això. Així que això seguirà re-preguntar a l'usuari per donar-te com un veritable nombre d'anys d'edat i és seguirà endavant cap enrere i refer fins que et donen una veritable edat major que un, o no zero. Així pista, pista. Això serà molt, molt útil per un dels seus problemes PSet. Sí. ALTAVEU 16: Vaja, ho sento. ANDI Peng: Sí. ALTAVEU 16: ¿Hi ha, no per ser un imbècil, però- ANDI Peng: No es preocupi. ALTAVEU 16: ¿Hi ha diferents regles aquí, O simplement s'oblida per posar la cita? ANDI Peng: Oh Yeah. Ho sentim, però això és totalment meu mal. Això va ser sens dubte suposa que és una cita. Bona captura. Això no ha executat. D'ACORD. Així que l'últim tipus de bucle parlarem sobre i, en última instància, la classe dels més complex és el bucle for. No us preocupeu si vostè no ho fa saben el que això significa. És bastant confús al principi. Anem a repassar un exemple. Tot el que succeeix en un bucle for és que té tres estats que es va a incloure. Així que per a una cosa determinada, ets va a inicialitzar una variable. Vas a afegir a la condició de que aquest bucle seguirà funcionant. I després, al final de la llaç, vostè va a actualitzar-lo. Pot actualitzar la variable que vol seguir la pista. Així que normalment utilitzem per als bucles per quan que desitgi executar un bucle per a un certa quantitat de vegades i ja sabem, Oh vull aquest bucle s'executi com 10 vegades, llavors vostè fer-- vaig a anar més un exemple de la pàgina següent. Així que aquí, per exemple, en Scratch, si volia alguna cosa que repetir 10 vegades, tot el que havia de dir era, repeteixi 10 vegades I love SAJ! que és una més acceptable mostra de suport per a nosaltres en lloc de la bucle infinit. En aquest cas, la forma en què ho faria transició a C i d'escriptura és a dir, per int-- Vaig a crear o declarar una variable de tipus int anomenat i. Vaig a inicialitzar a 0, de manera que i = 0; i això serà la meva condició. Així que i és més petit que 10. I després en el end-- l'última declaració que ets tindrà és l'actualització de el que passa amb la variable d'i al final del seu cicle for. Així que és una mica confús, ja que diferents parts d'aquesta línia estan succeint en diferents tipus de bucle. Però vaig a anar a través d'una pseudocodi d'exemple que i potser explicar aquesta només una mica millor. Així que aquí. Aquest és el llaç que acabem de veure. Essencialment en pseudocodi, el que està succeint en aquest programa, és primer que estic creant I, inicialitzar a 0. Estic comprovant si i és menys de 10, en el cas la primera vegada que és perquè 0 és menor de 10. Així, el bucle es va a executar. I després vaig a imprimir aquesta línia. I després, al final d'aquesta línia, a la dreta aquí, jo faré la subhasta i, i ++, tot el que significa és incrementant per un. Així que ara es 1. A causa que una vegada va ser 0, si s'incrementa és, ara es 1. I després vaig a tornar al principi del bucle i puc comprovar l'estat. És la condició segueix sent cert? Sí, 1 segueix sent inferior a 10. Així que va a imprimir de nou, anar i després incrementar I, i se'ls la condició de forma contínua, de forma contínua, fins que finalment aconsegueix fins al punt on i és 10. Vostè va a imprimir això 10 vegades i després em serà igual a 10. Esteu comprovar l'estat. És 10 menys de 10? No, això és fals. Per tant, aquest bucle no va córrer, es trencarà, i vostè va a continuar amb el seu codi. Així com vostès poden veure, aquest És realment un gran exemple d'un bucle es pot programar en aquest té una durada d'una determinada quantitat de vegades. Tot el clar? Sí. ALTAVEU 17: Què hi ha de la subhasta exponencialment, es diferencia de codificació? ANDI Peng: Vostè can-- anirem sobre això en la següent diapositiva. Bona pregunta. És anyone-- abans de passar en-- ningú en absolut confusa, perquè es tracta d'un concepte molt difícil. No es preocupi, si you're-- acord. Fresc. Tot bé. Només una diapositiva general. Aquest bucle mentre està fent la exactament el mateix el bucle for era. És només escrit de manera diferent. Vostès poden llegir detingudament les diapositives a la seva conveniència més tard. Però només sé que hi ha múltiples maneres d'escriure el mateix passarà amb diferents bucles. D'ACORD. Així que, ara ens fiquem en la qüestió de què si tenim un bucle dins d'un bucle. Estem rebent en béns Tipus d'Inception coses aquí. Quan vostè vol fer coses múltiple vegades dins d'altres coses de fer les coses diverses vegades, voler el que es diu un niat de bucle. Per a aquells de vostès que primer veure això i aconseguir molt confús, tot el que estem fent aquí està tenint un bucle on tenim una variable de fila. Però dins d'ella, també tenim una altra per al bucle d'una columna variable anomenada. I li recomano a tots vostès que es confonen per mantenir primer track-- dibuixar això, dibuixeu això. No tracti de justa raó a través d'ell, el assolirà. En el teu cap, en aquest tros de paper, o el que sigui, la fila d'escriptura, no perdre de vista el que la fila és igual. Escriu la columna, fer un seguiment del que la columna és igual a. I no perdre de vista el que és imprimir amb cada iteració. Cada iteració d'aquest bucle, cada iteració del llaç més gran que, només seguir seguint la lògica. I et garanteixo que, t'encantarà el que veus, perquè també és molt aplicable per als seus butlletins de problemes. Fresc. Tot bé. Així que el més important que vostès són probablement tots pensant en aquest moment, són el seu problema Estableixi 1s, que s'han Dijous / Divendres. En el seu programa water.c, Suggeriment tindràs per demanar a l'usuari per a una entrada. Dins del seu programa de mario.c vostè va a tenir per utilitzar un bucle niat per, que és un bucle dins d'un bucle for, per imprimir un bloc de piràmide, en essència com el que Mario ha de saltar a través. I després dins del seu greedy-- o potser Fer realitat el canvi, si algun de vostès alguna vegada ha sentit parlar de això-- vostè va a haver de ser molt cura dels primers valors de coma flotant. Recordeu decimals flotants i sencers no són la mateixa cosa. Porteu un registre de quin és quin. I vostè va a utilitzar sentències condicionals, també. Molt bé, l'últim. Tinc un parell de minuts per al final. Estil. Així que això és una cosa que no es fa en realitat efectuar l'eficiència, o el funcionament real del seu codi. No obstant això, ens afecta com el seu grau, com els seus lectors. Afecta a tu mateix, si ets tractant de trobar un problema. Afecta la llegibilitat del codi. Així estil, com quan vostè està tractant de l'estil d'un assaig per Anglès, si vostè no va tenir paràgrafs, que té tota mena del involucrar junts en una línia, fa que sigui molt difícil per a qualsevol per llegir el seu assaig, fins i tot si seus punts són lògicament so. El mateix en la programació. Vostè pot tenir horriblement fosca codi que Scaz cobrirà, i encara pot córrer i funció. Però per a nosaltres, com els seus precioses TA, l'OMS estar llegint i avaluant els seus conjunts de processadors, això no és molt agradable. Així que si us plau, pel bé de nosaltres i vostè mateix, quan vostè està tractant d'arreglar un problema en el seu codi, i que està tractant de llegir el seu propi codi, que vos de seguir algunes convencions que anem a repassar. Així que en primer lloc. Doni als seus variables de noms significatius. Si voleu emmagatzemar un nombre enter anomenada edat, si us plau nomenar edat. No nomenar alçada. Quan vostè està tractant de emmagatzemar una edat en l'altura, fa que tot molt confús per a nosaltres. No ens agrada ser confós. ¿No li agrada ser confós. A ningú li agrada ser confós. Si vostè va a crear alguna cosa, nomenar-alguna cosa significativa. No obstant això, en bucle, sola les variables de caràcter són generalment molt bé. I en bucle, si vols simplement i, i j, k, no dubteu a fer això. Inicialització consistent. Llavors, què vol dir això? Això vol dir tècnicament, teòricament, pot iniciar i crear múltiples variables en la mateixa línia. Així, per exemple, puc crear un enter anomenat scaz_age, i sencer anomenat andi_age = 20, i un enter anomenat jason_age en la mateixa línia. I també puc assignar només un ells i no als altres als valors. Els demanem que si us plau no facis això. Perquè aquí s'ha creat essencialment 3 variables, però només un d'ells en realitat té un valor. I després, quan estem tractant de llegir el seu codi, o si vostè està tractant d'arreglar un problema en el seu codi, és molt confús per seguir. Així que per la seva llegibilitat, per la nostra lectura, no facis això. Claus consistent. Algunes persones els agrada posar el seu claus en diferents llocs. En realitat no importa. Només assegureu-vos que vostè és coherent en la seva propi codi d'on t'agrada posar-los. Espaiat consistent. Si poses un espai després d'un bucle, sempre fer això. No es limiti a rebre classe de fer-ho en alguns llocs, no ho fan en d'altres. Tot just sigui consistent. En segon lloc, si algú volgués per examinar la Guia d'Estil CS50, que oficialment tenim una guia d'estil que que totes aquestes convencions diu, i més. Està en línia. És com cs50.net/style o alguna cosa per l'estil. Pot google. La consistència és la clau. Així que no t'ho altres persones estan fent, només assegureu-vos que vostè és consistent dins del seu propi codi. Algú té alguna pregunta sobre això? Sí. ALTAVEU 18: Així que la cosa correcta a veure amb la inicialització només tots ells tenen en una separada línia, és que el que estàs dient? ANDI Peng: Així que poques vegades he succeir això. Però si vostè vol, si volies ser com l'estalvi d'espai en el seu codi, o el que sigui, vostè pot fer això. Els demanem que simplement no inicialitzar una cosa i no als altres. Així que si vostè vol fer int scaz_age, int andi_age, int jason_age, això està bé. Això sí, no inicialitzar un sol i no als altres és tot. Preguntes? Tot bé. Vaig a passar pel micròfon, i el punter làser, i el testimoni a Scaz en aquest punt. Això és incòmode. Aquí està. BRIAN Scassellati: Gràcies. Com és això de so? El so és bo? . Excel·lent. D'ACORD. Així, hola a tots. Vaig a tractar de treballar a través de un exemple pràctic amb vostè. I utilitzarem CS50 de entorn de desenvolupament, el que es diu l'entorn de desenvolupament integrat. I ja has vist aquesta demostrat en la conferència. I en el problema 1 set, ets va tenir una oportunitat per usar-lo, i jugar amb , I acostumar-se a ella, perquè anem a utilitzar- per la resta del semestre. Així que en aquest IDE, vostè té el que sembla com un explorador d'arxius molt tradicional Més en un costat. Vostè té una porció de fins superior a on va per veure el seu codi font, el seu CFile, el codi que escriviu. I a sota sota, podràs tenir una finestra de terminal que es va a utilitzar per tant compilar el programa i per a executar o executar el seu programa. D'ACORD. Així que per donar-nos una mica de fundació, en aquesta finestra de terminal, vostè va a ser utilitzant un conjunt d'ordres que són ordres estàndard en tot la majoria dels sistemes Unix o Linux. I pel que si vostè ha utilitzat alguna vegada qualsevol forma d'Unix, Ubuntu, o qualsevol dels altres sabors, aquests van a semblar familiar. Si vostè no té, no es preocupi. No hi ha res complicat sobre ells. Només estan usant una diferent sintaxi, una denominació diferent convencions del que he vist abans. Així que fer una llista dels fitxers dins d'un directori en particular, que van a utilitzar un comandament crida ls, o llista. Si vols veure tot amb tots els detalls, farem servir una ordre argument de la línia amb ls -l. I que et mostro tot en més detall, incloent els permisos per a un arxiu. Per canviar de directori, farem servir la comanda cd. I podràs canviar de directori tant per anar al seu directori personal. Això és tot per cd sí, cd amb de dos punts tornaran vostès se a un nivell al seu directori anterior. I que també pots cd a un subdirectori teclejant cd i el nom d'aquest subdirectori. També es poden crear directoris. I anem a caminar a través d'aquest en tan sols uns minuts. Però només per posar tot a la pantalla. Perquè vostè pugui veure'ls. Vostè també té la capacitat per manipular arxius directament des de la línia d'ordres. Podràs copiar-los, a moure'ls, o per eliminar-los, és a dir, de manera efectiva, per eliminar-los. L'IDE CS50 li dóna el ple poder dels arguments de línia de comandes. I això vol dir que també pots fer coses molt perilloses. D'ACORD. Per exemple, vostè pot eliminar, o que és esborrat, un arxiu sense preguntar per a una confirmació. I fins i tot es pot eliminar recursively-- això és el tauler r flag-- tot un subdirectori i tot el seu contingut. D'ACORD. Estan llistades en vermell perquè ha de pensar "Perill" cada vegada veus aquestes coses. D'ACORD. Tot bé. Ara, per fi, les coses que són serà molt valuós per a vostè, hi ha alguns bons trucs saber el que estàs navegant a través d'aquesta finestra de terminal. En primer lloc, es pot esborrar la pantalla en qualsevol moment amb només teclejar en clar. I vas a veure em faig molt sovint. També es pot simplement mostrar el text d'un arxiu escrivint més i després el nom de l'arxiu. A continuació, serà capaç de desplaçar-se cap enrere i successivament amb aquest just amb la barra d'espai i les tecles de fletxa. Si vostè té, com hem fet avui a la conferència, un programa que s'executa de manera contínua en bucle infinit, que pot aturar aquest programa d'executar escrivint en control, que és la celebració de la tecla Control-C. I és possible que hagi de fer això diverses vegades. L'equip es posa molt per davant de tu. I de vegades és necessari donar-li un parell d'intents abans que en realitat vénen a través. També serà capaç de ordenar a través de les ordres que acaba d'escriure usant la tecla de dalt, clau fletxa, i després la tecla de fletxa cap avall. I el que és més útil és el seu lloc d'escriure els noms de fitxer llargs, podràs a la pestanya ús autocompletar algunes instruccions. Ara demostrarem tots els que en tan sols un segon. Així que si vostè no recorda ells, no es preocupi. Aquestes són coses que vostè va a recollir i utilitzar a mesura que avancem. D'ACORD. Així que en C-- diferència de Scratch-- C és un llenguatge compilat. Això vol dir que tindrem una font file-- aquest és el text que s'escriu, les ordres que vostè escriu, la printf () declaracions, els llaços, tot else-- i anem prendre aquest arxiu i lliurar fora a un programa anomenat compilador. El compilador prendrà que el text que has escrit i traduir-lo en les instruccions binàries que el seu equip és en realitat va utilitzar. Això es diu l'objecte o l'arxiu executable. Si ens fixem en aquest arxiu, vas per veure el codi que has escrit. Si ens fixem en aquest arxiu, vas per veure una seqüència aleatòria de caràcters que no tenen cap sentit. Això és perquè aquest és el binari. No és la intenció perquè vostè pugui estar llegint. No obstant això, cada vegada que volen executar alguna cosa, el que vas que s'executa és l'arxiu objecte. Així que quan treballem amb ells arxius, anem a escriure un arxiu en C. Llavors anem a compilar, utilitzant un comandament com a marca que invocarà l'estrèpit compilador per al llenguatge C. I això produirà un objecte presentar, com una sortida, o en aquest cas, el nom, el meu arxiu, que jo he posat en. Tot bé. Així que anem a tractar en realitat això. Així que es va acudir un exemple del que volia provar. I una de les coses que em fascina és l'animació. Així que anem a tractar de fer una mica d'animació utilitzant només caràcters ASCII. Caràcters que es poden imprimir fàcilment ara. Així que aquí és el meu millor intent a crear per a vostè l'animació d'un conillet corrent a través de l'herba alta. Aquí està. D'ACORD. Així que no està funcionant encara, però és de peu a l'herba alta. Ara bé, si jo fos un animador, en la vella escola versió de l'animació, el que faria és jo produeixo una imatge d'aquest conillet a l'herba. I llavors m'agradaria produir una altra picture-- una altra el que van cridar cell-- que havia mogut el conill només lleugerament. I després un tercer que tenia el conillet es va acostar una mica més lluny. I m'agradaria produir un tot seqüència d'aquestes cèl·lules. Alguns, on el conill ha acabat a la banda esquerra. I després es mou lentament, un per un amb el medi. I a continuació, des de la meitat més a la dreta. I si jo fos llavors, realment sort, vaig poder armar- i podria animar-los. I aquí està el meu conillet corrent a través de l'herba. Aquesta és la meva gran PowerPoint truc per al dia. D'ACORD. Així que això és tan bo com es posa. D'ACORD. Així doncs, aquí un cop més, aquí està la nostra conillet corrent per l'herba. ALTAVEU 19: Un cop més. BRIAN Scassellati: Un més temps, d'acord. Aquí està la seva conillet. D'ACORD. Així que avui el que anem de fer és que anem per intentar automatitzar el procés de de produir aquestes cèl·lules. No bastant arribar al punt de ser capaç de posar a tots plegats. Però, anem a tractar d'automatitzar el procés de generació d'aquesta seqüència. I això és molt del que animació d'avui és com. És a dir, vostè no fa les coses necessàriament dibuixant tot a mà. Nosaltres fem servir un ordinador per automatitzar parts d'aquest procés. D'ACORD. Així que permetin-me commutar ara al nostre IDE CS50. I he creat per nosaltres-- i deixar Em zoom en una miqueta bit-- tinc creat per a nosaltres un punt de partida. Cada vegada que els demanem que seure i escriure una peça de codi, el que realment estem demanant que facis és que estem demanant per resoldre un problema. I la forma en què vostè ha de pensar en fer que és començant amb alguns simple part d'aquesta solució. I després construir a partir d'aquesta part. I això és el que farem avui. Així que en lloc de tractar alhora que escriure tot el paquet de programes que és produirà els 10 cèl·lules d'animació, començarem lloc amb una peça que funciona. I després construirem un poc al voltant d'aquest i una mica més i una mica més. Ara el bo de solució dels problemes d'aquesta manera és que li permetrà començar sempre amb alguna cosa que vostè sap obres i introduir un canvi gradual. I això és una gran manera per aprendre a codificar, ja que cada vegada que realitzi una canvi, ens veiem l'impacte que té. D'ACORD. Així que aquí està el nostre punt de partida. D'ACORD. Així que al principi del meu arxiu, Tinc stdio.h #include hash. Això és el que puc aconseguir l' printf () per treballar. Llavors tinc la meva funció principal. I això encara es veu una mica arcana o fosc per a alguns de vosaltres. Està bé. L'únic que diu és que la funció principal presa mitjans sense arguments-- void res en C. I torna per convenció un enter. Principal sempre retorna un enter, en general un codi dient coses ha anat bé o no va ser així. D'ACORD. Però principal té que haver de formar per a nosaltres en aquest moment. Llavors m'he posat en tres línies de codi. I al costat de cada línia de codi, he posat un comentari. Ara una de les coses que anem a insistir que ho fa, i és com un important pràctica de programació, és per comentar sempre el seu codi. Sempre anoti en un Anglès comentari alguna cosa que creu que la Se suposa codi per fer-ho. D'aquesta manera, més endavant, quan tornes a ell, vostè pot veure-ho i es pot dir, oh, em recordo del que era tractant de fer amb això. O quan un TA es senti amb vostè per tractar d'ajudar en hores d'oficina, poden veure això i se'n van, jo veure el que estava tractant de fer, però en lloc d'això és el que realment està succeint. D'ACORD. Així que tinc tres parts en el meu codi, Vaig a primer lloc d'impressió alguns punts en l'inici. Llavors vaig a imprimir el meu conillet molt elegant. I a continuació, alguns poc de punts al final. I aquestes tres sentències print ha familiar a vostè en aquest moment. Tot el que estic fent a la cada un d'ells és que sóc imprimir una seqüència de caràcters. No hi ha variables que hi intervenen. Tot és simplement. D'ACORD. Així que si vaig per ara al meu terminal-- anem a veure si puc aconseguir aquesta volta fora-- i jo vaig a escriure clara de nou. ALTAVEU 20: Fem servir el doble barra comentar? BRIAN Scassellati: Pot utilitzar el sí double--. Hi ha múltiples formes de deixar comentaris en C. Un forma és utilitzar la doble barra. L'altra és utilitzar una barra i una estrella i després tancar amb una estrella i una barra. Tot bé. En primer lloc, vaig a començar a navegar per aquí. Així que si em vaig al meu directori personal, He canviat directoris allà, Vaig a mirar i veure el que hi ha en aquest directori, ls, llistar a terme. Vaig a veure que tinc té dos subdirectoris. Anem a fer d'aquest una mica més gran aquí perquè tots puguem veure-ho. Veig que tinc té dos subdirectoris. Vaig a canviar de directori per entrar en àrea de treball. I jo vaig a escriure només per part d'ella, i després premeu Tab. I que va completar la resta per a mi. Fancy. Vaig a mirar i veig en àrea de treball. I ara mateix, estic treballant en la supersección que estem ensenyant ara. Així que vaig a entrar en aquest directori. I, finalment, mirar i veure. I tinc aquest arxiu bunny.c. Està bé així que em deixa clar una vegada més. I jo vaig a ara-- nou Estic encara romanent en aquest directori i em diu que estic en aquest directori supersección. Vaig a seguir endavant i fer la meva conillet programa. I aquest comando, feu conillet, mentre que sona una mica estrany, També invoca el compilador so metàl·lic. I ha produït per em una sortida que és 1 funny-- un executable arxiu executable anomenat conillet. D'ACORD. Puc llavors, i això sona pitjor encara, executar conillet. D'ACORD. I anem a veure el que fa. D'ACORD. Això és una mica de el que m'esperava. Tinc la meva imatge del conillet d'aquí, però jo com que volia tot per si mateix. Què m'he perdut? ALTAVEU 21: Raya vertical l ó slash. BRIAN Scassellati: N Slash. D'ACORD. Així que anem a tornar aquí. I vaig a sortir d'això. I vaig a anar de nou a aquest. I anem a fer una ullada ara des del meu funció principal aquí. Llavors, què he de fer? Vull acabar la línia. Així que vaig a posar en un comentari. Vaig a posar en un printf (). I què és el que he de posar? / N. D'ACORD. Què he de acabar amb? Punt i coma. Tot bé. Ara, un dels de veritat coses importants és assegurar- cada vegada que faci un canvi en el codi, que el guardi. Si no ha guardat el codi, que ets va notar una petita estrella allà dalt. I aquesta estrella que diu no han estalviat aquest codi. Si compilar ara mateix, no és va reflectir qualsevol d'aquests canvis, perquè el compilador analitza l'arxiu això és en el disc, no l'arxiu que és obrirà en el seu editor. Tot bé. Així que anem a guardar i després anirem just aquí baix, tornar a sortir. Vine al meu terminal. I anem a aclarir l'espai de nou. I podem seguir endavant i una més temps a que el nostre programa de conillet. I executar el conillet. Això no va funcionar tampoc. Slash incorrecte. Així que si ens fixem en el que tinc, em poso un / N en allà, però vaig tenir la barra malament. Tot el que l'equip fa és molt explícit. D'ACORD? Un petit error de puntuació, i de sobte vostè no aconsegueix el que vol. Tot bé. Així que anem a apropar a sortir de nou. Tornarem. Bé fer que la reparació molt ràpid. Anem a posar la barra dreta. Anem a salvar-la. Tindrem amplia la imatge. Per alguna raó, això no és ser feliç, però seguirem endavant i anem a tornar a la terminal d'aquí. Aclarir-ho. Ens acostem. I un cop més, farem conillet. I ara, efectivament, funciona. Hooray. D'ACORD. Així que anem a tractar de fer d'aquest una mica més general. Anem a veure si en comptes de només imprimir un fotograma concret, anem a veure si podem fer que aquesta perquè puguem obtenir tots 10 d'aquests marcs animats que volíem tenir. Així que de nou, anem a prendre un pas a la vegada. Primer anem a generalitzar, no pel que faig tots els marcs, però també ho faig qualsevol marc que pot ser que vulgui. Llavors, ¿quina és la diferència entre els marcs? És el conill de la mateixa? AUDIÈNCIA: Sí. BRIAN Scassellati: Sí. Quina és la diferència? AUDIÈNCIA: Posició. BRIAN Scassellati: La seva posició, no? I Com puc controlar la seva posició? Quants punts estic posant al principi i el nombre de punts que sóc posant al final. Així que vaig tenir cinc en el principi i al final de cinc. Anem a substituir a la cinc amb un bucle for. D'ACORD. I jo vaig a crear una per a llaç, ara que dirà, Vaig a imprimir un nombre de punts al principi. Vaig a utilitzar una variable. Diguem, què tal i com el comptador en el meu llaç. I jo vaig a declarar sobre de la tapa. I després, en el bucle for He de fer tres coses. El primer que he de fer és el que necessito per inicialitzar i. Què he de inicialitzar que comenci a ser? 0. D'ACORD. Llavors he de dir, el que és la condició de terminació? Quan he parar? Bé quants punts té vostè que voleu imprimir en aquest cas? AUDIÈNCIA: Cinc. BRIAN Scassellati: Cinc de nou? Què tal farem alguna cosa diferent, vam fer 5. Anem a mostrar que és diferent. ALTAVEU 22: Dos. BRIAN Scassellati: Dos. D'ACORD. Així que si vull dos punts, Què he de posar aquí? AUDIÈNCIA: Tres. BRIAN Scassellati: Tres. D'ACORD. Quantes vegades és que passarà? Això passarà per tres vegades, 0, 1 i 2, dreta? Molt bé, tornem a dos. Ara anem a arribar dos punts. ¿I què és el que vull fer cada vegada que vaig pel llaç? El que ha de canviar cada vegada que vaig a través de? ALTAVEU 23: Afegir un punt. BRIAN Scassellati: He de seguir endavant. Vaig a afegir un punt. Vaig a imprimir un punt, cada vegada que a través del bucle. Però com vaig fer el seguiment de com moltes vegades he estat a través del bucle? Estic usant i, que variables, aquest comptador. Així que a través de tot el temps, em vaig per incrementar el comptador en un. Ara, això és el mateix per mi com dient i = i + 1. Està bé. Podria fer-ho que-- M'agrada el taquigrafia, així que vaig a dir i ++. D'ACORD. Anem a fer el mateix aquí baix a la part inferior. Només Jo com que vaig fer això. Vaig a deixar que vostès fer aquest per complet. Tot bé. Llavors, què he d'escriure aquí? Aquí està el meu bucle for. Jo vaig a fer un printf () i em vaig per fer-ho de manera que només s'imprimeix un punt en aquesta part inferior. Què he d'escriure dins d'aquest bucle for ara? Bé, en primer lloc el que variables que hauria d'utilitzar? ALTAVEU 24: j. BRIAN Scassellati: Em vindria bé j. Puc utilitzar el mateix? Puc utilitzar i de nou? Sí. Això està bé, perquè el Is que estic fent servir aquí, Jo no els necessito de nou quan Em poso a aquest punt. Llavors, què hauria inicialitzar i per? ALTAVEU 25: 10. BRIAN Scassellati: 0. Què he de comprovar? Quants punts necessito ara al final si jo tinc dos punts al principi? Necessito de vuit al final, així que el que hauria de comprovar, i inferior a: AUDIÈNCIA: Set, vuit, nou. BRIAN Scassellati: Vaig escoltar 07:00. Vaig sentir 08:00. I vaig sentir nou. D'ACORD. Així que tots estem en el dret ball-- Jason diu 10. D'ACORD. Si necessitava dos punts per el primer, quants fer Jo-- i necessito vuit punts per al última un-- vaig posar dos a dalt, ¿Què he de posar sota? AUDIÈNCIA: Vuit. BRIAN Scassellati: Vuit. A causa de que va a comptar de zero a set. I això és vuit vegades a través del bucle. D'ACORD. I què és el que he de fer al final? AUDIÈNCIA: i ++. BRIAN Scassellati: i ++. Tot bé. Així que això està bastant bé. Anem a intentar-ho i anem a veure el que fa. D'ACORD. Així que anem a guardar-lo. Niça i estalvis. Ens acostem a sortir. Tractarem aquí a la terminal. Ens acostem. Vaya. Ens va a fer, un cop més, fer el nostre programa de conillet. I seguir endavant i executar conillet. I aquí està. Així que el nostre conillet. Quan té dos punts en l'inici i vuit punts al final. Tothom segueix amb mi? D'ACORD. Així que hem construït cap amunt. Construïm un sol conillet, un quadre en particular. Ara que hem estat capaços de generalitzar que per construir més, diferents tipus de marcs. Ara anem a seguir endavant, i tenen que genera no només un marc, però generarem 10 marcs, on a poc a poc fan que el conillet es mou tot el camí a través del camp. Tot bé. Tornem. I anem a tractar ara. Llavors, què és el que realment necessito canviar aquí? Què he de canviar? ALTAVEU 26: Primer ha de canviar el nombre màxim de punts al principi. Perquè si estem fent 10 punts, que necessitarà fins escalar. BRIAN Scassellati: Sí. Així que ara he de tipus de cablejat fer sempre dos punts al començament i sempre fer vuit punts al final. Vull construir un altre bucle, oi? Perquè jo no vull construir una sola imatge del conillet, Vull construir 10 fotos de conill. Així que necessito per construir un altre bucle, i com vaig a través d'aquest llaç, Vull canviar el nombre de punts que s'imprimeixen al principi i quants punts puc imprimir al final, basat en quin cicle a través del bucle M'hi apunto. Tot bé. Així que anem a un altre comptador. Algú va dir abans de j, així que farem una altra j. I ara, anem a construir un altre bucle for. El que va dins d'aquest bucle? Aquest material ha d'anar dins del bucle, oi? El conillet té anar dins del bucle? Em cal un conillet en cadascun dels 10 quadres? AUDIÈNCIA: Uh-huh. BRIAN Scassellati: Sí. Vull un conill en cada dels 10 quadres, oi? Què hi ha dels punts de Al final, què necessito això? D'ACORD. Així que vaig a sagnar tots ells. En destacaré tots això, i vaig a colpejar Tab. I això va a empènyer tot una mica, pel que és fàcil per a mi a veure el que hi ha al circuit. I després vaig a acabar la mateixa. Diguem. D'ACORD? Ara, en aquest bucle que Estic building-- crits, fer que pel que pot veure- Tinc el meu comptador j. Vaig vaig començar a 0. Quantes vegades el que vull anar a través d'aquest circuit? AUDIÈNCIA: 10 vegades. BRIAN Scassellati: 10 vegades. Llavors, quin nombre he de posar aquí? AUDIÈNCIA: 9, 10. BRIAN Scassellati: 9, 10, algú ha de dir 11, ¿no? Volia dos punts abans i posar i menys de 2. Volia vuit punts, Vaig posar i menys de 8. Ara vull anar a través de 10 vegades, així que van posar j inferior a: AUDIÈNCIA: 10. BRIAN Scassellati: 10. Cal anar. I què he de fer al final de j? ++, Incrementar-lo. D'ACORD. Ara, aquí hi ha la part difícil, el que és passarà ara si faig això? ¿Vaig a imprimir 10 quadres? ALTAVEU 27: Crec tots ells van a ser els mateixos. BRIAN Scassellati: Ells tot sigui el mateix, no? Com que tots ells estan encara va posar dos punts al principi. Però no vull que tots ells tenir dos punts al principi. Quants punts fer jo vol al principi? AUDIÈNCIA: Canvi. BRIAN Scassellati: I volem que canviï, oi? Llavors, què he jo aquí que està canviant cada vegada que el bucle passa per? AUDIÈNCIA: Nombre de punts, j. BRIAN Scassellati: j, el nombre de punts. Així que puc canviar això a ser j. La primera vegada a través de la llaç, què és això va a ser? Què puc configurar j per al principi? AUDIÈNCIA: 0. BRIAN Scassellati: Llavors, quants vegades vaig a fer això? 0. La segona vegada a través del bucle, j de serà 1 perquè incrementar-lo. Quants punts vaig a imprimir? 1. La tercera vegada a través del bucle, quants punts vaig a imprimir? AUDIÈNCIA: Tres. BRIAN Scassellati: j va a ser 3. Quants punts vaig a imprimir? Oh, ho sento, j Va a ser 2. Quants punts vaig a imprimir? AUDIÈNCIA: 2. BRIAN Scassellati: 2. OK, així que seguiré increment que a mesura que avancem. Què hi ha de sota? Què passa aquí? No vull 8 sempre a l'extrem més? ALTAVEU 28: 10. BRIAN Scassellati: Vull 10 punts? Vull que canviï, també. Llavors, què vull que canviï? AUDIÈNCIA: [inaudible]. BRIAN Scassellati: Bé, si jo tenir cinc punts al principi, quants de punt puc arribar al final? AUDIÈNCIA: Cinc. BRIAN Scassellati: Si tinc sis punts al principi, quants puc arribar al final? AUDIÈNCIA: Quatre. BRIAN Scassellati: Si tinc set punts al principi, quants puc arribar al final? AUDIÈNCIA: Tres. BRIAN Scassellati: Si tinc j aconseguit punts en el començament, quants puc arribar al final? 10-j. D'ACORD. Així que anem a tractar d'això. Així que em vaig a salvar el nostre programa de conillet. Un cop més anem a allunyar. Anirem al nostre terminal. Anem a aclarir-ho. I fer un zoom. Farem el nostre programa conillet, nou. I anem a executar-lo. UH oh. Espera, anem a allunyar. ¿Vaig obtenir 10 quadres? Bé, quants conillets què veig allà dalt? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Tinc 10 fotogrames. Són tots iguals? AUDIÈNCIA: Sí. No. BRIAN Scassellati: No. Aquesta primera, la conillet està lluny de l'esquerra. I aquí, el conill és el moment en el ALTAVEU 29: Dret. BRIAN Scassellati: Així, el que em vaig oblidar de fer? ALTAVEU 30: Iniciar una nova línia. BRIAN Scassellati: He oblidat per iniciar una nova línia, de nou. El mateix error que vaig fer abans. Molt bé, arreglarem això. Ara, encara tinc el codi allà per fer una nova línia. Per què no funciona? ALTAVEU 31: No és dins del bucle. BRIAN Scassellati: Oh, no és dins del bucle. Això és correcte. Està assegut fora d'aquí. I el bucle for és tot això és dins d'aquest text. Així que em vaig a moure això dins del bucle for. I vaig a Tab davant mostren que està en el lloc correcte. I ara, anem a guardar de nou. Anem a allunyar. Canviarem al nostre terminal. Ampliar. Anem a refer el nostre programa de conillet. I ara, ara tenim els nostres 10 fotogrames. [Aplaudiments] BRIAN Scassellati: OK. So. Aquí està la nostra niat per als bucles. Hem estat capaços de generar en el bucle intern quants punts que volia imprimir al començament, al final. I el bucle exterior controlat el nombre de fotogrames que estava construint. Comencem amb un petit nucli del problema, i construïm a partir d'aquest punt. Tot bé. Anem a fer un pas més. Estàs preparat? Hi ha una cosa aquí on hem realitat una mica vam aconseguir major complexitat del que necessitem. Anem a fer una ullada. Així que en el nostre programa d'conillet, si Allunyar aquí, De fet, em faig part de la mateixa cosa una i altra vegada. Què he de fer això és una mena de el mateix repeteix dues vegades? ALTAVEU 32: Imprimir els punts. BRIAN Scassellati: Sí Imprimeixo aquests punts dues vegades. En realitat, jo hauria de tenir aquest comentari aquí. Imprimeixo alguns punts en el començant, fins aquí. I després imprimeixo alguns punts al final. I ho faig tipus d'exactament la mateixa cosa. El que anem a començar treballant en les pròximes setmanes és ser capaç de prendre aquests blocs de codi que usem una vegada i una altra, i mitjançant un procés anomenada abstracció, anem a treure'ls i escriure una vegada perquè puguem llavors reutilitzar una i altra vegada. Així que intentarem això. A punt? Anem a prendre aquest bloc de codi. I jo vaig a treure'l d'allà. I jo vaig a define-- cap avall a la part inferior, Vaig a escriure una nova funció. No va tornar res. I jo vaig a dir-printDots. Es va a prendre 1 argument, un enter que diu howManyDots he d'imprimir. I ara en lloc d'imprimir j punts, vaig a imprimir dir-li howManyDots he d'imprimir. I hi ha un petit problema aquí. Algú sap el que és? Què he que apareix a la llista aquí això no està definit? AUDIÈNCIA: [inaudible] BRIAN Scassellati: Bé, com molts punts es defineix fins aquí, però estic fent servir aquesta variable i. Així que em vaig a prendre aquesta variable i i jo vaig a definir-la en aquí al seu lloc. Així que ara que va a estancia-- perdó, va aconseguir el bloqueig de majúscules en somehow-- estic seguirà i en aquí. Així que ara aquí està la meva petita funció o sub-rutina, i diu, quants punts vaig a imprimir? I que va a anar a través d'aquest llaç i imprimir una i altra vegada. Llavors puc modificar el meu programa aquí. I ¿què em dic aquesta funció? printDots. Així que vaig a trucar printDots. Quants punts és el que vull per imprimir primera vegada davant el conill? AUDIÈNCIA: j. BRIAN Scassellati: j. Quants punts és el que vull per imprimir al final, després que el conill? 10-j. I hi ha una cosa que em falta. Com es va veure en la conferència d'avui, anem a declarar printDots fins abans per donar el prototip. D'ACORD. Així que el que he fet és que he intentat aïllar aquesta part de codi reutilitzat que he fet una i altra vegada. I he tractat de treure-ho de manera que tot això està contingut en un sol lloc. D'aquesta manera, si tinc un error en algun lloc, Només he de arreglar en un sol lloc. Tot bé. Així que anem a guardar-lo. I anem a fer de que funciona. Així que ens en sortirem. Anem a anar de nou a la nostra terminal. Ens acostem. Anem a fer aquest procés conillet. Oh. I m'ha donat una advertència. Què és el que em diu? Bé en qualsevol d'aquestes vegades, sempre volen per desplaçar-se fins al primer error-- Ara en aquest cas, només tinc un. Em diu en bunny.c, en la línia 8, la columna 9, hi ha un problema. Es diu, que ha declarat aquest i variable i vostè no l'ha fet servir. Ara, normalment, això és no és el pitjor error. Aquesta és una tasca fàcil d'arreglar. I de fet, podem tornar enrere en el. Podem tornar a Bunny. I en aquest cas, tot el que han de fer és desfer-se de I, perquè no estem fent servir i dins de principal més. Estem usant-ho dins la nostra sub-rutina. Així que anem a guardar això. Tornarem. I fer un zoom. Anem un cop més fem conillet. I allà estan els nostres 10 fotogrames. D'ACORD. Cada vegada que li donin 1 procedure-- Sí. ALTAVEU 33: Tinc una-- Estic confós. ¿Es pot tornar al codi? BRIAN Scassellati: Sí. ALTAVEU 33: Així que, quan vas escriure el seu prototip, l'argument que si hagués anomenat va ser cridat howMany? Però, below-- BRIAN Scassellati: Ah, sí. ALTAVEU 33: elles --denominat alguna cosa diferent, jo no ho entenc. BRIAN Scassellati: Per què són diferents. Així que aquesta és una gran pregunta. Per tant el dubte era, fins aquí, vaig escriure howMany, i avall, vaig escriure howManyDots. La raó és que en el seu prototip, en realitat no està prestant atenció als noms que vostè està posant en. Tot el que realment li importa és que és un enter. Es vol saber la forma del que vostè està posant en. Ara stylistically-- oops-- el que hauria No, és que m'agrada fer aquests partit. D'ACORD. A causa de que serà mantenir- més fàcil per a mi recordar. Però això va ser el meu error Sí. ALTAVEU 34: I així per al prototip funcioni, simplement escrivint aquesta línia, escriure el prototip, permet que la funció que ve just a sota d'ell per anar a la final i recuperar el que això significa? BRIAN Scassellati: El que significa és quan el compilador passa per, que va des de la part superior de el codi per a la part inferior. I el que aquest prototip és, és que és bàsicament una promesa. Diu que serà una funció definida en algun lloc. Va a ser cridats printDots. I va a prendre un argument això va a ser un nombre enter i que va a tornar res, nul·la tipus. D'ACORD. Els prometo que serà definit algun lloc del camí. Però cada vegada que veure que, a mesura que avança cap avall per la resta de la meva funció principal, que vull que tractis de que en funció que pren una entrada sencer. I així, quan el compilador cau a través d'aquest, es veu aquesta promesa. I quan es posa a sota, segueix endavant, segueix endavant, que troba la primera vegada s'esmenta printDots. I diu, Oh, vostè està donant mi aquest j. j és un nombre sencer. Bé em va prometre que faria ser un enter i això és correcte. Està bé. I, finalment, cap avall a la part inferior, abans d'arribar a la final del meu arxiu, faig la meva promesa i jo ho defineixo. D'ACORD? ALTAVEU 35: Per tant, la saves-- programa guardarà els espais en blanc que va i plena al final? BRIAN Scassellati: No és sobre l'assignació de memòria. En realitat és només del Tipus estàs esperant veure. En cas que aquesta cosa en té un argument, o cinc arguments? En cas d'haver de ser nombres enters que se li dóna, o cadenes? Això és tot el que està buscant de fer és comprovar, m'estàs donant la tipus d'argument. D'ACORD? Tot bé. Déjame que et deixo amb una mica per mirar. Art ASCII no és el gran model de l'animació com ho és avui. Però algunes persones, per descomptat, prendre les coses i empenyen als seus extrems. Això és, com David va demostrar en la conferència, una peça de codi que vostè deu en cap cas tractar de duplicar vostès mateixos. A causa que és terrible estilísticament. De fet, està dissenyat per a ser tan més difícil possible de llegir. D'ACORD. Així que, per fer de nou, anem a apropar aquí. Vaig a anar ara, canvi de directori. Vaig a pujar un nivell, de nou al meu espai de treball. Vaig a continuació, canviar de directori en aquest un altre directori que he creat. I aquesta és la Internacional Ofuscat C Programming Contest. Mitjans ofuscat com dur com sigui possible d'entendre. Així que per favor, no t'espantis si et fixes en això i va, no puc llegir això. Aquest és el punt de la mateixa. D'ACORD? Però, tenim aquesta meravellós programa que estic va a mirar amb només teclejar més. I anem a veure si puc allunyar només una mica, així que vostè pot veure-ho I aquest és el programa. Es diu endo.c. I sembla que aquesta galleda amb tipus de les lletres F-L-O-I-D en el mateix. Això és en realitat un programa. Està escrit en el més fosc de manera que els autors poguessin possiblement escriure-ho. Però és un petit tros meravellós que genera un model de dinàmica de fluids. I així ens donarem aquest model d'una entrada que són aquestes, d'un staired conjunt de contenidors amb una mica de líquid, alguns líquid, a la part superior. I anem a haver de simular el que està succeint a ell. Així que vaig a trucar a aquesta funció, endo. I vaig a donar-li aquest arxiu d'entrada que he tingut. I no és la nostra epítom de l'art ASCII. Un simulador de dinàmica de fluids completa funcionant en unes poques línies de codi. Ara, què és realment molt sorprenent d'aquest petit programa és que em vull parar ara, així que vaig a utilitzar el comandament? AUDIÈNCIA: Control-C. BRIAN Scassellati: Control-C. D'ACORD. Així que vaig a utilitzar Control-C. C Que va a aturar-lo. Vaig a esborrar de nou. I ara vaig a invocar la programa, executar el programa, utilitzant com a entrada. I anem a veure la dinàmica de fluids simulació que es fongui. D'ACORD. Si us plau, no deixi que el programa ser el que et confon. És només perquè puguem acabar en alguna cosa fresc i interessant. D'ACORD. Bona sort amb els seus conjunts de problemes. Estarem encantats de respondre preguntes després de classe. Gràcies molt, nois.