[Powered by Google Translate] ZAMYLA Chan: Bone, ĉiuj. Bonvenon Walkthrough 1. Ĉi Walkthrough estos sur pset 1, kiu estas C. Mi esperas ke vi ĉiuj havis amuzon kun via Scratch projektoj. Do nun en ĉi walkthrough, ni fakte tuj estos povis eniri en C, enir skribi iujn maŝino kodo. Do se vi ne estis ĉe Walkthrough 0, tiam tiuj walkthroughs vere - we're tuj iros tra problemo aro, paroli tra iu komuna bekojn kaj teknikoj ke vi povas uzi. Ni rompos la asigno supren enen regebla mordas, por ke you guys povas komenci kaj espereble kompreni kiel fari ĝin. Okay. Do pset 1. La psets ĉi tiu jaro havos strukturon kie la unua - tie tuj estos sekcio de demandoj, serio de demandojn kiuj vere ankaŭ helpos vin komenci kun la pset, helpi vin ekzerci iuj teknikaj kiu vi bezonas. Kaj tial tiuj demandoj, mi ne tuj kovri en la walkthrough ĉar en via sekcio, via atribuita instruado ulo estas vere tuj marŝi tra tiuj demandojn kun vi. Je la fino de via sekcio, vi iradu for kun la respondojn al tiuj demandoj sed ankaŭ kun la konfido kiun vi povas apliki iujn el la trajtoj kiujn vi bezonos por la lasta parto de la pset. Pset 1 konstituas Mario. Kaj tio estas amuza iom programo kie esence ni skribi kaj presi duono piramido en la tipa Mario sceno. Kaj tiam la dua parto de la pset nomas Greedy. Kaj tiel en Greedy ni esence agi kiel avida kasisto, kie se iu donas al ni kvanto da mono ke ni volas, ni kalkuli la minimuman kvanton da moneroj kiujn ni povas reveni al ili ankoraŭ doni al ili tiun kvanton. Bone. Do ĉiu walkthrough havos iloj. Kaj denove, vi eble ne uzis ĉiujn la iloj en ĉi iloj aŭ vi povus uzi ĉiuj ili. En ajna kazo, ĝi estas vere bona scii kion vi ekipita kun. Do ni havas la CS50 Appliance, kiun Mi montros al vi infanoj kaj enkonduki vin al tio. Tiam ankaŭ ĝenerale, bona stilo estas definitive unu el niaj plej gravaj iloj. Stilo esence rilatas al kiel legebla estas via kodo? Kiam iu alia iras kaj legas vian kodon, do ili havas facila tempo? Povas kompreni tion? Ĉu eleganta? Tiam ni parolos pri kiel oni povas valida uzanto enigo en vian programo ĉar en ambaŭ Mario kaj en Greedy, vi devas demandu al la uzanto eniro kaj doni al vi ian numeron. Tial ni volas certigi ke nombro estas valida. Tiam memoras en Scratch, ni havis blokoj kiel Ripetu, Ripeti Ĝis, aŭ Atendu, aŭ Forever. Do ni tuj ia traduki ke en C nun kaj rigardi bukloj kiel por, dum, kaj do-tempo. Tiam ankaŭ ni ankaŭ bezonas montri valoroj denove sur la ekrano, ĉu ĝi estas en Mario aŭ en Greedy. Kaj tiel ni parolos pri kiel oni presas tion for strings al entjeroj kaj flosas. Kaj poste fine, ni parolos pri _pseudocode_, vere grava koncepto por memori laŭlonge de ĉi tiu kurso. Kion mi trovas min helpas plej kun problemo aroj estas pensi kaj priskribi kion mi volas fari antaŭ pensi ajna C. Sed ĝuste priskribi la agon. Do _pseudocode_ estas speco de en inter la angla kaj C, tia priskribanta la procezoj sen la ĝusta sintaksa sed havigante sufiĉe bona strukturo. Kaj do mi havos iujn ekzemplojn de _pseudocode_ por vi tiel en ĉi walkthrough. Okay. Do kion ni povas labori kun estas la CS50 Appliance. Estas esence virtuala maŝino tian kuras komputilo en via propra komputilo. Kaj ĉi tiu havas multajn avantaĝojn. Unu estas, ke ĝi estas preestablecida kun amaso de la iloj kiujn vi instruos vin bezonas por CS50. Tiel, tio signifas ke ĉiu estas la sama tero, ĉu Mac aŭ PC aŭ alia mastruma sistemo. Ni povas ĉiuj kuras la virtuala maŝino. Kaj tiel estas instrukcioj ĉe manual.cs50.net/appliance. Kaj do se vi iras al ligantaj kaj sekvu la instrukciojn, tiam espereble vi povos instali la aparaton. Do unue, vi devas instali aplikon, an reala apliko por povi kuri la virtuala maŝino. Kaj tiam vi elŝuti la aparaton. Sed denove, estas instrukcioj ĉe manual.cs50.net/appliance. Do mi jam elŝutis mian aparaton, kaj mi instalis ĝin en VMware Fusion. Kaj tial iam mi elŝutis la aparaton, mi iris al Dosiero. Mi iris al Malfermi kaj tiam trovis kie mi stokita la CS50 Appliance. Kaj de tie, mi kuris ĝin ĉi tie. Sed mi havas ĝin jam tie, do ni prenas pli proksima rigardo. Bone. Do nun ni estas ene CS50 Appliance. Mi faris ĝin plena ekrano. Vi povas elekti fari tion se vi volas aŭ simple devos ĝin kiel malgrandaj fenestro sur via labortablo. Jen ni havas nur simpla tablo kun hejmo kaj rubo. Sed se vi iras al Menu kaj tiam al Programado, tiam vi vidos ke ni havas ion nomita Terminal. Kaj tiel en tie, ni povas navigi ĉirkaŭ nia komputilo. Ni povas skribi kodon. Sed reale, ni povas uzi programon nomata gedit, aŭ "g redakti, "kiu ajn kiu estas. Do ni estos uzi tiun verki kodon. Do vi havas tiujn du iloj kiuj vi estos uzanta unuavice skribi kodon. Tiam krome, estas nur kiel regula komputilo. Ni havas retumilo. Ni elektis Google Chrome. Kion mi faris estas mi starigis Dropbox enhavi ĉiuj la dokumentoj. Kaj por ke io ke tio ege kuraĝigis. Dropbox uzas nubo sinkronigi do se - tiel ekzemple, iu hazarde - ni esperas ke ne - okazas al via aparaton, tiam ĉiuj estos synced sur la nubo. Bone. Do tiuj estas la aplikoj kiuj vi estos uzanta en la CS50 Appliance. Nun por navigi ĉirkaŭ la komandlinio. La fina povas fakte agas kiel speco de formo de reale tajpi komandojn en - kiel, se vi estas Mac, a Buscador. Aŭ se vi estas en Windows, mi kredas ke estas "esplori mia komputilo "aŭ io simila. Do, se ni reiru al la aparaton, ni malfermi fina fenestro. Do ĝi havas ĉi prompto, jharvard @ aparaton. Ni simple fari ĉi granda. Okay. Do, se ni tajpu la komandon ls, tiam tiu listas ĉiuj dosieroj en nia komputilo, en nia aktuala dosierujo. Dosierujoj estas nur kiel dosierujoj. Ni uzas tiujn terminojn sendiference. Bone, do ni listigas la dosierojn kiuj estas en tiu ĉi dosierujo. Nun se ni volas aliri, diru niaj Dropbox, tiam ni povas ŝanĝi dosierujoj. Do cd kaj poste Dropbox. Ni ls denove, kaj tiam ni vidos la listo de dosieroj, kiuj estas en ĉi dosierujo. Tio estas analoga al mi iras al mia hejmo, do klakante Dropbox, kaj tiam vidi la liston ĉi tie. Bone. Do diru - kiam vi infanoj tuj faros viajn pset 1, ni faros katalogo nomis pset1. Do ni estas en Dropbox nun, kiel vi povas vidi de ĉi instigas tie. Do ni faru dosierujo. Do mkdir, ni nomas ĝin pset1. Kaj tial nun, se ni ls denove, tiam ni vidi ke pset1 aperas. Kaj do se ni volas iri interne pset1, tiam ni povas iri interne ke dosierujo kun la komando cd. Bone. Do denove, vidu se ni - diri, ni faru ĝin alian vojon. Tio estas analoga al nur diras "Krei Nova Dosierujo, pset1. Sed kiel vi trovas, vi povas interagi kun la fina tre. Do kelkfoje ĝi estas multe pli facila, perdita rapida justaj labori en la fina fari tiujn varojn de aĵoj. Okay. Kaj tiam tiuj aliaj komandoj. Jen rm por forigi dosieron. Do vi simple tajpi rm kaj tiam la nomo de la enarkivigi forigi ĝin. Ni iru en kelkaj ekzemploj de tiu poste. Kaj tiam ni havas ion nomita la viro komando, kiu Alportas manlibro por tipo de funkcio. Denove, mi elvoku reala ekzemplo de tiu poste. Do alia vere grava ilo, kiel mi menciis mallonge antaŭe, estas stilo. Do esence, stilo devas vidi kun legibilidad. Ĉu iu alia povos legi, sekvu, kaj komprenas vian kodo? Tio estas aparte grava por vi, vi mem, fakte. Se vi enlitiĝi malfrue kodigo, kaj tiam vi poste reiru kaj vi estas kiel, kion faras tiu variablo meznombro? Diru vi laboras en grupo projekto kun iu, kaj vi ambaŭ devas rigardi reciproke kodo. Estas vere grava ke vi enoficigi vian variabloj korekte kaj fari ĝin rigardi bela ĉar tio faras la tutan diferencon. Sed tiam ĉefe, ni estas en kurso nun. Do por la intereso de CS50 kaj speciale pro via instruado uloj kaj graders kiu estos rigardante vian psets, bonvolu, bonvolu uzi korekta stilo. Kaj via instruado uloj estos sufiĉe feliĉa. Do denove, stilo inkludas indenting aferojn ĝuste, speciale uzi vian streĉaj kaj indenting tiuj. Enoficigante variabloj iu kiu faras sencon. Ĝuste nun ni sekvas la konvencion kiam vi havas multnombraj vortoj en vian variablon nomo, tiam vi konekti ilin kun substreki, kiel vi vidas en tiu enoficigi ekzemplo tie. Tiam fine, iu vokis magio nombroj. Esence, kiam vi legas tra kodo kaj diru vi havas variablo - diru, vi ne havas variablo sed ĝuste diri bone, ĝis tia kaj tia estas malpli ol 10. Tiam via grader tuj iros bone, atendi, kien ke 10 venis? Do vere klarigante mem gravas multe. Por helpi vin klarigi mem estas komentoj. Komentoj estas probable la plej grava afero por inkludi en viaj programoj. Kaj tio helpas vin ne nur vere klarigi - ĝi helpas vin ia klarigi vian rezonadon kiel vi iras kune. Kaj do se vi faros tion, denove, ĝi tuj estos multe pli facile reiru en via kodo kaj tipon de kompreni kion vi estas fari tie. Denove, graders vere ŝatas komentojn. Do vi diras bone kaj - speco de kiel libera punktoj. Kaj kiu ne ŝatas liberan punktoj? Vi povas ankaŭ havi plurliniaj komentoj. Kaj tiel mi komprenis ian ŝablonon ĝis ĉi tie. Esence, kutime tiuj estas uzataj ĉe la supro de via programo por ia klarigi ĝenerale kion via problemo aro faras. Inkluzivi vian nomon, la dato, kaj tiel plu. Kaj tiel, kiel mi diris en tiu plurliniaj komentoj, manual.cs50.net/style_guide havas pli konsiloj kaj reguloj pri stilo por cikloj, kaj tiel plu. Okay. Do nun ke mi diris al vi iom pri stilo, vidu tio en agado. Bone. Do jen, Tommy skribis al ni belege hidaj Ekzemplo de stilo en programo. Do vi vidas tie, tute certe. Tiu estas fakte tute bona. Vi vidos la plurliniaj komentoj ĉi tie. Vi komencu ĝin per antaŭen oblikvo kaj tiam du asteriskoj. Vi daŭrigu kune, vicigante la asteriskoj laŭ la linio kaj poste fini ĝin per asterisko kaj oblikvo. Bone. Por ke estas bone. Ĉi tie estas bone. Li inkluzive la bibliotekoj. Sed tiam tie li havas komentojn generanta multnombraj linioj. Ekzistas multaj aĵoj malbona ĉi. Komentoj generanta multnombraj linioj, ĉi tie li uzas la sintakso por nur unu linion komentojn. Li ankaŭ melding ĉion en la sama komento. Do ni volas eviti tion. Tiam tie ni vidas ke tiuj krampoj, ekzemple, estas ĉiuj super la loko. La deŝovon estas erara. Fakte ne montros al vi definitive kie io skuigxas kaj alia afero finiĝas. Tiam ankaŭ, vidas li havas difinita variablo i = 5 tie. Sed tiam ĉi kvar venas el nenie, kaj tie estas neniu diri al vere klarigi kie tiu venas. Okay. Do nun ni rigardu iun kiu estas fakte ĝuste la sama kodo krom kun bona stilo. Do denove, ĉi tiu estas la bona stilo, ekzemple, la plurliniaj ekzemplo. Kaj tiam tie estas sufiĉe pura. Ni vidas, ke li komenciĝas kun se aserto tie, eniras en novan linio, havas malfermita streĉa. Tiam li havas deŝovon. Li gardas tiun deŝovon - li gardas tiun indikon uniformo trans la tuta programo kaj vere montras kiam bloko de kodo komenciĝas, kiam unu bloko de kodo finas. Ĉi tio povas simili iom nitpicky en nia parto komenci kun, sed vi vidos kiel vi skribas vian kodon. Estas vere utila por povi apartigi ĉi eksteren. Kaj ankaux vian graders vere ŝatas tion. Kaj tial vi vidas, anstataŭ nur metante nombro en tie, li efektive nomis la variablo iteraciones. Kaj tial ni ne vere rigardas ĉi tiun kodon nun sed gxuste tia vidi ekzemplon de bona kontre malbona stilo. Kaj do se vi rigardas ilin unu apud la alia ĉi tie, vi estus definitive preferas legi la unu dekstre. Bone. Do unu lastan aferon antaŭ ol ni plonĝi en la reala karnon de la pset estas kiel tradukigi kaj ruli vian kodon. Kaj tial esence kiam vi skribas C, kiu fakte ne estas tradukita al la reala maŝino kodo, la nuloj kaj kiuj la maŝino povas fakte legis kaj interpreti. Do ni havas ion - Clang estas tradukilo, ke ni uzu por C. Estas multaj tradukiloj. Sed en CS50, ni estos uzi Clang. Kaj tiel Clang esence tradukas de C al maŝino kodo por vi. Do ni rigardu ekzemplon - pikita en la Appliance tie. Bone. Do ĝuste nun ni estas en nia hejmo dosierujo. Ni efektive ne estas kie ajna kodo estas. Do ni ŝanĝi nian dosierujon al Dropbox/walkthrough1, kie Mi stokitaj kelkaj kodo. Do, se ni premu ls, tiam oni vidas, ke mi havas kelkaj dosieroj en ĉi tie. Bone. Do mi jam skribis hello.c, do ni kompili ĝin kaj poste vidi kion ĝi faras. Do baza kompili komando estus clang tiam hello.c, esence dirante bone, kompili hello.c por mi. Mi alklakos Enter, ŝajnas esti irinta pravas. Ni klaku ls denove. Ĉi a.out dosiero nun montrata. Kaj tiel a.out estas plenumebla dosiero. Do por ruli ĝin, vi faras. / A.out. Kaj tial ni vidas ke ĉi hello.c programo ŝajne presas el saluton kvinfoje. Bone. Sed diru ni ne volas uzi la nomon a.out. Ekzemple, ni volas lanĉi la programon saluton ĉar tio faciligante komprenas. Do diru clang hello.c, kaj tiam esence vi bezonas pasi en iuj aĵoj nomata flagoj. Dirinte bone, bone mi volas citi ĉi ion alian. Vi ankaŭ povas pasi en tereno de pluraj flagoj, kion vi vidos. Do la flago por enoficigi programon ion por ke vi volas estas-o. Post-o, vi skribu la nomon de la programo. Ni simple nomas ĝin saluton. Do nun ni vidas ke ni efektive havas saluton ruleblan dosieron. Do ni povas ruli ĝin, kaj ĝi faras same kiel antaŭe. Do nun ni havas saluton, ni povas ankaŭ forigi, por Ekzemple, nia a.out. Do rm por eltiri, a.out, via fina stacio instigas vin, demandi por vi por konfirmi ĉu vi vere volas forviŝi ĝin aŭ ne. Ni diru y por jes. Kaj tie ni iru. A.out estas for. Bone. Sed kelkfoje ĝi atingas konfuzi memori ĉiujn flagoj kiujn ni bezonas por inkludi kaj tajpu el clang. Kaj kiel ni vidos, kiam ni uzas pli kompleksaj programoj, ni esti inkludita malsamaj bibliotekoj. Kaj tiel niaj ordonoj al Clang ricevos pli longaj kaj pli longa. Do inkluzivita en la CS50 Appliance estas la fakto komando. Do vi simple tajpi fari saluton. Oops. Ni jam faris tiun plenumeblan dosieron. Do mi simple forigu ĝin rapide. Nun ni tajpi fari saluton. Kaj vi vidos en tiu linio tie esence dirante fari saluton engaĝas ĉiuj tiuj ordonoj ke iri en ĝin por vi. Do inkluzivita en la CS50 Appliance estas la fakto dosiero. Do simple, kiam vi havas dosieron name.c, tiam ĉiuj vi faras estas diri fari dosiernomo. Kaj tiam vi havos plenumebla dosiero kun tiu nomo. Jes? Parolanto 1: Por mia komputilo, anstataux Clang diras GCC. Ĉu tio estas kiel - ZAMYLA Chan: Yeah. Do via komputilo povus diri GCC kiel kontraŭ Clang ĉar GCC estas alia tipo de tradukilo. Se vi estas en la CS50 Appliance tamen, tiam devus uzi Clang. Se ĝi ne estas, tiam eble venu paroli al mi poste aŭ afiŝi sur CS50 Diskutu kaj ni povas ordigi tion diveni. Bone. Do nun ni havas niajn speco de bazaj iloj sube, tiam ni povas plonĝi en Mario. Okay. Do Mario estas programo kie esence ni tuj estos fari nian propran specon de komenca versio de la Mario ludo fono. Vi scias, Mario kutime havas pipon kaj arbo kaj iuj blokoj. Kaj tiam tie estas speco de duono piramido. Do ni simple tuj estos enfokusigante ke duono piramido, farante kodo tia ke ĝi presas el hashes por la speco de blokoj en ĉi tiu formato. Do kio okazos estas la uzanto volas enigo certa alteco de la piramido kaj tiam vi presi ke el tia, ke la fundo lasis hash - tiel ke je la malsupro ĉi tie - ke unu vicigos kun la fundo maldekstra de via terminalo. Okay. Do la unua afero, kiun vi bezonas - la unua iom mini problemo, ke ni bezonas pritrakti estas kiel por ricevi la eniro de la uzanto. Do ni bezonas esti kontraktanta kun kio la uzanto eniroj kaj tiam speco de eligo aferojn tie. Do ni rigardu rigardas dosiero nomata apples.c ke mi skribis kiu traktas eniroj kaj eliroj. Okay. Do jen supre, mi inkluzivis iujn el la bibliotekoj ke mi bezonas. La vere grava tie estas stdio (normo I / O). Kiu klopodas kun normo eniroj kaj eliroj ĉar nin tuj pritraktatos uzanto enigas. Bone. Tial mi komencos mian ĉefa funkcio. Kaj tiam mi petas la uzanto bone, kiom da pomoj vi havas? Tiam ĉi tie, kio estas tiu linio faras - Mi atribuas la variablo i al la valoro de GetInt. Do GetInt estas funkcio kiu estas inkluzivita en stdio. Kaj tial esence, ke pritraktos ĝin por vi. Ĝi instigas la uzanton por int. Kion ajn ili revenas, kiu estos atribuita al la variablo i. Kaj tiel do estas nur iom programo kiu malpliigas la valoro de i per 1 kaj poste presas el la nova valoro. Bela afero pri gedit estas fakte ke ekzistas minimuma fina dekstre en ĉi tie. Do anstataŭ devi ŝanĝi antaŭen kaj malantaŭen inter gedit kaj la fina, vi povas efektive nur ruli ĝin de ĉi tie. Do ni unue eniri la dekstra dosierujo. Do ni ŝanĝi nian dosierujoj por Dropbox/walkthrough1. Bone. Do nun ni faros pomoj, kompilas ĝin por ni. Kaj tial nun ni kuras pomoj. Kiom da pomoj ni havas? Mi diras, ke mi havas 3. Kaj diras "mwahaha Mi manĝos unu el ili" kaj diras "Vi nun havas 2 pomoj". Bone. Do ni kuros ke denove. Kaj diru mi havas 1 pomon. Nun mi havas 0 pomoj. Okay. Do ĉi tiu programo ŝajnas funkcii kiel atendita. Ni enigo numeron, ĝi malgrandiĝas ĝin per 1, kaj poste presas ĝin denove. Sed kion se, ekzemple, mi havas -1 pomojn? Tio ne sufiĉe sencon. Sed estas ankoraŭ entjero, do la programo akceptas ĝin. Kaj tiel li revenas al vi ankoraŭ pli negativa nombro. Do jen unu leciono por ni, ke kvankam la GetInt funkcio kaj la alia asociita aĵoj kiel GetFloat aŭ GetString - kvankam tiuj ricevos al ni la rajton datumtipo, por Ekzemple, se mi nur diris [tajpado], tiam diru al mi por reprovi. Do ĉi pritraktos ajn datumoj tajpi via enigo estas sed ne efektive kontroli, nu, ĉu vere tipo de valoro, kiun mi volas? Tial parto de Mario estas ke la uzanto devas eniro numero kiu reprezentas la alton de duono piramido ke vi faras. Kaj tiel do se ni instigante tiu uzanto por la alteco, tiam devus esti du baroj sur ĉi. Ĝuste? En la specifo, ĝi diras ke ne devus esti pli ol 23 karakterojn pro tio speco de la normo alteco de la terminalo. Sed tiam, kion aliaj baro, eble suba baro, eble ni volas inkludi? Se ni vere desegni piramido, ia pensante reen al kiom alta piramido povas esti, povas ĝin iam ajn esti malsupera ol iu numero? Parolanto 2: Bigger ol tri. ZAMYLA Chan: Hmm? Parolanto 2: Bigger ol tri. ZAMYLA Chan: Tio estas bona punkto. Ĝi povus esti - ni volus limigi ĝin al nur tri nivelo piramido. Sed ni pensas - diru kiel oni hash tablo rakontas kiel piramido tro. Do kion devus nia reala suba baro estus? Pensante reen al pomoj, ni ne volas negativa alteco piramido. Ĝuste? Okay. Do, kiam vi petas la eniro de la uzanto, tiam vi devos inkluzivi iu maniero certigi ke la entjera ke ili provizas vin per ne negativa ĉar vi ne povas desegni negativa piramido. Okay. Do estas kelkaj manieroj por fari tion. Esence, kiam vi petas uzanto enigo, vi volas postuli ke ili provizas vin per ĝentila enigo. Do vi volas postuli ke ili provizas vin per nombro kiu ne estas negativa, sed ankaŭ malpli ol 24. Do ni pritraktas nulo ĝis 23, inkluzive. Bone. Do ni volas senĉese demandar - se ili ne donis al ni valida entjero, ili volas senĉese postulas ne. Donu al mi valida enigo. Donu al mi valida alteco. Do rememori reen en Scratch, ni havis la Ripetu Ĝis bloko aŭ la Forever Se bloko. Tiuj estas maŝojn kiuj estas tre similaj al la dum loop kaj la do dum buklo, kiun ni ricevos en nur en dua. Do la tempo buklo esence havas kondiĉe ke vi kontrolu jen Bulea valoro, ke vi metis ene tie, kiel la blokoj en Scratch kun la anguloj. Tion iras ene de la krampoj de la dum ciklo. Do vi devos havi ian kondiĉo tie. Kaj kiel ni ĵus diskutis pli frue, tiu kondiĉo volo devas fari kun la limoj de la entjero kiu inputted. Do la kondiĉo havus ion por fari kun ĉu la entjero estas ene de la taŭgaj baroj. Do tio estas dum ciklo. Ekzemple, vi povas instigas por la entjera kaj poste senĉese kontrolu dum ĉi enigo ne estas valida. Ekzemple, daŭre re-instigante, daŭre demandas la uzanto por entjero. Por ke povus esti unu vojo. Alia vojo povus esti do dum ciklo, kiu estas tre simila al tempo buklo krom kia fari dum faras estas - vi povas ia vidi por la sintakso - estas ke ĝi havas la do kaj poste la fakta buklo korpo unua. Tiam ĝi havas tempon, kondiĉoj. Do kion dum cikloj - kion ili estas utilaj por estas, ke ili efektive ekzekuti la kodo almenaŭ unufoje kaj poste kontrolu ĉu la kondiĉo estas renkontis aŭ ne. Do se vi estus fari do dum ciklo, tiam en via deklaro povas instigas por entjero ĉar vi en almenaŭ devas demandi al la uzanto tuj. Kaj tiam post vi instigas ilin, tiam vi povas diri bone, bone unufoje Mi faris tion, ĉu validas? Se jes, tiam vi povas simple daŭre iras. Sed se ĝi ne estas, tiam devos simple agas kiel regula dum buklo kaj poste daŭre petas. Okay. Do ni estas reen al Mario. Do ni scias kiel instigas por la ĝusta uzanto enigo tio ene de la dekstra baroj. Do nun ni efektive devas desegni tiun duonon piramido. Ĝi aspektas kiel simpla teksto gravuloj. Do ni efektive malferma - ni nur malfermi fenestron kaj diru bone, bone kion se mi vere faros tion permane, tajpu unu mem? Okay. Do ni vidu. Diru, ekzemple, ni volas fari piramido tio vicigitaj laŭlonge de la maldekstra flanko, tiam estus nur faru - en Mario, la supera nivelo havas du blokoj anstataŭ unu. Do ni komencu per du. Ni alklakos Eniru. Ni faras tri, kaj poste kvar, Enter, kvin. Okay. Por ke estas sufiĉe simpla. Krom en ĉi tiu problemo aro, ni volas vere vicigi kun la dekstra flanko de nia ekrano. Bone. Do, kiel povus el vi efektive tajpi ĉi tia ke ĝi estas vicigitaj laux la rajto? Anstataŭ meti la hash unua, kiel eble vi speco de movi ĝin kune? Parolanto 3: Skribu linio? ZAMYLA Chan: Hmm? Parolanto 3: Skribu linio? ZAMYLA Chan: Yeah. Yeah. Vi povus skribi kiel substreki aŭ ion kiel tion, sed ni povas nur diri uzi spaco. Ni metis en kiel tri spacoj tie. Tiam la sekva linio, nu, ni devus meti du spacoj. La sekva linio, ni nur metis unu spaco. Kaj poste por nia lasta linio, ni ne metis neniun spacoj. Kaj tie ni havas niajn piramido. Do jen speco de - memori, ke tia logiko. Kaj provi kaj eltrovi ian mastron, ke ni povas tiam traduki al C kaj engaĝi en ia buklo. Bone. Supozu ke ni havas altecon ok, tiam nia unua vico devos du hashes. Sed por atingi tiujn hashes, vi devus skribi iujn spacoj antaŭe. Ĝuste? Kion mi faris estas mi ĵus travivis. Mi tiris ĝin el mi mem, piramido en mia tekstoredaktilo, oni piramido kun alteco de ok kaj poste kalkuli kiom da spacojn mi bezonis fari. Do mi diris bone, bone la unuan vicon estas havos du hashes. Sed antaŭ tio, mi bezonas enigo sep spacoj. La proksima havas ses spacoj kaj tiam tri hashes, kaj tiel plu. Tial ni provu kaj alporti tion al alia tavolo de abstraktado. Kio se ni havis por la n-a vico, kiom da hashes kaj kiel multaj spacoj estus ni bezonas? Ĉu iu vidis la mastro? Do la unua vico havas du hashes. La dua havas tri. La tria havas kvar. Do la n-a vico havus - Parolanto 4: N plus 1? ZAMYLA Chan: Yeah. N plus 1. Ekzakte. Tial ni vidas ke la numero de hashes tuj estos - se ni rakonti la unua vico por esti unu, tiam la nombro de hashes estas ĝuste tuj estos pli ol tio. Okay. Tial kio pri la nombro de spacoj? Do ni provu kaj esprimi tion en terminoj de la alteco. Se la alto estas ok, tiam la unua vico havas sep spacoj. Por ke ia respondas al 8 minus 1. Ĝuste? Do tiam la dua vico tuj havos ses spacoj, kiu estas 8 minus 2. Tial mi tuj forlasos ĝin al vi ia figuro el la ŝablono por tio. Okay. Sed en programado, kelkfoje ni efektive indekso je nulo. Do ni komencu je nulo anstataŭ unu. Do anstataŭ la unua vico estante nomita la unua vico, ni iras al nomante ĝin la 0-a vico. Do laŭ la vojo, kiun vi volas apliki ĝin, esti tre zorgema ĉu vi komencas je nulo, ĉu vi starti je unu, via mastro tuj estos kompensita de unu. Okay. Do nun ni ia supozis, la programo, ni devas diri okay. Do por ĉiu speco de nivelo de la ŝtuparo, mi tuj presi Tie kaj nombro de spacoj kaj tiam tiaj kaj tia nombro de hashes. Tio dependas de la ŝablono, ke ni establis antaŭe. Okay. Do unu vojo de ripetanta tra kaj tipon de irante tra starigis nombro de aĵoj estas por ciklo, ia kiel la ripeto 10 bloko aŭ kiel ripeto kaj vi eniris en nombro en por Scratch. Do esence, por cxiu nivelo de ŝtuparoj, ni volas presi la spacoj unua. Tiam presi la nombro de hashes. Kaj poste ni volas enmeti novan linion kaj poste ripeti ĝin denove por la venonta bloko. Okay. Do ni rigardu por bukloj por sek al ia vidi unu vojo ke ni iru per aro nombro, iri tra la nombro de paŝoj en tiu ĉi duona piramido. Do por cikloj konsistas el tri partoj. Unue, vi havas inicialización. Por ke esence aroj variablo. Ĝi tuj enkadrigeblajn por tiu valoro ĉiufoje ke por buklo komenciĝas. Tiam vi tuj havos kondiĉon. Via por buklo nur ekzekuti tiel longe kiel tiu kondiĉo taksas al vera. Kaj tiam vi havos ĝisdatigon kondiĉo. Por ke ĝi devas vidi kun la variablo kiu vi inicializado. Do iel de esence certigante ke oni povas rompi de la ciklo, ke ni ne daŭre ekzekuti ĝi ĉiam kaj eterne. Ĉar kontraste Scratch, ni vere ne havas nur ebenaĵo Forever buklo. En C, la programo devas fini eventuale. Do ni devas certigi, ke iel ni ĝin haltigi. Okay. Do ekzemplo de a por buklo kiun vi eble deziras uzi por Mario estas ĉi. Do vi havas entjero mi ke vi komencu je 0. Tiel longe, kiel ĝi estas malpli ol la alteco, vi ekzekuti la korpon de la ciklo ene tie. Post tiu korpo de la ciklo estas ekzekutitaj, tiam vi farus pliigi i per 1. Tiam via programo kontroli denove - bone, bone, estas mi malpli ol la alto? Se jes, tiam vi daŭre. Do jen unu ekzemplo de nulo indeksado, kie ni komencos je nulo kaj tiam ni - rimarkas, ke nia kondiĉo estas malpli ol la alteco. Do diru nia alteco estas kvar, ekzemple, i ekos je 0. Ĝi estos 1. Estos 2. Ĝi estos 3. Kaj tiam tuj ĝin ĝisdatigas, kiam la por buklo ĝisdatigoj, i estos tiam enkadrigeblajn por 4. Sed 4 estas ne malpli ol 4, kaj tiel poste ni estus daŭrigi al la resto de nia ciklo. Okay. Do ke ​​tio ekde nulo. Sed ni ankaŭ povus starti je unu, ekzemple. Sed ĉar ni komencu en unu, oni ia devas iri pli tempo je la fino. Tial jen kial ni aldonos la malpli ol aŭ egala al. Do unu el la grandaj aĵoj kiujn mi ŝatas de komputilo programado estas, ke ekzistas nur tiom multaj manieroj por fari tion. Do vi povas elekti ĉu vi komencas je nulo, ĉu vi starti je unu. Ankaŭ, se vi volas, vi povus simple uzi dum buklo, ekzemple. Do vi povus - ni efektive malferma hello.c. Do ni havas por buklo tie. Ĝi komenciĝas je i = 0, i <5. Mi havas komenton ĉi tie rakontas al ni, kion ĝi faras. Ĝi presas saluton kvinfoje uzante por buklo. Sed ni povus ankaŭ fari tion uzante dum buklo tiel. Do ni rigardu kiel ni povus fari tion. Do, se ni tuj imiti a por ciklo, tiam ni ankaŭ volas imitas la inicialización, la kondiĉo, kaj la ĝisdatigon. Do la kondiĉo devus esti bela simpla ĉar en la dum sintakso, kiam vi rigardas ĝin, ĝi diras kiam (kondiĉo). Do ni ĵus enigo kondiĉe tie. i <5. Okay. Do ni scias, ke ni volas presi adiaŭ. Ni scias ke tio estas la korpo de niaj buklo. Sed ni mankas la inicialización kaj la ĝisdatigon, ĉu ne? Ĉar ni ne povas havi cxiam buklo. Ĝi devas finiĝi. Do ni aldonu ian inicialización tie uzante la sama kiun ni uzas en niaj por ciklo, int i = 0. Okay. Do ni starti kun int i. Ni ripetas ĉi dum buklo dum i estas malpli ol 5. Tial ni mankas unu afero, kiu estas la ĝisdatigo. Do kio ŝanĝo estus ni bezonas uzi se ni estis esence amuzante la por buklo supre? Ni havas la inicialización i estas egala al 0. Ni havas la kondiĉon i estas malpli ol 5. Kaj poste jen ĝisdatigon, ĉu ne? Do ni deziras kopii tion. Ni volas diri bone, mi + +. Tio estas la sama afero kiel dirante i = i + 1. Sed ĉar ĝi estas uzata tiel ofte, stenografio por tio estas ĝuste dirante i + +. Granda. Okay. Ĉi tie mi efektive ne eliri el mia pomoj programo. Do mi simple tuj klaku Control-C kaj ke tuj botoj min el mia programo kaj alportas min apogi por la fina stacio. Tiel ke, ekzemple, se vi trafos cimon kie vi forgesis ĝisdatigi vian dum buklo tia, ke ĝi estus finiĝi, kaj vi eniros senfina ciklo, tiam vi povas uzi Control-C rompi el tiu. Bone. Do ni estas en la dekstra dosierujo. Do ni faru saluton. Kaj tiam se ni kuras saluton, ni vidas ke la adiaŭo buklo faras la ĝusta sama afero kiel nia por buklo faras. Por ke estas nur aludo. Ĉu vi estas pli komforta kun por cikloj aŭ kun dum maŝojn, ili povas esti interŝanĝeblaj. Do kiom unu vi volas uzi por persisti tra - en ĉi tiu kazo - la alto de la Mario piramido. Kaj tial denove, ĉi tiu estas nur memorigilo, se oni komencas je nulo por via variablo, tiam vi volas havi malsamajn kondiĉo ol se vi komencis je unu. Do ĉi tiu tabulo nur speco de tie vi memorigas. Se vi volas ripeti 10 fojoj, ekzemple, tiam vi povas aŭ komenci vian variablon je nulo. Kaj via kondiĉo povas esti malpli ol 10. Kaj por ke ia montras al vi la matrico de tio. Okay. Do ni iris tra Mario. Ni diris Konsentite, bone ni bezonas por kontroli por korekta enigo, nulo kaj 23 inkluziva. Ni tuj trovos ian mastron, ia maniero esprimi la n-a vico aŭ la th,-a vico. Kaj ni tuj decidi, Konsentite, ke ni tuj presi ĉi multaj spacoj, ĉi multaj hashes, novan linion. Bone. Do ni havas tion. Do nun ni povas movi al Greedy. Greedy estas programo kie uzanto donas kvanton de kontanta kiu esence vi kiel la kasistino devas reveni. Sed vi volas uzi kiel iom moneroj ebla. Kaj tiel tio estas kie Greedy algoritmo envenas, kie ni volas uzi la minimuma kvanto da moneroj eblas fari ke kvanto de ŝanĝo. Okay. Do ekzemplo de ĉi tio en vian solvon povus rigardi iu kiel ĉi tio. Vi kuras. / Avidaj. Vi instigis diri bone, bone, kiom ŝanĝo sxuldis? Tiun valoron tuj esti valoro en dolaroj. Por ke tuj estu kaleŝego. Via programo estos tiam kalkuli la minimuman kvanton da moneroj postulis fari, en ĉi tiu kazo, $ 0.32. Kaj tial la minimuma nombro estas kvar. Do antaŭ ol ni kalkuli, kion fari, ni ia promeno tra la procezo kiu vi povus iri. Do se la enigo estas 32, tiam esence mi tuj uzos la malplej kvanto de moneroj se mi uzas tiom da grandaj moneroj ebla. Ĝuste? Do ĝi estas multe pli facile uzi unu kvarono kiel kontraste al kvin Nickels. Do diru, vi devas reveni $ 0.32. Nu, mi povas uzi kvarono en tio? Yeah, vi povas. Kaj tiam vi estus malkreskis al $ 0,07. Ni vidu se mi povas uzi alian kvara pagi vin. Nu, ne. Mi ne povas persvadi kvarono en tio. Do mi iros por movi al la sekvanta granda monero. Ĉu mi povas uzi groŝon? $ 0.07, ne vi ne povas uzi groŝon pagi $ 0,07. Do vi diras ne. Movu al la sekva, kiu estas nikelo. Ĉu vi povas uzi nikelo? Jes. Sep estas pli granda ol $ 0.05, do ni povas uzi nikelo. Kaj tiam ni havas du cendojn lasis super. Ĉu ni povas uzi unu denaro? Jes ni povas. Ĉu ni povas uzi alian centono? Jes. Ĉu ni povas uzi alian centono? Neniu ĉar nun ni havas sukcese pagis la uzanto dorso. Kaj por ke tutaj kvar moneroj uzataj. Do pensas tiu procezo, ni ĉiun tempo decidi bone, kio estas la plej granda monero, ke ni povas uzi? Iam ni uzas tiun, ni ia observu mensan noton de kiom pli da mono ni devas reveni al la uzanto tiel kiel kiom moneroj ni estas uzanta. Okay. Do sed denove, la unua paŝo - same kiel Mario - estas instigas la uzanto por mona sumo. Kaj tiel ĉi tiu kvanto tuj estos - ĝi tuj devos dekuma valoro ĉar nin tuj demandi ilin por dolaroj. Por ke datumtipo estas ne tuj estos entjero. Sed ĝi estas tuj estos - yeah, kaleŝego. Sed ĝuste kiel pomoj, flosas povas esti pozitiva aŭ negativa. Tial, kiam vi kontrolu por valoroj, vi tuj volas por certigi ke via kaleŝego - la eniro de la uzanto - estas nenegativaj. Okay. Ni povis trakti flosas en nia tuta programo, reprezenti kazernoj de 0,25, dimes per 0,1, kaj tiel plu. Sed mi trovas ĝin multe pli facile trakti en nur pura cendoj. Ankaŭ - kaj ni parolos pri tio iom poste - en C, flosanta punktoj havas ion nomatan imprecision. Do kiam vi eniros en 0.12, ekzemple, la komputilo vere tendencas kiel kiel 0.1111119 aŭ io simila. Do ĝi estas multe pli facile konverti al cendoj. Nu do kiel ni konverti dolaro valoro al cendoj? Parolanto 5: Times ĝin 100? ZAMYLA Chan: Yeah. Yeah. Do ni volus fojoj per 100. Sed unu malfacila afero pri flosantaj punktoj estas ke Estas iuj imprecision. Do ni nur rigardas ekzemplo de tio. Do mi tuj malfermos imprecision.c. Okay. Tio ĉi estas tre simpla programo. Ĝi petas kaleŝego, kaj presas ĝin. Unu belan bekon en terminalo estas vi povas simple tajpi klara, kaj tiam vi havas klaran ekrano. Kaj tial vi ne bezonas rigardi al ajna antaŭa eligo aŭ ajna eraroj aŭ cimo raportoj, io simila. Okay. Do ni faru imprecision. Ni kuras ĝi. Do mi haven't - en mia kodo, mi ne presi ajna prompto aŭ io kiel tio. Do nur havas palpebrumante kursoro. Do ĝi estas nur atendantaj por mi enigo kaleŝego. Do let's - hazarda kaleŝego. Kaj vi vidos ke ĝi presas ĝin sed havas iomete nombroj, ke ni certe ne inkluzivas. Do ni volas certigi, ke tiu ne okazi en nia programo. Tial kion ni volas fari estas certigi ke ni efektive speco de rondigita al la taŭga valoro. Ĝuste? Kaj tiel bonŝance ni havas funkcion nomata ronda inkludis en la Appliance. Ĝi estas en la math biblioteko. Se vi volas scii kiel uzi ronda, tiam vi vere uzas la manlibro. Vi povas alklaki viro ĉirkaŭvojo. Tiam tie alportas supren - povus esti iom malfacile deĉifri, sed fine vi ricevos la hang de ĝi. Ĉio montras al vi, kion la funkcio faras kaj tiam iuj eblaj uzoj de tiu. Do kiam vi eventuale ricevas taŭgan, valida enigo de la uzanto, tiam vi volas igi ĝin al cendoj. Certiĝu, ke vi ĉirkaŭis la valoro por ke vi eviti tiun glitpunktaj imprecision. Okay. Do ni instigis la uzanto por mona sumo. Nun kion ni volas fari estas esence kontroli, ĉu ne? Konsentite, tiel mi povas uzi la plej granda monero ebla? Se vi povas, tiam vi uzas ĝin. Vi konservi trako de kiom da moneroj vi uzis ĝis nun kaj ankaŭ la dekadenca kvanto. Ĝuste? Kaj tiam vi tuj kontroli. Iam vi havas ia elĉerpis la kazernoj, vi volas iri al la sekvanta ebla. Do, kian strukturon aŭ kian buklo forto ni volas uzi por senĉese kontroli ĉu ni povas ankoraŭ uzi kvarono, ekzemple? Parolanto 6: Dum valoro pli granda ol? ZAMYLA Chan: Yeah, perfektigi. Ekzakte. Do dum valoro estas pli granda ol. Do dum la valoro kiun ni havas redoni ankoraŭ pli granda ol kvarono, dum ni povas ankoraŭ uzi kvarono, uzi kazernoj. Konservu spuri de tio. Kaj tiam daŭre iras. Perfekta. Okay. Ho, jen mi ĵus komprenis nur iuj konsiloj pri kiel printi el valoroj. Do en via printf funkcio, ni kutime estis ĵus kontraktanta kun kordoj. Sed kiam vi volas presi an int aŭ simple ajna tipo de cifero, vi devas ia skribi ian lokon posedanto. Do ke ​​tio reprezentas la procentojn,% d por entjeroj. Vi skribas ke, tiam poste vi fakte - post komo - meti en kio valoro vere iras tien. Ĝuste. Okay. Do ni decidis ke ni volas kontroli ĉu - unu maniero fari ĉi estus senĉese kontroli ĉu ni povas ankoraŭ uzi kvaraj, kaj poste uzi la kazernoj, teni spuri, kaj poste movi al la venonta plej granda valoro. Nun alispeca neta ke vi povus fari tion estas uzante la operatoro module. Do ni jam havas la pli, minus, multipliki, kaj dividi disponebla al ni. Sed la module operatoro estas speco de neta. Kion faras estas ĝi reale revenas al vi la reston de dividanta du nombroj. Do, se vi memoras en longa divido kiam vi volus, diru, do 74 dividite per 3, vi skribus gxin, porti plus resti, kaj tiam fine la nombro je la fundo estas la restaĵo. Nu, kion module faras vere nur donas al vi tion. Do 74 module 3 donus vi 2. Simile, 10 module 2 donas vin 0 ĉar estas neniaj resto kiam vi dividas 10 por 2. 6 module 5, bone 5 iras en 6 unu foje kaj poste ĝi 1 forlasis super. Tiam se vi havas 7 module 9, bone 9 estas pli granda ol 7. Do ĝi ne povas iri ajna alia foje. Do logike ke la reveno valoro estas 7. Do, se vi pensas pri module, kiel ĝi donas al vi la reston post vi dividas ion, vi povas ia vidi kiel vi eble povus uzi ĝin en Greedy, ĉu ne? Do se vi speco de kombini la module eble kun la divido operatoro, io simila, tiam vi eble havas cool speco de Mathy maniero alproksimigi la problemo aro. Do nun ni scias ke estas paro de malsamaj manieroj kiuj ni povus fari tion - estas definitive multan malsamaj manieroj eĉ skribi la dum cikloj. Do mi skribis kelkajn _pseudocode_ tie. Ĝi povus ne esti identa al la speco de skeleto de via kodo, kiun vi skribis. Sed esence, la procezo kaj la pensmaniero estas kiel ni diskutis. Do unue, la unua linio diras akiri certan en dolaroj. Kaj tiam implicita tie estas konverti ĝin al cendoj. Tiam dum kazernoj povas uzi, ni volas pliigi la grafo. Kaj poste ni volas malpliigi la kvanton, la valoro kiu ni reveni reen. Kiel vi vidas tie, ne estas sufiĉe C. Sed mi havas ankaŭ dentado aferoj, mi metis mian kondiĉoj ene de krampoj. Tial tia gets me komencis. Kaj tiam poste, mi povas nur serĉi la sintakso. Ofte la plej malfacila parto vere pri problemo estas komprenas kion ekzakte vi bezonas fari. Do iam vi skribas ke sube, tiam ĝi estas multe pli facile tiam traduki al _pseudocode_. Kaj tiam el _pseudocode_, sintakso venas bela facila. Do ni vidas dum kazernoj, povas esti uzata, pliigi grafo, malpliigi la kvanton. Dum dimes povas uzi, tiam vi stiri ĝin tiel plu kaj tiel reen, ĝis vi elĉerpita ĉiuj viaj moneroj. Vi presi la nombro de moneroj uzataj, kiuj estos la minimuma kvanto por ke la uzanto inputted valoro. Kaj tie vi havas vian Greedy algoritmo. Kaj tiam kiam vi finos tion, vi ankaux finis pset 0. Ĉu iu havas demandojn pri io? Bone. Nu, mi batos ĉirkaŭrigardis por iom post se vi havas demandojn. Tio estis walkthrough 1. Dankon pro veni.