[REPRODUCCIÓ DE MÚSICA] DAVID Malan: Hola a tots. Això és supersección de CS50. Seccions assignats no ho farà començar una altra setmana. I per això avui, sóc aquí con-- MARIA: Maria. DAVID Malan: --to realitat fer una ullada a un problema establir un, el curs de primeres setmanes de material, aconseguir-orientat amb IDE CS50, una mica de Linux, el sistema operatiu que és que s'executa en IDE, així com veure algunes de la transició des de zero en C líder fins a un problema establir un. Així que sense més preàmbuls, al problema d'establir un, vostè va a ser presentin a CS50 IDE, que és aquesta programació basada en la web entorn que utilitzem per tal escriure programes. Ha estat dissenyat per semblar molt reminiscència d'un ordinador típic sistema que executa una operació sistema anomenat Linux. Però és en l'anomenat núvol, el que significa que tots en la classe en realitat pot tenir el seu propi compte i usar-lo, també. Així que la majoria de vostès probablement mai han utilitzat un entorn Linux abans o potser fins i tot un entorn de línia d'ordres. I una línia d'ordres medi ambient és diferent. Tot és textual. És tots els comandaments de teclat. I no és passar el ratolí, no hi ha icones, sense finestres de diàleg, no hi ha menús. És purament text. Així que en un primer moment, que tipus de se sent com un pas cap enrere en termes de sofisticació. Però acaba sent molt més potent, sens dubte, per a un científic de la computació, en última instància. Així que anem a fer una ullada. Aquí estic en CS50.io, a través del qual podeu entrar a IDE CS50. I igual que en Scratch, hi ha tres àrees principals a aquesta pantalla. Així que en el costat de l'esquerra, tenim quin serà l'explorador d'arxius. I hi ha aquesta carpeta en superior, que és ara buit des que em vaig desfer de tot el meu arxius abans supersección. I aquí és on anem guardar arxius de C que escrivim. A la part superior dreta, tenim un lloc on tot el nostre codi posarà per escrit. I de fet, si faig clic a aquest plus, aquesta es deixarà que em trio Nou arxiu. I jo que puc començar a escriure codi C o, Realment, qualsevol nombre d'altres idiomes. I després a la part inferior on es diu jharvard @ ide50-- i la teva serà dir alguna cosa una mica diferent-- el que es diu això? Finestra de Terminal. Sí. Per tant la finestra de terminal és la crida de línia d'ordres interfície a través de la qual es pot interactuar amb el sistema operatiu subjacent. I per ara, anem a fer molt poc ús de esto-- acaba de compilar, mirar missatges d'error que veiem, i per executar els nostres programes. Però en última instància, anem fer molt més, també. I fins i tot es pot instal·lar el programari i administrar el seu espai de treball dins CS50 IDE, també. Però més sobre això en un altre moment. Així que seguirem endavant i escriure un programa molt senzill només de passar per un escalfament de hello.c, que és potser el programa més simple podem escriure. Jo ja he obert una nova pestanya. Vaig a seguir endavant i dir incloure io.h. estàndard Llavors int main (void). I llavors printf ("hola, món" barra invertida n, prop de cotització, tancar parèntesi i punt i coma. Tot bé. Així que ara es va adonar de la meva finestra no té títol. Així que vaig molt ràpid pujar a Arxiu, Guardar. I és important que Em dic no aquesta "hola". Així que un error molt comú, especialment en un problema conjunt un, és accidentalment acaba de trucar a la seva programa d '"aigua" o "cobdiciosos" o "Mario" o "crèdit" o similars. Però en realitat es vol fer Segur que té l'extensió d'arxiu perquè aquesta és l'única manera que el compilador i també l'editor de codi sap que ets realment escriure codi C. Així que permetin-me anar endavant i feu clic a Desa. I ara, també, el que CS50 IDE ha fet per nosaltres és que és també sintaxi ressaltat tot. Així que ha fet tot molt colorit. I tot el propòsit de que no és funcional. És només per dibuixar els ulls a la conceptualment diferents peces d'aquest programa. Així que seguirem endavant i compilar això. I puc compilar aquest en un parell de maneres. I en la setmana un, el manera de la vella escola que vam fer estava literalment al "hello.c so metàl·lic." comanda line-- I llavors em va colpejar Retorn. I res sembla succeir a la finestra de terminal. Però el que va fer el canvi en l'IDE? Quan, un cop més, l'IDE només significa Entorn de desenvolupament integrat. És una forma elegant de dir aquest desenvolupament integrat medi ambient per al desenvolupament de programari. Llavors, què va canviar en la interfície d'usuari? Què vas notar això és diferent, Maria? MARIA: Em vaig adonar d'una cosa sota la IDE50 carpeta aquí. DAVID Malan: Sí. Així que aquí, no només ¿Tenim "hello.c." També tenim "a.out", que és classe de nom ximple per a un programa. Però de fet, és el nom per defecte per a un programa quan vostè acaba de compilar el codi i no dir-li al compilador un arxiu de sortida. Així que si vull córrer això, necessitar dir-li al compiler-- o més aviat, necessito dir-li a l'espai de treball que desitgi executar el programa anomenat "a.out". Retorn. I hi ha "hola, món. "Ara el" ./ ". és realment important. Tot i que normalment només escriure els noms d'ordres, quan és un programa que tens per escrit, vostè vol dir "./" perquè això diu explícitament Linux que desitja executar un programa anomenat "a.out" que està en això, en quin punt significa aquest directori que estic actualment en, que passa a ser anomenat espai de treball, "a.out. Perquè si simplement li vaig dir "a.out" Enter, Jo vaig a aconseguir "a.out comanda no trobat "perquè el computer-- perquè jo vaig inventar "a.out"; que no va venir amb la computer-- no sap on buscar-ho, tot i que és el correcte sota el meu nas, per així dir-ho. D'ACORD. Així que podem canviar això a ser "Clang -o hola hello.c." I si prem enter, quin programa ¿Això va a la sortida per a mi? Quin és el nom del fitxer? Sí, a la part posterior. Això és correcte. "Hola." Així que "hola" serà el nom del programa perquè nosaltres hem utilitzat la trucada d'un argument de la línia d'ordres, que és just una forma de canviar el comportament de el compilador realitat de sortida un nom de fitxer específic. I de fet, si el zoom i mirar cap amunt aquí, ara tinc no només "a.out" i "hello.c", sinó també "hola", també. Així que ara que puc fer "./hola," Enter. I hi ha "hola, món". Però lastly-- i això ara serà la convenció fem servir tot el semestre, typically-- és que també pot simplement dir "fer hola." I, en efecte, està dient que és fins fins a la data perquè ja existeix. Déjame anar per davant i treure, amb la comanda rm, tant "a.out" - i dir "treure a.out fitxer normal?" Això només vol dir, oi Segur que ho voleu suprimir? Vaig a dir que si. I després em vaig a treure "hola", però no "hello.c." Vaig a dir "sí" de manera explícita, però "i" és suficient, també. I ara si em compte escrigui ls-- que, recordo, significa pel·lícules-- que enumera tots dels arxius en la carpeta. I de fet, si el zoom i mira a dalt a l'esquerra, confirma que el que cal en aquesta carpeta, fins i tot encara que ha etiquetat com IDE50 aquí i no de l'àrea de treball, és només "hello.c." Així que ara aquí, si jo no "fer hola," Enter, ara veig una ordre molt més temps, sinó una més sofisticat de comandaments que està passant per ser útil en les setmanes vinents. I ara el que puc dir "./hola." Així que donem un ràpid recorregut ordres d'alguna altra Linux. Llavors, per què no donar un pas enrere i realment es veuen en C més en general, la transició des de zero a C, i després concloure amb una mirada en el primer problema establert en C. D'acord. Així que vaig a seguir endavant i només neteja el meu espai de treball amb Control-L només per mantenir la pantalla neta. Però això no té cap funcional impactar d'una altra manera. Recordem que hem vist alguns comandaments ara. Així que hem vist so metàl·lic, que en general vostè no haurà d'executar manualment més. Lloc Farem servir maquillatge. Però també vam veure ls, que mostra una llista dels arxius en el meu directori. I ara per què és allà- N'hi ha de dos arxius ara, "hola" i "hello.c." Per què hi ha una estrella o un asterisc després de "hola"? Què significa això, sobre la base en el que vam veure en la primera setmana? Què penses? Què significa l'estrella? MARIA: para-- el programa "hola"? DAVID Malan: "Hola *". Sí. Ah, sí? Oh, executable. Això és correcte. Així que això significa que "hola" és executable. Així que de fet, és per això Que puc fer "./hola." Tot bé. Llavors, què més puc fer aquí? Bé, resulta que el que pugui També crear directoris. Així que permetin-me seguir endavant i crear, per exemple, un directori "pset1". I l'especificació conjunt de problemes haurà de fer exactament això, pel que no ha de recordar avui. Però "pset1 mkdir" sembla no tenir cap impacte. Però, de nou, cap missatge d'error en general és una bona cosa. Així que si escric "ls" ara-- ah, ara Tinc un arxiu executable anomenat "hola", un arxiu C diu "hello.c." I llavors la barra final, de manera que parlar, vol dir que aquest és un directori. Així que de fet, ara vull obrir-lo. I no em doble clic sobre ella com en una interfície gràfica d'usuari, un entorn gràfic. Jo en canvi dic "pset1 cd." Retorn. Res interessant sembla tenir passat, excepte el meu petit símbol aquí-- aquesta és la manera de recordar de Linux amb mi on jo estic, així que què carpeta està oberta. És només que em diu de manera explícita en contraposició a gràficament. I si escric "ls", perquè he vist que una altra prompt immediatament, pensa vostè, quan enumero els continguts de pset1? MARIA: Probablement no ho fa tenir alguna cosa allà. DAVID Malan: Sí. Així que no ho hem fet, òbviament, creat alguna cosa allà perquè m'acabo de crear el directori. Ara, si jo volia crear un file-- per exemple, podria crear un nou arxiu. I llavors jo podria anar a Guardar i guardar com, com, "mario.c" si està fent l'edició estàndard del conjunt de processadors un. I després, com qualsevol Mac o PC, simplement triar la carpeta "pset1, Desa. I ara l'arxiu està buit. Però anem a apropar de nou per un segon. Farem ls aquí. Ara veiem "mario.c". Així que hi ha alguns altres comandaments que val la pena tenint en compte més d'temps-- clar, o Control-L és el que tinc estat colpejant; mkdir que hem vist; rm que hem vist, també, que és per eliminar o esborrar un arxiu. Cura pots també- i si et fixes a tutorials en línia, podràs rm -rf és una forma molt comuna de dir suprimir una carpeta que té coses a ell. Tot just sigui super, super cura. -rf significa recursivament eliminar el que sigui vostè està tractant d'eliminar i per la força eliminar-lo. Així mitjans recursiu si es tracta d'una carpeta amb una carpeta amb una carpeta amb una carpeta, eliminar tots ells. I la força vol dir ni tan sols em pregunta si o no, estic segur? Així que és una manera estupenda de perillós la supressió d'un munt de coses ràpidament. Però beware-- massa sovint fa un intrèpid estudiant esborrar accidentalment, per exemple, conjunt de processadors un, per exemple. MARIA: I si només fer -r, van per preguntar-los sobre cada arxiu. DAVID Malan: Què és moderadament molest. MARIA: Sí. DAVID Malan: Així que per això molts de nosaltres, i un mateix, estic en l'hàbit d'usar -rf. Però és perillós. Així que el comprador tingui cura. I després mv és una espècie de Curiosament anomenat. Així que aquest és l'ordre de moviment, que se sent una mica estrany perquè de fet es pot utilitzar per moure arxius d'un lloc a un altre. Per exemple, suposem que vaig ficar la pota. Suposem que he creat un nou arxiu per al conjunt de processadors. I jo vaig guardar com "greedy.c." Però suposem que accidentalment guardar- en IDE50-- així que en el meu propi espai de treball i no en pset1. Vostè pot veure tant en la part superior esquerra. Hi ha "greedy.c." I hi ha algunes solucions. Així que un, puc utilitzar el manera fàcil d'usar súper de tan sols arrossegar i deixar anar. I això faria realitat solucionar aquest problema. Però avui, que estem tractant de mirar les formes més arcans però poderoses de fer això. Així que vull aprofitar "ls" a pset1. I jo només veig "mario.c." Déjame anar endavant i fer-ho "cd ..". Així CD de nou és canviar directori. ".." Significa el que, però? L'última vegada que vaig dir "cd pset1 "per entrar a pset1. Així que quan dic "cd ..", què estic fent? Al revés. Sí. Així que va a la crida dels pares. Anar a un nivell superior, igual que sortir d'una carpeta. Així Retorn. I de fet, mira el que va fer. Em va commoure només en àrea de treball en el seu lloc d'en pset1, que està en espai de treball. I ara si escric "ls", hi ha un munt de coses. En hi ha "greedy.c". Així que ara em deixa utilitzar mv per, literalment, moure "greedy.c" a pset1. I pel que una gran quantitat d'ordres de Linux treballar exactament com aquesta. Prenen sense arguments o prendre una argument o prenen dues línies d'ordres arguments i així successivament. I en aquest cas, és fent literalment el que diu, encara que succinctly-- moure greedy.c en pset1. Retorn. Res sembla succeir. Però si faig un ls de nou, cobdiciosos s'ha anat. I si ho faig "pset1 cd", Enter, i després ls nou, ara que està en el lloc correcte. Com acotació al marge, si per alguns reason-- especialment si vostè té intermitent connexió de xarxes o vostè està caminant al voltant campus amb la seva tapa del portàtil tancat i després obrir-lo de nou i el seu espai de treball sembla una mica fora de sincronització, no és gran cosa. Només recarregar el vostre navegador finestra, i el que hauria resync de manera que la mà esquerra explorador d'arxius es veu exactament de la mateixa manera que la finestra de terminal. No cal preocupar-se. En cas de dubte, torneu a carregar la pàgina, de manera que sempre que hi hagi guardat els arxius ja. D'ACORD. Així mv també es pot utilitzar per canviar el nom dels fitxers. I anem a fer una ullada a aquesta comanda final aquí. Així suppose-- i això és molt comú, també, des del principi. Alguns estudiants de tant en tant creen un arxiu crida, anem a dir-- el que és un altre? Igual que "WATER.C." Així que vaig a cridar, per cap raó, en majúscules. Però aquest no és el nom correcte per a l'arxiu si més no perquè el nostre problema ajustat especificació no t'ho va dir per guardar l'arxiu com totes les tapes "WATER.C." En el seu lloc, esperem "water.c" en minúscules. I, de fet, aquest és problemàtic perquè check50, un programa que vas per reunir-se en un problema establir un que prova de forma automàtica l'exactitud del seu codi va a cridar a vostè si no pot trobar "water.c" en minúscules. Així que he de arreglar això. Així que moltes maneres diferents a això, la primera d'elles seria la de Control i feu clic o feu clic el nom del fitxer i només canvia a Canvia el nom. Totalment bé per fer-ho. Però, de nou, avui, anem a ho fa una mica més de luxe. Farem servir mv canviar "WATER.C" a "water.c." Així que vostè pot també utilitzar el primer argument per canviar el seu nom al segon argument si el segon argument no, està en De fet, una carpeta o un nom de directori. Tot bé. I, finalment, una mica trick-- així que estic en el meu directori d'espai de treball en el moment. Si jo vull entrar en pset un, Certament puc escriure "pset1 cd." Però és tan tediós per escriure "pset1" o i als noms d'arxius o noms de directori encara. Així que molt sovint en Linux, el que vostè pot fer és començar a escriure "pse" i simplement s'avorreixen, premeu Tab, i deixar la figura de l'ordinador cap a fora per a vostè. Súper útil per entrar en aquest hàbit. L'únic inconvenient és que si tens diversos arxius o carpetes que comencen amb la lletra "p" o "ps", és possible que tingui per escriure una mica més abans que el ordinador sap què fer. MARIA: Ens agraden les dreceres. DAVID Malan: Aquesta voluntat li estalviarà molt de temps. I també, com hem dit en la conferència, que pot desplaçar-se cap amunt a la història, de dalt a baix, trobar recentment executada ordres, també. Tot bé. Així que ara, centrarem la nostra atenció de nou a un programa simple, hola món. Així que hem recopilat això exactament. I ara per què no prenem un cop d'ull als tipus de dades i després la transició d'alguns blocs d'Scratch corresponent a C. MARIA: Awesome. Així que ara que vostè ha començat escriure programes en C, començarem a parlar sobre els tipus de dades i variables. Així que alguns tipus de dades que voldria saber a partir d'ara són els que estan ressaltat en blau. Així que tenim int primer, que significa sencer. I això val sencers, com vostè podria tenir guessed-- de manera 1, 2, 3, i qualssevol altres nombres enters que vostè es pugui imaginar. DAVID Malan: I també negatiu. MARIA: I també els negatius, sí. I 0. Llavors tenim carrosses, que són nombres de punt flotant. Així que això és tots els nombres reals que tenen punts decimals. Així 5,0, 5,2, i encara més dígits després del punt decimal, com bé, i també els negatius. Llavors tenim carbó, que és un personatge. Així que crec que parlem això en la conferència d'avui. Però tenim lletres, per exemple-- A, B, C-- que es pot emmagatzemar com un char. Però llavors tenim molt més símbols que poden emmagatzemar-se com un char. I els que s'emmagatzemen en ASCII. I després tenim bool, que són booleans. I els avaluen com True o Fals o 1 i 0, respectivament. DAVID Malan: I recordem que bool prové de la biblioteca CS50. Així que no és incorporat en C, però és super útil tenir la noció de vertader i fals. I tot i que podria think-- fet de la diversió. Un bool tècnicament necessita la quantitat de bits, veritablement, per representar Veritable contra Falsa? Quants bits creus el que es necessita, com a màxim? Sí, només un. Així que resulta que C no li poden donar només una mica. La unitat més petita de mesura que pot obtenir és de vuit. Així que és una mica malgastador que ets utilitzant un byte complet, o vuit bits, per representar Vertader o Fals. Però això és només la forma en què és implementat en C per la biblioteca CS50. MARIA: I llavors els que estem No parlarem de la forma més àmplia dret ara-- doble, això és per carrosses més grans. Llarga llarg i curt també són per als nombres enters. DAVID Malan: En efecte. En l'edició pirata d'pset un, realment fem servir molt, molt. No obstant això, per a l'edició estàndard, no hauria de ser necessari. MARIA: Cool. D'ACORD. Així operators-- vostè hauria de ser probablement està familiaritzat amb la major part d'aquests. A més, +; resta, -. Per a la multiplicació, tenim el *. Així que no és la X que solem utilitzar. Divisió, tenim la barra invertida. I mòdul és el nostre últim operador que parlarem en aquest moment. És un operador que ens permet prendre la resta d'una divisió. Així que si tenim 4% 2, 4 dividit per 2 és 2 amb una resta de 0. Així que 4% 2 és 0. 4% 3 és 1. 4% 5 és 4, el que podria haver imaginat. I recordi en utilitzar tots aquests operadors utilitzar les regles PEMDAS. DAVID Malan: Així que per ser clars, si fer 4% 2, ¿per què és que 0, exactament? MARIA: A causa a 4 dividit per 2 és 2 amb una resta de 0. Així mòdul ens dóna aquesta resta com en comparació amb el resultat de la divisió. DAVID Malan: I, en efecte, el que trobarem útil? per dir que en alguns problemes això no és necessàriament un, si vostè vol tenir la efecte de restringir a tu mateix per a un rang de números com 0 a través d'alguna cosa, pot utilitzar mòdul per embolicar abans que com l'2000000000 o el valor de 4 mil milions que que hem parlat en la conferència. MARIA: Sí. I fins i tot en "cobdiciosos" que podria. DAVID Malan: Sí, en problema configurat un, també. MARIA: Sí, molt bé. DAVID Malan: Bon toc. MARIA: Ho sento. Boolean expressions-- ho per als operadors booleans, parlarem de tot d'aquests que vostè veu aquí. Així que ara mateix, tenim dos signes d'igual s'enumeren per iguals. Així que aquests són per a la comparació. Fins ara, només hem vist un sol signe igual. Va ser llavors quan li assignem un valor a una variable. Així que si hem vist int n = 5, a continuació, hem assignat 5 a la variable n. Però si volem fer servir == per comparació, es pot comprovar si n == 5. I si n == 5, llavors això és cert. Així que els operadors booleans ens permet, bàsicament, per avaluar Boolean expressions de vertader o fals. Així que no equals-- tenim la signe d'exclamació i els iguals. Així també podríem comprovar si n no és igual al 5-- n! = 5. Més petit que, menor que o igual a, més gran que, més gran que o igual a, i després tenim la lògica I ja la lògica OR. I els que ens permeten avaluar múltiples expressions booleanes junts venir bàsicament junts com una sola expressió booleana conjunt. Així que si volem trobar un nombre, per exemple, que és més gran que 5 però menys de 15 al mateix temps, ens agradaria utilitzar el operador lògic AND per veure si n és major que 5 && n menys de 15. DAVID Malan: I aquí, també, és molt fàcil des del principi per accidentalment utilitzar un sol signe o una sola barra vertical. I espero que el compilador gritarte perquè en realitat tenir un significat molt diferent. Per als curiosos, són utilitzat per a operacions bit a bit, operant en bits individuals. Però sí vull el parell aquí. I molt important és que primer, el signe igual, que és l'operador d'igualtat com en comparació amb l'operador d'assignació. MARIA: I la barra vertical és situat entre el Eliminar i Retorn. DAVID Malan: Sí. En un teclat típic d'Estats Units. MARIA: Sí. Així que anem a entrar de ple en sentències condicionals. En Scratch, vostè té ja s'ha vist, probablement, si les declaracions que li permeten comprovar si alguna cosa és cert, llavors fer una altra cosa. Així que vostè pot ser que hi hagi volgut per comprovar si el teu sprite és tocant alguna altra sprites o la vora de la pantalla. I llavors vostè pot ser que hagi volgut acabar el joc o fer una altra cosa. Així que la sintaxi perquè és "si (condició)." Així que si el teu sprite està tocant alguna cosa, llavors no està dins de les claus. Llavors tenim if-else. Else ens permet fer alguna cosa Si la condició que comprovar si al principi no és cert. Així que si el sprite toca el fronterera fer això, més faci alguna cosa més. Així que en cas contrari fer alguna cosa més. Llavors tenim un petit exemple per això. Així que si (military_time <12), que voler printf "Bon dia!" Else anem a printf "Bona nit!" Exemple bàsic. DAVID Malan: Good. MARIA: Cool. Així que ara tenim sentències switch. Canvieu declaracions en general pot ens permeten fer un munt del mateix que acabem de parlar sobre si les declaracions. Per exemple, ara mateix tenim la forma general de la sentència switch que permet que prenguem una variable anomenada n i comparar-lo amb una gran quantitat d' diferents valors, que aquí estem han cridat Constant1, constant2. És possible que tinguem molt més. I els que són anomenats casos. Així que si tenim un interruptor statement-- i aquesta obra només per integers-- tenim una variable en aquest cas que és n. Si la variable n és igual a Constant1, ens executarà algun fragment de codi o alguna cosa que volem fer. I llavors podríem trencar. Així que la ruptura vol dir que la sentència switch s'aturarà l'execució si n és igual a Constant1, i després el programa continuarà. Es sortirà fora de la canviar declaració i que va a seguir fent una altra cosa. No obstant això, si n no és igual Constant1, llavors el cas de constant2 es comprovarà. Així que si n és igual constant2, aquest altre s'executarà fragment de codi. I després es trencarà si això és igual a ella. I després podem tenir també- no necessàriament, aunque-- un cas per defecte, que succeirà si n no és igual a qualsevol dels casos que vostè ha enumerat. I en el cas per defecte, també no necessiten un descans necessàriament perquè la sentència switch coneixerà que necessita per acabar després del default cas si aquest és el cas. DAVID Malan: Però estilísticament, sempre ens posem en allà. MARIA: Sí. DAVID Malan: Sí. Així que sobretot quan comencen, especialment si entre els menys còmoda, ho faria personalment simplement recomanen seguir amb les FI i IFS-vigilés i si-else-if vigilés i així successivament si només perquè són una mica més senzill. Aquesta és una bona optimització, o de vegades fins i tot estèticament fa que el codi sigui més llegible. I de fet, probablement meitat del semestre anem a veure un problema set on només es veu millor i més fàcil de llegir per als humans mitjançant l'ús d'una sentència switch. Però no et preocupis aferrant-se a aquesta massa aviat. MARIA: Sí. Si vostè té un munt de sentències if, simplement no podria ser molt llegible. Potser no és molt ràpid perquè vostè vagi a través d'ell. Així que canviar declaracions poden ser molt útil, també. I també, no remember-- no fer us oblideu de posar les pauses en aquest país. DAVID Malan: No recorda això. MARIA: Perquè llavors vostè podria caure a través d'un cas a un altre. Així que diguem que el cas Constant1 no tenen una sentència break en el mateix. Llavors podríem caure a través de constant2 cas dins. I nosaltres no volem fer això si que ja hem assolit cas Constant1 i és igual a n. Així, per exemple, si tenim una variable n que conté un nombre de classe, i volem veure el que classe és-- si n és igual a 50, anem a imprimir "CS50 és Introducció a les Ciències de la Computació I. " Llavors anem a trencar. I això és tot. Si, però, n és igual a 51, anem imprimir "CS51 és Introducció de Ciències de la Computació II ". Llavors, de nou, anem a trencar. No obstant això, si a continuació, posem 124, 61, qualsevol un altre nombre que vostè podria pensar, o programa no va reconèixer que. Així que dirà: "Ho sento, estic no està familiaritzat amb aquesta classe ". I es trencarà. DAVID Malan: Així que realment pot veure el if, else if, else idea aquí. És simplement diferent sintaxi per expressant la mateixa idea exacta. MARIA: Exactament. Ara tenim els nostres operadors ternaris. Així que els operadors ternaris tenen de tres parts-- una condició, alguna cosa que fer si que la condició és veritable, i després alguna cosa que fer si aquesta condició és falsa. Com podeu veure, bàsicament, la sintaxi d'això aquí. Tenim el signe d'interrogació, i llavors ell-- ¿què és el que anomenem això? DAVID Malan: El còlon. MARIA: Colom. Gràcies. Ho sento. Així que donem una ullada al nostre exemple de veure si podem donar sentit a esto-- class_num == 50. Així que aquí veiem el nostre operador booleà == que compara la class_num variables a 50. Botigues Així class_num un enter. I si aquest sencer és igual a 50, llavors estem va a emmagatzemar "David Malan" a l'interior del professor cadena. Si el nombre de classes no igual a 50, "No està David Malan" serà el professor. DAVID Malan: Gràcies. I així sembla equivalent a què, vostè diria, a primera vista? MARIA: A mi em sembla com if-else declaracions. DAVID Malan: Sí. I de fet, això és una espècie d'un bonic un traçador de línies, per així dir-ho, per a l'aplicació de exactament la lògica de if-else però fer-ho tot en un sol pas. MARIA: Exactament. Sí. Declaracions Així que si-més podria ocupen molt espai. Pot ser que siguin massa llargs per una cosa tan simple com això. Així això pot ser molt succinta i molt agradable. Així que ara anem a mirar l'execució d'alguna cosa una i altra vegada, el que la comprovació per a una condicionar diverses vegades i després continuar a fer alguna cosa mentre que la condició és vertadera. Així que això ens porta molt bé en cicles while. A l'esquerra, tenim el nostre primer bucle while. Així, mentre que alguna cosa és veritat, fer alguna cosa una i altra vegada. Així que assegureu-vos adonar-se que la nostra condició que aquí es valida en la part superior. Mentre que amb la nostra segona loop-- anomenem que un do-while loop-- fem alguna cosa, a continuació, comprovem per una condició. I si aquesta condició segueix sent cert, tornem i fem la cosa de nou. Així que la principal diferència és on la condició es comprova. I el codi no pot ser mai executada si la condició no és cert amb el bucle while. Mentre que amb el do-while llaç, tenim el codi que sempre s'executa almenys una vegada. I a continuació, mentre que la condició segueix sent cert, podem tornar enrere i repetir de nou a l'interior. Llavors, per què creus que usaríem 1 do-while en un bucle while? Dreta. Així que si volem demanar al usuari d'algun tipus d'entrada, si volem demanar-los d'entrar al seu nom, volem almenys demanar-los una vegada. I si entren aquest nom, no estem va a demanar de nou perquè ja la coneixem. Però si no entren el seu nom, o si entrar en alguna cosa que és òbviament no és un nom, encara volem continuar preguntant pel seu nom. DAVID Malan: I en la conferència que va tenir 1 així amb el aconseguir int positiu exemple, on no hi ha res comprovar en primer lloc perquè no té encara aconseguit un int. Així que volem fer esto-- aconseguir un int del user-- a continuació, comprovar que, potser, una i altra vegada i una altra. MARIA: Exactament. Per loops-- acord. Per bucles poden permetre que fem gairebé exactament el mateix, també. De fet, és exactament el mateix. Així que no hi ha res a que pot fer amb els bucles que no seria capaç de a veure amb cicles while. Però per als bucles pot semblar una mica poc més complicat sintàcticament perquè tenen tres parts dins del que va ser abans només el condicions, amb bucles de temps. Així que la primera part que el mar, la més a l'esquerra, tenim "int nans = 0." Així que aquí és on ens inicialitzar la nostra variable. Llavors tenim un punt i coma i "nans <7." Així que aquí és on fos condició que realment és. Així que això és el que hauríem posar només en el temps loop-- "mentre que els nans <7." Aquí, que va en el mitjà del nostre bucle for. Així que "dwaves <7." I després la última part és "nans ++" que és on ens actualitzem la nostra variable. Així que l'important és adonar-se que aquest va a anar a través d'aquest bucle set vegades i executar set vegades. Així que tenim de set nans, i són tots dirà: "Jo sóc aquí per ajudar-lo, Blanca Neus " perquè estan a punt per ajudar a Blancaneu. Amb bucles while, que haurien fet la inicialització i l'actualització no dins de la condició, de nou, però ja sigui abans o dins del bucle while per assegurar-se que nosaltres-- perquè sempre necessitem aquestes parts. Així que per assegurar-se que tenim ells, ens ho hem encara els afegit des d'ara, no dins dels parèntesis. DAVID Malan: I pel que sembla com-- en la conferència, per exemple, Jo gairebé sempre ús, com, ii n i les variables bastant avorrides. Sembla que es pot utilitzar més enginyosament anomenat les variables, també. MARIA: Sí, en realitat és molt agradable utilitzar variables una mica més descriptius degut sobretot si algú més és la lectura del seu code-- potser vostè és alumne o si vostè està col·laborant amb somebody-- vostè vol assegurar-se que Entens el que estàs fent. D'ACORD. Així que això és una cosa molt funky-- bucle for dins d'un bucle for. No sé si ens hem vist això abans. Probablement no. Però en realitat podem tenir esto-- així bucles en lloc de bucles. Així que, algú vol caminar potser mi a través del que està passant aquí? DAVID Malan: vaig a prendre una punyalada. MARIA: Cool. DAVID Malan: OK. Així, spoiler-- volem imprimir el material que està a la cantonada inferior dreta allà. MARIA: Correcte. Si si. DAVID Malan: Així que acabem de ja que la producció de la mostra allà. Així que puc deduir de la bucle superior que ets iterar sobre les files bucle més extern, per així dir-ho. I estàs iterar sobre columnes amb el bucle més interior. I de manera intuïtiva, aquesta ha d'esperar té sentit perquè per naturalesa de tots els programes que hem vist abans, printf, que és el funció que estem fent servir, en última instància, té la capacitat d'imprimir coses essencialment línia per línia. Igual que, una vegada que hagi emesos una nova línia, hi ha sense doblegar l'esquena i la impressió d'una cosa major a la pantalla, almenys no usar printf com aquest. I així, en aquest sentit, es fa sentit que el bucle més extern s'ha de referir a les files perquè per a cada fila donada, vostè va a voler imprimir XXXXX, i després passar a la següent fila, XXXXX. Així files són el primer. I després dins de cada fila, imprimir columnes. Si es va tractar de fer-ho de la contrari, és probable que no ho faria sortir com pensa. MARIA: Sí. No podíem tornar a la fila anterior amb printf. DAVID Malan: ¿I què és interessant per xerrada d'avui sobre l'abast, en realitat, és que la fila és un int això és declarat en el bucle superior. Però cal notar que encara és dins, per així dir-ho, les claus que immediatament seguir, tot i que no és tècnicament dins d'aquestes claus. Així fila està en l'àmbit de la totalitat del fragment de codi, tant dins el cicle for exterior ia l'interior de l'interior de bucle. Però per contra, on és la columna en el seu abast? La columna variable? Sí, només en el bucle interior. I això està bé, perquè no accedim fora de les seves claus. Tot el que fem és imprimir un nou línia al final allà. Així que, de fet, està bé. Així que això té l'efecte, sembla que, de fer les tres files i quatre columnes. MARIA: Correcte. Així que primer anem a través de la nostra primera fila. I just en la nostra primera fila, nosaltres fem la quatre columnes dins de la primera fila. Així que imprimim a terme quatre de X. I després podem sortir del bucle for, ja ja hem imprimim 4 de X. I imprimim una nova línia. I després anem a través de la mateix procés per a dues files més per fer un total de tres. DAVID Malan: I val la pena assenyalar que és simplement un artefacte de la font, el fet que la sortida de la mostra sembla molt més alt, com si encara hi ha més files que columnes. Però és només perquè el X és més alt que ample. Això és tot el que està passant allà, més l'espai en blanc entre línies. MARIA: Correcte. Fresc. DAVID Malan: D'acord. Així que una mirada ràpida a un problema estableix una, prendre alguna pregunta, i després aixecar la sessió? Tot bé. Així que en el problema va fixar un, hi ha de tres principals desafiaments, en última instància. Però primer, trobareu que el problema establert especificació, igual que amb molts el conjunts de processadors d'aquesta tardor, va a caminar a a través d'alguns exercicis d'escalfament, assenyalar alguns recursos que pot o no han vist ja. Per exemple, CS50 té un conjunt de pantalons curts, que són vídeos curts, no a diferència d'això, però que són specific-- mateix tema potser cinc minuts, 10 minuts de durada sobre els bucles o en condicions o en algoritmes o posterior en més temes avançats, també. I en general, integrem aquells en el problema jocs perquè els estudiants tenir un recurs amb el qual per revisar el material que podria tenir ja sorgit en conferència o secció. Però d'aquesta manera és més centrat i molt més al seu abast. També tendim a incrustar en el problema estableix coses trucades tutorials. Així que gairebé tots els exemples que faig en la conferència, a l'escenari aquí, també s'han disparat a la cambra en avançar en una més lenta, un recorregut íntim per mi en el meu portàtil d'aquest codi, línia per línia de manera que a la classe, sovint vaig llegir-lo a través d'alguna cosa o algú es intercalar amb una respondre a una pregunta. Però no s'enfonsa necessàriament per tots en l'audiència. Així trobaràs codi tutorials per a la majoria dels exemples el que fem aquí a la conferència perquè pot caminar a través d'ell al seu propi ritme i rebobinat o avanç ràpid o ometre per complet, si ho desitja. Hi ha sovint alguns preguntes d'escalfament que demanar-li que ordenar d' reforçar aquest material i assegureu-vos que vostè és còmode abans de continuar amb la resta del conjunt de processadors. I després, per descomptat, està el propi conjunt de processadors. I una de les coses que deliberadament fer-ho en CS50 és gairebé tots sense interès o intel·lectualment interessant pas mecànic que és possible que hagi de fer està gairebé sempre molt ben documentat. En el transcurs del termini, anem a començar a fer preguntes més retòrics com recordar com fer això o allò? Però, en general, trobareu que els conjunts de problemes li aconsegueixen a través de la mecànica de manera que alguna cosa els interessants, reptes intel·lectuals són en última instància, d'esquerra a que l'estudiant. Amb això dit, Zamyla, als quals mantenen referint avui en conferència, és un del nostre personal de tota la vida membre de què també té tutorials en problemes específics PSet com Mario i cobdiciós, encara que no regar aquest any. I és en els Tutorials que sovint ofereix alguns consells i trucs per la forma de procedir, no dient que exactament què fer, però rather-- com una condició, si voluntat-- que li dóna almenys un parell d'idees perquè li toca a vostè, en última instància, per a decidir com acostar-s'hi. MARIA: com a espècie d'alt nivell comprensió de la lògica del que li demanem que fer. DAVID Malan: Exactament. I, de fet, de Zamyla tutorials estan destinats per respondre a la freqüència pregunta d'on faig vaig començar, especialment quan aquests llargs especificacions estan una mica descoratjador donat tot el text i les imatges que tenen en ells. Així water.c, trobarà després que vostè l'ha completat, en realitat és relativament senzill. Absolutament són un grapat de vostès va a colpejar els seus caps contra la paret tractant esbrinar per què no és la compilació o per què no està funcionant correctament. Però una vegada que hagi acabat amb ella i una vegada que hagi passat algun temps lluitant amb qualsevol dels errors que pugui tenir, trobareu que és un programa molt curt. Es pot fer en tan sols uns pocs línies de codi, la majoria dels quals que hem vist aquí a la conferència ja, si que es muntin els blocs de construcció adequades. I com li suggerim aquí, va demanar especificar quants minuts algú està prenent una dutxa al campus. Especifiquem en el problema ajustar la taxa de flux d'aigua en, com, una dutxa de baix flux cap, igual que el clip de Seinfeld vam veure ahir o la mateixa oposat. I després només has per fer una mica de matemàtiques, realmente-- aritmètica utilitzant C per explicar nosaltres com molts, aproximadament, ampolles d'aigua és que equival a si som prenent una dutxa n minuts. Ara, en mario.c, això va per ser un programa lleugerament més llarg. Encara no va a estar tant de temps. A només unes poques línies més llargues que water.c. Però va ser l'oportunitat per recrear l'antiga escola Mario piràmide de Super Mario Germans o algun seguiment. No va a semblar més bonica o tan colorit com que un allà. Només utilitzarem petits hashtags com el que tenim aquí a la pantalla l'ús de text ASCII. Però va aproximar la mateixa idea. I serà un exercici que a primera vista sembla bastant just simple-- imprimir una senzilla piràmide. Però hi ha un parell de característiques aquí que són interessants. Observi que la vora més a la dreta de la piràmide en realitat té l'amplada de dos. Així que ha de dos iguals columnes d'altura, els quals fa que es requereix una mica de mica de pensament per fer Segur que aconsegueix que tota la raó, ja que en lloc de només un angle perfectament la línia. Així que això és una mica d'un cas cantonada però coincideix amb el joc real. I també és no evident a primera vista com imprimir l'espai en blanc. Així que quan em veig en el mostra de sortida aquí-- i també en què spec-- tipus de sembla a un rectangle, sinó una diagonal del rectangle ha estat tallat, i és només espais en blanc, per així dir-ho. I així una freqüència fetes pregunta aquí és sempre bo, Com em moc els hashtags a la dreta? O com puc imprimir els espais en blanc? I en realitat és més fàcil que la majoria dels estudiants pensen. Oi? Vostè pot aproximar visualment amb només colpejar la barra d'espai una o dues vegades o tres vegades. I així, tot i que amb printf gairebé sempre imprimir una corda o int o una paraula com "hola, món "o una sèrie de paraules, també pot simplement imprimir cita, espai, cap de la cita. I això realment donar que un espai en blanc allà. Així que tingues-ho en compte i no pensar massa això. Segur que ha de decidir fila per fila per fila, no molt diferent de la seva exemple, un moment fa, quants dels columnes han de ser espais en blanc i quants d'ells ha de ser hashtags. Prendrà una mica de temps, però és en última instància, un trencaclosques de la lògica de classes. MARIA: Sí. Però la lògica d'anar fila per fila serà molt útil en aquest cas. DAVID Malan: Sí. Crec que el codi d'exemple que gave-- tot encara que no era un programa complet. Vostè encara necessita int i principal i sense efecte i #include stdio.h, una gran quantitat de les coses de la conferència. Però els blocs de construcció semblen ser-hi. I després, finalment, és una cosa una mica més algorísmica. Així que resulta que cada vegada que anar a CVS o qualsevol botiga de conveniència i algú et dóna en la factures caixer o monedes com el canvi, resulta que ells, els éssers humans, si o no ho sàpiguen o no, probablement estan utilitzant el que hi ha anomenat un algoritme cobdiciós, pel qual si que se li deu, per exemple, $ 21 en canvi, perquè per alguna raó vostè va comprar una cosa molt barat amb una gran factura al CVS, que seria molt molest si la caixer li va donar 21 habitacions individuals o, pitjor però, una gran quantitat de monedes. Més aviat, el que una persona raonable és probablement va a fer és que van per prendre un $ 20 i després un projecte de llei de $ 1, i de lliurar només dos projectes de llei en aquest cas. MARIA: ¿Així que estem tractant de minimitzar el canvi que es donen de nou a vostè. DAVID Malan: Exactament. I mateix acord amb les monedes, també. Si vostè li deu, per exemple, $ 0.50, esperem que no vols 50 centaus. En el seu lloc, vol de dos quartes parts, per exemple. Ara bé, això fa suposar que el caixer té n'hi ha prou de tota denominació que ell o ella pot ser que vulgui donar-li. Però nosaltres permetem que assumeixis tant en el problema. I l'objectiu, en darrera instància, és implementar en codi C un algorisme cobdiciós. Així es permet que l'usuari per escriure a la quantitat canviar ell o ella se li ha amb dòlars i centaus, una mena de punt flotant valor probable. I llavors vostè ha de fer els càlculs i esbrinar algorítmicament, bé, quantes monedes puc donar que mínimament per donar-li exactament aquesta quantitat de canvi. Però no serà un algunes parts difícils aquí, oi? Igual que hi ha el conjunt tema imprecisió. MARIA: Exactament. Així que el punt flotant valors tenen imprecisió. És que parlem d'això en la conferència d'avui? DAVID Malan: Vam fer el l'última vegada en la conferència. Parlem d'imprecisió. I no vol enganyar l'usuari de la quantitat de canvi que ell o ella se li deu. I així el tutorial, en l'especificació de conjunt de problemes, reflexionar, en última instància, pel que fa a com es pot mitigar els imprecisió errors, potencialment. És evitable, sens dubte, per les entrades de les que estem parlant. I, de fet, pennies-- potser anem a ajornar a Zamyla, Crec que, per als trucs allà. Així que, finalment, hi ha una la progressió dels problemes d'aquesta setmana, el primer dels quals és bastant petita, a continuació, mitjà, i després una mica més gran. Però tots ells utilitzar l'edifici quadres de la setmana passada, d'aquesta supersección, problema especificació establerta el posa en innombrables recursos. Però tot i així, si és que el que lluita, especialment entre els menys còmodes sense coneixements previs, arribat a les hores d'oficina el dilluns i dimarts i Dimecres i dijous. Anar a CS50 Parli a través de la pàgina web de l'assignatura, a través de la qual pots xatejar amb el personal i els companys de classe. Però en última instància, crec que el millor consell és simplement començar d'hora. No és el tipus de classe que ha d'iniciar conjunts de processadors dimecres nit, o pitjor nit de dijous. MARIA: El meu millor consell és haver començat dilluns. DAVID Malan: Dilluns. Així que si vostè no ha començat ya-- no. Però fins i tot si no el dilluns, després el dimarts. Com més aviat, millor. I aquesta és la raó per la Per descomptat té tants dies de retard és per donar-li una mica d'un pressió psicològica per començar abans, però encara deixa coses rellisquin quan les coses prenen més temps del que s'esperava. MARIA: I vostè vol fer ús de horari d'oficina el més que pot, també. DAVID Malan: Alguna pregunta? Tot bé. Bé, per què no aixecar la sessió aquí?