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