Parolanto 1: Bone. Bonvenon dorso. Jen Semajno Du el CS50, kaj ni havas ĝis nun estis uzante funkciojn sed plejparte prenis ilin por sentado. Ni uzis printf kiu havas la kromefikon de presado aĵoj en la ekrano. Ni uzis get-int, get flosi. Sed kion se vi vere volas krei viaj propraj funkcioj, kiel kelkaj el vi eble jam komencis faru por Problemo Ara Unu, kvankam ne strikte necesaj? Nu, ni iru antaŭen kaj reviziti ke problemo de nur demandante la uzanton por lia nomo kaj presi iun sur la ekrano, sed provu faktorigi iun de la komuneco, ke ni vidis en nia kodo tiom. Do, per tiu mi volas diri al la sekva. Mi tuj iros antaŭen kaj krei nova programo, simple vokas ĝi hello.c kiel kutime. Mi tuj iros antaŭen kaj donu al mi inkludas normon io.h ĉe la supro. Mi tuj ankaŭ donas min preemptively la CS50 biblioteko por ke Mi ne get kriis al la tradukilo. Kaj nun mi tuj iros antaŭen kaj deklari int, ĉefa, malplenon. Kaj tiam en ĉi tie, ĉi tiu estas kie mi volas komenci subcontratar funkciojn al iu alia funkcio kiu mi mem tuj skribos sed tio ne nuntempe ekzistas. Ekzemple, supozu, ke mi volis skribi funkcio kiu min permesas elprinti saluton, komo, kaj tiam iuj uzanto nomo. Anstataŭ daŭrigi fari printf saluton,% s, ĉu ne estus agrabla se estis nur funkcio nomata ne printf sed presita nomo? Do alivorte, mi volas povi skribi programon kiu faras iom iu kiel ĉi tio. Unue, mi intencis diri printf via nomo, tiel instigante la uzanto donu al mi sian nomon, kaj tiam mi estas tuj uzi la familiaran string s al deklari kordo. Donu al mi variablon de tipo ĉenon, nomas ĝin s, kaj vendejo en kiu la rezulti de nomi atingi ŝnuron. Sed nun en semajnoj pasis, mi havus iom tediously faris saluton,% s / n. Kaj en alia vortoj, kiujn ni vidis ĉi Ekzemple faskon da fojoj, kaj ĝi estas bagatela ekzemplo, ĉar restas nur unu linio de kodo tial estas vere ne grandan multon por konservi tajpi revenis. Sed supozu ke tiu linio de kodo fakte estis igi sxargxo, ĝi ne estas unu linio de kodo, sed ĝi estas 10 linioj de kodo paro semajnoj de nun, kaj vi nur nun laca de kopii kaj alglui aŭ retyping tiu sama kodo. Ĉu ne estus bela anstataŭ fari printf saluton,% s kaj tiel plu, ĉu ne estus bone se estis ĝuste funkcio nomita presita nomo kiun prenas argumenton - en aliaj vortoj, ĝi prenas enigo - kaj tiam punktokomo. Do tiu funkcio, ne volis ĝin estu bela se tiu ekzistis? Tiam mi ne devas maltrankviligi kio printf estas, kion% s kaj ĉiuj tiujn kompleksojn, kiuj estas Ne ĉiuj kiuj interesa. Ili estas utilaj. Do presita nomo, bedaŭrinde, ne estis elpensitaj iuj 40 plus jarojn. Neniu pensis skribi ĝin. Sed tio estas la beleco de havi programlingvo, same kiel en Scratch vi povas difini kutimo blokojn, tiel en C kaj plej iu ajn lingvo, ĉu vi difini vian propran funkciojn, povas vi difinas vian propran funkcioj. Do kvankam ni ricevas ĉefa per aŭtomate senpage, oni povas deklari niaj propraj funkcioj. Do mi tuj faros iu ĉambro tien ĝis supre, kaj mi iros por deklari mian propra funkcio kiu tuj aspekti iom stranga en komenco sed ni venos reen al ĉi tiu post nelonge. Mi tuj diros dezerta, sekve indikante ĉi tiun funkcion faras io, havas kromefikon, sed ne revenas ion por mi en la sama maniero kiu alvenas int aŭ akiri kordo mem faras. Kaj mi tuj donos ĉi tiun funkcion de nomo de presita nomo, kaj mi tuj specifi ke tiu ulo tuj preni cxeno, kaj mi tuj vokos ke kordo nomo. Mi povus nomi ion mi volas, sed mi volas mian kodo esti mem-dokumenti. En aliaj vortoj, se unu el vi por malfermi ĉi dosieron kaj legis gxin, vi povus fari speco de dedukti de la nomo de tiu enigo kiun rolon ĝi estas supozitaj por ludi. Kaj nun sub tiu, mi tuj malfermos krispa streĉa kaj fermitaj krispa streĉa, kaj tiel rimarkos mi sekvis la saman ŝablono sur linioj kvar tra sep kiel Mi estis sekvante por bona semajno pli nun inter, ekzemple, linioj naŭ kaj 14 kiu formi ĉefa. En aliaj vortoj, presi nomo estas alia funkcio. Nu, la tradukilo ne tuj scias nomi tion aŭtomate ĉar mi laŭvorte ĵus elpensis ĝin, sed scios ankoraŭ nomi ĉefaj aŭtomate, kaj tiam kompreneble en linio 13 Mi alvokos miajn proprajn funkcio. Kaj ĉar mi deklaris, ke funkcio sur linio kvar antaŭe ĉefa, ĉi tio tuj instrui la tradukilo kio citaĵo, unquote, "print nomo" signifas kaj kion devas fari. Do mi estas ia donante al ĝi novan kutimo bloki en la kunteksto de, ekzemple, nulo. Do ĉi tie mi povas meti ke tre komuna aŭ _recurring_ mastro de kodo mi observos skribi en klaso, printf % S saluton,% s / n ', - Kion mi volas meti tie? S? Do mi volas meti nomon en tiu kunteksto. Do rimarki iom de dicotomía tie. Ĉar mi estas deklarante mia propra funkcio kaj mi iom arbitre nomas ĝin presi nomo, kaj ĉar mi havas specifita en krampoj ke tiu funkcio prenas unu argumenton, la tipo de kiu estas ĉeno - tiel ĝi estas vorto aŭ frazo aŭ io simila - kaj Mi petas ke argumento nomon, kiu signifas la sola variablo kiu estas en medion, por tiel diri, estas nomo. S nur ekzistas inter kio du krispa krampoj, kompreneble? Nu vere, samkiel linio 10 tra 14, do ĝuste kiel lunde ne povas uzi S, sed kion mi povas fari estas pasi S enen presita nomo. Presi nomo ĝuste tiel okazas doni ĝin alias, sinonimo, alnomo, nomante ĝin nomon, kaj nun uzante ĝin en ĉi tiu linio. Do nun mi savos tiun, malzomi. Lasu min antaŭeniri kaj realigi saluton. Aspektas bone. Ne kraĉi ĉian eraroj. . / Saluton Eniru. Kio estas mia nomo? Davido. Kaj saluton David. Do ne cxio, kion ekscita, sed ĝuste pensas nun. Vi nun havas tiun saman ingredienco kiel ni faris en Scratch al fari nian propran funkcioj. Sed estas iom de gotcha. Supozu, ke mi ne vere pensis ĉi tra kaj mi efektive sen vere pensas pri ĝi skribis tiu funkcio ĉi tie. Sentas perfekte racia. En Scratch ne ekzistas nocio de situo en via skriptoj. Vi povus meti tien, unu ĝis ĉi tie, unu ĝis ĉi tie, kaj ĝi povus komenci rigardi iom senorda se vi ne kuŝis ĝin nete, sed ne gravas kie fizike la skriptoj estis sur la ekrano. Bedaŭrinde en C - kaj ĉi tiu estas malsama lingvoj kiel Java kaj Python kaj aliaj, ke vi povus esti familiara kun - bedaŭrinde en C, ordono faras gravas ĉar horloĝo kio estas okazos nun. La defaŭlta funkcio kiu okazas ekzekuti estas, kompreneble, la ĉefa. Ĉefa tuj voki print nomon sur linio ok, sed bedaŭrinde, la tradukilo eĉ ne scias, ke presita nomo Ekzistas ĝis ĝi alvenas al linio 11, kiu bedaŭrinde estas tuj estos tro malfrue. Do ni estas farata saluton. Kaj nun malbenitaj, du eraroj generita. Do nun lasu min rulumi supren al la tre unue, kiel ni devas ĉiam fari, kaj rimarki ke ĝi estas kriante al mi, "Implica deklaro de funkcio presi nomo. " Do ni jam vidis tiun mesaĝon antaŭe, implicitan deklaron de funkcio. Kiam ni vidis tian eraron? Kiam mi ne inkludas bibliotekon. Se mi forgesis cs50.h kaj mi akirus kriis al por akiri ŝnuro aŭ akiri int. Sed en tiu kazo, ĉi tiu funkcio print nomo ne estas en biblioteko, ĉu ne? Ĝi estas laŭvorte en tiu dosiero, tiel kio estas vere la problemo? Nu bedaŭrinde en C, ĝi prenas vin tiel nekredeble laŭvorte, ke se vi bezona funkcio nomita print nomon ekzistas, vi devas aŭ implemento tiu funkcio ĉe la plejsupro de via kodo por ke ĝi estas atingebla por malsupreniri funkcioj, sed sincere, kiu igas fuŝa tre rapide. Persone, mi ŝatas meti ĉefa unua ĉar tiam ĝi estas tre klara kio ĉi programo faras unuavide. Kaj pli, vi povas eniri en stranga angulo kazoj kie se x volas nomi y sed y povus nomi x, vi nur fizike ne povas efektive metis unu super la alia. Sed ĝi rezultas en C, oni povas solvi ĉi tre simple. Mi tuj metos iom da spaco ĝis ĉi tie, kaj mi simple tuj preemptively, kvankam iom redundantly, tuj instrui la tradukilo ke tie ekzistas funkcio vokis presita nomo, ĝi portas ĉenon, kaj mi tuj vokos ĝi enoficigi punktokomo. Do tiu nun en linio kvar, kion ni ne vidis antaŭe, estas deklaro de funkcio print nomo, sed estas nur promeso, ke tiu funkcio volo eventuale esti difinita, eventuale esti realigita. Ĉi nun mi povas lasi sole ĉar nun ĉi tiu estas la difino, la efektivigo, ia la lasta mejlo de la efektivigo de ĉi tiu aparta funkcio. Do sincere ĝi estas stulta, ĝi estas ĝena, sed ĉi tiu estas la vojo C estas, kaj estas ĉar ĝi prenas vin tre laŭvorte kaj, kiel komputilo sincere devus, nur ne precize kion vi diros ĝin al faru, kaj por ke ordigo estas grava. Observu do, ke en la menso kaj denove, komenci rimarki la rekursieca de ŝablonoj. Prognozoj estas vi faros, se vi ne havas jam, komencas renkonti mesaĝojn kiel ĉi tio unuavide ŝajnas tute kripta, sed se vi komencas serĉi tiuj ŝlosilaj vortoj kiel "Implicitan deklaron," vokis la funkcio en ĉi tiu kazo - kaj sincere, vi kelkfoje eĉ akiri iom verda karoto simbolo kiu diras al vi kie la afero probable estas - Vi povas komenci labori vian vojon tra ankoraŭ ne viditaj erarmesaĝojn. Demandojn en skribi vian propra funkcio en ĉi tiu maniero? Ni faru ion, ke estas iom pli konvinka. Anstataŭ simple fari iun kiu havas flanka efekto de presado, lasu min iri antaŭeniris kaj konservi novan dosieron, kaj ni instruos vin nomas tiun positive.c, kvankam ĝi estas tuj estos iom malsama kontre lasta fojo. Kaj ĉi tiu fojo, mi volas re-implemento lasta fojo la positive.C ekzemplo, kiu estas devigi la uzanto doni min pozitiva entjero. Sed mi devis uzi akiri int lasta fojo. Ĉu ne estis bela se estis funkcio nomita akiri pozitivajn int ke mi povus nur subcontratar ĉi peco de funkciojn al? Do la diferenco jen ni instruos vin apliki akiri pozitivajn int, sed kontraste print nomo kiu havis kromefikon - ĝi ne revenis ion al mi kiel numeron aŭ ŝnureto - get pozitiva int estas, kompreneble, tuj reveni, espereble, pozitiva int. Do ni faru tion. Inkluzivi cs50.h, Inkluzivi normo io.h. Mez ĉefa malplena. Kaj nun en ĉi tie, mi tuj iros antaŭen kaj diru int, nomas ĝin n, egalas akiri pozitivajn int. Kaj ĝuste kiel akiri int jam ekzistas ĉar la bastono skribis ĝin, mi tuj supozi por la momento kiu alvenas pozitiva int ekzistas, kaj nun mi iras iri antaŭen kaj diru printf, dankon pro la% i / n ", n. Do nun, se mi kompili tiun programon, kion okazos en mia fina stacio fenestro ĉe la malsupro de la ekrano? Mi tuj probable atingi tiun saman eraron kiel antaŭe. Do ni provu tion. Faru pozitiva. Kaj denove, implicitan deklaron de funkcio, atingi pozitivan int. Do ni povas solvi tion en kelkaj manieroj. Mi tuj teni ĝin simpla kaj simple meti mian deklaron tien kaj akiri pozitiva int. Mi bezonas la tn subskribon. La subskribo nur referencas al la estetiko de la unua linio de la programo. Do kion devus akiri pozitivajn int reveno? Do oni int. Mi volas diri ideale, ĝi revenus iu kiel pozitiva int, sed tio ne ekzistas. Ni ne vidis, ke inter niaj datumoj tipoj, do ni devas trakti la fakto ke ni havas tre malmultaj datumtipoj labori. Sed ni povas reveni al int kaj justa esperas, ke ĝi estos pozitiva. Ĝi tuj nomos akiri pozitivajn int. Kaj nun kion pri liaj argumentoj? Ĉu ĝi prenas neniun eniro? Ĉu ĝi bezonas neniun eniro? Do ne bezonas scii anticipe nenion. Get kordo ne, atingi int ne. Printf faras - gxi bezonas por havi iun enigo pasis en ĝin - kaj presita nomo bezonis iun enigo, sed akiri pozitiva int ne. Do mi tuj eksplicite diru al la tradukilo malplena. Void estas la foresto de io alia. Do malplenon per nenio tuj ene de tiuj parentezoj, punktokomo. Kaj nun sur la fundo de mia dosiero - kaj denove, mi nur esti speco de anal tie metante ĉefa ĉe la supro, kiu estas bona praktiko ĉar tiu maniero, iam ajn vi aux iu alia malfermas vian dosieron, la funkciojn pravas tie. Vi povas plonĝi en de kvadrata tiu. Do nun mi iros por duobligi ĉi, akiri pozitivajn int malplena, sed mi ne tuj batis punktokomo nun. Mi tuj malfermu krispa krampoj, kaj nun mi bezonas pruntepreni iuj ideoj de lundo. Do kiel vi memoras, ni faris ion kiel do la sekva dum io vera. Kaj kion mi faru? Mi faris iun kiel doni min pozitiva entjero, iom de prompto. Mi povus uzi vortojn mi volas. Kaj poste mi uzis kio? Int n egalas akiri int, neniu argumentoj por ĝi. Kaj rimarkos la diferencon. Kiam vi nomas funkcio, kiam vi uzas funkcio, vi ne metas en malplenon. Vi nur fari tion kiam deklari funkcio, instruante la tradukilo kio ĝi devus atendi. Do vi ne bezonas meti neniigas tie vi mem. Kaj nun kio estis mia kondiĉo? Nu, n estas ne egala al pozitiva, sed tio estas nur pseŭdo-kodo. Do kiel mi esprimi tion pli pure? Do malpli ol aŭ egala al nulo. Do denove, rimarki vi povos fari malpli ol aŭ egala al. Kvankam ĝi estas du apartaj simbolojn, vi povas fari tion sur vian klavaron kiel tia. Sed estas ankoraŭ cimon, ke Mi ŝraŭbita ĝis lasta fojo ankaŭ. Mi devas deklari - ĝuste. Mi devas deklari n ekstere de la ciklo. Do mi bezonas meti n ĉi tien, kaj mi ne volas re-sciigu tie eble mi akiros novan variablo. Mi nur volas atribui valoron en ĉi tie. Kaj nun mi ne tute farita tie. Lasu min eliri antaŭeniras de mi mem kaj ŝajnigi mi faris. Faru pozitiva, kaj nun estas nova eraro. Kontrolo atingas finon de ne-nula funkcio. Do nova erarmesaĝo, sed se vi speco de turmentus aparte ĉiun el la vortoj, probable aludoj ĉe kio estas malbone. Kontroli. Kontrolo simple signifas la ordon de operacioj en programo. La komputilo estas en kontrolo kaj io iris malbone. Do ĝi atingas la finon de ne-nula funkcio. Kio funkcio estas ŝajne raportante al? Kio funkcio estas ne-malplena? Do nepre pozitiva int, kaj iom malklara en tiu puto, ĝi estas speco de dezerta. Ĝi havas specifon de malplena por lia argumentojn, sed lia eliro tuj esti de tipo n. Do la vorto maldekstre estas la tn reveno tipo. La vorto en la interno estas ĉi tie la nulo aŭ pli argumentoj ke funkcio prenas. Do kion mi devas fari? Je ĉi tiu punkto en mia kodo, linio 21 kie la palpebrumantaj prompto nun estas, mi havi pozitivan int ene de la variablo nomis n. Kjel mi redonas gxin al ĉefa? Laŭvorte. Reveno n punktokomo. Tiel same Colton revenis pecon de papero kun respondo al mi per delasante tiu peco de papero en la malgranda nigra skatolon sur la tablon, por fari tion en kodo, vi laŭvorte ĝuste skribi, reveni n, kaj ĝi estas kvazaŭ Colton estis transdoni al mi ion fizika dorso. En ĉi tiu kazo, kio okazas estas akiri pozitiva int tuj transdonos reen kio estas supozeble pozitivan entjero por kiu? Kie tiu valoro finos? Kiu finas en tiu variablo, n, kaj tiam ni iros kun linio naŭ. Do, en aliaj vortoj, en ordo de operacioj, ĉi tiu programo komenciĝas ekzekuti, kaj la tradukilo realigas, ho, vi volas ke la biblioteko? Forliberigu min kapti kion ajn estas ene tio. Ho, vi volas ke la normo IO biblioteko? Forliberigu min kapti kion ajn estas ene tio. Kion faras la tradukilo diri al sin kiam batas linio kvar? Ho, vi promesis realigi la funkcio nomita akiri pozitiva, sed ni reiros al kiu poste, io kune tiujn liniojn. Mez ĉefa malplena nur signifas jen la intestoj de mia programo. Linio sep estas nur krispa streĉa. Linio ok diras maldekstre, doni min 32 bitoj por entjero, nomas ĝin n. Sur la dekstra flanko, estas dirante akiri pozitivajn int. Nun ni paŭzo tiu rakonto ĉar nun Mi ne daŭre movas mian kursoro malsupren. Mia kursoro nun iras malsupren tie ĉar nun ek pozitiva int ekzekutas. Int n estas deklarita. Ĉu la jena. Printf donas al mi pozitiva entjero. Akiru la int de la uzanto, konservas ĝin en n, kaj eble fari tion denove kaj denove. Ĉi buklo signifas ke ĉi tiu kodo forton ekzekuti supren kaj malsupren, kiel ĉi denove kaj denove, sed kiam la uzanto fine kunlaboru kaj donas al mi pozitiva int, mi batis linio 21, je kiu punkto la nombro estas transdonita reen, kaj kiu mi devus reliefigi nun? Naŭ. Kontrolo, por tiel diri, denove por kovri naŭ. Tio estas la linio kiu estas nun zorge. Do jen kio estis okazante ĉiuj tiu tempo sub la kapuĉo, sed kiam ni uzas funkciojn kiel printf aŭ eĉ akiri string ke iu alia skribis por vi, kontrolo estis transdonita off por aliulaj kodo linio por linio por linio. Ĝi simple ni ne povis vidi ŝin kaj ni ne povis vere priskribi ĝin en ĉi programo ĉar ĝi estas en iuj aliaj dosiero en la malmola disko dorsoj al ni. Do ni vere tradukigi kaj kuri ĉi nun. Faru pozitiva. Kompili, tio estas progreso. . / Pozitiva. Donu al mi pozitiva entjero. Ni estu malfacila. Negativaj 1. Nulo. Ni donu 50. Dankon por la 50, kaj tiel kontrolo nun revenis. Demandojn, tiam, sur tiu? Jes? [Inaudibles]. Diru denove. Ho, bona demando. Do vi eble rimarkos paralela tie Mi estas speco de tranĉi angulo plu. En linio 12, mi diris, atingi pozitivan int redonas int, sed per tiu sama logiko, ĝi nun staras rezoni ke en linio ses, mi dirante ke ĉefa revenas an int, sed kion ni neniam havis en iu el niaj programoj? Ni neniam havis mencion ĉi ŝlosila vorto reveno. Do rezultas ke en C, almenaŭ la versio de gxi, ke ni uzas farita en 1999, teknike, ĉi tiu estas okazas al vi aŭtomate. Anytime vi apliki programon kaj vi apliki funkcio nomita ĉefa, tiu funkcio revenos nulo por implicite, se vi ne diros alie, kaj nulo estas nur konvencio. La mondo denove nulo tiel indikante ke cxio estas bone, efektive lasante nin kun kvar miliardoj eblaj aĵoj kiuj povus iri malĝusta tiel ke se ni revenos unu, ke povus signifi kodo kiu signifas tiun afero iris malbone. Ni povis reveni du, kiu signifas tiu alia afero iris malbone. Ni povis reveni kvar miliardoj, kiujn signifas tiu alia afero iris malbone. Kaj se vi nun pensas pri via propra PC aŭ Mac, vi eble memoras, ke kelkfoje vi ricevas kamufla erarmesaĝojn de programaro kiu vi estas uzante, kaj kelkfoje havas homan amika priskribo, sed tie estas ofte kodo aux nombro sur la ekrano? Se tiu ne venas al la menso, nur teni okulon el por ĝi. Tio estas tipe kio tio kodoj estas referanta al. Ili estas inkluzivita en Microsoft Word kaj aliaj programoj tiel ke se vi prezenti cimraporton kun la entrepreno, vi povas diru al ili, ho, mi ricevis eraron nombro 45. Kaj iuj programisto reen al la kompanio povas rigardi ke ĝis en lia aŭ ŝia kodo kaj diri, oh, tio estas ĉar mi faris tiun cimon kaj tial la uzanto ricevis ĉi tiun mesaĝon. Sed sincere, nur iom distrante kaj iom teda al konkludi ke, almenaŭ en nia unuaj kelkaj programoj, do ni estis preterlasante ĝin. Sed ĉio ĉi tempo cxiu el via funkcioj ĉefa jam sekrete havis ĉi linio aŭtomate aldonis por vi de la tradukilo, kun nur konvencio por savu vin iom da tempo. [Inaudibles]. Vi ne bezonas inkluzivi ĝin en ĉefa. Tio estas bone. Vi bezonas inkluzivi ĝin se vi estus apliko de funkcio kiel ĉi tio. Alie la funkcio plata el tio ne funkciis. Sed en ĉefa, ĝi ne estas necesa. En unu semajno aŭ du, ni devos komenci atingi en tiun kutimon fojon ni volas komenci signifante eraroj. Vere bona demando. Tiel rapida parola ripozon mencii ke tiu vendredo, ni ne estos tagmanĝante per, sed ni povas havi vespermanĝon kun kelkaj el la studentoj kaj bastono. Se vi ŝatus helpi nin, ili sentas liberaj por iri al cs50.net/rsvp. 6:00 am ĉi vendredo. Spaco estas, kiel cxiam, limigita, sed ni instruos vin daŭre fari tiujn sur preskaŭ semajna bazo se spaco elĉerpas ĉi-semajne. Do la cliffhanger ke ni cxesis sur Lundo estis ke kordoj povas reale esti indeksita en, kiu signifas nur ke vi povas akiri je la unua signo, la dua karaktero, la tria gravulo kaj tiel plu, ĉar vi povas efektive pensas pri ŝnureto, kiel saluton, kiel en ĉi tiu kazo kvin literoj ene de skatoloj. Kaj vi povas akiri je ĉiu el tiuj skatoloj kun kio sintakso faris nin enkonduki lunde? Tiuj rektaj krampoj sur via klavaro. Tio simple signifas iri al loko nulo. Ni komencas rakonti al nulo, tiel krampo nulo signifas h, krampo unu signifas e, kaj tiel plu. Kaj tiel la tuta tempo, kiam ni vizitis uzante ŝnurojn kaj tajpi en "saluton" kaj "mondo" kaj aliaj aĵoj sur la ekrano, ĝi estas konservitaj en skatoloj ŝatas tion. Kaj prenu konjekton. Kion ĉiu skatolo reprezentas fizike ene de via komputilo? [Inaudibles]. Pardonu? Gravuloj. Do karaktero, verŝajne en la kazo de kordoj, kaj karaktero estas nur ok bitoj aŭ unu bajto. Do vi probable estas almenaŭ pigre familiara kun la fakto ke via komputilo havas memoron. Ĝi havas du tipojn de memoro almenaŭ. Unu estas la malmola disko, kie vi savu plenigos konstante, kaj tio estas tipe granda tiel vi povas havi filmoj kaj muziko ks. Tiam vi havas alian tipon de memoro vokis RAM, R-Al-M, Random Access Memoro, kaj ĉi tiu estas la tipo de memoro kiu estas uzata kiam via komputilo estas kurante sed se vi perdas potencon aŭ vian pilo mortas, nenio kiu estas stokitaj en RAM malaperas se vi perdas povon aro ĉar ĝi ne estas konstantaj. Vi havas tipe, ĉi tiuj tagoj, koncerto de ĝi, du koncertoj, eble pli. Kaj la kapo de RAM estas ke ĝi estas multe multe, multe pli rapida ol malmolaj diskoj aŭ eĉ solida stato pelas tiuj tagoj, sed estas tipe pli multekostaj tiel vi havas malpli de ĝi. Do hodiaŭa konversacio vere raportas al RAM, tiu tipo de memoro kiu ekzistas nur dum ekzistas potenco esti nutrata en vian komputilon. Do kiam vi tajpas en H-E-L-L-O, Enter sur la klavaro, la H tuj en unu bajto de RAM, la E tuj en alia bajto de RAM, kiel estas la resto de la vorto. Do memoru kion ni povis fari lasta fojo estis ĉi. Lasu min kaj malfermu la dosieron ke ni nomas string.c, kaj memori kiu serĉis iom iu kiel ĉi tio. Lasu min reale ruliĝi dorso kaj ŝanĝi ĝin ĝuste kio similis, korda longeco de s. Do rigardu la programon tie. Ni inkluzivas la CS50 biblioteko tiel ke ni povas uzi atingi ŝnuron. Ni inkludas normon io.h tiel ni povas uzi printf. Kial ni inkludas string.h? Tio estis nova lundon. Do ni volis korda longeco. Str Leng. Personoj decidis jaroj, ni simple estu konciza. Anstataŭ nomante ĝin "korda longeco," ni nomas ĝin "str Leng" kaj lasu la mondo figuro kiu eliros, kaj tial tio estas kion ni ricevas aliron al la kun string.h. Ĉi tio estas konata. Ĉi tio estas konata. Ĉi tio estas konata. Tio estas iom nova. En linio 22 - kaj ni revenos al ĉi tio, sed por nun scias - kaj vi nur konus tiun de havi legi la dokumentadon aŭ se vi sciis C jam - akiri string kelkfoje povas ŝraŭbi supren. Se la uzanto estas vere adversarial aŭ uncooperative kaj li aŭ ŝi nur ne tajpi ion en la klavaro aŭ tipoj tiel ĉe la klavaro kiu ĝi premas la komputilo la memoro, teorie, atingi string povis reveni io alia ol linio de signoj. Ĝi povis reveni specialan valoron nomata NULL en ĉiuj kaskedoj, N-U-L-L, kaj ĉi tiu estas nur tn gardostaranto valoro. Ĝi estas speciala valoro kiu signifas io malbona okazis en ĉi tiu kazo. Ĝi estas la foresto de kordo. Do nula Mi kontrolanta por simple tial, longan rakonton, str Leng kaj aliajn funkciojn kiuj venis kun C, se ili atendas ĉenon sed ilin pasas la foresto de kordo, se vi trapasos ilin NULL, la komputilo aŭ la programo estos nur frakasi kategorie. Ĝi pendas. Ĝi ĵetos kelkajn erarmesaĝon. Malbonaj aferoj okazos. Do eĉ se tiu estas ankoraŭ ne estas bone-difinita - ĉi faros pli sentita en semajno aŭ du - en linio 22, ĉi tiu estas nur Ekzemplo de mem defenda eraro kontrolanta ĉiaokaze unu fojon el miliono io iras malbone, ĉe Almenaŭ mia programo ne frakasi. Do se s ne egalas ion malbonan, Mi havas tion por ciklo, kaj tio estis kie ni havis tiun alian nova peco de sintakso. Mi havas por buklo ripetanta de nulo sur ĝis la longo de s. Kaj tiam tie, mi estis impreso el s krampo i, sed kial mi uzas% c ĉiuj subita anstataŭ% s eĉ kvankam s estas kordo? Estas karaktero, ĉu ne? S estas ĉeno, sed s krampo ion, s krampo mi kie mi estas nulo aŭ unu aŭ du, tio estas individua karaktero en la ĉeno, kaj tiel por ke, printf bezonas esti informitaj, ke ĝi estas ja karaktero atendi. Kaj tiam memoras, kion faris ĉi programo fakte faras? Presita ĝin en kolumnoj. Jes, ĝuste. Ĝi ĵus presita la vorto, kiun mi tajpas en kolumno, unu signo por linio. Do ni vidas ĉi tion denove. Do faru ŝnuron. Kompilita OK. . / Kordo. Lasu min tajpi en H-E-L-L-O, Enter, kaj ja mi havos ĝin, unu po linio. Do lasu min fari unu optimumigo tie. Se vi pensas pri tio, precipe se vi jam planis antaŭe, tie estas defendeble senefikeco en linio 24. En aliaj vortoj, ĝi ne nepre la plej bona dezajno. Simpla, almenaŭ unufoje vi memori kion str Leng estas, sed estas fari iun mutan potenciale. Kio povus esti tiu? [Inaudibles]. Ekzakte. Ĝi estas kontrolanta por la longeco de s ĉiun solan fojon kvankam H-Kaj-L-L-O estas ĉiam tuj esti kvin karakteroj. Ĉiufoje per ĉi maŝo, la kvin ne ŝanĝas. Mi estu pliigante i, sed kion estas la longo de s sur ĉiu ripeto de tiu ciklo? Estas kvin, ĝi estas kvin, ĝi estas kvin, kaj tamen mi tamen petas tiun pridubi denove kaj denove kaj denove. Nun sincere, la komputilo estas tiel malbenita rapida, neniu tuj rimarki diferenco en tiu kazo, sed tiuj specoj de malriĉaj dezajno decidoj povas komencas adicii se la tradukilo mem ne provu ripari tion por vi, kiun ĝi tipe ne volis, ĉe Almenaŭ en la aparaton. Do mi tuj faros tion. Mi tuj aldonos komo post mia unua variablo, i. Mi tuj donos al mi alian variablo, nomante ĝin n, nur konvencion por nombroj, kaj tiam mi estas tuj atribui n la valoro de kordoj longo de s. Kaj poste mi iros por ŝanĝi mia kondiĉo por esti kio? Mi tuj ŝanĝos mian kondiĉo por dum i estas malpli ol n. Do nun, kiom da fojoj mi kontrolanta la longo de s? Iam, sed estas bone por kontroli i kontraŭ n denove kaj denove ĉar nun tiuj valoroj ne vere ŝanĝas. Nun por hodiaŭ, nur scias, ke iam ajn vi voki funkcio, ekzistas iom da superkape, ne sufiĉas por malkuraĝigi vin vere iam uzante funkciojn, sed Certe kiam tie estas linio de kodo plaĉas - kaj la linioj ricevos pli interesa nelonge - kie ekzistas ŝanco por pensi, se mi tajpi tiun kodon, kiom da fojoj ĝi ekzekuti? Vi komencas vidi pli de la tempo la agado de viaj programoj povas ja ŝanĝos. Fakte, unu el la problemon aroj ni farita en jaroj pasintaj engaĝas apliki, kiel vi eble memoras el semajno nulo, sorĉas kontrolilo, sed spell checker ke estas desegnita por elporti vortaro de 150.000 pli vortoj, ke ni donu al vi guys. Vi devus skribi kodon kiu ŝarĝoj tiujn vortojn en RAM, tiel en skatoloj kiel ni vidis en la ekrano momenton antaŭe, kaj poste tiel rapide kiel vi povas, vi devas esti kapabla respondi al demando pri la formo, estas tiu vorto misspelled? Ĉu tiu vorto misspelled? Ĉu tiu vorto misspelled? Kaj en iu kiel tio kion ni farita en jaroj estinteco igis ŝin, kvankam sur opt-in nedeviga bazo, oni konkuro de varoj, per kiu la lernantoj kiuj uzas la malpli RAM kaj malpli tempo, malpli CPU cikloj, fini bobelis sur la supron de iom ĉefo tabulo aŭ rango kiun ni metas en la kurson de hejmpaĝo, kiel ni farita en jaroj pasintaj. Do denove, plene nedeviga, sed ĉi tiu lingvo al la dezajno ŝancojn kiuj estas antaŭ iam ni komencu konstrui sur la pinto de kelkaj el tiuj baza konstruaĵo blokoj. Do lasu min reveni al ĉi tiu figuro por nur momenton kaj malkaŝi iom ion pli. Tiu ja estas ĉeno, kaj ni prenis avantaĝo de kelkaj bibliotekoj, norma io.h kiu havas - Printf. Printf, inter aliaj aferoj. cs50.h, kiu akiras int kaj akiri kordo kaj tiel plu, string.h, kiu havis str Leng. Sed rezultu ekzistas ankoraŭ alia. Sincere, restas multaj kaj multaj header dosieroj, kiuj deklaras funkcioj por bibliotekoj, sed ĉi ctype.h estas fakte tuj estos iom avantaĝa ĉar mi tuj iri antaŭen kaj efektivigu unu alia programo tie. Lasu min antaŭeniri kaj malfermi ion Mi skribis anticipe nomitaj capitalize.c, kaj ni prenu rigardu kiel tio funkcias. Rimarku, ke mi uzis, en ĉi tiu versio pri tio, tri familiaraj dosierojn. Rimarku ke en linio 18, mi estas prenanta linio de teksto. Rimarki en linio 21, mi asertas ke la jena kodo tuj capitalize s, kion ajn la uzanto tajpas in, kaj kiel mi faras tion? Nu, mi ferios - leciono lernis de pasinta tempo - Mi deklarante i kaj n kaj ripetanta super la gravuloj de la kordo. Kaj poste kio estas ĉi tiu bloko de kodo en linio 24 tra 27 faras en lego la terminoj? Minuskla litero dorso. Ekzakte. Se s krampo i - do se la i-a karaktero de s, kio estas specifa char en la ĉeno, estas pli granda ol aŭ egala al minuskla a kaj - memori, ke duobla ampersand signifi kaj - kaj la saman karakteron, s krampo i, estas malpli ol aŭ egala al minuskla z tio signifas ke estu a aŭ b aŭ c aŭ dot, punkto, ĝi pentras, aŭ z, kio signifas ĝi estas minuskla. Kion mi volas fari en tiu kazo? Nu, mi povas fari tion iom crípticamente, sed ni turmentus tiu aparte. Mi tuj voki printf, presas% c ĉar mi volas represi ĉi karaktero sur la ekrano. Mi tiam tuj prenos s krampo mi, la i-a signo en s, kaj tiam kial mi faras ĉi tiu malgranda artifiko ĉi tie, minuskla a minus ĉefurbo A? Kio estas tiu tuj donos mi ĝenerale parolas? [Inaudibles]. Ekzakte. Mi ne vere memoras - estis 65 por ĉefurbo Al mi ne vere memori kion minuskla a estas, sed ne gravas. La komputilo scias. Tiel dirante, minuskla a minus ĉefurbo A, estas bizara por esti subtrahanta unu char de alia, sed kio estas signoj sub la kapuĉo? Ili estas nur numerojn. Do kio tiuj numeroj estas, lasu la komputilo memoras ĝin anstataŭ mi la homo. Do minuskla a minus ĉefurbo A estas tuj donu al mi la diferencon. Ĝi okazas al esti 32, kaj tio estus la kazo por minuskla b kaj ĉefurbo B kaj tiel plu. Ĝi restas kohera, dankeme. Do mi esence dirante, prenu la minuskla litero, subtrahi for ke norma diferenco, kaj ke efektive ŝanĝoj s krampo i el Minusklaj al, kompreneble, majuskle, sen mia vere devi pensi pri aux memoru, kion estis tiuj numerojn ni parolis pri kiam la ok volontuloj elkreskis sur scenejo? Nun dume, en la alia, se ĝi ne estas la minuskla litero kiel determinis por linio 24, simple presas ĝin. Mi nur volas tuŝi la karakterojn, kiuj estis fakte origine minuskle. Do ni vidas ĉi. Faru profiti. Kompilita, OK. . / Profiti. Kaj lasu min tajpi en H-E-L-L-O en minuskla, Enter. Kaj rimarki ke ĝi estas konvertita en majuskle. Permesu al mi fari tion denove kun malsaman vorton. Kion pri D-Al-V-mi-D kun la unua D majuskle kiel nomo tipe estas? Eniru. Rimarku ĝi estas ankoraŭ ĝusta. Ĝi simple outputted tiu unua D neŝanĝita tra kiuj alie konstrui. Do memoru, tiam, Paro de aferoj tie. Unu, se vi iam volas kontroli du kondiĉoj samtempe, vi povas kaj ilin kune kiel ni antaŭdiris. Vi povas kompari karakteroj en ĉi tiu maniero kaj efike trakti gravuloj kiel nombroj, sed sincere, tiu estas tiel malbenita kamufla Mi neniam tuj memoras kiel supreniru kun tiu de nulo sen rezonado tra ĝi por sufiĉe iom da tempo. Ĉu ne estis agrabla se iu tie skribis funkcio nomata estas malsupreniri kiu povus respondi al mi vera aŭ falsa, tiu karaktero estas minuskle? Nu dankeme, kiu ajn skribis ctype.h faris ekzakte tion. Permesu al mi iri tien kaj aldonu ctype por c tipoj, kaj nun lasu min iri tien kaj reverki ĉi tiu linio kiel sekvas. Do, se ĝi estas nomata estas pli malalta, mi asertas, s krampo i, tiam mi tuj forviŝi ĉi tiuj du linioj tute. Do nun iu alia, mi esperante, skribis funkcio nomata estas pli malalta, kaj tio turnoj el ili faris kaj ili deklaris ĝin ene de ctype.h. Kaj nun mi foriros linion 27 sole, mi tuj forlasos linion 31 solece, sed rimarki kiom mi havas streĉita ĝis mia kodo. Estas nun pli pura. Ĝi estas malpli malfacile rigardi tra ĉar nun la funkcio, cetere, estas tiel mirinde nomis ĝin simple faras kion ĝi diras. Do nun mi iros por savi ĉi. Mi tuj malzomi. Kaj ĝuste kiel en Scratch vi povus havi Booleans, Buleaj valoroj vera aŭ falsa, tio estas ekzakte kio estas malsupreniri efike revenas. Lasu min recompilar. Lasu min ripeto. Kaj nun mi provu ĝin denove, H-E-L-L-O, Enter. Tio estas sufiĉe bonaj. Kaj provi ĝin denove, certigu mi ne firmigu ion. Tio estas majuskle ankaŭ. Sed ĉi tio ne sufiĉe bonas ĉar la alia afero, ke mi neniam tuj memoras se mi laboras tra ĝi vere atente en, ni diru, papero estas ĉi tiu malbenita linion. Ĉu ne estus bone se ekzistus funkcio vokis supra? Nu rezultas tie estas en ctype.h tiel. Mi tuj iros antaŭen kaj tajpu - lasu min porti tiun linion dorso. Anstataŭ ĉi tien, lasu min iri antaŭen kaj diru: anstataŭigi la% c la rezulto de nomi tiun funkcion al supra sur la i-a karaktero de s. Kaj nun rimarkas ĝin Fariĝas iom balancita. Mi devas konservi trako de kiom parentezoj mi malfermis kaj fermis. Do nun estas eĉ pli pura. Nun tiu programo fariĝas ĉiam pli bona desegnita eble ĉar ĝi estas multe, multe pli legebla sed ĝi estas neniu ni korekti. Faru profiti. . / Profiti. H-E-L-L-O. Ni ruli ĝin denove, D-Al-V-mi-D. Bone, do ni estas ankoraŭ en sufiĉe bona formo. Sed nun por supra. Mi proponas, ke ekzistas pli bonmaniereco ni povus fari, ke estus vere bela, kiuj povus vere streĉi ĝis ĉi kodo kaj vere donas al ni kvin el kvin por dezajno, ekzemple. Kio estus agrable forigi? Nu, rigardu, kiel malbenita longa tiu bloko de kodo estas simple fari ion simple. Nun kiel flanken, kiel vi povus havi vidis en super sekcio ĉi estinteco semajnfino, vi ne strikte bezonas la krispa krampoj kiam vi nur havas unu linio de kodo, kvankam ni proponis gardante ilin por ke ĝi faras multe pli klara, kiel en Scratch la U-forma blokoj, kio estas ene de la branĉo. Sed ĉu ne estus agrabla se al supran, kiam donita lia eniro, li igis Majusklaj se ĝi ne estas, kaj kio estus estu mirinda en la kontraŭa kazo se ĝi estas jam majuskle? Nur pasi ĝin tra kaj lasi ĝin sola. Do eble ĝi faras tion. Mi povus provi kaj nur atendas ke ne, sed permesu al mi enkonduki unu alia afero. Anstataŭ uzi ĉi integrita stacio fenestro malsupren tie, memoru, ke ĉi kvadrata nigra ikono donas al vi pli granda fina fenestro ke mi povas plena projektos se mi volas? Do rezultas ili estas ia stranga nomata, sed estas tiuj aĵoj nomata paĝoj de man, manlibro paĝoj, viro por mallonga, kaj mi povas aliri al tiuj por tajpante viro - Kion mi volas tajpi? Viro al supra. Kaj nun rimarki se tie ekzistas funkcii ene de la komputilo, en tiu kazo la aparato, kiu estas ĝuste la mastruma sistemo Linukso, ĝi okazas doni al mi iom kamufla aro de eligo, sed vi trovos en la tempo, ke ĝi ĉiam estas formatita preskaux la sama tiel vi komencas alkutimiĝi al ĝi. Rimarku en la supera al supran, kaj ŝajne estas la sama dokumentado por malsupreniri. Kiu skribis ĝin tranĉis iuj anguloj kaj metu ĉion en unu paĝo. Tion 'celo en vivo estas por konverti letero al supra aŭ minuskle. Rimarku ke sub Intrigo, la viro paĝo instruas al mi kion dosiero mi devas inkludi uzi ĉi tiun aĵon. Ĝi donas al mi la subskribojn por tiuj funkcioj, ambaŭ el ili, kvankam ni nun nur zorgas pri tiu. Ĉi tie estas nun priskribo. Por superaj konvertas la letero c al majuskle se eblas. Ankoraŭ ne ke instrua, sed permesu al mi nun aspektas sub reveno valoro, la afero ke estas transdonita reen. Do la valoro revenis estas tiu de la konvertiĝis litero aŭ c se la konvertiĝo ne eblis. Kio estas c? La originala karaktero. La originala karaktero kaj ni scias ke per, denove, suprenirante al la sinopsis, kaj kiu skribis tiun funkcio simple decidis ke la enigo al al supra kaj suba estas simple arbitre tuj nomos c. Ili povus esti nomis ĝin plej ion ili volas, sed ili silentis simpla kiel c. Do mi konsultis la viro paĝo. Tiu frazo trankviligas min ke se ĝi ne estas minuskla litero, estas tuj ĝuste redonus al mi c, kiu estas perfekta, kiu signifas ke mi povas forigi mia alia kondiĉo. Do lasu min iri reen al gedit, kaj nun lasu min nur faru tion. Mi tuj kopii mian printf komunikaĵo. Mi tuj iros antaŭen kaj tute interne la buklo print that out, kaj akiri senigi de nun tiu aro se konstruo. Ne estis malbona ideo, kaj gxi estis tre multa korekta kaj kohera kun ĉion ni predikis, sed ĝuste ne necesa. Tuj kiam vi rimarkas iujn biblioteko funkcio ekzistas ke iu alia skribis, aŭ eble vi skribis aliloke en la dosiero, vi povas uzi ĝin kaj vere komenci streĉi ĝis la kodon. Kaj kiam mi diras aĵojn kiel bona stilo, la fakto ke tiu persono nomita la funkcii al supra, aŭ antaŭe estas suba estas mirinde utilaj ĉar ili estas tre priskriba. Vi ne volas nomi vian funkcioj x kaj y kaj z, kiuj havas multe, multe malpli signifon. Demandojn sur tiu serio de plibonigoj? Do sufiĉas diri unu el la takeaways estas kiel via propra problemo aro - eble problemo aro, sed certe P starigis du kaj antaŭen, eĉ kiam ili estas ĝusta ne necese signifas ke ili estas perfektaj nur tamen nek aparte bone desegnita. Tio estas la alia akso komenci pensi. Do temas pri ŝnuro ene de via komputilo memoro, sed se vi havas tutan faskon da karakteroj kiel H-E-L-L-O ene de RAM kaj supozi ke vi en via programo vokas akiri kordo plurfoje tiaj ke vi voki akiri string fojon, tiam vi voki akiri kordo denove. Nu, kio okazas al okazos la tempo? En aliaj vortoj, se vi havas linion de kodo, kvankam el kunteksto, kiel kordo s gets - ni faras tion. String nomo egalas atingi ŝnuron. Do supozu ke linion de kodo estas intencita demandi al la uzanto por sia nomo. Ĉi sekvanta linio de kodo estas intencita por demandi la uzanto por sia lernejo, kaj ĉi sekva linio, kaj tiel plu. Supozu ke ni observas demandante la uzanto por alia kaj alia kaj alia linio. Ili tuj resti en la memoro samtempe. Unu ne tuj clobber la alia. Lernejo estas ne anstataŭigi la alia. Sed kie do ili ĉiuj ili finas en memoro? Nu, se ni komencas desegni sur la ekrano, kiun ni povas uzi tion tie kiel skribtabulo, se ĉi tiu nigra ortangulo reprezentas mia komputilo memoro, mi tuj arbitre komenci dividante ĝin en iom kvadratoj, el kiuj ĉiu reprezentas unu bajto de memoro. Sincere, se vi havas gigabajto de RAM ĉi tiuj tagoj, vi havas miliardoj bitokoj de memoro en via komputilo, do miliardo el tiuj kvadratoj. Do sufiĉas diri, tiu ne estas vere skalo. Sed ni povus konservi desegnante ĉiuj de ĉi tiuj klare ne grimpi kvadratoj, kaj ĉi kolektive reprezentas mia komputilo memoro. Nun ni nur faru dot, punkto, ĝi pentras. Do alivorte, kiam mi nun instigas la uzanto kun get string doni al mi kordo, kio okazas? Se la uzanto tajpas en "saluton", kiu enfluas supren en H-E-L-L-O. Sed supozu la uzanton tiam tipoj en - fakte, mi ne estus farinta saluton ĉar ni petas ilin pro iliaj nomoj. Do ni revenu se mi povas fari ĉi tion. Do se mi tipo en D-Al-V-mi-D por mia nomo, sed memoru ke la dua linio de kodo estis akiri kordo denove akiri lia lernejo. Kie estas tiu vorto, kiun la uzanto tipoj en tuj iros poste? Nu, eble ĝi tuj iri en H-Al-R-V-Al-R-D. Do eĉ se mi havas desegnita kiel du vicoj, ĉi tio estas nur tutan faskon da bajtoj en via komputilo RAM. Tie estas problemo nun ĉar nun se mi uzante RAM en tiu tre racie sed speco de naiva maniero, kio povas vin ne ŝajne distingi? Kie oni komencas kaj kie unu randoj, ĉu ne? Ili estas speco de desdibujando kune. Do rezultas la komputilo Ne fari ĉi tion. Estu mi efektive rulumi malantaŭen en la tempo de kelkaj signoj, kaj anstataŭ Harvard irante tuj post la uzanto nomo, la uzanto reale ricevas, malantaŭ la scenoj, speciala karaktero inserto de la komputilo por li aŭ ŝi. / 0, alie sciata kiel la nul karaktero annoyingly nomata N-U-L, ne N-U-L-L, sed vi skribas ĝin kiel / 0. Estas nur ĉiuj nulo bitoj estas markilo en inter la unua vorto, kiun la uzanto tajpitaj kaj la dua. Do Harvard efektive nun finas kiel tiu vico de signoj kaj unu pli / 0. Do alivorte, por havi tiujn gardostaranto valoroj, ok apudaj nulo bitoj, vi povas nun komenci distingi unu signo de alia. Do tiu tuta tempo, kio estis "saluton" estas efektive "saluton" kun / 0, kaj dume, tie povus tre bone esti sufiĉe pli RAM ene de la komputilo. Lasu min fari unu alia afero nun. Rezultas, ke ĉiuj el tiuj kvadratoj ni estis desegni, ili estas, jes, kordoj, sed pli ĝenerale, ĉi tiuj aferoj estas arrays. Tabelo estas nur eron de memoro tio estas malantaŭo al malantaŭo al malantaŭo al malantaŭo, kaj vi kutime uzas tabelo de vojo de ĉi tiu kvadrata krampo skribmaniero. Do ni tuj vidos, sufiĉe tra la tempo, sed lasu min antaŭeniri kaj malfermi, ni nomas ĝin aĝoj. Kaj rimarkos, kion ni povas fari kun tiuj samaj lertaĵoj, iom iom pli sintakso tie. Do en linio 17 de tiu programo - fakte, mi kuros al la programo unue tiel ni povas vidi kio estas tiu afero faras. Lasu min vokas fari mondagxoj kompili tiun programon. . / Aĝoj. Kiom da homoj estas en la ĉambro? Nomu ĝin tri. Aĝo de la unua persono? 18, 19, kaj 20. Kaj nun iom ridinde, mi nur faris programon kiu aĝoj tiuj tri personoj. Do ne estas klare ŝancon por iu amuza aritmetiko tie. Feliĉe, la math estas ĝusta. 18 iris al 19, 19 eliris 20 kaj tiel plu. Sed kio vere intencis esti ilustrativos jen kiel ni stokante tiuj tri homoj aĝoj. Lasu min zomi en kio estas okazas ĉi tie. Do unue, ĉi tiuj unuaj kelkaj linioj devus esti akiri sufiĉe familiara. Mi simple instigante la uzanto por la nombro de homoj en la ĉambro. Tiam Mi uzas akiri int kaj faru malproksima fari tion denove kaj denove kaj denove. Ni jam vidis ke mastro antaŭe, sed linio 27 estas novaj kaj fakte sufiĉe utila, kaj iĝos ĉiufoje utila. Rimarku, ke kio estas malsama en linion 27 estas ke mi ŝajnas esti deklarante an int nomas aĝoj, sed atendu. Ĝi ne estas simple int aĝoj. Ekzistas tiuj kvadrataj krampoj, ene de kio estas n. Do la krampo n en tiu kunteksto, ne ene de printf aserto tie sed en ĉi tiu sola linio 27, ĉi tiu linio estas dirante: donu al mi n ints, ĉiu el kiuj estas de tipo int. Do tiu estas sitelo, por tiel diri, de, en ĉi tiu kazo, tri entjeroj reen al malantaŭo al malantaŭo por ke mi efektive havas tri variabloj. La alternativo, esti klara, estus ĉi. Se mi volis la unua studento aĝo, mi povus fari tion. Se mi volis la dua studento aĝo mi povus fari tion. Se mi volis la tria studenta aĝo, mi povus fari tion. Kaj dio malpermesu ni bezonas ĉies aĝo en tiu ĉambro - Mi volas diri, ĉi tiu estas heck de multaj kopion, algluota denove kaj denove kaj denove. Kaj plus unufoje Mi kompili tiun programon, se alia studento promenas en pli ol ekstere de tiu pordo, nun mia nombro de variabloj estas malĝusta. Do kio estas agrable pri tabelo estas tiel Kiam vi komencas senti vin mem kopii kaj alglui, prognozoj estas tio ne la plej bona alproksimiĝo. Tabelo estas dinamika potenciale. Mi ne scias anticipe kiom da homoj tuj estos en la ĉambron, sed mi scias, mi bezonas n el ili, kaj Mi instruos vin elkompreni n kiam la tempo venas. Ĉi linio de kodo nun signifas, donu al mi eron de memoro kiu similas tiun kie la nombro da skatoloj en la ekrano estas tute dependa de n tio la uzanto tajpas in Do nun la reston de tiu programo estas fakte sufiĉe simila al tio, kion ni nur faris kun gravuloj. Notice mi havas por buklo komencante en linio 30. Do tuj post mi alvenas la tabelo, mi persisti de y egalas nulo sur ĝis n. Mi nur havas tiun instruan printf mesaĝo nur diras, donu al mi la aĝo de persono #% i, do numero unu, numero du, numero tri. Kaj kial mi faru tion? Sincere, la homoj preferas rakonti de unu plu supren dum komputikistoj, nulo plu supren. komputikistoj ne tuj uzi tian programon, do ni estas tuj komencu rakonti ĉe unu kiel normalaj homoj. Kaj nun en linio 33, rimarki la iomete malsama peco de sintakso. La i-a aĝo en tiu variablo de tipo tabelo tuj ricevas int. Kaj nun laste, ĉi tio estas nur aritmetika cxi tie. Mi decidis en aparta buklo pretendi iu tempo pasas, kaj nun en tiu apartan buklo, ĉi tiuj linioj ekzekuti. Jaro de nun, persono i estos i jaroj, sed rimarkas tio ne estas la variablo i. Tiu estas jam% i por int. Kaj avizo kiel la unua lokokupilo, mi kontaktŝtopilo en i plus 1, do ni nomas kiel normala persono. Kaj tiam por la valoro de lia aĝo, por i-jara, mi prenos aĝoj krampo i - kaj kial mi faras plus unu estas cxi tie? Ili simple kadukiĝis. Estas mia stulta elekto de programoj. Ili simple jaroj unu jaro. Mi povus entajpi ajnan numeron kiu Mi vere volas tie. Do kio estas fakte ĉiuj la graveco tie? Nu, mi fakte rulumi reen super tie kaj pentri bildon de kio kuŝas antaŭen. Kion ni faru kun nia sekva Problemo Ara Du estas dabbling en la mondo de ĉifriko. Do tiu estas ĉeno de karakteroj, tial vico de multnombraj signoj, kaj kion Ĉu tio diras? Ĝi ne estas en la reta versio de la diapozitivoj. Do mi asertas ke ĉi tiu egalas tio, stulta anonco de multaj jaroj antaŭe ke povus efektive memoras unu el liaj originoj. Do tiu estas ekzemplo de ĉifrado aŭ ĉifriko. Rezultas, ke se vi volas fakte sendi informojn aŭ dividi informo kun iu sekure, kiel mesaĝon tiel, vi povas levi la literoj. Sed tipe, la vortoj estas ne grimpis hazarde. Ili estas permutita en iu maniero aŭ ŝanĝita iel tiel ke - oops. Tio estas amuza alerono por la proksima tempo. Do vi povas mapi kio estas ŝajne O al B. Rimarku ke regiono kapitaligo-saĝa. Ŝajne r iĝas e. Ŝajne F-H-E-R iĝas S-U-R-E. Tiel rezultas tie estas surĵeto, kaj en ĉi tiu kazo ne estas sufiĉe stulta surĵeto se iu figured it out? Tio estas io nomata Rot 13 Turni la 13. Ĝi estas la stupidest de ĉifrado mekanismoj ĉar ĝi laŭvorte nur Aldonas 13 al ĉiu de la literoj, stulta en la senco ke se vi nur havas iom da libera tempo en viajn manojn kaj krajonon, aŭ vi simple pensas ke tra en via kapo, vi povus provi ĉiuj eblaj aldonoj - unu, du, tri, pentras, pentras, punkto, 25 al nur turni la tuta alfabeto, kaj fine, vi diveni kio ĉi tiu mesaĝo estas. Do se vi faris ion kiel ĉi tiu en lernojaro lernejo pasi mesaĝojn al via bona amiko, se via lernojaro lernejo instruisto simple tralegu la mesaĝon kaj malpura devigis la solvo, vi povus esti alveninta respondon de tio. Nun kompreneble, en la reala mondo, ĉifriko estas pli kompleksa. Tio ĉi estas fragmento de teksto el komputila sistemo kiu havas salutnomoj kaj pasvortoj, kiel preskaŭ ĉiuj niaj fari, kaj ĉi tio estas kion vian pasvorton forton aspektas kiel se stokita en la malmola stiri sed en ĉifrita formo. Ĉi tio ne estas nur turnado de literoj, A estas B kaj B estas C. Ĉi tio estas multe pli kompleksa, sed ĝi uzas kio ĝenerale konata kiel sekreta ŝlosilo ĉifriko. Tiu bildo rakontas la sekvajn rakonto kun kelkaj ikonoj. Maldekstre, ni havas kion ni vokos simpla teksto. En la mondo de ĉifriko, ebenaĵo teksto estas nur la originala mesaĝo skribita en la angla aux la franca aŭ ajna lingvo ajn. Se vi volas ĉifri ĝin, ni pasas ĝi pictóricamente tra pendseruro, do iuj de speco de algoritmo, iu funkcio aŭ programo kiun iu skribis ke scrambles la literoj espereble pli complicatedly ol nur aldonante 13 al ĉiu el ili. Kion vi eliri de tiu proceso en la mezo tie nomas cyphertext. Do ia sexy vorto. Ĝi nur signifas ĝi estas la ĉifrita versio de la simpla teksto. Kaj nur se vi havas tiun saman sekreton, 13 aŭ minus 13, vi povas malĉifri mesaĝon tiel. Do en Problemo Ŝanĝu Du, inter la aĵoj vi faros se en la Hacker Eldono, vi devos skribi kodo fendi tiuj pasvortoj, elŝeligi kio estis kaj kiel estis ĉifrita, kvankam ni faros al vi iom de gvido en la vojo. En la Norma Eldono, ni enkondukas paro de ĉifroj, ĉifrado mekanismoj, unu nomita cezaro unu vokis Vigenère, kiu estas ankoraŭ turna ĉifroj kie A iĝas io, B igas iun, sed vi devas fari ĝin programmatically ĉar estos ja esti sekreta ŝlosilo implikita kiu estas tipe nombro aux sxlosilvorto ke nur la sendinto kaj la ricevinto de tiuj mesaĝoj devus kompreni. Nun, ĉi tiu reale havas personigoj en la reala mondo. Ĉi tio, ekzemple, estas iom orfa Annie la sekreta deĉifrilo ringo, kaj vi efektive povas realigi tiujn turna ĉifroj - A iĝas io, B iĝas io - kun paro da radoj, unu sur la ekstera, unu en la interno tia, ke se vi turnas la rado aŭ la ringo, vi povas efektive laŭliniigi la literojn kun malsamaj literoj, prenanta sekreta kodo. Kaj tiel kiel la cliffhanger por hodiaŭ, kion mi pensis, ke mi volas fari, estas iom da throwback ke se vi ŝaltas la televidilon 24 de decembro, vi povas rigardi la filmo ad nauseum por 24 horojn en unu vico. Sed por hodiaŭ, mi malfermos ĝin ĉi tie kaj donu al ni nur du minutoj de pedagogie taŭga Kristnasko Story kun iom ulo nomata Ralphie. [VIDEO reprodukto] -Estu sciate al ĉiuj kaj sundry ke Ralph Parker maniere enoficigita membro de la Little Orphan Annie sekreta rondo kaj povas postuli la tutan la honoroj kaj profitoj okazanta arangxajxo. -Subskribita, Little Orphan Annie. Legalizita, Pierre Andre en inkon. Honoroj kaj profitoj jam en la aĝo de naŭ. [Kriante SUR RADIO] Venu, ni okupiĝi pri ĝi. Mi ne bezonas ĉiujn kiuj ĵazo pri kontrabandistoj kaj piratoj. -Aŭskultu morgaŭ nokte por la konkludante aventuro de la nigra pirato ŝipo. Nun, estas tempo por Annie La Sekreto Mesaĝo por vi membrojn de la sekreta cirklo. Memoru, infanoj. Nur membroj de Annie La Sekreta Rondo povas malkodi Annie la sekreta mesaĝo. Memoru, Annie estas depende de vi. Ŝanĝu vian pingloj al B2. Jen la mesaĝo. 12, 11, 2 - -Mi estas en mia unua sekreta kunveno. -25, 14, 11, 18, 16 - -Pierre estis en granda voĉo nokto. Mi povus diri, ke vespere mesaĝo estis vere grava. -3, 25. Tio estas mesaĝo de Annie sin. Memoru, ne diru al neniu. -90 Sekundoj poste, mi estas en la ununura ĉambro en la domo kie knabo de naŭ povis sidi en intimeco kaj malkodi. Ha, B. Mi iris al la sekva. E. La unua vorto estas "esti." S. Ĝi venis pli facile nun. U. 25. Tio estas R. -Venu, Ralphie. Mi gotta go. -I'll be right down, Ma. Gee qui. -T. O. Nepre. Nepre kio? Kio estis Little Orphan Annie provas diri? Nepre kio? -Ralphie, Randy has got iri. Ĉu vi bonvolos veni el? -Bone, Ma. Mi tuj eliris. -Mi proksimiĝas al nun. La streĉiĝo estis terura. Kio estis tio? La sorto de la planedo povas pendi en la pesilo. -Ralphie, Randy la gotta go. -I'll be right eliris por laŭte ploris. -Preskaŭ tie. Miaj fingroj flugis. Mia menso estis ŝtalo kaptilo. Ĉiu poro vibris. Estis preskaŭ klara. Jes, jes, jes, jes, jes. -Nepre trinkos vian Ovaltine. Ovaltine? Al crummy komerca? Filo de ĉiesulino. [FINO reprodukto de vídeo] Parolanto 1: Tio estas CS50, kaj ke Estos Problemo Set Two. See you proksima semajno. Speaker 2: En la sekvanta CS50, ĉi tio okazas. Parolanto 1: Do unu temo ni ne rigardis ĝis nun estas tiu de funkcio montriloj. Nun, funkcio puntero estas nur la adreso de publika funkcio, sed multe kiel - filo de -