[Powered by Google Translate] DAVID J. Malan: Bone, ĉi tiu estas CS50 kaj ĉi tiu estas la
fino de semajno 1, do studado kartoj estas en kaj la tuta nombro de
kompanoj ke vi havas ĉi tiu jaro estas 745.
Kaj ni tiel emociita havi tiom multaj el vi en la kurso
ĉi semestro, sed kvankam ĉi tiu kurso estas tiel granda,
rimarkas ke estas tiuj aĵoj kiel vendredo lunĉoj, kiel
oficejo horoj, 15-persono sekcioj, ktp ke
vere intencis krei ĉi pli intima
medio.
Do kvankam ni povas kolekti unu aŭ du fojoj semajne, tie en
Sanders, scias, ke multe de via sperto en ĉi tiu kurso
estos tre multe esti manoj-on sur la flanko de via samklasanoj
kaj la instruistaro.
>> Do jen ni iros, Fall 2012.
Do rememori ke lastfoje ni finis la noto de
imprecision, parolante pri la reprezentado de nombroj.
Kaj ni rigardis unu de la fiaskoj kiuj okazis, en la
reala mondo, kiam venis al miskompreno
kiom komputiloj funkcias.
Nu, hodiaŭ ni reviziti alia de tiuj ideoj kiel
krom daŭrigi nian diskuton pri la CS50 kliento
kaj C kaj kion ĝi signifas vere programo.
Sed unue, nur paro de ventego anoncoj.
>> Sekcioj komenci tiun dimanĉon, kaj la unua semajno estas ĉiam
iom de rapida komenco, ĉar ni ĵus alvenis en
Via sekcio formoj.
Ni faras la sama, nun, kun la instruado uloj, nun
ke ili konas lian horarojn, do ni celas, per
Sabato matene, sekvi kun vi kun via sekcio
farita kaj TF.
Rimarkas ke ili devos komenci la sekvanta tago, dimanĉo
aŭ lundo aŭ mardo.
Kaj poste ni akomodi sekcio ŝanĝojn dum ili ekesti
en la tempo venonta.
Oficejo horoj, dume, estas, denove, ĉi tiu nokto, 8 am al 11, en
Annenberg, tiel kiel morgaŭ nokte.
Kvankam la problemo aroj estas ĝenerale pro la ĵaŭdo
tagmeze, realigi vi havas ĝis kvin malfrue tagoj por pasigi,
tie la havebleco de oficejo horoj sur ĵaŭdo se
vi kontanta en unu el tiuj malfrue tagoj kaj, per tio, submetiĝi
io en vendredo.
Lasu min sugesti ke Scratch estas inter la plej amuza, inter la
pli malalta klavo problemo aroj.
Kaj mi pendas sur tiuj malfrue tagoj, strategie, ĝuste
por poste en la semestro kiam vivo komenciĝas por akiri en la vojo
kun midterms kaj aliaj klasoj.
Problemo Serio 1, dume, estus eldonita en la kurso de
afiŝinto ĉi vendredo, kiel estos al la kurso de promenado
tra video, kiu estos filmado je 2:30 am vendrede
kaj poste posted linio de la sekvanta tago.
>> Do ni finiĝis lundon.
Mi volas - fakte, unu noti ĉi tie.
Ĉar la klasojn - ĉar Sanders ne ekzakte prunti
al hazardaj Q & A tien kaj reen terure bone, ni estas
tuj provos ion iom novan tiu jaro, per kiu
se vi ne estas komforta levante via mano aŭ vi simple
preferus ne levi vian manon en ĉambro kiel ĉi tiu,
ni havos kelkajn el la instruado uloj kaj CAS
tripulando cs50.net/discuss dum prelego.
Do se vi havas demandon, ĉar mi estis tute
certe pri io aŭ vi estas scivola pri iuj
temon, provu posting ŝin tie.
Tag ĝin kun etiketo de prelego, kaj ni faros nian eblon
hodiaŭ kaj proksima semajno - we'll provi tion eksteren - al kampa ĝi
ĉu elektronike, online, aŭ se ĝi sentas, ke ni devus
vere trakti ĝin amase, unu el la instruado uloj aŭ
CAS levos sian manon kaj petas
anonime en via nomo.
Do ni donos ĉi oni provu kaj vidi kiel bone ĉi verkoj.
Sed, por supozita, daŭrigu levi manojn, kiel vi ŝatus.
>> Do lastan fojon ni malkaŝis ke la 10% aŭ unu-deka ne estas, en
Fakte, 0.1, kiel vi estas instruitaj multaj jaroj.
Estas fakte, valoro kiel ĉi tio.
Sed tio ne estas tute vera, ĉu ne?
Ni nur havas ĉi limigo en komputiloj per, se vi
nur havi finia kvanto de memoro, memoro RAM, aŭ pli
specife bitoj, nu, tie estas nur finia nombro
de aĵoj vi povas reprezenti.
Ekzemple, se ni havas la nombro nulo, kaj ni volas
reprezenti en duuma, uzante ok bitoj, kie iom,
denove, estas nulo aŭ unu, ni povus
reprezenti ĝin kiel 00000000.
Kaj tio estas iom nenecese abundajn.
Ĝuste kiel en la dekuma sistemo en la reala mondo,
ĝenerale, se vi volas skribi la numeron 123, ni
homoj probable ne skribas 00000123 kvankam,
funkcie, tiu estas la ĝusta sama nombro.
Ni nur faligi kondukante nuloj, por tiel diri.
>> En duuma, ni povas fari same.
Duuma kaj nulo, nulo kaj binara estas nur nulo.
Vi nur bezonas unu bito.
Sed denove, la plej komuna unuo de mezuro en la mondo
de komputado estas bitokoj, ok bitoj.
Nur ĉar oni iom, bela netaŭga.
Ok bitoj, ne terure utila, sed almenaŭ estas pli
utila ol sola unuo de mezuro.
Do kun ok bitoj, ni tipe reprezenti duuma.
Do jen ni havas la numerojn nulo, unu, du, kaj tiam, kiam
Nate faris en nia video lasta merkredo, ni povas daŭrigi
rakonti ĝis sep, ok.
Kaj tiam se ni uzas pli kaj pli bitoj, ni
povas rakonti ĝis infinito.
Sed se vi nur havas finia nombro de tiuj bitoj, kiel estas
la kazo en ajna komputila sistemo, aŭ eĉ misilon
sistemo, nu, efektive vi nur havas
finia kvanto de precizeco.
Do se vi volas prezenti la nombron kiel 0,1, nu, la
komputilo devas elekti kaj elekti.
Kaj se ĝi nur havas finia nombro de nombroj ĝi povas
reprezentas, ĝi povas veni proksime al 0,1 por vi, sed ne povas
nepre donas al vi precize la valoro kiun vi volas.
Kaj tiu estas nur unu el la defioj de komputiloj,
sub la kapuĉo, dankeme.
>> Kiel ni moviĝu en la semestro, tiuj malsupera nivelo
detaloj fariĝis multe malpli interesa, sed certe la
apliko de tiuj ideoj povas havi iu tre reala mondo
ramificaciones.
Unu estas iom amuza.
Kiel multaj el vi jam vidis la miriga filmo Office Space?
Se vi ne havas, tiu estas via neoficialaj
hejmtaskoj por la semajno.
Sed en Office Space, la uloj en tiu filmo preni
avantaĝo de precize tiu ideo, sed fakte sxtelis
ĝin de alia filmo por ke vi havu
vidis, eĉ jaroj antaŭ.
Do mi donos al vi kelkajn sekundojn de ĉi trailer de
ĉi mirinda filmo kaj tio estas tre
akademie grava.
>> [Teatraĵoj KINO]
Fakte mi esti promociita.
Mi povas plani viruso kiu ŝiri ke
meti sur granda tempo.
Nu, kiel ĝi funkcias?
Ĉiufoje estas banko transakcio kies intereso estas
komputis, estas miloj tagon, la komputilo finas
kun tiuj frakcioj de cendo.
Sed mi ne volas fari ion neleĝa.
Kontraŭleĝa? Samir, jen Ameriko.
Vi devas ĵuri al Dio.
Se neniu scias pri ĉi tiu sed ni, en ordo? Neniu familianoj, neniu
fianĉinoj, neniu.
[Inaudible].
Ne zorgu, homo, mi ne diros al neniu ĉu.
[Filmo finas]
>> Bone, do eble mi trovis ĉi tiun filmon bona ol plej
homoj tie, sed en ĉiu kazo, la viruso, ke ili
provante krei -
kaj en la kino, anytime ili volas nomi ion virus,
ĝi estas ĝenerale ne reale viruso.
Estas nur programo ke iu skribis ion fari.
Kaj en ĉi tiu kazo, la infanoj provis skribi programon
kiu utiligis lian kompanion nomata Innotech la
komputado sistemo, per kiu komputiloj, ankaŭ, eĉ kiam ĝi
venas al mono, ĉu ne nepre
reprezenti mono precize.
Do eĉ se vi povus havi $ 0,10 en via bankokonto,
0.10, nu, la komputilo povis fakte opinias, ke vi havas
ĉi tio multaj cendoj en via bankokonto.
Kaj tiel kion tiuj infanoj estis aspirante fari - kaj ili
ŝtelis la ideon, rezultas el Superman III, kie
Richard Pryor faris la samon - ili estis esence
skribi programojn kiuj aspiras preni ĉiujn trenante
nombroj, ĉiu el la etaj, eta, eta frakcioj de
cendoj, kaj siphoning tiuj ekstere tiel ke la homoj ĝuste
penso, oh, estas nur $ 0,10 tie, sed ĉiuj el tiuj
trenante nombroj eventuale aldoni supren.
Do mirinda ideo kaj ĝi backfired hilariously en tiu
aparta filmo.
>> Sed en la reala mondo, ankaŭ, estas multe pli pri
konsekvencojn de tiuj specoj de aferoj.
Kaj unu el la kialoj por plonĝi en la kampo de komputado
scienco estas, denove, lia aplicabilidad ne al la
inĝenierio sciencoj sola, sed nur por
aliaj kampoj kiel bone.
Do ĉi tiu estas malpli lighthearted rigardu kion povas iri malbone, sed
ĝi estas ankaŭ sufiĉe okulo malfermo, mi pensas, kiam temas pri
kompreni ĝuste kiel omnipresente teknologioj kiel
komputiloj kaj programado aŭ tiuj tagoj,
en formo de programaro.
Do tiu sekva klipo estas nur ĉirkaŭ ses minutoj, daŭre
kie ni cxesis lasta fojo, sed permesas ke ni vidu iom
pli en profundo je unu tian el tiuj aferoj.
Lasu min salti antaŭen al kie ni lasis,
agadis bone tie.
Kaj ni havas parton du de du, cxar ĉirkaŭ ses minutojn tie.
>> [LUDU KINO]
Plagado moderna raketo teknologio.
En 1991, kun la komenco de la unua milito de la Golfo, la Patriota
misilon spertis similan ia
numeron konvertiĝo problemo.
Kaj kiel rezulto, 20 personoj, 20 usonaj soldatoj, estis mortigita
kaj ĉirkaŭ 100 aliaj vunditaj kiam la Patriot, kiu estis supozita
protekti kontraŭ venonta scuds,
malsukcesis pafi misilo.
>> Kiam Irako invadis Kuvajton kaj Usono lanĉis Dezerto
Ŝtormo en frua 1991, Patriot misilon piloj estis
deplojitaj por protekti Saŭda Arabio kaj Israelo de irakaj
Scud misilon atakoj.
The Patriot estas usona duona atingo surfaco-sistemo de aero,
fabrikita de la Raytheon kompanio.
La grandeco de la Patriot interceptor mem, temas pri
proksimume 20 metrojn longa kaj ĝi pezas ĉirkaŭ 2.000 pundoj.
Kaj portas kapon de ĉirkaŭ - Mi kredas ke estas krude
150 funtoj.
Kaj la kapo sin estas alta eksploda kiu havas
fragmentoj ĉirkaŭ ĝi.
La carcasa de la kapo estas desegnita por agi kiel Buckshot.
La misiloj estas portitaj kvar po ujo kaj estas
transportitaj per duone trailer.
>> The Patriot antimisil sistemo superas almenaŭ
20 jaroj nun.
Ĝi estis originale desegnita kiel aero defendo misilon al
malkonstrui aviadiloj malamikoj, en la unua milito de la Golfo.
Kiam tiu milito venis kune, la Armeo volis uzi ĝin por pafi
malsupren scuds, ne aviadiloj.
La Aera Forto estis iraka ne tiom de problemo, sed la Armeo
estis maltrankviligita scuds.
Kaj tiel ili provis ĝisdatigi la Patriot.
Interkapti malamiko misilon vojaĝante al Mach 5 tuj
esti defiante sufiĉas.
Sed kiam la Patriot estis enkuris servo, la Armeo
ne estis konscia de iraka modifo kiun faris lia
Scuds preskaŭ neeble batis.
>> Kio okazis estas la scuds kiuj estis
venon estis malstabila.
Ili estis wobbling.
La kialo de ĉi tiu estis la irakanoj, kun la celo akiri 600
kilometroj el 300 kilometro gamo misilo, prenis
pezo el la antaŭa kapo kaj
faris la kapo pli malpeza.
Do nun la Patriot'S provi veni en la Scud, kaj la plimulto de
la tempo, la grandega plimulto de la tempo, ĝi estus
nur flugas per la Scud.
Iam la Patriot sistemo operatoroj realigi la Patriot
missed lia celo, ili detonado la Patriot kapo.
Por eviti eblajn viktimojn, ĝi permesis
fali sur la teron.
Tio estis kion multaj homoj vidis, kiel granda buloj de fajro en la ĉielo,
kaj miskomprenita kiel interkaptas de Scud kapoj.
>> Kvankam, en la nokta ĉielo, Patriotoj ŝajnis esti
sukcese detruas scuds, ĉe Dhahran, ne povas ekzisti
eraro pri ĝia agado.
Tie, la Patriota la radaro sistemo miskalkulis la
venonta Scud kaj neniam ĵetis pro
al programaro difekto.
Estis la israelanoj kiuj unue malkovris ke la pli longa
la sistemo estis, des pli granda la tempo diferenco igis,
pro horloĝo enigita en la sistemo de komputilo.
Ĉirkaŭ du semajnoj antaŭ la tragedio en Dhahran, la
Israelanoj raportis al la Ministerio ke la
sistemo perdis tempon.
Post ĉirkaŭ ok horoj de kuri, ili rimarkis, ke la
sistemo igi rimarkinde malpli precizaj.
La Ministerio respondis dirante ĉiuj
la Patriot pilojn por ne lasi la sistemoj
on por longa tempo.
Ili neniam diris kio longe estis - 8 horoj, 10
horoj, 1.000 horojn.
Neniu sciis.
>> The Patriot pilo postenigitaj ĉe la kazernoj en Dhahran
kaj lia misa interna horloĝo estis sur pli ol 100 horojn en
La nokto de februaro 25a.
Ĝi spuris tempo al precizeco de ĉirkaŭ dekono de sekundo.
Nun dekono de la dua estas interesa nombro ĉar
ĝi ne povas esti esprimita en duuma, precize, kion signifas
ĝi ne povas esti esprimita akurate en ajna
moderna cifereca komputilo.
Estas malfacile kredi.
Sed uzi tion kiel ekzemplon.
>> Ni prenu la nombron unu triono.
Tria ne povas esti esprimita en dekuma, precize.
Tria estas 0,333 okazas por malfinio.
Ne maniero fari tion kun absoluta precizeco en dekuma.
Tio estas ĝuste la sama tipo de problemo kiu okazis en
la Patriot.
Ju pli longe la sistemo kuris, la plej malbona la tempo eraro fariĝis.
Post 100 horoj de funkciado, la eraro en tiu epoko estis nur
proksimume unu triono de sekundo.
Sed en terminoj de celado misilon vojaĝante al Mach 5,
ĝi rezultis en sekvado eraro de super 600 metroj.
Estus fatala eraro por la soldatoj ĉe Dhahran.
>> Kio okazis estas Scud ĵeto estis detektita de frua averto
satelitoj kaj ili sciis ke la Scud venis en lian
ĝenerala direkto.
Ili ne scias, kie ĝi venas.
Nun estis ĝis la radaro komponanto de la Patriot
sistemo, protektante Dhahran, por loki kaj konservi trako de la
venonta malamiko misilo.
La radaro estis tre inteligenta.
Vi fakte spuri la pozicio de la Scud kaj poste
antaŭdiri kie probable estus la proksima tempo la
radaro sendis premas eksteren.
Kiu nomis la gamo pordego.
Tiam, tuj la Patriot decidas sufiĉan tempon pasis iri
apogi kaj kontroli la venonta loko por ĉi detektis
objekto, superas.
Do kiam reiris al la malĝusta loko, tiam ne vidas
kontestas, kaj decidas, ke ne trovigxas objekto.
Ĝi estis falsa detekto kaj delasas la spuro.
>> La venonta Scud malaperis de la radaro ekrano.
Kaj sekundoj poste, ĝi frapis en la kazernoj. La Scud
mortigis 28 kaj estis la lasta pafis dum
la unua milito de la Golfo.
Tragike, la ĝisdatigita programaro alvenis al Dhahran
la sekva tago.
Kaj la programaro difekto estis riparita, fermante unu ĉapitro en
la tumulta historio de la Patriot misilo.
PATRIOT estas fakte akronimo por "forigita array kameraoj
Interkapti de Celo ".
>> Bone, do multe pli malgxoja rezulto de ne sufiĉe
kompreni ĉi tiu mondo.
Kaj la takeaway, vere, de la filmo estas ke la solvo
tie estis restartu vian kontraŭmisila sistemo
ĉiun fojon en iom da tempo.
Kaj tiel denove, unu el la celoj de ĉi tiu kurso, certe
sur pli humila skalo ol tiuj aplikoj, ĝi estas
vere malferma ĉies okulojn ĝuste kiel vi ĉirkaŭiras
fari maŝinoj faras kion vi volas ilin fari kaj kiel vi iru
pri fari tion korekte, dum la vojo fari ĝin
bone, elegante, kaj tiel plu.
Kaj tiel hodiaŭ, ni pikita en iom pli da ĉi tiu, sed
por ke ni ne iru tro rapida, aparte por tiuj malpli
komforta, sed ankaŭ por ke ni povu konservi la intereson de
tiuj pli komforta, ni nur rapide komenci kun iom
de recap de iuj de ĉi tiuj ideoj.
Kaj ankaux demandi sin, ambaŭ en persono aŭ linio, se vi havas
demandojn por ke ni povu konservi ĉiuj en la sama paĝo.
>> Do la CS50 Appliance, rapida retropaŝo, estas
kio, en viaj propraj vortoj?
Estas bone se vi ne havas ideon kion tiuj vortoj estu ankoraŭ.
[Inaudible]
Konsentite, tiel universala interfaco por -
ke ni povas ĉiuj dividi.
Tute ne.
Do ni povus, ekzemple, diri al vi iri al kelkaj
TTT-ejo, elŝuti ĉi programaro por Mac OS.
Elŝutu ĉi programaro por Vindozo, agordi en
tien kaj.
Sed la realo estas tiam ni kolizias sennombraj teknika
subteni temoj.
Kaj ankaŭ tiujn tagojn, multe de kio faras servilo flanko,
en la mondo de komputado, precipe kiam temas pri
retejo disvolviĝo kaj ttt bazita aplikoj, estas fakte
tre ofte farita sur Unikso aŭ Linukso komputiloj, kontraste al
Macs aŭ Windows-komputiloj.
>> Do inter la upsides, tiam, de uzanta cxi tiu afero nomata
CS50 Appliance estas ni ĉiuj havas la saman medion.
Do ĉiuj estas en la sama paĝo ne gravas aparataro vi
venis al kampuso kun sed ankaŭ estos dabbling en akurate
la sama medio kiu vi estos uzanta cele
semestro la fino tiel por ttt evoluo, tiel kiel en la
estontecon por reala mondo aplikoj largxo.
Do pli konkrete, la CS50 Appliance estas libera peco de
programaro kiu ebligas al vi kuri alia mastruma sistemo,
Linukso, en ĉi tiu kazo, en via propra komputilo, en fenestro.
Nun ne eblas simple elŝuti la aparaton.
Vi bezonas programon per kiu eblas ludi aŭ ruli la aparaton.
Kaj tiu peco de programaro estas ĝenerale konata kiel
hypervisor.
Hypervisors veni en formo de produktoj kiel VMware,
Virtuala Skatolo, Paralelaj.
Ĉiaj firmaoj fari programaron, liberaj kaj
komerca, egala.
Kion vi vidas en Problemo Serio 1 estas instrukcioj pri kiel
akiri libera programaro kun kiu
kuras la CS50 Appliance.
Kaj iam vi, vi havas, en fenestro sur via Mac aŭ PC,
labortabla medio kiu aspektas tute kiel ĉi tiu, kie
ĝi havas Komenco menuo-simila afero en la
malsupro maldekstra angulo.
Ĝi havas Ĉefpaĝo dosierujo, aŭ Hejmo dosierujo, en la supra maldekstra
tie, rubo povas, kaj tiel plu.
Do ni tease krom la necesa detaloj kiel ni iru.
>> Sed nun ni komencu bucear en C.
Do C estas ĉi programlingvo, simila en spirito
Nulo, sed multe malpli grafika, sed ironie, for
pli potenca fojo vi ricevas savvy kun ĝi.
Do en C, ni skribi programojn per skribanta kodo fonto, kiu estas
tiu angla-kiel sintakso, simila al la ŝtrumpetoj
pruvo ke ni faris lastan fojon ke vi permesas
esprimi sin sufiĉe detale, se
arcanely, al la komputilo.
>> Do kia produkto programaro vi vere bezonas
skribi programojn en lingvo kiel C, bazita sur nia
konversacio lundon?
[Inaudible]
OK, vi simple bezonas tekstoredaktilo.
Vi ne bezonas neniun specialan programaron
per si mem skribi programojn.
Vi nur bezonas tekstoredaktilo kiel Notepad, en Windows,
TextEdit en Mac, aŭ iu nomita gedit, en la mondo de
Linukso, kiun ni uzos ĉi tie.
Kaj tio estas ĝi, por skribi la programojn.
>> Sed skribo estas nur duono de la ekvacio.
Vi do devas kuri ilin.
Sed por kuri programoj -
vi ne povas kuri fontkodo.
Vi anstataŭe devas fari kion ĝi unue?
Yeah.
DAVID J. Malan: Vi devas
kompili ĝin.
Kaj, iu alia, kompilante la fontkodon signifas -
[Inaudible]
DAVID J. Malan: Ĝuste.
Traduki ĝin al nuloj kaj aĵoj.
Ĉar ĉiuj el ni, ĉi tiuj tagoj, havas komputilojn kiuj havas CPUs,
preskaŭ ĉiuj el kiuj estas faritaj por kompanio nomita Intel, kaj
Intel Ene, signifas tie estas tio cerbo ene de via
komputilo, konata kiel la CPU.
Kaj unu el la aferoj ke tiu cerbo faras estas, scias
kiel kompreni ŝablonoj de nuloj kaj aĵoj.
Ĝi scias kion mastro de bitoj reprezentas krome, kion
mastro reprezentas subtrahoj, kion mastro de
bitoj reprezentas presi, kaj kreante aŭdeblan sonon.
>> Do mallonge, la CPU, kuplita kun la mastruma sistemo,
kiu estas peco de programaro kiu kuras sur la CPU,
por tiel diri.
Kune, tiuj du pecoj scias kuri programoj kiuj
ni homoj skribi.
>> Do, se mi iros en la CS50 Appliance tie, mi bezonas por malfermi
supren tekstoredaktilo kaj mi povas aliri tiun
en kelkaj manieroj.
Mi povas aŭ iri al menuo, Programado,
kaj poste mi povas elekti -
nope, ne ke menuo.
Mi povas iri al Akcesoraĵoj / gedit tie por malfermi
mia eta tekstoredaktilo.
Aŭ pli simple, mi povas alklaki ĉi tiu malgranda ikono en la fundo
maldekstra angulo.
Kaj nun mi alvenas ĉi medio tie.
Estas bela memoras simpla tekstoredaktilo, kun nur
unu aŭ du diferencoj.
En la pinto, kie la kursoro estas palpebrumante nun, tiu estas kie
Mi povas komenci skribi mia kodo.
En la fundo estas tiu afero nomata la fina stacio fenestro.
Kaj kion specoj de aferoj mi povas fari en tiu ĉi
tn fina fenestro?
[Inaudible]
>> Konsentite, do mi kuros ordonojn.
Kaj iuj el la komandojn ni kuris lundon estis iom
kamufla en komenco, sed ls por listo, cd por ŝanĝo dosierujo,
rm, por forpreni.
Do ĝi estas speco de malnova lernejo vojo de navigi vian
komputilo, uzante nur vian klavaron kaj tekstajn komandojn,
kaj ne, ĝenerale, uzante muso.
Sed ni vidos, antaŭ longe, ĉi vere donas al ni
iom pli da povo kaj iom pli precizeco kun kiu
esprimi nin.
Kaj tiam super tie en la maldekstra, ni nur tuj vidos,
kiel ni komencu skribi programaron, iom resumo de la
Programo kiu ni skribis en supre maldekstre.
Sed ni vidos, ke denove antaŭ longe.
>> Do ni faru ion sufiĉe simpla tie.
Permesu al mi unue iri antaŭen kaj iru al dosiero, Save, kaj mi estas nur
tuj alklaku jharvard tie, super maldekstre, kaj
jharvard estas, denove, la nomo por mia hejmo dosierujo, mia
personaj dosieroj, mi nun esti John Harvard, kiel vi ĉiuj
baldaŭ estos John Harvard en tiu medio.
Li havas ĉi Ĉefpaĝo dosierujo, Mia Dokumentoj kaj tiel plu,
ke mi volas konservi, nun, ĉi tiu dosiero in
Do mi iros nomi ĝin hello.c. Tiam mi tuj iros
antaŭeniris kaj alklakos Save, kaj nun kion mi havas ĉi tie estas langeto
vokis hello.c, tiel kiel alia tipo de redaktanto.
>> Do nun mi antaŭeniri kaj komenci skribi programon.
int main (void).
Kaj tiam mi simple faris lasta fojo, printf, por presita formatita,
("Saluton, mondo!"
);.
Preskaŭ kompletigi.
Sed mi mankas kelkaj detaloj.
Kio mankas en tiu programo, kiun mi vere bezonas por
ĝin reale kompili?
Yeah.
[Inaudible]?
>> DAVID J. Malan: Jes, do mi bezonas inkluzivi la normo
/ S biblioteko.
Do ĉi devas iri super ĉefa, do mi simple tuj
fari iujn loko por ĝin tie.
Kaj mi tuj faros # include .
Kaj rimarki la angled krampoj tie.
Kaj kiel flanken, gedit estas eta uzanto amika, se
kelkfoje iom malklara, ĉar ĝi klopodas helpi vian
okulojn rimarki kion regiono kun kio.
Do la fakto ke mia kursoro estas dekstra flanko de ĉi tiu angled
krampo, rimarki kiel ĝi estas reliefigi la alia angled
krampo plus ĉi tiu.
Kaj tio estas nur por desegni mian atenton al la fakto, ke mi
havas simetrio.
Kaj simetrio en programado estas ĝenerale bona afero.
Simile, se mi movi mian kursoron al la fino, rimarkos kiel la
frizita krampoj linio ĝis montri ke, jes, mi havas malfermitan unu
kaj fermita, tiel paroli.
>> Bone, kaj mi povas fari unu alia aĵo.
Ne nepre necesas, sed bona praktiko, por diri
revenu 0.
Kaj reveno 0 faras kion por ni ĉi tie?
Aŭ signifas kion?
[Inaudible]
DAVID J. Malan: Sed nenio estas erara.
Kaj sincere estas malfacile por multe iri malbone en
plani ĉi mallonga.
Do mi simple estante super eksplicita ke cxio estas bone.
Mi, la homo, kiam mi kuros ĉi programo, volo probable neniam
vidi ke 0.
Ĝenerale, tiuj nombroj kiuj estas reveninta de ĉefa
nur ariergardo iliaj kapoj al la homoj kiam
iu iras malbone.
Kaj vi mem iom popo supren dirante sistemo eraro, oni,
du, tri, aŭ kion ajn la numero estis tiu
Estis vere revenis.
Do io alia malbona tio?
[Inaudible]
>> DAVID J. Malan: Do tiu estas ne tiom funkcia eraron
sed estetika unu.
Mi devus probable metis en linion karaktero tie ĉe la
fino de tiu ĉeno por ke ni efektive movi la kursoron al
la sekvanta linio, kaj la programo nur aspektas iom pli bela.
>> Do nun mi iros al mia fina fenestro
kaj zoom reen in
Kaj tion ĉi tie, ĝi estas nomata la prompto.
Ĝi simple memorigis min, kiu mi estas, jharvard @ aparaton, kie
aparaton estas la nomo de la komputilo mi plu.
En krampoj estas ĉi supersigno, la squiggle simbolo, kiu
reprezentas kio?
Spektantaro: Hejmo dosierujo.
DAVID J. Malan: Hejmo dosierujo.
Por ke estas nur stenografio skribmaniero por diri ke vi estas
Via persona dosierujo kie ĉiuj de viaj dosieroj iri defaŭlte.
Do nun, en ĉi tie, mi povas tajpi ls por listo.
Kaj la sola afero, kiun mi vidas ĉi tie nuntempe estas hello.c.
Kaj tio estas bona ĉar mi ĵus skribis ĉi.
>> Do lasu min antaŭeniri kaj ne faras saluton.
Kaj rimarki ke mi ne tajpas fari hello.c.
Anstataŭe, mi nur tajpas la bazo nomo de la dosiero, saluton.
Kaj faru, kiel ni vidis en lundo, estos nur konkludi, ke mi volas
la. c dosiero.
Do nun mi tajpis fari saluton.
Nun mi vidas ĉi sufiĉe longa komando kaj daŭrigos
vidante tiun denove kaj denove.
Sed esti klaraj, clang, la vorto, kiu ĵus aperis,
tio estas la reala tradukilo.
Faru estas nur build utileco.
Estas nur pli uzanto amika programo kiu savas min, en la
longa, de devi tajpi el nekredeble teda longa
komandojn kiel tiu.
Do vi povus ruli Clang permane.
Vi povus tajpi ĉiuj de tiu manlibro.
Nur ricevas tre teda.
Kaj tiel fari estas simple programo kiu simpligas nian vivon kaj
kuras pli kompleksaj ordonoj por ni.
>> Bone, do nun, kion dosiero mi devas
en mia aktuala dosierujo?
Ne nur hello.c, sed ankaŭ saluton.
Do se mi volas kuri saluton, memorigu, ke mi diras dot oblikvo,
kie pentras per iru en la nuna dosierujo, kien ajn vi
estas, kaj poste ekzekuti la programo nomata saluton, kaj efektive, nun,
Mi havas saluton mondo.
Bone, demandojn en la laborfluo aŭ la sintakso de
kion ni ĵus faris?
>> Bone, do ni preni aĵojn supren muesca denove.
Do tiu estis underwhelming justaj skribi programon kiu nur
iam diras saluton, mondo.
Do ni ŝanĝis ĝin, lundon, diri: saluton, David.
Ĝi estas iom pli persona, sed gxuste tiel malmola kodita kiel la
unua versio.
Do ne cxio, kio konvinkaj.
Sed tie ekzistas, en C, funkcioj certe krom
print, funkcioj kiuj permesas vin akiri uzanto enigo.
Kaj la vojon ni faris tion, la alia tago, estis kiel sekvas.
Antaŭ ol mi reale presi ion, mi unue atingis
ion de la uzanto.
Do lasu min fari tion denove.
>> String s, kie s estas nur arbitra nomo, tie, por
ĉeno, egalas GetString.
Do kio GetString?
Ĝi evidente ricevas ĉeno, bazita en lia nomo.
Sed kio estas tio, pli teknike?
Ĝi estas funkcio.
Do ĝi estas funkcio kiu ne venas kun C per si mem.
CS50 bastonon skribis ĉi.
Kaj tiel uzi tiun, vi ne povas ĝuste inkluzivi stdio.h,
Vi ankaŭ bezonos inkluzivas kio?
Yeah.
Do cs50.h, kiu estas nur arkivo ni skribis antaŭ kelkaj jaroj.
Ni instalis ĝin sur la aparaton por vi kune
ĉiuj de la norma dosierojn.
Kaj tiel en tiuj unuaj semajnoj de la klaso, ni uzos
ĉi nur por faciligi la procezo de fari tre baza
aĵoj kiel atingi uzanto enigo.
Ĉar kiel ni vidos post kelkaj semajnoj, atingante uzanto enigo en
lingvo kiel C estas vere mirige kompleksa,
aparte ĉar vi ne scias anticipe, kutime, kiel
multe stuff la uzanto tuj tajpi in
Kaj kiam vi ne scias kiom da datumoj atendas, vi ne
scias kiom memoro destini.
Kaj se vi vere havas adversarial uzanto kiu estas klopodi
pirati en vian sistemon, frakasi vian komputilon, nu,
ĝenerale la unua metodo de atako estas, same kiel mi faris en
Lundo, tajpu tuta longa vico de hazarda karakteroj,
batis Eniru, kaj rigardu kion rompas.
Ĉar ĝenerale, se programo rompas, ke aludoj ĉe
de sekureco difekto, potenciale.
Certe aludoj ĉe vi, la programisto, farinte
eraro, sed pli danĝere, vi povus esti farinta
sekureco-rilatajn eraro, kaj ĝenerale ni vidos ke
tiel estas kiel maŝinoj estas kompromitita la nuna tago, tiel
en la mondo de la retejo kaj programoj en la
komanda linio, kiel ĉi tio.
>> Bone.
Do string s egalas GetString.
Do pli konkrete nun, kion signifas linio 6 faras ĉi tie?
Do la funkcio sur la dekstra gets kordoj,
prenas kiom argumentoj?
Okay.
Do neniu.
Iom prudento kontroli.
Argumenton, denove, estas nur eniro al funkcio ŝanĝi
lia defaŭlta konduto de iu maniero.
Sed en ĉi tiu kazo, mi ne volas ŝanĝi
la konduto de GetString.
Mi nur volis akiri de ŝnuro.
Do mi metis nenio en la krampoj, kaj tiam mi metos
punktokomo demarking la fino de la linio de kodo.
Nun, la egala signo ne signifas egala, per si mem.
Ĝi signifas farita, kio signifas meti ajn ricevas
outputted dekstre ene de kio ajn maldekstre.
>> Do maldekstre, ni diras, ke ni deklaris
ŝnuro nomita s.
Kaj pli specife, ni destinis memoro ene de
kiuj ni metos la bitoj kiu reprezentas vico de
karakteroj.
Sed por hodiaŭ, ni asignitaj
aŭ deklaris ĉenon.
Bone.
Do nun unufoje Mi faris tion, mi volas ŝtopi en la valoro de
s, ne la valoron de David.
Do ĉi tiu estas malĝusta kial?
Do ĉi tiu estas nur laŭvorte la malmola-kodita s.
Estas diri "saluton, s," kiu ne estas kion mi volas.
Do mi povas fari ĉi tion.
La procentsigno estas lokokupilo, sed nun mi bezonas
pasi al presi duan argumenton.
Rememoru, ke argumentojn al funkcioj estas apartigitaj per
komoj, do la venonta komo tie mi metos post tio la literon j.
Kaj en ĉi tiu kunteksto nun, s estas la variablo, kaj printf,
sur ricevi tiujn du eniroj -
la kordo sur la maldekstra kaj la variablo nomo s sur la dekstra -
ĝi konektas la lasta en la iama por ni, kaj
nur presi belan bela kordoj enhavas
kion ajn ĝi estas, ke ni tajpis in
>> Do ni provu tion.
Tuj iros antaŭen kaj malzomi, dorso
al mia fina fenestro.
Zomi malsupre tie.
Retype fari saluton.
Clang ŝajnas esti rerun.
Mi iros por tajpi. / Saluton, Enter.
Nenio ŝajnas esti pasante ankoraŭ, sed ĝi estas en ĉi prompto
ke mi povas tajpi iun kiel Nate, Enter, kaj nun ni havas
Saluton, Nate.
Kaj mi povas fari ĝin denove kun Rob, kaj tiel plu.
Do espereble nun ĉi programo kondutas kiel mi intencas.
>> Nun, ne ĉiuj, ke uzanto amikojn.
Mi havas neniun ideon kio esti atendis de mi.
Do ni povas certe purigi ĉi supren iomete.
Lasu min reiri tien, kaj anstataŭ ĝuste subnaĝado en kaj
demandante la uzanton por kordoj, lasu min eksplicite diri la
uzanto kion mi atendis.
Do printf ("Enter ĉenon:«
);
Do neniu variabloj tie.
Neniu procentoj signoj.
Nur la simpla angla frazo.
Permesu al mi iri al la fundo tie kaj rerun mia programo.
Sed nenio ŝajnas esti ŝanĝita.
Kial?
Mi devas recompilar ĝin.
Tiel facila eraro fari.
Sed vi devas ne nur konservi la dosieron sed
recompilar la programo.
Kaj tial, se mi re-ruli fari saluton, nun Clang kuras.
Nun mi povas kuri. / Saluton. Kaj nun mi vidas "Enter cxeno:".
Okay.
Nun ĝi estas iom pli uzantamika.
Nate, Enter, saluton, Nate.
>> Nu, ni provu ĉi denove kaj komenci pensi
pri angulo kazoj.
Do ĝuste kiel en Scratch, vi kuraĝigis aŭ estas esti
kuraĝigis en la specifon al ia pripensi kion povis iri
erara, se vi ne anticipi ĉio la uzanto povus fari.
Cimojn, do, povus ensue.
Do eniri ĉenon -
kio estas angulo kazo ĉi tie?
Kio estas scenejo, ke Mi, la programisto, povus ne havi
anticipis?
Yeah.
Okay.
Do kio se mi tajpas en nombro tiel?
Bone.
Do ankoraŭ funkcias.
Gramatically ne havas senson.
Sed almenaŭ la programo funkcias.
>> Kio estas alia angulo kazo?
Io Mi ne atendis.
Yeah?
Okay.
Do ni povus fari ion kiel vere, vere granda nombro.
Do ni faru ĉi tie.
Lasu min malzomi dum sekundo, lasu min reliefigi.
Ne povas kopii kaj almeti cxi tie.
Bone.
Do mi ne povas kopii kaj almeti en ĉi terminala fenestro, do ni
nur simuli ĝin.
Lasu min malzomi, tuj envolver.
Mi ne faros tion por tro longaj, ĉar ĝi ne faros
fakte rompi en tiu programo.
Sed ĝi povis.
Eniri.
Sed ne.
Bone.
Sed estas vera angulo kazo.
Kaj la sola kialo ke kondutis ĝuste, tiel
paroli, estas ĉar la CS50 funkcio GetString estas fakte
desegnita sub la kapuĉo, kiel ni vidos post kelkaj semajnoj,
por aŭtomate destini pli kaj pli RAM, pli kaj pli
memoro de la mastruma sistemo, kiam rimarkas, wow,
vi vere tajpita en iu sufiĉe longa.
Nun, ĉi tiu estas peco de blanka mensogo.
Se ni efektive paŭzis sufiĉe tempon kaj mi tajpis en
iu kiel 5 miliardoj karakteroj en la klavaro
ĉi tie, aŭ vere batis kopio-paston sufiĉe, ni tre eble
povis kaŭzi la programo por frakasi.
Nur iom pli malfacile simuli ke kun finia
kvanto de tempo.
>> Kio estas alia angulo kazo ni povus provi?
Yeah?
Yeah.
Do kial ni ne respondos nenion?
Do ni vere devas preni iun agon, ĉar alie
la programo tuj sidas tie palpebrumante tuta tago.
Sed se mi ĝuste batis Entajpu -
OK, nun, ankoraŭ aspektas erara.
Ne frakasi, sed eble ekzistas nun ŝancon al
komenci apliki pli striktan programon
ke efektive kontrolas.
Kaj se la kordoj, la frazo, la vorto, kiun mi
tajpita en havas longitudon 0, nu, eble mi devus krias al la
uzanto, aŭ diri al li aŭ ŝi eniri ĉenon denove, por ke
ni reale preni kion similas ĝentila konduto kaj ne
nur kompletaj neglektas de mia flanko.
>> Demando en reen?
Dekuma nombro.
Do ni povus provi tion, ankaŭ.
1,10000005.
Similas ke tuj ĝuste funkcias reale okay.
Kaj tio vere atendas.
Eĉ kvankam ni povis esti tajpita tiu numero tie, aŭ
granda nombro antaŭe, rimarkas ke kiam ni tajpas uzanto
enigo kaj ni uzas la GetString funkcio, ne
aferon, se kion mi tajpas aspektas kiel nombro.
Rememoru, ke laŭ ASCII, ĉiu sur vian
klavaro havas nombran valoron, kiu povas esti mapita al
karakteron, char.
Do ĉi-kaze, eĉ se mi povus tajpi numeron, la
komputilo tuj pensas pri tio, por tiel diri, kiel linio -
iu kiu aspektas kiel nombro, sed estas
fakte ne numero.
Sed tio estas vere perfektan segue, ĉar nun ni povas
fakte transiro al skribi programojn kiuj
uzi aliajn datumtipojn.
>> Do krom uzi signoj, aŭ pli ĝuste, krom uzi kordoj,
realigi ke ni havos aliajn datumtipoj en C same kiel en
aliaj lingvoj.
A char, kiel la nomo sugestas, estas nur unu signo.
Al kaleŝego estas glitpunktaj valoron, kaj tio estas nur fantazio
maniero diri reela nombro - iu kiu havas dekuman
punkto en ĝi kun iuj nombroj al la maldekstra kaj / aŭ dekstren.
An int estas entjero, kiu estas nur numero kiel 123.
Kaj nun pli interese estas aĵoj kiel duobla.
Kion ni diras duobla estis lastfoje?
Estas 64, dekstre.
Do dum tipe kaleŝego estas 32-bita -
tial ĝi estas tio longe en memoro, ĝi uzas 32 nuloj kaj al
reprezenti valorojn - duobla estas laŭvorte dufoje ke, kiu
signifas ke vi povas aŭ prezenti pli grandan nombroj, aŭ
vi povas reprezenti pli precizaj nombroj.
Do vi povas havi pli numeroj post la dekuma punkto, sed
kiel la ulo diris en la video, eĉ iu simpla
koncepte kiel 1/3 ne povas esti prezentita precize per
komputilo, ĉar eventuale vi elĉerpas de bitoj, kaj
do vi nur povas fari .33333333 tiom da fojoj, je
kiu punkto oni nur devas diri ke mi estas el prezento
spaco, mi devas simple nomas ĝin tage kaj reprezenti ĝin
iom imprecisely like that.
Kaj longa longa -
stulta nomo, sed estas ĉar tie estas datumtipo konata kiel
longe en C kiu hazarde estas ofte 32 bitoj, ĝuste kiel
int estas 32 bitoj, sed longa longa estas
ĝenerale 64 bitoj.
Do simple signifas ke vi povas reprezenti pli granda
nombroj ol ĉi tiu.
>> Bone.
Do, se ni vere volas komenci reprezentas aferojn, ni
eble bezonos pli kompleksa tipoj, kaj
jen kial ni havas ĉenon.
Do, en la CS50 biblioteko, ke dosiero nomata cs50.h, ni
efektive deklaris datumtipo, por tiel diri, nomita kordoj,
sed ŝnuro ne reale ekzistas.
Jen, denove, unu el tiuj tavoloj nin tuj senŝeligi
reen en semajno aŭ du kaj ĵeti ĝin for, kaj vere
rigardas sub la kapuĉo je kioma linio fakte estas, kaj
kiel ĝi estas reprezentitaj.
Ni ankaŭ iras por rigardi Bulea valoroj.
>> Do kio estis bool en la kunteksto de Scratch?
Estas vera aŭ malvera.
Do estas nur valoro kiu estas vera aŭ falsa, sur aŭ for, 1 aŭ
0, tamen vi volas vidi la mondon.
Do en C, danke al la CS50 biblioteko, kiu laŭvice
inkludas alian biblioteko sub la kapuĉo, ni havas
aliro al datumtipo ke nomas bool, kiu volas
laŭvorte nin permesas atribui la valoroj vera aŭ falsa al
aĵoj en programo.
>> Do ni iru antaŭen tie kaj skribu iom programo kiu
faras ion engaĝante nombroj anstataŭe.
Do lasu min iri reen al la CS50 Appliance, lasu min antaŭeniri kaj
krei novan dosieron ĉi tie nomis -
ni simple diri ion simplan, kiel math.c.
Bone.
Kaj nun iru al la supro de mia programo, mi estas
faros la kutima -
# Include , tiel ke mi povas uzi
printf, int main (void) -
ni revenos al, eventuale, kion int signifas
ĉi tie, kion void signifas ĉi tie, sed nuntempe, nur scias, ke
vi devas komenci programojn kiel ĉi tio.
Nun mi tuj iros antaŭen kaj diru ion iom
malsamaj - printf ("Donu al mi nombro:"
);.
Tiam Mi faros int n = GetInt, ĉar ĝi
rezultas GetInt estas alia funkcio en la CS50 biblioteko
krom GetString.
Kaj nun mi faros ion stulta, kiel "danke
por la% d, "ĉar dekuma entjero, kaj tiam komo n, kaj
tiam revenu 0.
Do denove, revenu 0 havas nenion komunan kun la numero mi estas
demandante la uzanton por.
Nur signifas fine ke ĉiuj, supozeble, estas bone.
>> Do mi iros al mia fina fenestro tie.
Lasu min tajpi fari math, eniru.
Kaj io estas malĝusta.
Faru math ne funkciis.
Jen la unua el niaj eraro mesaĝoj.
Kial?
Iom críptico, sed -
Yeah.
Do cs50.h.
Do denove, speciale frue, vi skribu vian unuan
programo por pset 1 en sekciojn, en oficejo horoj, kaj
sincere, ĝi estos blindiga kelkfoje kion tio
fakte diras.
Sed vi rimarkas tre rapide komencas fali
en siteloj per ĉi tiu signifas ke vi jam cxesis unu
de la # inkludas sur la supro de la dosiero.
Kaj Clang, la tradukilo, estas informi vin pri ĉi tiu per
dirante prefere fancifully, implica deklaro de
funkcio GetInt estas nevalida.
>> Bone.
Do kion tio signifas?
Ĝi simple signifas ke vi implicite deklaris GetInt en
la senco ke vi ne eksplicite deklaris ĝin.
Eksplicite deklari int, vi devas instrui
Clang ke ĝi ekzistas.
Kaj la tre simpla solvo por tio estas instrui ĝin
inkludante tiun aliaj dosiero, cs50.h, ĉe
la supro de via dosiero.
Ĉar laŭvorte, kio # include ne estas rakontas Clang
preskaux iri trovi la dosieron nomata cs50.h, kopio,
algluu ĝin aŭtomate sur la supron de mia programo por mi,
kaj tiam konverti la fontan kodon al nuloj kaj aĵoj.
Sed tio estus evidente estus tre tede se ni homoj havis
iri kopii kaj bati tiuj grandaj dosieroj tuta tempo,
do # include nur faras ĉiu kiu aŭtomate sen
muddying mia kodo kun iu alia biblioteko.
Kaj biblioteko estas nur alia dosiero kiu enhavas funkciojn, kaj
aliajn aĵojn kiuj iu alia skribis, ke ni estas
utiligante nian mem.
>> Bone.
Ni provu denove.
Faru math.
Eniri.
Bona.
Por ke ŝajnas esti laborinta.
Do mi nun kuros math;. / Math.
Entajpu donas al mi numeron, 123.
Dankon pro la 123.
Nun ni provu alian angulon kazo.
Kordo estas sufiĉe malavara, ĉar
kordoj povas esti nenio.
Povas aspekti kiel nombroj, aspektas
karakterojn, aspektas kiel vortoj.
Sed int estas int.
Do nun se mi estas la malfacila uzanto, kaj ĝi estas dirante "Donu al mi
numeron, "kion se mi provas fari ion kiel 0,1?
Nu, tio estas nombro, kaj ĝi estas konsekvenca kun la
gramatiko mi uzas tie, sed sub la kapuĉo, mi estas de
Kompreneble uzante la funkcion GetInt.
>> Do ni vidu kio okazas.
Enter, reprovi.
Bone.
Lasu min esti malfacila kaj nur batis Entajpu denove.
Eniri, Enter.
Do nun ŝajnas ke GetInt estas iom pli
potenca ol GetString.
Ni, la dungitaro, implementado tiel ke se ni rimarkos
Vi ne donis al ni int - kaj int estas dekuma nombro
enhavanta nuloj, bonaj, duope, triope, kvarpiede, Fives, Sixes,
po sep paroj, eights, aŭ _nines_.
Kaj tio estas ĝi.
Neniu dekuma punktoj, neniu signoj, neniu interpunkcio.
Ŝajnas ke ni devas kunlabori.
Do mi provos kvar, kvin, ses, kaj kiu alvenas al mi tra.
Do vere, esti anal tie, mi probable dirus "donu al mi
entjero "por transdoni al la uzanto
precize kion mi intencas.
>> Nun ni pensas sub la kapuĉo.
Ni ne intencas rigardi kiel cs50.h estas implementado hodiaŭ,
tiu biblioteko.
Sed se ĝi daŭre diras reprovi, reprovi, reprovi, kion programado
konstrui mi supozeble uzas sub la kapuĉo por
planas akcepti?
Do nur buklo, ĉu ne?
Unu el la plej simplaj ideoj, kiun ni vidis en Scratch.
La Forever konstrui, la Ripetu konstrui.
Supozeble, en tiu programo, sub la kapuĉo, eĉ
kvankam ĝi estas skribita en C kaj ne nulo, ĝi estas fari
iu nomita ekvivalento forever se la uzanto ne havas
tajpita en entjero, diru reprovi, reprovi, reprovi, reprovi, tiel
tiam fine kiam ni ricevas entjero, tiam vi
rompi el tiu ciklo.
>> Do kion aliaj funkcioj povas ni uzi tie en CS50 la biblioteko?
Nu, ia la evidentaj, almenaŭ bazita sur la
datumtipoj, ke ni nun scias ekzisti.
Ni implementado GetString, GetInt, sed tra la tuta
unuaj semajnoj de la termino, vi povas uzi ankaŭ GetFloat kaj
GetDouble kaj GetLongLong por atingi precize la
datumtipoj, ke vi deziras.
Ĉar la ŝlosilo detalo estas, ke kontraste iuj lingvoj,
kiel Python kaj Ruby, kie vi ne nepre devas
deklari la datumtipo de variablo -
vi ne devas diri al la komputilo, kian de aĵoj
vi tuj metis en la variablo -
en C, oni devas esti ever do preciza.
Do se vi volas variablo nomis n, eron de stokado
ke en ĉi tiu kazo okazas al esti 32 bitoj per konvencio, vi
devas diri la komputilo ke tiuj bitoj estas
tuj stoki nombro -
ne estas karaktero, ne ĉenon, ne flosas.
Kaj tion traktas la temon ni efektive
enkuris en lasta semajno.
Se ni uzas nuloj kaj nombroj por reprezenti ne nur
nombroj sed Kiel kaj Bs kaj C, kiom en la mondo estas
komputilo tuj scias, ke ĉi tiu ŝablono de bitoj vere
reprezentas la numeron 65, kontraste reprezentantaj la
litero A, kiu hazarde, laŭ
ASCII, memoras, estis ekvivalenta al 65?
>> Do tiuj datumtipoj provizi kuntekston por la komputilo, do
kiu konas se tiuj bitoj devus esti interpretita kiel
int aŭ kiel linio.
Demandojn, tiam, sur tiu ĉi?
Yeah?
DAVID J. Malan: Bona demando.
Se ni prenas el stdio.h, ni konservu la dosieron -
lasu min iri al la terminala fenestro kaj kuri fari math, zoom
en kaj eniri -
nun mi ricevas malsaman eraro, ĉar mi estas implice
deklari kio funkcii nun?
Printf.
Do nun mi kreis novan problemon, kies solvo estas
esence la sama.
Mi bezonas meti tiun dorso.
Spektantaro: [inaudible]
DAVID J. Malan: Ho.
Do se mi forprenu -
Konsentite, yeah.
Do se mi forigi la normo / S biblioteko inclusion supren
ĉi tie, kaj tiam vi jene, se mi forigi printf, get
liveri de printf?
Jes.
Tiu devus labori, ĉar mi estas ne plu uzi ajnan - whoops.
Ĉu mi ĝuste kuŝas?
Ho, bone.
Tio ne funkcios pro nova eraro ni ĵus prezentita.
Kaj ĉi tiu estas iom pli mem-klarigan.
>> Kio estas la problemo?
Neuzataj variablo n.
Do tiu eraro estas la rezulto de nia esti agordita la
aparaton esti aparte pedanta, por vere krias al
vi por cxiu ebla eraro, eĉ se ĝi estas speco de
ne-fatala eraro kiel ĉi - estas vere tiom granda
trakti ke mi atribuis al int, metu nombro en ĝi kaj poste
nur faris nenion per ĝi?
Do funkcie, ne.
Tio ne tuj rompos la programo.
Estas nur ia stulta, ĉu ne?
Ne estas valoro al li petis tiun numeron, stokitaj
ĝin en variablon, se vi neniam faros ion
kun ĝi, ĉu presi ĝin aŭ savi ĝin.
Do ĉi-kaze, Clang estas agnosko tiel, kaj
ĝi estas jene neuzitaj variablo n.
>> Do ni povas fiksi tion ĉi se ni vere volas.
Sed denove, tio ne estas bona programado nun.
Do mi povis nur fari tion -
subiros tie, lasu min liberigi la ekrano, fari math.
Kiu funkcias.
Nun mi povas kuri mia math programo, prenas enigo -
bone, tio estis malbona.
Prenas enigo, kaj tio estas ĉio faras, en ĉi tiu kazo.
>> Do efektive, ni provu unu alia angulo kazo ke ni
ne pensis antaŭe.
En ĉi tiu kazo - ĉi tie, ni reiru al kiu estas
iom pli uzantamika.
Lasu min reiri tien kaj kuri fari math denove.
Whoops, kion mi faras malbone?
Alvenis al ruliĝi reen plu.
Okay.
Nun ni estas tie en la originala stato, kie ĉiuj
Estas espereble bone.
Kaj nun se mi kuros math, 123 ŝajnas funkcii.
Sed ĉi tio ne estas vere efika pruvo, je justaj diri
estas bone, ke funkcias.
789, kiu funkcias.
Tempo por submeti.
Ĉar ekzistas alia angulo kazoj tie.
Kordo ne vere donas al ni multe da ĝeno tajpante en
tuta multajn signojn.
Sed kion se mi tajpas en tio?
Bati la numero 1 en aro multe, tutaj multe tie -
gravas, ĝi estas ricevas iom enuiga, do mi tuj
halti ĉi tie kaj mi iros por bati Eniru.
>> Kio diable ĵus okazis?
Do tio povas reale esti klarigita.
Do ĉu ĝi prenas ĝin kiel duuma?
Bona penso, sed ne, ĝi estas ne la fakto, ke ĝi portis ŝin
kiel duuma, ĉar ja, kiu estis nur speco de
koincido.
Ni povas fari ĉi denove.
Do ne estas 2 en la duuma sistemo, jen
Probable sufiĉas iel.
Eniri.
Por ke ne estis la problemo.
Kion alian?
Ekzakte.
>> Do pensas reen al kia int reale estas.
Estas 32 bitoj kiu kolektive estas interpretitaj
kiel nombro.
Se vi havas 32 bitoj, kiu signifas ĉiu de la bitoj povas esti
a 0 aŭ 1, 0 aux 1.
Do tio signifas ke estas du ebloj por tiu bito,
du eblecoj por tio, du ebloj por tiu
iom - tiel ke estas 2 horoj 2 fojoj -
tial jen 2 al la 32 povo estas la tuteca nombro de
permutoj de nuloj kaj se vi havas 32
anstataŭiloj, nuloj aŭ aĵoj, fronte de vi.
Do, se mi havas 2 al la 32, matematike, jen kio?
Do ĝi estas tre.
Estas 4 milionoj, donu aŭ preni.
Kaj 4 miliardoj ne ŝajnas esti kio estis presita cxi tie.
Fakte, ĉi aspektas pli proksimaj al 2 miliardoj.
Sed tio ne estas hazardo.
La fakto ke la komputilo malinterpretado mia grandega nombro,
mia grandega vico de karaj kaj tiam mia grandega vico de duope,
kiel krude 2 miliardoj, klarigas kiel?
Jen ĉapo sur la int.
Jen certe maksimuman valoron, kiun vi povas reprezenti.
Sed estas kutime 4 miliardoj, ĉu ne?
Se 2 al la 32 estas proksimume 4 milionoj, tio similas
tio estas la plej granda nombro.
Do ne restaĵo, sed bona penso.
Negativaj nombroj.
Do se vi havas 4 miliardoj eblaj aĵoj vi povas
reprezenti kun tiuj diversaj permutoj de 32 _0s_ kaj
1s, nu, ĝi staras rezoni, ke ni homoj povus voli
reprezentas ne nur pozitivaj entjeroj
sed negativaj entjeroj.
Kaj efektive, jen la supozo, ke C faras.
Do kun 32 bitoj, vi povas reprezenti proksimume negativa 2
miliardo tuta vojo ĝis pozitiva 2 miliardoj.
Kaj tiel en tiu ĉi kazo, kion ni vere vidas, ĝuste
la randon de la kapablo de nia entjero, kaj ni havas, tiel
paroli, superfluis entjero.
Ni provis Cram pli bitojn en ĝin ol povas fakte persvadi.
Do la fina rezulto estas ni esence havas ĉiuj 1 bitoj.
Ni spegulita ĉiuj niaj bitoj, ni provis reprezenti
la plej granda nombro eblas, sed estas klare ne preskaux
sufiĉe granda por reprezenti la du aferojn Mi ĵus tajpis in
Yeah?
Spektantaro: [inaudible]
>> DAVID J. Malan: Bona demando.
Kial ni ne simple reprezenti ke negativa
subskribi kiel nur karaktero?
Do ni absolute povis, kaj ni povis tiam savi
plia iom.
Sed vi ankoraux havos por reprezenti ke streko, kaj
ke tuj kostis vi almenaŭ ion,
supozeble iom.
Do jes, ni povus havi 32 bitoj uzas por nia nombro, sed nun
ni bezonas alian iom uzata por nia haltostreko
simbolo, la minuso.
Do nun ni havas 33 bitoj valoroj, kiujn ni povus fari, sed estas
nur ne tiu vojo ĝi estas farita.
Ni faris juĝon alvoko jaroj, 32 bitoj estas varo de la
unuo de mezuro tie.
Do ni tuj uzi unu el tiuj bitoj efektive por
reprezenti negatividad, kaj 31 bitoj por reprezenti la nombro.
Aliaj demandoj?
Bone.
Tio estas tre.
Kial ni ne iru antaŭen kaj prenu nian kvin minutoj ripozon ĉi tie?
>> Bone.
Do denove, ne overemphasize la matematika aplikoj
de programado, estu la ĵus deŝiri sur tiu ekzemplo
antaŭ ol ni movos en aliajn konstruas, nur ĉar ĝi
estos ilustri kelkajn komunajn allogilon punktoj sur kelkaj el
la fundamentojn, kiam temas pri skribo programoj.
En ĉi tiu kazo, farante aritmetiko esprimoj, kiuj havas iujn
interesa gravecon al la sintakso.
>> Do tiu estas nur formulo, per kiu ni povas konverti
temperaturoj de Fahrenheit al Celsius.
Se vi ne memoras, tio estas nur la formulon.
Do, se ni konektas en Fahrenheit valoro de 32 gradoj, kiu estas
congelación, ke tuj estos 32 minus 32 estas 0, kaj ja,
0 en C estas ankaŭ congelación.
Tiom rapidis prudento kontrolu tie - tio estas la familiara formulo.
Mi volas transiri al la aparaton, tamen, kaj komenci
skribi programon nomata, kiel, f2c; "Fahrenheit al
Celsius dot c ".
Kaj ĉe la supro tie, mi tuj dividi kun # include
stdio.h, kaj mi faros int main (void), kaj
denove, ni revenos en la estonteco kiel al kio int signifas
tie kaj kion void signifas tie.
Kaj nun lasu min iri antaŭen kaj efektivigu programo kiu
esence faras ĉi konvertiĝo por ni.
>> Do printf, diru, temperaturo en Fahrenheit.
Kaj poste mi iros antaŭen kaj akiri la valoron de la uzanto.
Kian valoron mi preni de la uzanto, se mi volas
ili donis al mi temperaturo en Fahrenheit?
Yeah?
Kion vi proponas?
Yeah.
Do kaleŝego sentas bela racia.
Ni havas, denove, nur malmultaj ebloj kiuj
ni vidis ĝis nun.
Ni havas aĵojn kiel char, duobla, kaleŝego, int, longe longa,
bool, kordoj.
Do de tiuj, kaleŝego sentas bela racia.
Ni povus uzi duoblan, rajto, ĉar se ni vere volas
reprezenti homan la temperaturo -
98,60000 -
ni povus uzi 64 bitojn por fari tion, sed sentas
overkill por la temperaturo.
Do ni nur iri kun kaleŝego.
Nun mi bezonas variablo.
Nur por gardi aferojn simplajn, mi tuj nomas ĝin f, sed mi
povus same ĝuste nomi temperaturo,
sed ĉu estas fajna.
Do flosi f = GetFloat.
Kiam mi nun decidis uzi GetFloat, kvankam, mi
bezonas fari unu korekto.
Yeah.
Do ni bezonas # include , alie la tradukilo estas
tuj krias al ni.
Nun ke mi havas kaleŝego, lasu min antaŭeniri kaj faru la
konvertiĝo.
>> Do unue, lasu min ankaux eniri la kutimo tie de
dirante mia kodo.
Do denove, al komento estas nur skribmaniero al la homa tio estas
ne estas parto de la programo per, sed unu, helpas vin
kompreni kion vi faris al la sekva mateno, aŭ la venonta
monato, ĝi helpas via instruado ulo kompreni kion vi faris
aux kion vi intencas fari, do estas
ĝenerale tre bona praktiko.
Ĉiu malmultaj linioj de kodo, skribu komenton al
mem aŭ via kolego.
Do jen, mi intencis diri, "Petu uzanto por temperaturo."
Ne devas esti kompleta kondamni, malmulta frazo.
Sed la ideo malantaŭ dirante en C estas ke ĉiu el viaj
komentoj devus plifortigi vin - aŭ, ekzemple, TF aŭ kolego -
al skim vian programon kaj scias precize kion ĝi faras, por ne
tiel legi la kodon, sed per legi la komentojn, kiuj
estu konciza kaj klara.
Bone, do nun mi iras antaŭen, kaj diros: "Convert
Fahrenheit al Celsius. "Do mi tuj faru,
diru, flosi c.
Ni observu Celsius kiel glitpunktaj valoro.
>> Kaj lasu min preni ponardopiko ĉe ĉi.
La formulo estas, denove, ĝis ĉi tie.
Kiel 5/9 fojoj F minus 32.
Do ni faru ĉi.
Do 5 dividite per 9, minus -
whoops, mi paneas ĝin jam.
Fojoj.
Do 5/9 fojoj F minus 32.
Do F minus 32, punktokomo.
Kaj nun, cxi tie, mi tuj iros antaŭen
kaj diru: presi rezulto.
Kaj ĉi tiu parto estas facila. Printf.
Kiel mi iros sur presi ĉi?
Nu, mi povus diri "Tiu nombro en Celsius estas% f \ n",
nur por iuj estetiko.
Kaj poste kio valoro mi volas ŝtopi en tie kiel printf la
dua argumento?
Okay.
Do nur c.
Do ni komencu per tiu kaj tiam ĵus revenas 0.
Denove, ĝi havas nenion komunan kun la math.
Ĝi simple signifas ĉio estas bone.
>> Nun, estas ĉi ĝentila, ĉi tiu programo?
Bone.
Do mi faris iujn erarojn.
Eĉ se vi ne havas ideon kion programado estas, vi povas ordigi
de inferir reen al grado lernejo kion la
eraroj tie estas.
Kio estas unu el la unuaj?
Spektantaro: [inaudible]
DAVID J. Malan: Yeah.
Do ni mankas krampoj.
Estis diskutita ke mi faris krampoj en la keynote
gliti tien, ĉar fakte tiu nocio de ordo
de operacioj, aŭ prioritaton, per kiu iuj operacioj -
multipliko -
havi plej devigaj, ili havas pli alta prioritato, ol aĵoj
kiel aldono aŭ subtraho.
Do ni jam faris tion por jarojn nur por klarigi ekzakte
kio matematika operacio devas esti farita unue.
Do mi devus probable imitas ĝuste ĉi.
Alie, la komputilo estas supozeble tuj provos fari
iu kiel dividi 5 de 9, tiam multipliki F, tiam subtrahi
32 el la tuta afero.
Kio ne estas, fakte, kion ni volas fari.
Do ni parenthesize.
Ni aldonu mian krampoj tie, parantezoj tie.
Ni metis ĉi tien.
Ĉi tie, mi nur rimarkis alian eraron mi faris dum la vojo.
Yeah?
Spektantaro: [inaudible]
>> DAVID J. Malan: Ah.
Bona.
Do ni vere havas la saman entjero
divido temo de antaux.
Mi korektos tion, ni vidu kion la simptomo estas.
Sed ni tuj devas korekti unu
aliaj eraro ĉi tie.
Yeah?
Spektantaro: [inaudible]
DAVID J. Malan: Jes.
Do, stulta eraro kiun mi faris, sed nekredeble grava.
La komputilo ne tuj ĝuste turnu la okulojn kaj estu
mi uzas ĉefurbo F, kiam mi efektive deklaris la variablo
kiel minuskla f tie, en la linio 8.
Do mi bezonas korekti en linio 11 miaj majuskloj, kiun
antaŭ momento estis ĉefurbo F por eraro.
Kio pri ĉi tie?
Se cxi tiu minuskle tiel?
Ĝi devus esti, sed tio estas koincido.
Ke% f havas nenion komunan kun la variablo.
Do nur esti super klara tie, lasu min antaŭeniri kaj
renomi ĉi, mallonge, "temperaturo". Lasu min renomi
tiu "temperaturo". Ne lasu min renomi ĉi.
Ĉar, denove,% f sume signifas, "glitpunktaj valoro."
Havas nenion por fari kun mia variablo.
Sed "temperaturo" tra la tuta loko estas nur iom wordy,
do mi tuj reiri al mia minuskla "f" s.
>> Nun, lasu min iri antaŭen malsupren al mia fenestro tie.
Faru f2c -
kio estis, denove, la arbitra nomo mi
donis al ĉi tiu dosiero.
Ŝajnas esti kompilita.
Mi kuros f2c.
Eniri.
Temperaturo en Fahrenheit - ni faru facila unu.
32.
OK, korekti.
Sed, se mi nun faras 212 por bolado -
malbenita.
Bone.
Do, certe ne estas prava, se via TF provas
almenaŭ du valoroj.
Do kio estas la problemo ĉi tie?
Nu, vi jam metis fingron sur kion la demando estas.
Sed kial estas ke la kazo?
Ĝis ĉi tie, kiam mi faras la math de 5 dividite per 9.
Do koncepte, jen perfekte ĝustaj.
Plene kohera kun la formulo.
Sed komputiloj nur fari precize kion vi
diru al ili fari.
Kaj kion ni efektive diras la komputilo jen
dividu la entjera 5 por la entjera 9
kaj donu al mi la rezulton.
La problemo estas, tamen, kiam vi divido uzante datumoj
tipoj, la eligo estas la sama datumtipo kiel la enigoj.
Kaj do se la du eniroj estas ambaŭ ints, la eligo estas tuj
esti int.
Kaj tial 5 dividitaj de 9 estas punkto ion.
Sed kio estas la plej proksima entjero noti ion?
Do, ĝi estas vere 0.
Do kiel ni diskutis lunde, ĉio post la dekuma
punkto gets detranĉita.
Simple gets forĵetis.
Do tiu estas kompleta eraro, ĉar mi povus tiel simple
multipliki ĉio per 0 tie.
>> Nun, mi povas ripari tion en kelkaj manieroj.
Mi povus fari tion.
5.0 dividita de 9,0.
Teknike, mi eĉ ne bezonas fari tion.
Ĝi faras sufiĉas por simple unu el la nombroj a float -
aŭ duobla - metante la dekuma punkto ĉi tie.
Ĉar kio okazas nun estas kiam vi dividas entjeron per
kaleŝego, aŭ duobla, la komputilo tuj rimarki
oh, unu el tiuj estas pli preciza.
Lasu min erari sur la flanko de doni al vi pli precize ol
vi intencis.
Do ĝi konverti la rezulton -
ĝi revenos la rezulton kiel glitpunktaj valoro ankaŭ.
Por ke ĝi funkcius.
Ĉi tio funkcios.
Kaj estas unu alia mekanismo, ke ni vidos en
pli detale proksima semajno.
Vi povas fakte, kiel la programisto, diru al la komputilo
por fakte trakti unu datumtipo kiel
kvazaŭ ĝi estus alia.
>> Do mi povis efektive fari ĉi tion.
En krampoj, mi povas diri ion kiel (float), malfermita
paren, proksime paren.
Kaj jen estas tio, kio nomas "casting." Denove, pli
en ĉi tiu proksima semajno.
Sed tio estas ĝuste la programita maniero de diri
la komputilo, jes mi scias 9 estas entjero aŭ longa.
Mi scias ĝi ne estas glitpunktaj valoro.
Sed trakti ĝin kiel tia ĉiuokaze.
Do por jxeti datumtipo signifas igi
de unu al la alia.
Sincere, ĉi tiu estas nur iom malbela, do mi proponas ke ni iru
dorso al la originala sugesto de nur konverti
tion al glitpunktaj valoroj permane.
Ĉar nun estas nur super certe kio okazas, kaj
ĝi ne estas ĉio, kion distri.
>> Do ni nun revenas al mia fina fenestro.
Faru f2c.
Lasu min kaj kuras ĉi.
Kaj, kiel flanken, vi enuiĝos tajpi tiujn komandojn
denove kaj denove, rimarkas ke komputiloj, kiel Linukso tie,
inklinas esti tre saĝa.
Kaj se mi batis Ĝis, ni povas iri tra mia tuta historio de
ordonojn, supren kaj malsupren.
Do en ĉi tiu kazo tie, mi povas nur iri Ĝis kuri fari f2c.
Mi estante kriis al, ĉar mi ĵus faris tion duan antaŭe.
Estas jam ĝis nun.
Do nun mi povas kuri f2c denove.
Ni provu 32 Fahrenheit.
Nun ni provu 212 Fahrenheit.
>> Phew.
Ŝajnas funkcii.
Nun, ĉi tiu estas bona, sed sentas iom arbitra, ke
Mi montrante ses numeroj post la dekuma punktoj.
Ĝuste?
Se vi estas la vetero persono en TV, vi estas afabla de doofus
se vi legas la temperaturo al
ĉi tiu grado de precizeco.
Do ni simpligi ĉi.
Do ni vere iru tien, al mia printf.
Kaj jes, mi volas flosi.
Sed mi volas nun specifi la precizeco.
Kaj mi tuj estos iom konciza.
Mi intencis diri, donu al mi unu punkto post la dekuma loko.
Do anstataŭ diri% f, mi intencis diri% .1 f.
Kaj jen ĝuste signifas doni al mi unu pozicio
post la dekuma punkto.
Bone.
Ni provu ĉi denove.
Lasu min re-ruli ĝin post kompili.
Kaj nun mi tajpas en 32, kaj mi reiros al
pli konciza valoro.
Kaj mi povas tajpi en, nun, 212, kaj reiros pli konciza
valoro ankaŭ.
Kaj estas aliaj aferoj, kiujn vi povas fari kun printf.
Vi povas fakte specifi kiom larĝa la nombro devus esti.
Se vi volas havi Plenigado sur ĝi, do vi povas dekstre-align aŭ
maldekstra-align ĉiuj viaj nombroj aŭ
provi centro aĵoj.
Do realigi estas iom lertaĵoj vi povas fari tie.
Sed ili nur boli malsupren al formato kodoj,
kiel ni havas tie.
>> Do en terminoj de ĉi tiu temo de prioritaton.
Ĉi tiu estas tre enuiga tablo iri tra metode.
Sed rimarkas ke la aŭtoroj de C venis supren kun la
reguloj kiuj specifas kiun operatoroj havas pli alta
prioritaton, pli deviga forto, ol aliaj.
Do dum en grado lernejo, ni ĝenerale sciis ke estis
multipliko kaj divido, tiam adicio kaj subtraho,
tiam iu alia materialo.
En mondo de programado, ekzistas multe
plu listo de aĵoj.
Kaj ĉi tio ne estas io valoras parkeri nun.
Vi get ambientadas al ĝi post nelonge.
Sed ĝuste kiel en grado lernejo, parantezoj ĝenerale solvi
la temoj de prioritaton, farante super klara al la
komputilo kaj homa egale kion celas.
Do konsideru ĉi nur iom cheat folio tie.
Sed plimulto de tiuj detaloj ni ne atingos por iu tempo.
>> Bone.
Nun, ni konstruos kaj movi sin de tiuj stultaj iom
matematika ekzemploj.
Ankoraŭ uzas la saman fundamentojn, sed komenci
esprimi sin iom pli kiel Scratch.
Do en Scratch, ni havis tiujn Bulea esprimoj.
Kaj en la angla, Bulea esprimo estas kio?
Vera aŭ malvera.
Estas iu kiu taksas al vera aŭ malvera.
1 aŭ 0.
Sur aŭ for.
Kion ajn vi volas nomi ĝin.
Nun en Scratch, la puzlo pecoj aspektis kiel ĉi tio.
Kaj tio estas la ĉifro, sur la fundo tie, de tri
enigmo pecojn.
Unu konjunkcio -
iu kiu havas malplenan kaj celo.
Kaj tiam du Buleaj esprimoj ene de ĝi.
Do vi povas nesto Bulea esprimoj por akiri pli
komplika Bulea esprimoj.
Ekzemple, se ĝi estas sabato, kaj tio estas agrabla
vetero, tiam iru eksteren.
Aŭ iu arbitra kiel tiu.
Do vi povas aliĝi Bulea esprimoj veni supren kun
granda vero valoro, kies respondo estas bazita
en la pli malgrandaj.
>> Nun, en C, dankeme, ĉi surĵeto estas
vere bela simpla.
Parentezoj helpi fari tion certe tie.
&& Estas kion signifas "kaj." Do jen kiel
nin tuj konverti tiujn blokojn de Scratch al C.
Kaj sur la kondiĉoj ni vidis en Scratch, maldekstre
flanko, mi povas pilo ili simile en C. Se x estas malpli
ol y, tiam faru tion.
Else if x estas pli granda ol y, tiam faru tion.
Else logike devas esti egalaj, do diri
ke ili estas egalaj.
Do ni povas nun komenci konstrui tiujn aĵojn.
>> Do ni faru ekzemplon.
Lasu min malfermi dosieron kiu estas sur la kurson de afiŝinto ke
Mi skribis anticipe.
Tio estas nomata nonswitch.c.
Kaj ni vidos kial en nur momento.
Do en tiu dosiero - nonswitch.c--
unua rimarkas ke ekzistas tuta amaso de
komentoj ĉe la supro.
Tio simple klarigi la nomon de la dosiero, kio
faras, ktp.
Kaj ŝajne pruvas la uzo de Bulea KAJ-ing -
conjoining du esprimoj.
>> Do ni vidas, ke tiu programo funkcias.
Mi inkluzivas miaj du dosierojn, cs50.h kaj stdio.h.
Se mi rulumu malsupren, nun, al la programo, ĝi estas iom pli longa
ol ni skribis antaŭe, sed bela legebla.
Do mi unue presi al la uzanto, sur linio 18,
"Donu al mi entjero inter 1 kaj 10." Do
ke pravas tie.
Nun mi ricevas la entjera.
Sed rimarkas ke GetInt - bela simpla.
Ĝi simple tuj ricevas int.
Ĝi okazas por certigi ke ĝi ricevas int kaj ne
ŝnuro aŭ kaleŝego.
Sed gxi ne faros ian limon kontrolanta.
Ĝi ne iras por filtri la numeroj esti inter
iuj gamo.
Do ni devas apliki ke ni mem.
Do ĝuste kiel en Scratch, kie mi povus fari konjunkcio de
du esprimoj, mi povas fari tion en C kiel sekvas.
Se n estas pli granda ol aŭ egala al 1, kaj n estas malpli ol kaj
aŭ egala al 3, mi iras al tre arbitre dekreti ke
numeron por esti malgranda nombro.
Ĝuste pro komunikaĵo.
Else if n estas inter 4 kaj 6, print "Vi prenis duona
nombro. "Else se n estas inter 7 kaj 10-print" vi plukis
granda nombro. "Else presi" Vi elektu nevalidan numeron. "
Ĉar logike, kiu sekvas se ni
elĉerpita nia atingo.
>> Do realigi ĉi tio ne estas sufiĉe kiel ni skribas pli granda ol aŭ
egala al en math klaso.
Ĝuste?
Vi kutime desegni ĝin kiel tiun, kun la linio sub ĝi.
Sed ne ekzistas tia klavo sur mia klavaro.
Do la simbolo en C por esprimi pli granda ol aŭ
egala al estas du karakterojn, kaj la simbolo por malpli ol
aŭ egala al estas du karakterojn tiel.
Bone.
Do se mi kuros ĉi programo, oni povas eble diveni kio estas
tuj faros.
Se mi iras antaŭen kaj fari nonswitch, Enter.
Kaj poste ekzekuti nonswitch.
Donu al mi numeron inter 1 kaj 10.
Mi ĝin donacos 11.
Mi plukis nevalidan numeron.
Lasu min provi la numero 3.
Mi prenis malgrandan nombron.
Do sufiĉe simpla tie.
>> Kio se mi volas ŝanĝi la konduton de tiu programo kaj
fari ion iom malsama loko?
Lasu min kaj diri tion.
Lasu min forigi tiun tutan.
Kaj mi diru, se (n == 42).
Kaj poste mi iros por antaŭeniri kaj diru print "Vi elektis la
dekstra respondon. "Else nin tuj iru antaŭen kaj diru:
printf ("Vi elektis la
malĝusta respondo. "); Okay.
Nur ĉar.
>> Nun, kelkaj punktoj ni povas fari tie.
Unu, mi ne tajpi la simbolon, ke vi pensas estas la
plej racia.
Kiam mi volas kontroli egaleco, rezultas vi ne uzas la
egala signo.
Vi anstataŭe uzi la egalaj egalsigno.
Kaj kial povus esti ke, ĝuste intuicie?
Yeah.
Spektantaro: [inaudible]
DAVID J. Malan: Correct.
La egala signo estas jam uzita por farita.
Iu ne vere kredas ke tiu tra.
Kaj tial nun, kiam temas pri egaleco testado, ni devas
esti pli eksplicitaj, kaj diru egalas egalas.
Tre komuna eraro estas fari tion.
Kaj, se en oficejo horoj aŭ iam venontsemajne aŭ en la
venontaj du semajnoj vi faras ion kiel ĉi tiu kaj tiam
barakti kun ĝi dum 10, 20 minutoj por provi elkompreni
kion la malbenita cimo estas, kompreni ke vi estas unu el tiuj
homoj kiuj faris ĉi tiun eraron.
Do, Super facile fari.
Sed la celo nun estas malproksimigi ĉi eraro.
Tio povus taksi, ĉar kio estas ĉi vere diras?
Se n ricevas 42.
Do la verbo oni uzas, parole, por esprimi la
nocio de asigno estas "ricevas". Do se n ricevas 42.
Do tio signifas asigni 42 al n.
Nun mi havas Bulea esprimo en krampoj,
ene de ĉi tiu kondiĉo, la valoro de kiu estas 42.
Ĝuste?
Ĉar se vi taksas ĝin de interne eksteren, la tuta
respondo, nun, estas 42.
>> Do, se mi demandis al vi la demandon, "se (42)," kio estas
kiu vere diras?
Nu, Bulea esprimoj povas nur esti vera aŭ malvera.
1 aŭ 0.
Sur aŭ for.
Do ni ŝajnas havi angulon kazo tie, per kiu ĉiuj de
subita, mi diris "se (42)". Tio ne estas Bulea valoro.
Do kion fari komputiloj, tamen, estas esence egalas
io, kio estas ne 0 interpretas esti vera.
1.
On.
Ili estas ĉiuj funkcie ekvivalentaj.
Nur la valoron 0, aŭ la ŝlosilvorto falsa, kiel ni instruos vin
eventuale vidas, estas vere falsaj.
Do "se (42)" estus vere esti vera, ĉar ĝi estas ne-nulo.
Do por esti pli preciza cxi tie, Bulea valoro estas vere ne tiel
multe vera aŭ falsa, sed por tiu ĉi
kazo, se estas 0 aŭ ne-nulo.
Do falsa aŭ ne falsaj.
Kaj kiu nin permesas ĉirkaŭpreni la tutan pli
eblojn en la parenthetical esprimo.
Do ni bezonas, iam tiel zorge, tion diras -
se (n == 42).
Simple ĉar ni bezonas specifi provo de egaleco,
ne estas asigno de valoro.
>> Kion alian valoras notanta tie?
Tiuj frizita krampoj estas reale ne necesa.
Mi estis farante ilin nur por esti nit-picky tie.
Sed kiam vi havas kondiĉo kiu nur havas unu linion de
kodo, kiel oportuneco, programistoj ne bezonas uzi
la frizita krampoj.
Sufiĉas nur indent, por estetikaj kialoj, kaj
tiam skribi vian linio de kodo.
Nur kiam vi volas skribi du linioj de kodo - por
Ekzemple, alie printf ("Bye!"). Se vi volas fari
ke, tiu estas rompita.
Vi povas indent ĉiuj vi volas, sed la fakto, ke vi havas
tajpis du linioj de kodo sen uzi frizita krampoj
signifas ke ĉi tiu programo ne funkcias korekte aŭ forto
eĉ kompili ĝuste.
Do nuntempe, esti honesta, mi kredas ke la plej bona kutimo estas nur
uzi la frizita krampoj, kaj vi trovos, ke ili faras
super klara kio okazas.
>> Ankaŭ, kiel flanken - precipe se vi estas inter tiuj kiuj uzas
la rekomendita libroj aŭ rimedoj linio -
rimarkas ke ekzistas tiu nocio de stilo en
programado.
Kaj iuj homoj efektive preferas meti la frizita streĉa
super tie sur linio.
Kelkaj homoj preferas fari ridindaj aferoj,
kiel meti ilin tie.
Ne malĝusta respondo kiam temas pri
stilo, sed ĉi tiu estas erara.
Sed kelkaj homoj faras.
[Ridado]
DAVID J. Malan: Do mi mencias ĉi nun, simple ĉar kiel
vi legis sur aĵoj en libroj aŭ Interreto, vi ricevos
malsamaj mesaĝojn el diversaj instruistoj kaj
malsamaj aŭtoroj.
Kaj ĝuste rimarkas ke, funkcie, ili estas
ĝenerale ekvivalentaj, sed esti konsekvenca.
Do en ĉi tiu kazo, ni normigi la frizita
krampoj vicatendis ĝis tie maldekstre.
>> Bone.
Do ni iru antaŭen kaj nun kuras ĉi, kaj vidu kio okazas
kun tiu programo.
Faru nonswitch.
Tiam kuris nonswitch.
Donu al mi entjero inter 0 kaj - tiel ke ne estas adekvataj
plu, sed mi simple tuj arbitre diras 42.
Kaj mi prenis la rajton respondo.
Nu nun, ni reale preni ĉi en alia direkto.
Ĝi rezultas ekzistas iu alia sintakso ni
povas uzi en programo.
Jen nova peco de sintakso ke estas funkcie la samaj,
sed gxuste enkondukas alian manieron esprimi nin.
Do ĉi tiu estas kion nomas "switch deklaron." Kaj
ŝaltilo deklaro operacias kiel sekvas.
Ĝi prenas, en krampoj, valoro, ke vi volas
"Switch" on.
Vi volas konduti malsame bazita sur ĝia valoro.
Do tio signifas ŝaltilo sur la valoro de n.
Kaj kion tio signifas?
Nu, se n estas 1 aŭ 2 aŭ 3, iru antaŭen kaj presi "Vi
prenis grandan numeron "kaj tiam rompu.
La kialo de la rompo estas ke la vojo C funkcias estas kiel
Tuj kiam ĝi trovas kazo kiu kongruas, ĝi komencas ekzekutante
ĉiuj kodon ĝin.
Do, se mi havas unu linion de kodo, kiel mi ĉi tie sur linio 27, ĝi
gets ekzekutita.
Se mi aldonas alian linion tie, ĝi prenas ekzekutita.
Alia linio tie, ĝi prenas ekzekutita.
La programo nur detenas ekzekuti kio estas sub la
aplikebla kazo deklaro kiam mi eksplicite
diri "rompi". Do malbone.
Ĝuste, en ĉi tiu kazo, kiel rezulto.
Kazo 4 aŭ 5 aŭ 6, simile, tuj
presi mesaĝon.
En ĉi tiu kazo, meza nombro.
Rompi.
Kazo 7, 8, 9, 10, ĝi tuj presi "Vi prenis grandan
nombro. "Break.
Kaj tiam tie estas laŭvorte ŝlosilvorto nomita "default"
jen efektive kiel la "cetera" konstrui.
Do nova sintakso, sed intelekte,
nenio nova tie.
Estas nur kiel la Scratch.
Se, alie se, alie se, ia bloko.
>> Do tio estas la ŝanĝita versio de tiu programo.
Sed rimarki ke ni faris tion kun la numeroj tie.
Lasu min malfermi duan version, nur por montri
iu iom pli konkreta.
Do jen ni havas kvalifikojn anstataŭe.
Rezultas vi povas uzi ŝaltiloj ne nur sur entjeroj, sed sur
karakteroj.
Ne en ĉiuj tipoj de datumoj, sed almenaŭ en gravuloj.
Do jen, ni povus fari ion kiel se la valoro de C kiu
la uzanto tajpas en, en linio 19, uzante la GetChar funkcio,
estas ĉefurbo A aŭ minuskla a, ni interpretas ĝin kiel grado,
kaj diru ili rimarkis bonega grado.
Kaj malsupren laux la ŝaltilo deklaro, ni havas aliajn
kazoj por "B" s kaj "C" s, ktp.
Sed ni nun ĉirkaŭprenis el unu alia afero.
Kaj ankaux tiaj promenadoj tra
kelkaj el tiuj ekzemploj.
Sed estas vere tiel ke ni povu apliki ilin, nun -
aŭ vere, nur traduki ilin nun -
al C.
>> Do mi faru tion.
Mi tuj malfermi novan dosieron.
Kaj mi tuj faros inkluzivas .
Kaj poste mi iros fari int main (void).
Lasu min savi ĉi tiun dosieron kiel loop.c.
Nur kiel ekzemplo.
Kaj mi tuj faru la sekvajn.
Mi volas skribi tre teda programo.
Do 10.
Ni faras tion.
9.
Bone.
Tuj kiam oni komencas fari tion en programado, vi estas
probable faras ion malbonan.
Sed ni komencu tie ĉiuokaze.
Oops.
Tio estas vere malbone.
7.
6.
5.
4.
Nenio okazos kiam ni atingos 0.
3.
2.
1.
Okay.
0.
Forigu.
>> Bone.
Do reveni 0.
Do tiu programo evidente faros kio tre
tediously diras tuj faros.
Ĝi tuj presi ĉiuj el tiuj
valoroj, de supre ĝis malsupre.
Do mi faru fari banton.
Kaj poste - whoops.
Faru buklo.
Mi estis en la malĝusta dosierujo.
Kaj nun mi kuros buklo.
Eniri.
Woohoo.
Tre bela.
Bela, longa programo.
>> Bone, sed nun ni faros ĉi pli bone.
Ĝuste kiel en Scratch, kiam vi komencis uzi looping
konstrui, anstataux simple kopii kaj bati ĉiuj
enigmo pecoj, lasu min enkonduki tiun aferon.
Do en C, estas diversaj looping konstruas,
unu el kiuj aspektas kiel ĉi tio.
Al "por" loop havas tri aĵoj, apartigita per du punktokomojn.
Kaj poste, ene de la korpo de la ciklo, tiel diri - la
stuff ene de la frizita krampoj -
ni povas fari ion denove kaj denove.
Do kion mi havas tie en la ekrano, ĉi tiu estas
laŭvorte nur komento.
La / / signifas tie venas komenton.
Ĉi tio ne kodon.
Tiu estas ĝuste la angla priskribo, por mi, la homa.
>> Do initializations, kondiĉoj, kaj ĝisdatigoj.
Nu, ni vidos kiel tio funkcias.
Ĉi tiu permesas al mi reverki ĉi tiu programo jene.
Por -
do jen mia loop -
int i -
jen variablo nomata "i" -
gets inicializado al 10.
Do tie estas mia inicialización.
Mi volas fari ĉi buklo tiel longa kiel "i" estas pli granda ol aŭ
egala al 0.
Kaj en ĉiu ripeto de ĉi maŝo, mi volas
fari i -.
Do ni vidis + + lundon.
- Estas la malo.
Ĝi dekrementojn la valoron de 1.
Ene de ĉi maŝo, mi volas vere ion fari.
Do mi intencis diri ion kiel printf.
Mi ne volas diri 10 nun, ĉar ĉi evidente estas nur
tuj presi la saman valoron.
Kion mi volas presi anstataŭ, verŝajne?
Yeah.
Do "mi." Do% d, i.
>> Do mi iros por ŝteli unu el tiuj ideoj de antaŭaj -
ĉi anstataŭo por formato kodoj -
kaj tiam ĉi tie, ĉe la malsupro, mi revenos 0, nur
por bono mezuro.
Sed nun, mi havas pli konciza programo.
Estas nur malmultaj linioj, kaj ne iuj 10 aŭ 11 linioj.
Lasu min iri al mia prompto cxi tie.
Remake buklo.
Rerun buklo.
Kaj aperas esti la sama.
Nun, la programo ne estas pli interesa.
Sed nun mi povas tajpi iun kiel ĉi tio.
Mi povas ŝanĝi ĉi tion al 100.
Mi povas do recompilar mia programo.
Kaj tiam mi povos re-ruli mian programon.
Kaj nun ĝi iras super-rapida sur la hodiaŭa komputiloj.
Sed mi havas -
kaj fakte, mia scrollback buffer ne
eĉ iru nun.
Tie ni iru.
Do ni havas ĉiujn 100.
Sed estas facile fari erarojn tie ĉi.
Kio okazas al esti la atendata konduto, se mi
hazarde fari tion?
Do li sentas kiel senfina.
Do ni vidu se la komputilo kondutas.
>> Do lasu min antaŭeniri kaj fari banton.
Kaj mi kuros buklo.
Do ni revenu al tiu en nur momento.
Ni lasu kiuj kuras.
Ĉar kion ni kalkulu ĝis, minimume?
Probable almenaŭ 2 miliardoj, se ni havas ke multaj bitoj, kaj
ni uzas pozitivajn valorojn.
Do ni saltas reveni ĉi tien.
Krom tiuj specoj de cikloj, ni havas la tiel nomataj dum
maŝojn. Do, ĝuste kiel en Scratch, vi havis Forever
blokoj, kaj vi havis Ripetu blokoj.
Simile, en C, vi simple havas aliajn manierojn
esprimi mem.
Do vi havas ĉi nocio de tempo buklo kiun vi permesas
esprimi sin iom malsame.
Kaj tiam vi havas ion nomita do-dum ciklo,
kiu funkcias iomete malsame kiel bone.
Kaj ni tease tiuj aparte kun la tempo.
>> Sed ni rigardu ĉi lasta tie.
Se ni iras en -
ankoraŭ kurante.
Estas bela malfinio.
Do lasu min iri en pozitiva, kaj montri kiom ni povas reale
regi uzanto enigo iom pli efike.
Ĝi estas bela mallonga programo.
Kaj ĉi tie ni havas, ĉefa, la int n deklaro.
Do donu al mi variablo nomis n. Nun, mi laŭvorte diras
"Fari." Kaj tiam mi havas malferma frizita
streĉa, proksime frizita streĉa.
Kaj poste rimarki, ĝuste post tio, diras dum n
estas malpli ol 1.
Do rimarki, ke tiuj linioj -
19 al 24 -
formi kolektive a do-dum ciklo.
Kaj denove, nova sintakso, ne estas nova ideo.
Estas nur alia maniero de looping, sintakse.
Do kion signifas ĉi fari?
Ĉu la sekva dum n estas malpli ol 1.
Do kion mi volas fari?
Mi postulas ke vi donu al mi pozitiva entjero.
Tiam mi vere provos atingi entjero de la uzanto.
Sed en terminoj de la ordo de operacioj tie, ĉar la
dum kondiĉo estas cxi tie, mi tiam tuj kontroli, estas n
malpli ol 1?
Do supozu, ke la uzanto -
post postulis tiamaniere -
tipoj en la valoron 0.
Ĉi tiu kondiĉo tuj estos vera aŭ falsa?
Nu, ĝi estas vere tuj esti vera.
Ĉar n estas 0, kaj 0 estas malpli ol 1.
Do kion signifas, ke implicas?
Faru ĝin denove.
Nur unufoje tiu kondiĉo taksas al False.
Se mi tajpas en la 42.
Nu ne, 42 ne estas malpli ol 1.
Sekve ĉi tiu buklo estas farita ekzekuti.
Kaj tiel en tiu punkto, la programo diros, gracias por
la 42, en ĉi tiu kazo.
Nun kion vi havas ĉi maniero de esprimi vin mem -
Ni ne devus atendi ĉi fini.
Ĝi tuj prenu iom da tempo.
Daŭrigi venontfoje, eble.
>> Sed nun, vi havas la kapablon espereble kompreni
iom de geek humuro.
Apologies.
Tio ne estas reprezentanto de la humuro en la komputiko
mondo, sed estas bela.
[Rie] Let fino de tiu noto.
Kaj ni vidos vin lunde.
[Aplaŭdo]