>> [MUZIKO Ludante]
DAVID Malan: Saluton, ĉiuj.
Jen CS50 supersection.
Atribuita Sekcioj ne faros komenci alian semajnon.
Kaj tiel hodiaŭ, mi estas ĉi tie with--
>> MARIA: Maria.
DAVID Malan: --to reale rigardu problemo
fiksita, la kurso unuaj semajnoj de materialo,
akiri vin orientita kun CS50 IDE, iom de Linukso, la mastruma sistemo kiu estas
kurante sur IDE, tiel kiel rigardu kelkajn el la transiro
de Scratch al C gvida ĝis problemo starigis unu.
>> Do sen pli enkonduko, en problemo starigis unu,
vi tuj estos enkondukitaj al CS50 IDE, kiu
estas tiu ttt-bazita programado medio kiun ni uzas por
skribi programojn.
Ĝi estis desegnita por rigardi tre rememoriga de tipa komputilo
sistemo kurante mastruma sistemo nomita Linukso.
Sed estas en la tn nubo, kio signifas ĉiuj en la klaso
povas fakte havi lia aŭ ŝia propra konto kaj uzi ĝin, ankaŭ.
>> Do plejparto de vi probable neniam uzis Linuksa medio antaŭ aŭ eble
eĉ komandlinio medio.
Kaj komandlinio medio estas malsama.
Estas ĉio teksta.
Estas ĉio klavaraj komandoj.
Kaj ĝi estas neniu mousing, neniu ikonoj, neniu dialogo fenestroj, neniu menuoj.
Ĝi estas pure tekston.
Do unue, ĝi speco de sentas kiel paŝo
Malantaŭen en terminoj de sofisticación.
Sed finas estante multe pli potenca, certe,
por komputila sciencisto, finfine.
>> Do ni rigardu.
Jen mi estas ĉe CS50.io, tra kiu vi povas ensaluti en CS50 IDE.
Kaj multe kiel en Scratch, ekzistas tri primaraj areoj al tiu ekrano.
Do sur la maldekstra flanko, ni havas kio estos la dosieron retumilo.
Kaj ekzistas tiu dosierujo ĉe supro, kiu estas nun malplena
ekde mi forigis ĉiujn miajn dosierojn antaŭ supersection.
Kaj jen kie ni savi C dosierojn kiujn ni skribos.
Ĉe la supra dekstra, ni havas lokon kie ĉiuj niaj kodon tuj akiri skribita.
Kaj efektive, se mi klakas ĉi plus, ĉi tuj lasu min elekti novan dosiertipon.
Kaj tie mi povas komenci skribi C-kodo aŭ, vere, ajna nombro da aliaj lingvoj.
>> Kaj tiam ĉe la fundo kie ĝi diras jharvard @ ide50-- kaj via volo
diru ion iom different-- kio tiu vokis?
Terminalfenestro.
Yeah.
Do la fina fenestro estas la tn komandlinio
Interfaco per kiu vi povas interagi kun la suba operaciumo.
Kaj nun, ni tuj fari tre malmulta uzo de this--
nur kompili, rigardi erarmesaĝojn kiuj ni vidas,
kaj kuri niaj programoj.
Sed finfine, ni tuj fari tiom pli, ankaŭ.
Kaj vi eĉ povas instali softvaron kaj administri via laborspaca
ene CS50 IDE, ankaŭ.
Sed pli en kiuj alifoje.
>> Do ni iru antaŭen kaj skribi tre simpla programo nur
iri tra varmigo de hello.c, kiu estas eble
la plej simpla programo ni povas skribi.
Mi jam malfermis novan langeton.
Mi tuj iros antaŭen kaj diru inkludas normon io.h.
Tiam int main (void).
Kaj tiam printf ("Saluton, mondo" backslash n, proksime citaĵo,
Fermi krampoj, kaj punktokomo.
>> Bone.
Do nun rimarkas mia fenestro estas sen titolo.
Do mi tre rapide iranta por iri al Dosiero: Konservi.
Kaj gravas ke Mi nomas ĉi ne "saluton."
Do tre komuna eraro, speciale en problemo starigis unu,
estas akcidente simple nomas via programo "akvo" aŭ "avida" aŭ "Mario"
aŭ "kredito" aŭ simile.
Sed vi efektive deziras fari ke vi havas la dosiersufikso
ĉar tio estas la nura maniero kiu la tradukilo kaj ankaŭ la kodo redaktoro
scias ke vi estas fakte skribi C-kodo.
Do lasu min antaŭeniri kaj klaku Save.
>> Kaj nun, ankaŭ, kion CS50 IDE faris por ni estas ĝi estas ankaŭ
sintakso elstarigita ĉion.
Do gxi konsistas ĉion tre bunta.
Kaj la tuta celo de kiu ne estas funkcia.
Estas nur por desegni okulojn al la koncepte malsamaj pecoj
de tiu programo.
Do ni iru antaŭen kaj kompili tiun.
Kaj mi povas kompili ĉi en kelkaj manieroj.
Kaj en semajno unu, la malnova lernejo vojo ni faris
ĝi estis laŭlitere ĉe la komando line-- "tin hello.c."
Kaj tiam mi batis Enter.
Kaj nenio ŝajnas okazi en la fina fenestro.
Sed kion faris ŝanĝon en la IDE?
Kie, denove, IDE nur signifas Integrita medio de disvolviĝo.
Estas fantazio maniero diri tiu disvolviĝo integrita
medion por disvolvi programaron.
Do kion ŝanĝi en la UI?
Kion vi rimarkas ke io alia, Maria?
>> MARIA: Mi rimarkis ion sub la IDE50 leterujo tien.
>> DAVID Malan: Yeah.
Do tien, ne nur do ni havos "hello.c."
Ni havas ankaŭ "a.out", kiu estas speco de mutaj nomon por programo.
Sed ja ĝi estas la defaŭlta nomo por programo kiam vi simple kompili vian kodon
kaj ne diras la tradukilo kio dosiero por eligo.
Do se mi volas kuri ĉi, Mi bezonas diri la compiler--
aŭ prefere, mi devas diru la laborspaca ke mi
volas kuri la programon nomata "a.out."
Enter.
Kaj estas "saluton, mondo. "Nun la" ./ ".
Estas vere grava.
Kvankam kutime ni nur skribi la nomojn de komandoj,
kiam ĝi estas programo vi havas skribita, vi volas diri "./"
ĉar tio eksplicite diras Linukso ke vi volas kuri programon nomata
"a.out" jen en tiu, kie pentras signifas tiu dosierujo kiu mi aktuale
en, kiu hazarde estas nomata laborspaca, "a.out.
Ĉar se mi simple diris "a.out" Enter, Mi tuj get "a.out komando ne
fondi "ĉar la computer-- ĉar mi inventis "a.out;"
ĝi ne venis kun la computer-- ne scias kie serĉi ŝin,
kvankam pravas sub mia nazo, por tiel diri.
BONE.
Do ni povus ŝanĝi tion al esti "tin -o saluton hello.c."
Kaj se mi batis Enter, kio programo estas tiu iranta eligo por mi?
Kio estas la nomo de la dosiero?
Jes, en dorso.
Tio ĝustas. "Saluton."
Do "saluton" tuj estos la nomo de la programo
ĉar ni uzis tn komandlinio argumento, kiu estas nur
maniero de ŝanĝi la konduton de la tradukilo fakte eligo
specifa dosiernomo.
Kaj efektive, se mi zomi eksteren kaj rigardu tien,
nun mi havas ne nur "a.out" kaj "hello.c" sed ankaŭ "saluton", ankaŭ.
Do nun mi povas fari "./hello," Enter.
Kaj estas "saluton, mondo."
Sed lastly-- kaj ĉi nun estos la konvencio
ni uzas por la tuta semestro, typically--
Estas vi ankaŭ povas simple diri "fari saluton."
Kaj ja, ĝi estas jene lin tuŝas dati ĉar ĝi jam ekzistas.
Lasu min antaŭeniri kaj eltiri, kun la rm komando, ambaŭ "a.out" -
kaj diri "forigi regula dosiero a.out?"
Tio nur signifas, estas vi certas ke vi volas forigi ĝin?
Mi tuj diru jes.
Kaj tiam mi tuj forigu "saluton" sed ne "hello.c."
Mi tuj diros "jes" eksplicite, sed "y" estas sufiĉa, ankaŭ.
>> Kaj nun rimarkas se mi tajpu ls-- kiu, memoru,
signifas list-- ĝi listigas ĉiujn de la dosieroj en mia dosierujo.
Kaj efektive, se mi zomi eksteren kaj rigardu supre maldekstre,
ĝi konfirmas ke kio estas en tiu leterujo, eĉ
kvankam ĝi estas etikedita kiel IDE50 tien kaj ne laborspaca, estas nur "hello.c."
Do nun cxi tie, se mi ĉu "fari saluton," Enter,
nun mi vidas multe pli longa komando sed pli malnaiva komando kiu tuj
esti utila en la semajnoj veni.
Kaj nun mi povas diri "./hello."
>> Do ni prenu rapidan turneo iuj aliaj Linukso ordonas.
Do kial ni ne prenas paŝon reen kaj reale rigardi C pli
ĝenerale, transitioning de Scratch al C, kaj tiam konkludas kun rigardo
ĉe la unua problemo starigis en C. Bone.
Do mi tuj iros antaŭen kaj nur pura mian laborspaca kun Kontrolo-L nur
teni la ekranon neta.
Sed tio havas neniun funkcian efiki alie.
>> Memoru ke ni jam vidis kelkaj komandoj nun.
Do ni vidis tin, kiu ĝenerale vi ne devos ekzekuti permane anymore.
Ni anstataŭe uzas konsiston.
Sed ni ankaŭ vidis ls, kiu montras liston de la dosieroj en mia dosierujo.
Kaj nun kial estas there-- ekzistas du dosieroj nun, "saluton" kaj "hello.c."
Kial estas stelo aŭ asterisko post "saluton"?
Kion tio signifas, bazita sur kion ni vidis en la semajno unu?
Kion vi pensas?
Kion faras la stelo signifas?
>> MARIA: For-- la programo "saluton"?
DAVID Malan: "Saluton *".
Yeah.
Ho, jes?
Ho, plenumebla.
Tio ĝustas.
Do tio signifas ke "saluton" estas plenumebla.
Do efektive, jen kial Mi povas fari "./hello."
Bone.
Do kion alian mi povas fari tie ĉi?
Nu, Ĝi rezultas mi povas ankaŭ krei dosierujojn.
Do lasu min antaŭeniri kaj krei, ekzemple iun "pset1" dosierujo.
Kaj la problemo aro specifo devos vin fari ĝuste tion,
tial vi ne devas memori hodiaŭ.
Sed "mkdir pset1" ŝajnas havi neniun efikon.
Sed denove, neniu erarmesaĝo estas ĝenerale bona afero.
Do se mi tajpas "ls" now-- ah, nun Mi havas plenumeblan dosieron nomatan
"saluton," C dosiero nomata "hello.c".
Kaj tiam la malantaŭa oblikvo, do al paroli, signifas ke tiu estas dosierujo.
>> Do ja, nun mi volas malfermi ĝin.
Kaj mi ne duobligi alklaku ĝin kiel en GUI, grafika medio.
Mi anstataŭe diri "lumdisko pset1."
Enter.
Nenio interesa ŝajnas havi okazis krom mia eta prompto
here-- ĉi estas Linukso la maniero de memorante mi tie, do kion dosierujo estas malfermitaj.
Ĝi simple diras al mi eksplicite kontraste al grafike.
Kaj se mi tajpas "ls," kial do Mi vidas alian suflori tuj, ĉu vi pensas,
kiam mi printi la enhavo de pset1?
MARIA: Vi probable ne havi ion en tie.
DAVID Malan: Yeah.
Tial do ni havas ne evidente kreis ion tien
ĉar mi ĵus kreis la dosierujon.
Nun, se mi volis krei file-- por Ekzemple, mi povus krei novan dosieron.
Kaj poste mi povis iri al Konservi kaj konservi ĝin kiel,
kiel, "mario.c" se vi faras la normo eldono de pset unu.
Kaj tiam, kiel ajna Mac aŭ PC, nur elektu la dosierujon "pset1, Savi.
Kaj nun la dosiero estas malplena.
Sed ni zomi denove dum sekundo.
Ni faru ls tie.
Nun ni vidas "mario.c".
>> Do ekzistas kelkaj aliaj komandoj kiuj valoras konservanta en menso super time--
klara, aŭ Kontrolo-L estas kion mi havas estis frapanta; mkdir ni vidis;
rm ni vidis, tiel, kiu estas por forigo aŭ viŝante dosiero.
Beware vi povas also-- kaj se vi rigardas ĉe enretaj seminarioj, vi rm -rf
Estas tre komuna maniero diri forviŝi dosierujon kiu havas aferojn en ĝi.
Nur esti súper, súper zorgema.
-rf signifas rikure forviŝi ajn ĝi estas
vi provas forigi kaj perforte forigi ĝin.
Do rekursia rimedoj se ĝi estas dosierujo kun dosierujo kun dosierujon per dosierujon,
forigi ĉiujn el ili.
Kaj perforte signifas eĉ ne demandi min jes aŭ ne, mi estas certa?
Do estas súper danĝera vojo de viŝante multaj aĵoj rapide.
Sed beware-- tro ofte faras kuraĝa studento hazarde forviŝi, diri, pset
unu, ekz.
>> MARIA Kaj se ili nur fari -r, ili tuj
demandi ilin pri ĉiu unuopa dosiero.
>> DAVID Malan: Kio estas pli modere ĝena.
>> MARIA: Yeah.
>> DAVID Malan: Do jen kial tiel multaj el ni, mem inkluzivita,
am en la kutimon uzi -rf.
Sed ĝi estas danĝera.
Do aĉetanto beware.
Kaj tiam mv afablas interese nomita.
Do tiu estas la movado komando, kiu sentas iom stranga
ĉar vi povas ja uzi ĝin movi dosierojn de loko al alia.
Ekzemple, supozu ke mi paneas.
Supozi ke mi kreis nova dosiero por la pset.
Kaj Mi savis ĝin kiel "greedy.c."
Sed supozu mi hazarde savi ĝin en IDE50-- tiel en mia laborspaca mem
kaj ne en pset1.
>> Vi povas vidi kiel multe ĉe pinto maldekstra.
Ekzistas "greedy.c."
Kaj estas kelkaj solvoj.
Do, mi povas uzi la súper uzantamika maniero
de simple trenante kaj delasante ĝin.
Kaj tio estus reale korekti tiun problemon.
Sed hodiaŭ, ni provas rigardi la pli arkanaj sed potencaj manieroj
fari tion.
Do mi prenas "ls" en pset1.
Mi nur vidas "mario.c."
Lasu min antaŭeniri kaj ne "cd ..".
Do KD denove estas ŝanĝo dosierujo.
".." Signifas kio, kvankam?
Lasta tempo mi diris "cd pset1 "iri en pset1.
Do kiam mi diras "cd ..", kion mi faras?
Malantaŭen.
Yeah.
>> Do ĝi estas tuj la tn gepatro.
Iri unu nivelon supren, kiel eliranta el dosierujo.
Do Enter.
Kaj efektive, rigardu kion ĝi faris.
Ĝi movis min nur en laborspaca anstataŭe de en pset1, kiu estas en laborspaca.
Kaj nun se mi tajpas "ls", ekzistas tuta aro da aĵoj.
En ekzistas "greedy.c".
Do nun mi uzas mv laŭvorte movi "greedy.c" en pset1.
Kaj tiel multajn Linukso komandoj labori ĝuste kiel ĉi.
Ili prenas neniun argumentoj aŭ ili prenas unu argumento aŭ ili prenas du komandlinio
argumentojn kaj tiel antaŭen.
Kaj en ĉi tiu kazo, ĝi estas laŭvorte fari kion
diras, kvankam succinctly-- movi greedy.c en pset1.
Enter.
Nenio ŝajnas okazi.
Sed se mi faras ls denove, avida forestas.
Kaj se mi faras "cd pset1", Enter, kaj tiam ls denove, nun ĝi estas en la ĝusta loko.
Kiel flanken, se por iuj reason-- speciale
se vi havas intermitan reto konektebleco
aŭ vi marsxante kampuso kun via tekkomputilo kovrilo
fermita kaj poste malfermu ĝin denove kaj via laborspaca
similas iun el sync, ne granda interkonsento.
Nur reŝarĝi vian retumilon fenestro, kaj ĝi devus
resync tiel ke la maldekstra dosiero retumilo aspektas ekzakte
kiel la fina fenestro.
Ne maltrankvili.
Kiam en dubo, reŝarĝi la paĝon, do longe kiel vi savis la dosierojn jam.
BONE.
Do mv povas ankaŭ esti uzita por renomi dosierojn.
Kaj ni rigardu tiun finan komandon tie.
Do suppose-- kaj tiu estas súper komuna ankaŭ frue.
Iuj studentoj foje krei dosieron nomitaj, ni say-- kio estas alia?
Kiel "WATER.C."
Do mi nur krii, por neniu kialo, en ĉiuj ĉapoj.
Sed tio ne estas la korekta nomo por la dosiero
se nur ĉar nia problemo aro specifo ne diris al vi
savi la dosieron kiel ĉiuj kaskedoj "WATER.C."
Anstataŭe, ni atendas "water.c" en minuskla.
Kaj, fakte, tiu estas problema ĉar check50,
programon vi tuj renkonti en problemo
fiksita kiu aŭtomate testoj la praveco de via kodo
tuj krias al vi se ĝi ne povas trovi "water.c" en ĉiuj minuskla.
>> Do mi bezonas korekti tiun.
Do multaj malsamaj manieroj fari tiun, la unuan el kiuj
estus Kontrolo-click aŭ dekstra-klako la dosiernomo kaj nur ŝanĝi Renomi.
Tute bone fari tion.
Sed denove, hodiaŭ, ni faras ĝin iom amatoro.
Ni uzu mv ŝanĝi "WATER.C" al "water.c."
Do vi povas uzi ankaŭ la unua argumento renomi ĝin al la dua argumento
se la dua argumento ne estas, Fakte, dosierujo aŭ dosierujo nomon.
>> Bone.
Kaj fine, iom trick-- do mi estas en miaj laborspaca dosierujo nuntempe.
Se mi volas akiri en pset unu, Mi certe povas tajpi "cd pset1."
Sed ĝi estas tiel teda por tajpi "pset1" aŭ plu dosiero nomoj aŭ dosierujo nomoj
ankoraŭ.
Do tre ofte en Linukso, kio vi povas fari estas ektajpu "PSE"
kaj simple akiri enuan, batis Tab, kaj lasu la komputilo elpensi por vi.
Super helpema akiri en tiu kutimo.
La nura ruzo estas se vi havas multnombraj dosieroj aŭ dosierujoj startanta
kun la litero "p" aŭ "ps" vi havu
tajpi kelkajn pli antaŭ la komputila scias kion fari.
>> MARIA: Ni ŝatas ŝparvojoj.
>> DAVID Malan: Ĉi volo savu vin tiom da tempo.
Kaj ankaŭ, kiel ni diris en prelego, vi povas rulumi supren en historio, supren kaj malsupren,
trovi ĵus ekzekutita komandoj, tiel.
Bone.
Do nun, ni turnu nian atenton reen por simpla programo, saluton mondo.
Do ni kompilis ĉi ĝuste.
Kaj nun kial ni ne prenu Rigardu la datumtipoj
kaj tiam transiro de iuj responda Scratch blokoj al C.
MARIA: Imponega.
Do nun ke vi jam komencis skribi programojn en C,
ni tuj komencis paroli pri datumtipoj kaj variabloj.
Do iuj datumtipoj ke vi volus scii ekde nun
estas kiuj estas elstarigitaj en blua.
Do ni havas int unua, kiu staras por entjero.
Kaj kiu tenas entjeroj, kiel vi havu guessed-- do 1, 2, 3,
kaj iu alia entjeroj ke vi povas pensi.
>> DAVID Malan: Kaj ankaŭ negativaj.
>> MARIA Kaj ankaŭ negativaj aĵoj, Yep.
Kaj 0.
Tiam ni havas kaleŝegoj, kiu estas glitpunktaj nombroj.
Do jen ĉio la reelaj nombroj kiuj havas dekuman punktoj.
Do 5.0, 5.2, kaj eĉ pli ciferoj post la dekuma punkto,
tiel, kaj ankaŭ negativaj aĵoj.
Tiam ni havas char kiu estas karaktero.
Do mi opinias ke ni parolis pri tiu en prelego hodiaŭ.
Sed ni havas leterojn, por example-- A, B, C-- kiu povas esti stokita kiel char.
Sed tiam ni havos multe pli simboloj kiu povas esti stokita kiel char.
Kaj tiuj estas stokitaj kiel ASCII.
>> Kaj tiam ni havas bool, kiuj estas Booleans.
Kaj tiuj taksi al Vera aŭ Falsa aŭ 1 kaj 0, respektive.
DAVID Malan: Sed memoru ke bool devenas la CS50 biblioteko.
Do ĝi ne estas konstruita en C, sed ĝi estas super utila
havi la nocio de vera kaj falsa.
Kaj eĉ se vi povus think-- amuza fakto.
Bool teknike bezonas kiom da bitoj, vere, reprezenti Vera kontre Falsa?
Kiom da bitoj vi opinias vi bezonus, maksimume?
Jes, ĝuste tiu.
Do rezultas ke C ne povas doni al vi nur unu bito.
La plej malgranda unuo de mezuro vi povas akiri estas ok.
Do estas iom malŝparema ili vi uzante tutan bajto aŭ ok bitoj,
reprezenti Vera aŭ Falsa.
Sed tio estas nur la vojo ĝi estas implementado en C por la CS50 biblioteko.
MARIA Kaj tiam tiuj kiuj ni estas Ne tuj parolos pri kiel vaste
dekstra now-- duobla, jen por pli grandaj flosoj.
Longaj longaj kaj mallongaj ankaŭ por entjeroj.
DAVID Malan: Efektive.
En hacker eldono de pset unu, ni fakte uzi longajn longa.
Sed por la normeldono, ĝi ne devus esti necesa.
MARIA: Cool.
BONE.
Do operators-- vi devus esti verŝajne konata kun la plej multaj el tiuj.
Krome, +; subtraho, -.
Por multipliko, ni havas la *.
Do ne la ikso, ke ni kutimas uzi.
Divido, ni havas la backslash.
Kaj module estas nia lasta operatoro ke ni intencas paroli pri aktuale.
Estas operatoro kiu nin permesas preni la reston de malkonsento.
Do se ni havas 4% 2, 4 dividitaj per 2 estas 2 kun restaĵo de 0.
Do 4% 2 estas 0.
4% 3 estas 1.
4% 5 estas 4, kiel vi povus diveni.
Kaj memoru uzinte ĉiuj tiuj operatoroj uzi la PEMDAS reguloj.
>> DAVID Malan: Do esti klara, se vi do 4% 2, kial tiu 0, ĝuste?
>> MARIA: Pro 4 dividite per 2 estas 2 kun restaĵo de 0.
Do module donas nin ke reston kiel kontraste al la rezulto de la divido.
DAVID Malan: Kaj efektive, kion ni trovos helpema
cxar estas ke en iuj problemoj tio ne nepre unu,
se vi volas havi la efekto de restriktanta vin
al gamo de nombroj kiel 0 tra ion,
vi povas uzi module envolvi ĉirkaŭe pli frue ol kiel la 2 miliardoj
aŭ la 4 miliardoj valoro kiu ni raportis en prelego.
>> MARIA: Yeah.
Kaj eĉ en "avida" ni eble.
DAVID Malan: Jes, en problemo starigis unu, ankaŭ.
MARIA: Jes, bela.
DAVID Malan: Bona sugesto.
MARIA: Pardonu.
Buleaj expressions-- tiel por Buleaj operatoroj,
ni iras por paroli pri ĉiuj de tiuj kiujn vi vidas ĉi tie.
Do nun, ni havas du egala signoj listigita por egalaj.
Do tiuj estas por komparo.
Ĝis nun, ni nur vidis unu egala signo.
Tio estas kiam ni asigni valoron al variablo.
Do se ni vidis int n = 5, tiam ni atribuita 5 al la variablo n.
Sed se ni volas uzi == por Kompare, ni povas kontroli se n == 5.
Kaj se n == 5, tiam tio estas vera.
>> Do Bulea operatoroj permesos, esence,
taksi Buleaj esprimojn al Vera aŭ Falsa.
Do ne equals-- ni havas la ekkrion markon kaj egaluloj.
Do ni povus ankaŭ kontroli se n ne egala 5-- tiom n! = 5.
Malpli ol, malpli ol aŭ egala al, granda ol, pli granda ol aŭ egala al,
kaj tiam ni havas la logikan KAJ kaj la logika AŬ.
Kaj tiuj nin permesas taksi multoblaj Buleaj esprimoj kune
esence kunvenos kiel unu tuta Bulea esprimo.
Do se ni volas trovi numeron, diru, kiu estas pli granda ol 5 sed malpli ol 15
samtempe, ni uzus la logika KAJ operatoro vidi se n estas
pli granda ol 5 && n malpli ol 15.
DAVID Malan: Sed ĉi tie, tro, ĝi estas vere facila
frue al hazarde uzi nur ununuran ampersand
aŭ ununura vertikala stango.
Kaj espereble la tradukilo krias al vi ĉar ili efektive
havas tre malsamajn signifojn.
Por tiuj scivolaj, ili estas uzita por bitlarĝa operacioj,
funkcianta sur individua bitoj.
Sed vi do volas la paro de ili tie.
Kaj super grava estas ke unua, la egalsigno,
kiu estas la egaleco operatoro kiel kontraste al la asigno operatoro.
>> MARIA Kaj la vertikala baro estas lokita inter Forigi kaj Return.
DAVID Malan: Jes.
Sur tipa usona klavaro.
>> MARIA: Yep.
Do ni saltas rekte en kondiĉa deklaroj.
En Scratch, vi havas jam vidis, probable,
se deklaroj kiuj permesas vin kontroli ĉu io estas vera, tiam
fari ion alian.
Do vi eble volis kontroli se via sprite estas
tuŝi alian sprite aŭ la limo de via ekrano.
Kaj tiam vi eble volis fini la ludon aŭ fari ion alian.
Do la sintakson por ke estas "se (kondiĉo)."
Do se via sprite tusxas ion, do estas ene la frizita krampoj.
>> Tiam ni havas se-alia deklaroj.
Else nin permesas fari ion se la kondiĉo, ke ni
kontrolu en la komenco ne estas vera.
Do se la sprite tusxas la limo fari tion, alie fari ion alian.
Do alie fari ion alian.
Sekvas mallonga ekzemplo por tio.
Do se (military_time <12), ni volas printf "Bonan matenon!"
Alie ni tuj printf "Bonan vesperon!"
Baza ekzemplo.
>> DAVID Malan: Bonan.
>> MARIA: Cool.
Do nun ni havas ŝaltilon deklaroj.
Ŝaltilo deklaroj ĝenerale ladskatolon permesi nin fari multa la sama afero
ke ni ĵus parolis cxirkauxita se deklaroj.
Ekzemple, nun ni havas la ĝenerala formo de la ŝaltilo deklaro
kiu permesas preni variablo nomis n
kaj kompari ĝin al multajn malsamajn valorojn, kiujn ĉi tie ni
vokis constant1, constant2.
Ni povas havi multe pli.
Kaj tiuj estas nomitaj kazoj.
>> Do se ni havas ŝaltilon statement-- kaj ĉi verkoj
nur por integers-- ni havas ŝanĝiĝema tiukaze tio n.
Se la variablo n estas egala al constant1, ni
ekzekutos iu fragmento de kodo aŭ io kiun ni volas fari.
Kaj tiam ni rompus.
Do la paŭzo signifas ke la ŝaltilo deklaro
ĉesos ekzekuti se n estas egala al constant1,
kaj tiam via programo daŭros.
Ĝi eliras el la ŝaltilo deklaron kaj ĝi malebligos
plu faros ion alian.
>> Se, tamen, n ne egala constant1 do kazo por constant2
estos kontrolita.
Do se n egalas constant2, ke aliaj fragmento de kodo estos ekzekutita.
Kaj tiam ĝi rompos se tio estas egala al ĝi.
Kaj tiam ni povas havi also-- ne nepre, though-- defaŭlta kazo,
kio okazos se n ne egala ajna de la kazoj kiujn vi listigis.
Kaj en la defaŭlta kazo, ni ankaŭ ne bezonas ripozon nepre
ĉar la ŝaltilo deklaro scios ke bezonas fini post la defaŭlta
kazo se tio estas la kazo.
>> DAVID Malan: Sed stile, ni ĉiam metis ĝin tien.
>> MARIA: Yeah.
>> DAVID Malan: Yeah.
Do speciale kiam elkomencanta, speciale se inter tiuj malpli
komforta, mi volus persone nur rekomendas bastono kun la oj
kaj oj-elses kaj se-alia-se-elses kaj tiel antaŭen se nur
ĉar ili estas iom pli simpla.
Tiu estas bela optimumigo, aŭ kelkfoje eĉ estetike ĝi
faras la kodon pli legebla.
Kaj fakte, probable mez-semestre ni vidos problemo
fiksita kie nur aspektas bone kaj pli facile legebla por la homoj
uzante ŝaltilon deklaro.
Sed ne maltrankviliĝu pri kroĉiĝis al tiu tro frua.
>> MARIA: Yeah.
Se vi havas multe de se deklaroj, ĝi nur povus esti tre legebla.
Ĝi eble ne estas tre rapida vi iru tra gxi.
Do ŝanĝi deklaroj povas tre utila, ankaŭ.
Kaj ankaŭ, ne remember-- ne forgesas meti la paŭzoj en tie.
>> DAVID Malan: Ne rememoru tion.
>> MARIA: Ĉar tiam vi falu tra de unu kazo al alia.
Do diru ke kazo constant1 ne havas ripozon komunikaĵo en ĝi.
Tiam ni falu per interne kazo constant2.
Kaj ni ne volas fari tion, se ni jam atingis kazo constant1
kaj ĝi estas egala al n.
>> Do, ekzemple, se ni havas variablo n kiu enhavas klaso numeron,
kaj ni volas vidi kion tio klaso is-- se n egalas 50,
ni tuj presi "CS50 estas Enkonduko al Komputila Scienco I. "
Tiam ni iras por rompi.
Kaj tio estas ĝi.
Se, tamen, n estas egalaj al 51, ni tuj
presi "CS51 estas Enkonduko Computer Science II. "
Tiam, denove, ni tuj rompos.
Tamen, se ni metis 124, 61, ajna alia nombro kiu vi povus pensi,
aŭ programo ne tuj rekoni tion.
Do ĝi estas tuj diri, "Pardonon, mi estas ne familiara kun tiu klaso. "
Kaj ĝi tuj rompos.
DAVID Malan: Do vi povas vere vidi la se, alie se, alie ideo tie.
Estas nur malsamaj sintakso por esprimanta la ĝusta sama ideo.
>> MARIA: Ekzakte.
Nun ni havas nia triargumenta operatoroj.
Do triargumenta operatoroj havas tri parts-- kondiĉo,
ion fari se tiu kondiĉo estas vera,
kaj tiam ion fari se tiu kondiĉo estas falsa.
Do vi vidas, esence, la sintakso de tiu ĉi.
Ni havas la demandosigno, kaj tiam the-- kion ni nomas tio?
DAVID Malan: La dupunkto.
MARIA: Colon.
Dankon.
Pardonon.
Do ni rigardu ekzemplon al nia vidu se ni povas fari senton de this--
class_num == 50.
Do jen ni vidas nian Bulea operatoro == kiu komparas la variablo class_num
al 50.
Do class_num tendencas entjero.
Kaj se tiu entjero egalas 50, do ni estas
tuj stoki "Davido Malan" ene la kordo profesoro.
Se klaso numero ne egali 50, "David Malan"
tuj estos la profesoro.
>> DAVID Malan: Dankon.
Kaj do tio ŝajnas ekvivalentaj al kio, vi dirus, unuavide?
>> MARIA: Al mi ŝajnas kiel se-alia deklaroj.
>> DAVID Malan: Yeah.
Kaj fakte, tiu estas speco de belulino Liner,
por tiel diri, por efektivigado ĝuste la logika se-alia
sed farante ĉiu en unu paŝo.
>> MARIA: Ekzakte.
Yeah.
Do se-alia deklaroj eble levu multan spacon.
Ili povus esti tro longa por iu tiel simpla kiel tiu.
Do tiu povas esti tre konciza kaj tre bela.
Do nun ni iras en rigardanta ekzekutinte io denove kaj denove,
do kontrolanta por kondiĉi plurfoje
kaj tiam daŭrante fari ion dum tiu kondiĉo estas vera.
Do ĉi alportas nin bele en dum cikloj.
>> Al la maldekstra, ni havas nia unua dum ciklo.
Do dum io estas vera, fari ion denove kaj denove.
Do certigu rimarki ke nia kondiĉo tie validigita ĉe la supro.
Dum kiu kun nia dua loop-- ni nomas ke do-dum loop-- ni faru ion,
tiam ni kontrolu por kondiĉo.
Kaj se tiu kondiĉo daŭras esti vera,
Ni reiru kaj fari la aferon denove.
Do la ĉefa diferenco estas kie la kondiĉo estas kontrolita por.
Kaj la kodo neniam eble ekzekutita se la kondiĉo estas ne
vera kun la dum ciklo.
Dum kiu kun la do-dum buklo, ni havas la kodon
kiu ĉiam ekzekutita almenaŭ unufoje.
Kaj poste dum la kondiĉo daŭras esti vera,
Ni povas reiri kaj persisti denove ene.
Do kial vi pensas ke ni uzus do-dum buklo super tempo buklo?
Dekstra.
Do se ni volas instigi la uzanto por ia enigo,
se ni volas demandi ilin eniri ilian nomon,
ni volas almenaŭ demandi ilin unufoje.
Kaj se ili eniras tiun nomon, ni ne estas
petos tion denove ĉar ni jam scias tion.
Sed se ili ne eniras ilian nomon, aŭ se ili
eniri ion ke estas evidente ne estas nomo,
ni ankoraŭ volas daŭrigi demandante ilin sur ilia nomo.
>> DAVID Malan: Kaj en prelego ni havis unu kiel tiu kun la akiri pozitivajn int
Ekzemple, kie estas tute nenio kontrolu unue ĉar vi ne havas eĉ
akiris int.
Do ni volas fari this-- ricevas int de la user--
tiam kontrolu ĝin, eble, denove kaj denove kaj denove.
>> MARIA: Ekzakte.
Por loops-- OK.
Por cikloj povas permesi nin fari preskaŭ la ĝusta sama afero, ankaŭ.
Ĝi estas fakte la ĝusta sama afero.
Do ekzistas nenio ke vi povas fari kun por bukloj
ke vi ne povos fari kun dum cikloj.
Sed por bukloj povas ŝajni iom iom pli komplikita sintakse
ĉar ili havas tri partoj interne kion
estis antaŭ nur la kondiĉo kun dum cikloj.
Do la unua parto kiu vi maro, La maldekstruloj plej, ni havas "int enanos = 0."
Do tiu estas kie ni pravalorizi niaj variablo.
>> Tiam ni havas punktokomo kaj "enanos <7."
Do tiu estas kie eliras kondiĉo reale estas.
Do jen kion ni devus metis ĝuste en la tempo loop--
"dum enanos <7."
Tie, kiu iras en la mezo de nia por buklo.
Do "dwaves <7."
Kaj tiam nia lasta parto estas "enanos ++" kio estas kie ni ĝisdatigi nian variablo.
Do la grava afero realigi estas ke tiu
tuj trairu ĉi por buklo sepfoje kaj ekzekuti sep fojojn.
Do ni havas sep enanos, kaj ili ĉiuj estas
intencas diri, "Mi estas ĉi tie por helpi vin, Blancanieves "
ĉar ili estas pretaj helpi Blancanieves.
>> Kun dum cikloj, ni estus farinta la inicialización kaj la ĝisdatigo
Ne ene la kondiĉo, denove, sed antaŭ aŭ ene la dum buklo
por certiĝi, ke we-- ĉar ni ĉiam bezonas tiujn partojn.
Do certigi ke ni havas ilin, ni havas ankoraŭ aldonis ilin
sur, simple ne ene la parantezoj.
>> DAVID Malan: Do ĝi aspektas like-- en la prelego, ekzemple,
Mi preskaŭ ĉiam uzas, kiel mi kaj n kaj bele enuiga variabloj.
Aspektas kiel vi povas uzi pli lerte nomita variabloj, tro.
>> MARIA: Jes, ĝi estas fakte tre bela uzi iom pli priskriba variabloj
ĉar speciale se iu alia estas legante vian code-- eble vi lernojarano
aŭ se vi kunlabori kun somebody--
Vi volas certigi ke ili kompreni kion vi faras.
>> BONE.
Do ĉi tio estas iu tre funky-- por buklo ene por ciklo.
Mi ne scias se ni vidis tion antaŭe.
Probable ne.
Sed ni povas efektive havas this-- tiel masxojn anstataŭ cikloj.
Do ĉu iu volas eble piediri mi pro kio okazas ĉi tie?
DAVID Malan: mi prenos ponardopiko.
MARIA: Cool.
DAVID Malan: Bone.
Do, spoiler-- ni volas presi la havajxoj jen en la malsupra dekstra angulo
tie.
>> MARIA: Dekstra.
Jes Jes.
>> DAVID Malan: Do ni ĵus enkalkulu specimeno eligo tie.
Do mi povas konkludi el la plejsupra buklo ke vi estas
ripetanta super vicoj la plej ekstera buklo, tiel diri.
Kaj vi ripetanta super kolumnoj kun la plej interna iteracio.
Kaj intuicie, tio devus espereble havas sencon
ĉar nature de ĉiu programo ni vidis
antaŭe, printf, kiu estas la funkcio ni uzas, finfine,
havas la kapablon por presi aĵoj eksteren esence linion por linio.
Kiel, iam vi outputted nova linio, ekzistas
neniu duobliganta reen kaj presi ion alta en la ekrano, almenaŭ
Ne uzante printf tiel.
>> Kaj tiel en tiu rilato, ĝi faras senco ke la plej ekstera buklo
devus esti raportante al la vicoj ĉar por ĉiu donita vico,
vi tuj volas elprinti XXXXX, kaj tiam
pluiri al la sekva vico, XXXXX.
Do vicoj venas unue.
Kaj tiam ene de ĉiu vico, vi presi kolumnoj.
Se vi provis fari ĝin la male, ĝi probable ne
elvenis kvazaux vi intencas.
>> MARIA: Yeah.
Ni nur povis reiri al la antaŭa vico kun printf.
>> DAVID Malan: Sed kio estas interesa po hodiaŭa babilado pri amplekso,
fakte, estas ke vico estas int kiu estas deklarita en la plejsupra buklo.
Sed rimarki ke ĝi estas ankoraŭ ene de, tiel diri,
la krispa krampoj, ke tuj sekvos,
kvankam ĝi ne estas teknike ene de tiuj buklaj krampoj.
Do vico estas en amplekso por la tuteco de la fragmento de kodo,
ambaŭ ene de la ekstera por buklo kaj ene de la interna por ciklo.
Sed kompare, kie estas kolumna amplekso?
La variablo kolumno?
Jes, nur en la interna ciklo.
Kaj tio estas bone ĉar ni ne aliras ĝin ekstere de lia krispa krampoj.
Ĉiuj ni faras estas presi nova linio je la fino mem tie.
Do kiu fakte estas okej.
>> Do tiu havas la efikon, ĝi aspektas kiel, fari tri vicoj kaj kvar kolumnoj.
>> MARIA: Dekstra.
Do unue ni iras tra nia unua vico.
Kaj ĝuste en nia unua vico, ni faros la kvar kolumnojn ene la unua vico.
Do ni presi kvar iksoj.
Kaj tiam ni povas eliri la por ciklo, ekde ni jam presita el kvar iksoj.
Kaj ni presi novan linion.
Kaj tiam ni iros tra la saman procezon por du pli vicoj
al fari tuta de tri.
>> DAVID Malan: Kaj estas notinde, ke estas nur artefakto de la tiparo, la fakto
ke la specimeno eligo similas tiel multe pli alta,
kvazaŭ ekzistas pli vicoj da kolonoj.
Sed estas nur ĉar la ikso estas pli alta ol ĝi estas larĝa.
Tio estas ĉio ke okazas tie, plus la blanka spaco inter linioj.
>> MARIA: Dekstra.
Malvarmeta.
DAVID Malan: Bone.
Do rapide rigardi problemo starigis unu, preni demandojn, kaj tiam adjourn?
Bone.
Do en problemo starigis unu, ekzistas tri primaraj defioj, finfine.
Sed unue, Vi trovos ke la problemo aro
specifo, kiel kun multaj la psets tiu falo, tuj marŝi vin
tra kelkaj varmigo ekzercoj, atentigi vin el kelkaj rimedoj
ke vi povas aŭ ne vidis jam.
Ekzemple, CS50 havas suite de cortometrajes,
kio estas mallongaj filmetoj, Ne malkiel tiu, sed ke
estas tre topiko specific-- eble kvin minutoj,
10 minutoj en longo sur bukloj aŭ sur kondiĉoj aŭ sur algoritmoj
aŭ poste sur pli altnivelaj temoj, ankaŭ.
Kaj ni ĝenerale enkorpigi tiuj en la problemo
aroj por ke studentoj havi rimedon, per kiu
recenzi materialon kiu havu jam venis kun prelego aŭ sekcio.
Sed tiu maniero estas pli centrita kaj pli ĉe ilia fingertips.
>> Ni ankaŭ emas enkorpigi en problemo prende aĵoj nomata walkthroughs.
Do preskaŭ ĉiuj ekzemploj mi faras en prelego, sur scenejo ĉi tie, ni ankaŭ
faligis sur fotilo en antaŭi pli malrapida,
pli intima walkthrough apud mi sur mia tekkomputilo de tiu kodo, linio por linio
tiel ke en klaso, ni ofte senkremigi tra io aŭ iu
estos interject kun respondi al demando.
Sed tio ne nepre enprofundigi en por ĉiuj en la spektantaro.
Do vi trovos kodon walkthroughs dum la plejparto de la ekzemploj
kion ni faras cxi tie en prelego por ke vi povas promeni tra ĝi ĉe via propra ritmo
kaj malantaŭenigi aŭ rapida antaŭen aŭ skip entute, se vi ŝatus.
>> Ekzistas ofte kelkaj varmigo demandoj kiuj
demandos vin ordigi el plifortigi tiun materialon
kaj certiĝu ke vi estas comfy antaŭ vi procedi kun la resto de la pset.
Kaj tiam, kompreneble, Tie estas la pset mem.
Kaj unu el la aĵoj ni tre konscie
fari en CS50 estas preskaŭ ĉiun neinteresa aŭ intelekte seninteresa
mekanika paŝo kiu vi eble devas fari
estas preskaŭ ĉiam tre bone dokumentita.
Dum de la termino, ni komenci demandi pli retorika demandoj
kiel memori kiel fari tion aux tion?
Sed ĝenerale, vi trovos ke la problemo aroj ekiru
tra la mekaniko de io por ke
la interesa, intelekta defioj estas finfine lasita al vi la studento.
>> Kun kiu diris, Zamyla, al kiu ni konservis raportante hodiaŭ en prelego,
estas unu el niaj delongaj kunlaborantaro membro kiu ankaŭ tenas walkthroughs
sur specifaj pset problemoj kiel Mario kaj avida, kvankam ne trinkigos tiu jaro.
Kaj ĝi estas en tiuj walkthroughs ke ŝi ofte
proponas iujn konsilojn kaj lertaĵoj por kiel procedi, neniam diranta vin
precize kion fari, sed rather-- kiel kondiĉo,
se vi will-- donante vi almenaŭ kelkaj ideoj por ke ĝi estas supren al vi,
finfine, por decidi kiel alproksimigi ilin.
>> MARIA: ia kiel alta nivelo kompreno de la logiko de kio
ni petas vin fari.
>> DAVID Malan: Ĝuste.
Kaj, fakte, la Zamyla walkthroughs estas intencitaj
respondi la ofte demandis demandon de kie
mi komencis, speciale kiam tiuj longaj specifoj estas
iom senkuraĝiganta donitaj ĉiuj teksto kaj figuraĵo kiu havas en ili.
>> Do water.c, vi trovos post vi kompletigis ĝin,
estas fakte relative simpla.
Absolute estas aro vi tuj bang
viajn kapojn kontraŭ la muron provas ekkompreni kial ĝi ne estas kompilanta
aŭ kial ĝi ne kuras ĝuste.
Sed unufoje vi faris per ĝi kaj iam vi
Pasis iom da tempo luktado kun ajna de la bugs kiu vi povus havi,
vi trovos ke ĝi estas tre mallonga programo.
Ĝi povas esti farita en nur kelkaj linioj de kodo, la plimulto de kiuj
ni vidis tie en prelego jam, se vi invitu la dekstra konstruelementoj.
>> Kaj kiel ni sugestas tie, ĝi tuj demandas
vi specifi kiom da minutoj iu duŝante sur kampuso.
Ni specifi en la problemo agordi la frekvencon de fluo de akvo
en, kiel, malalta fluo duŝo kapo, tre kiel la Seinfeld clip
ni hieraŭ vidis aŭ la malon de tio.
Kaj tiam vi simple devos fari iom de math,
really-- aritmetiko uzanta C diri ni kiom, malglate, boteloj de akvo
estas ke ekvivalenta al se ni estas prenante n-minuta duŝo.
>> Nun, en mario.c, ĉi tiu tuj esti iomete pli longa programo.
Oni ankoraŭ ne tuj estos tiu longa.
Nur kelkaj linioj plu ol water.c.
Sed tuj estos ŝanco amuzi la malnova lernejo Mario
piramido de Super Mario Fratoj aŭ iu sekvi-sur.
Oni ne tuj aspekti pli bela aŭ kiel bunta kiel tiu tie.
Ni nur tuj uzos iom hashtags kiel ni havas ĉi tie sur la ekrano
uzante ASCII teksto.
Sed ĝi proksimigas la sama ideo.
Kaj ĝi tuj estu ekzerci ke unuavide
ŝajnas bela simple-- nur presi simplan piramido.
Sed estas paro karakterizaĵoj tie ke estas interesa.
Rimarku ke la plej dekstra rando de la piramido reale havas larĝo du.
Do ekzistas du egalaj alteco kolumnoj, kiuj
faras postulas iom bita de penso fari
certe vin akiras ke ĝuste konvena, kontraste al nur perfekte angled
linio.
Do jen peco de angulo kazo sed egalas la fakta ludo.
>> Kaj ĝi estas ankaŭ ne-evidenta unue rigardo kiel presi la blanka spaco.
Do kiam mi rigardas la specimeno eligo here--
Kaj ĝi estas ankaŭ en la spec-- ĝi ia aspektas kiel rektangulo,
sed diagonalo de la rektangulo estis forhakis,
kaj ĝi estas nur blankaj spacoj, tiel diri.
Kaj tial oni ofte demandis demando ĉi tie estas ĉiam, nu,
kiel mi movas la hashtags super la dekstra?
Aŭ kiel mi presi la malplenan spacoj?
Kaj estas vere facila ol plej studentoj pensas.
Dekstra?
Vi povas proksimigi gxin vide per nur trafante la spaco trinkejo foyi
aŭ tri fojojn.
>> Kaj tial, kvankam kun printf ni preskaŭ ĉiam presi ĉenon aŭ int
aŭ vorto kiel "saluton, mondo "aŭ serio de vortoj,
vi ankaŭ povas simple printi citaĵo, spaco, unquote.
Kaj tio efektive donas vi blankan spacon tie.
Observu do, ke en menso kaj ne overthink ĉi.
Vi vere devas decidi linion post linio post linio,
Ne kontraste vian ekzemple Antaŭ momento, kio de tiuj
kolumnoj devus esti blankaj spacoj kaj kiom da de ili estos la hashtags.
Ĝi prenos iom da tempo, sed ĝi estas finfine logika enigmo de specoj.
>> MARIA: Yeah.
Sed la logiko de iranta linion post linio tuj estos tre utila ĉi tie.
DAVID Malan: Yeah.
Mi kredas ke la specimeno kodo vi gave-- eĉ kvankam ne estis kompleta programo.
Vi ankoraŭ bezonas int kaj ĉefa kaj dezerta kaj #include stdio.h,
multa la ŝtofo el prelego.
Sed la konstruelementoj ŝajnas esti tie.
Kaj poste persiste estas io iom pli algoritma.
Do rezultas ke ajna momento vi iri en CVS aŭ ajna facilbutiko
kaj iu vizagxo vi ĉe la kasisto bekojn aŭ moneroj kiel ŝanĝon,
ĝi rezultas ke ili, la homoj, ĉu ili scias ĝin aŭ ne,
verŝajne uzante kio estas nomata avida algoritmo,
per kio se vi ŝuldis, diru, $ 21 ŝanĝmono ĉar ial
vi aĉetis ion tre malmultekosta kun tre granda beko ĉe CVS,
estus vere ĝena se la kasisto donis al vi 21 singles aŭ, plej malbona
tamen, tuta multo de moneroj.
Prefere, kion racia persono estas probable tuj faros estas ili tuj
ekpreni $ 20- kaj tiam $ 1-kalkulon, kaj transdonos vin nur du kalkuloj en tiu kazo.
MARIA: Do ili strebas minimumigi la ŝanĝo kiun ili redonas al vi.
DAVID Malan: Ĝuste.
Kaj sama interkonsento kun moneroj, ankaŭ.
Se vi ŝuldas, diru, $ 0.50, espereble vi ne volas 50 pencoj.
Vi anstataŭe volas du kvartaloj, ekz.
Nun, tiu faras supozi ke la kasisto havas
sufiĉe de ĉiu nomado kiu Li aŭ ŝi povus voli doni vin.
Sed ni permesas supozi tiel en la problemo.
Kaj la celo, finfine, estas implementar en C-kodo avida algoritmo.
Do la uzanto estas permesita tajpi en kiom
ŝanĝi li aŭ ŝi estas ŝuldis kun dolaroj kaj centonoj, ia glitpunktaj
valoro verŝajne.
Kaj tiam vi devas fari la math kaj elkompreni algorítmicamente, nu,
kiom da moneroj Mi agu vi minimume doni al vi
ĝuste tiu kvanto de ŝanĝiĝo.
Sed tuj esti kelkaj delikataj partoj tie, ĉu ne?
Kiel ekzistas la tuta imprecision afero.
MARIA: Ekzakte.
Do Flosanta punkto valoroj havas imprecision.
Ĉu ni parolas pri tio en prelego hodiaŭ?
>> DAVID Malan: Ni faris la lastfoje en prelego.
Ni parolis pri imprecision.
Kaj vi ne volas trompi la uzanto kiom ŝanĝo li aŭ ŝi estas ŝuldis.
Kaj tial la walkthrough, en la problemo aro specifo,
doni iun penson, finfine, kiel al kiel vi povas mildigi tiujn imprecision
eraroj, potenciale.
Ĝi estas evitebla, certe, por la enigoj ni parolas.
Kaj, fakte, pennies-- eble ni prokrastu Zamyla,
Mi pensas, pro la ruzoj tie.
Do finfine, vi trovos progresio de problemoj ĉi tiu semajno,
la unua de kiuj estas sufiĉe malgrandaj, tiam meza, tiam iom pli granda.
Sed ĉiuj ili uzas la konstruaĵo blokojn de ĉi tiu pasinta semajno,
de tiu supersection, problemo aro specifo
metas vin ĉe sennombraj rimedoj.
Sed ankoraŭ, se entute baraktante, Precipe inter tiuj malpli komfortaj
kun neniun antaŭan fonon, venu al oficejo horoj
lunde kaj marde kaj Merkredo kaj ĵaŭdo.
Iru al CS50 Diskutu tra la kurson de afiŝinto,
per kiu vi povas babili kun kunlaborantaro kaj samklasanoj.
>> Sed finfine, mi kredas ke la bona konsilo estas nur starti frue.
Ĝi ne estas la speco de klaso kiu vi devus esti komencante psets merkrede
nokto, aŭ malbona ĵaŭdo nokte.
>> MARIA: Mia plej bona konsilo estas esti komencita de la lundoj.
DAVID Malan: lundo.
Do se vi ne komencis already-- ne.
Sed eĉ se ne lundo, tiam mardo.
La pli frua la bona.
Kaj tio estas la kialo la Kompreneble ĝi havas tiom da malfruaj tagoj estas
doni al vi iom de psikologia premo
komenci pli frue sed ankoraŭ lasu aferojn gliti kiam aferoj preni plu
ol vi atendas.
>> MARIA: Kaj vi volas uzi oficejo horoj tiel kiel vi povas, ankaŭ.
>> DAVID Malan: Demandojn?
Bone.
Nu, kial ni ne adjourn tie?