[MUZIKO Ludante] ANDI PENG: Jen CS50, kaj bonvenigi al semajno du el sekcio. Tiu estas fakte dum semajno du el niaj class-- reale, la unua semajno ni havis sekcion. Show de manoj, kiom multaj el vi ĉiuj venis al súper sekcio lasta semajno? Okej, tio estas bone. Estas bone. Kiel multaj el vi spektis ekstra sekcio lasta semajno? BONE. Kaj vi uloj faris fajnan sur problemo starigis unu? Do mi iros por preni lin, ke ni havas faskon de vere inteligentaj infanoj en tiu klaso kaj aĵoj estos bone. BONE. Do first-- Unue, ni nur tuj mallonge transiru la tagordo por hodiaŭ. Ni parolos pri kompreneble loĝistiko. Multa vi probable havas demandojn pri kiel aferoj kuri en tiun direkton. Ni respondos ilin. Ni tuj mallonge transiru maŝojn en kazo iu el vi infanoj missed súper sekcio. Ni parolos pri ASCII mapado. Ni parolos pri tabeloj, funkcioj, komandliniajn argumentojn. Kaj fine, kion vi uloj verŝajne ĉiuj vere volas esti tie por lerni pri, estas via pset2. Ni devos iu bela lertaĵoj kaj konsilojn por kiel fari tion. BONE. Ankaŭ, due, ni havas multaj dolĉaĵoj tie. Ĉiu kiu ŝatas bombono, ĵus venis ĉi tien. Grab kelkaj. Mi havas faskon. Ni havas ton en la oficejo. Mi ne vere volas manĝi frandaĵon ĉiuj tago. Vi uloj devus manĝi ĉiujn bombono, ĉar Mi tion ĉi tie por vi uloj. Nur manĝi frandaĵon. Tie estos dolĉaĵoj ĉiu sekcio. Do unue, kiu estas mi? Mia nomo estas Andi Peng. Mi estas la kapo TA de CS50 tie ĉe Yale. Kaj krom ke Mi ankaŭ be-- se iu volas like-- via kurado buddy, via ŝultro por plori sur. Se la nokto antaŭ via pset la destinitajxo vi havas neniun ideon kio okazas, bati min. Ni commiserate kune, kaj tiel plu. Nur scias ke mi estas ĉi tie kiel rimedo por vi kiel la frontlinio en helpi vin uloj elkompreni kiel solvi problemojn en CS50 kaj pretere. Mia retpoŝto estas andi.peng@yale.edu. Mi ankaŭ forpelos individuo retpoŝti kun miaj telefonnumero en ĝi por ke ne ĉiu en la interreto povas vidi mian telefonnumeron. Bonvolu voki min kiam ajn. Serioze, mia telefono estas kutime alkroĉita al mia mano. Mi ne povas respondi ene de kelkaj minutoj. Mi ne povas respondi ene de paro horoj. Sed mi povas garantii vin, se vi Retpoŝtadreso min, se vi nomus min, tekston mi, mi respondos ene 24 horoj. Ofte, Mi respondas antaux ke, ĉar mi komprenas ke ĉiuj havas kelkajn problemojn, kaj vi volas, ke via respondoj esti respondis tre rapide. Tamen, se vi nomas min 30 minutoj antaŭ ke peco kiu ŝuldiĝas ĵaŭdoj night-- simili, Andi, helpu min, Mi ne started-- mi donu vi ke ŝultron por plori sur. Sed ĝi povas esti tempo por pripensi Kiel fari tion venontan fojon. BONE. Oops. Kiel mi revenu? Tie ni marŝos. Do en ĉi tiu kurso, ni havas ton de subteno por ĉiuj. Krom simple sekcioj tie, kiun vi ĉiusemajne akiri elspezi 90 mirindaj minutoj kun mi, ni ankaŭ havas oficejon horoj. Kiel multaj el vi infanoj havas jam estis al oficejo horoj helpon? Granda. Tio estas vere bona vidi, ĉar ni havas kana super 45 TAS kaj CAS trejnitaj por ĉi tiu kurso ke estas ĉi tie por helpi vin uloj kun via psets. Lunde ili estas tenitaj en la TEAL klasĉambro en 17 Hill House tie ĉe Yale. Mardon kaj ĵaŭdon, ili estas tenitaj en commons. 8:00 al 11:00 preskaux ĉiun labortagon. Envenu, eliru. Ajna problemo, neniu problem-- nur trafis en, kaj tiam ni helpos vin kun tio. Due, krom oficejo horoj kaj sekcioj, ni havas ankaŭ cortometrajes. Ĉu iu ajn vidis paron de la shorts aŭ walkthroughs en la vídeos sur la retejo? BONE. Do ili estas vere, vere utila. Niaj amindaj Harvard produktado Teamo super tie sur tiu lernejo ĝis nordo, ili filmis kaj produktita tiuj nekredeblaj walkthrough filmetoj. Ili prenos vin paŝo de paŝo tra kiel iri pri solvi problemon. Ofte, se vi konfuzis pri simpla koncepto, unuopan koncepton, rigardu, ĉar ni probable havas mallonga ie en ĝi sur nia retejo. Kaj estas kutime granda rimedo serĉi kiam vi estas unua perdita sur kiel pritrakti problemon. Trie, ni ankaŭ havas study50 kaj reference50. Do studi 50 sur la retejo estas nur ligon. Ĝi estas, laŭ mi, study.cs50.net aŭ io simila. Nur Guglas ĝin. Ni havas multajn lumbildojn preparita. Ni havas multajn shorts kaj walkthroughs-- aferojn ĉiuj kompilita tre agrabla kaj pura, por ke vi infanoj ĉiuj trarigardi, vidi ajnan konceptoj ke vi estas konfuzita pri. Estus probable esti kovrita tien en study50. Reference50-- similaj. Ni havas multajn diversajn notojn _readily_ havebla por via dispono. Kaj laste, ni havas kio estas nomata CS50 Diskutu, forumon en kiu, se la nokto antaŭ vi faras viajn problemojn, diru, vi havas demandon. Ensalutu por CS50 Diskutu. Sendi vian demandon. Kaj tiam unu el la hundreds-- eble, thousands-- de kunlernantoj prenante ĉi klaso linio estos ensaluti. Kaj eble iu povas akiri vian respondon antaŭ TA povas. Ĝi estas esence nur reta forumo ke ni povas ĉiuj uzi diskuti niajn problemojn. Tio estas mojosa. BONE. Do problemo aroj. Ni estas sur bone dika de problemo aro du. Multaj el ni jam baraktis tra problemo starigis unu. Ni jam scias ke eble atendas por la lasta nokto faru vian pset ne estas la plej lerta afero fari en CS50. Konsiloj kaj konsiloj esence por sukceso legas la tutan specifon. Kiel multaj de vi jam legi la spec por pset 2? BONE. Tio solida kvanto. Mi scias vin uloj verŝajne rekonis nuntempe la especificaciones estas vere longa. Ili estas vere, vere longa. Estas vere malfacile legi ĉiun linion de kiu atente vorton post vorto. Vi volas nur senkremigi al kie ĝi diras vin fari ion. Mi povas garantii al vi, ne faru tion. Se vi faros tion, vi probable iranta perdiĝi ie kie rakontas vin kiel komenci problemo aŭ ĝi rakontas al vi kion al nomo via problemo aŭ ĝi rakontas vin, tiu estas probable la plej bona maniero komenci fari vian problemon. Kaj tiam vi estos perdita. Kiam vi provas legi viajn Spec duonvoje tra, multajn el la gravaj information-- en kiuj vi ne tuj povos vere aliro. Do legu la tutan specifon. Provu legi la tutan spec antaŭ ol vi atingos sekcio, ĉar tiam, kiam ni paroli pri la pset, ni ĉiuj povas havi ideon de kio okazas. Due, tiu estas koncepto ke mi ŝatos referenci multe dum la kurso semestro. Sed esence, ni renkonte duonvoje, dekstra? Mi, kiel via TA kaj Jason kiel kurson direktisto kaj Scaz kiel via profesoro kaj David kiel vian instruiston kaj ĉiuj la aliaj amindaj TAS en tiu kurso, helpantoj en ĉi kompreneble ni faros nian eblon por certigi ke vi havas inklinon ĝis sukcesi en tiu kurso. Ni tenos sekcio. Ni tenos oficejo horoj. Ni respondos vian telefonon alvokoj, respondos viajn retpoŝtojn, fari ĉion ni povas fari certe via demandoj estas responditaj. Tamen, helpi nin ankaŭ. Renkontu nin duonvoje. Se vi venas al oficejo horoj ne irinte al sekcio, ne vidinte la prelegoj, ne havante ideon kio daŭriĝas, estu simila, helpu min. Mi tuj estos kiel, nu, mi bedaŭras. Eble tempo por pruntedoni ke ŝultron por plori sur, ĉar mi ne certas kion mi povas fari helpi vin se vi ne provu almenaŭ helpon mem iomete en la komenco. Renkontu nin duonvoje. Vi scias, bonvolu veni preta respondi kaj akiri preta engaĝiĝi en la materialo. Ĝi faras aferojn tiel facile por ĉiuj implikitaj. Jes, tio estas bela multe ĝin. Gradiganta. Tial en la syllabus, estas sufiĉe detala koncerne al kiel ni lernojaro. Sed esence, la rompo en tiu estas 50% de via lernojaro Estos la psets, kiu belas, ĉar tio estas kie vi estas elspezanta la vasta plimulton de via kurso tempon sur. Kvizojn 40%, kaj via fina projekto estos 10%. Estos du kvizojn ĉie la kurson de la semestro. Mi kredas ke la tempoj kaj datoj estas Ankaŭ listigita sur la syllabus. La maniero kiun ni volas, estos grading vian psets estas ke ni havas esence kvar valoroj kiujn ni atribuas al ĉiu lernojaro. Ni havas valoron de amplekso, korektecon dezajno kaj stilo. Do kiel vi vidas, jen speco de nia formulo por kalkuli psets. Tri ni doni la plej pezo al korektecon ĉar evidente via trejnisto devus esti provante por la kazoj ke ni volas ĝin por elprovi por. Vi uloj ĉiuj havas check50 je via dispono. Ĝi estas tre utila funkcio ke vi uloj povas ĉiuj alŝuti vian kodon por niaj serviloj, kie ni kontrolos ĝin por vi. Kaj vi vidis tiujn frowny vizaĝoj, smiley edroj. Ili estas vere, vere utila. Bonvolu ne esti la studento kiuj ŝatas tries al hardcode en ĉiuj respondoj al ili. Mi sendube vidis pset kie iu vidis ĉiujn valorojn de check50 kaj ili nur malfacile kodita in-- se tiun numeron, presi tiun numeron. Se tiu nombro, presi tiun numeron. Ne faru tion. Kvankam teknike check50 pravas, via maniero de solvi la problemo ne estas ĝentila. Do simple uzu check50 ŝpareme. Sed ankaŭ fari certe ke vi kompreni kiel ĝi estas funkcianta, la programo funkcias krom check50, ĉar ni ne povas elprovi ĉiun ebla kazo de check50. Ni estos provi kelkajn. Dezajno estas esence, kiel bone desegnita estas via kodo? Se vi estas kopio-glui multoblaj linioj de kodo multfoje. Eble vi ne havas tre la bona dezajno en via kodo. Eble estas tempo aldoni ke buklo. Esence, ĉi tie estas nur ĉiuj pri provanta fari vian kodon, provas skribi vian kodon kiel kompetente kiam ebla por ke via programo kuras kiel rapide kiel ebla. Laste, ni havas stilon. Do stilo estas speco de arbitra, subjektiva termino. Mi scias nin oficiale havas stilon 50 gvidilo por CS50, kie informas vin, ho, vi devus havi spacon tie. Vi devus speco de formato via kodo tiamaniere. Vi devus nomi aferojn tiamaniere. Mi ne vere zorgas, per, kiom vi elektas stiligi vian kodon, Tiel longe kiel vi restas konsekvenca. Ekzemple, se vi ŝatas lasi spacon post via kvar antaŭ viajn kvar buklo, nur fari tion ĉiufoje. Ne ia faru. Ne faru tion alifoje. Se vi ŝatus teni krispa krampoj spaco certa maniero, nur ĉiam fari ĝin tiel. Ne ia fari ĝin ie tie kaj ie ne ekzistas. Kiam ni grading, ĝi estas vere malfacila se mi havas nenian ideon kiel vi formati viajn kodo, aferoj estas freneza kaj maloportune. Se vi nur teni ĝin kohera, estas multe pli facila por mi kiel la granda por povi legi vian kodo. Ĝi estas multe pli facila por vi kiel studento povi trarigardi viajn kodo kaj vidi kio estas malbone kun ĝi oblikvo kial ekzistas temoj. Stilo estas unu el la plej facilaj aferoj vi infanoj povas fari por akiri plenan partituroj. Esence, se vi nur zorgas, se vi pagas kvin minutojn de atento al viaj kodo ĉiusemajne, vi devus esti pleniĝas stilo punktoj. Laste, ni havas kio nomiĝas la multiplikanto de medio. Scope-- Mi scias ke estas granda vorto, speciale en ĉi tiu klaso. Sed amplekso, cxiuj rimedoj estas ke vi estas provanta la psets al la plej bona de via kapableco. Se vi turnas en tri el de via kvar problemojn kaj eĉ ne provos la lasta, vi probable tuj perdos iuj punktoj sur medio. Eĉ se vi simple komenci la problemon, faru vian eblon por marŝi tra ĝi. Eĉ se ĝi ne funkcias, turni ĝin en, ĉar tio montras kaj pruvas al al ni, ke vi provas, ke vi provis la problemo aro al la plej bona de via kapableco. Kaj tiam ni povas doni al vi plena punktoj por medio. Medio estas ankaŭ tre grava por kiam ni paroli pri la plej malalta pset partituro guto. Do dum de la semestro, vi infanoj havas naŭ psets. Kaj ni efektive elgutigos la plej malalta partituro el tiuj naŭ, sed nur se vi havas plenan atingon punktoj. Do se vi turnas en nekompleta pset, bedaŭrinde, ni ne povas faligi tiu, ĉar via atingo punktoj ne estis kompletigita. Do eĉ se vi havas la teruran semajno kie vi mortas kaj vi estas malsana aŭ via hundo mortas, via kato mortas, kaj vi superŝarĝita kun hejmtasko, nur provu la pset. Ĉu ĝin la plej bona de via kapableco. Se ĝi ne funkcias, ĝi ne gravas. Nur turni ĝin en. Almenaŭ ni povas doni vi indikas por peno. A por fortostreĉo en tiu klaso. Almenaŭ plej malalta partituro guto por peno. Do jes. Tio estas sufiĉe multe ĝin. Ĉu iu havas demandojn tiom malproksime sur kiel ni noton en la klaso? Aŭ iu el tiuj? Ajna el tiuj tiel far-- sekcioj, oficejo horoj? Malvarmeta. BONE. Do tiu estas temo kiu ne unu vere ŝatas paroli. Mi ne vere ŝatas paroli pri ĝi. Vi uloj ne vere volas aŭdi min paroli pri ĝi. Sed bedaŭrinde, ni ĉiuj devas paroli pri ĝi. David pasigis 20 minutojn prelegi parolas ĝin. Kaj kiu estas la subjekto de akademia honesteco. Do ni ĉiuj ĉi tie jam probable verkita eseo sometime en niaj Yale kariero. Ni probable akiris diskutpaĝo kie ni havas Oni diris al ne plagiar nia eseo, ĉar tiu laboro estas ne nia. En komputiko, ni havas samspecan koncepto. Ĉiuj laboro ke vi sendas, ĉiuj kodo kiun vi skribas estu kodo ke vi skribis. Devus ne esti kodo kiun vi havas kopiita el iu alia loko. Devus ne esti kodo ke vi googled kaj plopped en kaj vi ne vere scias se ĝi funkcias. Vi ia havas senton de kio ĝi estas faranta sed ne vere. Kiam en dubo, esence, ĝi estas nur racia. Sur nia Syllabus, ni havas tuta listo de aferoj ni vidas kiel racia kontre ne racia. Ekzemple, racia Estas vi kaj via amiko diskuti kion la plej bona vojo iri pri logike solvi problemon. Tio sufiĉe racia. Kio ne estus racia estas se vi uloj kolektis, tajpis la saman kodon, kaj turniĝis en la saman kodon. Tio ne racia. Sama afero, speco de eseo. Se vi volas diskuti kun via amiko, hej, jen kion mi volas skribi pri. Tiuj estas la paŝoj mi volas preni skribi pri ĝi, granda. Tio estas mirinda. Bonvolu kunlabori kun aliaj. Se vi uloj komenci skribi la samon, envenu en la sama eseo, jen malpli OK. Do kiam en dubo, simple ne faru. Tie, ni en CS50, ni havas skriptojn ke run aŭtomatigi testi Ne nur la praveco de via kodo, sed ankaŭ la unikeco de via kodo. Do bonvolu ne meti nin en la pozicio devi raporti vian kazon al EXCOMM. Plaĉi nur por ĉiuj, ni nur fari tiun mirindan sperton. Ĉiuj lernas pli bone, ni ĉiuj estas pli feliĉaj, kaj ni estas ĉiuj starigis al sukcesos en ĉi tiu kurso. Io, kio tre unika pri ĉi klaso ke mi kredas ke ĉiuj devus vere atentu estas ke ni havas kio nomiĝas la bedaŭro klaŭzo en nia syllabus. Do esence, ene 72 horoj, se vi kredas vin faris ion vi ne estas vere certa ke ĝi taŭga, bonvolu veni al ni. Ni promesas al vi, ke ene 72 horoj ni pritraktos la kazo nin sen referenco al pli alta aŭtoritato en la administrado. Do se vi venos al mi kaj diros: Andi, hej, mi vere bedaŭras, sed mi kredas, ke estas paro linioj en mia kodo hieraux ke mi specon de googled, deiris de Stack Overflow, kopiu kaj batitaj, kaj mi estas vere, vere bedaŭras pri tio, lasu min scii. Bonvolu ne nur lasi ĝin Fester kaj ĝuste esperas ke mi kaptos ĝin. Ni kaptos lin. Nur venu al mi. Sciigu min ene 72 horoj. Ni eltrovi solvon. Kaj ni promesos ke ni ne rilatas al universitato aŭtoritatoj esence. Do estas en via plej bona intereso nur esti honesta kun ĉiuj implikita en la kurso. BONE. BONE. Do nun, rapide antaŭ Mi pluiri, ĉu iu havas demandojn pri loĝistiko sur kiom kursoj ni tuj kuros, kiom sekcioj iras kuri, iu el kiuj? BONE. Yeah. Spektantaro: [inaudible]? ANDI PENG: Yeah. Do quizzes-- kiom multaj el vi estas en la lundo / merkredo sekcio? Kiom da de vi estas en la mardo / ĵaŭdo? OK, do estas solida disigo tie. Do la maniero ke ni kuras ĝin ĉe Yale estas ke ni tuj havas du apartajn quizzes-- unu por ĉiu section-- ke estos prenita dum klaso. Mi kredas ke estas oktobro, fine de oktobro, io simila, kiel unu semajno de la kvizo. Jes, do simple venu al klaso. Sur tiu lundo aŭ merkredo, vi prenos la kvizo. Sur tiu mardo aŭ ĵaŭdo, vi prenos malsaman kvizo. Sed la sama materialo estos kovrita. Yeah. Bona demando. Yeah. Spektantaro: Kie ni iri kontroli niajn karakterojn? ANDI PENG: Yeah. Do mi estos sendo de retpoŝto ajn ĉiusemajne kiam kvizojn estas graded-- aŭ, Mizera, kiam psets estas gradita. Psets kutime turnis tra tagmezo aŭ vendredo. Do mi promesas, ke mi provos atingi ilin reen al vi per la tagmezo de la sekvanta vendredo. Kiam ajn mi lernojaro oni pset, mi sendos eksteren sciigo sur la lernojaro libron kiu rakontas al vi viajn partituro videblas rete. Do ĝuste tiu semajno, post kiam mi fini grading lasta semajno psets, vi infanoj ricevos retpoŝtaĵon sciigo diranta vin, hey tiu estas kie vi iri por vidi viajn kvalifikojn. Kaj vi povas vidi ĉiu rompo de via gradoj. Vi povas vidi komentoj. Ho, rapide afero. La rimarka sekcio en la granda libro estas kie Mi verŝajne pasigas la plimulton de mia tempo gradiganta. Do unu afero, ke estas vere grava kiam you guys vidanta Via gradoj sur via psets ne nur rigardanta ĉe la fizikaj partituro sed ankaŭ preni tempon por vere legis mian komentojn. Ofte kiu donas vin retrosciigo sur kiom vi solvi problemon. Se vi devas fari ion iomete pli bone, konstrua kritiko kutimas bona donita en tiuj komentoj sekcio. Do bonvolu, bonvolu, mi tuj elspezi tempon skribi komentojn. Bonvolu, mi estus vere dankos se vi infanoj estus legi tiujn komentojn. BONE. Malvarmeta. Bone. Do ni tuj komencos parolante kaj simple revizii rapide iuj de la materialo de semajno nulo ĝuste tial ni estas sur la dekstra paĝo por komencante ĉi tiu semajno problemojn. Do la tempo buklo estas de la tri tipoj de cikloj ni diskutis pli frue en ĉi tiu klaso. Dum buklo esence Estas skribita en la sintakso kie, dum certa kondiĉo, fari tion multfoje, dekstra? Pensu pri ĝi en ĉi grafikaĵo tie. Vi tuj komencos je certa punkto en via kodo. Vi tuj eniri la buklo kondiĉo if-- Mi ne know-- x estas malpli ol unu. Se tio estas vera, vi tuj ekzekuti la buklo korpo. Kaj vi tuj tenas faranta ke denove, denove, denove, super kaj over-- tial ĝi estas loop-- ĝis via kondiĉo iĝas falsa. Do tiamaniere, dum buklo estas unu el la simplaj manieroj skribi omnaspeca kondiĉo ke bezonas ripeti denove kaj denove kaj super. Nur esti zorgema kiam ajn vi skribas ia buklo ke vi havas eliron kondiĉo kiel bone kiel ĝisdatigo al ĉiu kiu Estas tiel ke via buklo ne nur alveturi kaj super senfine. En ajna kazo, vi tuj voli certigi ke vi ŝanĝas iun aspekton de via kodo aŭ ĉe la fino de la ciklo nur certigi ke vi havas vojon progresi al la kondiĉo ke vi volas renkonti al fino. Ĉu tio havas sencon por ĉiuj? Ni nur ne volas esti kaptitaj en tiu spiralo kie ni iros ĉirkaŭ kaj ĉirkaŭ kaj ekzistas neniu maniero rompi la buklo. Kaj ĉiu buklo esence havas maniero fari tion. BONE. Due, multaj de vi en via Mario psets verŝajne devis dungi tiun tipon de buklo. Ĝi nomiĝas do dum buklo. Unue, oni povas diri al mi kion la diferenco inter do dum buklo kaj dum buklo estas? Yeah. Publiko: The do dum buklo kuras unue [inaudible]. ANDI PENG: Jes, ĝuste. Do fari dum buklo ĉiam faras ajn estas interne la do, ene de la krampoj ekzistas kaj agas kondiĉo antaŭ kontrolanta por the-- bedaŭras, faras ke kodo antaŭ kontrolanta por la kondiĉo. Kaj tio estas speciale grava por ni tie en tiu klaso, ĉar plejfoje Ni tuj volas suflori la uzanto por iu speco de enigado. Kaj tiam, depende la enigo ili donos al ni tiam ni povas taksi, ho, fari ni bezonas suflori ilin denove? Do en Mario, se la uzanto donis vi negativa alteco, ekzemple, vi tuj unuaj prompto kaj fari kion ajn estas ene. Tiam vi tuj kontroli tempeto. Vi scias, estas negativa 1, estas ke pozitiva nombro? Se ĝi ne estas, mi tuj iros reen kaj ripeti la do kaj ripeto kaj ripeti kaj ripeti ĝis ili fine vin numero kiu vi ŝatas, ke ni povas ĉiuj uzas en nia kodo. Estas bela gravaj por esence ajna uzanto enigo. Mi povas garantii al vi ajnan tempo en pset kie ni petas vin enigo omnaspeca kodo, ni estas verŝajne iranta doni vin testo kazo en kiu ni estas tuj donos al vi ion malbonan tio provos rompi vian kodon. Se ni provas peti vin enigo an entjero, ni povas nur doni al vi cxenon kaj vidi kiel vin trakti ĝin. Se ni petas vin uzi aĝon, ni donas al vi negativa nombro por vidi kiel vi pritraktus tiel. Ĝuste certigi vin uloj Elprovas por kazoj en kiuj vi ne ricevas la plej bona enigo, ni nur diros. Kaj do dum buklo estas ofte la plej bona maniero desegni vian kodon por ke ĝi renkontas tio amplekso. BONE. BONE. Do tiu estas probable la plej kompleksa buklo el la tri ke ni rigardis tiom. Kaj ŝajnas tre timiga unue. Sed mi garantias al vi, iam vi uloj akiri la pendi de kiel uzi por ciklo, ĝi estas unu el la plej utilaj aferoj, plej utilaj iloj en via arsenalo por movi antaŭen en ĉi tiu klaso. Do ekzemple, en Scratch, ni havis tiun tre simplan blokon ke nur diris ripeti ĉi certaj frazoj certan nombron da fojoj. Parenteze, SAJ-- jen Scaz Andi Jason. Ni ofte subskribi nian retpoŝtojn SAJ. Se ni diras SAJ, ne estu konfuzita. Tio estas nur ni. Do en Scratch, ni povis havi bloko kiu diris, ripeti Mi amas SAJ! 10 fojojn. Tre simpla. La logiko malantaŭ tiu estas tre tre simpla, ĉu ne? Mi volas unue iri tra la unua tempo kaj vidi ke, duafoje kaj vidu, trian fojon, ktp kaj tiel plu, ĝis vi batis al 10. Kaj la vojon ni reprezentus ke en poŝtkodo estas nur tra simpla por buklo. Do por, vi tuj deklari via variablo tie, en tiu kazo, kun int. Ni tuj nomas ĝin I. Ni tuj pravalorizi ĝin al 0. Kaj la halto eldono estas tuj estos i estas malpli ol 10. Kaj la ĝisdatigo tuj estos i ++. Kaj ene de la ciklo, ĝi tuj ekzekuti ĝis fine ĝi trafas la fino de la condition-- en kiu kazo, ĝi tuj rompi la buklo. Tie devus esti stuff ke vi guys ĉiaj vidis antaŭe kaj devis fari por via problemo starigis unu. Ĉu iu havas demandojn rilate por bukloj nun? BONE. Granda. BONE. Do por tiuj el vi, kiuj havas legi la pset spec por tiu semajno scias ke ni estas irantaj devi dungi iu nomita ASCII kaj ASCII tablo. Kaj David en prelego transiris mallonge kiom komputiloj essentially-- ĉio estas kodita en komputilo en duuma, en nuloj kaj aĵoj. Kaj la vojon ke komputiloj kapablas stoki malsamajn valorojn aldone al nuloj kaj estas tra mapado tiuj nombroj por reprezenti aliajn ciferojn aŭ esence aliaj karakteroj. Do en tiu kazo, ASCII table-- ĉiuj ĝi faras estas mapo karakteroj, aŭ signojn, al nombroj. Do la fontkodon dosiero en via computer-- vidas, hej, faskon de nuloj kaj, nuloj kaj, nuloj kaj aĵoj. Tion stokitaj en la fakta memoro de via komputilo. Sed kiam ni homoj volas komuniki kun la komputilo, ni want-- diri, ekzemple, se mi volas la majusklajn A, Mi tuj bezonas iel diri la komputilo, ho, kiam mi tajpas majuskla A, mi volas diri tiun reprezenton en duuma. Kaj tial la vojo ni fari tion estas ĵetis arbitra afero nomata ASCII tablo, kie ni, kiel homoj, kiel programistoj, antaŭ kelka tempo, ni arbitre decidis ke ni tuj asigni tiujn nombro valorojn por tiuj karakteroj. Do vi infanoj povas google tiu linio. Mi kredas, ke estas ligilo al ĝi en viaj pset-- nur ASCII mapo tablo ASCII tablo. Ĝi simple tradukas duuma numerojn al signoj. Kaj ĝi estas iranta esti tre utila por via problemo aro kiam ajn vi volas kalkuli ion aŭ se vi volas montri iujn karakteroj aŭ entjeroj aŭ manipuli certaj karakteroj. Ĝi estas iranta esti tre Gravas ke vi ĉiuj scias kiel navigi ASCII tablo. Do ekzemple, la majusklajn A estas reprezentita de la nombro 65. Kaj la minuskla a estas reprezentita per 97. Do estas grave scii, ke la diferenco inter la du valoroj estas 32. Ofte, se vi devas konverti el unu al la aliaj, la diferenco estas 32. Kaj ne maltrankvilas se vi estas afabla de konfuzita sur tiu unue. Ni iros super kiel ni farus dungi tiu en fakta kodo. BONE. Do por tiuj el vi kun tekkomputiloj ekstere, bonvolu elsxiros ASCII tablo, ĉar tiuj verŝajne postulas vi uloj referenci kio la signoj estas. BONE. Do sciante ke certaj karakteroj mapi al certaj nombroj, se mi kuros nur la unua linio de tiu code-- la printf estas, minuskla a, minuso majusklajn A. Ĉu iu havas konjekton sur kio estus presi el la ekrano nun? Do unue, kion faras minuskla a reprezentas? Kiu nombro estas ke kodita en la ASCII tablo. Pardonon? Publiko: 97? ANDI PENG: 97, granda. Kaj kio estas majuskla A? Publiko: 65. ANDI PENG: Do kio estas 97 minus 65? Publiko: 32. ANDI PENG: OK. Do kio vi uloj pensas tuj okazis kiam mi enigo tiun linion de kodo en mia komputilo? Spektantaro: [inaudible]. ANDI PENG: Pardonu, parolas supren. Neniu ĉagrenoj. Tio estas tre sekura medio, minus la fotilo. Ni cxiuj iras to-- sen ĉagrenoj. Nur ni cxiuj iras ŝajnigi kiel ĝi estas nur ni escalofriante en tiu ĉambro. Neniu ĉagrenoj. Neniu demando estas tro stulta. Neniu respondo estas stulta respondo. Mi probable tuj faros erarojn en la kurso de mia instruado. Serioze, knaboj, nur blurt ĝin. Estu certa en vi mem, vi scias? Do kio estis tio? Kiu diris ke lasta respondo? BONE. Krii ke bela kaj klara. Publiko: 32? ANDI PENG: 32. OK, ni kuros ĉi kodo kaj ĉu tio estas kio okazas. BONE. Do kiel vi infanoj povas ia vidu, la tipa notacio mi havas starigis tie por kiel ni uzus omnaspeca programo en nia komputilo. Ni havas niajn ĉefa funkcio ene de nia ĉefa funkcio. Mi simple tuj kopii kaj algluu tiun linion de kodo. Ankaŭ esti zorgema kiam vi infanoj estas kopii kaj alglui kodon. Kelkfoje iuj operatoroj Ne almeti super korekte. En tiu kazo, la minuso signo estis fakte haltostreko. Kaj do la komputilo ne repreni ĝin. Do mi devis iri reen kaj fizike Retajpu tio. Nur esti zorgema kiam vi uloj faras tion. BONE. Ni tuj kuru ĉi tie. Do ni tuj kd en nian section2. Mi nomis tiun programon asciimath. Do memoru, kiam ni kuras iu programo, ni volas unue kompili ĝin per kurante ĝin tra nia konsiston. Kaj poste ni volas reale kuri la programo per farado punkto-oblikvo. Do ni tuj ./asciimath. Bone, tie ni iras. Kaj ni vidos 32. Bone farita. Vi meritas bombonon. Dolĉaĵoj por vi. Pardonon. Bone. BONE. Do ni povas reiri al nia ekzemplo cxi tie. Aah, ne. Aah. BONE. Mi simple tuj teni ĝin tiel. BONE. BONE. Do kiel vi uloj povas vidi, ni povas fari multaj tre interesaj aferoj, multajn tre malvarmeta aĵoj, multan tre komplikaj aferoj engaĝante ASCII signoj kaj ciferoj. Unufoje vi akiras malsupren al linio kvin, ke estas multe sekvi kune. Ni ne tuj iru tra la sekcio. Bonvolu, se vi povas, rezonadi ĝin sur papero unue sur kio devus okazi kiam vi enigo tian ĉenon de valoroj. Ekzemple, en tiu lasta linio, ni havas z-- kiuj reprezentas certan number-- a-- kiu ankaŭ reprezentas certaj number-- plus 1 modulos 26 plus minuskla a. Se vi uloj teni legado tra ĉi tiuj, vi vidu skemon supreniru kiel ni manipulanta la kodon. Mi ege, ege sugestas post sekcio vi ĉiuj uloj antaŭeniri kaj enigo tiuj ĉiuj en via komputilo kaj vidi kia nombroj eliras kaj rezonante tra kial tiuj estas okazas, ĉar pro via psets ĝi estos vere grava por vi kompreni kial certaj aĵoj okazas. Ĉiuj de ĉi tiuj diapozitivoj estos rete. Do ne maltrankviligas provas fizike kopii malsupren notojn. Ĉio estas ensalutintaj. Tiu sekcio mem estos rete. Ĉiuj miaj fontkodon ke Mi kuras estos rete. Yeah. Ĉu vi ankoraŭ havas demandon? Publiko: Kio estas modulos? ANDI PENG: OK. Do module estas operatoro ke tuj esti bela grave vian uloj la pset tie. Do la vojo ke operatoroj en C kaj en programado laboro estas ke vi havas kion nomas la divido simbolo kaj la modulo simbolo, kiu estas ĝuste kiel la procentsigno. Do en C, kiam vi faras entjero dividita per entjero kun oblikvo, C havas emon volas tranĉi si de la dekuma punktoj, ĉar entjero volas konverti al entjero. Oni ne tuj volos esti duobla kun aro da glitpunktaj ĉiuj post ĝi. Do se mi faras 3 dividita per 2, ĝi tuj por ekstermi la 0.5 kaj nur al vi 1. Do jen io esti tre zorgema de kiam vi estas faranta ajnan specon de matematiko en programado, estas ke la nombroj vi ricevas ne povas esti la nombroj ke vi pensis, tial rondigas en via lasta pset estas tiom grava. Module donas al vi la reston. Do ekzemple, se mi faris 3 module 2-- do 3 procentsigno 2-- donus al vi la reston de tiu. Do 3 dividita per 2 estas 1,5. Estas 1 resto de 1. Ĝi donus al vi la 1, kiu estas la resto de tiu. Do kiam vi uloj movas tra la ASCII tablo, module finos estante io, kio tre grava, kaj ni diskutos, kiu poste sur. BONE. Do iu kiu estas bela, bela nova kaj bela unika ke ni diskutis tiun semajnon la koncepto de kio estas tabelo. Do tabelo estas la unua tipo de datumstrukturo ke ni tuj renkontas en tiu klaso. Ĉiuj datumoj strukturo estas ia arbitra, laŭvorte aĵojn kiel strukturo ke ni kiel programistoj kreis, ke ni metis en nia kodo, ke povas enhavi aliajn partojn de kodo. Do en tiu senco, oni tabelo pensi pri tio kiel arkivo kabineto, kie se vi malfermas malsamajn bretoj de via dosiero kabineto, vi povas aliri malsamajn aferojn. En memoro, tabelo estas nur faranta la sama afero en via komputilo. Vi povas havi malsamajn blocks-- ni nomu ilin indices-- de tabelo. Estas nur kiel bloko, breto de memoro ke ni kreis ene via komputilo kiun vi povas enigo iujn aferojn en malsamaj spacoj. Do kun tabelo, vi ĉiam devas specify-- Vi devas indiki deklarante array en la jena formato. Vi tuj unua specifi la datumtipo ke vi volas krei la tabelo. Se mi volas tabelo de entjeroj, Mi tuj metis int prava. Se mi volas tabelo de kordoj, Mi tuj metis ŝnurojn tie, la nomo de via tabelo, kaj tiam vi tuj havos kvadrataj krampoj. Kaj ene la rektaj krampoj, vi estas tuj havos la grandecon de via tabelo. Iu kiu gravas teni en menso kiam kreanta arrays estas ke, fojo vin krei tabelo, ke grandeco ne ŝanĝiĝas. Do se vi scias ke ĝuste nun vi havas tabelo de amplekso 10, vi scias ke mi tuj havas 10 ĉelojn ene aŭ 10 indeksoj ene tiu tabelo, kaj ĝi neniam iras por pligrandigi aŭ malpliigi negrave kio, kaj ke ne estas Nuntempe nur 10 blokojn de spaco asignita en via memoro kiu povas stoki ĝis 10 aferoj de ajn vi metis. Do tiamaniere, tabelo datumtipo, la datumoj strukturo kiu estas tabelo estas tre malsama de iuj aliaj ni kovros poste en ĉi tiu kurso. Yeah. Ekzemple, se vi volis krei tabelo de grandeco 3 ke enhavis variabloj de integer-- ho, pardonon, de temperature-- kaj temperaturo, de Kompreneble, estas entjero. Do ni kreus int, kiu estas la datumtipo de kion ni volas stoki. Ni tuj nomas tiun temperaturoj pro nomenklaturo de nomanta iu kiu ni ĉiuj komprenas. Kaj ni tuj devas kvadrataj krampoj. Kaj ni volas tri numerojn. Do ni tuj metis tri ene de ĝi. Iu kiu vere grava teni en menso estas ke arrays estas nulo indeksita. Ĉiuj tio signifas estas ke vi starti kun la indico de 0, kaj vi kuras supren tra la grandeco de la tabelo minus 1. Do ekzemple ĉi tie, ni havas tabelo de amplekso 3. Ĝi estas iranta esti kapabla teni tri valoroj. Sed la nombroj themselves-- ke numeron, la tabelo, tiu indico, la tabelo, estas 0 tra 2. Do, knaboj, estu vere, vere zorgema kiam vi iras tra viaj problemoj fiksita kaj krei omnaspeca tabelo, ĉar multa la tempoj estas vere, vere facile forgesi tion. Mi efektive ne havas la indekso de 3, ke mi aktuale nur havas la indekso de 2. Kaj se vi provu aliri la tria indekso, ĝi tuj estos kio estas vokis la nula Terminator. Oni ne tuj reale ekzistas en la tabelo. Kaj la komputilo estas ne plaĉos tio. Do zorgu kiam ajn vi konsentas aferoj nur por certigi ke vi memoros ke tabeloj estas nulo-indeksitaj. BONE. Do la unua ekzemplo estas nur unu maniero de krei tabelon. La dua ekzemplo mi havas sube estas nur aparta maniero krei kion estas la samaj datumoj strukturo kiu ni ĵus inputted. Do anstataŭ fizike kurante tra kaj metante en temperaturo de 0 egalas ajn, temperaturo 1 egalas ajn, temperaturo 2 egaluloj ajn, mi povis efektive nur rekte kreas ĝin ĉiuj en unu linio en temperaturo kvadrataj krampoj egaluloj. Kaj rimarki en ĉi tiu kazo, vi ne bezonas specifi kiom grandaj via tabelo estas, ĉar la komputilo tuj iri tra kaj vidu ke ekzistas tri elementoj en tiuj buklaj krampoj. Kaj tuj scii, okej, Mi bezonas tabelo de amplekso 3. Vi ne tuj bezonas enigo ĝin la sekva maniero. Kaj ankaŭ, jes, tiel. Ĉu iu havas demandojn koncerne al kiel ni faras tabeloj aŭ kiel la strukturo de tabelo funkcias? Yeah. Spektantaro: [inaudible]? ANDI PENG: Jes, ĝuste. Do se vi estus deklari kaj pravalorizi tabelo la jena metodo: kiu estas la dua maniero, vi povas simple lasi tiujn. Kaj la komputilo aŭtomate sciu ke bezonas kalkuli kiom da elementoj estas en tiuj buklaj krampoj, disigitaj per komoj. Do jen ili vidas 65, 87, 30. Do la komputilo scias, ho, ekzistas tri entjeroj. Mi scias krei tabelo nomon temperaturo kun tri elementoj en ĝi. Bona demando. Yeah. Spektantaro: Ĉu ne eblas krei tabelo kun malsamaj tipoj de datumoj kiu povus esti enirita en ĝin? Ekzemple, kun entjeroj [inaudible]? ANDI PENG: Por la celoj de tiu klaso, ne, ĝuste nun. Kiam vi kreas datumoj strukturi kiel tabelo, vi diras la komputilo, hej, mi bezonas vin asigni ĉi multe memoro en mia malmola disko, kun ĉiu ĉelo estanta iu numero de bitoj. Memoru ni lernis en semajno nulo ke malsamaj datumoj tipoj havas malsamajn grandecojn? Do ekzemple, kordo Estas malsama kvanto de spaco ol char, kiu Estas malsama kvanto de spaco de entjero. Kaj do se vi ne specifas kaj vi miksi kaj egali la specojn de variabloj vi havas, la komputilo tuj estos tre konfuzita. Kaj ĝi ne tuj scii kiom memoro doni vin. Do por celoj de dekstra Nun komputiloj povas nur rekoni unu tipo de tabelo. Bona demando. BONE. Do nature, la dua demando ni havas estas, nu, nun ke ni kreis tabelo kaj ni metis ĉiujn tiujn aferojn en la tabelo, kiel ni tuj povos aliri ĝin? Do la tipa strukturo kiu ni ĉiam aliri tabelo estas nia aminda por buklo. Mi promesas vin uloj ke ni estos vidante multajn ĉi ulo tie. Esence, iam ajn vi volas enigi valorojn en tabelo aŭ vi volas aliri ilin, la bona maniero fari tion estas por buklo, ĉar por buklo, vi scias kiom da fojoj vi tuj volas kuri tra la tabelo, ĉar vi havas haltigon eldono, dekstra? Kaj ĉiufoje kiam vi kuros tra, vi povas aliri malsama elemento de la tabelo. Kaj ankaŭ, tiu estas tial tipe ni komencu nian por bukloj je la 0 valoron, ĉar kiam vi aliras arrays, vi povas aliri la nulo indekso. Kaj tiel ĝi paralelas tre bele. Vi uloj eble volis skribi por int i egalas 1. i estas malpli ol aŭ egala al 3. Sed ĝi ne funkcius egale bone tie, ĉar vi nur havas elementojn de 0, 1, kaj 2. Do se vi estus komenci via i je ero 1, 2, kaj 3, vi tuj finos kurante el la limoj de via tabelo, kaj malbonaj aferoj okazos. Do mi esperas ke vi uloj vidi la segue de kial en la fruaj klasoj Ni instruas vin uloj kiel kuri kaj formati por buklo la maniero ke ni estis. Ĝi estas ĉar, nun ni transitioneis en arrays, vi povas vidi kial la 0 pruntedonas mem tre bele por aliranta. Do la vojo ni fari tion estas that-- mi nur presi ĝin tie pro videbligi ĝin. Sed mi havas mian lokokupilo, komo. Kaj la fakta aliranta parto okazas. La nomo de la tabelo nomiĝis temperaturo. Do estas temperaturo kaj la i-a ero de la tabelo. Do kiel la por buklo kuras tra, ĝi tuj starti je 0. Ĝi tuj presi la 0th indekso de tiu tabelo. Tiam ĝi tuj presi el la unua elemento. Tiam ĝi tuj presi el la dua unu. Kaj tiam ni tuj rompos. Estas ĉiuj klaraj ke okazas? Granda. Bone. Do jen ni havas vojon de dirante, se ni ne volis al malmola kodo in-- min kiel la programisto. Mi ne volis vere fizike meti en ĉiu individua elemento de tiu tabelo. Se mi volis anstataŭe havi la uzanto enigo valoroj, kio estas la plej bona maniero por fari tion? Nu, cxi tie mi kreis tiu bela funkcio, en kiuj mi povas deklari tabelo. Do int scores-- ni nur ke ni volas fari tabelo kiu tenis la kvalifikojn de ĉiuj 18 de la lernantoj tie en tiu sekcio. Mi pensas ke ni devas iom pli ol 18 infanoj hodiaŭ. Sed ekzemple, kalkaj, ni simple supozu ni havis 18. Mi kreus tabelo nomo partituroj kun tipo int, ĉar partituroj, kompreneble, estas nombroj. Kaj mi tuj havi 18 en kvadrataj krampoj, ĉar tio estas kiom da studentoj mi volas povi stoki partituroj de. Kaj la vojon mi popoli la tabelo estas ke mi preferus kuri ĝin tra por ciklo, de Kompreneble, kun 0 estante mia 0th indekso. Kaj tiam kun 18 estante mia haltante eldono, ĉar estas 18 elementoj en la tabelo. Kaj poste mi iros fari printf, Enter Partituro por student-- Yada Yada Yada. Povas iun ajn diras min kial ĉi tie mi estas presi i plus 1 kaj ne mi? Estas ia truko demando, ne vere. Ĝi faras ne vere fizike influi la kuradon de la kodo. Yeah. Spektantaro: [inaudible] 0? ANDI PENG: Jes, ĝuste. Estas iom mallerta diri, hej, vi estas la 0th studento en tiu klaso. Estas iom stranga. Do ni, kiel homoj, ne vere ŝatas pensi de kiel komputiloj pensas. Do kvankam en la komputilo, ĝi estas stoki valoroj en la 0-a indekso, kiam ni estas homoj, ni ne vere plaĉas al referi al ni mem kiel nulo. Do kiam mi nur presi ke, Mi tuj presi kaj aldonu 1 ĵus por la konsidero de klareco. Do kiam mi presi, mi tuj esti kapabla presi studentoj 1 tra 18. Ĝi ne vere efiki la kurado de la kodo iamaniere, la vojo mi presi. Sed esti zorgema kiam vi estas fakte alirante la tabelo. Kiam vi vidas la partituroj i, rimarki tie Mi reale aliranta la 0th indekso kaj Ne la 1 plus 0-- aŭ 1 plus 1, tiukaze, indekso tiel ke fakte klara. Ĉu ĉiu speco de OK sur kiamaniere tiu kuras tra kaj kun cxiu indekso mi metante valoron en la tabelo kaj krei tabelon kun 18 numeroj ke la uzanto tuj enigo? BONE. Malvarmeta. BONE. Ni nun movas en ion tio estas bela adekvataj por tiu peco metis tiel. Mi scias en prelego, David-- bedaŭras, vi havis demandon? Spektantaro: Ĉu vi povas plivastigi ĝin? ANDI PENG: Jes, do mi provis. Sed mi ne scias. Ial, tiu versio de PowerPoint estas vere ne laboranta fartas la ekrano. Do ni simple tuj teni ĝin tiel. Ĉiuj ĉi tiuj estos alŝutita rete. Pardonu, knaboj. Yeah. BONE. Do ni povas ankaŭ havi kordoj. Do se vi infanoj reale notice-- mi scias Rob transiris ĉi en tiu prelego ke li did-- kordo estas fakte nur tabelo de signoj, se vi pensas pri ĝi, ĉu ne? Kordo estas nomo aŭ frazo aŭ vorto, ĉu ne? Se mi estus krei ĉenon nomis Andi-- nur mia nomo, A-N-D-Mi. Vi elpensis tion kiel nur unu variablo. Sed fakte, ĝi estas rompita malsupren en nur tabelo de signoj. Do ĝi estas alvenis karakteron de stokita en tabelo valoro. Oni alvenis karakteron de n stokitaj en la dua indico kaj tiel plu kaj tiel antaŭen. Do tiel, ni efektive havas tian de strukturo metita en meti niajn kordoj. Do jen, se mi estus enigi la vorto "manĝi" - tiel kordoj vorto egalas akiri kordoj. Se mi estus enigi la vorton "manĝi", ke Fizike la vojon ke mia komputilo estas stoki ke kordoj en mia memoro. Kaj se mi volis kuri tra tiu kaj presaĵo ke fjordon tiel cxar en mi egalas nulo, memoru, en prelego, ni kovras iun kiu nomiĝas strlen, aŭ la longo de la kordo. Ĉar mi ne vere scii kiom granda la tabelo estas de kiom la uzanto inputting-- Ekzemple, mi inputted la vorto "manĝi", kaj mi konas jen tri signojn longa, ĉu ne? Do mi povis meti en tri tie kaj ĉio estos bone. Sed se via uzanto enigo ion tio estas alia nombro de valoroj, vi tuj ne povos vere scias ke kiam vi plani vian kodon. Do la maniero ke ni manipuli testo kazoj kiel tio estas ke ni havas ion nomita strlen, kiu estas nur funkcio kiu rakontas al vi kiom longe kordo estas. Do strlen de vorto. Mia vorto estas manĝi. n egalas strlen de vorto. Ĉu iu povas diri al mi kion tio valoro fakte estas ĝuste tie? Kion n reprezentanta dekstra nun, en ĉi tiu ekzemplo, se mi devis manĝi? Publiko: 3. ANDI PENG: 3, precize. Do ni havas por int i egalas nulo, n egalas 3, esence. Kaj mi tuj kuras ĝis ĝi estas malpli ol 3i ++. Kaj ĝi tuj esence iri tra kaj fari la saman aferon. Ĝi tuj presi ĉiu valoro kaj donu vin E-Al-T. Ĝi simple denota malsama maniero skribi ĝin. Tio tuj estos tre helpema. Yeah. Publiko: Kio estas la utiloj de metanta la n egalas strlen vorto ene ol por buklo [inaudible]? ANDI PENG: Yeah. Do se mi estus to-- diri, ekzemple, se mi estus fari tion kaj tiam do-- oop-- ke, en mia kodo, ĝi estus reale esti farante kiel la sama afero. Tamen, la maniero ke Davido klarigis ĝi dum prelego, se iu el vi infanoj memoras, estis ke, kiel homoj, kiel programistoj, ni vere provas plani nian kodo por ke nia komputilo havas labori kiel minimuma ebla, tiel ke nia kodo estas tre efika. Do se mi havis ke, kio okazus tra mia por buklo estas ke mi unua deklari variablo nomata mi tuj esti 0. Mi intencas kontroli, ho, kia la strlen de vorto? Ho, la strlen estas 3. Do estas mi malpli ol tri? Jes. Mi tuj kuros. Kaj poste duafoje reen ĉirkaŭ la buklo, mi tuj pliigo i. Mi tuj estos unu. Kaj mi tuj kontroli, ho, sed kio estas la strlen de vorto? Ho, estas tri. Kaj faras ke ŝajnas iom malŝparema, ĉiufoje kiam vi kuros tra la buklo, esti kontrolanta la funkcio, kvankam la strlen de vorto neniam reale ŝanĝas? Do estas ekstra potenco por komputilo. Kiam vi komencas paroli pri aferoj ke estas miliardoj kaj miliardoj kaj bilionoj de lokoj longaj, imagi vian komputilon devi fizike iri tra kaj kontroli ĉiujn ke ĉiu unuopa tempo. Tial, por fari nur pro efikeco, ni emas nur fari tion, ĉar tiu vojo ni estas nur vokanta la funkcio unufoje en la komenco, kaj kiu ĉiufoje ĝi iras tra ĝi tuj stoki la valoron 3 tie, ke vi ne devas senĉese kontroli ĉiufoje. Yeah. Publiko: Pardonu. Ĝuste [inaudible]. Povis vi int n egalas strlen kaj metis ke super la ekstero de la por buklo tiel? ANDI PENG: Yeah. Vi povus fari tion, absolute. La kialo ŝin havas en tie estas se la vojo por buklo verkoj estas ke ĝi nomiĝas loka variablo en la senco ke io vi estas krei ene de la por buklo nur ekzistas ene de la por buklo. Do la variablo i nur ekzistas en tiuj krampoj. Kaj tie la variabloj de n ankaŭ nur ekzistas en tiuj krampoj. Do se vi estus uzi strlen de vorto multoblaj tempoj malsupre, absolute la plej bona maniero fari tion estus deklari ĝin la pinto tial vi ne devas fari ĝin unufoje. Yeah. Publiko: Kial vi havas nova linio post la procento vidante se vi volas meti la tutan la literoj apud gxi apartigu? ANDI PENG: Oh, mi volis presi cxiujn sur ĉiu linio. Ne gravas. Jes, ĝi estas strukturado. Tio estas bona demando, kvankam. Jes, se mi volis printi ĉion sur nur unu linio, Mi ne havus la haltostreko je. BONE. Ĉiu bona? BONE. Malvarmeta. Do mi kredas ke mi parolis sufiĉe. Vi uloj vico kuri tra la kodo kaj diras min kio estas malbone tie. Kie estas la cimo? Do kiel vi povas vidi, mi deklaris al nova tabelo de tipo string nomita klaso. Kaj mi inputted Sam, Jess, kaj Kim en ĝin. Kaj mi provis presi ĉiuj elementoj de la tabelo. Ĉu iu povas diri al mi kial ĉi tuj donu al mi problemojn? Mi donos al vi infanoj 10 sekundojn por pripensi tion. BONE. Yeah? Spektantaro: Ĉu la maldekstra centro egala al 3 aŭ [inaudible]? ANDI PENG: Dekstra. Do kiom da fojoj estas ĉi reale tuj kuri tra ĉi buklo? Publiko: Kvar. ANDI PENG: Ekzakte. Ĝi tuj tra kvar fojojn. Ĝi tuj kuri tra je 0, 1, 2, kaj 3, ĉar ilia elemento estas i estas malpli ol aŭ egala al 3. Oni ne tuj halti kiam ĝi estas 2. Ĝi tuj konservi irante ĝis kolizias 3. Kaj kiel ni scias, ekzistas nur tri elementoj en nia fakta tabelo. Se ni provas aliri la kvara elemento aŭ la indekso de 3, vi tuj trafis ie en memoro kiu ne ekzistas. Ĝi nomiĝas la nula Terminator. Nenio okazas al esti tie. Via komputilo ne tuj esti tre feliĉa kun vi. Yeah. Ĉu iu havas demandojn sur kial tio okazis? Tio estas komuna spaco por eviti. Yeah. Spektantaro: Ĉu ne la unua gliti ankaŭ havas ĉenon de 2? ANDI PENG: No. Do esence, kiam vi faras tabelon, ke krampo dekstra tie, ke number-- ĉiuj ĝi estas diranta vin estas kiel multaj elementoj mi havas. Ĝi ne vere rakontanta mi la indeksoj de io. Do en ĉi tiu kazo, mi scias ke mi volas skribi kun tri lokoj, kun tri fizikaj lokoj teni kion ajn mi volas teni. Do jen kial la numero tri estas tie. Tamen, se mi volus reale konsenti li, se mi volis diri, printf klaso krampo nombro, tiam vi tuj efektive metis la fizika indekso tie. Jes, bona demando. Publiko: Tia estas la fizikaj indekso laŭsupoze [inaudible]? ANDI PENG: Mi bedaŭras. Ĉu vi povas paroli supre iom? Publiko: Tia estas la fizika indekso [Inaudible] ĉiu de la skatoloj? [Inaudible]? ANDI PENG: Yeah. Do mi tuj reiru dekstren tie. Pensu ĉi tie. Ni havas tabelo de amplekso 3. Ekzistas tri lokoj, kiel, fizika anstataŭaĵojn tien. Sed ili estas nomita 0, 1, kaj 2. Do, se mi volis konsenti ili, mian vojon aliri ilin estas printf el kion mi volis tien. Vi devus presi el gxi la nomon, ĉar tiam la komputilo scias, ho, mi devas rigardi en tiu tabelo por la 0th indekso. Yeah. Sed la grandeco de ĝi ne ŝanĝas. La grandeco estas 3, sendistinge de kiel vi etikedas ilin. BONE. Ĉiu bona? Publiko: Do ​​ĉiufoje mi [inaudible]? ANDI PENG: OK. Do en ĉi tiu kazo, ni ne vere enir ĝin ĝuste nun en la kurso. Sed scias ke ĉenon kiel mi diris antaŭe, ŝnuro estas esence tabelo de signoj. Do se mi kreas tabelo de kordoj, mi specon de havas tabelo de tabelo de karakteroj, dekstra? Do ĉi-kaze, ĉar mi havas tabelo de kordoj, se vi estus al enigo vere longa vorto, kiu ankoraŭ okupas nur unu spaco, ĉar tio estas la unu kordo. Sed se vi estus pensi la karakteroj de tiu tabelo, tiam tio estas prenante supren multe pli karakteroj ol iu el la aliaj vortoj estas. Ne vere gravaj por ĝusta nun. Sed tio estas nur ĝenerale kiel ĝi estas laboranta. BONE. Do tiu estas io mi ellasos vin fari multe super la kurson de la semestro. Mi bezonas ripozi mian voĉon. Vi uloj bezonas stimuli vin. Multa vi probable devas dormi nun. Mi inputting hazarda problemoj kie ni kiel klaso aŭ vi kun partnero apud vi iras elspezi kelkajn minutojn diskutanta sur kiel ni devus iri pri solvado aŭ kreante programo kiel ĉi. Do nun, ni volas krei program-- Ni tuj nomas ĝin upper.c-- ke konvertitoj minusklan vorton al supra-klaso ĉenon majuskle, pardonon. Vorto en kordoj, pardonon, estas sinonima. Mi tuj ŝanĝi ilin signifi la saman aferon. Yeah. Prenu kelkajn minutojn. Ĝi ne devas esti skribita en ajna lingvo. Ĝuste en _pseudocode_ kodo aŭ logike kiom ni volus eĉ iri pri faranta tian problemon. Yeah. [SIDE konversacio] Mi ankaŭ rimarkis ke vi uloj can-- Mi specon de vidi jam la programon. Mi supozas mia manko de anoncisto moduso estas problemo. Sed estas okej. [SIDE konversacio] Jes, bonvolu, knaboj. Venu akiri dolĉaĵoj. Venu akiri dolĉaĵoj. Publiko: Jes! [SIDE konversacio] ANDI PENG: Ankaŭ, jes, Mi komencos ĵetante bombono ĉe personoj kiuj ne respondas demandojn. Do vi devos respondi demandojn. Aŭ mi supozas personoj kiuj ĉu respondi demandojn. Yeah, revés. [SIDE konversacio] Spektantaro: [inaudible] ANDI PENG: Yeah. Yeah. [SIDE konversacio] Bone, knaboj. Prenu, kiel, ankoraŭ 10 sekundoj. [SIDE konversacio] OK, knaboj. Do antaŭ ol ni komencas provas fakte fizike skribi kodon, bona kutimo disvolvi estas ke ni volas unua speco de kialo eksteren logike kiel ni farus ĝin. Vi volas certigi, antaŭ vi fizike komenci provas kodigi en Mario, ke vi faru certe ke vi havas viajn _pseudocode_. Kiu prenas vin tra kion vi devas krei tiel ke, kiam vi fizike skribi vian programon poste, vi povas pli bone kapti eraroj en via kodo kaj aĵoj tiel. Do ni tuj simple komenci by-- en la angla, en _pseudocode_, ĉu iu volas doni mi genérico klarigo de kiel ni devus iri pri faranta tion? Yeah. Spektantaro: [inaudible]. ANDI PENG: Certe, sen ĉagrenoj. Publiko: Cxu vi povas demandi al aŭ demandi iu akiri string 1-- yeah, kordoj, kaj tiam-- ANDI PENG: Jes, do ĉi tiu estas bona komenco. Mi ektajpu, pardonon, kiel vi parolas. So-- Publiko: --La minuskla nombroj estas pli altaj, ĉu ne? Aŭ la minuskla literoj havas altan nombron? ANDI PENG: Ekzakte. Publiko: Do ​​tiam ni subtrahi 32 el ajn [inaudible]. ANDI PENG: Granda. Do ni ia havi ĝeneralan senson de kiel labori pri tiu problemo. Sciante ke ni ia lernis la fizika formo ke kordoj estas stokitaj en memoro, kion vi jam scias ke vi tuj probable devas skribi en via kodo por movi tra la kordo? Publiko: Por buklo. ANDI PENG: A por buklo, ekzakte. Granda. Do ni ia havas normalan _pseudocode_ skribita malsupren tian donas vi rimarkas sur kiel vi movus pri solvi la problemon. Nun ke vi havas ĉi, vi povas referenci ĝin por posta sur kiam vi provas fakte skribi vian kodon. Do ni povas reale iros tien. Kaj mi havas funkcion nomita upper.c-- tie is-- de nur malplenan ŝablonon nun ke vi uloj estas irantaj helpi min diveni pri kiel skribi tiu linio de code-- ne linion de kodo. Estos multoblajn liniojn de kodo. Kiam startanta omnaspeca de malplenan pset, kio estas la unua afero Mi bezonas memori fari? Spektantaro: [inaudible]. ANDI PENG: Granda Yep. Inkluzivi. stdio.h. Ofte ĉi tiu estas unu el la plej facila erarojn personoj faros kiam ili estas skribado, estas ke ili devos forgesu inkluzivi grava biblioteko ili bezonas. Do se ĝi estas oficejo horoj kaj vi estas kiel, Mi ne scias kial mia kodo ne funkcias. Ĉu vi povas diri al mi kial ĝi ne funkcias? Ni tuj diru vi include? Vi devus include ĝin. BONE. Do ni hvas la normo / S tie. Ĉu tio estas la sola biblioteko ni tuj bezonas ĉi tie? Kion alian ni tuj faros? Pardonon. Iu ĵus krii gxin? Spektantaro: [inaudible]. ANDI PENG: Tie vi iru. BONE. Kaj kiel mi iros pri startanta omnaspeca de funkcio, omnaspeca ĉefa funkcio ene de nia programo? Int main. BONE. Kion mi meti ene tie? Kio estas la unua afero kiun vi volas fari? Se ni volas ricevi kordoj de la uzanto, kion ni tuj havos fari en tiu unua linio? Pardonu, vi uloj nur sentas libera paroli supren kaj laŭte. Nur krii ajn. Publiko: Demandu la uzanto? ANDI PENG: Kiel ni faros tion? Ask-- mi tuj tajpi "demandu la uzanton"? Publiko: printf. ANDI PENG: OK. Printf. Kion mi volas printf? Publiko: Tajpu ion. ANDI PENG: Kiel tio? Knaboj, ŝajnigi kiel mi estas komputilo. Fizike diru ĉiupaŝe ke mi bezonas tajpi tie ĉi? Mi faras ion malĝustan? Ĉu mi tajpis ion? Spektantaro: Vi devas citaĵoj. ANDI PENG: Mi bezonas citaĵoj? BONE. BONE. Publiko: Kaj tiam nova linio. Punktokomo. ANDI PENG: punktokomo? BONE. Bona. Publiko: Kaj eble specifi ke vi volas ĝin en minuskla? ANDI PENG: Granda. Vi uloj ridi min forgesante meti punktokomo. Mi garantias vin ie en la paso de ĉi tiu klaso, vi forgesos meti punktokomo, kaj ĝi prenos vin tri horoj kalkuli kial via kodo ne funkcias. Ĝi okazis al ni ĉiuj. Ĝi verŝajne okazos al vi. Get en bona kutimon uzi punktokomojn. BONE. Spektantaro: Ĉu vi volas fari la backslash en? ANDI PENG: Sure. Ĉu vi deziras fari la backslash en? Publiko: Jes. ANDI PENG: Granda. BONE. Kion mi faru? Publiko: Get kordo. ANDI PENG: Get kordo. Do kion mi tajpas? Iu? Publiko: String s. ANDI PENG: String s. Publiko: GetString. ANDI PENG: Iu, vi povas diri min kie tiu funkcio GetString estas venanta de? Publiko: string.h. ANDI PENG: string.h? Vi kredas ke estas de string.h? Spektantaro: [inaudible]. ANDI PENG: Tie vi iru. Ĝi estas de cs50.h. Se vi ĉiam konfuzita sur kie biblioteko dosiero aŭ kaplinio dosiero, Google laŭvorte string.h, kaj mi rakontos al vi kio estas ĉiuj funkcioj kiuj estas en string.h. BONE. Do nun ke mi kreis kordo kaj mi havas instigas la uzanton por ĝi, Mi jam stokitaj ĝin en variablon nomita s, kion mi devas fari nun? Publiko: Kontroli se ĝi estas en minuskla. ANDI PENG: Pardonu? Publiko: Kontroli se ĝi estas en minuskla. ANDI PENG: Bone, ni faru tion. Kiel mi faru tion? Fakte, por la celoj de la klaso nun, ni nur tuj supozas ke ĉiu ke ni enigo estas jam en minuskla. Se vi volas kontroli, vi farus simple aldonu kondiĉa deklaro ke plejda, kiu kuris tra ĉiu ununura tabelo elemento kaj kontrolis se ĝi estas inter certaj valoroj. Mi forgesos, kion la nombro de valoroj de minuskla estas. Vi povas rigardi ĝin supre sur la ASCII tablo. Sed jes, tio estas vere bona punkto. Sed nun, ni nur tuj supozi ke ĉiuj kordoj ni enigo estas en minuskla. BONE. Do kiel mi iros pri tiun problemon poste? Publiko: Por buklo. ANDI PENG: Por buklo? BONE. Diru al mi kion tajpi. Publiko: Por int i egalas 0. ANDI PENG: OK. Publiko: Ho, vere, tiam vi fari komo kaj do n egalas strlen. ANDI PENG: Tiel grava afero ke mi opinias ke ŝi rimarkis tie estas ke ni ne devas diri int n duafoje ni faris. Nur scias ke en por buklo kiam vi deklarante, vi fakte ne bezonas la int de duafoje vi fari variablo. Vi povas diri n strlen. Publiko: De s. ANDI PENG: s. BONE. Publiko: Tiam punktokomo. ANDI PENG: Sure. Publiko: Kaj poste [inaudible] n. Tiam i ++. ANDI PENG: Granda. Bone. Kion ni volas ene de tiu por buklo nun? Memoru, se ni tuj kuri tra kordo kaj kuri tra tabelo, ni volas kontroli aferojn en ĝi. Kion ni bezonas? Tiu estas speco de la malfacila parto nun. Ĉiu havas konjekton? BONE. Do unue, kial ni ecx aliri? Kiel ni eĉ unua ĉeko aŭ aliri elementon en la tabelo? Kiel ni faru tion? Kio estas la skribmaniero ni uzu por fari tion? Kio estas la nomo de tiu tabelo nomas? Ĝi nomiĝas S, ĉu ne? Memoru, ajna ŝnuro estas ĉiam tabelo. Do s krampo i, dekstra? Ĉar tiu estas la nuna valoro aŭ indeksa valoro ni kontrolanta. Kaj ni tuj metis ke egalaj to-- ni volas minusklan valoron, ĉu ne? Ni volas igi tiun lower-- Mizera, ni volas majuskla. Ni volas turni la minuskla valoron en majuskle. Kaj tiel like-- Mi bedaŭras, Kio estas via nomo? Publiko: Heidi. ANDI PENG: Pardonu? Publiko: Heidi. ANDI PENG: Heidi. Kiel Heidi diris komence, ni probable tuj bezonas the-- ni estas probable tuj devos subtrahi 32 el ajn charc ke estas, ĉu ne? Ĉar sur ASCII tablo, la diferenco inter minusklan literon kaj majuskla litero estas 32. Do kiam ni faras tion, ni probable tuj volas subtrahi 32, dekstra? Do ni tuj faros s i. Ĉu ĉiuj komprenis kial mi faris tion? Ĉar nun, en nia tabelo, ni kontrolanta la 0th indekso, dekstra? Kaj en la 0th indekso de la kordo, tio estas la unua karaktero. Kaj ke karaktero ni iras supozi ĝi estas minuskla. Se ni volas fari ĝin majuskle, ni devas subtrahi 32 el ĝia valoro, ĉar en nia ASCII tablo, tiel estas kiel ni atingos gxin al la sekva responda valoro kiu faras majuskle. Ĉu ĉiuj komprenas tion? Yeah. Publiko: povus vi ankaŭ ĉu minuskla a minus-- ANDI PENG: Yeah, tiel ke estas vere vere bonan. Mi tuj revenos al tiu demando post ni faru tion. Yeah. Kaj poste se mi volas vidi kio okazas, Mi verŝajne iranta volas presi, dekstra? Iu diru al mi kion Mi volas presi tie. Publiko: printf procento c backslash [inaudible]. Tio estas la valoro de [inaudible] s i. ANDI PENG: s i, pardonon? Spektantaro: [inaudible]. ANDI PENG: Mi ne scias. Kion vi pensas? Publiko: Nu, mi wouldn't-- Mi supozas mi ne bring-- Mi prenus ĝin el la ene, ĉar [inaudible]. ANDI PENG: Ho, vi estus farinta tion? Publiko: Yeah. ANDI PENG: Ni lasi la vojon ĝi estas, kaj mi klarigos kial poste. Memoru, eĉ kiam vi havi lokon posedanto, vi volas meti krampojn ĉirkaŭ ĝi. Bone. Do tiu devus esti solida funkcion tie. Ni ruli ĝin kaj vidi se ĝi kompilas. Faru supra. Uh-oh. Tio ne aspektas tro bonaj. Kial tio okazas? Kiel kun ajna eraro, vi volas iri reen kaj komenci kun la unua, ĉar tipe unu eraro kaŭzas multaj aliaj eraroj post tio. Tie ni vidas upper.c: 18: 25, kiu rakontas mi en tiu programo nomita upper.c, sur linio 18, eraro implice deklari biblioteko de funkcioj strlen kun tipo unassigned-- bla, mi ne scias kio okazas post tio. Ĉiuj ĝi diras al mi ĝuste nun estas ke io daŭriĝas la strlen. Kaj la komputilo estas konfuzita, ĉar Estas kiel, mi ne scias kion strlen estas? Kio faras ke probable diri al vi ke vi mankas? Spektantaro: Vi mankis [inaudible]. ANDI PENG: Vi pravas. Ekzakte. Do tiu estas kie ĝi estas grava por certigi ke ĉiu funkcio vi uzas en via kodo havas la korektan kaplinio peti la biblioteko, aŭ alie vi tuj akiri multan eraroj kaj via kodo ne tuj scii kio okazas. Do ni tuj inkluzivi string.h tie. Kiam ni provas kompili supra. Kompili korekte. Ni kuros ĉi programo. Do tajpi ion en minuskla. Kion vi uloj volas tajpi? Krii ion. Bone, Charly ĵus eniris. Ni tajpas Charly nomo. Charly en minuskla. Kaj espereble, espereble, tiu estas tuj krii kaj kraĉi Charly en majuskle. Yay! Ĉu ĉiuj komprenas kiel Mi rondiris solvi tio? La vojo ke mi povas manipuli uzante entjeroj solvi iu kiu Mi volas fari en kordoj, ĉar karakteroj kaj entjeroj povas esti referencataj en la sama maniero ĉar de ASCII mapado. Do reiru al via punkto, se mi volis meti tien anstataŭ 32 majusklajn A minus minuskla a samkiel ke, kiu laborus egale tiel, ĉar tio estas simple nur la diferenco inter tiuj du valoroj. Se mi volas fari tiun again-- Charly. Ho ne. Mi kredas ke ni iris la malĝustan vojon, Yeah? Spektantaro: [inaudible] minuskla a. ANDI PENG: Tie vi iru. Yep. Kaj el kraĉas Charly. Do zorgu kiam vi subtrahadon valoroj memori kiu unu estas pli granda ol la aliaj. Ekzemple, ĝis tie mi forgesis ke minuskla a estas reale granda ol majusklajn A. Do kiam mi provis subtrahi ilin inverse ĉirkaŭ, mi ricevis negativajn 32. Kaj mia komputilo estis kiel, Mi ne scias kion tio estas. Estas probablo nur iuj hazardaj valoro kiu ne estas tre bona. Kaj tiel certigi ke vi estas restante en la ĝusta longo trovi la karakteron vi volas. BONE. Estas iu konfuzita sur kiel ni rondiris skribas tiun funkcion? BONE. Do efektive, funkcio jam ekzistas en la biblioteko nomita ctype.h. La biblioteko nomita ctype.h. Tiu funkcio fakte estas jam skribita por vi. Ĝi nomiĝas al supra. Kaj tial por celoj de ĉi pset, vi tuj trovi ke vi vere volas uzi multa la funkcioj enhavitaj ene la ctype biblioteko. Al supra, malaltigi, estas supra, estas lower-- tiuj estas ĉiuj funkcioj ke vi povos uzi tre, tre rapide en via propra kodo ke faras precize kion tiu faras. Ni skribis eksteren kiel konverti ŝnureto al majuskloj. Sed tio estas vere la kodo ke iu alia skribis kaj ke vi povas aliri tra malsama funkcio. Yeah? Publiko: Do ​​vi simple kopiu -a tien kaj fari ĝin por ĉiu unuopa litero? ANDI PENG: Jes, ĉar mi ne zorgi pri la valoroj de a. Mi nur zorgas ke la diferenco inter ili estas 32, ĉu ne? La diferenco inter minuskla b kaj majusklajn B estas ankaŭ 32. Kaj la diferenco inter c kaj majusklajn C estas ĉiam 32. Mi nur devas zorgi pri la diferenco inter la du, ĉar ĉiuj literoj sekvas la saman skemon, ĉu ne? Se mi havas la diferenco inter unu el ili, Mi scias kion la diferenco inter ĉiuj ili estas. Bona demando. Yeah. Ĉiu bona? BONE. OOP. BONE. Do alia koncepto tio tuj estos tre utila kiel vi daŭrigi evoluigi via kodo estas jena ideo krei funkcioj aŭ abstraktaĵo. Do nun, ni ĉiuj prenitaj algebro. En algebro, vi instruis ke estas tiu mirindaĵo nomita funkcio maŝino, kie se vi enigo unu speco de nombro, ĝi kuras tra ĉi tiu mirinda funkcio kaj ekstere krevas malsama eligo, dekstra? En kodo, la sama afero okazas en ajna speco de funkcio. Do mi povis fizike skribi en mia korpo de mia kodo ĉefa aserto ke fakte faras ajn la korpon de la kodo faras. Sed ekstere de tiu, mi povas ankaŭ skribi multajn malsamajn funkciojn kiuj faras multajn malsamajn aferojn. Ekzemple, ni jam komencis uzi kelkajn. Printf-- ke estas funkcio kiu iu alia jam skribis ke Ni povas nomi en nia kodo. Al upper-- tiukaze upper-- estas alia funkcio ni skribis ke ni povas nomi en nia kodo. Kaj tial mi supozas kial Ni eĉ havas funkciojn? Kial ni ne simple Plop ĝi ĉiuj en la sama linio de kodo? Ĝi faras ĝin facila por ĉiuj. Nu, la rezonado malantaŭ tiu Estas, antaŭ ĉiu, organizo. Ĝi estas vere ĝena iranta tra ies kodo kaj unu funkcio kiel printf. Se vi infanoj vere sciis kio la funkcio printf kunportis skribi, ĝi estas, kiel, 1,000 linioj de kodo. Se ĉiufoje mi volis al printf ion, Mi devis skribi 1,000 linioj de kodo, ke estus vere ĝena por legi, dekstra? Tial ni ĵus kreis ĉi abstrakta funkcio ke ni havas jam iu alia skribis aliloke. Kaj ĉiufoje ni bezonas uzi ĝin nian kodon, ni nur devas diri printf. Kaj kiu povas uzi la funkcion iu alia skribis en nia kodo. Ĝi faciligante organize legi kodon. Due, ĝi estas simpligo. Ĝi simpligas la paŝojn ni havas preni por solvi nian problemon. Printf, funkcioj kiel printf, funkcioj kiel upper estas cxio kiuj nin permesas simpligi niajn kodo malsupren tiel ĝi estas facila. Kaj lasta aĵo estas reutilización. Do la fakto ke ni havas funkcio nomita printf ke ni povas nomi multajn malsamajn tempoj kaj permesas ĝin esti reuzebla. Se mi skribus printf, Mi nur skribis ĝin unufoje. Ĝi ekzistas nur en tiu loko. Se mi volis fari ĝin denove, mi farus devas kopii kaj almeti ĉiujn ke en mian duan linion de kodo. Tial se ni kreas funkcio kiu ekzistas ekster nia ĉefa, ni povas simple vokas ĝi kaj reuzi ĝin kiam ajn ni bezonas por ke ĝi estas multe pli facila por ni kiel programoj por skribi. Do la maniero ke ni estus reale skribi funkcio estas tre similaj, ĉu ne? Tiu estas speco de la unua petskribo en kiu ni vidi funkcio alpreni stilon malsama ol niaj int main malplenon. En tiu kazo, se mi volus skribi funkcion nomita q, dekstra? Kaj la int valoro tie Estas ĉiuj diras al mi, Kion mi volas tiun funkcii reveni al mi? Se mi volas kubo entjero, Mi tuj volas enigo. Tio estas la parametroj. Mi tuj enigas valoron de tipo int. Kaj mi tuj revenos alia tipo valoro de int. Kaj en ĉi tie, kiel vi povas vidi, ĉiuj mi faras estas cubing ajn mia enigo estas kiel mia eligo kaj revenante ĝin. Do ĉiuj ĉi funkcio faras estas prenas ian entjero. Ĝi obligas ĝin per sin dufoje tiel ke ĝi kuboj en efekto. Kaj tiam ĝi redonas kion ajn tio eligo estas. Do en ĉi tiu kazo, ĝi estas du linioj de kodo kiun ni devis verki kromajn. Sed se ni volis nomi sur tiu multoblaj tempoj, ĝi estas multe pli facila por ke oni linion ĝuste ĉi tie ke estas en kubo ol devas iri tra multoblaj tempoj. Do la vojo kiu esence ajnan formatado por ajna speco de funkcio tuj ekzistos similas tie. Do ni havas la funkcion nomo. En tiu kazo, ĝi nomiĝas kubo. Kaj ni nomas ĝin kubo ĉar estas facile memori. Vi povas nomi ĝin kvadrata kaj ĝi povas reale esti Cubed. Ne gravas. Nur nomo ke vi estas asignanta vian funkcion. Ĉi tie, int, estas la tipo de la parametro necesas. Do kio faras ĉi tiu funkcio bezonas por funkcii? Nu, ĝi bezonas enigaĵoj. Mi nomis ŝin enigo. Vi povas nomi ĝin kion ajn vi volas. Sed mi bezonos iom da tipo int. Ĝi tuj reale ekzekuti kiom estas ene de ĉi tie, la korpo de la funkcio. Kaj tiam la reveno tipo ĉi tie, ĉi int-- All ĝia rakontanta mi estas ke tiu funkcio estas tuj revenos al mi int. Do ĝi estas tuj prenos en int, kaj ĝi tuj donu vin al int. Ĉu ĉiuj komprenas kiel la formatado de tiu speco laboras? Malvarmeta. BONE. Do ne estu maltrankvila se tio ŝajnas iom abstrakta rajto nun. Tiu estas iu kiu ni parolos pri. Ni plonĝi en profundan poste en la kurso. La vojo ke ia ajn alta nivelo abstraktado de tio laboro estas ke, en memoro, en via komputilo, ĉiu estas stokita en tiu tipo de stako, mi diru. Do tie supre ĉe la supro. Mi ne scias ĉu vi uloj povas vidi ke bone. Mi provos zomi. Ĉi tie ĉe la supro, ni havi la fizika teksto de kio la komputilo estas interpreting-- ĉiuj nuloj kaj ke ekzistas en nia komputilo. Kaj tiam ni la pravalorizitaj datumoj kaj uninitialized datumoj, kion ni nomas tutmonda variablo. Do variabloj kiuj ekzistas trans ĉiuj programoj kaj tra via tuta, esence, kodo. Neniu ĉagrenoj se vi uloj estas ia neklara sur tiu. Ĝi ne vere gravas nun. Kaj tiam ni havas kio estas nomata amaso en stako. Pensu pri pilo laŭvorte kiel nur kiel stako de aferoj, stako de malsamaj aferojn puŝata sur supro de ĉiu alia ke stoki la diversaj variabloj kaj sintakso en via kodo. Kaj tiam ĉi tie ĉe la malsupro, ni havas la mediovariabloj kion vi ekzekuti ene nur via malgranda linio de kodo. Kaj ni ĵus tuj zomi en la fakta stako parto. Do ĉi tie, se ni devis zomi en sur ĝuste tiu areo de la pilo, tiu estas kio similas. Kaj jen estas vere bela grava kiam vi infanoj paroli pri funkcioj, ĉar rimarki ke la memoro de via komputilo estas stoki la variabloj kaj la funkcioj kaj la parametroj de ambaŭ via funkcio kaj via ĉefa variabloj en malsamaj lokoj. Do nun, ĉefa estas la fakta funkcio ke vi ekzekuti en kodo. Vi liaj parametroj stokitaj tie kaj lia loka variabloj stokitaj tie. Loka variablo nur signifas ajna variablo ke ekzistas nur ene de tiu funkcio. Kaj supre de ĝi, vi havas tiun aparta funkcio nomita kubo. Vi havas jen parametroj tiel kiel tiuj lokuloj. Kaj la kialo vi povas vidi tie estas ke kio okazas kiam kubo prenas en valoro de via ĉefa funkcio estas ke efektive ĝi estas kopiado ke super. Do, se mi volis kubo 2 kaj reveni 8, ke 2 Efektive inputted kiel parametro kaj estas kopiitaj super tiel ke vi havos ŝin ekzistanta en du malsamaj lokoj en memoro. Kaj vi devas esti tre zorgema sur memorante kiun el tiuj vi fakte manipulanta. Kaj ekzemplo de kio okazis ke estus tre, tre malbona Ekzistas ĉi tie. Do ĉi tie, mi havas, en teorio, programo tie ĉi, ĉefa funkcio ke mi deklarante int x egalas 1. Mi deklarante alia int y egalas 2. Kaj poste mi kurante ĝin tra ĉi tiu funkcio nomita interŝanĝa, kie mi supozas ke ĝi estas interŝanĝi la du valoroj. Kaj tiam mi tuj presi ilin, ĉu ne? Tion mi volas tiun programon fari. Do ni malsupreniru kaj rigardu. Do, se mi vere skribos alian funkcio, kiel vi povas vidi, ni havos niajn ĉefa funkcio tie. Kaj tiam ni havas niajn dua funkcio tie. Void interŝanĝa. Void signifas nur ke ĝi estas Ne tuj revenos ion. La funkcio nomiĝas nomita interŝanĝa, kaj ĝi estas tuj konsumado du variabloj, int a kaj int b, de viaj [inaudible] funkcio. Do esence en tie, ni estas pasante x kaj y en tiu funkcio. Kaj se ni devis krei this-- tiel ni volas krei provizoran valoron, ĉu ne? Ni tuj asignos tiun al. Kaj tiam tuj nun egala b. Kaj b tuj revenos kie la temp valoro estis, kiu estas, ĉar kiam vi volas interŝanĝi aferojn, ne eblas simple ŝatas interŝanĝi ilin. Vi devi teni unu el tie por ke ĝi memoras kio tio estas, ĉar fojo vi interŝanĝi unu, vi forgesas kion tiu originala valoro estis, ĉu ne? Do teorie, ĉi programo devus labori, ĉu ne? Se mi volus interŝanĝi la du, oni devas interŝanĝi. Do ni ruli ĝin kaj vidos se ĝi funkcias. Do kiel vi uloj povas vidi, x Estis iam 1 kaj y iam 2. Kaj se mi presas ĝin, x estas ankoraŭ 1 kaj y estas 2. Hmm, tiu programo ne ŝajnas esti laboranta mian vojon volas labori. Ĉu iu volas preni pafon ĉe konjektanta kial tio okazis? Ĝi devas vidi kun la maniero ke malsamaj aferoj estas entenita en malsamaj lokoj en memoro. BONE. Do vi infanoj ne devas maltrankviligi tro multe pri ĉi tiu momento. Sed scias ke kubaj loka variabloj estis a kaj b, ĉar tie en nia funkcio, ni deklaras kaj b kiel la variabloj kiuj ekzistas ene kubo, tiu funkcio. Sed kiel vi povas vidi, ke la parametroj ĝi estas prenanta en estis estanta stokita tie. Sed ni estis ne reale reveninte nenion. Ni ne vere ŝanĝas x kaj y. Ni estis ĵus ŝanĝanta kaj b. Ni estis kopiinta x kaj y en iu nomita kaj b. Sed ni neniam reale manipulita x kaj y sin. Ĉu vi infanoj vidante ke okazas? Estas ke ni simple kopiis ĝin super, sed ni ne efektive tenis trako de kie ili estis en memoro. Kaj tial nun la komputilo serĉas, ho, mi havas kuri tion tra tiu bela funkcio. Sed x kaj y estas ankoraŭ x kaj y. Nenio okazis al ilin pro la fakto ke tiuj parametroj kaj lokaj variabloj estas stokitaj en malsamaj meti en memoron. Kaj tiu estas pli alta-nivelo koncepto ke ni komencas vidi pli poste en la kurso. Sed ĵus scias ke tiu estas problemo kiu povas okazi kaj ke ni elkompreni manieroj sur kiel trakti ĉi poste en la kurso. BONE. Bone. Do la lasta koncepto ni estas vere tuj kovros ke tuj estos utila por la pset tiu semajno estas kio nomas komandliniajn argumentojn. Do Rob en sia prelego trapasis ia brevemente sur kiel tiuj laboroj. Esence scias ke kiam vi skribas kiel ĉefa funkcio, kiam ni skribis funkcioj antaŭe en la pasinteco, ni havis int main malplenon. Kaj la kialo ni devis malplenon tie estis ĉar niaj programoj ne bezonas enigo valoroj kuri, ĉu ne? Kiam mi kuris Mario, mi ne bezonis por fakte simple entajpi ion kiam mi kuris Mario. Mi povus instigi la uzanton poste. Sed tio ne ĉiam la kazo. Ekzemple, en ĉi semajno problemo aroj, vi tuj demandos ke, Krom kurante via programo, vi tuj volas enigi iujn aferojn en rekta kiel vi kuri via programo. Do la vojo ni fari kion oni nomas komandlinio argumento, kiun estas kiel argumento vi povas enigo rekte kiel vi provas kuri vian programon. Do la skribmaniero por tio, ĝi estas sufiĉe kompleksa-rigardanta, sed ĝi estas vere ne ke malfacila. Do int main-- tio estas nur via ĉefa funkcio. En argc komo kordo argv krampoj. Do ĉio tio, kio diras estas ke ĉi int argc-- ĉiuj kiu estas diranta vin estas kiu tiuj estas la nombro de argumentoj la komputilo devus atendi. Do unu afero kiu vere Gravas sekvigi estas la fizika nomo de via programo rakontas kiel unu el tiuj argumentoj. Do, se mi volis havi mian programon kuri plus unu plian komandlinio argumento, mi reale tuj havas du. Argc efektive tuj estos du. Kaj tiam string argv bracket-- ĉiu kio faras, ĝi estas donanta min tabelo de kordoj tio tuj ĝuste montri kaj stoki kion ĉiuj tiuj komandlinio argumentoj estas. Do ekzemple, se mi volis havi tiun programo, ./copy infile outfile, dekstra? Tio estas nur tipa Linukso komando. Kio fakte estas argc? Kiom komandliniajn argumentojn estas tie efektive en tio? Ĉio ĉi faras estas fari kopion de an infile de la nomo de unu dosiero kaj ĝi kopias ĝin alia dosiero, dekstra? Tio estas ĉio ĉi faras. Kiel vi povas vidi, mi faras ĝin sur unu linio sen fakte bezoni la programon. Kio estas nia argc tiukaze? Kiom da argumentoj ni havas? Publiko: Tri? ANDI PENG: Ni havas tri, precize. Do estas tre intuicia imagu ke ĝi estas nur la infile kaj la outfile. Sed scias ke la fizika nomo de la programo vi uzas grafoj unu. Do en ĉi tiu kazo, argc estas fakte tri. Kiom proksimume, kio estas argv 0? Memoru, ĉiuj la komandliniajn argumentojn estis stokitaj en tabelo de kordoj. Do se mi provas aliri ĝin, kio estus argv krampo 0 donas min? Spektantaro: [inaudible]. ANDI PENG: Ekzakte. Ĝi donus min la skalara oblikvo kopion, ĉar tio estas la 0th elementon, la unua elemento de mia tabelo. Kio pri argv 1? Publiko: Infile. ANDI PENG: Infile, precize. Kio pri argv 2? Publiko: Outfile. ANDI PENG: Outfile. Tiu estas iom malfacila nun. Kion vi uloj pensas argv 3 tuj estos donante min se mi provis presi ke eksteren? Spektantaro: [inaudible]? ANDI PENG: Ĉu vi havas manon supren? Yeah. Publiko: Alternativo. ANDI PENG: Ekzakte. Do memoru en prelego ke ni havi fine de raso ion nomita nula Terminator? Ni enir ĉi ankaŭ pli tie en la klaso. Sed sciu, ke en notacio, la vojo via komputilo scias ke ĝi estas la fino de la tabelo estas ke metas ion nomatan nulan terminator aŭ haltostreko nulo. Do se vi provas atingi argv 3, vi tuj trafis ĉi haltostreko 0. Tio estas eĉ pli de truko demando. Kio pri argv 4? Do tiu estas pasinteco nula Terminator, preter la limojn de nia tabelo. Kion vi pensas tuj okazi kiam ni provas fari tion? Spektantaro: [inaudible]? ANDI PENG: Pardonu? Diru tion iom pli laŭta? Spektantaro: [inaudible]. ANDI PENG: Jes. Tio estas la nomo de la spaco vi plej verŝajne akiri. Sed scias ke argv 4-- kiu permesas aliro lokoj en via komputilo memoro kiun vi vere ne devus esti emotiva, ĉar nun vi scias, kio argv estas. Vi scias ke ĝi estas tabelo de amplekso 3 kiu havas skalara kopion, infile kaj outfile. Se vi provos iri tiel ege preter tio ke vi estas preter la nula Terminator, via komputilo havas probable stokitaj en argv ion 4. Kaj vi vere ne devus esti permesita aliro en argv 4, ĉar vi havas dosieron kabineto kaj vi estas nur permesis aliron al tiuj tri bretoj. Sed se vi provas atingi vojon preter la breto de kie vi estas permesata, vi tuj komencu rompado kun aliajn aferojn en via komputilo la memoro. Tio tuj estos vere, vere malbona. Do simple scias. Zorgu ke vi ne nur hazarde komenci alirante elementoj en tabelo ke ne estis en kion vi volis krei. Yep. BONE. Do ni tuj faros alian terminalo ekzemplo tie. BONE. Do Rob rapide en prelego la alia tago iris tra ĉi tiu ekzemplo, kie li havis int ĉefa int argc kordo argv krampoj, kiu diras al mi ke mi estas tuj havas komandlinio argumentoj. Li havas, se argc egalas egalas 2-- memoras, egalas egaluloj signifas komparon. Se ĝi egalas 2, tiam mi estas presigos saluton, nenial la unua elemento de la tabelo estas. Else presi, saluton mondo. Kio estas tiu iranta okazi esence? Ĉu iu simple ekspliki en Angla kion tiu programo faras? Yeah. Publiko: Se iu tajpita en komando kaj diris ilia unua kaj lasta nomo, ĝi ne simple printi la unua kaj diri, saluton, ajn via antaŭnomo estas. ANDI PENG: OK, ni kuros ĝin. Do ekzemple, se mi estus fari dosiero fari saluton to-- saluton to-- kion vi volas ke mi povu enmeti? Publiko: Unua kaj lasta nomo. ANDI PENG: Unua kaj familinomo? Spacetoj? Publiko: Yeah. ANDI PENG: Ĉu iu povas diri mi nun, kia estas argc? Uste tie? Oops, sorry. Lasu min reiri. Kiom komandliniajn argumentojn are-- vi uloj ne povas vere vidi. Sed mi provos zomi. Mi provas. Jes, tie estas tri, ĉu ne? Estas dot oblikvo saluton, ĝi estas Andi, kaj ĝi estas Peng. Do kio vi uloj pensas ĉi programo tuj estos presi el? Oh. Ho, pardonon. Malĝusta nomo. Ĝi estas presi el, saluton mondo. Ĉu iu volas klarigi kial tio okazas? Yeah? Spektantaro: [inaudible]. ANDI PENG: Ekzakte. Do jen, estas kondiĉa estas, se argc egalas egalas 2. Do nur en la kazo ke ekzistas du komandlinio argumentoj. Tiam mi tuj presi, saluton, kio ajn ĝi estas. Sed alie, mi tuj presi nur, saluton mondo. Do ĉu iu volas doni al mi ekzemplon de kiel mi povus reale akiri ĝin por presi la valoro de argv 1? Kion mi devas enigo tie? Nur unu afero, ĉu ne? Pro la skalara saluton al jam grafoj kiel la unua argumento. Mi nur havas unu pli. Do dot saluton se mi nur faru Andi. Saluton, Andi. Ĉu ĉiuj komprenos kial tio okazas? Yeah. Publiko: Do ​​la spaco inter la komando line-- estas [inaudible]? ANDI PENG: No. Do la spaco en komandlinio argumenton, x, diri via komputilo ke tiu estas la komenco de nova linio. Do string argv here-- ŝin tendencas ĉiujn viajn ordonojn argumentoj en kordoj. Kaj tial la spaco en la komandlinio argument-- ĉiuj kiu faras estas diri al vi, tiu estas je la fino de unu ŝnuro Kaj ĝi estas tempo pluiri al alia. Yeah. Tiu estas sufiĉe grava por vian pset, ĉar vi estas tuj esti provante tiuj. Do ĉu iu havas demandojn sur tio? Bone, mojose. Yeah? Publiko: Do ​​la kialo vi volus metis entjera argumento Calc anstataŭe de [inaudible] estus kiam vi volas tajpi aldonan informon al [Inaudible]? ANDI PENG: Jes, ĝuste. Iuj programoj postulos vin povu enmeti komandlinio argumento ke pasas en kaj kiu uzas tiun. Yeah. Publiko: Do ​​kio se [inaudible]? ANDI PENG: Nu, kion do mi ŝanĝi tiam en mia programo? Spektantaro: Nur 3. ANDI PENG: Kial estas ke okazas, vi pensas? Publiko: Ĉar la [inaudible]. Spektantaro: Vi devus ŝanĝi ĝin al 2 [inaudible]. Publiko: 1 kaj 2. ANDI PENG: 1 kaj 2, precize. Do en ĉi tiu kazo, vi verŝajne volas havi du printf statements-- kiu presis argv 1 kaj kiu presis argv 2. Ĉi tie. Mi efektive povas fari ke reala rapida. Tie vi iros. Oh. Ne tute kion vi volis. Sed se vi infanoj salaton ĉirkaŭe kun la formatado, ĝi eliros. Yeah. Malvarmeta. Mi scias ke ni estas iom mallonga ĝustatempe. Sed mi simple tuj rapide elspezi paro minutoj iranta tra helpful-- Spektantaro: Vi havas du minutoj. ANDI PENG: Mi havas du minutoj? Dankon. Kelkaj rapidaj pset konsiletoj. Do por ĉi pset, mi tre rekomendas, kiel mi diris, ĉiuj por legi la specifon. Vi estos skribanta tri programs-- unu nomata initials.c, unu nomita caesar.c, unu nomita vigenere.c. Iuj gravaj konsiletoj kiu vi infanoj vere volas teni en mind-- tiel ekzistas ĉi tiu funkcio nomata atoi-- kiel mi ŝatas diri, a trois. Neklara se tio estas vere kiel vi diris ĝin. Sed ĉiuj ĝi faras, ĝi estas inputting. Ĝi konvertas ĉenon al int. Do reprezentas ASCII al mi entjero. Ĝi simple konverti ASCII valorojn al entjeraj valoroj. Do memoru argv, la tabelo kiu tendencas ĉiujn viajn ordonojn viciĝas arguments-- ĝi stokas ilin ĉiujn kiel kordoj. Kaj do se vi volas povi havas unu el ili fariĝis entjero, vi tuj havos uzi tiun valoron tie. Module, kiel ni kovris pli frue en klaso hodiaŭ, permesas havi la resto de kion vi havas. Do se ni havas vere, vere nombregoj en Cezaro, kio se ni havas la finon de kordo de Vigenère? Kiel vi tuj povos bonstata envolvi ĉirkaŭe? Se mi batis z kaj mi volas ĝi revenu al, kiom mi povos akiri ke envolvi ĉirkaŭe? Probable volas uzi module tie ie. Due, foliumi ĉirkaŭe vian bibliotekon. ctype.h. Jen nova biblioteko ni havas. Vi trovos multajn vere, vere utila functions-- isupper, islower, toupper, tolower, isalpha, kaj tiel plu. Ĉiuj funkcioj kiuj estos tre utila kiam vi provas diveni, estas tiu karaktero minusklan literon? Kiel mi konverton ŝnuro al majuskla? Ĉiuj tiuj aferoj estos tre, tre helpema por via pset. BONE. Oficejo horoj ĉinokte estas 8:00 ĝis 11:00 en la TEAL klasĉambro morgaŭ krom merkredo kaj ĵaŭdo nokte. Oficejo horoj estas en komunejo. Ege sugestas vin infanoj ĉiuj komenci tuj, ĉar vi ne volas esti tiu knabo kiu ĵaŭdo nokte havas problemojn Sendante vian pset kaj estas kiel, mi ne scias kion fari. Mi komencis, mi finis, mi prezentis. Provu doni vin iu ĉambro, ĉar en kodo problemoj ĉiam okazas. Vi volas certigi ke vi donu vin multan tempon por povi kompletigi la psets. Malvarmeta. Mi pendigos ĉirkaŭ tie. Spektantaro: Ĉu tio rete jam? ANDI PENG: Mi ne scias se ĝi estas rete jam, sed ĝi estos. Mi pendigos ĉirkaŭ ĉi tie se iu havas demandojn jam. Dankon pro veni.