[MUZIKO Ludante] Parolanto 1: Ĉi tiu estas CS50 kaj tiu estas la komenco de semajno du. Do, ni plonĝi en ion dekstra ke estas kalesxo, por tiel diri. Do, ĉi tie estas CS50 IDE kaj mi havas tirita supren anticipe ĉi screen-- malbenita ĝin. Spoiler atentigo. Bone. Mi tiris supren tiu ekrano tie, kiu havas tre simplan programon. Se ni rulumu malsupren, plej ĉi estas nur komentas, sed tie en linioj 13 tra 17 ni havas programon. Ĝi estas sintakse valida, kio signifas se Mi tradukigi ĝin, kompilos kaj kuras, sed estas kalesxon. Tiu programo asertas en la komentoj supren supro, kiun ĝi devus presi 10 steloj, sed ne. Kaj bazita sur viaj spertoj, aŭ baldaŭ esti sperto kun C, vi povas logike povoscii kial tiu estas, fakte, kalesxo? Yeah? Spektantaro: Ĝi iras de nulo ĝis 10. Jen 11 ripetoj. Parolanto 1: Yeah. Do, ĝi tuj de nulo supren tra kaj egalaj al 10, kiu kompreneble estas 11 ripetoj. Do, ĝi tuj print ja 11 steloj. Do, la komputikaj konvencio en plej programlingvoj estas ja nur komenci kalkulon je nulo, sed rakonti ĝis sed ne tra la valoro ke vi efektive volas. Nun, ĉi tiu estas unu afero ke prenas iom alkutimiĝi al kaj eĉ Scratch, desegnita kiel ĝi estas por ne programistoj aŭ ne komputilo sciencistoj kaj por infanoj plejparte, estas desegnita havi vi komencas rakonti ĝenerale je unu. Kaj tio estas bone. Vi povas absolute komenci kalkulon ĉe unu se tio estas pli komforta. Kaj kalkulu ĝis kaj tra 10, sed vi rimarkas aparte tiu semajno kaj preter tio nur tiel multaj aferoj en programado supozas ke 0 estas la unua cifero kun kiu vi kalkulas, ke vi tuj trovos ĝin pli facila nur enir ĉi kutimon starta de nulo kaj kalkulado de la valoro vi zorgas pri rajto nun de la akiri iri. Do, kiu fiksis tion. Ni ŝanĝis la malpli ol aŭ egalas al nur malpli ol. Ni rigardu dua ekzemplo tie. Do, ĉi tiu programo ankaŭ asertas en lia komentas supren supro, kiun ĝi devus presi dek steloj, sed ne. Kio estas la cimo tie? Do, what-- kaj bedaŭras, ni estu klaraj. 10 steloj. Unu po linio, sed ĝi ne. Do, fakte, lasu min antaŭeniri kaj kompili ĉi tiu ĉar ĝi estas iom malpli malbari bazita sur tiu priskribo. Lasu min iri en nia fonto katalogo. Faru kalesxon unu dot oblikvo, kalesxo unu. OK, mi komprenas 11 steloj, kiu Estas ankoraŭ problema, sed ili estas ankaŭ ĉiuj en unu linio. Kio estas la afero tie? Yeah. Spektantaro: [inaudible]. Parolanto 1: Yeah. Do tiu estas subtileco por ke vi memoru min farante mallonga mencio. Eĉ kvankam ĉiu aspektas bela, kaj ĝi estas bele dentado, kaj tio ia aspektas Scratch-simila en tiu linio 16 kaj 17 estas, ja, dentado sub tiu por buklo. Tio nemateria. La komputilo ne koni aŭ vidi blankan spacon. Blanka spaco estas nur por nin homojn, stile. La komputilo ne scias kiam vi havas frizita krampoj, kiuj volus efektive korekti tiun problemon. Do, se ni efektive eniris kaj eksplicite meti en tiuj buklaj krampoj ke fiksus ĉi problemon per klarigi al la kompililo ke mi efektive volas ekzekuti du linioj de kodo denove, kaj denove, kaj denove. Sed kio estas la fundamenta klarigo? Dekstra? Ni ne strikte necesas krispa krampoj tutan tempon, kvankam ĝi estas verŝajne plej praktiko akiri en tiu kutimo ĉiuokaze kvankam ĝi aldonas du karakteroj al via kodo. kial? Spektantaro: [inaudible]? Parolanto 1: Jes do tio estas alian solvon entute. Dekstra? Speciale se unuarigarde vi ne vere dankas kio okazas. Nu, certe ni povus nur faru du aferojn samtempe kaj simple eviti la problemon entute. Kaj tio estas bone, sed nun, por hodiaŭa celoj, kion estas la klarigo por la cimo? Kial ĉiuj tiuj steloj sur unu linio? Yeah? Spektantaro: Ĝi similas ke se vi havas unu linion de kodo, vi povas fari tion sen tiuj. Parolanto 1: Ekzakte. Tio estas nur homa konvencio. Homoj komprenas ke ĝi estas iom ĝenaj aŭ teda havi meti krispa krampoj ĉiuj de la tempo se ĉiuj vi volas fari estas ekzekuti unu linio de kodo. Do, la homoj decidis iuj tempon kiu tio estas bone. Se vi volas meti ĉiujn viajn maŝo sur nura ke unu linio tiel, tio estas bone kun la sola punktokomo ĉe la fino. Sed vi povas fari nur unu tia linio sen la frizita krampoj. Do, kiam CS50 stilo gvidas kiel montros al vi, vi vidos ke ĝenerale ĝi estas bona kutimo enir ĉi ĝis vi estas tute komforta vagadas el tiuj specoj de konvencioj kaj fari vian propran aferon. Tiel longe kiel vi estas mem konsekvenca. Kaj ni parolos pli pri stiligi iom poste hodiaŭ. Do, lasu min malfermi unu alia programo. Kompreneble, ni devus fiksi ke 10 ankaŭ. Lasu min kaj skribi reala rapida programo kiu mi vokos, diru, buklo dot C. Do, buklo dot C. Kaj en buklo punkto C mi tuj havas, inkluzivas normo / S punkto H int ĉefa malplenon. Kaj nun ni nur faru, efektive, buklo. Do, 4 int mi ricevas nulon. Mi estas malpli ol, ni diru, 50. Mi plie, plus. Kaj tiam tie ni antaŭeniri kaj ne presi F. Kaj tiam mi volas presi mi kaj nova linio, punktokomo. Kaj tio devus presi ĉiujn nombroj de nulo ĝis 50? Kelkaj kapo kapsignas. Kelkaj nos. Kio estas la cimo jam? Kio estas facila eraro mi faris? Yeah. Spektantaro: [inaudible]. Parolanto 1: Yeah. Do kvankam ĝi aspektas kiel tio estas kion mi intencas, memoras ke mi estas ankaŭ nur ASCII karaktero. Do, se mi diras, presi "Mi." Ĝi estas laŭvorte iri presi I. Do, se mi volas plug-in lokokupilo valoro mi vere devas fari ĉi kaj tiam plug-en la valoron de mi dinamike. Alie mi simple tuj akiri 50 Mi estas sur la ekrano. Do, lasu min antaŭeniri kaj fari ĉi buklo, ruli ĝin, kaj cetere, ni havas ĉiujn la vojo supren tra 49. Kaj se mi rulumu reen en tempo mi vidas la nombro nulo komence. Nu, kio se mi specon de ŝraŭbo supren? Kio se mi faras tion? Nur ĉar mi ne pensas. Kio estas tio programo. Iam re kompilita kaj kuri, faros logike? Publiko: Nenio. Parolanto 1: Nenio. Kial estas tio? Publiko: Mi estas desegnita por nulo. Do, la kondiĉo estas falsa. Parolanto 1: Jes, ĝuste. Ĉiuj kodo estas ĝentila, sintakse. Ĉi kompilos, ĉi kodo kuros, sed ĝi ne estas tuj fari ion utilan ĉar mi pravalorizi mi al nulo. Ni tiam kontrolu, estas mi pli granda ol 50? Evidente, ne, ĝi ne estas. Do la buklo neniam ekzekutas ajn. Kio se ni faros ion iom pli temerara? Do, kio se ni imitu int mi ricevas nulon. Kaj nun lasu min uzi tempon buklo, kiu estis alia kondiĉo. Kaj dum mi diras, dum mi estas pli granda ol aŭ egala al nulo, kaj tiam tie mi antaŭeniri kaj savi la dosieron, fari banton. Kaj mi komencis forkuri ĝin. Kion mi tuj vidos ĉi tempo kun dum buklo? Yeah. Publiko: senfina ciklo? Parolanto 1: senfina ciklo? Jes, kial? Publiko: Ĉar estas ĉiam nulo. Parolanto 1: Yeah. Do, mi estas pravalorizitaj kiel nulo. Kompreneble mi estas ĉiam pli granda ol aŭ egala al 0 kiel rezulto. Do, mi simple tuj vidu tiun senfine. Nun, ĉi tio venas supren iam aŭ dufoje al la kurso la kapoj. Kio okazas kiam vi havas senfina ciklo? Publiko: Kontrolo C. Parolanto 1: Yeah. Do Kontrolo C eventuale respondi. Bedaŭrinde, ni presis eksteren milionoj kaj milionoj da nuloj jam kaj tiel la komputilo havas ia akiris antaŭ mi. Do, ĝi tuj ignori min por iomete. Sed se vi nur batis Kontrolo C kelkaj fojojn sur via Mac aŭ PC klavaro, eventuale ĝi devus ja finiĝi. Kaj se ne, ni montros al vi kelkajn teknikojn antaŭ longa kie vi povas fakte perforte mortigi programojn, multe kiel en Windows kaj Mac VIN, se necese. Sed ni provu ion alian. Ni fakte pliigo I. Is tiu ankoraŭ tuj estos senfina? Mi kuros ĉi. Kaj nun vi povas ia vidu kio okazas. Ĉi tio, ankaŭ, estas senfina ciklo. Sed tio estas iom de lertaĵo demando. Estas ĉi presigos nombroj ĉiam? Publiko: No. Parolanto 1: No. Kial? Mi aŭdis iun nos super tie. Someone-- Yeah. Spektantaro: Vi ne havas sufiĉan bitojn por vere plu iri. Parolanto 1: Bone. Do mi ne havas sufiĉan bitoj plu iri. Do, kio okazos? Ĝi simple tuj ĉesos? Publiko: Ĉe iu punkto ĝi fermos the-- Parolanto 1: Ĝi fermos la buklo malsupren, sed kial? Kio okazos ĉe la tre fino de ĝiaj limoj? Yeah? Spektantaro: Ĝi ciklo reen al negativaj nombroj. Parolanto 1: Por negativaj nombroj, aŭ se ni ĵus traktanta pozitiva, nulo almenaŭ. Do jes, absolute. Memoru ke ni vidis lastan fojon ke, se vi pliigo via bitoj unu tro da fojoj, kaj vi tie Fore superfluaĵo la kapablo de via int aŭ nenial la datumtipo estas, vi estas tuj envolver ĉirkaŭe, probable, du negativaj nombroj. Aŭ se vi specifas ke via intervalo devus nur esti pozitiva, kiun vi povas fari, sed Ni ne vidis ke ankoraŭ, vi eble finos almenaŭ reen ĉe nulo. Kvankam, fakte jes. En tiu kazo, negativa nombroj, tiaokaze la buklo tuj chesigi ĉar mi ne estas, fakte, pli granda ol aŭ egala al nulo se ĝi estas negativa. Do, bedaŭrinde, kiom longe estus ni devas atendi? Ĝuste nun ni estas ĝis kio, 2 milionoj-ish? Ni estas kiel 2 miliardoj, ni tuj devas atendi ĝis ni vere povas vidi ĉi simptomo. Sed ni povas vidi ĝin iom pli rapida, maybe-- ni vidu se ni povas interrompi. Venu. Eĉ la menuoj aperas malrapide. Bone. Do, ni revenos al tiu post nelonge. Estas bona time-- damn it, hundidoj. Estas bona tempo por iuj anoncoj. Do, se vi povus ŝati okupiĝi YHack, kiu estas okazaĵo estanta patronita de niaj amikoj ĉe Yale. Kaj vere, iuj de la kurso TFS ĉe Yale estas implikita kun ĉi tiu. YHack estas internacia hack-a-thon gastigita fare kaj tenis ĉe Yale, alportante kune 1,500 kiel minded hackers kaj creatives ĉiuj super la mondo. Se ĉi tiu estas de intereso, rigardu ĉi tie. Se ĉi tiu estas tro mallonge sur la ekrano, rigardu hodiaŭa diapozitivoj cxar la URL por yhack.org. Do, ankaŭ kelkaj rapidaj anoncoj. Do, oficiale sekcioj komencos venontsemajne ambaŭ tie kaj New Haven. Memoru vi estos ricevi retpoŝto poste tiu semajnfino plej verŝajna. Ĝi prenas longan tempon por CS50 al sekcio, donita tuta popolo en la klaso kaj ĉiu movas ĉirkaŭe. Kaj ĉiuj Teaching Fellows ' horaroj estas ankaŭ ankoraŭ solidigante, sed Sekvu por email kaj se bezono esti, vi povas re-sekcio tie post. Study.cs50.net. Do, eĉ se vi estas konstanta partoprenanto ĉe sekcioj, rimarkas ke preskaŭ ĉiuj de la resursoj ni uzi en sekcioj estas publike havebla ĉe CS50 Studi ĉe ĉi URL tie. Do, se vi volas iam ŝatus re revizio materialo de sekcio, aŭ legi antaŭ, aŭ vi ne povas fari ĝin iu semajno, konscias ke specimeno diapozitivoj, kaj problemojn, kaj difinoj, kaj pli estas ĉiuj tie ankaŭ. Oficejo horoj rekomencos hodiaŭ, kaj morgaux, kaj merkredo, kaj ĵaŭdo kontroli la kurso retejo por la horaro. Kaj ankaŭ, nun lanĉanta hodiaŭ estas CS50 Diskutu. Do, se kaj kiam vi havas demandojn pri reciproke aŭ por la kurso de dungitaro, kaj ĝenerale laboras sur iu problemo aro, rimarkas ke vi ne nepre devas turni al la homa apud vi. Se neniu estas ĉi tie, vi povas atingi ekstere al ni kaj samklasanoj linio tra CS50 Diskutu. Do, tiu estas diskuto tabulo por la kurso, kaj konscii ke ĉi estas eble la plej bona loko komenci kiam vi havas demandoj kiam ekster oficejo horoj en aparta. Lunĉoj funkciigos tiun semajnon ankaŭ. Ĉe Fajro kaj Ice [Inaudible] en New Haven. Rigardu la kurson de retejon por RSVP. Unua venis, unua servas por tio. Se vi ne ricevas en tiu semajno ni faros tiujn plej ĉiu vendredo dum la termino. OK, kaj nun eĉ unu vorton pri gradiganta. Precipe kiel ni eniras problemon starigis unu, kio estas ekstere ĉi tiu semajno, kaj problemo starigis du kaj poste. Kiel ni iras pri pritaksanta P aroj kaj taksi la kvaliton de gxi? Do, estas kvar aksoj kiuj ni uzas en CS50, kaj ili estas tiuj kvar tie. Amplekso, kiu kaptas sur nombra Surbaze nur kiom de la P aro vi pritrakti. Ĝi estas malglate korespondas kun peno, kaj ĝi estas nia maniero de kapti vi provos duono la P starigis, ĉiuj la P aro. Tio estas facila por akiri perfektan partituroj sur se vi ja provi ĉiu aspekto de la P aro. Do, gardu tion en menso. Praveco estas ĝuste tio. Ĉu via kodo laboro kiel la specifo kaj kiel la bastonoj 'specimenon solvo sugestas ke via kodo devus, fakte, labori. Kontrolu 50, se vi ne renkontis ŝin tamen, estas en P starigis unu specifo kaj ĝenerale donu vi jes / ne respondoj ĉu via kodo estas ĝusta. Almenaŭ tiom kiom ni iras Taksi ĝin bazite sur la provoj ke ni kuras ene de tiu programo. Dezajno estas multe pli subjektiva. Jen kiel bone skribita estas via kodo. Kaj tiu estas iu kiu vi ricevos pli bona ĉe la tempo, kaj ĝi estas io kion ni provizi pli kvalita reagojn pri. Kaj projekte mi povus signifas antaux longe vi povus esti tentita en iuj P fiksita fari ion loopingly, sed havanta eble tri aŭ kvar, aŭ kvin nestitaj antaŭo maŝojn aŭ nestitaj dum bukloj. Ke ĝenerale devus komenci fari vi cringe kaj ĝenerale estus konsiderita maltaŭga. Kaj vi komencos vidi en klaso kaj el klaso bonaj manieroj de fari aferojn, malbonaj manieroj fari aĵoj kiujn povus ĉiuj esti ĝustaj, sed ne nepre bone desegnita. Kiel skribi eseon. Vi eble povus meti vortojn sur paĝo kiu estas gramatike ĝusta, sed la eseo aŭ la tezo ili estas en estas nur tute nekohera aŭ unpersuasive. Kaj tial eble estos la analoga en la skribita mondo de malbona aŭ bona dezajno. Kaj stilo, ankaŭ, estas sufiĉe subjektiva. Sed almenaŭ ni atendas consistencia. Jen kiel bela estas via kodo. Ĉu aferojn bonguste dentado? Ĉu via variabloj bone enoficigis / Ĉu ĉiuj de via parentezoj kaj buklaj krampoj vicigita kiel ili devus esti? Ni ja havas CS50 stilo gvidas kiel la problemo aro estos atentigi vin je. Tiuj pli komforta estas bonvenigi malproksimigi de tiu tiel longe kiel vi estas mem konsekvenca. Kaj tiu, tro, estas leciono ni plifortigi en sekcio. Do, se ĉio ĉi estis malgranda rapida, rimarkas la P aro kaj sekcioj iros en pli profundo antaŭ longe. Sed ĝenerale ni havas tre malmultaj siteloj por CS50. Dudekopo estas ĝenerale en skalo de al tri, aŭ unu al kvin. Ni literally-- kaj mi ne povas diri tiu sufiĉe en la unua semajno. Tri estas bona. Do, kvankam, jes, tri el de kvin kutime, matematike, povus esti 60 procentoj aŭ kiel D minus. Tri estas, fakte, bonaj. Kaj, fakte, ni atendas plej lernantoj en la klaso dividi la termino ĉirkaŭ duope, triope, kvarpiede kaj. Probable ne tiel multaj Fives. Ne tro da aĵoj. Sed ĝenerale komenci en ke dolĉa punkto en la kurbo tiel ke, kiel tempo progresas, ekzistas reale ĉambron por, kaj ŝancojn por supra progresio. Do, bonvolu ne egaligas tri kun 60%. Ĝi estas multe pli abstrakta ol tiu. La formulo per kiu oni kalkulas gradoj estas pezita kiel sekvas. Ĝustecon valoras la plej. Dezajno valoras iom malpli. Stilo valoras iom malpli. Kaj tiu ĝenerale kaptas la kvanto de tempo kiu iras al atingi ĉiu de ĉi tiuj aksoj nur rajto. Stilo estas super facila, devus esti super rapida, sed estas facila kutimo akiri mallaborema pri. Ĝustecon povus preni vi plejofte. Chasing malsupren iuj cimoj heroajxoj preni ke ekstra horo aŭ pli, kaj tiel, la poentado finfine kaptas tion. Kaj do, nun pli seriozan vorton. Ekde CS50 havas la distingo, por bone aŭ por malbone, de esti eble pli bona acquainted kun la temoj de akademia honesteco ol plej ajna alia kurso. Kaj ja, ĝi estas laŭ mia scio ke ni sendas pli da studentoj, bedaŭrinde, por disciplinaj celoj ĉiujare kiel rezulto. Do, en la intereso de plena malkaŝo, ni parolu brevemente pri kio daŭriĝas en CS50, kaj kion vi povas fari, kaj kion vi povas memori. Do, ĉi tie ekde 2007, kiam Mi heredis la kurso, estas la nombro de Ad Board kazoj. Ad Board estas Harvard disciplina korpo, aŭ nun la Honoro Counsel, al kiuj kazoj estas referitaj kiam lernantoj fari iun kiu la kurso Syllabus konsideras neracia. Ekzistas neniu reala padrono tie, mi dirus. Ĝi variadas super la jaroj sed ĝenerale Jen estas la nombro de kazoj kiuj raportas. La nombro de studentoj ke estas implikitaj? Ĝi tro varias. Tipe, lasta jaro por Ekzemple, 29 studentoj ĉe Harvard estis Ad eniĝis, tiel diri. 29 el ili nunaj studentoj, du el ili antaŭ studentoj, kiuj kunlaboris en iu perversa maniero. Kaj tiam en terminoj de la procento, ĝi estas kutime ĉirkaŭ 3% de la klaso kiu, bedaŭrinde, faras tiajn decidojn. Do, lasta jaro estis 3.5% de CS50 la studentaro kiu estis Ad eniĝis, tiel diri. Do, kion signifas ĉio ĉi signifas? Kaj kion ni efektive faros? Do, por plena malkaŝo, ni absolute, kiel komputilo sciencistoj, havi programaro iloj je nia dispono kaj ĝi estas tre facila por ni, juste ke alies samklasanoj kiuj ne transirante tiuj linioj transiri kompari ĉiun submetiĝo tiu jaro kontraŭ ĉiu submetiĝo dum la pasintaj ok jaroj. Programaro tion faras. Kaj finfine estas homaj okuloj decidantaj ĉu por raporti iun gravas por plua adjudication, sed programaro certe helpas. Kaj tiu, sincere, tial ke mi pensas ni havas tiajn grandajn nombrojn en CS50. Ne ĉar CS50 lernantoj aŭ CS studentoj pli ĝenerale estas ajna malpli honesta ol ajna aliaj studentoj, ĝi estas nur ni havas la iloj kaj la teknikoj kun kiu preni tiun unuan paŝon. Sed ni tenas okulon sur ĉiuj tiuj aferoj tiel, denove, en la interesoj de rekonante la laboro kiu estas estanta metita tra la super plimulto de la klaso. Kaj la kurso la privateco sur akademia honesteco, kvankam ĝi estas aro da alineoj longa kun aro da kugloj kiuj estas espereble tre facile legebla, ĝi vere bolas malsupren al racia. Kaj la plej bona regulo de thumb ke ni oferi ene la Syllabus estas tio, la esenco de ĉiu laboro, kiun vi submetiĝi al tiu kurso devas esti via propra. Kaj efektive, en preskaŭ ĉiuj el tiuj kazoj rilatis por disciplina ago ĝi estis pro iu studento malfrue unu nokto tipe turnis sian kodon super rekte al samklasano, kiu tiam adoptis bloke aŭ signife largxo. Sed vere, tiu estas okej. Kaj efektive, en oficejo horoj, la papelitos vi estis enmanigis se vi venis por ofico Horoj lasta semajno instigas tiel. Vi tute bonvenigis kaj kuraĝigis diskuti problemo aroj kun samklasanoj. Helpi unu la alian kiam falpusxigxo. Sed ĝenerale la regulo de thumb devus esti tiu, "kiam vi petas helpon, vi rajtas montri vian kodon por aliaj, sed vi povas ne rigardi ilian. " Do, alivorte, se mi baraktante kun iuj P aro kaj mi sidas tie en la manĝejo, aŭ en la biblioteko, aŭ en la klasĉambro provante trovi iun kulpon, Mi certe povas montri mia kodo sur mia ekrano al la persono sidanta apud al mi, certe la bastonon, sed ankaŭ samklasano. Sed se la solvo kiu mia samklasano proponas estas, ho, tie nur rigardu kion Mi faris, kiu transiras la linion. Kaj mi kuraĝas diri, ke estas ĝenerale racia afero por multaj homoj al tre facile ekvidi la linio de. Kaj tial, vidu la Syllabus por pli detale. Kaj nun unu el la pli polemikaj aspektoj de CS50 syllabus ke mi supozis ke parolus al konklude tie estas la tn bedaŭro klaŭzo. Do, jen ĉiuj fajnan print. Sed ĝenerale ni vidis dum la pasintaj 8 jaroj pli kiu, efektive, preskaŭ ĉiuj el CS50 la kazoj de akademia malhonesteco estis la rezulto de nur malriĉa decidado malfrunokte. La rezulto de streso, la rezulto de manko de manĝado, manko de dormo, tro multaj P aroj, tro multaj templimoj, tro multaj engaĝiĝoj. Streso edifado en 2:00 AM, 3:00 AM, 4:00 AM, kun limdato minacanta. Plej studentoj en tiuj kazoj ĵus faris malbonajn decidojn ke ili povus tre bone bedaŭri la sekvamatene se ne minutojn poste, sed ĝis la pasinta jaro ne estis liberigo valvo ke tiuj studentoj povis fakte malfermas reale alparoli la problemo kapon sur sen timo de esti booted el kolegio entute. Kaj, efektive, ni enkondukis ĉi bedaŭro klaŭzo pasintjare, kiuj diras ke se ene 72 horoj, tri tagoj, transiri iu linio preskribitaj en la Syllabus vi veni antaŭen al unu el la kurso kapoj kaj ni devos babili pri ĝi. Tie ankoraŭ estos kelkaj rezulto, male al kio estas estis raportita al la kontrauxa. Ankoraŭ iuj rezulton estas priagebla de la kurso, ĝenerale informoj nulo P aro aŭ prenante iuj aliaj agoj, Sed ni ja manipuli ĝin mem kaj ne rilati gxin pli alta estis la rezulto povu multe pli severa. Kaj ĝuste dividi kio okazis lasta jaro, en la ok jaroj, kaj nun naŭ jaroj, instrui tiun kurson kaj post laboreti kun diversaj kapetoj turnante diversaj ciferplatoj super la pasinteco pluraj jaroj sur akademia honesteco, kaj vidante po la datumoj ne ŝajna efikon, eĉ de paroladoj kiel tiu, jen manoj malsupren la plej bona afero ni enkondukis pedagogie en ok jaroj kune tiuj linioj en CS50. 19 studentoj venis antaŭen sub tiu klaŭzo pasintjare. Ni prenis neniun agon por sep de tiuj lernantoj, determinante ke ili estis nenecese maltrankviligita. Ili havis ne, fakte, transiris linion, sed ĝi estis bona babilejo havi tamen. Ni zeroed 11 de la partituroj ke prizentita. Kaj en unu kazo ni demandis studenton fari problemo starigis. Sed pli konvinka, Honeste, kun tiuj 19 babilejoj, kiu estis maniero pli ol mi atendita havi, ĉiu el ili 10 minutoj eble oni horo longa, ankaŭ alportis lumigi kelkajn temojn koncerne familial temoj, amiko temoj, mensa sano temoj ke ni tiam engaĝitaj, kun la studenta beno, loĝanto dekano, aŭ amikoj, aŭ ajna alia nombro de subteno rimedoj. Por ke tiu estis certe unu de la plej bonaj uzoj de nia tempo kaj unu el la plej bonaj intervenoj. Kun kiu diris, ĝi ne havis enigo en la indico de detekto de akademia malhonesteco pli ĝenerale. Kaj mi kuraĝas diri, ke tiu subaro de studentoj pasintjare estis demografia ke ni antaŭe neniam identigita antaŭ kaj neniam konektita kun antaŭe. Kaj do, tiuj estis mirinda sukceso rakontojn kvankam ili estis alportitaj al la lumo en malpli ol optimuma cirkonstancoj. Do, daŭru en menso kiel vi faras, eble, kelkaj malriĉaj decido mem malfrunokte, ke estas rimedo por longa kiel la studento en tiu situacio posedi supren kaj veni antaŭen tiel ke ni povas havas tian babilejo kaj trakti ĝin en maniero kiu estas eduka kaj tiam ni povas meti ĝin malantaŭ ni la sekva tago. Do sen pli enkonduko, preni la rando ekstere de ĉi tiu konversacio, la kialo la idoj estas UP nur rompi la glacion dum momento. Kaj bedaŭrinde, ili estas ĉiuj dormos, sed kio supozeble okazis tie Estis ĉiuj laŭsupoze timigi kaj tipon de relax poste tre peza konversacio. Sed ŝajne mi metis la hundidoj dormi. Sed se vi iros al CS50 retejo oblikvo hundidoj, vi povas rigardi ilin la tutan tagon. Aparte eble 2:00, aŭ 3:00, aŭ 4:00 AM nokte vidi iom streso reliefo tie. Do kiu estas oblikvo hundidoj. Bone. Ne estis tio amuza? BONE. Do, reen al iuj komputilaj scienco, se mi povas. Do, memoras ke lastfoje ni komencis rigardante ne nur ĉe ĉefaj, kiuj estis la defaŭlta funkcio, la kiam verda flago clicked ekvivalento, sed ni ankaŭ komencis mallonge skribi iuj de niaj propraj funkcioj. Kaj ĝis nun neniu el tiuj funkcioj estis aparte grandaj aŭ meaty. Vi ricevos en tiuj grandaj funkcioj probable, P starigis 2, P starigis 3, sendube P starigis 4 kaj pluen. Nun plejparto de viaj programoj, se ne ĉiuj, certe por P aro 1 povas esti farita tute en ĉefa. Se via programo estas nur kvin linioj, 10 linioj, eĉ 20 linioj longaj, perfekte racie skribi ĝin ĉiuj en ĉefaj kaj ne over kompliki via kodo, sed kion ni faras hodiaŭ kaj plue provas ankaŭ enkonduki iun bonan dezajno teknikoj por ke kiel via kodo ricevas pli komplikitaj kaj kiel la problemoj vi volas solvi akiras pli malfacilan kaj pli interesa vi havas, ia, la iloj en via toolbox kun kiu desegni bona solvojn al tiuj. Do, ni prenu rapidan rigardon reen ĉe ĉi programo de mia lasta semajno, kiun Estis funkcioj nul streketo C. Kaj rimarkos ke, tute simple, ĝi aspektas kiel tiu kun du funkcioj, ĉefa kaj presita nomo. Kaj pensante dorso aŭ eble retroprojektadon hodiaŭ, kio estis la motivado por enkondukanta funkcio en linio 28 nomita, print nomo? Aŭ kio estis tiu ekzemplo de en Kondiĉoj de komenco aŭ takeaway, se vi volus. Iuj murmuroj. Kio? Yeah tiel Funkcia Malkomponaĵo estas speco de la fantazio maniero diri, malkomponi vian programon en ĝiaj konsistigaj partoj kaj tiam uzi tiujn partojn kunvenigi tuto. Do, ankaŭ tio nur speco de bocado jam, sed tio eble estas eĉ bona ekzemplo de io nur nomis abstraktado. Dekstra? Abstraktado tuj estos unu de la temoj recurrentes en CS50 kaj ankaŭ komputiko pli ĝenerale ĉar estas tekniko per kiu vi povas solvi problemojn pli efike ĉar vi povas skribi solvoj pli intuicie kaj en maniero kiun skaloj kaj estas komprenebla de aliaj personoj. Kion mi celas diri per tio? Do, eble estas multe pli legebla rigardi programon kiel tiu, super mallonga kvankam tio. Kiam vi vidas sur linio 22 ke ekzistas funkcio vokita, presaĵo nomo. Tiu nomo sole diras kion ĝi faras. Domadministranto ŝajne prenas enigo inter lia krampoj, kaj ŝajne faras ion, supozeble presas la nomon. Kaj tiel, kvankam ni absolute povus havi faris kion ni faris antaŭ unu semajno, kiu estis nur prenu tiun fakta linio de kodo, Forigi ĉi, kaj instigi forigi ĉi ĉiuj kune, ni ia abstraída for la nocio de presado nomon. Mi ne zorgas se vi uzas presaĵo def. Ne gravas se vi havas procento S kaj backslash N. Tiuj Estas nekredeble arcano detaloj. Kion mi faras zorgon pri kiel programisto estas videbligi nomon. Kaj do, ¿kio pli bona maniero fari tion ol nomante funkcio, presi nomo? Kaj do, tio estis unu el la motivaciones cxar farante io tiamaniere. Farante la kodon pli legebla, pli reuzebla, kaj ankaŭ mem priskriba. Nun, ni rigardu ĉe alia ekzemplo, kio funkcioj unu, kiun ni havis super tie. Do, ĉi tiu estas eble eĉ pli konvinka ĉar, en tiu kazo, Mi ne volas simple ricevas int. Mi volas ricevi pozitivan int. Kaj ĝi rezultas akiri pozitivan int vi devi fari faskon de legwork. Dekstra? Ĝi ne estas simpla linio nomas kiel presaĵo nomo estis, kio estas koncedite malpli konvinka. Por ricevi pozitivan int, logically-- lasu min rulumi reen malsupren por kaŝi tiun. Kion vi devas fari? Kiel ĉiuj iloj ni havas nuntempe aĵoj kiel presaĵo def de Norma Biblioteko kaj ankaŭ el CS50 biblioteko ni havos Get Mez, kaj Get Float, Get Long Long, Akiri String, sed la sola, germane, nun estas Get Int. Do, se la sola ilo vi havas en via ilo skatolo estas Get Mez, Kiel ni iras pri efektivigado ĝi akiri pozitivan int? Publiko: Krei sxtipo kaj kontroli sur ĉu la enigaĵo ke ili donis estis pozitivaj aŭ ne. Parolanto 1: Perfekta. Ekzakte. Alia ilo ni havas en nia toolbox de unu-du semajnoj antaŭ Estas ĝuste la looping konstrui. Do, jes, se ni uzas dum buklo, aŭ fari dum buklo, aŭ ĉefan buklo ni povus probable foriri kun iu el tiuj en iu formo. Ni povas apliki la nocio de Get pozitivaj int per nur uzanta Get Mez, kaj tiam simple observu nomante ĝin denove kaj teni tedante la uzanto ĝis li aŭ ŝi reale donas al ni kion ni deziras. Kaj tial nun, tiu abstraktado de la procezo akiri pozitivan int en funkcio nomita Get Pozitivaj Mez estas iom pli konvinka ĉar rigardas tiun. Tiuj estas kiel 10 plus linioj de kodo kiu estas implikitaj en prenanta pozitivajn int, kaj mi ne vere zorgas kiel vi faras ĝin. Ĉiuj mi zorgas estas ke vi povas fari ĝin, kaj tiel mi havas kaŝita ĉiujn tiujn detalojn malantaŭ funkcio nomita Get Pozitivaj int ke, ja havas ĉi do dum buklo. Kaj vidi lasta semajno por la sintakso tie, sed simple deklaras N, kaj ĝi presas el la instrukcion al la uzanto. Ĝi alvokas Get Mez kaj tiam kontrolas kondicxo denove, kaj denove, kaj denove ĝis la uzanto kunlaboras. Do nun, kelkajn prudento ĉekoj. Por tiuj eble familiara kun iu programado, kial N deklaris, kial mi krei N ekster la do dum buklo? Kial estas sur linio 29 kaj ne sur kiel 33, ekzemple. Publiko: Ĉar kiam vi deklari ĝin ekstere, ĝi speco de pli, la pli granda scope-- Parolanto 1: Bona. Publiko: --and se vi rakontos tion malantaux la buklo, [inaudible] ĉar ne scias pri ĝi. Parolanto 1: Ekzakte. Se mi povas simplify-- ĝi estas afero de medio. Kaj amplekso rilatas al la kunteksto en kiu variablo ekzistas aŭ estas uzebla. Kaj la bela regulo de thumb estas, ke ĝenerale kiam vi deklaras aŭ krei ŝanĝiĝema vi povas nur uzi ĝin ene de la plej proksima brakumante buklaj krampoj. Do kion tio signifas? Se mi, anstataŭe, malfari tion kaj iru kun iu kiu sentas iom pli simpla. Dekstra? Linio 32 nur aspektas purigisto min nun. Mi faras ambaŭ aferojn unufoje kaj tiam asignanta la dekstra mano al la maldekstra mano. La problemo nun estas bazita sur ke difino de amplekso estas ke N povas esti uzata en linioj 31 kaj 32 ene de tiu ciklo, sed kie por tiu difino povas ne esti uzata? En linio kio? Yeah. Publiko: 35. Parolanto 1: 35. Definitive ne 35. Kaj ankaŭ kie alia? Publiko: 34. Parolanto 1: Eĉ 34 estas problema ĉar ĝi estas eksteren de la frizita krampoj. Do fakte, ni vidu kio okazas. Dekstra? Tio povas ŝajni iom intuicia aŭ eble ne, sed ni vidu kio la tradukilo devas diri kiam ni iros en la hodiaŭa fonto dosierujo. Faru funkcio unu. Ho, mia dio. Nu, mi fine finis ke, parenteze. Bone. Kaj kio estas la demando tie? Tre arcano rigardi. Sed jen kion mi typed-- faru funkcion unu. Jen kion fari induktita, kiu estas reale uzante la tradukilon tin kun kelkaj el tiuj flagoj ke ni vidos denove antaŭ longe. Kaj denove, ĉiam aspektas ĉe la unua eraro, ĉar ĝi nur povus havi kaskadan sensignifa efikon sur aliaj linioj. Do kion tio signifas estas ke la problemo estas en funkcio 1.c. Ĝi estas ĉe linio 32. Kaj ĝi estas ĉe kolumno, aŭ karaktero, 13. Do kiam via tekstoredaktilo kiu povas helpi vin identigi kie la temo estas. Do se mi rulumu supren, kio estas linio 32? Tio ja ĉi tiu ke tio jam elstarigitaj dekstra here-- neuzitaj variablo n. Sed ĝi ne estas neuzata. Mi uzas ĝin. Sed la tradukilo konfuzas, ĉar ĝi nur ekzistas ene de tiu medio. Kaj tial mi ne povas uzi ĝin ĉi tie. Mi ne povas uzi gxin tie. Kaj la tradukilo do eĉ ne gravas ke mi provas. Ŝajnas esti neuzitaj ene ĝia fakta medio. Do ni povas plivastigi la medio per farado ĝuste kion ni komencis with-- int n. Kaj eĉ se ĝi ne aspektas kiel eleganta, eble, kaj ni prenas ekstran linion tie, nun ĝi estas en amplekso ĉie. Do ni provu denove. Do fari funkcio unu. Nice. Kaj nun se mi se mi kuros funkcio unu, ni donu al ĝi negativan 10, negativa 1, 0, 1, kaj ĝi efektive funkcias. Do ekzistas alia solvo tie. Vi scias kion? Kio se mi vere estas luktanta kun tio? Mi ne scias kie la n supozas iri. Vi scias kion? Mi simple tuj meti ĝin ĉiuj vojo ĉe la supro de mia dosiero tie. Kion cxi faras, vi opinias? Yeah? Spektantaro: [inaudible]. Parolanto 1: Yeah. Do mi faris ĝin tutmonda, por tiel diri. Se vi havas variablo kiu estas ekster ĉiuj viaj funkcioj kiuj estas permesitaj, kaj la kodo devus kompili, kaj n nun estos atingebla ne nur en Get pozitivaj int, sed ankaŭ en main-- kiu estas iom preocupante ĉar estas Jam n en ĉefaj, tiel pli sur tiu en nur moment-- sed tiu estus konsiderita maltaŭga. Bone. Se vi devi recurrir al io kiel, oh, mi simple metu ĝin ĉi tie ĉar la kodo ŝajnas kompili estas ĝenerale ne la plej bona praktiko. Prefere vi volas elekti la plej mallarĝa ebla amplekso por via variabloj, kion signifus irante kun nia komenca dezajno, kiu Estas ĝuste ĉi tie. Nun kiel flanken, se vi havas an idente-nomita variablo tie, la vojo c pritraktus this-- kvankam tio ne okazos tro often-- estas ke tiu estas ankoraŭ perfekte bone en ĉi tie. Sed tiu difino de n en linio 22 estos shadow la suma. Do ĉi tiu laboros ene ĉefa, kaj la suma efektive apliki kiam vi estas en akiri pozitivajn int Sed pli sur tiu alia tempo, sed ĝuste por tiuj scivola. Do mallonge, ni riparos tion ĉi tie. Nun ni turmentus aparte du aliaj pecoj antaŭ ni rigardas unu lastan linion de kodo en tiu programo. Akiri pozitivajn int. Sur la maldekstra flanko de lia vorto estas la vorto int. Kion tio signifas vi pensas? Tiel nun ni plejparte vidis malplenon. Yeah? Spektantaro: Ĝi estas la tipo de ŝanĝiĝema ke vi demandas pri. Parolanto 1: Yeah Estas la tipo de, lasu min Ne diru varia, sed la tipo de valoro ke mi demandas reen por. Kaj efektive, jen intuicia tie, espereble. Dekstra? Se vi volas ricevi pozitivaj int, kio estas vi volas la function-- kiel nia volontuloj el pasintsemajne transdoni vin pecon de papero kun int sur ĝi? Kaj tial ni specifis ke la tn reveno tipo de ĉi tiu funkcio estas akiri pozitivajn int. Se ni ne volas ĝin redoni ion, vi diras malplenon. Se vi volas ĝin reveni kordo, vi diras kordoj. Se vi volas ĝin reveni kaleŝego, vi diris kaleŝego. Sed la sola kiu aplikas tie logike, ĉar mi uzas get int, kvankam mi restrikti ĝin al pozitivaj valoroj, estas reveni al int. Do inverse, kion tio signifas ke ekzistas malpleno en parentezoj? Kion faru la krampoj ĝenerale difini? Yeah? Spektantaro: Ĝi signifas la funkcia ne efektive akiranta ĝin. Parolanto 1: Ĝi signifas la funkcia ne fakte ricevas kion? Publiko: enigaĵoj. Parolanto 1: enigaĵoj, whatsoever. Do efektive, se parentezo tie vi specifas malplenon, ke nur signifas mi ne volas enigo. Mi trakti la problemon mem. Kaj efektive, vi ne devas diru akiri pozitivajn int ion. Vi nur diru, akiri pozitivajn int, kaj ke funkcio pafos kaj fari lian aferon. Sed tie jam iom lertaĵo mi havas estis ludanta tie ĉi tuta tempo certigi tiun kodon kompilas. Rimarku ke int-- akiri pozitivajn int void-- estas ĉe linio 27. Sed por iuj ŝajne bizara kialo ĝi estas ankaŭ tie sur linio 16. Kaj ĝuste por bona mezuro Mi ripetas ĉi do estas perfekte identaj. Kaj mi diris prototipo kun iom unulinia rimarko. Kio okazas se mi forigas ke, Kaj nun rerun fari funkcio 1, eniru. Whoops. Atendu minuton. Kie estas mia langeto? Huh? Standby. Faru funkcio 1. Tie ni marŝos. BONE. Ne savis ĝin taŭge. Do, mi kredas ke estas iom cimo tie kie mi ne estas vidante la langeto nomo nuntempe. Do kio okazas ĉi tie? Implica deklaro de funkcio akiri pozitivajn int estas nevalida en C99. Do konfuzante denove. Do kio estas tiu indika? Nu, Ĝi rezultas ke C estas sufiĉe stulta. Nu, estas la programado lingvo, aŭ prefere la kompililo estas. Ĝi nur scias kion vi havas instruita kaj estas nur tuj scios ion se vi instruis ĝin antaŭe. Alivorte, en ĉefa Nuntempe, mi estas provas nomi funkcio nomata akiri pozitivajn int. Sed la tradukilo ne tuj rimarki ke akiri pozitivajn int ekzistas ĝis linio 26. Kaj tiel kion la tradukilo faras estas nur eraroj tuj kiam ĝi alvenas al linio 17, dirante implicitan deklaron de akiri pozitivajn int, kiu estas nur fantazio maniero diri, mi ne faras scias kion akiri pozitivajn int estas ankoraŭ. Aliaj lingvoj kiel Java kaj Python kaj Ruby povus rigardi antaŭen. C ne. Kaj tial la maniero kiun ni ripari tio estas unu el du manieroj. Ĉu unu, ĉu la problemo estas ke akiri pozitivaj int ne vidis antaŭe, nu, lasu min nur movi ĝin al la supro. Tio estus korekti tiun problemon. Sed ĝenerale, estas konsiderata bona tekniko meti via ĉefa funkcio je la tre pinto tiel ke homa legante via kodo scias kion la programo faras, ĉar ĉefa ne enterigis ĉiuj la vojo ĉe la malsupro aŭ en la mezo. Ĝi estas ĉe la tre pinta. Por ke ne sentas idealo. Kaj vi povas reale preni en situacioj kie se unu funkcio alvokoj alia, kiu nomas alian, vi povas akiri en temo kie nek povas iri super la alia, logike. Ĝi estas nur ne ebla. Kaj tial la vojo labori ĉirkaŭ ĉi estas nur prenu la funkcio subskribon, tiel diri la unua linio kie ĝi estas declared-- kaj simple kopii, alglui ĝin en la supron, sed ne kun krispa braces-- nur kun punktokomo. Estas kiel malgranda sugesto de kio estas por veni. Kaj fakte, ĉiuj ĉi tempo, kiam ni vidis aĵojn kiel normo io.h kaj cs50.h, simile, en tiuj skalara h dosieroj estas tie aliaj prototipoj. Kaj ni vidos, ke antaŭ longe. Do mallonge, kiam vi havas programon en dosiero kun multnombraj funkcioj krom ĉefa, vi preskaŭ Ĉiam volas deklari ilin nur pere de sia unua linio, sekvita per punktokomo, ĉe la plejsupro de la dosiero. Tio estis multe cxiujn samtempe. Demandojn? Demandojn? Bone. Do ni pluiru tiam al io kiel tuso. Oh. Kiel adaptado. Bone. Tuso. Do jen estas c efektivigo de programo ni faris la aliajn tago Scratch ke tre simple nur diras tuso, tuso, tuso. Bone. Kaj iu diris kelkajn tagojn kiuj ekzistas maniero de purigi tiun kodon supren jam. Bone? Apenaŭ vi kopiado kaj alglui probable maltaŭga. Almenaŭ iam ni atingos kvar aŭ kvin aŭ 20 tusoj, sentas malbona praktiko. Ni simple observu kopion, alglui. Kio estas la evidenta solvo por purigi ĉi programo kolektis? Spektantaro: Cirkla. Parolanto 1: Yeah. Do uzi buklo. Kaj ni povas uzi por-ciklo, tempo buklo, ajna nombro da aliroj. Kaj efektive, jen kio ni faras en versio tie. Mi anstataŭe reskribita ĝi en versio unu el cough.c esti nur tuso ene por-buklo. Bone, sed tie estas ŝanco nun al ia komenco desegni ĉi iom pli kiel la leciono ni instruis antaŭ momento, kio estas this-- supozu ke mi volis krei funkcion nomita tuso, ni konsideru por nur momento kion ĝi tuj aspekti. Do se mi volas ion tusi, mi nur bezonas uzi print f ene la funkcio. Kaj ja certe. Kaj fakte, ĉiuj ĉi tempo, ajna tempo vi estas presi ion la ekrano, programisto vokus ke kromefikon. Tio ne min disdonanta reen iu valoro. Oni min prenante iun agon kiu eble estas vide evidenta. Sed tiu funkcio tuso, ĝi revenos ion bazita sur ĝia unua linio? Ne, ĉar lia reveno tipo estas malplena, kiu signifas nur ĝi ne disdonanta mi ion reen. Povus esti faranta ion vide, sed ĝi ne estas disdonanta min malantaŭeniri paperpeco kiel pasintsemajne. Ĉu ĝi bezonas neniun enigo? No. Kaj do ĝi estas nula tie ankaŭ. Do ĉi tiu estas ankaŭ speco de super-Engineering tiun problemon. Dekstra? Mi jam faris la programon pli kompleksa, pli linioj de kodo, Mi ne faris ajnan pli praktika, sed tio estus paŝanta ŝtono, eble, por pli ampleksa kunteksto kun pli komplika kodo. Sed kio pri tio? Kion mi done-- nur rigardante tiu sen rigardi la komenton ĉe la plejsupro de la file-- kio havas Mi fundamente farita tie kun mia tuso implementación kiu estas malsama? Jes, en reen? Publiko: Faru tiel vi povas havas karakteron elŝalti. Parolanto 1: Yeah. Do tiu sentas speco de agrabla. Dekstra? Estas kiel aldonante esprimilo al via programo aŭ via funkcio, en tiu kazo. Ĝi ankoraŭ redonas nenion. Ĝi povus havi vidan kromefikon, ĉar ĝi estas vokanta print f. Sed nun mi parametrigita la funkcio, kiu signifas Mi specifita prenita enigo de tipo int kaj nomas ĝin n, sed mi povis nomi ion mi volas. Fakte, ĝi povus nur esti fojojn esti eĉ pli eksplicitaj. Kaj tiam mi povis nur ŝanĝi ĉi tie. Sed la punkto estas ke tio ĉi estas kiel mi krei funkcion kiu prenas enigo. Kaj se vi memoras klakanta tra eble rete en unu de la piediro-throughs, La kvara kaj fina tuso ekzemple, vi rimarkos tie mi ĝeneraligis mia kodo further-- speco de distrita ĝi cetere. Kiel tuso kaj terno, ambaŭ estas pri kiel diri ion aŭ fari ia sono. Konservu estus la responda Scratch bloko. Kaj do, kion mi faris en tiu versio, kion ni povas nur ekrigardi, Estas tuso estas nur kiel diri, [TUSO], tusi, kaj dume, sneezing estas kiel diri, [ACHOO]. Kaj tial mi ĝeneraligis la efektivigo de tiuj nun efektivigado ĉi genérico funkcio, diru, kio estas interesa por hodiaŭa celoj nur ĉar ĝi ankoraŭ ne havas reveno tipo. Sed kiel multaj enigoj gxi portas? Publiko: Du. Parolanto 1: Du. Kaj do se vi volas preni en du argumentoj, nur apartigi ilin per komo. Kaj se vi volas tiam voki tiun funkcion, rimarki ke vi nur voki diru, citaĵo, unquote, por la unua argumento, komuna n, por la dua argumento. Do denove, ni nur nun havas la konstruelementoj por ke ni povas reale implementar iuj de niaj propraj funkcioj. Bone. Demandojn pri tiuj? Do nun ni senŝeligi reen mantelo okazo. Kaj la celo, finfine, estas sekva semajno problemo aro tuj estos sur cryptogrophy-- la arto de grimpadi informo. Kaj specife, la informo devos vin ĉifri aŭ deĉifri tuj estos tekston. Kaj do tian invitas la demando hodiaŭ kiel bone, kio okazas sub la kapuĉo kun teksto preter ASCII el semajno nulo, kiel ni vere komencos manipuli ĝin? Do jen Zamyla nomo. Kaj en teksto, kiu eble estos inputted en kiel la akiri string funkcio. Kaj ekde nun, kiam vi vidas kordo kiel this-- Z-Al-M-Y-L-A-- komenci pensi pri ĝi kvazaŭ ĉiu de tiuj karakteroj estas en skatolo de lia propra. Kaj efektive, en semajno aŭ tiel estas tempo, ĉiu de ĉi tiuj skatoloj tuj reprezenti tre specife bloko da memory-- mordo de memoro. Do ĉiu el tiuj literoj, finfine, reprezentos 8 bitoj. Kaj ni efektive vidas kio okazas sur sub la kapuĉo en mia komputilo. Sed por ne sufiĉas nur rigardi Zamyla tra ĉi lenso, per kiu ĉiu de tiuj literoj estas en lia propra skatolo. Kaj bonguste sufiĉa en C ni povas aliri ĉiun el tiuj skatoloj rekte. Do se vi volas ricevi la unuan letero de ŝia nomo, super facila en C. Se vi deziras akiri la lastan letero, super facila tiel kun peco de nova sintakso. Do mi tuj iros antaŭen en CS50 IDE kaj malfermu la kordo nul streketo C. Kaj en ĉi tiu ekzemplo tie, estas paro de novaj aĵoj okazas. Do unue en linio 19, ni vidis tiun before-- get kordoj. Do ĝuste kiel rapida prudento ĉeko, se iu povus oferi parole laiko eksplikado de kio okazas en linio 19. Kiel ĝuste traduki tion ĉi en Esperanta ke kunloĝanto ne en CS50 komprenu. Yeah. Publiko: Havu la uzanto enigo kordo kaj stoki ĝin en variablo s. Parolanto 1: Bona. Havi la uzanto enigo kordo kaj stoki ĝin en variablo s. Tio estas granda. Do sur la dekstra flanko, ni nomas get kordoj. Kiu resendas valoro kiu ne akiras asignita de dekstra flanko maldekstren-mano bordo, en variablon nomita s kiu estas desegnita por stoki kordo. Ekzakte. Do nun linio 22, po la komento en linio 21, evidente presas ke kordo unu signo por linio. Sed kiel? Do unue, ni pravalorizi mi al 0. Kaj tiam kiel ni atingos Fine de Zamyla nomo? Nu, fine de Zamyla nomo, mi povis permane tajpi en la lasta signo de ŝia nomo iel, aux la numeron de ĝi. Dekstra? Se ni superas here-- Z-Al-M-L-- Y-L-A-- do mi povis tajpi en. Kio estas la indekso de Zamyla lasta letero? Se tiu estas 0-- parolante kvazaŭ programmer-- 0, 1, 2, 3, 4, 5, Mi heard-- tiel ja, la lastan literon en Zamyla nomo estas la sesa, sed se ni kalkulu de 0, ĝi tuj estos numero 5. Observu do, ke en menso ĉi tie. Ĝi rezultas tie estas funkcio en C nomita strlen, kaj reen en la tago kaj al tiu tago ankoraŭ, multaj programistoj elektu al sync nomoj por iliaj funkcioj kiuj sonas kiel la vortoj ili provas diri. Do strlen estas kordoj longo. Kaj tiel kion farus kordo longo de S reveni kiam Zamyla estas la enigo? Publiko: Kvin. Parolanto 1: Z-Al-M-Y-L. Ses. Dekstra? Kio estas la longo de Zamyla nomo? Dekstra? Kaj ĝuste en realeco, ses literoj. Dekstra? Do kion tio signifas por nia buklo? Ni tuj iras el 0 ĝis ses, kiuj tuj donos nin kvin ripetoj. Kion ni faru sur ĉiu ripeto? Nu, procento C, iu divenis la alia tago, signifas lokokupilo por kio? Publiko: Char. Parolanto 1: Nur char. Do ununura character-- ne multoblaj karakteroj kiel kordo. Kaj poste jen la nova linio ke ni hvas presi el. Kaj poste jen la nova sintakso. Se vi volas presi la ia karaktero en la kordo S, tiel diri, vi povas simple diri la nomo de la kordo S, kaj tiam malfermu kvadrata krampo, kaj tiam fermis kvadrata krampo, kun i la meza. Kaj ĝi estas speco de bela en tiu Ĉio aspektas kiel kvadrato samkiel la kvadratoj kiuj Zamyla La karakteroj ekzistantaj je tiu bildo ekzistas. Do se mi vere kuras ĉi Nun ni vidu kio okazas. Faru ĉenon 0 dot oblikvo string 0, kaj tiam mi tuj tajpi en Zamyla nomo. Mankas prompto, ĉar mi ne uzi print f, sed tio estas bone. Mi nur scias, kion fari. Kaj ja, ĝi presas el Zamyla nomo, unu po linio. Nun ni iom malzorgema. Supozi ke mi ne konis pri strlen kaj mi kalkulis, Bone, neniu tuj havi nomi granda ol kiel 50 karakteroj. Ni iru antaŭen kaj rekompili ĉi kaj rerun ĝin, kaj poste tajpi en Zamyla denove. Logike, kio estas la programo provos presi? Z-Al-M-Y-L-A tiam kiel 45 nekonata bajtoj de memoro. Kaj efektive, ni revenos al tiu ideo de memoro. Sed nur logike, se Zamyla nomiĝas tiu longa, kiel por la bildo tie, kion ni dirante estas teni presado, teni presado, konservi preso, gardu presado, teni presado, tutan vojon al la 50-karaktero, kiu kiu scias kio okazos. Do ni vere rigardi. Ni entajpi Zamyla. Interesaj. Ni akiris bonŝanca. Nur tuta fasko de blanka spaco. Oh. Ekzistas unu funky karaktero. Ĝi aspektas ia kiel bizara demando marki tie, sed ekzistas Zamyla nomo. Ni ricevas vere temerara. Kion pri ni presi 500 blokoj en nekonatan? Ni iru antaŭen kaj fari ĉi tiel kaj tiam re-run. Kaj ni tutekrana ĝin, ĉar ni bezonas vidi pli spaco. Zamyla. Got bonŝanca denove. Dare ni preni pli temerara? Ni lasu pli malzorgema. 50.000 karakteroj. Tio estas konstatitaj ne estas bona ideo. Bone. Faru ĉenon 0. Tiu estos nia lasta demo. Zamyla. Uf. Uf. BONE. Do mia memoro estas vere malplena nun, kiu estas fakte speco de oportuna. Kion mi klopodas akiri to-- gxuste. Kaj nun mi simple tuj senzorge. 500.000. Make-- ni kompleta ekrano. Enter. Zamyla. Tie ni marŝos. Mi havas neniun ideon kio tiu estas, sed sonas malbona. Bone. Kaj fakte, baldaŭ, se vi estas inter la bonŝanca malmultaj en oficejo horoj kaj en problemo aro, vi povus tre bone renkontas tiun. Segmentación kulpo vere faras havas klare difinitan signifon. Ĝi signifas ian eraro rilatante al segmento de memoro. Kaj en lego de terminoj, ĝi signifas ke ni tuŝis memory-- ni uzis RAM en mia komputilo ke mi ne havis aliron al. Kaj tio estas kio estas ambaŭ potenca kaj ankaŭ danĝera pri C estas ke vi fakte havas senbrida aliro al la tuteco de via programo memoro aŭ bajtoj aŭ RAM, pli specife. Do kvankam Zamyla nomon Estas nur ses karakteroj longe, Mi ankoraŭ povas iri ie ajn en memoro mi volas. Kaj kiel flanken, se vi havas iam legis iun artikolon tra la jaroj pri iuj servilo aŭ iu programo Akiranta fendita aŭ hakita tio utiligita ion nomata buffer overflow ekspluati ke ni vere raportas en kelkaj semajnoj, tio estas ĝenerale raportante iel trompante komputilo en iranta bone preter la limoj de memoro Ke gxi havas, kaj trovanta ion sukaj en tiu memory-- a Pasvorto, eble, maniero de circumventing iuj seria numero kontroli, aŭ nur ĝenerale povis trompi la komputilo estas ekzekuti kodo kiu ne estis intencita. Sed ni revenu al realo por nur momento kie tiu programo estis implementado kun strlen, kaj enkonduki unu afero tien. Kio novas inter tiuj supraj tri linioj? Do string skalara h. Ĝi rezultas tie estas tio biblioteko nomita String Dot H, aŭ la kordo biblioteko, kies kaplinio dosiero, por tiel diri, Estas kordoj skalara h kiu donas al mi aliro al ĉi strlen funkcio. Se mi preterlasas ke la tradukilo estas tuj krias al mi en iu formo. Sed vi scias kion? Nun ni akiras vere nuancita. En linio 22, estas iu speco de inefficient-- malbone desegnita, arguably-- pri ĉi tiu linio de kodo. Pensu reen al kiel por-buklo realigitajn kaj kio paŝoj okazi denove kaj denove kaj again-- la inicialización, la kondiĉo, la kodo kiu ricevas ekzekutita, tiam la pliigo aŭ la ŝanĝo, tiam la kondiĉo, tiam la kodon, tiam la ŝanĝo, tiam la kondiĉo, do la kodon, tiam la ŝanĝo, kaj tiel antaŭen. Do kio povus esti iom preocupante aŭ nebone farita tie? Jes, en blua. Publiko: Strlen estas nomata multfoje. Parolanto 1: Yeah. Do strlen nomiĝas multfoje, sed kio estas la longo de Zamyla nomo la unuafoje la buklo ekzekutas? Publiko: Ses. Parolanto 1: Ses. Nu, kio estas la longo de sia nomo duafoje la kodo ekzekutas? Publiko: Ses. Parolanto 1: Bone. Estas ankoraŭ ses. Dekstra? Zarla nomo havas ne ŝanĝiĝis, eĉ se mi estas rigardanta je nur parto de la leteroj en ŝia nomo. Kaj do la fakto ke mi estas efike petante tiun demandon, kio estas la longo de Zamyla, kio estas la longo de Zamyla, kio estas la longo de Zamyla, ses apartaj fojoj, aŭ sep eĉ, estas nur stulta, ĉar tio estas senŝanĝa tiun respondon. Kaj do, kion mi povis reale fari estas this-- en string unu Mi havas marĝene pli bona versio tie. There-- whoops-- string du mi havas a marĝene pli bona versio kien Mi faros this-- anstataŭ ĝuste inicialización i al 0, mi ankaŭ kun komo deklari duan variablon nomata n-- mi ne devas diri int denove. Mi ne devus, fakte. Sed mi diras n. Kaj tiam mi pravalorizi n al la strlen de n, tiel ke nun Multfoje does strlen get ekzekutita en entute? Nur unufoje. Kaj tiel tio estas kion ni volas diri pli frue pri bona dezajno. Fakte unufoje vian kodo estas ĝentila, revenanta kaj pensante tra, mi estas uzanta kiel malgranda memoro aŭ kiel malmultaj sekundoj aŭ milisekundoj de komputila tempo ebla implementar iu problemo? Kaj mi tuj rulumu kaj nur mencii ke ekzistas tiu mencio de nulaj en tiu versio, sed ni revenos al tiu post nelonge. Ĉar nuntempe, ni rigardu al kie ĉi tiu tuj kondukos nin. Do oni, ĝi rezultas ke nun ke ni havas la kapablon rigardi individuajn karakterojn, ni povas utiligi ion de semajno 0 kiu estis tre arkaikaj kaj ia neinteresa tiutempe. Sed nun, kaj precipe kiam ni akiri al ĉifriko en semajno, ĝi tuj estos sufiĉe potenca. Ĝi rezultas ke iuj datumoj types-- ints kaj flosoj kaj signoj kaj kordoj kaj aliaj things-- iuj el ili povas tre facile konvertita al alia. Ekzemple, kiam ni parolis pri ASCII iam ago-- jen la majuskloj A tra M, dot, punkto, dot-- ni diris ke ekzistas surĵeto inter tiuj literoj kaj numeroj. Kaj fakte, ĝi tenas veran por minuskla literoj ankaŭ. Minuskla a estas 97, ĉefurbo estas 65. Kaj estas kelkaj en ASCII, kiu estas nur tiu surĵeto sistemo por ĉiuj tiuj aliaj literoj. Do kion tio signifas? Nu, mi tuj iros antaŭen kaj malfermi supren reala rapide ion nomatan ASCII 0, la plimulto de kiuj estas komentoj. Kaj denove rete vi povas ĉiam rigardo tra la komentoj. Kaj rigardu kion ĉi tuj faros. Do ĝi estas alvenis ĉefa funkcio. Mi malfacile-kodita la nombrojn nur por nun, ĉar mi scias kion mi faras. Mi scias kion mi volas vidi ĉi tie. Kaj mi pravalorizitaj mi al 65. Kaj mi kalkulado tra 26 literojn entute. Kaj kion mi povos presi unu linio samtempe se vi povas interpreti ĉi emfazita linio? Kio gets presita? Yeah. Spektantaro: Ĉu vi presi la literon kiu respondas al la mapo de la letero valoro kaj entjera valoro? Parolanto 1: Ekzakte. Mi tuj presi la letero responda al la entjera valoro, kaj inverse, kiel sekvas. Nu tiu, iu diris antaŭe, estas nur lokokupilo por char. Ĝi ankoraŭ estas. Tio, kompreneble, estas lokokupilo por int-- Ne nova linio. Kaj nun rimarkas, mia unua valoro kiu Mi ŝtopanta en por ke lokokupilo ne nur I. mi dirante, en krampoj, char mi, kiun la parenthetical char estas rakontanta la tradukilo, trakti mi ne kiel kio estas, kio estas nombro. Trakti ĝin kiel fakta karaktero. Dum kiu la dua valoro mi ŝtopanta in-- I-- devus nur esti nombro. Do se mi kompili ĉi program-- do tiu estas fari ASCII 0, dot oblikvo ASCII 0-- Mi simple akiri tiu oportuna malgranda abako ke montras min ĉiuj eblaj mappings sen bezono pripensi gxin tra aŭ kompreni ĝin sur mia propra. Kaj mi ankaŭ presi ekstere, rimarki la minusklaj literoj, ĉar kelkaj linioj poste, mi ankaŭ printi ĉi surĵeto tiel, kiu estas nur diri, ke iam vi komprenos kio okazas sub la kapuĉo, ĉu aŭtomate konvertas reen. Kaj fakte, se iu el vi iam faris tion en grado lernejo aŭ aŭdis pri iu míticamente prenante noto kaj pasante ĝin al sia aŭ ŝia amiko en klaso, sed vi grimpis la literojn per kiel A iĝas B, kaj B iĝas C, aŭ io pli komplika ol tio, nu, Kiel volus vin iras pri efektivigado ke kiel infano? Nu, vi nur ia scias A iĝas B, B iĝas C, sed matematike, Kio estis tio kid doing? Kion vi aldonante al ĉiu litero? Efike, 1. Do kiam vi ŝanĝas A al B, kiu estas ia kiel ŝanĝanta 65 al 66, kion matematike signifas simple aldoni 1. Do se vi estus implementar ke iom trompaj tekniko cxar via instruisto en kodo, vi plenumadu ekzakte tion ĵus aldonante ununuran leteron kune. Do antaŭ longe, ni estas tuj vidos kiel ni povas utiligi tiun al reale aŭtente scramble kaj unscramble informo. Intertempe, sciu ke ni komencis enkonduki paron aliaj bibliotekoj here-- la kordoj unu hodiaŭ. Kaj tre helpema paĝaro espereble vi trovos nomiĝas reference.cs50.net, kiu la instruistaro kunmetis, tial se vi volas rigardi supren kiel strlen verkoj, vi povas ektajpu la funkcia nomo, klaku strlen tie kaj tiam malpli komforta klarigo tuj aperos. Aŭ se vi volas ke la oficiala Linukso-bazita klarigo, Vi povas alklaki pli comfy ĉe supra dekstra, kaj ĝi prezentos la sama informo, sed en pli kompleksaj terminoj. Tio estas utila rimedo por efektive scias kion ĉiu faras. Venontfoje ni tuj rigardu Ovaltine kaj pli, kaj enkonduki nin al la mondo de ĉifriko. Antaŭ tiam, ni vidos vi poste tiun semajnon. Kaj nun, Colton Ogden. Vidu vin merkredon. [MUZIKO Ludante] [MUZIKO Ludante] Parolanto 1: Kion la [Bleep] vi faras? Parolanto 1: Mi manĝas mian deserton? Kiel vi manĝos ĝin? Kun viaj manoj? [MUZIKO Ludante]