>> [MUZIKO Ludante]
DAVID J. Malan: Bone.
Jen CS50, kaj ĉi estas la komenco de la semajno du.
Do ni komencu hodiaŭ kun cimon.
Cimon, kompreneble, estas eraro en programo,
kaj vi ricevos tre familiara kun tiu koncepto
Se vi neniam planis antaŭe. pset0 kaj nun pset1.
Sed ni konsideru ion iom simpla unue.
Tiu programo, ke mi ĵetis kune anticipe,
kaj mi asertas ke tio devus presi 10 steloj sur la ekrano uzante printf,
sed ĝi ŝajne kalesxo iel.
>> Donita ke especificación kiu ĝi devus presi 10 steloj,
sed ne malkasxe, kio ĉu vi asertas estas la bug?
Yeah?
Do ĝi estas for de unu eraro, kaj kion vi volas diri per tio?
OK.
Bonega.
Do ni specifis komenci valoro de nulo por i,
kaj ni specifita n valoro de 10, sed ni uzas malpli ol aŭ egala al.
Kaj la kialo, ke tio estas du signoj kaj ne nur unu simbolo,
kiel en matematiko libro, estas ke vi ne devas
maniero de esprimi la unu karaktero ekvivalento.
>> Do tio signifas malpli da, sed Se vi komencas rakontante nulo,
sed vi kalkuli la tuta vojo tra kaj egalaj al 10,
vi kompreneble tuj kalkuli 11 aĵojn en entute.
Kaj tial vi tuj presi 11 steloj.
Do kio povus esti embaraso por tio?
Yeah?
>> Do ĝuste ĝustigi la malpli da aŭ egala al nur malpli ol,
kaj ekzistas, mi asertas, eble alia solvo, tro.
Kio povus alie vi faros?
Yeah?
>> Do komencu egalante al 1, kaj forlasi la malpli ol aŭ egala al.
Kaj sincere mi asertas ke, por tipa homa,
tio verŝajne estas pli simpla.
Komenci kalkulon je 1 kaj kalkuli tra 10.
Esence fari kion vi volas diri.
>> Sed la realo estas programado, kiel ni vidis,
komputilo sciencistoj kaj programistoj ĝenerale komencas rakontante nulo.
Kaj tial estas bone unufoje vi kutimiĝos al ĝi.
Via kondiĉo ĝenerale iu kiel malpli ol.
Do simple logika eraro kiun ni povis nun
ripari kaj finfine recompilar tio kaj ricevi nur 10.
>> Nu kio pri tiu besteto tie?
Jen, denove, mi asertas ke mi devas golo videbligi 10 stars--
unu por linio tiu tempo, sed ne.
Antaŭ ni proponas kion la embaraso estas, kion faras tiu
presi vide se mi estus kompili kaj kuri ĉi programo vi opinias?
Yeah?
>> Stelo.
Do ĉiuj steloj en la sama linio estas kion mi aŭdis,
kaj tiam la nova linio karaktero.
Do ni provu tion.
Do fari kalesxo-1, eniru, kaj mi vidos tin komando
ke ni parolis pri lastaj tempo.
./buggy-1, kaj fakte mi vidas ĉiujn 10 steloj en la sama linio kvankam mi asertas
en mia specifo ĝuste komenton sur la pinto la kodo kiun Mi intencis fari por
linio.
Sed tio aspektas pravas.
>> Nun linio 15 ĝi similas min videbligi stelon, kaj tiam linio 16
Ĝi similas min impreso nova linio karaktero,
kaj ili estas ambaŭ marĝeno tiel Mi interne de la buklo klare.
Do ne mi faros stelo, novaj linio, stelo, nova linio, stelo, nova linio?
Jes?
>> Yeah, kontraste lingvo kiel Python, se vi estas familiara,
deŝovon ne gravas al la komputilo.
Nur gravas la homo.
Do dum tie mi elpensis linioj 15 kaj 16-- kiuj aspektas bela,
sed la komputilo ne zorgas.
La komputilo zorgas pri efektive havanta frizita krampoj
ĉirkaŭ tiuj linioj de kodo.
>> Tiel ke ĝi estas clear-- ĝuste kiel en Scratch-- ke tiuj du linioj de kodo
devus esti ekzekutita.
Kiel unu el tiuj flavaj Scratch enigmo pecoj denove kaj denove kaj denove.
>> Do nun se mi re-kuri ĉi program-- ./buggy-2-- Hm.
Mi havas eraro nun.
Kion mi forgesas fari?
Yeah, do mi ne kompili ĝin.
Do fari kalesxo-2.
Ne tia dosieron ĉar mi ne fakte kompili la dua versio.
Do nun interesa nedeklarita variable-- ne 2.
Ni faras 1.
Faru kalesxo-1-- ./buggy-1-- kaj nun ĉiu el ili estas en la sama linio.
>> Nun estas escepto al tiu supozita aserto mia
ke vi bezonas tiuj buklaj krampoj.
Kiam estas efektive OK-- se vi havas rimarkita en sekcio aŭ textbooks--
preterlasi la frizita krampoj?
Yeah?
>> Ĝuste.
Kiam nur unu linio de kodo kiun vi
volas asocii kun la buklo kiel en nia unua ekzemplo.
Ĝi estas perfekte legitima preterlasi la frizita krampoj
same ia oportunajho el la tradukilo vi.
Yeah?
Bona demando.
Ĉu konsideri stilo eraro?
Ni devus promote-- kiel en CS50 stilo gvidas la URL por kiu
Estas en pset1-- kiu ĉiam uzi la frizita krampoj.
Certe, se vi estas nova al programado.
La realaĵo estas kiu ne estas tuj malpermesos vin
fari al tiuj interesoj.
Sed se vi nur nun en la balancilo aferojn,
absolute simple ĉiam uzi la krispa krampoj ĝis vi akiros la hang de ĝi.
Bona demando.
>> Bone.
Do tiama cimon.
Almenaŭ en iu sufiĉe simpla.
Kaj tamen vi eble pensas tiun Estas sufiĉe rudimentaj, dekstra?
Tiu estas speco de la unua semajno rigardi la lingvon
kiel, vidu viajn erarojn gxi.
Sed la realeco tiuj estas vere reprezentanto
de iu bela timigaj problemoj kiuj povas ekesti en la reala mondo.
>> Do kelkaj el vi eble memoras se vi sekvas tech novaĵoj
aŭ eble eĉ kaptis vento de tiu en februaro
de tiu pasinta jaro ke Apple havis faris iom de eraro en ambaŭ iOS,
la mastruma sistemo sur liaj telefonoj, kaj ankaŭ
Mac VIN, la mastruma sistemo sur ilia desktops kaj tekkomputiloj.
Kaj vi vidis tian titolis kiel ĉi.
Kaj poste, Apple promesis ripari tiun cimon,
kaj tre rapide faris ripari ĝin en iOS, sed tiam finfine fiksis ĝin en Mac OS
tiel.
>> Nun neniu el tiuj titoloj sole vere malkaŝi kion la suba problemo estis,
sed la cimo estis finfine reduktita cimon en SSL, sekura bazojn tavolo.
Kaj longan rakonton, tio estas la programaron
ke nia retumiloj kaj aliaj programaro uzita por fari kion?
>> Se mi diras ke SSL estas implikita, kiam ajn vi
viziti URL kiu komenciĝas per HTTPS, kion do povus SSL rilatigi?
Ĉifrado.
Do ni parolos pri tiu en la proksimaj tagoj.
Ĉifrado, la arto de grimpadi informo.
>> Sed longan rakonton, Apple iam monato estis eraris
en ilia efektivigo de SSL, La programaro kiu finfine Implementa
URLoj kiel HTTPS aŭ max rilatojn tie ankaŭ.
La rezulto de tio estas ke via rilatoj povis potenciale
oni interkaptis.
Kaj via rilatoj estis Ne nepre ĉifrita
se vi havis iujn malbonajn ulo en inter vi kaj la celloko retejo kiu
sciis utiligi ĉi.
>> Nun Apple fine posteó oni ripari por ĉi fine,
kaj la priskribo ilia embaraso estis ĉi.
Sekura transporto malsukcesis validigi la aŭtentikeco de la ligo.
La temo estis adresita per restarigi mankas validación paŝoj.
>> Do ĉi tiu estas tre mano ondecaj klarigo por simple diri ke ni ŝraŭbita supren.
Estas laŭvorte unu linio de kodo kiu estis buggy
en ilia efektivigo de SSL, kaj se vi iros en linio kaj serĉi ĉi
Vi povas fakte trovi la originala fontkodo.
Ekzemple, ĉi tiu estas ekrankopio de nur parton de sufiĉe granda dosiero,
sed tio estas funkcio ŝajne nomis SSL kontroli signo servilo ŝlosila interŝanĝo.
Kaj ĝi prenas faskon da argumentojn kaj enigoj.
Kaj ni ne tuj enfokusigi tro da en la minutia tie,
sed se vi enfokusigi la kodon ene de tiu plejsupra function-- ni
zomi je tio.
Vi eble jam suspektas kion la eraro eble
estos eĉ se vi ne havas ideon finfine kion vi rigardas.
Estas speco de anomalio ĉi tie, kiu estas kiu?
>> Yeah, Mi ne vere ŝatas la rigardo de du goto malsukcesas.
Sincere, mi ne vere scias kion goto malsukcesos rimedoj, sed havante du de ili
reen al dorso.
Ke nur ia frotas min intelekte malĝustan vojon,
kaj efektive se ni zomi je ĝuste tiuj linioj, tiu estas C.
>> Tiel multa Apple kodo vidas skribitan en C,
kaj tio ŝajne Estas vere equivalent--
ne ke bela deŝovon versio, sed se vi rekonas la fakton
ke ne estas krispa krampoj, kio Apple vere skribis estis kodo kiu aspektas
kiel tiu.
Do mi zomita eksteren kaj mi ĵus fiksis la deŝovon en la senco
ke se ne estas krispa krampoj, ke dua goto malsukcesos jen en flava
tuj ekzekuti negrave kio.
Ĝi ne estas asociita kun la se kondiĉo super ĝi.
>> Do eĉ pli, se vi ne tute kompreni kion tio povis eble
faru, scias, ke ĉiu el tiuj conditions-- ĉiu de ĉi tiuj linioj
Estas tre grava paŝo en la procezo de kontrolanta
se viaj datumoj estas fakte ĉifrita.
Do saltante unu el tiuj paŝojn, ne la pli bona ideo.
>> Sed ĉar ni havas tiun dua goto malsukcesos en flava,
kaj ĉar iam ni ia estetike
movi ĝin al la maldekstra kie logike estas nuntempe, kion
signifas tio por la linio de kodo sub tiu dua goto
malsukcesos vi opinias?
Ĝi estas ĉiam tuj estos saltis.
Do gotos estas ĝenerale malaprobita pro kialoj ni ne vere iru en,
kaj ĝuste en CS50 inklinas ne instrui ĉi aserto goto,
sed vi povas pensi de goto malsukcesos kiel signifo go salto
al iu alia parto de la kodo.
>> Alivorte transsalti ĉi lasta linio en aro,
kaj do la rezulto de tiu stulta simpla eraro kiu estis ĵus
rezulto de probable iu kopiado kaj alglui unu tro
multfoje, ke la tuta sekureco de iOS kaj Mac VIN
estis vundebla interkaptita per maliculojn por sufiĉe tempo.
Ĝis Apple fine fiksita ĉi.
>> Nun se iu el vi estas reale kurante malnovaj versioj de iOS aŭ Mac VIN,
Vi povas iri al gotofail.com kiu estas retejo kiun iu starigis
esence determini programmatically
se via komputilo estas ankoraŭ vundebla.
Kaj sincere, se ĝi estas, ĝi estas verŝajne bona ideo
ĝisdatigi vian telefonon aŭ via Mac ĉe tiu punkto.
Sed, ĝuste testamento kiom apreciación de tiuj malsupra nivelo
detaloj kaj sufiĉe simplaj ideoj povas vere
traduki en decidoj kaj problemoj
affected-- en ĉi case-- milionoj da homoj.
>> Nun unu vorton pri administrado.
Sekcio komencos tiun venantan dimanĉon.
Vi ricevos retpoŝton de la semajnfino pri sekcio, ĉe kiu punkto
la resectioning procezo komencos se vi havas
rimarkis vin nun iuj novaj konfliktoj.
Do tio okazas ĉiun jaron, kaj ni devos akomodi en la tempo venonta.
>> Oficejo hours-- fari teni okulon sur ĉi horaro tie.
Ŝanĝas iomete tiu semajno, aparte la komenco tempon
kaj la situo, do konsulti ke antaŭ direkti al oficejo horoj
iu el la sekvantaj kvar noktoj.
Kaj nun unu vorton je pritakso, aparte kiel vi plonĝi en problemo
aroj kaj pretere.
>> Do per la specifo, tiuj estas ĝenerale
la hakiloj kune kiujn ni taksos vian laboron.
Amplekso referencas al kio mezuro via kodo Implementa
la karakterizaĵoj bezonata per nia specifo.
En aliaj vortoj, kiom multe de pecon aro faris vin mordi ekstere.
Ĉu vi faros triono de ĝi, duono de gxi, 100% de ĝi.
Eĉ se ĝi ne estas korekta, kiom vi provos?
Do kiu kaptas la nivelo de penado kaj la kvanto
al kiu vi demordis la problemo aro problemoj.
>> Correctness-- ĉi tiu, kio punkto estas via kodo
konsekvenca kun niaj especificaciones kaj libera de eraroj.
Tiel funkcias korekte?
Se ni donos iujn enigo, ĉu ĝi donu al ni la eliron ke ni atendas?
Design-- nun ĉi tiu estas la unua de la aparte kvalita karaj,
aŭ kiuj postulas homan juĝon.
Kaj efektive, tio estas kial ni havas bastono de tiom da instruado uloj kaj kompreneble
helpantoj.
Ĝis kio punkto estas via kodo skribita bone?
>> Kaj denove ĉi tio estas tre kvalita taksado
kiu laboros kun vi bi-directionally en la semajnoj veni.
Tiel ke kiam vi ne nur nombraj interpunkcioj, sed ankaŭ
skriba partituroj aŭ tajpita sugestoj, aŭ skribita feedback en anglaj vortoj.
Tio estas kion ni uzas por forpeli vin al reale skribi bonan kodon.
Kaj en prelego kaj sekcio, ni penos atentigi out-- tiel ofte kiel ni can--
kion faras programon ne nur ĝentila kaj funkcie bono
sed ankaŭ bone desegnita.
La plej efika povus esti, aŭ eĉ la plej belaj povas esti.
>> Kiu kondukas nin al stilo.
Stilo finfine trovas estetika juĝo.
Ĉu vi elektos bonon nomoj por viaj variabloj?
Ĉu vi marĝeno via kodo ĝuste?
Ĉu ĝi aspektas bone, kaj sekve, Estas facile por alia homo
legi viajn respektivajn el lia korekto.
>> Nun ĝenerale por la Syllabus, ni interpunkcio tion sur kvin punkto skalo.
Kaj lasu min martelo domo la punkto ke tri estas ja bona.
Tre rapide fari ulojn komenci fari aritmetiko.
Kiam ili ricevas tri el kvin praveco por iu pset
kaj ili pensas malbenita, mi tuj 60% kio estas esence D aŭ E.
>> Tio ne estas la vojo ni pensi pri tiuj nombroj.
A tri estas ja bona kaj kion ni Ĝenerale atendi ĉe la komenco
la termino estas ke se vi nun estas faskon da three's-- eble paro
de foiroj, paro de fours-- aŭ paro duope, paro de fours--
tio estas bona loko por komenci.
Kaj tiel longe, kiel ni vidas supren trajektorio super tempo,
vi estas en aparte bona loko.
>> La formulo ni uzas por pezo aferoj estas esence
tiu por la Syllabus, kio signifas, ke ni
doni pli pezo al korekto.
Ĉar estas tre ofte korekteco kiu postrestas pli tempo.
Fidu al mi nun.
Vi find-- almenaŭ en unu pset-- ke vi
elspezi 90% de via tempo laborante en 10% de la problemo.
>> Kaj ĉiu speco de verkoj krom unu aŭ du cimojn,
kaj tiuj estas la bugs kiu gardu vin malfrua nokto.
Tiuj estas kiuj ia eskapi vin.
Sed post dormi sur ĝi, aŭ ĉeesti oficejo horoj
aŭ demandojn enreta, estas kiam vi atingos ke 100% celo,
kaj tio estas kial ni pezo korekteco la plej.
Desegni iom malpli, kaj stiligi iom malpli ol tio.
Sed teni en mind-- stilo Estas eble la plej facila
de tiuj mordi ekstere kiel por la stilo gvidas.
>> Kaj nun, pli seriozan rimarku la akademia honesteco.
CS50 havas la malfeliĉan distingon esti la plej granda produktanto de Ad Board
kazoj preskaŭ ĉiujare historie.
Ĉi tio ne estas ĉar studentoj cheat en CS50 ajna pli ol ajna alia klaso,
sed ĉar per naturo de la laboro, la fakto ke ĝi estas elektronika,
la fakto, ke ni serĉas ĝin, kaj la fakto ni estas komputila sciencistoj
Mi povas diri ni bedaŭrinde tre bona por detekti ĝin.
>> Do kion signifas tio en realaj terminoj?
Do, por la Syllabus, la kurso filozofio
vere bolas malsupren al racia.
Tie estas tiu linio inter fari onia laboro sur via propra
kaj ekhavi iom da racia helpo de amiko,
kaj kategorie fari tiun laboron por via amiko, aŭ sendante lin aŭ ŝin via kodo
por ke li aŭ ŝi povas simple preni aŭ prunteprenis ĝin dekstra.
Kaj kiu transiras la linion ke ni desegnis en la klaso.
>> Vidu, la Syllabus fine por la linioj
ke ni desegni kiel estante raciaj kaj senkaŭza konduto,
sed vere faras sxvelajxon malsupren al la esenco
de via laboro bezonos esti via propra en la fino.
Nun kun kiu diris, estas heŭristiko.
Ĉar kiel vi eble imagine-- el oficejo horoj kaj la vidaĵojn
kaj la vídeos ni montrita tiel far-- CS50
Estas ja signifis esti kiel kunlabora kaj kiel kooperativo kaj sociaj
ebla.
Kiel kunlabora kiel estas striktaj.
>> Sed kun tiu diris la heŭristika, kiel vi vidos en la Syllabus,
estas ke kiam vi havas iun problemon.
Vi havas iun cimon en via kodo, kiun vi ne povas solvi, ĝi estas racia por vi
por montri vian kodon por iu alia.
Amiko eĉ en la klaso, amiko sidis apud vi ĉe oficejo horoj,
aŭ membro de la stabo.
Sed ili ne povas pruvi sian kodon al vi.
>> En aliaj vortoj, respondi al via question--
Mi bezonas help-- ne ho, jen mia kodo.
Rigardu ĉi kaj dedukti el ĝi, kion vi volas.
Nun kompreneble ekzistas maniero klare al ludo
tiu sistemo per kiu mi montros al vi miaj kodo antaŭ havi demandon.
Bonvolu montri al mi miaj via kodo antaŭ havi demandon.
Sed vidu la Syllabus denove por la fajna detalojn de kie ĉi tiu linio estas.
>> Ĝuste nun pentri la bildon kaj kunhavigi kiel travidebla kiel ebla
kie ni estas en la lastaj jaroj, Jen estas la nombro de Ad Board kazoj
ke CS50 havis super la lastaj sep jaroj.
Kun 14 kazoj ĉi plej freŝa aŭtuno.
En terminoj de la studentoj implikitaj, ĝi estis 20 iuj neparaj studentoj
pasinta aŭtuno.
Estis pinto de 33 studentoj kelkaj jaroj.
Multaj el kiu estas bedaŭrinde Ne plu ekzistas en la campus.
>> Studentoj partoprenas kiel procento de la klaso historie iris de 0%
al 5,3%, kio estas nur por diri tio estas ĉiujare defio.
Kaj al tiu fino, kio ni volas fari estas transdoni unu
ke ni dd-- nur FYI-- kompari je justeco al tiuj studentoj kiuj
Estas sekvante la linio laŭe.
Ni faru kompari ĉiuj aktualaj submissions kontraŭ ĉiuj pasintaj misioj
el la pasinteco multaj jaroj.
>> Ni scias tro kiel Guglas ĉirkaŭe kaj trovi kodo repositorios
linio, diskuto forumoj Interreto, laboro ejoj enreta.
Se studento povas trovi ĝin, ni povas certe trovi kiom ni bedaŭre fari.
Do, kion vi vidos en la Syllabus kvankam estas ĉi bedaŭro klaŭzo.
Mi certe povas estimi, kaj ni ĉiuj havas
bastono plenuminte la kurson kiel tiu, aŭ ĉi tiu mem super tempo,
certe scias kio ĝi estas kiel kiam vivo metas en la vojo, kiam vi havos
iu malfrua nokto deadline-- ne nur en tiu klaso,
sed another-- kiam vi tute elĉerpita, emfazis ekstere,
havi la malorda nombro aliajn farendaĵojn.
Vi faros en iu momento vivo certe estas malbona, eble malfrue
nokto decido.
>> Do por la Syllabus, estas tiu klaŭzo,
tia, ke se ene 72 horoj de fari iu malriĉa decido, vi posedas ĝis ĝi
kaj alveni al mi kaj unu el la kurso kapoj
kaj ni havos konversacio.
Ni manipuli tion interne en esperoj
ĝin igante pli de instruado momento aŭ vivon leciono
kaj ne io kun aparte drastajn sekvojn
kiel vi povus vidi en ĉi tiuj lertaj tie.
>> Do tio estas tre serioza tono.
Ni paŭzi por nur kelkaj sekundoj rompi la streĉiĝo.
>> [MUZIKO Ludante]
>> DAVID J. Malan: Bone, tiel kiel estis, ke por segue?
Por hodiaŭaj primara temoj.
La unua el kiuj estas abstraktaĵo.
Alia de kiuj tuj estos la reprezentado de datumoj, kiuj sincere
Estas vere seka maniero diri kiel ni irad solvi problemojn kaj pensante
pri solvi problemojn?
Do vi vidis en Scratch, kaj vi havas vidinta eble jam en pset1 kun C
ke vi ne nur povas uzi funkcioj, kiel printf,
ke aliaj homoj en jaroj pasintaj skribis por vi.
Vi ankaŭ povas skribi viajn proprajn funkciojn.
>> Kaj kvankam vi eble ne havas faris tion en C, kaj sincere en pset1
Ne vere necesas skribi vian propra funkcio ĉar la problem--
dum eble fortimiga ĉe unua glance-- vi vidos
povas finfine esti solvita per ne ĉiuj tiom da linioj de kodo.
Sed kun kiu diris, en terminoj skribi vian propran funkcion,
rimarkas ke C ne donu vi tiun kapablon.
>> Mi tuj iros en la hodiaŭa fontkodon, kiu estas disponebla jam en linio,
kaj mi tuj iros antaŭen kaj malfermita programon nomita funkcio 0.C,
kaj en funkcio nulo ni vidos kelkon.
En unua linioj 18 tra 23 estas mia ĉefa funkcio.
Kaj nun ke ni komencas legi kodo kiun ni ne skribas sur la muŝo,
sed anstataŭe mi skribis anticipe aŭ ke vi en problemo starigis
ricevu devi skribita anticipe.
Bona maniero por komenci legi aliulaj kodo
estas serĉi la ĉefa funkcio.
Elkompreni kie tiu eniro punkto estas kurante la programo,
kaj do sekvas logike de tie.
>> Do tiu programo ŝajne impresoj via nomo sekvata de dupunkto.
Ni do uzas GetString el la CS50 biblioteko
akiri ĉenon, aŭ vorton aŭ frazon de la uzanto en la klavaro.
Kaj tiam tie estas tio afero here-- PrintName.
>> Nun PrintName estas ne funkcio kiu venas kun C.
Ne en norma io.h.
Ne en CS50.h.
Estas ĝuste en la sama dosiero.
Rimarkos se mi rulumu malsupren oni bit-- linioj 25 ĝis 27--
estas nur bela vojo de komentoj via kodo uzante stelojn slashes.
Tiu estas mult-linio diri, kaj tio estas nur
mia priskribo en bluo de kion tiu funkcio faras.
>> Ĉar en linioj 28 tra 31, Mi verkis súper simpla funkcio
kies nomo estas PrintName.
Ĝi prenas kiom argumentoj vi dirus?
Do unu argument-- ĉar ekzistas unu argumento listigitaj ene la krampoj.
La tipo de kiuj estas String.
Kio estas PrintName estas kiel tiu nigra skatolo
aŭ funkcio kiu prenas kiel eniga ĉeno.
>> Kaj la nomo de tiu String oportune estos Nomo.
Ne S, ne N, sed Nomo.
Do kion signifas PrintName fari?
Ĝi estas bela simpla.
Apenaŭ unu linion de kodo por la printf, sed ŝajne ĝi
gravuraĵoj el "Saluton," tiom kaj tiom.
Kie la tiel kaj tiel venas de la argumento.
>> Nun tio ne estas grandega novigo tie.
Vere, mi prenis programo kiu povis estis skribitaj kun unu linio de kodo
metante ĉi tien, kaj ŝanĝis ĝin al io
kiu implikas iujn ses aŭ sep aŭ tiel linioj de kodo tuta vojo malsupren tie.
>> Sed estas la praktikado de principo konata kiel abstraktado.
Speco de encapsulando ene de nova funkcio kiu havas nomon, kaj pli
tamen tiu nomo laŭvorte diras, kion ĝi faras.
Mi volas diri printf-- tio ne aparte priskriba.
Se mi volas krei puzlo peco, aŭ se mi
deziras krei funkcion kiu presas ies nomon,
la belecon de faranta ĉi estas ke mi povas reale
doni tiun funkcion nomon kiu priskribas kion ĝi faras.
>> Nun ĝi prenas en enigaĵoj kiuj Mi arbitre nomas nomon
sed ankaŭ tio mirinde priskriba anstataŭ esti iom pli
genérico kiel S. Kaj void, cxar nun, nur signifas
ke tiu funkcio ne transdonu min nenio.
Ne estas kiel GetString ke laŭvorte manoj min ŝnuro
kiel ni faris kun la pecoj de papero per viaj samklasanoj pasintsemajne,
sed ĝi apenaŭ havas kromefikon.
Ĝi presas ion por la ekrano.
>> Do, je la fino de la tago, se mi farata funkcio-0, ./function-0,
Ni vidos ke ĝi petas pro mia nomo.
Mi tajpas David, kaj gxi tipoj Mian nomon.
Se mi faros gxin denove kun Rob, ĝi tuj diru "Saluton, Rob."
Tiel simpla ideo, sed eble extrapolar de ĉi mense
ke kiel viaj programoj akiri iom pli komplikaj,
kaj vi volas skribi eron de kodo kaj alvokon kiu code-- alpreĝi
ke code-- per iu priskriba enoficigi kiel PrintName,
C faras permesi al ni tiun kapablon.
>> Jen alia simpla ekzemplo.
Ekzemple, se mi malfermos supre enarkivigi de hodiaŭ nomita return.c,
rimarki kion mi faris tie.
La plejparto de ĉi tiu ĉefa funkcio estas printf.
Mi unue arbitre pravalorizi a variablon nomata x al la numero 2.
Mi tiam presi "x estas nun % I "pasante en la valoro de x.
Do mi simple diri kio ĝi estas.
>> Nun mi nur sentime asertante kun printf.
Mi cubing ke valoro x, kaj mi fari tiel nomante funkcio
nomita kubo forpaso x kiel la argumento,
kaj do ŝparas la eligo en la variablo mem, x.
Do mi clobbering la valoro de x.
Mi supera la valoro de x kun kiom
la rezulto de vokanta tiu kubo funkcio estas.
Kaj tiam mi simple presi iun lanugaj stuff tie dirante kion mi faris.
>> Do kio do estas kubo?
Rimarki kio estas fundamente malsama tie.
Mi donas la funkcio nomo kiel antaŭe.
Mi specifita nomon argumenton.
Tiu tempon ĝi nomiĝas n anstataŭ nomon sed mi povis nomi lin ajn mi volas.
Sed tio estas malsama.
Tion en la maldekstra.
Antaŭe ĝi estis kio ŝlosilvorto?
Infanoj.
Nun estas evidente int.
>> Do kio eble prenos?
Dum void signifas specon de nenieco, kaj tiu estis la kazo.
PrintName revenis nenion.
Ĝi faris ion, sed ne transdonu min
iu kiun mi povus meti sur la maldekstra flanko de egalsigno
kiel mi faris tie sur linio 22.
>> Do se mi diras en linio 30, kio estas tio verŝajne implicante
pri kio kubo faras por mi?
Yeah?
Revenas entjero.
Do manoj min, por Ekzemple, peco de papero
sur kiuj skribis la respondon.
2 cubed aux 3 cubed aux 4 cubed-- kion mi pasis en,
kaj kiamaniere implemento ĉi?
Nu, simple n × n × n Tiel mi povus kubo valoro.
Do denove, súper simpla ideo, sed demonstrativo
nun kiel oni povas skribi funkciojn kiu fakte havis nin reen
valoroj, kiuj povus esti de intereso.
>> Ni rigardu unu lasta ekzemplo tie nomita funkcio unu.
En tiu ekzemplo, ĝi startas akiri pli konvinka.
Do en funkcio, ĉi program-- avizo finfine
nomas funkcio nomita GetPositiveInt.
GetPositiveInt estas ne funkcio en la CS50 biblioteko,
sed ni decidis nin dezirus ke ĝi ekzistas.
>> Do se ni rulumu malsupren poste en la dosiero, rimarki kiom mi rondiris efektivigo
akiri pozitivajn int, kaj mi diras ke estas pli konvinka
ĉar tio estas deca nombro da linioj de kodo.
Ĝi estas ne nur malsaĝa iom ludilo programo.
Ĝi fakte havas iun eraron kontrolanta kaj fari ion pli utilan.
>> Do se vi ne vidis la walkthrough videos kiu ni enigita en pset1,
scias ke tiu estas tipo de buklo en C, simila en spirito
al la specoj de aferoj Scratch povas fari.
Kaj do diras faros.
Printi.
Tiam iru antaŭen kaj akiri n-- ricevas int kaj stoki ĝin en n,
kaj observu faras ĉi denove kaj denove kaj denove tiel longe kiel n estas malpli ol unu.
>> Do n tuj estos malpli ol unu nur se la homo ne estas kunlaboranta.
Se li aŭ ŝi estas tajpado en 0 aŭ -1 aŭ -50,
tiu buklo tuj subteni ekzekutinte denove kaj denove.
Kaj finfine rimarkos, mi simple redonas la valoron.
Do nun ni havas funkcion kiu vizitis belan
se CS50 devus implementar CS50.h kaj CS50.c por vi,
sed ĉi tie ni povas nun implementar ĉi mem.
>> Sed du rimarkoj pri iuj ŝlosilaj detaloj.
One-- kial mi deklaras int n, ĉu vi opinias, on line 29
anstataŭ simple faranta ĉi tie, kiuj estas
pli kohera kun kion ni faris pasintsemajne?
Yeah?
Bona penso.
Do se ni metis ĝin ĉi tie, ĝi estas kvazaŭ ni
konservi deklarante ĝin denove kaj denove.
Tio en si mem estas ne problemaj, per,
ĉar ni bezonas nur la valoro iam kaj tiam
ni iras por ricevi novan ĉiuokaze.
Sed bona penso.
Yeah?
>> Fermi.
Do ĉar mi deklaris n sur linio 29 ekster la buklo,
estas alireblaj tra tiu tuta funkcio.
Ne la aliaj funkcioj ĉar n estas ankoraŭ ene de tiuj buklaj
krampoj tie.
So-- certas.
>> Ĝuste.
Do tio estas eĉ pli al la punkto.
Se ni anstataŭe deklaris n ĝuste ĉi tie sur linio 32,
ĝi estas problema ĉar diveno kie ajn mi bezonos por aliri ĝin?
Sur linio 34, kaj la simpla regulo de thumb estas
ke vi nur povas uzi variablon ene de la plej freŝa krispa krampoj
kiun vi deklaras ĝin.
>> Bedaŭrinde, linio 34 Estas unu linion tro malfrue
ĉar mi jam fermita la frizita krampoj on line 33
kiu respondas al la frizita krampoj en linio 30.
Kaj tiel tio estas maniero diri ke tiu variablo int estas scoped,
tiel diri, nur interne de tiuj buklaj krampoj.
Ĝi simple ne ekzistas ekster ili.
>> Do ja, se mi tion erara, lasu min konservi la kodo
kiel is-- malĝuste skribis.
Lasu min kaj ne fari funkcio-1, kaj notice-- eraro.
Uzo de nedeklarita ensalutilo n sur linio 35, kiu estas tie ĉi.
Kaj se ni rulumu supren tie, alia.
Uzo de nedeklarita ensalutilo n sur linio 34.
>> Do la tradukilo, tin Estas rimarkante ke ĝuste
ne ekzistas eĉ kvankam klare estas tie vide.
Tiel simpla riparas estas deklarante ĝin tie.
>> Nun lasu min rulumi por la supro de la dosiero.
Kio elsaltas ĉe vi kiel esti iom malsama
el la aĵoj ni rigardis pasintan semajnon?
Ne nur mi havas nomon, ne nur fari Mi havas iujn akrajn inkludas supren supro,
Mi havas ion mi nomante prototipo.
Nun ke aspektas ege simila al kio Ni ĵus vidis antaŭ momento en linio 27.
>> Do ni konkludi el malsama erarmesaĝon kial mi faris tion.
Lasu min kaj forigi tiujn liniojn tie.
Kaj ni scias nenion pri prototipon.
Refari tiu dosiero.
Faru funkcio unu.
Kaj nun, malbenita, kvar eraroj.
Ni rulumu ĝis la unua.
>> Implica deklaro de funkcio akiri pozitivajn int estas nevalida en C99.
C99 simple signifas la 1999 versio de la lingvo
C, kiu estas kion ni ja uzas.
Do kion signifas tio?
Nu C-- kaj pli specife C compilers-- estas bela muta programoj.
Ili nur scias kion vi havas rakontis al ili, kaj tio estas
fakte temática de la pasinta semajno.
>> La problemo estas ke se mi iros pri efektivigo nomon ĉi tie,
kaj mi nomas funkcion nomita GetPositiveInt tie sur linio 20,
domadministranto teknike ne ekzistis ĝis la tradukilo vidas linio 27.
Bedaŭrinde, la tradukilo estas faranta aferojn supre, sube, maldekstra, dekstra,
tiel ĉar ĝi ne vidis la efektivigo de GetPositiveInt,
sed vidu vi provas uzi ĝin ĉi tie,
ĝi estas nur tuj bail-- krias al vi kun eraro message-- eble
kamufla kaj ne reale kompili la dosieron.
>> Do tn prototipo supren jen rekoni redunda.
Laŭvorte, mi iris malsupren tie kaj mi kopias nuda, kaj tial Mi metis ĝin tie.
Void estus pli taŭga, ni do laŭvorte kopii kaj alglui ĝin de ĉi tiu tempo.
Mi laŭvorte kopiita nuda ĝin.
Vere same kiel panon panero.
>> Iom aŭtoveturejon al la tradukilo.
Mi ne scias kion tiu faras ankoraŭ, sed mi ĵuras al vi
ke ekzistos eventuale.
Kaj tio estas kial ĉi line-- en linio 16-- finiĝas per punktokomo.
Ĝi estas redunda projekte.
Jes?
>> Se vi ne ligas via biblioteko al the-- ho, bona demando.
Sharp inkludas kaplinion dosiero inkludoj.
Bezonas be-- devus preskaŭ ĉiam estos ĉe la plejsupro
de la dosiero por similar-- por ĝuste la sama kialo, jes.
Ĉar en normo io.h estas laŭvorte linio
kiel tiu, sed kun la vorto printf kaj kun liaj argumentoj kaj lia reveno tipo.
Kaj tiel farante akrajn inkluzivi supren tie, kion vi estas laŭvorte faras
estas kopii kaj alglui la enhavon de iu alia redaktis supro.
Per cluing vian kodon en la fakto ke tiuj funkcioj ne ekzistas.
Yeah?
>> Absolute.
Do tre saĝa kaj ĝusta solvo estus, vi scias kion?
Mi ne scias, kion prototipo estas, sed mi scias
se mi komprenas ke C estas simple muta kaj rethinks supro al fundo.
Nu donu ĝin kio ajn.
Ni tranĉis tiu kodo, alglui ĝin supro, kaj nun puŝi ĉefa sube.
Tio ankaŭ solvus la problemon.
>> Sed vi povus tre facile veni supren kun scenejo en kiu A bezonos nomi B
kaj eble B nomas reen al A. Tio Estas io nomata rekursio,
kaj ni revenos al tio.
Kaj ĝi povas aŭ ne esti bona afero, sed vi povas definitive
rompi tiun solvon.
>> Kaj cetere, mi volus pretendi stile,
speciale kiam via programoj fariĝis tiu longa kaj tiu longa,
estas nur super konvena meti ĉefa ĉe la supro
ĉar ĝi estas la afero plej programistoj tuj zorgi pri.
Kaj tial estas iom purigisto, disputeble, fari ĝin la vojon
Mi origine faris kun prototipo eĉ
kvankam ĝi aspektas iom redunda unuavide.
Yeah?
Pardonu, ĉu vi povas diri ĝin pli laŭte?
>> Se vi ŝanĝas la lokojn de la efektivigo kaj la prototipo?
Do, tio estas bona demando.
Se vi re-klarigi cxi malsupren tie, vidu kio okazas.
Do se mi metas ĉi sube tien, vi diras.
Ho, pardonu.
Laŭta?
Eĉ pli laŭte.
Ho, bona demando.
Ĉu ĝi nuligas la funkcio?
Vi scias, post ĉiuj tiuj jaroj, mi neniam metis prototipo poste.
Do ni ja faras funkcio-1 post fari tion.
>> [Murmurante]
DAVID J. Malan: Ha, atendu.
Ni ankoraŭ devas meti ĉiun ĝis supro.
Do ni faru ĉi tien, se mi kompreni vian demandon ĝuste.
Mi metante ĉiun, inkludante la prototipo supre ĉefa,
sed mi meti la prototipo sub la efektivigo.
>> Do, se mi faros unu, mi ricevas reen al error-- neuzitaj variablo n.
Ho, tie.
Dankon.
Vidu, ni forigi ĉi.
Tiu estas malsama cimon, do ni ignoras tion.
Ni vere rapide refari tion.
>> OK, do datumoj argumento ne uzita de formato String
n-- ho, tio estas ĉar Mi ŝanĝis al tiuj ĉi tie.
Bone, ni scias, kion la respondo tuj to-- bone, ĉi tie ni iras.
Ha, dankon pro la pozitiva.
Bone, mi korektos tiun kodon after-- ignori ĉi aparta cimon
ekde ĉi was-- funkcias estas la respondo.
>> Do ne reskribi kion vi ĵus faris.
Mi suspektas la tradukilo Estas skribita en tia vojo
ke ignoras vian prototipo ĉar la korpo, por tiel diri,
el la funkcio havas jam implementado pli supren.
Mi devus reale konsulti La manlibro de la tradukilo
kompreni se estas iu alia implikaĵo, sed unuavide
nur provas kaj spertante, tie ŝajnas esti neniu trafo.
Bona demando.
>> Do ni veturu antaŭen nun, movante for de kromefikoj kiuj
estas funkcioj kiuj faras iun kiel vide sur la ekrano kun printf,
sed ne resendas valoron.
Kaj funkcioj kiuj havas revenon valoroj kiel ni ĵus vidis kelkajn.
Ni jam vidis, tiu nocio de atingo, kaj ni vidos ĉi denove kaj denove.
Sed nun, denove, uzi la regulon de dikfingro
ke variablo povas nur esti uzita ene de la plej ĵus malfermiĝis
kaj fermitaj frizita krampoj, kiel ni vidis en tiu aparta ekzemplo.
>> Kaj kiel vi atentigis, estas ability--
Vi povus solvi kelkajn el tiuj problemoj metante variablo tutmonde
ĉe la plejsupro de dosiero.
Sed en preskaŭ ĉiuj kazoj ni estus sulki la frunton sur tio,
kaj ja eĉ ne iros en tiu solvo ĝis nun.
Do nun, la takeaway estas ke variabloj havas ĉi nocio de atingo.
>> Sed nun ni rigardu alian seka formo de reale serĉi
en iu bela interesa efektivigo detaloj.
Kiel ni povus reprezenti informojn.
Kaj ni jam rigardis ĉi en la unua semajno de la klaso.
Rigardante binaroj, kaj memorante nin el dekuma.
>> Sed memoru el pasintsemajne ke C havas malsamaj datumtipoj kaj faskojn pli,
sed la plej utilaj nun eble tiuj.
A char, aŭ karaktero, kio okazas esti unu bajto, aŭ ok bitoj entute.
Kaj tio estas por diri ke la grandeco de char estas simple unu bajto.
A bajto estas ok bitoj, do tio signifas, ke ni povas reprezenti kiel multaj gravuloj.
Kiom da literoj aŭ simbolojn sur la klavaro
se ni havas unu bajto aŭ ok bitoj.
Pensu reen al semajno nulo.
Se vi havas ok bitoj, kiom entute valoroj
vi povas reprezenti kun mastroj de nuloj kaj?
One-- pli ol tio.
Do 256 entute se vi komenci kalkulon nulo.
Do se vi havas ok bits-- do se ni havis niajn duuma bulboj supren tien,
ni povus igi tiujn ampolojn en kaj ekstere en ajna de 256 solaj desegnoj.
>> Nun tiu estas iom problema.
Ne tiel por la angla kaj latinidaj lingvoj, sed certe
kiam vi enkonduki, por Ekzemple, aziaj lingvoj, kiuj
havas multe pli simboloj ol kiel 26 literoj de la alfabeto.
Ni efektive povus bezoni pli ol unu bajto.
Kaj dankeme en lastaj jaroj havas socion
adoptis aliajn normojn kiuj uzas pli ol unu bajton por posteno.
>> Sed nuntempe en C, la defaŭlta Estas nur unu bajto aŭ ok bitoj.
Entjera, dume, estas kvar bitokoj, alie sciata kiel 32 bitoj.
Kio signifas kio estas la plej granda ebla numeron ni povas reprezenti kun int
ŝajne?
Kun miliardo.
Do estas kvar miliardoj donu aŭ preni.
2 por la 32th potenco, se ni supozi neniun negativaj nombroj
kaj ĝuste uzi ĉiujn pozitivajn nombroj, estas kvar miliardoj
doni aŭ preni ebloj.
A kaleŝego, dume, estas malsama tipo de datumtipo en C. Ankoraŭ numeron,
sed estas reela nombro.
Io kun dekuma punkto.
Kaj ĝi rezultas ke C ankaŭ uzas kvar bajtoj
reprezenti glitpunktaj valoroj.
>> Bedaŭrinde kiom flotante punkto valoroj estas en la mondo?
Kiom reelaj nombroj ekzistas?
Estas malfinia nombro, kaj por ke afero
ekzistas malfinia nombro de entjeroj.
Do ni estas jam ia fosi nin truon tie.
Per ŝajne computers-- ĉe Almenaŭ programoj skribitaj en C sur them--
povas nur rakonti kiel alta kiel kvar miliardoj doni aŭ preni,
kaj glitpunktaj valoroj povas nur ŝajne
havas iu finia kvanto de precizeco.
Nur tiom da ciferoj post ilia dekuma punkto.
>> Ĉar, kompreneble, se vi nur havas 32 bitojn,
Mi ne scias, kiel ni tuj iru sur reprezentas realan numbers-- probable
kun malsamaj tipoj de ŝablonoj.
Sed estas certe finia nombro de tiaj ŝablonoj,
do tie ankaŭ, tio estas problema.
>> Nun ni povas eviti la problemon iomete.
Se vi ne uzas kaleŝego, Vi povus uzi duoblan
en C, kiu donas al vi ok bajtoj, kiuj Estas vojo pli eblaj ŝablonoj de nuloj
kaj karaj.
Sed estas ankoraŭ finita, kiu tuj esti problema, se vi skribos programaro
por grafikaĵoj aŭ por kaprico matematikajn formulojn.
Do eble vi efektive volas kalkuli ĝis pli grandaj ol tio.
Longa long-- stulte named-- Estas ankaŭ ok bajtoj, aŭ 64 bitoj,
kaj tio estas duoble longaj kiel int, kaj tio por longa entjera valoro.
>> Amuza fact-- se int estas kvar bajtoj, kiom longe estas longa en C tipe?
Ankaŭ kvar bajtoj, sed longaj ok bajtoj,
kaj tio estas pro historiaj kialoj.
>> Sed la takeaway nun Estas ĝuste tiu datumo havas
esti reprezentita en computer-- tio fizika mekanismo kun elektro,
ĝi estas ĝenerale stiras nulojn kaj ones--
per finia kvanto de precizeco.
Do kio estas la problemo tiam?
>> Bone estas problemo de entjero overflow.
Ne nur en C, sed en komputiloj gxenerale.
Ekzemple, se tiu estas bajto valoras bit--
do se tiu estas ok bit-- ĉiuj el kiuj estas la nombro unu.
Kio nombro estas tiu reprezentas se ni supozas
ĝi estas ĉiuj pozitivaj valoroj en duuma?
>> 255, kaj ĝi ne estas 256, pro nulo estas la plej malalta nombro.
Do 255 estas la plej alta unu, sed la problemo
ĝi supozas ke mi volus pliigo tiu variablo kiu
uzas ok bitoj entute se mi volas pliigo ĝin.
>> Nu, kiam mi aldonu unu por ĉiu de ĉi tiuj aĵoj,
Vi povas eble imagi visually-- simple kiel portanta la uzanta decimals--
io tuj rapidos maldekstren.
Kaj efektive, se mi aldonas la numeron al tio, kio okazas en duuma
estas ke ĝi superfluas reen al nulo.
>> Do se vi nur use-- ne int, sed sola bajto kalkuli entjeroj
en programo, per default-- Kiam vi atingos 250, 251, 252, 253, 254,
255-- 0 venos post 255, kiu verŝajne estas ne kio
uzanto tuj atendus.
>> Nun dume en glitpunkta mondo, Vi ankaŭ havas similan problemon.
Ne tiel kun la plej granda number-- kvankam tio estas ankoraŭ afero.
Sed kun la kvanto de precizeco ke vi povas reprezenti.
Do ni rigardu la ekzemplo jen ankaŭ de la hodiaŭa fonto code--
flosi-0.c.
>> Kaj rimarki estas súper simpla programo kiu
devus ŝajne presi kio valoro?
Kion vi Wager tiu tuj presi kvankam ekzistas iom de nova sintakso
tien?
Do espereble 0.1.
Do la ekvivalento de unu-deka ĉar mi faras 1 dividita per 10.
Mi stokante la respondo en variablo nomis f.
Tiu variablo estas de tipo float, kiu estas ŝlosilvorto Mi nur proponis ekzistis.
>> Ni ne vidis ĉi tion antaŭe, sed tio estas speco de neta vojo en printf
specifi kiom ciferoj vin volas vidi post dekuma punkto.
Do tiu skribmaniero signifas nur ke tie estas lokokupilon.
Estas por glitpunktaj valoro, kaj ho, per la vojo,
montri ĝin kun la dekuma punkto cifero post la dekuma punkto.
Do tio estas la nombro de signifaj ciferoj,
tiel diri, ke vi eble volas.
>> Do lasu min antaŭeniri kaj fari fari float-0, ./float-0,
kaj ŝajne 1 dividita per 10 estas 0.0.
Nun, kial estas tiu?
>> Nu denove, la komputilo prenas mi laŭlitere, kaj mi skribis 1
kaj mi skribis 10 kaj vi prenos diveno kio estas la supozita datumtipo por tiuj du
valoroj?
An int, estas teknike io iom malsama.
Ĝi estas tipe longa, sed ĝi finfine integra valoro.
Ne glitpunkta valoro.
>> Kio estas ke se tiu estas int kaj tio estas int,
la problemo estas ke la komputilo ne havas la kapablon
eĉ stoki ke dekuma punkto.
Do kiam vi faras 1 dividita per 10 uzante entjeroj
por ambaŭ la numeratoro kaj la denominatoro, la respondo devus esti 0.1.
Sed la computer-- ĉar tiuj estas integers--
ne scias kion fari kun la 0.1.
>> Do kio estas klare faras?
Ĝi simple ĵeti ĝin for, kaj kion mi vidas finfine
estas 0.0 nur ĉar mi insistis ke printf montri al mi unu dekuma punkto.
Sed la problemo estas ke se vi dividi entjero per entjero,
Vi get-- per difino de C-- entjero.
Kaj ĝi ne faros io agrabla kaj conveniently
kiel ronda ĝi ĝis la proksima supren aŭ malsupren.
Ĝi okazas detranĉi ĉio post la dekuma.
>> Do nur intuicie, kio estas probable embaraso?
Kio estas la plej simpla riparas ĉi tie?
Yeah?
Ĝuste.
Kial ni ne simple trakti tiujn kiel glitpunktaj valoroj efike
igante ilin kaleŝegoj aŭ duobloj.
Kaj nun se mi faros kaleŝegoj-0, aŭ ĉu mi kompilos kaleŝegoj-1,
kiu estas identa al kio ĝuste proponitaj.
Kaj nun mi faras kaleŝegoj-0, nun mi ricevos mian 0.1.
>> Nun tiu estas mirinda.
Sed nun mi tuj faros io iom malsama.
Mi scivolas kio estas vere irante sur sub la kapuĉo,
kaj mi tuj presi ĉi el 28 dekumaj lokoj.
Mi volas vere vidos 0.1000-- oni infinite--
[Inaudible] 27 nuloj post 0.1.
>> Nu ni vidu se tio kion mi ja akiras.
Faru kaleŝegoj-0 sama dosiero.
./floats-0.
Ni zomi en la drama respondon.
Ĉio ĉi momento, vi estis pensante 1 dividita per 10 estas 10%, aŭ 0.1.
Ĝi ne estas.
Almenaŭ tiel for kiel la komputilan koncernita.
>> Nun why-- okej, tio estas kompleta mensogo 1 dividita per 10 estas 0.1.
Sed why-- kiu ne la takeaway hodiaŭ.
Do kial la komputilo kredas, kontraste kun ĉiuj el ni en la ĉambron,
ke 1 dividita per 10 estas fakte tiu freneza valoron?
Kio estas la komputilo faras ŝajne?
Kio estas tio?
>> Tio ne dronigos, por se.
Overflow estas tipe kiam vi envolver ĉirkaŭ valoro.
Estas ĉi tiu temo de imprecision en Reela valoro
kie vi havas nur 32 aŭ eble eĉ 64 bitoj.
Sed se estas malfinia numeron de reelaj numbers--
nombroj kun decimalaj punktoj kaj ciferoj thereafter-- asekuro
vi ne povas reprezenti ĉiujn.
Do la komputilo donita ni la proksima partio
al valoro povas reprezenti uzante tiu multaj bitoj por la valoro mi vere volas,
kio estas 0.1.
>> Bedaŭrinde, se vi komenci fari math, aŭ vi
komenci engaĝante tiuj specoj de flosanta punkto valoroj en gravaj programs--
financa programaro, milita software-- ion
kie percepto verŝajne bela grava.
Kaj vi komencos aldoni nombroj kiel tiu, kaj komenco
kurante ke programaro kun vere granda enigoj
aŭ por multaj horoj aŭ multe el tempo aŭ multe da jaroj,
tiuj eta erarojn certe povas aldoni super tempo.
>> Nun kiel flanken, se vi iam vidita Superman 3 aŭ Office Space
kaj vi eble memoras kiom tiuj infanoj sxtelis
multan monon de siaj komputiloj uzante glitpunktaj valoroj
kaj aldonante la malgrandan forĵetaĵojn, atendu ke movie
nun faras pli sentita.
Jen kion ili aludante en tiu filmo.
La fakto ke la plimulto kompanioj ne ekrigardus
post certa nombro el dekumaj lokoj,
sed tiuj estas frakcioj de cendoj.
Do vi komencas aldonante ilin, vi komencos fari multan monon
en via banka konto.
Do jen Office Space klarigis.
>> Nun bedaŭrinde tie Office Space tie
kelkaj laŭleĝe tumulti kaj signifaj trafoj
de tiuj specoj de suba dezajno decidoj,
kaj ja unu el la kialoj ni uzas C en la kurso
Estas tiel, ke vi vere havas tiun teron ĝis kompreno de kiel komputiloj labori,
kiel programaro funkcias kaj ne prenu ion por sentado.
>> Kaj ja bedaŭrinde eĉ kun ke fundamenta kompreno,
ni homoj faras erarojn.
Kaj kion mi pensis mi dividas estas ĉi ok minutoj de vídeo tie prenita
el Modernaj Mirindaĵoj epizodo, kiu estas eduka programo en kiel aferoj funkcias
kiu pentras du bildoj de kiam nepropra uzo
kaj komprenemo glitpunktaj valoroj
kondukis al iu signifa bedaŭrinda rezultojn.
Ni rigardu.
[VIDEO Playback]
-Ni Nun reveni al "Inĝenierio Katastrofoj "sur Modernaj Mirindaĵoj.
Komputiloj.
Ni cxiuj venu al akcepti la ofte frustrante problemoj
alvenis kun them-- cimoj, virusoj, kaj programaro glitches-- por malgrandaj prezoj
pagi por la komforto.
Sed en alta teknologio kaj alta rapido milita kaj spaca programo aplikoj,
la plej malgranda problemo povas glorata en katastrofo.
>> La 4an de junio 1996, sciencistoj preparita ĵeti senpilotaj Ariane 5 raketo.
Ĝi portis sciencaj satelitoj desegnita
establi precize kiel la Tera magneta kampo interagas
kun sunaj ventoj.
La raketo estis konstruita por Eŭropa Spaca Agentejo,
kaj levis gxin el lia facileco sur la marbordo de Franca Gviano.
>> Aýdis pri 37 sekundoj en la flugo, ili unue
rimarkis ion tuj erara.
Ke la toberas estis swiveling laŭ maniero vere ne devus.
Ĉirkaŭ 40 sekundoj en la flugo, klare la veturilo estis en mizero,
kaj tio estas, kiam ili la decido detrui ĝin.
La gamo sekureco oficiro, kun terura intestoj, premis la butonon
kaj blovis la raketo antaŭ ĝi povis fariĝis danĝero por publika sekureco.
>> -tio Estis la virgulino vojaĝo de la Ariane 5,
kaj lia detruo prenis meti pro la difekto
enigita en la raketo programaro.
-la Problemo en la Ariane estis ke
estis numero kiu postulas 64 bitojn por esprimi,
kaj ili volis konverti tio al 16-bita nombro.
Ili supozis ke la nombro neniam tuj estos tre granda.
Ke plejparto de tiuj ciferoj en la 64-bita nombro estis nuloj.
Ili estis erara.
>> -la Nekapablo de unu programaro akcepti
la tipo de numero generita per alia estis ĉe la radiko de la malsukceso.
Programaro evoluo fariĝis tre peniga parto de nova teknologio.
La Ariane 4 raketo havis estis tre sukcesa.
Tiom de la programaro kreita por Ĝi ankaŭ estis uzita en la Ariane 5.
>> -la Baza problemo estis ke la Ariane 5.
Estis faster-- akcelis rapidan kaj La programaro ne konsistigis tion.
>> -la Detruo de la raketo Estis grandega financa katastrofo.
Ĉio pro minuto programaro eraro.
Sed tio ne estis la unua tempo datumoj konvertiĝo problemoj
estis plagado moderna raketo teknologio.
>> -in 1991 kun la komenco de la Golf-Milito
la Patriot misilon spertis similan specon
de nombro konvertiĝo problemon.
Kaj kiel rezulto 28 people-- 28 Usona soldiers-- estis mortigitaj,
kaj proksimume cent aliaj vunditaj.
Kiam la Patriot, kiuj estis supozitaj protekti kontraŭ alvenantaj Scuds,
malsukcesa pafi misilon.
>> -When Irako invadis Kuvajton kaj Ameriko ĵetis Desert Storm en frua 1991,
Patriot misilon piloj estis deplojitaj protekti Saŭda Arabio kaj Israelo
el iraka Scud misiloj atakoj.
La Patriot estas usona duona atingo surfaco-aero sistemo
fabrikita de la Raytheon kompanio.
>> -la Grandeco de la Patriot interceptor itself--
temas pri proksimume 20 metrojn longa, kaj ĝi pezas proksimume 2,000 funtojn.
Kaj portas kapon de ĉirkaŭ, Mi kredas ke estas malglate 150 funtoj.
Kaj la kapo sin trovas alta eksploda, kiu
havas fragmentojn ĉirkaŭe.
Do la carcasa de la kapo estas desegnita por agi kiel Buckshot.
>> -la Misiloj estas plenumataj kvar por ujo,
kaj estas transportitaj per duone tráiler.
>> -la Patriot antimisiles sistemo superas almenaŭ 20 jaroj nun.
Ĝi estis origine desegnita kiel aera arierulo misilon
pafi malsupren aviadiloj malamikoj.
En la unua Golfa Milito kiam tiu milito ŝaltis,
Armeo volis uzi ĝin malkonstrui Scuds, ne aviadilojn.
La iraka Aera Forto estis Ne tiom multe de problemo,
sed la Armeo estis maltrankviligita Scuds.
Kaj tiel ili provis ĝisdatigi la Patriot.
>> -Intercepting Malamiko misilon vojaĝante al Mach 5
tuj estos defianta sufiĉas.
Sed kiam la Patriot Estis enkuris servo,
la Armeo ne konscias pri irakan modifo ke
faris iliaj scuds preskaŭ neeble ĝin.
>> -Kio Okazis estas la Scuds ke estis eniranta estis malstabilaj.
Ili estis malfirma.
La kialo por tio estis la Iraqis-- por atingi 600 kilometrojn el
de 300-kilometro gamo missile-- prenis pezon el la antaŭa kapo,
kaj ili faris la kapo fajrilo.
Do nun la Patriot La provas veni ĉe la Scud kaj plejparto de la time--
la grandega plimulto de la time-- estus nur flugas per la Scud.
>> -Once La Patriot sistemo operatoroj realigis la Patriot maltrafis lian celon,
ili detonado la Patriot la kapo por eviti eblajn viktimojn se
estis permesita fali al la grundo.
>> -Tio Estis kio plej homoj vidis kiel grandaj buloj de fajro en la ĉielo,
kaj miskomprenita kiel interkaptas de Scud kapoj.
>> -Although Nokte ĉieloj, Patriots ŝajnis esti sukcese detruas
Scuds, ĉe Dhahran povus esti neniu eraro pri lia agado.
Tie la Patriot radaro sistemo miskalkulis venonta Scud
kaj neniam ĵetis pro por programaro difekto.
>> Estis la israelanoj kiuj unue malkovris ke la pli longa la sistemo estis,
la plej granda tempo discrepancia fariĝis.
Pro horloĝo enigita en la sistemo de komputilo.
>> -About Du semajnoj antaŭe la tragedio en Dhahran,
la israelanoj raportoj la Fako de Arierulo
ke la sistemo estis perdi tempon.
Post ĉirkaŭ ok horojn de kurado, ili rimarkis
ke la sistemo igas rimarkinde malpli preciza.
La Fako de Arierulo Respondis dirante ĉiuj Patriot piloj
por ne lasi la sistemoj dum longa tempo.
Ili neniam diris kio longe estis.
8 horoj, 10 horoj, mil horoj.
Neniu sciis.
>> -la Patriot pilo postenigitaj ĉe la kazerno
ĉe Dhahran kaj lia misa interna horloĝo estis en pli ol 100 horoj
sur la nokto de la 25 de februaro.
>> -ĝi Spurita tempon korekteco de ĉirkaŭ dekono de sekundo.
Nun dekono de sekundo Estas interesa nombro
ĉar oni ne povas esprimi en duuma ekzakte, kion
signifas ke ne povas esti esprimita akurate en ajna moderna cifereca komputilo.
Estas malfacile kredi, sed uzi tion kiel ekzemplon.
>> Ni prenu la numeron unu triono.
Triono ne povas esti esprimita en dekuma precize.
Unu triono estas 0,333 irante sur por malfinio.
Ne estas maniero por fari tion kun absoluta precizeco en dekuma.
Tio estas ĝuste la speco de problemo kiu okazis en la Patriot.
La pli longa la sistemo kuris, la malbona momento eraro fariĝis.
>> -After 100 horoj da operacio, la eraro en la tempo estis nur proksimume triono
de sekundo.
Sed en terminoj de celado a misilon vojaĝante al Mach 5
ĝi rezultis en sekvado eraro de super 600 metroj.
Estus fatala eraro cxar la soldatoj ĉe Dhahran.
>> -Kio Okazis estas Scud ĵeto estis detektitaj de frua averto satelitoj,
kaj ili sciis Scud alproksimigxas en lia ĝenerala direkto.
Ili ne sciis, kie ŝi venas.
Nun estis ĝis la radaro komponanto de la Patriot sistemo
defendas Dhahran lokalizi kaj observas aŭtoveturejo de la venonta malamiko misilon.
>> -la Radaro estis tre inteligenta.
Estus vere spuri la pozicio de la Scud
kaj tiam antaŭdiri kie ĝi probable estus
la sekva fojo la radaron sendis premas el.
Tio estis nomita la gamo pordego.
>> -Then Fojon la Patriot Decidas sufiĉa tempo havas
pasis reiri kaj kontroli la sekvantan situo por ĉi detektita objekto
ĝi superas.
Do kiam revenis al la malĝusta loko, ĝi tiam vidas neniun objekton.
Kaj decidas ke ne estis objekto.
Tio estis falsa detekto kaj ĝi delasas la aŭtoveturejo.
>> -la Venonta Scud malaperis el la radaro ekrano,
kaj duaj poste, brufermis en la fortikajxon.
La Scud mortigis 28.
Ĝi estis la lasta ekbriliĝis dum la unua Golfa Milito.
Tragike, la ĝisdatigita programaro alvenis en la mateniĝo de la sekva tago.
La programaro difekto devis estis fiksita, fermo
unu ĉapitro en la tumulta historio de la Patriot misilon.
>> [FINO VIDEO Playback]
>> DAVID J. Malan: Estas tio por CS50.
Ni vidos vin merkredon.
>> [MUZIKO Ludante]