>> 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.
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?
>> 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 -