[REPRODUCCIÓ DE MÚSICA] ANDI Peng: Això és CS50, i Benvinguda a la setmana dues de la secció. Això és en realitat mentre setmana dos dels nostres class-- realitat, la primera setmana que hem tingut secció. Aixecant la mà, quants de vostès va arribar a súper secció de la setmana passada? OK, això està bé. Està bé. Quants de vosaltres vist Super secció de la setmana passada? D'ACORD. I vostès van fer bé el problema d'establir una? Així que vaig a considerar que tenim un grup de nens molt intel·ligents en aquesta classe i les coses van bé. D'ACORD. Així primer-- En primer lloc, només anem a actualitzar breument repassar l'ordre del dia d'avui. Anem a parlar de la logística del curs. Molts de vosaltres probablement té preguntes sobre com les coses funcionen en aquest curs. Anem a respondre-hi. Anem a actualitzar breument anar més bucles en cas qualsevol de vostès van perdre súper secció. Parlarem de mapeig ASCII. Parlarem sobre les matrius, funcions, arguments de la línia d'ordres. I, finalment, el que vostès probablement tots realment vull ser aquí per aprendre, és la seva PSet2. Tindrem alguns trucs agradables i consells sobre com fer això. D'ACORD. A més, en segon lloc, tenim un munt de caramels aquí. Qualsevol persona que li agrada el caramel, acaba d'arribar aquí. Agafa una mica. Tinc un munt. Tenim una tona a l'oficina. Jo realment no vull menjar dolços durant tot el dia. Vostès han de menjar tots els dolços, perquè jo ho vaig portar aquí per a vostès. Només menjar dolços. Hi haurà dolços cada secció. Així que primer, qui sóc jo? El meu nom és Andi Peng. Jo sóc el cap de TA CS50 aquí a Yale. I a més de això, també es ser-- si a algú li com-- seu funcionament amic, el teu espatlla per plorar. Si la nit anterior a causa del seu conjunt de processadors, no tens idea del que està passant, Avisa'm. Ens compadim junts, etcètera. Només sé que sóc aquí com un recursos per a vostè com la línia del front per ajudar els nois esbrinar com per resoldre problemes en CS50 i més enllà. El meu correu electrònic és andi.peng@yale.edu. També enviaré a un individu correu electrònic amb el meu número de telèfon en el mateix pel que no tot el món en el Internet pot veure el meu número de telèfon. No dubti a trucar-en qualsevol moment. De debò, el meu telèfon és en general adjunt a la mà. Puc no respondre en un parell de minuts. Puc no respondre aquí a un parell d'hores. Però els puc garantir, si em correu electrònic, si em crides, text mi, vaig a respondre dins de 24 hores. Sovint, respondré abans que, perquè entenc que tothom té alguns problemes, i desitja que les seves respostes per respondre molt ràpidament. No obstant això, si vostè diu Em 30 minuts abans aquesta peça que s'ha de dijous nit-- ser així, Andi, ajudeu-me, No he started-- puc donar que espatlla per plorar. Però potser és hora de pensar en com no fer-ho la propera vegada. D'ACORD. Vaya. Com puc tornar? Som-hi. Així que en aquest supòsit, tenim una tona de suport per a tots. A més de simplement seccions aquí, que vostè cada setmana arribar a passar 90 meravellosos minuts amb mi, també tenim horari d'oficina. Quants de vostès ja tenen estat de les hores d'oficina a la recerca d'ajuda? Gran. Això és molt bo per veure, perquè ens amb una plantilla de més de 45 TA i CA entrenat per a aquest curs que és aquí per ajudar nois amb els seus conjunts de processadors. Els dilluns estan duen a terme a la garjola aula en 17 Hill House aquí a Yale. Dimarts i dijous, que estan duen a terme en béns comuns. 8: 00-11: 00 gairebé tots els dies de la setmana. Entra, sortir. Qualsevol problema, sense problema-- acaba d'arribar d'ara endavant, i després l'ajudarem amb això. En segon lloc, a més de les hores d'oficina i les seccions, també tenim pantalons curts. Algú ha vist un parell de la pantalons curts o recorreguts en els vídeos en el lloc web? D'ACORD. Així que són molt, molt servicial. La nostra bella producció de Harvard equip enllà en aquesta escola cap al nord, s'han filmat i produït aquests vídeos tutorial increïbles. Van a prendre pas a pas a través de com fer per resoldre un problema. Sovint, si vostè està confós sobre un concepte senzill, un concepte singular, fer una ullada, perquè és probable que un curt en algun lloc al nostre lloc web. I en general és un gran recurs buscar quan estàs primer perdut sobre com manejar un problema. En tercer lloc, també tenim study50 i reference50. Així que estudiar 50 al lloc web és només un enllaç. És, crec, study.cs50.net o alguna cosa per l'estil. Només Google ell. Tenim un munt de mostres preparades. Tenim un munt de pantalons curts i coses walkthroughs-- tot compilats molt agradable i net per a tots vostès nois per navegar a través, consulteu qualsevol concepte que vostè està confós sobre. Seria probablement serà cobert allà en study50. Reference50-- similar. Tenim una gran quantitat de diverses notes fàcilment disponible per a la seva disposició. I finalment, tenim el que és diu CS50 Discutir, un fòrum en el qual, si la nit anterior que està fent els seus problemes, diu, vostè té una pregunta. Entre per CS50 Discutiu. Publiqui una pregunta. I llavors un dels hundreds-- potser, thousands-- de companys prendre aquesta classe en línia s'ingressi. I potser algú pot aconseguir la seva resposta abans d'una llauna TA. Bàsicament es tracta de només una fòrum en línia que tots podem utilitzar per discutir els nostres problemes. Això està bé. D'ACORD. Així que el problema es posa. Estem a punt just en el gruixuda del problema plantejat dues. Molts de nosaltres ja té lluitat a través d'un problema d'un conjunt. Ja sabem que potser esperant per a l'última nit per fer la seva pset No és la cosa més intel·ligent que fer en CS50. Consells i suggeriments essencialment per l'èxit es llegeixen tota l'especificació. Quants de vostès ja tenen llegir l'especificació de conjunt de processadors 2? D'ACORD. Aquesta és una quantitat sòlida. Sé que vostès probablement han reconegut per ara les especificacions són realment llarg. Són molt, molt llarga. És realment difícil de llegir cada línia d'aquesta paraula acuradament per paraula. Vostè vol simplement descremada a on que et diu que facis alguna cosa. Et puc garantir, no facis això. Si ho fas, és probable que va perdre alguna part on se li diu com iniciar un problema o que et diu quin nom El seu problema o se li diu, aquesta és probablement la millor manera per començar a fer el seu problema. I llavors se li va perdre. Quan intenta llegir el seu spec meitat, una gran part de l'important informació-- en que no estàs serà capaç de realment accés. Així que llegeixi tota l'especificació. Intenta llegir tota l'especificació abans d'arribar a la secció, perquè llavors, quan ens parlar del conjunt de processadors, que tots podem tenir una idea del que està passant. En segon lloc, aquest és un concepte que m'agradarà fer referència molt al llarg del semestre del curs. Però, en essència, la nostra trobada a mig camí, no? Jo, com el seu ajudant tècnic i Jason com a plat gerent i Scaz com el seu professor i David com el seu professor i tots els altres tes encantadores en aquest curs, assistents en aquest clar-- farem el nostre millor per assegurar-se que s'estableixen fins per tenir èxit en aquest curs. Anem a celebrar secció. Tindrem hores d'oficina. Anem a respondre al seu telèfon trucades, respondre als seus correus electrònics, fer tot el possible perquè Assegureu-vos que les seves preguntes siguin contestades. No obstant això, ens ajuden massa. Reunir-se amb nosaltres fins a la meitat. Si véns a les hores d'oficina no haver anat a la secció, no havent vist les conferències, en no tenir idea del que està passant, ser, que m'ajudi. Jo seré com, bé, ho sento. Potser és el moment de prestar que espatlla per plorar, perquè no estic segur el que puc fer per ajudar-te si no s'intenta almenys ajuda a tu mateix una mica al principi. Reunir-se amb nosaltres fins a la meitat. Ja saps, si us plau vingui preparat per respondre i obtenir a punt per participar en el material. Fa les coses molt més fàcil per a tots els involucrats. Sí, això és pràcticament tot. Classificació. Així que en el pla d'estudis, és bastant en profunditat en relació amb la forma en què grau. Però, en essència, el desglossament en això és el 50% de la qualificació seran els conjunts de processadors, els quals és preciós, perquè això és on s'està gastant el vast majoria del seu temps en curs. Quizzes 40%, i la seva projecte final serà del 10%. Hi haurà dues proves al llarg de el curs del semestre. Crec que els temps i les dates són També figuren en el programa d'estudis. La forma en què ho farem ha de qualificar els seus conjunts de processadors és que tenim bàsicament de quatre valors que assignem a cada grau. Comptem amb un valor d'abast, correcció, disseny i estil. Així que com veus, això és una cosa de la nostra fórmula de càlcul de conjunts de processadors. Tres donem més pes a la correcció, perquè, òbviament, el seu entrenador ha de provar per als casos que el volem per detectar si existeixen. Vostès tots tenen check50 a la seva disposició. És una funció molt útil que vostès poden tots carregar el seu codi a nostres servidors, on anem a comprovar que. I vostè ha vist els cares frowny, cares somrients. Són molt, molt servicial. Si us plau, no ser el estudiant que com intents per codificar en totes les respostes a ells. Sens dubte, m'he vist un conjunt de processadors, on algú va veure a tots els valors de check50 i que només dura codificats en-- si aquest número, imprimiu aquest número. Si aquest nombre, imprimiu aquest nombre. No facis això. Tot i que tècnicament check50 és correcta, la seva manera de resoldre el problema no és la correcta. Llavors només ha d'utilitzar check50 moderació. Però també assegurar-se que vostè entendre com està funcionant, el programa està funcionant A més de check50, perquè no podem provar cada possible cas de check50. Estarem provant alguns d'ells. El disseny és en essència, com ben dissenyat és el codi? Si vostè és copiar i enganxar múltiples línies de codi de moltes, moltes vegades. Potser vostè no té prou el millor disseny en el codi. Potser és el moment d'afegir aquest bucle. En essència, això és només tot per tractar de fer el seu codi, tractant d'escriure el seu codi de manera més eficient com sigui possible perquè el seu programa s'executa el més ràpidament possible. Finalment, tenim l'estil. Així que l'estil és una espècie de arbitrari, terme subjectiu. Jo sé que oficialment tenim una guia d'estil 50 per CS50, on et diu, oh, ha de tenir un espai aquí. Vostè ha tipus de format el seu codi d'aquesta manera. Vostè ha de nomenar les coses d'aquesta manera. Realment no m'importa, per si mateix, com vostè tria l'estil del seu codi, de la mateixa manera que sempre que romangui constant. Per exemple, si t'agrada deixar un espai després del seu fill de quatre abans de la seva bucle de quatre, fer això tot el temps. No espècie de fer-ho. No ho facis altres vegades. Si t'agrada mantenir arrissat suports espai d'una manera determinada, acaba sempre fer-ho d'aquesta manera. No espècie de fer-ho en algun lloc aquí i en algun lloc no existeix. Quan estem de classificació, és molt difícil si tinc ni idea de com estàs formatar el seu codi, les coses són extravagants i fora de lloc. Si et quedes consistent, és molt més fàcil per a mi com el major ser capaç de llegir el codi. És molt més fàcil per a vostè com a estudiant ser capaç de mirar a través del seu codi i veure el que està malament amb que frega per què hi ha problemes. L'estil és una de les coses més fàcils que vostès poden fer per obtenir resultats complets. En essència, si el que importa, si vostè paga cinc minuts d'atenció al seu codi de cada setmana, vostè ha de serà aconseguir punts d'estil complet. Finalment, tenim el que es diu el multiplicador d'abast. Scope-- Sé que és un gran paraula, sobretot en aquesta classe. Però abast, tot el que significa és que vostè està tractant els conjunts de processadors a la mesura de la seva capacitat. Si s'activa en tres de les seves quatre problemes i ni tan sols intentar la Finalment, és probable que va a perdre alguns punts sobre l'abast. Fins i tot si vostè acaba de començar el problema, fer el millor per caminar a través d'ell. Fins i tot si no funciona, convertir-lo en, pel fet que mostra i demostra per a nosaltres que vostè està tractant, que ha intentat establir el problema potser de la seva capacitat. I llavors podem donar-li punts complets d'abast. Àmbit d'aplicació també és molt important per quan parlar de la caiguda de puntuació pset més baix. Per això, durant el transcurs de la semestre, vostès tenen nou conjunts de processadors. I que en realitat estarem disminuint la puntuació més baixa de les nou, però només si té punts d'abast complet. Així que si al seu torn en un conjunt de processadors incompleta, per desgràcia, no podem deixar caure que un, a causa de que el seu abast els punts no es van completar. Així que fins i tot si vostè té la setmana horrible on s'està morint i que està malalt o el seu gos mor, el seu gat mor, i ja està sobrecarregat amb la tasca, simplement tractar el conjunt de processadors. Fes-ho el millor que puguis. Si no funciona, no importa. Només lliurar-la. Almenys que podem donar que punts d'esforç. Una per l'esforç en aquesta classe. Almenys caiguda de puntuació més baixa per l'esforç. Així que si. Això és més o menys la mateixa. Algú té preguntes per ara en la forma en que el seu grau a la classe? O algun d'aquests? Qualsevol d'aquests per far-- seccions, les hores d'oficina? Fresc. D'ACORD. Així que aquest és un tema que no realment li agrada parlar. Realment no m'agrada parlar-ne. Vostès realment no vull sentir-me parlar-ne. Però, per desgràcia, tots ha de parlar-ne. David va passar 20 minuts a donar una conferència parlant d'això. I aquest és el tema de l'honestedat acadèmica. Així que tots aquí, probablement, hem escrit un assaig en algun moment de la nostra carrera de Yale. Probablement ens hem ficat una xerrada en la qual hem ha dit que no plagiar el nostre assaig, pel fet que el treball no és el nostre. En informàtica, tenim el mateix tipus de concepte. Tot el treball que vostè enviï, tot el codi que escrigui ha de ser codi que vostè ha escrit. ¿No hauria de ser el codi que tens copiat d'un altre lloc. ¿No hauria de ser el codi que vostè Googled i es va deixar caure en i no se sap molt bé si funciona. Que tipus de tenir un sentit de el que està fent, però en realitat no. En cas de dubte, en essència, és només ser raonable. En el nostre programa, tenim tota una llista de coses veiem com raonables front no raonable. Per exemple, raonable és vostè i el seu amic discutir quina és la millor manera d'anar sobre lògicament la solució d'un problema. Això és bastant raonable. El que no seria raonable és si nois es van reunir, escriuen el mateix codi, i es va convertir en el mateix codi. Això no és raonable. La mateixa cosa, una espècie d'un assaig. Si vostè vol discutir amb el seu amic, escolta, això és el que vull escriure. Aquests són els passos que vull prendre per escriure sobre ella, molt bé. Això és meravellós. Si us plau, col·labori amb els altres. Si vostès començar escriure la mateixa cosa, girar en el mateix assaig, això és menys bé. Així que en cas de dubte, simplement no ho facis. En aquest sentit, al CS50, tenim guions que s'executen per automatitzar per provar no només la correcció del seu codi, sinó també la singularitat del seu codi. Així que per favor no ens posi en la posició d'haver de derivar el cas a EXCOMM. Si us plau, només per a tothom, anem a fer d'això una experiència meravellosa. Tothom aprèn millor, tots som més feliços, i que està tot a punt fins tenir èxit en aquest curs. Una cosa que és molt únic sobre aquesta classe que crec que cadascú ha realment prestar atenció a és que tenim el que s'anomena el pesar clàusula en el nostre pla d'estudis. Per tant, bàsicament, un termini de 72 hores, si creus que has fet alguna cosa vostè no està realment segur era adequada, si us plau vingui a nosaltres. Serà que dins de les 72 hores tractarem el cas a nosaltres mateixos sense fer referència a una major autoritat en l'administració. Així que si tu véns a mi i dir, Andi, escolta, ho sento molt, però crec que hi ha un parell de línies en el meu codi de l'última nit que tipus de google, va baixar de la Pila Desbordament, copiar i enganxar, i estic realment, realment ho sento per això, que em faci saber. Si us plau, no deixar que s'agreugin i només espero que l'agafo. Anem a atrapar-lo. Només ha de venir a mi. Deixa saber dins de les 72 hores. Anem a trobar una solució. I prometem que no ens referirem a autoritats universitàries essencialment. Així que és en el seu millor interès només ser honest amb tothom involucrat en el curs. D'ACORD. D'ACORD. Així que ara, ràpidament abans Segueixo endavant, algú té preguntes respecte a la logística sobre com els cursos que anem a executar, com seccions van córrer, res d'això? D'ACORD. Sí. AUDIÈNCIA: [inaudible]? ANDI Peng: Sí. Així quizzes-- quants de vostès són en la secció Dilluns / Dimecres? Quants de vostès estan en de dimarts / dijous? OK, així que és una fracció sòlida aquí. Així que la forma en què es corre que a Yale és que tindran dos per separat quizzes-- un per a cada secció- que es prendran durant la classe. Crec que és d'octubre a finals d'octubre, una mena de primera setmana de la prova. Sí, pel que acaba d'arribar a classe. Aquest dilluns o dimecres vostè prendrà la prova. Aquest dimarts o dijous vostè prendrà un examen diferent. Però el mateix material serà cobert. Sí. Bona pregunta. Sí. AUDIÈNCIA: On som anar a consultar les nostres notes? ANDI Peng: Sí. Així que va enviar a terme una correu electrònic el que cada setmana quan proves són graded-- o, ho sento, quan es qualifiquen conjunts de processadors. Conjunts de processadors són generalment van tornar al migdia o divendres. Així que et prometo que ho faré tractar d'aconseguir de nou a vostè pel migdia de divendres següent. Cada vegada que un conjunt de processadors de grau, enviaré una notificació al llibre de qualificacions que et diu la teva puntuació es pot veure en línia. Així que just aquesta setmana, després que acabar amb llei de conjunts de processadors de la setmana passada, vostès van a arribar un e-mail notificació que li diu, bo aquí és on vostè anar a veure les seves qualificacions. I es pot veure tots els desglossament de les seves qualificacions. Vostè pot veure els comentaris. Oh, cosa ràpida també. La secció de comentaris a la gran llibre és on probablement passar la major part del meu temps de classificació. Així que una cosa que és realment important quan que vostès estan veient les seves qualificacions en els seus conjunts de processadors no només es busca en la puntuació física sinó també prendre temps per realment llegir els meus comentaris. Sovint, això et dóna retroalimentació de com s'està resolent un problema. Si el que necessita fer cosa una mica millor, crítica constructiva en general és millor donada en les secció de comentaris. Així que per favor, per favor, em vaig passar temps escrivint comentaris. Si us plau, t'ho agrairia moltíssim si vostès llegiria aquests comentaris. D'ACORD. Fresc. Tot bé. Així que anem a començar a parlar i acaba de revisar ràpidament alguns dels materials de setmana zero just el que estem a la pàgina correcta per començant problemes d'aquesta setmana. Així que el bucle while és un dels tres tipus de bucles hem comentat anteriorment en aquesta classe. Un bucle while essencialment que està escrit en la sintaxi on, mentre que una certa condició, fer això diverses vegades, oi? Penseu en això en aquest gràfic aquí. Vostè va a començar en un cert punt en el codi. Vas a entrar a la condició de bucle si: No sé-- x és menor que un. Si això és cert, vas per executar el cos del bucle. I seguiràs fent que de nou, un cop més, de nou, 1 i over-- que és per això que és un loop-- fins que la seva condició esdevé falsa. Així d'aquesta manera, un bucle while és una de les formes més simples per escriure qualsevol tipus de condició que cal repetir una i altra vegada i una altra. Només vagi amb compte de sempre estàs escrivint qualsevol tipus de bucle que vostè té una condició de sortida com així com una actualització del que sigui és perquè la seva bucle no fa precisament executar una i altra vegada fins a l'infinit. En qualsevol cas, et vas a voler assegurar que va a modificar algun aspecte de el seu codi o al final del bucle només per assegurar-se que vostè té una manera d'avançar cap a la condició que desitja satisfer a extrem. ¿Això té sentit per a tothom? Simplement no volem ser atrapats en aquesta espiral, on anem voltes i voltes i no hi ha manera de trencar el bucle. I cada bucle essencialment té una manera de fer això. D'ACORD. En segon lloc, molts de vostès en els seus conjunts de processadors de Mario probablement hagut d'utilitzar aquest tipus de bucle. Es diu un do while. En primer lloc, ¿pot algú dir-me quina és la diferència entre un do while i un bucle while és? Sí. AUDIÈNCIA: El bucle Do While és a primera [inaudible]. ANDI Peng: Sí, exactament. Així que un do while sempre fa el que sigui està dins de la do, dins dels claudàtors allà i fa que la condició abans de comprovar ell-- sento, fa que el codi abans la comprovació de la condició. I això és especialment rellevant per a nosaltres aquí en aquesta classe, perquè la majoria de vegades anem a voler provocar l'usuari d'algun tipus d'entrada. I després, depenent de l'entrada que ens donen, llavors podem avaluar, oh, fer hem d'impulsar de nou? Així que en Mario, si l'usuari li va donar una altura negatiu, per exemple, vas a primer missatge i fer el que hi ha dins. Llavors vostè va a comprovar tant. Ja saps, és negatiu 1, és que un nombre positiu? Si no és així, em vaig a anar enrere i repetir el fer i repetir i repetir i repetir fins que finalment se li donarà un número que t'agrada, que tot el que podem emprar en el nostre codi. És molt important per essencialment qualsevol entrada de l'usuari. Puc garantir que qualsevol temps en un conjunt de processadors, on li demanem a l'entrada qualsevol tipus de codi, estem probablement va a fer un cas de prova en el qual estem et va a donar una cosa dolenta que és va a tractar de trencar el codi. Si tractem de preguntar-li a una entrada nombre sencer, que només pot donar-li una cadena i veure com manejaria això. Si li demanem que emprar una edat, és possible que li donarà un nombre negatiu per veure com manejaria això. Només assegureu-vos que vostès estan posant a prova per casos en què no reben la millor d'entrada, diguem. I una do while és sovint la millor manera de dissenyar el seu codi per que compleix amb aquest àmbit. D'ACORD. D'ACORD. Així que aquest és probablement el més bucle complex dels tres que hem vist fins ara. I sembla molt complicat en principi. Però et garanteixo que, una vegada que vostès aconseguir la caiguda de com utilitzar un bucle for, és una de les coses més útils, la majoria d'eines útils en el seu arsenal per avançar en aquesta classe. Així per exemple, en Scratch, vam tenir aquesta molt simple bloc que acaba de dir repeteixi aquesta assegurança frases cert nombre de vegades. Per cert, SAJ-- això és Scaz Andi Jason. Nosaltres moltes vegades vam signar el nostre correus electrònics SAJ. Si diem SAJ, no ser confós. Això és només nosaltres. Així que en Scratch, hem estat capaços de tenir un bloc que va dir, m'encanta repetir SAJ! 10 vegades. Molt senzill. La lògica darrere d'això és una molt, molt simple, oi? Vull anar primer a través de la primera temps i veure que, per segona vegada i veure que, per tercera vegada, etc. i així successivament, fins arribar a 10. I la forma en què representaria que en codi és només a través d'un senzill bucle for. Així que per, vostè va a declarar la variable d'aquí, en aquest cas, amb un int. Anem a cridar i. Anem a inicialitzar a 0. I l'edició de parada és serà i és menor de 10. I l'actualització serà i ++. I dins del bucle, que va per executar fins que finalment colpeja l'extrem de la condición-- en el qual cas, que va trencar el bucle. Hi ha d'haver coses que vostè nois han tot tipus de vist abans i va haver de fer per al seu problema d'un conjunt. Algú té alguna pregunta respecte de bucles en aquest moment? D'ACORD. Gran. D'ACORD. Així que per a aquells de vostès que tenen llegir l'especificació de conjunt de processadors per a aquesta setmana Sabem que anem a haver d'emprar una cosa anomenada ASCII i taula ASCII. Així que David, en la conferència es va dirigir breument com els ordinadors essentially-- tot es codifica en un ordinador en binari, en zeros i uns. I la forma en què els ordinadors són capaços per emmagatzemar diferents valors més a zeros i uns són a través de la cartografia aquests números per representar altres dígits o essencialment altres personatges. Així doncs, en aquest cas, una ASCII table-- tot el que fa és caràcters mapa, o caràcters, als nombres. Així que l'arxiu de codi font en seva computer-- que veu, bo, un munt de zeros i uns, zeros i uns, zeros i uns. Això és el que s'emmagatzema a la memòria real de l'ordinador. Però quan els éssers humans volen comunicar-se amb l'ordinador, ens want-- diem, per exemple, si vull la A majúscula, Vaig a necessitar alguna manera de dir-li a l'ordinador, oh, quan escric en majúscules A, vull dir aquesta representació en binari. I així, la forma de fer que es va llançar una El arbitrari diu una taula ASCII, on nosaltres, com a éssers humans, com programadors, fa algun temps, arbitràriament vam decidir que anaven a assignar aquests nombres valors a aquests personatges. Així que vostès poden google aquesta línia. Crec que hi ha un enllaç a ella en el seu pset-- només una taula de mapa ASCII, ASCII taula. Simplement es tradueix binària números en caràcters. I serà molt útil per al seu conjunt de problemes cada vegada que vulgueu calcular alguna cosa o si desitgi mostrar certa caràcters o nombres enters o manipular certs personatges. Serà molt important que tots vostès saber com navegar una taula ASCII. Així, per exemple, la majúscula A es representa pel nombre 65. I la minúscula està representat per 97. Així que és important saber que la diferència entre els dos valors és 32. Sovint, si vostè necessita per convertir de una a l'altra, la diferència és de 32. I no et preocupis si ets tipus de confusa en això al principi. Anem a anar sobre la forma en què ho faria emprar aquesta en codi real. D'ACORD. Així que per a aquells de vostès amb els ordinadors portàtils fora, no dubti en tirar d'una taula ASCII, perquè aquests probablement requereixen vostès fer referència el que els personatges són. D'ACORD. Així que sabent que certa caràcters s'assignen a determinats nombres, si hagués de córrer només el primer línia d'aquesta code-- el printf 1, minúscula amb menys majúscula A. Algú tenir una conjectura sobre el que seria impressió de la pantalla en aquest moment? Així que en primer lloc, el que fa minúscula representen? Quin nombre és que codificat en la taula ASCII. Ho sentim? AUDIÈNCIA: 97? ANDI Peng: 97, molt bé. ¿I què és majúscula? AUDIÈNCIA: 65. ANDI Peng: Llavors, què és 97, menys de 65 anys? AUDIÈNCIA: 32. ANDI Peng: OK. Així que què pensen vostès que va a passar quan d'entrada aquesta línia de codi en el meu ordinador? AUDIÈNCIA: [inaudible]. ANDI Peng: Malauradament, parlar. No et preocupis. Aquest és un molt segur medi ambient, menys la càmera. Tots anem A-- sense preocupacions. Així que tots anem a fer veure que és només ens esgarrifós en aquesta habitació. No et preocupis. Cap pregunta és massa estúpid. Cap resposta és una resposta estúpida. Probablement vaig a cometre errors en el curs de la meva ensenyament. De debò, nois, només blurt a terme. Tingues confiança en tu mateix, saps? Llavors, què va ser això? Qui va dir que l'última resposta? D'ACORD. Crida que agradable i clara. AUDIÈNCIA: 32? ANDI Peng: 32. OK, anem a executar aquest codi i veure si això és el que passa. D'ACORD. Així com vostès poden tipus de veure, la notació típica tinc establert aquí per com anàvem a emprar qualsevol tipus de programa al nostre ordinador. Tenim la nostra funció principal dins la nostra funció principal. Jo només vaig a copiar i pegui aquesta línia de codi. També vagi amb compte quan nois estan copiant i enganxant el codi. De vegades, certs operadors no enganxar sobre correctament. En aquest cas, el signe menys senyal era en realitat un guió. I pel que l'equip no recollir-lo. Així que vaig haver de tornar enrere i torni a escriure físicament això. Només vagi amb compte en que vostès estan fent això. D'ACORD. Anem a executar aquesta aquí. Així que anem a cd a la nostra secció_2. He trucat a aquest programa asciimath. Així que recorda, quan correm cap programa, volem primer compilar mitjançant l'execució mitjançant la nostra marca. I després volem executar realitat el programa fent punt-ratlla vertical. Així que anem a ./asciimath. Dreta, aquí anem. I veiem 32. Ben fet. Mereixes un tros de caramel. Caramel per a vostè. Ho sento. Tot bé. D'ACORD. Així que podem tornar al nostre exemple aquí. Aah, no. Aah. D'ACORD. Jo només vaig a seguir així. D'ACORD. D'ACORD. Així com vostès poden veure, podem fer un munt de coses molt interessants, un munt de coses molt interessants, una gran quantitat de coses molt complicades que impliquen Caràcters ASCII i números. Quan arribi a la línia de cinc, això és molt per seguir endavant. No anirem a través de la secció. No dubti, si es pot, raonar en paper primer en el que hauria d'estar succeint quan introdueix una cadena com de valors. Per exemple, en l'última línia, tenim z-- que representa un cert number-- A-- que també representa un certs number-- més 1 mòduls 26 a més de minúscules a. Si vostès seguir llegint a través d'aquests, pot veure un patró ve en com estem manipulant el codi. El recomano, recomano encaridament després de la secció a tots vostès nois van per davant i l'entrada els tot a l'ordinador i veure quin tipus de els números estan sortint i el raonament a través de per què aquests són passant, perquè per als seus conjunts de processadors que serà realment important perquè vostè entengui per què certes coses estan succeint. Totes aquestes diapositives estaran en línia. Així que no es preocupa per intentar copiar físicament notes. En línia de tot. En aquesta secció si estarà en línia. Tota la meva codi font que Estic corrent estarà en línia. Sí. Sabia vostè encara té una pregunta? AUDIÈNCIA: Quin és mòduls? ANDI Peng: OK. Així mòdul és un operador que va a ser bastant important conjunt de processadors dels seus nois aquí. Així que la manera que els operadors en C i en el treball de programació és que vostè té el que s'anomena la símbol de la divisió i el símbol de mòdul, que és com el signe de percentatge. Així que en C, quan fas un sencer dividit per un sencer amb una barra, C té una tendència a voler tallar off tots els punts decimals, perquè un nombre enter vol per convertir a un enter. No voldrà ser un doble amb un munt de decimals tot després d'ella. Així que si ho faig 3 dividit per 2, que va per tallar el 0,5 i només li donarà 1. Així que això és una cosa per estar molt acurat de quan estàs fent qualsevol tipus de matemàtiques a la programació, és que els números que queden poden no ser els números que estaves pensant, que és la raó per arrodoniment en la seva últim conjunt de processadors és tan important. Mòdul li dóna la resta. Així, per exemple, si ho vaig fer 3 mòdul 2-- mode 3 per cent signe 2-- li donaria la resta d'aquest. Així març dividit per 2 és 1,5. Es 1 resta d'1. Li donaria a la 1, que és la resta d'això. Així que quan vostès s'estan movent a través de la taula ASCII, mòdul va a acabar sent cosa que és molt important, i anem a discutir això més endavant. D'ACORD. Així que una cosa que és bastant, bastant nou i bastant únic que hem discutit aquesta setmana és el concepte del que és una matriu. Així matriu és el primer tipus d'estructura de dades que anem a trobar en aquesta classe. Tota l'estructura de dades s'està algun tipus d'arbitrària, literalment coses com l'estructura que nosaltres com a programadors hem creat, que hem posat al nostre codi que pot contenir altres peces de codi. Així que en aquest sentit, un array-- pensar en ell com un arxivador, on si obre diferent prestatgeries del seu gabinet, es pot accedir a diferents coses. En la memòria, un array només està fent el mateix en l'equip. Vostè pot tenir diferents que blocks-- cridar-los indices-- d'una matriu. És com un bloc, un prestatge de la memòria que hem creat dins del seu equip que pot introduir certes coses en diferents espais. Així que amb una matriu, sempre cal specify-- ha d'especificar a declarar un matriu en el següent format. Vas a primera especificar el tipus de dades que desitja crear de la matriu. Si vull una matriu d'enters, Me'n vaig a posar int allà mateix. Si vull una matriu de cadenes, Me'n vaig a posar cadenes allà, el nom de la seva matriu, i després vas a tenir claudàtors. I dins dels claudàtors, ets va tenir la mida de la seva matriu. Una cosa que és realment important per a tenir en compte en crear arrays és que, una vegada que es crea un array, que la mida no pot canviar. Així que si vostè sap que en aquest moment vostè té una matriu de mida 10, vostè sap que vaig a tenir 10 cèl·lules dins o 10 índexs dins d'aquesta matriu, i que mai va ampliar o disminuir tant i fa, i que hi ha Actualment només 10 blocs d'espai assignat en la seva memòria que pot emmagatzemar fins a 10 coses de tot el que has posat. Així d'aquesta manera, un tipus de dades de matriu, l'estructura de dades que és una matriu és molt diferent d'alguns altres que anem a estar cobrint més endavant en aquest curs. Sí. Per exemple, si vostè vol crear una matriu de mida 3 que variables contingudes de integer-- oh, ho sento, de temperature-- i la temperatura, de Per descomptat, és un nombre sencer. Així que ens vam crear int, que és el tipus de dades del que volem desar. Anem a trucar a aquesta temperatura en nom de la nomenclatura dels noms cosa que tots entenem. I tindrem entre claudàtors. I volem tres nombres. Així que anem a posar de tres a l'interior de la mateixa. Una cosa que és molt important a tenir en compte és que les matrius s'indexen zero. Tot el que significa és que vostè començar amb l'índex de 0, i s'executa a través de la mida de la matriu almenys 1. Així, per exemple aquí, tenir una matriu de mida 3. Serà capaç de a celebrar tres valors. Però els números que themselves-- número, la matriu, que índex, la matriu, són del 0 al 2. Així que nois, ser molt, molt acurat quan vostè va a través dels seus problemes establerts i la creació de qualsevol tipus de matriu, perquè moltes de les vegades és molt, molt fàcil d'oblidar això. En realitat, jo no tinc l'índex de 3, que actualment només tenir l'índex de 2. I si intenta accedir a la tercera índex, que va ser el que és anomenat el terminador nul. No va a realitat existir en la matriu. I l'equip és No agradarà això. Així que vagi amb compte quan que està accedint coses per assegurar-se que s'acordi que les matrius són zero indexats. D'ACORD. Així que el primer exemple és només una manera de crear una matriu. El segon exemple que tinc a continuació és només una forma separada de la creació del que és el mateix de dades estructura que acabem introduïts. Així que en comptes de físicament funcionant a través i posar a la temperatura de 0 és igual al que sigui, la temperatura 1 és igual al que, de temperatura 2 iguals el que sigui, el que vaig poder en realitat només crear directament tot en una sola línia entre claudàtors temperatura iguals. I fixin-se en aquest cas, no cal per especificar la mida de la seva matriu és, perquè l'equip va a anar a través i veure que hi ha tres elements en aquestes claus. I es va a saber, està bé, Necessito una matriu de mida 3. No necessitaràs d'entrada és de la següent manera. I també, si, d'aquesta manera. Algú té preguntes pel que fa a com fem arranjaments o com funciona l'estructura d'una matriu? Sí. AUDIÈNCIA: [inaudible]? ANDI Peng: Sí, exactament. Així que si anés a declarar i inicialitzar una matriu el següent mètode, que és la segona manera, vostè pot simplement deixar aquests. I l'ordinador sap automàticament que ha de comptar quants elements estan en aquestes claus, separats per comes. Així que aquí veuen 65, 87, 30. Així que l'equip sap, oh, hi ha tres enters. Sé que per crear un nom de matriu temperatura amb tres elements en els mateixos. Bona pregunta. Sí. AUDIÈNCIA: ¿No és possible la creació de una matriu amb diferents tipus de dades que es podia entrar-hi? Per exemple, amb nombres enters [inaudible]? ANDI Peng: A l'efecte d'aquesta classe, no, ara mateix. Quan es crea un conjunt de dades estructurar com una matriu, estàs dient la equip, hey, et necessito assignar aquest molt memòria en el meu disc dur, amb cada cel·la de ser una cert nombre de bits. Recordeu que vam aprendre a la setmana zero que dades diferents tipus tenen diferents mides? Així, per exemple, una cadena és una quantitat diferent d'espai que un char, que és una quantitat diferent d'espai a partir d'un nombre enter. I així, si no s'especifica i barrejar i combinar quins tipus de variables vostè té, l'equip de serà molt confús. I no va a saber la quantitat de memòria per donar-li. Així que per als propòsits de la dreta Ara, els ordinadors només poden reconèixer un tipus d'una matriu. Bona pregunta. D'ACORD. Així que, naturalment, la segona pregunta que tenim és, bé, ara que hem creat un matriu i que hem posat totes aquestes coses en la matriu, com anem serà capaç d'accedir-hi? Així que l'estructura típica que sempre accedir a una matriu és la nostra preciosa per bucle. Et prometo que vostès que serem veient un munt d'aquest home aquí. Essencialment, qualsevol moment que desitgi per introduir valors en una matriu o desitja accedir-hi, la millor manera de fer-ho és un bucle for, perquè en un bucle for, que Saps quantes vegades ets voldrà córrer a través de la matriu, perquè vostè té una edició parada, oi? I cada vegada que s'executa a través, pot accedir a un element diferent de la matriu. I també, aquesta és una raó per la qual típicament començar el nostre bucles en el valor 0, perquè quan s'accedeix a les matrius, es pot accedir a l'índex zero. I el que és paral·lel molt bé. Vostès poden haver volgut escriure per int i és igual a 1. i és menor que o igual a 3. Però no anava a funcionar tan bé aquí, perquè només tenir elements de 0, 1, i 2. I pel que si anés a començar seva i en l'element 1, 2, i 3, vostè va a acabar corrent fora dels límits de la matriu, i les coses dolentes van a succeir. Així que espero que vostès veuen el segue de per què en les classes anteriors us ensenyàvem nois com executar i formatar un bucle for la forma en què ens trobàvem. És perquè, ara que hem la transició a les matrius, es pot veure per què els 0 presta si molt bé per a l'accés. Així que la forma en que fem que és que-- Estic simplement imprimir aquí en nom de imprimir-lo. Però jo tinc la meva marcador de posició, coma. I el que accedeix real part està succeint. El nom de la matriu es va anomenar la temperatura. Així que és la temperatura i la i-èsim element de la matriu. Així com per recórrer corre, que començarà a 0. Es va a imprimir la Índex 0 ª d'aquesta matriu. Després es va a imprimir el primer element. Després es va a imprimir a terme la segona. I després anem a trencar. És clar a tot el món el que està succeint? Gran. Tot bé. Així que aquí tenim una forma de dient, si no volíem per codificar em en-- com el programador. Jo no vull realitat física posat en cada element individual d'aquesta matriu. Si volgués lloc tenir els valors d'entrada de l'usuari, ¿Quina és la millor manera de fer això? Bé, aquí he creat aquesta bella funció, en la qual jo puc declarar una matriu. Així int scores-- anem simplement diem que volem fer una matriu que contenia els graus dels 18 dels estudiants aquí en aquesta secció. Crec que tenim una mica més de 18 nens d'avui. Però pel bé d'exemple, anem a suposar que teníem 18. M'agradaria crear un nom de matriu amb puntuacions tipus int, perquè les puntuacions, per descomptat, són nombres. I jo tindré 18 entre claudàtors, perquè aquest és el nombre d'estudiants que vull ser capaç d'emmagatzemar desenes de. I la manera en què jo havia poblen la matriu és que jo havia executar a través d'un bucle for, de Per descomptat, sent 0 el meu índex 0 ª. I després, amb 18 sent el meu aturar l'edició, perquè no hi ha 18 elements de la matriu. I després em vaig a fer printf, introdueixi anotar per student-- bla bla bla. Pot algú dir-me per què aquí estic imprimir i + 1 i no jo? És una mica un truc es tracta, en realitat no. En realitat, no físicament afectar l'execució del codi. Sí. AUDIÈNCIA: [inaudible] 0? ANDI Peng: Sí, exactament. És una mica difícil de dir, bé, ets l'estudiant 0th en aquesta classe. És una mica estrany. Així que nosaltres, com a éssers humans, no m'agrada pensar en com pensen els ordinadors. Així que, encara que en el equip, és l'emmagatzematge dels valors en el 0º índex, quan som éssers humans, no ho fem de veritat referir-me a nosaltres mateixos com a zero. Així que quan m'acaba d'impressió que, Vaig a imprimir i afegir 1 només pel bé de la claredat. Així que quan imprimeixo, jo seré capaç d'imprimir els estudiants de l'1 al 18. En realitat, no afecta el funcionament de la codi de cap manera, la forma en què s'imprimeix. Però vagi amb compte quan estàs en realitat l'accés a la matriu. Quan vegi els resultats i, notar aquí que sóc en realitat accés a l'índex 0 ª i no a la 1 més 0-- o 1 més 1, En aquest cas, l'índex de pel que en realitat és clara. Estan tots tipus d'OK en com això s'està executant a través de i amb tots els índexs que sóc posar un valor en la matriu i la creació d'una matriu amb 18 números que l'usuari va a l'entrada? D'ACORD. Fresc. D'ACORD. Ara ens movem cap a alguna cosa que és bastant rellevant per a aquesta peça establir també. Sé que en la conferència, David-- ho sento, tenies una pregunta? AUDIÈNCIA: Es pot ampliar? ANDI Peng: Sí, així que ho vaig intentar. Però jo no ho sé. Per alguna raó, aquesta versió de PowerPoint és realment no funciona bé amb la pantalla. Així que només anem per mantenir-lo així. Tots ells es pujaran en línia. Ho sento, nois. Sí. D'ACORD. Així també podem tenir cordes. Així que si vostès realment em notice-- Sap Rob es va acostar això en aquesta conferència que did-- una cadena és en realitat només un conjunt de caràcters, si es pensa en això, no? Una cadena és un nom o un frase o una paraula, oi? Si hagués de crear una cadena anomenada Andi-- només el meu nom, A-N-D-I. Es pensa en això com una sola variable. Però, en realitat, es descompon en tot just una sèrie de caràcters. Per tant, té un caràcter de 1 s'emmagatzemen en un valor de matriu. Té un caràcter de n emmagatzemada en el segon índex i així successivament i així successivament. Així, de tal manera, en realitat tenen aquest tipus d'estructura establerta en lloc per a les nostres cadenes. Així que aquí, si jo hagués de introduir el paraula "menjar" - de manera que la paraula cadena és igual aconseguir cadena. Si hagués d'introduir la paraula "menjar", que és físicament la forma en què el meu equip està emmagatzemant aquesta cadena en la meva memòria. I si volia executar a través d'aquest i d'impressió que fora-- així que per a i és igual a zero, recorda, en conferència, mica cobert que es diu strlen, o la longitud de la cadena. Perquè en realitat no sap el gran que la matriu és de qualsevol inputting-- de l'usuari Per exemple, he introduït la paraula "menjar", i sé això és tres caràcters de llarg, no? Així que podria posar en una de tres que hi ha i tot estarà bé. Però si la seva entrada de l'usuari alguna cosa això és un nombre diferent de valors, vostè va a no ser capaç de realment Sap que quan es programa el codi. Així que la forma com fem servir els casos de prova així és que tenim una mica anomenada strlen, que és només una funció que et diu quant temps una cadena és. Així strlen de la paraula. La meva paraula és menjar. n és igual a strlen de la paraula. Pot algú dir-me el que valor efectivament hi és? El que n representa a la dreta Ara, en aquest exemple, si tingués menjar? AUDIÈNCIA: 3. ANDI Peng: 3, exactament. Així que tenim per int i és igual zero, n és igual a 3, essencialment. I em va a córrer fins que sigui menys de 3i ++. I que va anar en essència a través i fer el mateix. Es va a imprimir tot valor i donar-li E-A-T. És només que denota una diferent manera d'escriure-ho. Això serà molt útil. Sí. AUDIÈNCIA: Què hi ha dels beneficis de posar n és igual a la paraula strlen dins d'aquest bucle for [inaudible]? ANDI Peng: Sí. Així que si jo fos A-- dir, per exemple, si jo fos a fer això i després fer-- oop-- que, al meu codi, seria en realitat estar fent com la mateixa cosa. No obstant això, la forma en què David va explicar durant la conferència, si algun de vostès recordi, era que, com éssers humans, com programadors, Realment tractem de programar la nostra codi perquè el nostre equip té treballar com a mínim possible, de manera que que el nostre codi és molt eficient. Així que si hagués que hi ha, el que que passaria a través del meu bucle for és que em declaro una primera i anomenat la variable serà 0. Vaig a comprovar, oh, el que és el strlen de paraula? Oh, el strlen es 3. Així és i menys de tres? Sí, ho és. Vaig a córrer. I llavors la segona vegada la volta el bucle, vaig a incrementar i. i serà un. I em va a comprovar, oh, però quin és el strlen de la paraula? Oh, és tres. ¿I que semblen tipus de deixalla, cada vegada que s'executa a través del bucle, a la comprovació de la funció, tot i que els strlen de paraula en realitat mai canvia? Així que és més potència d'un ordinador. Quan comences a parlar sobre les coses que són milers de milions i milers de milions de llocs llarg, imaginar el seu ordinador haver d'anar físicament a través i comprovar tot això cada vegada. Per això, per fer just en nom de l'eficiència, tendim a simplement fer això, perquè d'aquesta manera, només estem cridant a la funció un cop al principi, i que cada vegada que passa perquè va per emmagatzemar el valor 3 allà, que no ho fa de comprovar contínuament cada vegada. Sí. AUDIÈNCIA: Ho sentim. Just [inaudible]. Podria vostè int n és igual a strlen i posar que per sobre de la part exterior del bucle for tant be? ANDI Peng: Sí. Vostè podria fer això, absolutament. La raó per la qual tenim aquí és perquè la forma en què una de les obres de bucle és que es diu variable local en el sentit que tot el que ets crear dins del bucle for només existeix a l'interior del bucle for. Així que l'única variable i existeix en aquests suports. I aquí les variables de N també només existeix en aquests suports. Així que si anés a utilitzar strlen de paraula diverses vegades fins a baix, absolutament la millor manera de fer- seria declarar fins a la part superior per la qual cosa no ha de fer-ho una vegada. Sí. AUDIÈNCIA: Per què té un nova línia després que el cent veure si vostè vol posar tot les lletres al costat d'ell per separat? ANDI Peng: Oh, jo volia imprimir-les totes en cada línia. No importa. Sí, es tracta d'un format. Aquesta és una bona pregunta, però. Sí, si volia imprimir tot en una sola línia, Jo no tindria el guió en. D'ACORD. Cada un de bo? D'ACORD. Fresc. Així que crec que he parlat prou. Torn de Vostès s'executi a través de la codi i dir-me el que està malament aquí. On és l'error? Així com vostè pot veure, he declarat 1 nova matriu de tipus cadena de classe trucada. I he introduït Sam, Jess, i Kim en ella. I estic intentant imprimir tots els elements de la matriu. Pot algú dir-me per què això em va donar problemes? Et vaig a donar 10 nois segon per pensar en això. D'ACORD. Sí? AUDIÈNCIA: És el centreesquerra igual a 3 o [inaudible]? ANDI Peng: Correcte. Llavors, quantes vegades és aquesta realitat va a córrer a través d'aquest circuit? AUDIÈNCIA: Quatre. ANDI Peng: Exactament. Va a través de quatre vegades. Es va a executar a través de als 0, 1, 2, i 3, a causa que el seu element és i és menor que o igual a 3. No deixarà quan és 2. Es va a mantenir anar fins que arriba a 3. I com sabem, hi ha només tres elements de la nostra gamma actual. Si intentem accedir a la cambra element o l'índex de 3, vostè va a colpejar a algun lloc en la memòria que no existeix. Es diu el terminador nul. Res va a ser-hi. El seu equip no es va a ser molt feliç amb tu. Sí. Algú té preguntes sobre per què el que estava succeint? Això és un espai comú d'evitar. Sí. AUDIÈNCIA: No El primer llisqui també tenen una cadena de 2? ANDI Peng: No. Per tant, bàsicament, quan vostè està fent una matriu, aquest dret suport allà, que number-- tot es diu que és la forma de molts elements que tenen. No és en realitat dient me'ls índexs de res. Així que en aquest cas, sé que vull escriure amb tres llocs, amb tres llocs físics a Sostinc el que vulgui celebrar. Així que per això el nombre tres hi és. No obstant això, si volia accedir a la realitat, si el que volia dir, printf nombre de suport de classe, llavors vostè va a posar realment l'índex de física allà. Sí, bona pregunta. AUDIÈNCIA: Així és la física Índex suposa que és [inaudible]? ANDI Peng: Ho sento. Pots parlar una mica? AUDIÈNCIA: Així és l'índex físic [Inaudible] cadascuna de les caixes? [Inaudible]? ANDI Peng: Sí. Així que em vaig a anar de nou a la dreta aquí. Pensi aquí. Tenim una matriu de mida 3. Hi ha tres llocs, com, marcadors de posició física en aquí. Però estan nomenats 0, 1 i 2. Així que si volia accedir-hi, el camí que jo els accedir printf és del que voldria aquí. Vostè hauria d'imprimir el nom de la mateixa, perquè llavors l'ordinador sap, oh, he de mirar en aquesta matriu per a l'índex 0 ª. Sí. Però la mida de la mateixa no canvia. La mida és de 3, sense tenir en compte de com se'ls etiqueta. D'ACORD. Cada un de bo? AUDIÈNCIA: Així que cada vegada que [inaudible]? ANDI Peng: OK. Així que en aquest cas, no ho fem de veritat entrar-hi en aquests moments en el curs. Però saber que un string-- com jo va dir abans, una cadena és essencialment una sèrie de caràcters. Així que si puc crear un array de cadenes, que tipus de tenen una gran varietat de gamma de personatges, no? Així que en aquest cas, perquè jo tenir una matriu de cadenes, si anés a introduir una paraula molt llarga, que encara ocupa un sol espai, perquè aquesta és la cadena. Però si hagués de pensar en els personatges d'aquesta matriu, llavors això és ocupar molt més personatges que qualsevol de les altres paraules són. No és realment important per a aquest moment. Però això és només general com està funcionant. D'ACORD. Així que això és una cosa que vaig a deixar que facis molt en el transcurs del semestre. Necessito descansar la meva veu. Vostès necessita estimular vostès mateixos. Molts de vosaltres probablement han de dormir en aquest moment. Estic introduint problemes aleatoris on nosaltres com una classe o amb un company al teu costat van per passar un parell de minuts discutint sobre com anàvem a anar sobre la solució o la creació d'un programa com aquest. Així que ara mateix, volem per crear un program-- anem a dir- upper.c-- que els conversos una paraula en minúscules a una classe alta majúscula string--, ho sento. Paraula en cadenes, ho sento, és sinònim. Vaig a canviar- a significar el mateix. Sí. Prendre un parell de minuts. No ha de ser escrit en qualsevol idioma. Just en el codi pseudocodi o lògicament la forma en què ho faria tot anar fent tal problema. Sí. [CONVERSA SIDE] També em vaig adonar que vostès can-- Jo com que veig ja el programa. Suposo que la meva falta de manera de presentador és un problema. Però està bé. [CONVERSA SIDE] Sí, si us plau, nois. Vinga aconseguir caramels. Vinga aconseguir caramels. AUDIÈNCIA: Sí! [CONVERSA SIDE] ANDI Peng: També, sí, Vaig a començar llançant caramels a les persones que no responen a les preguntes. Així que tots hem de respondre preguntes. O suposo que la gent que no respondre a les preguntes. Sí, revés. [CONVERSA SIDE] AUDIÈNCIA: [inaudible] ANDI Peng: Sí. Sí. [CONVERSA SIDE] Molt bé, nois. Prenguem, com, 10 segons més. [CONVERSA SIDE] OK, nois. Així que abans de començar a tractar de en realitat físicament escriure codi, un bon hàbit per desenvolupar és que volem primera classe de la raó lògicament com anàvem a fer-ho. Vostè vol assegurar-se que, abans que físicament començar a tractar de codificar en Mario, que faci Assegureu-vos que vostè té el seu pseudocodi. Que s'està portant a través de el que necessita per crear de manera que, quan físicament escriure el seu programa de tarda, vostè és més capaç de detectar errors en el codi i coses per l'estil. Així que anem a començar just por-- en anglès, en pseudocodi, ¿Algú vol donar mi una explicació genèrica de com anàvem a anar fent això? Sí. AUDIÈNCIA: [inaudible]. ANDI Peng: És clar, no es preocupi. AUDIÈNCIA: Es pot demanar a o demanar algú per aconseguir cadena 1-- sí, corda, i llavors-- ANDI Peng: Sí, de manera que aquest és un bon començament. Vaig a començar a escriure, ho sento, com vostè parla. Tan-- AUDIÈNCIA: --el minúscules els números són més alts, no? O les lletres minúscules tenen alts nombres? ANDI Peng: Exactament. AUDIÈNCIA: Llavors restem 32 de qualsevol [inaudible]. ANDI Peng: Gran. Així que tipus de tenir un sentit general de com treballar sobre aquest problema. Sabent que hem tipus de Vam aprendre la forma física que les cadenes s'emmagatzemen a la memòria, el que fas ja Saps que vas a probablement ha d'escriure en el codi per tal de moure a través de la cadena? AUDIÈNCIA: Per bucle. ANDI Peng: Un bucle for, exactament. Gran. Així que tipus de tenir un genèric pseudocodi escrit aquest tipus de està donant notes de com es es mouria sobre la solució del problema. Ara que té això, pot fer referència per a més tard quan vostè està tractant de en realitat escriure el codi. Així que en realitat podem anar aquí. I tinc una funció anomenada upper.c-- allà és-- tot just d'una plantilla en blanc en aquest moment que vostès van a M'agradaria saber sobre com escriure aquesta línia de no code-- línia de codi. Serà múltiples línies de codi. En iniciar qualsevol tipus del conjunt de processadors en blanc, el que és el primer que necessito recordar a fer? AUDIÈNCIA: [inaudible]. ANDI Peng: Gran Sip. Incloure. stdio.h. Sovint aquest és un Els errors més fàcils persones farà que quan estan escriptura, és que van a s'oblidi d'incloure un important biblioteca que necessiten. Així que si els seus horaris d'oficina i vostè és com, No sé per què el meu codi no funciona. Em pot dir per què no està funcionant? Anem a dir què #include? Vostè ha #include ella. D'ACORD. Així que tenim l'estàndard d'E / S aquí. És aquesta l'única biblioteca necessitarem aquí? Què més farem? Ho sento. Algú acaba de cridar cap a fora? AUDIÈNCIA: [inaudible]. ANDI Peng: Cal anar. D'ACORD. I com faig per a començar qualsevol tipus de la funció, qualsevol tipus de funció principal dins del nostre programa? Int principal. D'ACORD. Què puc posar aquí dins? Quina és la primera cosa que vols fer? Si volem aconseguir un cadena de l'usuari, ¿Què tindrem de fer en aquesta primera línia? Ho sentim, vostès simplement se sent llibertat per parlar i en veu alta. Només cridar el que sigui. AUDIÈNCIA: Demani a l'usuari? ANDI Peng: Com ho fem? Ask-- vaig a escriure "demanar a l'usuari"? AUDIÈNCIA: printf. ANDI Peng: OK. Printf. Què és el que vull printf? AUDIÈNCIA: Escriu alguna cosa. ANDI Peng: Igual que? Nois, pretenen com si jo fos un ordinador. Físicament em diuen cada pas que he d'escriure aquí? Estic fent alguna cosa malament? ¿Hauria d'haver escrit alguna cosa? AUDIÈNCIA: Vostè necessita cometes. ANDI Peng: Necessito cotitzacions? D'ACORD. D'ACORD. AUDIÈNCIA: I llavors nova línia. Punt i coma. ANDI Peng: punt i coma? D'ACORD. Bé. AUDIÈNCIA: I potser especificar que vostè ho vol en minúscules? ANDI Peng: Gran. Vostès es riuen de mi oblidar-se de posar un punt i coma. Et garanteixo que en algun lloc en el curs d'aquesta classe, vostè s'oblidi de posar un punt i coma, i el portarà tres hores a la figura per què el seu codi no funciona. Ens ha passat a tots nosaltres. Això succeirà probablement a vostè. Poseu-vos en un bon hàbit d'usar punts i comes. D'ACORD. AUDIÈNCIA: Voleu per fer la barra invertida en? ANDI Peng: És clar. Vols fer la barra invertida en? AUDIÈNCIA: Sí. ANDI Peng: Gran. D'ACORD. Què faig ara? AUDIÈNCIA: Obtenir cadena. ANDI Peng: Obtenir cadena. Llavors, què escric? Algú? AUDIÈNCIA: String s. ANDI Peng: String s. AUDIÈNCIA: GetString. ANDI Peng: Algú, Em pot dir on aquesta funció GetString està venint? AUDIÈNCIA: string.h. ANDI Peng: string.h? Creus que és de string.h? AUDIÈNCIA: [inaudible]. ANDI Peng: Cal anar. És d'CS50.h. Si sempre està confós en on un arxiu de biblioteca és o un arxiu de capçalera és, google literalment string.h, i et diré ¿Quines són totes les funcions que estan en string.h. D'ACORD. Així que ara que he creat una cadena i he sol·licitar a l'usuari que, M'ha emmagatzemat en una variable s amb nom, ¿què he de fer ara? AUDIÈNCIA: Comproveu si està en minúscules. ANDI Peng: Ho sento? AUDIÈNCIA: Comproveu si està en minúscules. ANDI Peng: Molt bé, farem això. Com puc fer això? En realitat, per als fins de la classe en aquest moment, només anem a assumir que tot que d'entrada ja està en minúscules. Si volia comprovar, ho faria afegiu una sentència condicional que va comprovar, que va córrer a través de cada element de la matriu única i comprovat si és entre certs valors. M'oblido del que el nombre dels valors de minúscules són. Vostè pot mirar cap amunt en la taula ASCII. Però sí, és un molt bon punt. Però en aquest moment, només anem a assumir que totes les cordes que d'entrada són en minúscules. D'ACORD. Llavors, com faig per aquest problema següent? AUDIÈNCIA: Per bucle. ANDI Peng: Per llaç? D'ACORD. Digues el que escriure. AUDIÈNCIA: Per int i és igual a 0. ANDI Peng: OK. AUDIÈNCIA: Oh, en realitat, llavors vostè fer una coma i fer n és igual a strlen. ANDI Peng: cosa tan important que jo crec que ella es va adonar aquí és que no havíem de dir int n la segona vegada que va fer això. Només has de saber que en una de bucle quan s'està declarant, que realment no necessita el int de la segona vegada que fas una variable. Es pot dir n strlen. AUDIÈNCIA: De s. ANDI Peng: s. D'ACORD. AUDIÈNCIA: Llavors un punt i coma. ANDI Peng: És clar. AUDIÈNCIA: I llavors [inaudible] n. Llavors i ++. ANDI Peng: Gran. Tot bé. Què volem interior d'aquest bucle for ara? Recordeu, si anem a executar a través de una cadena i executar a través d'una matriu, volem comprovar les coses en ella. Què necessitarem? Aquesta és una espècie de la part difícil ara. Algú té una conjectura? D'ACORD. Així que primer, com fins i tot l'accés? Com podem tan sols primer xec o accedir a un element de la matriu? Com ho fem? Quina és la notació que fem servir per fer això? Quin és el nom d'aquesta sèrie es diu? Es diu s, no? Recordeu, qualsevol cadena és sempre una matriu. Així suport s I, oi? Perquè aquest és el valor actual o valor de l'índex que estem comprovant. I anem a establir que la igualtat A-- volem un valor en minúscules, oi? Volem convertir aquesta lower-- ho sento, volem una majúscula. Volem convertir la minúscula valor en una majúscula. I així com-- Ho sento, Quin és el teu nom? AUDIÈNCIA: Heidi. ANDI Peng: Ho sento? AUDIÈNCIA: Heidi. ANDI Peng: Heidi. Igual que Heidi va dir Inicialment, estem probablement necessitarà ell-- estem probablement va a haver de restar 32 des de qualsevol CHARC que és, no? A causa de que en una ASCII taula, la diferència entre una lletra minúscula i una lletra majúscula és 32. Així que quan estem fent això, probablement estem voldrà restar 32, no? Així que farem s i. Tothom entén per què ho vaig fer? Perquè ara, en la nostra sèrie, estem comprovant l'índex 0 ª, oi? I en l'índex 0 ª del cadena, que és el primer caràcter. I aquest caràcter que anem a assumir que és minúscula. Si volem que sigui majúscula, ens ha de restar 32 del seu valor, perquè en la nostra ASCII taula, així és com ho fem corresponent a la següent valor que fa que sigui majúscules. Tothom entén això? Sí. AUDIÈNCIA: Podria vostè també no minúscules 1 minus-- ANDI Peng: Sí, així que això és realment bona. Vaig a tornar a això pregunta després que fem això. Sí. I després si vull veure el que està passant, Probablement vaig a que voleu imprimir, oi? Que algú em digui el que Vull imprimir aquí. AUDIÈNCIA: cent printf c barra invertida [inaudible]. Aquest és el valor de [inaudible] s i. ANDI Peng: s I, ho sento? AUDIÈNCIA: [inaudible]. ANDI Peng: No sé. Què penses? AUDIÈNCIA: Bé, jo wouldn't-- Suposo que no em bring-- M'agradaria fer-ho el a l'interior, ja que [inaudible]. ANDI Peng: Oh, vostè hauria fet això? AUDIÈNCIA: Sí. ANDI Peng: Anem a deixar-ho així el camí que és, i vaig a explicar per què més tard. Recordeu, fins i tot quan vostè tenir un marcador de posició, vostè vol posar parèntesis voltant. Tot bé. Així que això ha de ser una funció sòlida aquí. Anem a córrer i veure si es compila. Fer superior. UH oh. Això no sembla massa bo. Per què passa això? Igual que amb qualsevol error, vols anar enrere i començar amb la primera, perquè en general les causes d'un error un munt d'altres errors després d'ella. Aquí veiem upper.c: 18: 25, que diu jo en aquest programa anomenat upper.c, en la línia 18, l'error de declarar implícitament biblioteca de funcions strlen amb el tipus bla unassigned--, no sé ¿Què passa després d'això. Tot el que m'està dient en aquest moment està que alguna cosa està passant al strlen. I l'equip està confós, perquè és com, no sé el que strlen és? Què vol dir que, probablement, li dirà que s'està perdent? AUDIÈNCIA: Et perds [inaudible]. ANDI Peng: Tens raó. Exactament. Així que això és on està important assegurar que totes les funcions que utilitza en la seva codi està tenint la capçalera correcta declarar-se en la biblioteca, o bé vostè va a obtenir un munt d'errors i el seu codi no va per saber el que està passant. Així que anem a incloure string.h aquí. Ara quan tractem de recopilar superior. Compilar correctament. Anem a executar aquest programa. Així que escriure alguna cosa en minúscules. Què és el que vostès volen que escrigui? Pregunteu per alguna cosa. Molt bé, Charly acaba d'entrar. Anem a escriure el nom de Charly. Charly en minúscules. I és d'esperar, amb sort, això és va a cridar i escopir Charly en majúscules. Visca! no tothom entén com Vaig ser sobre solucionar això? La forma en què puc manipular usant nombres enters cosa que per resoldre Jo vull fer a cordes, perquè els caràcters i nombres enters pot es fa referència en la mateixa manera perquè de la cartografia ASCII. Així que tornar al seu punt, si volgut posar aquí en lloc de 32 A majúscula minúscula menys un igual això, que funcionaria igual de bé, perquè això és simplement la diferència entre aquests dos valors. Si vull fer aquest charly nou--. Oh no. Crec que vam ser pel camí equivocat, sí? AUDIÈNCIA: [inaudible] minúscules a. ANDI Peng: Cal anar. Sí. I fora escup charly. Així que vagi amb compte quan estàs valors restant recordar quin és més gran que l'altre. Per exemple, aquí es va oblidar que és en realitat una minúscula més gran que en majúscula A. Així que quan em tractat de restar al revés voltant, em van donar negatiu 32. I el meu equip era com, No sé el que és això. És la probabilitat només alguns a l'atzar valor que no és molt bo. I així que assegureu-vos que vostè és restant a la longitud correcta per trobar el caràcter que desitja. D'ACORD. Hi ha algú confós sobre com caminar escriure aquesta funció? D'ACORD. Així que en realitat, una funció ja existeix a la biblioteca anomenada ctype.h. Crida ctype.h de la biblioteca. Aquesta funció és en realitat ja escrit per a vostè. Es diu a la superior. I així, a l'efecte de aquest conjunt de processadors, vas per trobar que realment voleu utilitzar moltes de les funcions contingudes dins de la biblioteca ctype. Per és superior, per baixar, superior, és lower-- aquestes són totes les funcions que vostè serà capaç d'utilitzar molt, molt ràpidament en el seu propi codi que fa exactament el que això fa. Escrivim la manera de convertir una cadena a majúscules. Però això és en realitat el codi que algú més ha escrit i que es pot accedir a través d'una funció diferent. Sí? AUDIÈNCIA: ¿Així que simplement copiar una hi és i que ho faci per cada carta? ANDI Peng: Sí, perquè jo no ho faig preocupar-se pels valors de a. Jo només m'importa que la diferència entre ells és 32, no? La diferència entre minúscules b majúscula i B és també 32. I la diferència entre c i C majúscula sempre és 32. Només he de preocupar-se pel diferència entre els dos, perquè totes les lletres seguir el mateix patró, no? Si tinc la diferència entre un d'ells, Jo sé quina és la diferència entre tots ells és. Bona pregunta. Sí. Cada un de bo? D'ACORD. Oop. D'ACORD. Així que un altre concepte que és serà molt útil, ja que continuar desenvolupant el seu codi és aquesta idea de crear funcions o abstracció. Així que ara, tots hem pres àlgebra. En àlgebra, se'ls ensenya que hi ha aquesta cosa meravellosa anomenada una funció màquina, on si entrada d'un tipus de nombre, que va a través d'aquesta funció meravellosa i fa esclatar una sortida diferent, no? En el codi, el mateix succeeix en qualsevol tipus de funció. Així que vaig poder físicament escriure en el meu cos de la meva codi una declaració principal que realment fa qualsevol que sigui el cos del codi està fent. Però fora d'això, també pot escriure moltes funcions diferents de fer moltes coses diferents. Per exemple, ja hem començat a fer servir alguns d'ells. Printf-- que és una funció que algú més ja ha escrit que podem trucar al nostre codi. Per upper-- en aquest cas, upper-- és una altra funció hem escrit que pot trucar al nostre codi. I així que suposo què fer fins i tot tenim funcions? Per què no simplement plop tots en la mateixa línia de codi? Això fa que sigui fàcil per a tothom. Doncs bé, el raonament darrere d'aquesta és, en primer lloc, l'organització. És realment molest anar a través de codi d'algú i una funció com printf. Si vostès realment sabia el que el funció printf implicava escriure, és, com, 1.000 línies de codi. Si cada vegada que volia a printf alguna cosa, Vaig haver de escriure 1.000 línies de codi, que seria molt molest per llegir, Oi? És per això que acabem de creat aquesta funció abstracta que ja tenim a algú més ha escrit en un altre lloc. I cada vegada que hem de fer-lo servir en nostre codi, només ha de dir printf. I és capaç d'utilitzar la funció algú ha escrit en el nostre codi. Fa més fàcil organitzativament per llegir codi. En segon lloc, és la simplificació. Simplifica els passos que tenim prendre per resoldre el nostre problema. Printf, funcions com printf, funcions com a superior són totes les coses que ens permeten simplificar el nostre codi a baix pel que és més fàcil. I l'últim és la reutilització. Així que el fet que tenim una funció anomenada printf que podem anomenar variats vegades i permet que sigui reutilitzable. Si hagués d'escriure printf, Jo només escric una vegada. Només existeix en aquell lloc. Si volia fer-ho de nou, ho faria de copiar i enganxar tot això en la meva segona línia de codi. És per això que si creem una funció el que existeix fora de la nostra principal, només podem recórrer a i reutilitzar-sempre que necessitem perquè sigui molt més fàcil per a nosaltres com programes per escriure. Així que la forma en què realment escriuríem una funció és molt similar, no? Aquesta és una espècie de la primera instància en la qual anem a veure una presa de funció en un estil diferent a la nostra void main int. En aquest cas, si volia escriure una funció anomenada q, oi? I el valor int aquí és tot el que em diu, ¿Què vull aquest funcionar per tornar a mi? Si vull cubicar un sencer, Vaig a voler entrada. Aquests són els paràmetres. Vaig a les entrades d'un valor de tipus int. I vaig a tornar un altre valor tipus de int. I aquí, com vostè pot veure, tot el que estic fent es cubicar el que la meva entrada és com la meva sortida i tornar-lo. Així que tot el que fa aquesta funció és pren algun tipus de nombre sencer. Es multiplica per si mateix dues vegades de manera que cubs en efecte. I llavors es retorna el que la producció és. Així que en aquest cas, es tracta de dues línies de codi que havíem d'escriure extra. Però si volguéssim cridar sobre això diverses vegades, és molt més fàcil d'escriure que un línia d'aquí que està en el cub de ha de passar per diverses vegades. Així que la manera que essencialment qualsevol formateig per a qualsevol tipus de funció va existir és com aquí. Així que tenim el nom de la funció. En aquest cas, es diu cub. I anomenem cub perquè és fàcil de recordar. Pots dir-quadrats i de fet, pot ser en cubs. No importa. Només un nom que vostè està l'assignació de la seva funció. Aquest dret aquí, int, és la tipus del paràmetre que necessita. Llavors, què fa aquesta funció necessita per operar? Bé, es necessita una entrada. El vaig nomenar entrada. Vostè pot nomenar com vulguis. Però necessito una mica de tipus int. Es va a executar en realitat el que hi ha dins d'aquí, el cos de la funció. I després el tipus de retorn aquí, aquest int-- tot el que m'està dient és que aquesta funció és tornarà a mi en int. Així que va a gaudir d'un int, i que va a donar volta una int. Tothom entén com el el format d'aquest tipus funciona? Fresc. D'ACORD. Així que no et preocupis si això sembla una mica de dret abstracte ara. Això és una cosa que anem a parlar. Anem a submergir-nos en el més profund més endavant en el curs. La forma en què qualsevol tipus de nivell superior l'abstracció d'aquestes coses el treball és que, en la memòria, en l'ordinador, tot s'emmagatzema en aquest tipus de la pila, he de dir. Així que allà dalt a la part superior. No sé si vostè nois poden veure molt bé. Vaig a tractar de fer un zoom. Aquí, a la part superior, que el text física del que l'equip està interpreting-- tots els zeros i uns que existeixen dins del nostre ordinador. I després tenim la inicialitzat dades i inicialitzar, el que anomenem variables globals. Així variables que hi en tots els programes i en la seva totalitat, essencialment, codi. No us preocupeu si vostès són espècie de clar en això. És en realitat no importa en aquest moment. I després tenim el que és cridada una pila en una pila. Penseu en una pila literalment com de la mateixa manera que un munt de coses, una pica de diferent coses sent empesos a la part superior l'un de l'altre que emmagatzemen els diversos variables i sintaxi dins del seu codi. I llavors aquí a la part inferior, tenim les variables d'entorn del que s'està executant dins de només la seva petita línia de codi. I només anem a enfocar en a la part real de la pila. Així que aquí, si haguéssim de fer un zoom en el sol aquesta zona de la pila, això és el que sembla. I això és realment molt important quan vostès parlen de funcions, degut avís que el memòria del teu ordinador es emmagatzemar les variables i les funcions i els paràmetres de tots dos la seva funció i els seus principals variables en diferents llocs. Així que ara, la principal és la funció real que s'està executant en un codi. Has seus paràmetres emmagatzemats aquí i les seves variables locals s'emmagatzemen aquí. Variable local només significa qualsevol variable que només existeixen dins d'aquesta funció. I a sobre d'això, vostè té aquesta funció separada anomenada cub. Has de això és paràmetres així com els vilatans. I la raó que pugui veure aquí és que el que que succeeix quan pren en una galleda valor de la seva funció principal és que en realitat s'està copiant que més. Així que si jo volia cub 2 i tornar 8, que 2 en realitat està introduïda com un paràmetre i és copiat de manera que vostè ho té existent en dos llocs diferents en la memòria. I cal tenir molta cura a recordar que un dels en realitat estàs manipulant. I un exemple del que ha passat això seria molt, molt dolent existeix aquí. Així que aquí, tinc, en teoria, un programa d'aquí, una funció principal que estic declarant un int x és igual a 1. Estic declarant altra int i és igual a 2. I llavors jo estic corrent a través d'aquesta funció anomenada d'intercanvi, on suposo que està intercanviant els dos valors. I després vaig a imprimir-los, oi? Això és el que vull aquest programa fer. Així que anem a venir i fer una ullada. Així que si jo escric una realitat diferent funció, com es pot veure, tenim la nostra funció principal aquí. I després tenim el nostre segona funció aquí. Bescanvi de buit. Void simplement vol dir que és no va a tornar res. El nom de la funció és anomenat swap, i és anar a la ingesta de dues variables, int a i int b, de la seva funció [inaudible]. Per tant, bàsicament en aquí, estem passant x i y en aquesta funció. I si haguéssim de Creem esto-- pel que volem per crear un valor temporal, no? Anem a assignar aquesta a un. I després una va a ara igual b. I b va a estar de tornada on el valor de temperatura era, que és una, perquè quan vol canviar les coses, no es pot simplement voleu intercanviar-los. Has de mantenir 1 aquí, així que recorda el que és, perquè un cop canvies un, se li oblida la qual cosa el valor original, oi? Així que en teoria, aquest programa hauria de funcionar, no? Si volgués canviar la dos, que haurien de canviar. Així que anem a córrer i veure si funciona. Així com vostès poden veure, x una vegada va ser 1 e i va ser una vegada 2. I si puc imprimir a terme, x segueix sent 1 iy és 2. Hmm, aquest programa no sembla ser treballant de la manera que vull que funcioni. Algú vol fer una foto a endevinar què estava passant això? Té a veure amb la forma en que les coses són diferents emmagatzemada en diferents llocs de la memòria. D'ACORD. Així que vostès no han de preocupar massa sobre això ara mateix. Però saber que el cub de locals variables van ser a i b, perquè aquí a la nostra funció, hem declarat a i b com les variables que hi dins de cub, aquesta funció. Però com es pot veure, els paràmetres que està prenent en estaven sent emmagatzemats aquí. Però no estàvem en realitat tornar res. No estàvem realment canviant x i y. Estàvem canviant ai b. Havíem copiat x i y en cosa que es diu a i b. Però en realitat mai manipulat x i y ells mateixos. Estan veient el que està succeint? És que simplement hem copiem més, però nosaltres no hem guardat realitat un seguiment d'on es trobaven a la memòria. I el que ara l'equip està mirant, oh, tinc executar aquesta cosa a través aquesta bella funció. Però x i y són encara x i y. Res ha passat ells pel fet de que aquests paràmetres i variables locals s'emmagatzemen en una diferent col·locar a la memòria. I aquesta és una de nivell superior concepte que anem a començar a veure més endavant en el curs. Però només sé que això és un problema que pot passar i que anem a esbrinar la manera de com a davant això més endavant en el curs. D'ACORD. Tot bé. Així que l'últim concepte que estem realment va a cobrir això va a ser útil per al conjunt de processadors aquesta setmana són el que s'anomenen arguments de la línia d'ordres. Així que Rob en la seva conferència va ser a través de tipus de breument sobre com funcionen. Essencialment saber que quan estàs escrivint com una funció principal, quan va escriure funcions abans en el passat, vam tenir void main int. I la raó per la qual va nul·la allà va ser perquè els nostres programes no ho van fer necessitar valors d'entrada per a funcionar, no? Quan em vaig trobar amb Mario, jo no necessitava que en realitat només ha d'escriure alguna cosa quan em vaig trobar amb Mario. Jo podria demanar a l'usuari més endavant. Però això no sempre serà el cas. Per exemple, en aquest El problema de la setmana fixa, vostè va a demanar que, A més d'executar el seu programa, vostè va a voler entrada certes coses a la recta com vostè executar el programa. Així que la forma de fer que es diu un argument de línia d'ordres, que és com un argument pot introduir directament com vostè està tractant d'executar el programa. Així que la notació per això, és força complexa de futur, però en realitat no és que difícil. Així int main-- això és només la seva funció principal. En comes argc suports argv cadena. Així que tot el que està dient és que aquest int argc-- tot el que se li diu és que aquells són el nombre de arguments l'equip d'esperar. Així que una cosa que és veritat important no perdre de vista és el nom físic del seu programa compte com un d'aquests arguments. Així que si jo volia tenir el meu programa córrer més una línia d'ordres addicional argument, en realitat estic va tenir dos. Argc en realitat va a ser dues. I després argv cadena bracket-- tot el que està fent, que m'està donant una matriu de cadenes que és va a simplement mostrar i emmagatzemar el tots aquests arguments de la línia d'ordres són. Així per exemple, si jo volia tenir aquest programa, ./copy archivoentrada archivosalida archivosalida, oi? Això és només una ordre típic Linux. El que en realitat és argc? Quants arguments de la línia d'ordres hi ha en realitat en aquest? Tot això fa és fer una còpia de 1 infile del nom d'un fitxer i el copia a un altre arxiu, oi? Això és tot això està fent. Com es pot veure, ho estic fent en una sola línia sense realment necessitar el programa. Quina és la nostra argc en aquest cas? Quants arguments tenim? AUDIÈNCIA: ¿Tres? ANDI Peng: Tenim tres, exactament. Així que és molt intuïtiu només cal pensar que és només el infile i l'arxiu de sortida. Però saber que el nom físic del programa que s'està executant compte com un. Així que en aquest cas, argc és en realitat tres. Què et sembla, el que és argv 0? Recordeu, tot el arguments de la línia d'ordres s'emmagatzema en una matriu de cadenes. Així que si intento accedir-hi, el que seria argv suport 0-me? AUDIÈNCIA: [inaudible]. ANDI Peng: Exactament. Em donaria el punt slash còpia, perquè això és l'element 0 ª, la primer element de la meva matriu. Què passa amb argv 1? AUDIÈNCIA: infile. ANDI Peng: infile, exactament. Què passa amb argv 2? AUDIÈNCIA: outfile. ANDI Peng: outfile. Això és una mica complicat ara. Què pensen vostès argv 3 es va a donar-me si tractava d'imprimir que fos? AUDIÈNCIA: [inaudible]? ANDI Peng: ¿Vostè té una mà? Sí. AUDIÈNCIA: Una alternativa. ANDI Peng: Exactament. Així que recorda, en la conferència que tenir al final d'una carrera d'alguna cosa trucat un terminador nul? Anem a entrar en això també més endavant en la classe. Però saber que en la notació, la forma en què el seu equip Sap que és el final de la matriu és que posa una cosa anomenada un nul terminador o un guió zero. Així que si s'intenta accedir a argv 3, te n'aniràs a aquest tauler 0. Això és encara més d'una pregunta amb trampa. Què passa amb argv 4? Així que això és passat terminador nul, més enllà dels límits de la nostra matriu. Què creus que va a succeirà quan tractem de fer això? AUDIÈNCIA: [inaudible]? ANDI Peng: Ho sento? Dir que una mica més fort? AUDIÈNCIA: [inaudible]. ANDI Peng: Sí. Aquest és el nom de la àrea el més probable obtenir. Però saber que argv 4-- que permet l'accés llocs al seu equip de memòria que realment no ha de ser commovedora, perquè ara vostè sap el que és argv. Vostè sap que és una matriu de mida 3 que té punts de còpia, infile i archivosalida. Si tracta d'anar molt més enllà que que ets més enllà del terminador nul, l'equip té, probablement, alguna cosa emmagatzemat en argv 4. I que realment no hauria de ser autoritzar a entrar en argv 4, perquè vostè té un arxiu armari i només són permès l'accés a aquests tres prestatges. Però si intenta arribar molt més enllà de la plataforma d'on se li permet, vostè va a començar a jugar amb altres coses en la memòria de l'equip. Això serà molt, molt dolent. Així que saber això. Tingueu molta cura de que no només començar atzar accés als elements d'un array que no estaven en el que volia crear. Sí. D'ACORD. Així que anem a fer una altra exemple terminal d'aquí. D'ACORD. Així que Rob ràpidament en conferència L'altre dia es va anar a través d'aquest exemple, on tingut int main int argv cadena argc claudàtors, el que m'està dient que sóc va tenir arguments de la línia d'ordres. Ell té, si argc és igual és igual a 2-- recordi, és igual a iguals significa la comparació. Si és igual a 2, llavors estic va a imprimir hola, qualsevol que sigui la primera element de la matriu és. Impressió Else, hola món. Què és això va a succeir en essència? Pot algú explicar en Anglès el que aquest programa està fent? Sí. AUDIÈNCIA: Si algú escriu en una ordre i va dir el seu nom i cognom, que no només va a imprimir la primer i dir hola, qualsevol que sigui el seu nom és. ANDI Peng: OK, anem a executar-lo. Així, per exemple, si jo hagués de fer aquest arxiu fan hola hola A-- A-- què vols que d'entrada? AUDIÈNCIA: Nom i cognoms. ANDI Peng: Nom i cognom? Espais? AUDIÈNCIA: Sí. ANDI Peng: Pot algú dir mi en aquest moment, el que és argc? Just aquí? Vaja, ho sento. Permetin-me tornar. Quants arguments de la línia d'ordres que tracti: vostès no poden veure realment. Però vaig a tractar de fer un zoom. Estic intentant. Sí, hi ha tres, no? És slash dot hola, és Andi, i és Peng. Llavors, què pensen vostès aquest programa es va a imprimir? Oh. Oh, ho sento. Nom. Està imprimint, hola món. Algú vol explicar per què està succeint? Sí? AUDIÈNCIA: [inaudible]. ANDI Peng: Exactament. Així que aquí, són condicionals És a dir, si argc és igual és igual a 2. Així que només en el cas que hi dos arguments de la línia d'ordres. Llavors em vaig a imprimir, hola, el que sigui. Però una altra cosa, vaig a imprimir només, hola món. Així que vol a algú donar-me un exemple de la forma en què seria capaç de realitat aconseguir que es vol imprimir el valor de argv 1? Què havia de haver d'introduir aquí? Només una cosa, oi? A causa de que el punt per saludar ja compte com el primer argument. Només tinc un més. Així dot hola si em faig Andi. Hola, Andi. Tots entenen per què està succeint? Sí. AUDIÈNCIA: Llavors, l'espai entre el comandament line-- és que [inaudible]? ANDI Peng: No. Així que l'espai en una línia d'ordres argument, x, de dir-li al seu equip que aquest és el començament d'una nova cadena. Així argv cadena aquí-- que botigues tots els seus arguments de línia de comandes en les cadenes. I pel que l'espai en la línia d'ordres argument-- l'únic que fa és dir-li, això és a l'extrem d'una corda i és el moment de passar a un altre. Sí. Això és molt important per el conjunt de processadors, perquè ets va a provar aquests. Així que algú té alguna pregunta sobre això? D'acord, guai. Sí? AUDIÈNCIA: Així que la raó per la qual ho faria posar sencer argument calc lloc de [inaudible] seria quan vulgui per escriure informació addicional per [Inaudible]? ANDI Peng: Sí, exactament. Alguns programes requereixen que vostè per introduir un argument de línia d'ordres que entra i que utilitza això. Sí. AUDIÈNCIA: I què si [inaudible]? ANDI Peng: Bé, què he canviar llavors en el meu programa? AUDIÈNCIA: Només 3. ANDI Peng: Per què és que passant, què et sembla? AUDIÈNCIA: Com que el [inaudible]. AUDIÈNCIA: Vostè hauria de canviar-ho a 2 [inaudible]. AUDIÈNCIA: 1 i 2. ANDI Peng: 1 i 2, exactament. Així que en aquest cas, és probable que vull tenir de dos printf statements-- un que argv imprès 1 i el que imprimeix argv 2. Aquí. Que puc fer realitat que molt ràpid. Cal anar. Oh. No és exactament el que volies. Però si vostès perdre el temps amb el format, que sortirà. Sí. Fresc. Sé que estem una mica curts de temps. Però vaig només per passar ràpidament una parell de minuts que passen per helpful-- AUDIÈNCIA: Tens dos minuts. ANDI Peng: Tinc dos minuts? Gràcies. Alguns consells PSet ràpides. Així que per a aquest conjunt de processadors, li recomano, com he dit, a tots a llegir l'especificació. Vas a estar escrivint un sol de tres programs-- anomenada initials.c, un anomenat caesar.c, un anomenat vigenere.c. Alguns consells importants que vostès realment volen tenir en mente-- el existeix aquesta funció anomenada atoi-- com m'agrada dir, a trois. No queda clar si això és en realitat com ho diu. Però tot el que està fent, que està introduint. Converteix una cadena a un enter. Així que a representa ASCII per a i sencer. És només la conversió d'ASCII valors a valors sencers. Així que recordi argv, la matriu que emmagatzema tots els comandaments de la línia arguments-- que tots ells emmagatzema com cadenes. I pel que si vostè vol ser capaç de tenen un d'ells es converteixen en un nombre sencer, vostè va a tenir utilitzar aquest valor aquí. Mòdul, com hem cobert anteriorment en la classe d'avui, permet que vostè tingui la resta del que tinguis. Així que si tenim molt, molt un gran nombre de César, el que si tenim el final d'una cadena de Vigenère? Com vas a poder per aconseguir que per embolicar al voltant? Si em va colpejar z i vull que vagi de nou a una, Com aconseguiré que per embolicar al voltant? Probablement vulgui utilitzar mòdul en algun lloc. En segon lloc, navegar al voltant la seva biblioteca. ctype.h. Això és una nova biblioteca que tenim. Trobareu una gran quantitat de molt, molt isupper functions-- útil, islower, ToUpper, tolower, isalpha, etcètera. Totes les funcions que seran de gran utilitat quan vostè està tractant d'esbrinar, és aquest personatge una lletra minúscula? Com puc convertir aquest cadena a una majúscula? Totes aquestes coses van a ser molt, molt útil per al conjunt de processadors. D'ACORD. L'horari d'atenció d'aquesta nit són les 8:00 a les 11:00 a l'aula garjola demà així com dimecres i dijous a la nit. Les hores d'oficina són a commons. Altament suggerir nois tot pot començar immediatament, perquè vostè no desitja ser que noi que la nit de dijous té problemes presentant el conjunt de processadors i està com, jo ​​no sé què fer. Vaig començar, he acabat, em vaig presentar. Intenta donar una mica d'ambient, perquè en sempre es produeixen problemes de codi. Vostè vol assegurar-se que que vostè es dóna un munt de temps per poder per completar els conjunts de processadors. Fresc. Em quedaré per aquí. AUDIÈNCIA: És aquesta línia ja? ANDI Peng: Jo no sé si és ja en línia, però serà. Em quedaré per aquí si algú té alguna pregunta ja. Gràcies per venir.