[Powered by Google Translate] DAVID J. Malan: Molt bé, aquest és CS50 i és aquesta la
final de la setmana 1, així que les targetes estan en estudi i el nombre total de
companys de classe que té aquest any és de 745.
I estem molt contents de tenir a molts de vostès en el curs
aquest semestre, però tot i aquest curs és tan gran,
adonar-se que es tracta d'aquestes coses com dinars divendres, com
les hores d'oficina, seccions 15-persona, i que així successivament
són realment la intenció de crear aquest més íntim
ambient.
Així que, encara que és possible que es reuneixen una o dues vegades per setmana, aquí a
Sanders, sabem que gran part de la seva experiència en aquest curs
serà molt estar en mans del costat dels seus companys de classe
i el personal docent.
>> Així que aquí anem, Fall 2012.
Així recordar que l'última vegada que va acabar amb una nota de
imprecisió, parlant de la representació dels nombres.
I ens fixem en un dels fracassos que van ocórrer en el
món real, quan es tractava de malentesos
com funcionen els ordinadors.
Bé, avui anem a revisar una altra d'aquestes idees
així com continuar amb la nostra discussió del client CS50
i C, i el que significa realment per programar.
Però en primer lloc, a només un parell d'anuncis remolí.
>> Seccions començarà aquest diumenge, i la primera setmana és sempre un
poc d'un començament ràpid, ja que només es va posar en
els formularis de la secció.
Estem fent el mateix, ara, amb els companys docents, ara
que coneguin els seus horaris, de manera que estem apuntant, per
Dissabte al matí, fer un seguiment amb vostè amb la seva secció
assignació i TF.
Adonar-se que començaran l'endemà, diumenge
o dilluns o dimarts.
I després anem a acomodar canvis de secció a mesura que sorgeixin
en els dies per venir.
Les hores d'oficina, per la seva banda, són, de nou, aquesta nit, 8 PM 11, en
Annenberg, així com demà a la nit.
Tot i que els conjunts de problemes es deuen generalment els dijous
al migdia, s'adona que té un màxim de cinc dies de retard per gastar,
per tant, la disponibilitat d'hores d'oficina dijous si
diners en efectiu en un d'aquests dies de retard i, per tant presentar,
alguna cosa el divendres.
Permetin-me suggerir que Scratch és una de les més divertides, entre els
el joc de claus més baixes problema.
I m'agradaria penjar en aquests dies finals, estratègicament, només
per més tard en el semestre en què la vida comença a posar-se al camí
amb exàmens parcials i altres classes.
Sèrie de problemes 1, per la seva banda, es publicaran en el curs de
Web per aquest divendres, com es veurà en la caminada del curs
a través de vídeo, que serà filmat a les 2:30 PM divendres
i després publicat en línia pel dia següent.
>> Així que vam acabar dilluns.
Vull - en realitat, una nota aquí.
Com que les classes - perquè Sanders no és exactament presten
si al casual Q & A de tornada i volta terriblement bo, estem
intentarà una cosa una mica nou aquest any, en què
si vostè no se sent còmode aixecar la mà o simplement
prefereixen no aixecar la mà en una habitació com aquesta,
tindrem alguns dels companys docents i les entitats emissores
dotació cs50.net/discuss durant la conferència.
Així que si vostè té una pregunta, perquè jo estava completament
clar sobre alguna cosa o tens curiositat sobre alguns
tema, tracti de publicar allà.
Marqueu amb una etiqueta de classe, i farem tot el possible
avui i la setmana que - ens tornarem provar això - per alinear
ja sigui per mitjans electrònics, en línia, o si se sent com que hauria
realment es tractin de forma massiva, un dels companys docents o de
CA aixecar la mà i demanar
anònimament en nom seu.
Així que anem a donar-li una oportunitat i veure el bé que funciona.
Però, és clar, continuar elevant les mans com li agradaria.
>> Així última vegada que va revelar que el 10% o un desè-no és, en
fet, 0,1, com se'ls va ensenyar fa molts anys.
És de fet, un valor com aquest.
Però això no és totalment cert, no?
Només tenim aquesta restricció en els ordinadors de manera que, si
només té una quantitat finita de memòria, RAM, o més
específicament bits, bé, hi ha només un nombre finit
de coses que pot representar.
Per exemple, si tenim el nombre zero, i volem
representen en binari, utilitzant vuit bits, on un bit,
de nou, és un zero o un u, podríem
representar com 00000000.
I això és una mica innecessàriament prolixa.
Igual que en el sistema decimal al món real,
en general, si voleu escriure el nombre 123, es
humans probablement no escric 00000123 tot i que,
funcionalment, que és el mateix nombre exacte.
Acabem de caure zeros a l'esquerra, per així dir-ho.
>> En binari, podem fer el mateix.
Binari i zero, zero i binari és igual a zero.
Vostè només necessita un únic bit.
Però, de nou, la unitat de mesura més comú en el món
de la informàtica és bytes, vuit bits.
El fet que una mica, bastant inútil.
Vuit bits, no terriblement útils, però almenys és més
útil que una única unitat de mesura.
Així que amb vuit bits, en general va a representar binari.
Així que aquí tenim als números zero, un, dos, i després, com
Nate va fer en el vídeo el dimecres passat, podem seguir
comptant fins a set, vuit.
I si fem servir més i més bits, es
pot comptar fins a l'infinit.
Però si només té un nombre finit d'aquests bits, igual que
en el cas de qualsevol sistema informàtic, o fins i tot míssils
sistema, bé, en realitat només té un
quantitat finita de precisió.
Així que si vols per representar el nombre com 0,1, també, la
equip ha d'escollir i triar.
I si només té un nombre finit de nombres que pot
representen, pot acostar fins a 0,1 per tu, però no pot
necessàriament li dóna exactament el paràmetre que voleu.
I aquest és només un dels reptes de les computadores,
sota de la caputxa, per sort.
>> A mesura que avancem més en el semestre, aquests nivell inferior
detalls es tornen molt menys interessant, però el dubte
aplicació d'aquestes idees poden tenir un món molt real
ramificacions.
Un d'ells és una diversió poc.
Quants de vosaltres heu vist la pel · lícula Space Oficina sorprenent?
Si vostè no té, que és el seu no oficial
tasca per a la setmana.
Però en l'espai d'oficina, els becaris en aquesta pel · lícula pren
avantatge d'precisament aquesta idea, però en realitat va robar
des d'una altra pel · lícula que podria tenir
vist, fins i tot anys abans.
Així que et vaig a donar uns segons d'aquest tràiler de
aquesta pel · lícula increïble i aquest és en gran mesura
acadèmicament rellevant.
>> [JOCS DE VÍDEO]
La veritat és que estic sent promoguts.
Puc programar un virus que esquinçarà que
col · locar en gran.
Bé, com funciona?
Cada vegada que hi ha una transacció bancària on l'interès és
computada, hi ha milers al dia, l'equip acaba
amb aquestes fraccions d'un cèntim.
Però jo no faré res il · legal.
Il · legal? Samir, això és Amèrica.
Vostè ha de juro per Déu.
Si ningú sap sobre això, però nosaltres, d'acord? No hi ha membres de la família, sense
núvies, ningú.
[Inaudible].
No et preocupis, home, no l'hi diré a ningú.
[Pel · lícula acaba]
>> Molt bé, així que potser van trobar aquesta pel · lícula millor que la majoria
persones aquí, però, en qualsevol cas, el virus que eren
tractant de crear -
i en les pel · lícules, en qualsevol moment que en diria alguna cosa un virus,
que generalment no és realment un virus.
És simplement un programa que algú va escriure que fer alguna cosa.
I en aquest cas, els nois estaven intentant escriure un programa
que es van aprofitar de la seva empresa anomenada Innotech de
sistema informàtic, mitjançant el qual les computadores, també, fins i tot quan
En relació als diners, no pot necessàriament
representen els diners exacte.
Així que, encara que és possible que tingui 0,10 $ en el seu compte bancari,
0,10, bo, l'equip realment pot pensar que vostè té
aquesta centaus molts en el seu compte bancari.
I així, el que aquests nois estaven aspirant a fer - i
va robar la idea, és de Superman III, on
Richard Pryor va fer el mateix - que eren essencialment
escriure programes que aspiren a prendre tot el final
nombres, totes les diminutes fraccions petites, diminutes de
monedes d'un cèntim, i drenant els fora per tal que els éssers humans només
pensament, oh, és només 0,10 $ allà, però tots els que
números finals eventualment es sumen.
Així que una idea meravellosa i divertida en què va sortir per la culata
pel · lícula en particular.
>> Però en el món real, també, hi ha molt més en relació
implicacions d'aquest tipus de coses.
I una de les raons per submergir-se en el camp de la informàtica
ciència és, de nou, la seva aplicabilitat no a la
ciències d'enginyeria sol, però a només
altres camps també.
Així que aquesta és una mirada menys optimista del que pot sortir malament, però
també és bastant obrir els ulls, em sembla, quan es tracta de
entendre exactament com les tecnologies omnipresents com
ordinadors i la programació o en aquests dies,
en forma de programari.
Així que aquest pròxim clip es tracta només de sis minuts, segueix
on el deixem l'última vegada, però ens permet mirar una mica
més en profunditat a aquests d'aquests temes un.
Deixa passar directament a on el deixem,
que era aquí.
I tenim la segona part de dues, durant uns sis minuts aquí.
>> [PLAY MOVIE]
Ple tecnologia de coets moderns.
El 1991, amb l'inici de la primera guerra del Golf, el Patriot
míssil experimentat el mateix tipus de
el problema número de conversions.
I com a resultat, 20 persones, 20 soldats nord-americans, van morir
i prop de 100 van resultar ferides, quan el Patriot, que se suposava
per protegir contra els Scuds entrants,
no va poder disparar un míssil.
>> Quan Iraq va envair Kuwait i Estats Units va posar en marxa un desert
Storm a principis de 1991, bateries de míssils Patriot van ser
desplegats per protegir Aràbia Saudita i Israel des de l'Iraq
Atacs amb míssils Scud.
El Patriot és un EUA mitjà abast superfície-aire del sistema,
fabricat per l'empresa Raytheon.
La mida dels interceptors Patriot si mateix, es tracta
aproximadament 20 peus de llarg i pesa al voltant de 2.000 lliures.
I porta una ogiva d'uns - Crec que és més o menys
150 lliures.
I el propi cap és un explosiu d'alta potència que té
fragments al seu voltant.
La carcassa del cap de combat està dissenyat per actuar com perdigons.
Els míssils es porten quatre per contenidor i són
transportat per un semi-remolc.
>> El Patriot antimíssils sistema es remunta almenys a
20 anys.
Originalment va ser dissenyat com un míssil de defensa aèria per
enderrocar avions enemics, a la primera Guerra del Golf.
Quan la guerra va arribar, l'exèrcit volia utilitzar-lo per disparar
per Scud, no avions.
La força aèria iraquiana no és tant d'un problema, però l'Exèrcit
Estava preocupat per míssils Scud.
I així van tractar d'actualitzar el Patriot.
Interceptar un míssil enemic que viatja a Mach 5 es va
a ser un repte suficient.
Però quan el Patriot va ser traslladat d'urgència en servei, l'Exèrcit
no era conscient d'una modificació iraquiana que van fer la seva
Scuds gairebé impossible d'assolir.
>> El que passa és que els Scud van ser
arribant eren inestables.
Es trontolla.
La raó d'això era que els iraquians, amb la finalitat d'obtenir 600
quilòmetres fora d'un míssil d'abast de 300 quilòmetres, es
pes de l'ogiva davantera i
va fer la ogiva més lleuger.
Així que ara la Patriot està tractant d'arribar a la Scud, i la majoria de
el temps, l'aclaparadora majoria de les vegades, ho faria
només volar pel Scud.
Quan els operadors del sistema Patriot Patriot va adonar de la
no va aconseguir el seu objectiu, que va detonar la càrrega explosiva Patriot.
Per evitar possibles víctimes, es va permetre
a caure a terra.
Això va ser el que molta gent va veure, com grans boles de foc al cel,
i incomprès com interseccions de ogives Scud.
>> Si bé, en el cel de la nit, Patriotes semblava
Scud va destruir amb èxit, en Dhahran, no podia haver
error sobre el seu acompliment.
Allà, el sistema Patriot radar va perdre la pista d'un
Scud entrant i mai va posar en marxa a causa
a un defecte de programari.
Va ser als israelians que van descobrir per primera vegada que com més temps
el sistema estava en, major és el temps de discrepància es va convertir,
causa d'un rellotge incorporat a l'ordinador del sistema.
Unes dues setmanes abans de la tragèdia en Dhahran, el
Israelians van informar al Departament de Defensa que el
sistema estava perdent el temps.
Després de vuit hores de funcionament, es van adonar que el
sistema va ser que es vegi amb menys precisa.
El Departament de Defensa va respondre dient a tots
les bateries Patriot no abandonar els sistemes
durant molt de temps.
Mai van dir el que un temps va ser - 8 hores, 10
hores, 1.000 hores.
Ningú ho sabia.
>> La bateria Patriot destinat a la caserna de Dhahran
i el rellotge intern defectuós havia estat en més de 100 hores en
La nit del 25 de febrer.
És seguit el temps amb una precisió d'una desena part d'un segon.
Ara desè de la segona és un nombre interessant perquè
que no pot ser expressat en binari, exactament, el que significa
no es pot expressar exactament en qualsevol
ordinador digital moderna.
És difícil de creure.
Però utilitzar això com un exemple.
>> Prenguem el nombre d'un terç.
Una tercera no pot ser expressat en decimal, exactament.
Una tercera part es va en 0,333 per l'infinit.
No hi ha manera de fer això amb una precisió absoluta en decimal.
Aquest és exactament el mateix tipus de problema que va passar a
el Patriot.
Com més temps el sistema va funcionar, pitjor és l'error de temps va arribar a ser.
Després de 100 hores de funcionament, l'error en el temps era només
aproximadament un terç d'un segon.
Però en termes de focalització d'un míssil que viatja a Mach 5,
que va donar lloc a un error de seguiment de més de 600 metres.
Seria un error fatal per als soldats en Dhahran.
>> El que va passar és un llançament de Scud va ser detectat per l'alerta primerenca
satèl · lits i sabien que el Scud venia en el seu
direcció general.
No sabia d'on venia.
Correspon ara al component de radar de la Patriot
sistema, la defensa de Dhahran, per localitzar i fer un seguiment de la
míssil enemic entrant.
El radar era molt intel · ligent.
En realitat es podria seguir la posició de la Scud i després
predir on seria probablement la propera vegada que el
radar envia un pols de sortida.
Això es diu la porta de distància.
Després, una vegada que el Patriot decideix ha passat suficient temps per anar
enrere i comprovar la ubicació per a la pròxima detectada
objecte, torna.
Així que quan vaig tornar al lloc equivocat, llavors no veu
objecte, i decideix que no hi havia cap objecte.
Era una falsa detecció i baixa de la pista.
>> El Scud entrant desaparèixer de la pantalla del radar.
I segons després, es va estavellar contra la caserna. El Scud
va matar a 28 i va ser l'últim acomiadat durant
la primera Guerra del Golf.
Tràgicament, el programari actualitzat va arribar a Dhahran
el dia següent.
I la falla de programari havia fixat, tancant un capítol a
la turbulenta història dels míssils Patriot.
PATRIOT és en realitat un acrònim de "Tracking Phased Array
Intercepció de destinació. "
>> D'acord, de manera que un resultat molt més dolorós de no gaire
la comprensió d'aquest món.
I el menjar per emportar, de veritat, de la pel · lícula és que la solució
no reinicieu des de defensa antimíssils
de tant en tant.
I així, una vegada més, un dels objectius d'aquest curs, sens dubte
en una escala més humil que aquestes aplicacions, és
Tothom realment obert els ulls a exactament com vostè va sobre la
màquines de fer el que vostè vol que facin i com es van
fer això correctament, mentre que en el camí fent
bé, amb elegància, i així successivament.
I així, avui, anem a submergir-nos en una mica més d'això, però
pel que no anem massa ràpid, especialment per als menys
còmoda, sinó també per poder mantenir l'interès dels
els més còmodes, anem a començar ràpidament amb una mica
de resum d'algunes d'aquestes idees.
I de nou, pregunti a distància, tant en persona o en línia, si vostè té
preguntes perquè puguem mantenir a tots en la mateixa pàgina.
>> De manera que l'aparell CS50, pas cap enrere, és
el que, en les seves pròpies paraules?
Està bé si no tens idea del que aquestes paraules poden ser encara.
[Inaudible]
Bé, pel que una interfície universal per -
que tots podem compartir.
Per descomptat.
Així, es podria, per exemple, et dirà que vagis a algun
lloc web, descarregar aquest programari per a Mac OS.
Descarregui aquest programari per a Windows, configurar en
amunt i avall.
Però la realitat és que després ens trobem amb innombrables tècniques
donar suport temes.
I també en aquests dies, gran part del que es fa del costat del servidor,
en el món de la informàtica, especialment quan es tracta
desenvolupament web i aplicacions basades en web, és en realitat
molt sovint es realitza en equips UNIX o Linux, a diferència de
Mac o PC amb Windows.
>> Així que entre els upsides, llavors, de la utilització d'aquesta cosa anomenada el
CS50 Appliance és que tots tindrem el mateix entorn.
Així que tothom està a la mateixa pàgina sense importar el maquinari que
va arribar a l'escola amb però també es incursions en exactament
el mateix entorn que vostè va a utilitzar cap
semestre final, així com per al desenvolupament web, així com en la
futur per a aplicacions reals dels mateixos.
Llavors, més concretament, l'aparell CS50 és una peça lliure de
programari que permet executar un altre sistema operatiu,
Linux, en aquest cas, en el seu propi ordinador, en una finestra.
Ara no només pots descarregar l'aparell.
Vostè necessita un programa amb el qual jugar o córrer l'aparell.
I aquest tros de programari es coneix generalment com un
hipervisor.
Els hipervisores es presenten en forma de productes com VMware,
Virtual Box, Parallels.
Tot tipus d'empreses fan programari lliure i
comercial, per igual.
El que veuràs en el problema 1 set són les instruccions sobre com
obtenir programari gratuït amb el qual
funcionar l'aparell CS50.
I una vegada que ho fa, vostè tindrà, en una finestra del teu Mac o PC,
un entorn d'escriptori que es veu bastant com aquest, on
té un menú d'inici-com a cosa al
inferior esquerra cantonada.
Té una carpeta d'inici, o el directori d'inici, a la part superior esquerra
allà, un pot d'escombraries, i així successivament.
Així que anem a esmicolar els detalls necessaris sobre la marxa.
>> Però ara anem a submergir-vos en C.
Així C és aquest llenguatge de programació, similar en esperit a
Scratch, però molt menys gràfica, però, irònicament, molt
més potent un cop que arribi coneixedors d'aquesta.
Així que en C, escrivim programes d'escriptura de codi font, que és
aquesta sintaxi similar a l'anglès, similar als mitjons
demostració que vam fer l'última vegada que li permet
expressar-se amb força precisió, si
arcanely, a l'ordinador.
>> Llavors, quin tipus de producte de programari és el que realment necessita
per escriure programes en un llenguatge com C, basant-nos en la nostra
conversa dilluns?
[Inaudible]
OK, només necessites un editor de text.
No necessita cap programari especial
per se per escriure programes.
Només es necessita un editor de text com el Bloc de notes de Windows,
TextEdit en Mac, o alguna cosa que es diu gedit, en el món de la
Linux, que utilitzarem aquí.
I això és tot, per escriure els programes.
>> Però l'escriptura és només la meitat de l'equació.
A continuació, executar-les.
Però per executar programes -
no es pot executar el codi font.
En el seu lloc, ha de fer el que a ell primer?
Si.
DAVID J. Malan: Cal
compilar.
I, de l'altra, compilar el codi font significa -
[Inaudible]
DAVID J. Malan: Exactament.
Traduint això a zeros i uns.
Tots nosaltres, en aquests dies, tenen equips que tenen CPU,
gairebé tots els quals estan fets per una companyia anomenada Intel, i
Intel Inside, vol dir que no està dins del seu cervell
ordinador, conegut com la CPU.
I una de les coses que fa que el cervell és, sap
com entendre els patrons de zeros i uns.
Sap el que representa el patró de bits més, el que
patró representa restes, quin model de
bits representen la impressió, i la creació d'un so audible.
>> Així que en resum, la CPU, juntament amb el sistema operatiu,
que és una peça de programari que s'executa en la part superior de la CPU,
per dir-ho.
Juntes, aquestes dues peces saber com executar programes que
nosaltres els humans escriure.
>> Així que si entro al Appliance CS50 aquí, he d'obrir
un editor de text i puc accedir a aquest
en un parell de maneres.
Em pot anar a Menú, Programació,
i llavors puc seleccionar -
No, no aquest menú.
Puc anar a Accessoris / gedit aquí per obrir
meu editor de text petit.
O més simplement, puc fer clic al símbol petit a la part inferior
cantonada esquerra.
I ara em surt aquest ambient aquí.
És molt evocador d'un editor de text simple, amb només
una o dues diferències.
A la part superior, on hi ha el cursor parpellejant, aquí és on
Puc començar a escriure el codi.
En el fons és aquesta cosa anomenada la finestra de terminal.
I quin tipus de coses que puc fer en aquest
l'anomenada finestra de terminal?
[Inaudible]
>> Està bé, així que vaig a executar ordres.
I algunes de les ordres que va córrer el dilluns eren una mica
críptics al principi, però per ls llista, cd canvi de directori, per
rm, per eliminar-lo.
Així que és una mena de camí de la vella escola de navegació de la seva
ordinador, usant només el teclat i els comandaments textuals,
i no, en general, amb el ratolí.
Però anem a veure, en poc temps, aquest fet ens dóna una
poc més de potència i una mica més precisió amb la qual
expressar-nos.
I després aquí a l'esquerra, només veurem,
a mesura que comencem programari d'escriptura, un petit resum de la
programa que hem escrit a la part superior esquerra.
Però anem a veure que de nou en poc temps.
>> Així que farem alguna cosa molt simple aquí.
Permeteu de seguir endavant i anar a Arxiu, Guardar, i estic
farà clic a jharvard aquí, més a l'esquerra, i
jharvard és, de nou, el nom de la meva carpeta d'inici, el meu
arxius personals, jo, ara és John Harvard, com tots vostès
aviat serà John Harvard en aquest entorn.
Ell té aquest directori Inici, Els meus documents i altres,
que vulgueu conservar i, ara, aquest arxiu polz
Així que vaig a dir-hello.c. Llavors em vaig a anar
a continuació i feu clic a Desa, i ara el que tenim aquí és una fitxa
anomenat hello.c, tant com un altre tipus d'editor.
>> Així que ara seguirem endavant i començar a escriure un programa.
int main (void).
I després em vaig fer l'última vegada, printf, per a la impressió formatada,
("Hola, món!"
).
Gairebé completa.
Però em falta un parell de detalls.
El que falta en aquest programa que s'utilitza necessito per
que es compili en realitat?
Si.
[Inaudible]?
>> DAVID J. Malan: Sí, així que he de incloure la norma
I / O biblioteca.
Així que això ha d'anar per sobre de principal, així que només vaig a
fer una mica d'espai per a ella allà.
I jo faré # include.
I notin els parèntesis angulars allà.
I en un apart, gedit és un usuari poc amigable, si
de vegades una mica confús, ja que tracta d'ajudar a la seva
ulls compte del que s'alinea amb què.
Així que el fet que el meu cursor està al costat d'aquest angle
suport, observi com es destaca l'altre angle
suport més un això.
I això és només per cridar la meva atenció sobre el fet que jo
tenen simetria.
I la simetria en la programació és generalment una bona cosa.
De la mateixa manera, si moc el cursor fins al final, observi com el
claus s'alineen per mostrar que, sí, tinc una oberta
i un tancat, per dir-ho.
>> Molt bé, i no puc fer res més.
No és estrictament necessari, però una bona pràctica, per no dir
retorna 0.
I 0 retorn fa el que per a nosaltres aquí?
O vol dir que?
[Inaudible]
DAVID J. Malan: Però no passa res.
I, francament, és difícil per gran part a anar malament en un
programar aquest curt.
Així que només estic sent súper explícit que tot està bé.
Jo, l'ésser humà, quan executo aquest programa, probablement mai ho farà
veure que 0.
En general, aquests nombres que estan sent retornats a partir de principal
només educar els seus caps als éssers humans quan
alguna cosa va malament.
I et donen una mica de pop up d'error del sistema dient: un,
dos, tres, o qualsevol que sigui el nombre que va ser
va ser realment retornat.
Així que res dolent en això?
[Inaudible]
>> DAVID J. Malan: Així que això no és tant un error funcional
però una estètica.
Probablement hauria de posar en un caràcter de nova línia allà al
final d'aquesta cadena perquè realment moure el cursor a
la següent línia, i el programa només es veu una mica més bonic.
>> Així que ara em deixis anar a la meva finestra de terminal
i amplia la
I això d'aquí, es diu el sistema.
Es m'acaba de recordar qui sóc, jharvard @ aparell, on
aparell és el nom de l'equip que estic.
Entre parèntesi figura l'accent, el símbol gargot, que
representa què?
AUDIÈNCIA: directori d'inici.
DAVID J. Malan: directori d'inici.
Així que això és només una notació abreujada per dir que estan en
vostra carpeta on tots els seus arxius d'anar per defecte.
Així que ara, aquí, puc escriure ls per obtenir la llista.
I l'únic que veig aquí en aquest moment és hello.c.
I això és bo, perquè jo acabo d'escriure això.
>> Així que seguirem endavant i em fan hello.
I notin que no estic escrivint fer hello.c.
En el seu lloc, només estic escrivint el nom base del fitxer, hola.
I que, com vam veure el dilluns, només s'infereix que vull
el. c arxiu.
Així que ara que he escrit fer hello.
Ara veig aquesta comanda bastant llarg i continuarà
veient això una i altra vegada.
Però per ser toc clar, la paraula que acaba d'aparèixer,
aquest és el compilador real.
Fer és una utilitat de generació.
És només un programa més fàcil d'utilitzar que em salva, en la
llarg termini, d'haver de escriure increïblement tediós llarg
ordres com aquesta.
Així que es podria executar Clang manualment.
Es podria escriure tot això manualment.
Només es posa molt avorrit.
I així que és només un programa que simplifica les nostres vides i
executa ordres més complexes per a nosaltres.
>> Molt bé, i ara què arxiu he de tenir
en el meu directori actual?
No només hello.c, però també saludar.
Així que si vull córrer hola, recordem que dic dot slash,
on els mitjans de punt entrar a la carpeta actual, allà on
són, a continuació, executeu el programa anomenat hola, i, de fet, ara,
Tinc hello world.
D'acord, qualsevol pregunta sobre el flux de treball o la sintaxi de
el que acabes de fer?
>> Molt bé, així que anem a prendre les coses a un nivell superior de nou.
Així que això va ser decebedor per escriure un programa que només
mai diu hola, món.
Així que el vam canviar, el dilluns, dir hola, David.
És una mica més personal, però igual de dur codificat com el
primera versió.
Així que no és tan convincent.
Però existeix, al carrer, a més de les funcions dubte
impressió, funcions que permeten obtenir informació de l'usuari.
I la manera com ho va fer, l'altre dia, va ser com segueix.
Abans d'imprimir alguna cosa, vaig arribar per primera vegada
alguna cosa de l'usuari.
Així que anem a fer això una altra vegada.
>> Cadena s, on s és només un nom arbitrari, aquí, per un
cadena, és igual a GetString.
Llavors, què va ser GetString?
Òbviament obté una cadena que, basant-se en el seu nom.
Però el que és, més tècnicament?
És una funció.
Així que és una funció que no ve amb C per se.
CS50 personal escriure això.
I així, per utilitzar això, no es pot simplement incloure stdio.h,
També ha d'incloure què?
Si.
Així cs50.h, que és simplement un arxiu que va escriure fa alguns anys.
El instal · lem en l'aparell perquè vostè juntament amb
tots els arxius estàndard.
I així, en aquestes primeres setmanes de la classe, utilitzarem
això només per simplificar el procés de fer molt bàsic
coses com aconseguir entrada de l'usuari.
Perquè, com veurem en un parell de setmanes, l'usuari aconseguir l'entrada en una
llenguatge com C és en realitat sorprenentment complexa,
sobretot perquè no se sap per endavant, en general, com
quantitat de coses que l'usuari va a escriure polz
I quan vostè no sap la quantitat de dades que pot esperar, no
saber la quantitat de memòria per assignar.
I si vostè realment té un usuari de confrontació que està tractant de
per introduir-se al sistema, bloquejar l'equip, bé,
generalment el primer mètode d'atac és, tal com ho vaig fer en
Dilluns, escriviu tota una seqüència llarga de caràcters a l'atzar,
premeu Enter i mireu el trenca.
En general, si es trenca un programa, que fa referència a
una falla de seguretat, potencialment.
Sens dubte ludeix a vostè, el programador, després d'haver fet una
error, però més perillós, que podria haver fet una
error relacionat amb la seguretat i, en general veurem que
així és com màquines estan compromesos fins ara, tant
en el món de la web i dels programes en la
línia d'ordres, així.
>> Està bé.
Així que la cadena s és igual a getString.
Així que ara més concretament, què significa la línia 6 aquí?
Així, la funció de la dreta es posa cadena,
presa quants arguments?
Bé.
Així que res.
Una mica de seny comprovar.
Un argument, de nou, és només una entrada a una funció per alterar
seu comportament per defecte d'alguna manera.
Però en aquest cas, jo no vull alterar
el comportament de GetString.
Jo només volia arribar a una cadena.
Així que vaig posar res en els parèntesis i després vaig posar un
punt i coma demarcació de la final de la línia de codi.
Ara, el signe d'igualtat no significa igual, per se.
Significa assignació, el que significa posar ho aconsegueix
emeses a l'interior del que és just a l'esquerra.
>> Així que a l'esquerra, diem que hem declarat una
cadena anomenat s.
I més específicament, hem assignat la memòria interna de
que posarem els bits que representen una seqüència de
personatges.
Però per ara, hem assignat
o es declara una cadena.
Està bé.
Així que ara, un cop hagis fet això, vull connectar el valor de
s, no el valor de David.
Així que això està malament per què?
Així que això és només, literalment, la s no modificable.
És a dir "hola, s", que no és el que vull.
Així que puc fer això.
El signe de percentatge és un marcador de posició, però ara he de
passar a imprimir un segon argument.
Recordem que els arguments a funcions estan separades per
comes, de manera que el pròxim coma aquí poso després d'això la lletra s.
I en aquest context actual, s és la variable, i printf,
en rebre les dues entrades -
la cadena a la banda esquerra i el nom de la variable s a la dreta -
es podrà connectar a aquest últim en la primera per a nosaltres, i
només imprimir una cadena bé preciós que conté
el que sigui que hem escrit polz
>> Així que anem a provar això.
Seguirà endavant i allunyar la imatge, de nou
al meu finestra de terminal.
Apropar al final aquí.
Torneu a fer hello.
Clang sembla haver estat repetició.
Vaig a escriure. / Hello Intro.
Res sembla estar passant encara, però és en aquesta pantalla
que puc escriure alguna cosa com Nate, Enter, i ara tenim
Hola, Nate.
I puc fer-ho de nou amb Rob, i així successivament.
Així que espero que ara aquest programa es comporta com penso.
>> Ara, no tota amigable per a l'usuari.
No tinc ni idea del que s'esperava de mi.
Així que sens dubte podem netejar això una mica.
Deixa tornar aquí, i en lloc de busseig i
preguntar a l'usuari per a una cadena, permetin-me dir-los explícitament la
usuari el que estic esperant.
Així printf ("Introduïu una cadena:"
);
Així que no hi ha variables aquí.
No hi ha signes de percentatge.
Només la frase en Anglès simple.
Permetin-me ara passar a la final aquí i tornar a executar el meu programa.
Però res sembla haver canviat.
Per què?
He de tornar a compilar.
Així error fàcil de cometre.
Però vostè ha de no només guarda l'arxiu però
tornar a compilar el programa.
I així, si puc tornar a fer funcionar hola, ara Clang executa.
Ara es pot executar. / Hello. I ara veig "Introduïu una cadena:".
Bé.
Ara és una mica més fàcil d'utilitzar.
Nate, Enter, hola, Nate.
>> Bé, ho intentarem de nou i començar a pensar
sobre els casos de cantonada.
Així com en scratch, és recomanable o s'estan
encoratjat en l'especificació de pensar tipus del que podria passar
malament si vostè no anticipa tot el que l'usuari pot fer.
Bugs, per tant, podria ser.
Així que introdueixi una cadena -
Què és un cas extrem en aquesta llista?
Què és un escenari que jo, el programador, que no tingui
previst?
Si.
Bé.
I què si escric en una sèrie com aquesta?
Està bé.
Per tant, encara funciona.
Gramaticalment no té sentit.
Però si més no funciona el programa.
>> Quin és un altre cas de la cantonada?
Una cosa que no esperava.
Sí?
Bé.
Així que podríem fer una mena nombre molt, molt gran.
Així que farem això aquí.
Permetin-me allunyar per un segon, voldria destacar.
No es pot copiar i enganxar aquí.
Està bé.
Així que no es pot copiar i enganxar a la finestra de terminal, així que anem a
simplement simular.
Permetin-me allunyar la imatge, va a embolicar.
No faré això per molt temps, perquè no ho farà
en realitat trencar en aquest programa.
Però podria.
Retorn.
Però no va ser així.
Està bé.
Però és un cas genuí racó.
I l'única raó per la qual es van comportar correctament, de manera que
parlar, és perquè la funció GetString CS50 és en realitat
dissenyat sota el capó, com veurem en un parell de setmanes,
per assignar automàticament RAM més i més, més i més
de memòria del sistema operatiu, quan s'adona, wow,
realment has escrit en alguna cosa bastant llarg.
Ara, això és una mica d'una mentida piadosa.
Si realment va fer una pausa durant una bona estona i em va escriure en
alguna cosa així com 5 mil milions de caràcters en el teclat
aquí, o realment va copiar i enganxar una mica, que molt possiblement
podria fer que el programa es bloquegi.
Només una mica més difícil de simular que amb una finita
quantitat de temps.
>> Quin és un altre cas de la cantonada que vam poder provar?
Sí?
Si.
Així que per què no respons res?
Així que en realitat ha de prendre alguna acció, perquè en cas contrari
el programa va a seure allà parpellejant tot el dia.
Però si sols premeu Enter -
Bé, ara, encara es veu malament.
És que no xocar, però potser ara hi ha una oportunitat per
començar a aplicar un programa més rigorós
que comprova efectivament.
I si la cadena, l'oració, la paraula que jo
escriure en té longitud 0, bé, potser hauria cridar a la
usuari, o li dic o li permet introduir una cadena de nou, de manera que
aconseguim realment el que sembla ser un comportament correcte i no
només la supervisió completa del meu part.
>> Pregunta a l'esquena?
Nombre decimal.
Així que podríem intentar això.
1,10000005.
Sembla que funcionarà realment bé.
I que en realitat s'espera.
Tot i que podria haver escrit aquest nombre hi ha, o un
major nombre anterior, s'adonen que quan estàs escrivint usuari
entrada i estem usant la funció GetString, no
importa si el que estic escrivint es veu com un nombre.
Recordem que d'acord amb ASCII, tot en el seu
teclat té un valor numèric que es pot assignar a un
caràcter, un char.
Així que en aquest cas, tot i que podria escriure un nombre, el
equip pensarà que és, per dir-ho, com una cadena -
una cosa que es veu com un nombre, però és
realitat no és un nombre.
Però això és en realitat una transició perfecta, perquè ara podem
de fet la transició a programes d'escriptura que
utilitzar altres tipus de dades.
>> Així que a més d'usar caràcters, o més bé, a més d'utilitzar cordes,
adonar que tenim altres tipus de dades en C i en
altres idiomes.
Un char, com el seu nom indica, és un personatge únic.
Un flotador és un valor de punt flotant, i això és només una fantasia
manera de dir un nombre real - una cosa que té un decimal
punt en què amb alguns números a l'esquerra i / o dreta.
Un valor int és un enter, que és només un nombre com 123.
I ara el més interessant són coses com doble.
Què vam dir una habitació doble era l'última vegada?
És 64, dreta.
Així que, en general un float és de 32-bit -
pel que és tot aquest temps en la memòria, utilitza 32 zeros i uns a
són la - un doble és literalment el doble, el qual
significa que pot representar grans nombres, o
pot representar nombres més precisos.
Així que vostè pot tenir més números després del punt decimal, però
com l'home va dir en el vídeo, fins i tot una cosa tan simple
conceptualment com 1/3 no pot representar-se amb precisió per un
equip, perquè amb el temps se li acaba de bits, i
per tant, només es pot fer .33333333 tantes vegades, en
el que vostè acaba de dir que m'he quedat sense representació
espai, he de trucar a només un dia i representar
una mica imprecisa així.
I molt de temps -
nom estúpid, però és perquè hi ha un tipus de dades coneguda com
long en C que casualment és sovint 32 bits, igual que un
int és de 32 bits, però és un temps llarg
general 64 bits.
Per tant, només significa que vostè pot representar més
nombres que això.
>> Està bé.
Així que si realment vols començar representant les coses,
podria necessitar més tipus sofisticats, i
és per això que comptem amb cadena.
Així, a la biblioteca CS50, aquest arxiu anomenat cs50.h, hem
en realitat va declarar un tipus de dades, per així dir-ho, anomenada cadena,
però string en realitat no existeix.
Això és, una vegada més, una d'aquestes capes que anem a pelar
de nou en una setmana o dues i llençar a les escombraries, i de fet
mirar sota el capó al que en realitat és una cadena, i
com està representada.
També veurem valors booleans.
>> Llavors, què era un bool en el context de Scratch?
És cert o fals.
Així que és un valor que és vertader o fals, encès o apagat, 1 o
0, però vol veure el món.
Així que en C, gràcies a la biblioteca CS50, que al seu torn
inclou una altra biblioteca sota la caputxa, tenim
l'accés a un tipus de dades que es diu bool, que es
literalment ens permet assignar els valors true o false per
les coses en un programa.
>> Així que seguirem endavant aquí i escriure un petit programa que
fa alguna cosa relacionada amb nombres.
Així que permetin-me tornar al Dispositiu CS50, deixa seguir endavant i
crear un nou arxiu anomenat aquí -
direm alguna cosa simple, com math.c.
Està bé.
I ara puja a la part superior del meu programa, estic
farà l'habitual -
# Include, així que puc utilitzar
printf, int main (void) -
tornarem, amb el temps, el que significa int
aquí, el buit significa aquí, però per ara, només sé que
vostè ha de començar programes com aquest.
Ara vaig a seguir endavant i dir alguna cosa una mica
diferent - printf ("Dóna'm un nombre:"
).
Llavors em vaig a fer int n = getInt, perquè
Resulta getInt és una altra funció a la biblioteca CS50
més GetString.
I ara me'n vaig a fer alguna cosa estúpid, com "gràcies
per al% d ", per al nombre enter decimal, i després coma n, i
a continuació, retorna 0.
Així que de nou, torna 0 no té res a veure amb el nombre que estic
preguntar a l'usuari.
Només vol dir que al final de tot, presumiblement, és així.
>> Així que permetin-me anar a la meva finestra de terminal aquí.
Deixa escriure make matemàtiques, introdueixi.
I alguna cosa està malament.
Fer les matemàtiques no va funcionar.
Aquest és el primer dels nostres missatges d'error.
Per què?
Un críptic mica, però -
Si.
Així cs50.h.
Així que de nou, especialment al principi, podràs escriure el teu primer
programa conjunt de processadors 1 en seccions, en hores d'oficina, i
francament, serà aclaparador de vegades el que aquestes coses
en realitat estan dient.
Però t'adonaràs molt aviat comencen a caure
en les galledes mitjançant el qual aquest vol dir que vostè ha deixat una
de la # inclou a la part superior de l'arxiu.
I Clang, el compilador, se l'informa d'això per
dir, en lloc imaginari, la declaració implícita de
getint funció no és vàlid.
>> Està bé.
Llavors, què significa això?
Només vol dir que vostè ha declarat implícitament en getInt
el sentit que no s'ha declarat explícitament.
Per declarar explícitament int, cal ensenyar
Clang que existeix.
I la solució molt simple per això és per ensenyar per
incloent aquest altre arxiu, cs50.h, en
la part superior del seu arxiu.
Perquè literalment, el que fa és # include li diu Clang
més o menys per anar a buscar l'arxiu anomenat cs50.h, copiar,
enganxar-lo automàticament a la part superior del meu programa per mi,
i després convertir el codi font en zeros i uns.
Però això, òbviament, seria molt avorrit si nosaltres, els humans tenien
per anar copiant i enganxant aquests arxius grans tot el temps,
# Include només fa tot de forma automàtica sense
enterbolir el meu codi amb una altra persona biblioteca.
I una biblioteca és més que un altre arxiu que conté les funcions i
altres coses que algú ha escrit, que som
aprofitar per al nostre propi bé.
>> Està bé.
Anem a intentar-ho de nou.
Fer matemàtiques.
Retorn.
Bé.
Així que sembla haver funcionat.
Així que permetin-me ara funcionen les matemàtiques,. / Matemàtiques.
Introduïu em dóna un nombre, 123.
Gràcies pel 123.
Ara anem a provar amb un altre cas de la cantonada.
Una cadena és bastant generós, ja que un
cadena pot ser qualsevol cosa.
Pot semblar que els números, sembla
personatges, semblen paraules.
Però un int és un enter.
Així que ara si sóc l'usuari difícil, i diu "Dóna'm
un nombre ", el que si intento fer alguna cosa com 0,1?
Bé, això és un nombre, i és consistent amb la
gramàtica que s'utilitza aquí, però per sota de la caputxa, estic d'
curs usant el getInt funció.
>> Així que anem a veure què passa.
Intro, torni a intentar-ho.
Està bé.
Vaig a ser difícil i simplement premeu Enter.
Enter, Intro.
Així que ara sembla que getInt és una mica més
poderós que GetString.
Nosaltres, el personal, implementat de manera que si s'observa
no ens ha donat un enter - i un int és un nombre decimal
contenen zeros, uns, dos, tres, quatre, cinc, sisos,
barlets, vuits, o nous.
I això és tot.
No hi ha punts decimals, ni personatges, ni signes de puntuació.
Sembla que hem de cooperar.
Així que tractaré de quatre, cinc, sis, i això m'ajuda a passar.
Així que en realitat, per ser anal aquí, probablement hauria de dir "Dóna'm
un nombre sencer "per tal de transmetre a l'usuari
exactament el que pretenc.
>> Ara anem a pensar sota la campana.
No anem a veure com s'implementa cs50.h avui,
que biblioteca.
Però si se segueix dient reintentar, reintentar, reintentar, el que la programació
construir estic fent servir presumiblement per sota de la campana
implementar això?
Així que només un bucle, oi?
Una de les idees més senzilles que hem vist en Scratch.
The Forever construir, construir la repetició.
És de suposar que, en aquest programa, per sota de la campana, fins i tot
tot i que està escrit en C i no zero, que està fent
una cosa que es diu equivalent a sempre si l'usuari no té
escriure en un nombre sencer, per exemple reintentar, reintentar, reintentar, reintentar, de manera que
finalment, quan ho fem arribar un sencer, llavors
sortir d'aquest bucle.
>> Llavors, ¿quines altres funcions poden usem aquí a la biblioteca del CS50?
Bé, una mica de les òbvies, si més no sobre la base de la
Tipus de dades que ara sabem que existeixen.
Implementem GetString, getInt, sinó a tot el
primeres setmanes del terme, també es pot utilitzar GetFloat i
GetDouble i GetLongLong amb la finalitat d'obtenir exactament els
Tipus de dades que desitgi.
Com que el detall clau aquí és que a diferència d'altres idiomes,
com Python i Ruby, en el qual no necessàriament han de
declarar el tipus de dades d'una variable -
vostè no ha de dir-li a l'ordinador quin tipus de coses
et posaràs en la variable -
al carrer, vostè ha de ser sempre tan precisa.
Així que si vols una variable anomenada n, un tros d'emmagatzematge
que en aquest cas passa a ser de 32 bits per convenció,
ha de dir-li a l'ordinador que aquests bits són
va a emmagatzemar un nombre -
No és un personatge, no una cadena, no un flotador.
I això es refereix a la qüestió que efectivament
vaig trobar la setmana passada.
Si estem usant zeros i números d'éssers per representar no només
nombres, però A i B i C, com en el món és un
equip sabrà que aquest patró de bits en realitat
representa el nombre 65, en lloc de representar el
lletra A, que casualment, segons
ASCII, recordo, era equivalent a 65?
>> Així que aquests tipus de dades proporcionen un context per a l'equip, per la qual
que se sap si aquests bits s'ha d'interpretar com una
int o com una cadena.
Qualsevol pregunta, llavors, a això?
Sí?
DAVID J. Malan: Bona pregunta.
Si traiem stdio.h, guardem l'arxiu -
m'ho dius a mi anar a la finestra de terminal i executeu make matemàtiques, zoom
i entrar -
ara em surt un error diferent, perquè sóc implícitament
declarant quina és la funció ara?
Printf.
Així que ara he creat un nou problema, la solució és
essencialment el mateix.
He de posar això de tornada.
AUDIÈNCIA: [inaudible]
DAVID J. Malan: Oh.
Així que si sac -
Bé, sí.
Així que si em trec la inclusió de l'E / S de la biblioteca fins
aquí, i llavors estàs dient que si em desfaig de printf, obtenir
desfer-se de printf?
Sí
Això hauria de funcionar, perquè ja no estic fent servir qualsevol - crits.
¿Acabo de mentir?
Oh, està bé.
Això no funcionarà a causa d'un nou error que acaba de presentar.
I aquest és una mica més fàcils d'entendre.
>> Quin és el problema?
Sense utilitzar la variable núm.
Així que aquest error és el resultat d'haver configurat el
aparell a ser particularment pedant, cridar realment en
per tots els errors possibles, fins i tot si és una espècie de
un error no fatal com això - és realment tan gran
tractar que em van assignar un int, posar un nombre en ell, i després
acabo de fer res amb ell?
Així que funcionalment, no.
Això no va a trencar el programa.
És només una mica estúpid, oi?
No hi ha valor per haver demanat aquest número, emmagatzemats
en una variable, si mai farem res
amb ella, ja sigui imprimir o guardar.
Així doncs, en aquest cas, Clang està reconeixent com a molt, i
que està dient sense usar la variable núm.
>> Així que podem arreglar això, si realment volem.
Però de nou, això no és una bona programació ara.
Així que només podia fer això -
baixar aquí, deixa netejar la pantalla, fer matemàtiques.
Això funciona.
Ara puc executar el meu programa de matemàtiques, presa d'entrada -
bé, això era dolent.
Presa d'entrada, i que és tot el que fa, en aquest cas.
>> Així que en realitat, anem a provar un cas, una altra cantonada que
no va pensar abans.
En aquest cas - aquí, anem a tornar a la que és una
poc més fàcil d'utilitzar.
Deixa tornar aquí i fer funcionar de nou les matemàtiques.
Vaja, què vaig fer malament?
He de fer retrocedir encara més.
Bé.
Ara estem de tornada en l'estat original, on tots
és d'esperar també.
I ara si em quedo matemàtiques, 123 sembla funcionar.
Però això no és realment una prova eficaç, per dir només
bé, això funciona.
789, que funciona.
És hora de presentar.
Perquè hi ha altres casos de cantonada aquí.
Una cadena que realment no ens donen molts problemes en escriure un
gran quantitat de personatges.
Però, i si escric en això?
Donar al número 1 de molt, molt aquí -
bé, s'està fent una mica avorrit, així que vaig a
parar aquí, i vaig a pressionar Enter.
>> Què dimonis ha passat?
Així que en realitat això pot ser explicat.
Així que s'ho pren com binari?
Un bon pensament, però no, no és el fet que es va prendre
com binari, perquè en realitat, això era només una mena de
coincidència.
Podem fer això una altra vegada.
Així que no hi ha 2 al sistema binari, que és
probablement suficient de totes maneres.
Retorn.
Així que aquest no era el problema.
Què més?
Exactament.
>> Així de pensar en tornar al que realment és un int.
És 32 bits que col · lectivament s'interpreten
com un nombre.
Si té 32 bits, que significa que cada un dels bits pot ser
un 0 o un 1, 0 o un 1.
Així que això vol dir que hi ha dues possibilitats per aquest bit,
dues possibilitats per això, dues possibilitats per a aquesta
bit - pel que és 2 vegades 2 vegades -
de manera que és 2 a la potència 32 és el nombre total de
permutacions de zeros i uns, si vostè té 32
marcadors de posició, zeros o uns, al davant de vostè.
Així que si tinc 2 a la 32, matemàticament, que és el que?
Així que és molt.
Són les 4 milions de dòlars, més o menys.
I 4 mil milions no sembla ser el que va ser imprès aquí.
De fet, això es veu més prop de 2 milions de dòlars.
Però això no és una coincidència.
El fet que l'ordinador s'ha malinterpretat el meu número enorme,
meu enorme seqüència d'uns i llavors el meu gran seqüència de dos en dos,
ja que al voltant de 2 mil milions, s'explica com?
Hi ha un límit en el int.
Hi ha un sens dubte un valor màxim que es pot representar.
Però en general és 4 mil milions, no?
Si 2 a la 32 és aproximadament 4 mil milions, que sembla
que és el major nombre.
Així que no és un residu, sinó un bon pensament.
Els nombres negatius.
Així que si vostè té 4000000000 les coses possibles que pot
representar amb aquestes diverses permutacions de 32 0 i
1s, bé, és lògic pensar que els éssers humans pot ser que vulgui
representar no només nombres enters positius
però sencers negatius.
I de fet, aquesta és la suposició que C fa.
Així que amb 32 bits, pot representar aproximadament 2 negatiu
milions de tot el camí fins positiu 2000000000.
I així, en aquest cas, el que realment estem veient és només
al marge de la capacitat del nostre sencer, i tenim, per la qual cosa
per parlar, es va desbordar un nombre enter.
Hem tractat de ficar més bits en el que realment pot encaixar.
Així, el resultat final és que tenen essencialment les 1 bits.
Hem voltejat totes les nostres bits en, hem tractat de representar
el major nombre possible, però és evident que no és gairebé
prou gran com per representar les dues coses que acabo escrit polz
Sí?
AUDIÈNCIA: [inaudible]
>> DAVID J. Malan: Bona pregunta.
Per què no podem simplement representa que negatiu
com s'acaba de signar un personatge?
Així que és absolutament possible, i llavors podríem estalviar
un bit addicional.
No obstant això, vostè encara haurà de representar aquest guió, i
que et costarà almenys alguna cosa,
presumiblement una mica.
Així que sí, podríem tenir 32 bits que s'utilitzen per obtenir el nombre, però ara
necessitem una mica utilitzat per al nostre guió
símbol, el signe menys.
Així que ara tenim 33 valors de bit, el que podem fer, però és
No de la manera que es fa.
Vam fer una sentència de trucada fa anys, 32 bits és una espècie de
unitat de mesura aquí.
Així que farem servir un d'aquests bits amb eficàcia a
representa la negativitat, i 31 bits per representar el nombre.
Altres preguntes?
Està bé.
Això és molt.
Per què no seguir endavant i prendre els nostres cinc minuts de descans aquí?
>> Està bé.
Així que de nou, no posar massa èmfasi en les aplicacions matemàtiques
de la programació, anem a arrencar aquest exemple
abans de passar a altres construccions, només perquè
s'il · lustren alguns punts de ensopegada comuns en alguns
els conceptes bàsics a l'hora d'escriure programes.
En aquest cas, fent expressions aritmètiques que tenen algun
rellevància interessant a la sintaxi.
>> Així que això és només una fórmula amb la qual podem convertir
temperatura de Fahrenheit a Celsius.
Si no recorda, això és només la fórmula.
Així que si ho connectem a Fahrenheit valor de 32 graus, que és
congelació, que serà 32 menys 32 és 0, i de fet,
0 en graus Celsius és també la congelació.
Així seny registre ràpid allà - aquesta és la fórmula familiar.
Permetin-me passar a l'aparell, però, i començar
escriure un programa que es diu, com, F2C, "Fahrenheit a
Celsius punt c ".
I a la part superior aquí, vaig a començar amb # include
stdio.h, i jo vaig a fer int main (void), i
de nou, tornarem al futur pel que fa al int significa
allà i el buit significa que hi ha.
I ara m'ho dius a mi seguir endavant i posar en pràctica un programa que
bàsicament fa aquesta conversió per a nosaltres.
>> Així printf, diguem, la temperatura en graus Fahrenheit.
I després em deixa seguir endavant i obtenir el valor per a l'usuari.
Quin tipus de valor hauria d'obtenir dels usuaris, si vull
que em donessin una temperatura a Fahrenheit?
Sí?
Què et proposes?
Si.
Així flotador se sent bastant raonable.
Tenim, de nou, només algunes opcions que
que hem vist fins ara.
Tenim coses com char, float doble, int, long long,
bool, string.
Així que d'aquests, el flotador se sent bastant raonable.
Ens vindria bé un dret doble, perquè, si de veritat volem
representen la temperatura d'un ésser humà -
98,60000 -
podríem utilitzar 64 bits per fer això, però se sent com
exageració per a la temperatura.
Així que anirem amb flotador.
Ara necessito una variable.
Només per no complicar les coses, vaig a dir-f, però
bé podria anomenar correctament la temperatura,
però tampoc està bé.
Així float f = GetFloat.
Així que ara ha decidit utilitzar GetFloat, però, em
necessita fer una correcció.
Si.
Així que hem d'incloure # , en cas contrari el compilador
va a cridar a nosaltres.
Ara que tinc un flotador, deixa anar endavant i fer el
conversió.
>> Així que primer, permetin-me entrar en l'hàbit d'aquí
comentant el meu codi.
Així que de nou, un comentari és només una notació per a l'ésser humà que és
no formen part del programa en si, però un, que ajuda
entendre el que va fer l'endemà, ni el següent
mesos, ajuda al seu company d'ensenyament entendre el que vas fer
o el que pretenia fer, pel que és
pràctica general molt bo.
Cada poques línies de codi, escriu un comentari a
vostè o el seu company.
Així que aquí, vaig a dir: "Demana a l'usuari per a la temperatura."
No ha de ser una frase completa, només una frase curta.
Però la idea darrere comentant en C és que cada un dels seus
observacions en cas que l'autonomia - o, diguem, un TF o un col · lega -
a fregar el seu programa i saber exactament el que fa, no per
tant la lectura del codi, però en llegir els comentaris que,
ha de ser breu i clar.
Molt bé, així que ara vull seguir endavant i dir, "Convert
Fahrenheit a Celsius. "Així que vaig a seguir endavant i fer-ho,
diguem, surar c.
Seguirem Celsius com un valor de punt flotant.
>> I m'ho dius a mi prendre una punyalada en això.
La fórmula és, de nou, fins aquí.
Com 09/05 vegades menys F 32.
Així que anem a fer això.
Així que 5 dividit per 9, menys -
Vaja, m'ho va arruïnar tot ja.
Times.
Així que 05/09 vegades menys F 32.
Així F menys 32, punt i coma.
I ara, aquí, vaig a seguir endavant
i dir, imprimir resultat.
I aquesta part és fàcil. Printf.
Com puc imprimir això?
Bé, podria dir: "Aquest nombre en graus Celsius és% f \ n",
només per alguns estètica.
I llavors, quin valor és el que vull connectar aquí com de printf
El segon argument?
Bé.
Així que c.
Així que anem a començar amb això i després simplement tornar 0.
Un cop més, no té res a veure amb les matemàtiques.
Només vol dir que tot està bé.
>> Ara, és això correcte, aquest programa?
Està bé.
Així que he comès alguns errors.
Encara que no té idea del que és la programació, pot ordenar
de tornada a l'escola primària inferir el que la
errors aquí podria ser.
Quin és un dels primers?
AUDIÈNCIA: [inaudible]
DAVID J. Malan: Si.
Així que ens falta parèntesi.
Va ser deliberat que vaig fer parèntesi en la keynote
llisqui aquí, perquè no hi ha en realitat aquesta noció d'ordre
de les operacions, o precedència, en què certes operacions -
multiplicació -
tenen una major unió, tenen major prioritat, que les coses
com a suma o resta.
Per això hem fet això durant anys només per deixar en clar exactament
quina operació matemàtica s'ha de fer primer.
Així que probablement hauria d'imitar exactament això.
En cas contrari, l'equip està probablement va a tractar de fer
una mena dividir 5 per 9, i després multiplicar F, després restar
32 de tot l'assumpte.
La qual cosa no és, de fet, el que volem fer.
Així que anem a posar entre parèntesi.
Anem a afegir meus parèntesi aquí, parèntesi aquí.
Anem a posar això aquí.
Aquí, em vaig adonar d'un altre error que vaig cometre en el camí.
Sí?
AUDIÈNCIA: [inaudible]
>> DAVID J. Malan: Ah.
Bé.
Així que en realitat tenen el mateix nombre enter
divisió qüestió d'abans.
Puc corregir això, anem a veure el que el símptoma és.
Però haurem de corregir una
un altre error aquí.
Sí?
AUDIÈNCIA: [inaudible]
DAVID J. Malan: Si.
Per tant, l'error estúpid que vaig fer, però increïblement important.
L'equip no es convertirà només els ulls grossos i deixar que
usarme F capital, quan en realitat declarat la variable
com una f minúscula aquí, en la línia 8.
Així que he de corregir al meu línia 11 capitalització, que un
moments abans era una F majúscula per error.
Què passa aquí?
Si això no fos així en minúscules?
Ha de ser, sinó que és una coincidència.
Això% f no té res a veure amb la variable.
Així que per ser super clar aquí, deixa seguir endavant i
canviar el nom d'aquest, en poques paraules, "temperatura". Deixeu-me canviar el nom de
aquesta "temperatura". No deixis que em canviï el nom d'aquesta.
Perquè, de nou, f% a nivell mundial significa, "flotant valor en punts."
No té res a veure amb la meva variable.
No obstant això, "temperatura" per tot el lloc és una mica prolix,
així que vaig a tornar al meu minúscula "f" s.
>> Ara, deixa anar per davant fins la meva finestra aquí.
Fer F2C -
que va ser, de nou, el nom arbitrari I
va donar a aquesta imatge.
Sembla que ha compilat.
Deixa córrer F2C.
Retorn.
La temperatura a Fahrenheit - farem fàcil.
32.
OK, corregir-los.
Però, si ara faig 212 per bullir -
maleït.
Està bé.
Per tant, clarament no corregir, si el TF intenta
almenys dos valors.
Llavors, quin és el problema aquí?
Bé, ia posar el dit a quin és el problema.
Però per què és així?
Fins aquí, quan estic fent la matemàtiques de 5 dividit per 9.
Llavors, conceptualment, és perfectament correcte.
Totalment coherent amb la fórmula.
Però els ordinadors només fan precisament el que
els diuen que facin.
I el que estem dient l'ordinador efectivament aquí és
dividir el sencer de 5 pel nombre enter 9
i em dóna el resultat.
El problema és, però, quan s'utilitza la divisió de dades
tipus, la sortida és el mateix tipus de dades que les entrades.
I així, si les dues entrades són alhora INT, la sortida es va
a ser un int.
I així que 5 dividit per 9 és alguna cosa punt.
Però quin és el nombre enter més proper al punt alguna cosa?
Per tant, en realitat és 0.
Així com discutim el dilluns, després de tot el decimal
punt queda truncada.
Només es llença.
Així que això és un greu error, perquè pot ser que també acaba de
multipliquem tot per 0 aquí.
>> Ara, puc arreglar això en un parell de maneres.
Jo podria fer això.
5,0 dividit per 9,0.
Tècnicament, no tens necessitat de fer això.
Això és suficient perquè només un dels números d'un flotador -
o doble - en posar el punt decimal aquí.
Perquè el que passa ara és quan es divideix un enter
un flotador, o un doble, l'equip donarà compte
oh, un d'ells és més precís.
Permetin-me errar pel costat de donar-li més precisió que
vostè pretén.
Així que convertirà el resultat -
tornarà el resultat com un valor de coma flotant també.
Així que anava a funcionar.
Això funcionaria.
I no hi ha cap diferent que veurem en
més detall la setmana.
En realitat es pot, ja que el programador, dir-li a l'ordinador
per tractar realment un tipus de dades com
si fos un altre.
>> Així que jo podia fer això.
Entre parèntesi, puc dir alguna cosa com (float), obert
Parin, parin prop.
I això és el que s'anomena "càsting". Una vegada més, més
en aquesta setmana.
Però això és només la forma programàtica de comptar
l'ordinador, sí que sé 9 és un nombre enter o una llarga.
Jo sé que no és un valor de coma flotant.
Però tractar com a tal de totes maneres.
Així que per convertir un tipus de dades significa convertir
d'una a l'altra.
Francament, això és només una mica lleig, així que em proposo anar
donar suport al suggeriment original de només convertir
aquestes coses a valors de punt flotant de forma manual.
Per ara és només súper clar el que està passant, i
no és tot el que distreu.
>> Així que ara anem a anar de nou a la meva finestra de terminal.
Fer F2C.
Deixin-me seguir endavant i executar aquest.
I, en un apart, t'avorreixes escrivint aquestes comandes
una i altra vegada, s'adonen que les computadores, com Linux aquí,
tendeixen a ser bastant intel · ligent.
I si cop cap amunt, podem anar a través de la meva història sencera de
comandaments, amunt i avall.
Així que en aquest cas aquí, puc anar fins a executar make F2C.
Estic sent cridat, perquè jo només vaig fer fa un segon.
Ja està actualitzat.
Així que ara puc córrer F2C nou.
Tractarem de 32 graus Fahrenheit.
Ara anem a tractar de 212 graus Fahrenheit.
>> Phew.
Sembla que funciona.
Ara, això és bo, però se sent una mica arbitrari que
Estic mostrant sis números després dels punts decimals.
¿És cert?
Si vostè és la persona el temps a TV, ets una espècie de doofus
si estàs llegint la temperatura a
aquest grau de precisió.
Així que anem a simplificar això.
Així que en realitat van per aquí, al meu printf.
I sí, vull surar.
Però vull precisar ara la precisió.
I jo seré una mica breu.
Jo vaig a dir, dóna'm un punt després del punt decimal.
Així que en lloc de dir f%, jo diré% .1 f.
I això només significa dóna'm una posició
després del punt decimal.
Està bé.
Anem a intentar-ho de nou.
Permetin-me repetir l'execució després de compilar.
I ara escric a 32 anys, i que torni a
més succinta valor.
I puc escriure, ara, 212, i tornar a una més succinta
valor també.
I hi ha altres coses que pots fer amb printf.
En realitat es pot especificar l'ample de la quantitat que hauria de ser.
Si vostè vol tenir encoixinat-hi, perquè pugui alinear a la dreta o
esquerra alinear tots els nombres o
tractar de centrar les coses.
Així que adonar-se que hi ha petits trucs que es poden fer.
Però només es redueixen als codis de format,
com el que tenim allà.
>> Així que en termes d'aquesta qüestió de precedència.
Aquesta és una taula molt avorrit anar a través metòdicament.
Però adonar-se que els autors de C han arribat a la
regles que especifiquen que els operadors tenen una major
prioritat, més poder vinculant, que altres.
Així, mentre que a l'escola primària, en general sabia que era
multiplicació i divisió, després suma i resta,
llavors algunes altres coses.
En un món de la programació, hi ha un gran
ia llista de les coses.
I això no és una cosa que val la pena memoritzar ara.
Vas a aclimatar-se a ella abans de temps.
Però igual que a l'escola primària, generalment entre parèntesi resoldre
les qüestions de prioritat, fent la súper clara a la
ordinador i humans per igual el que es pretén.
Així que consideri això una mica costella allà.
Però la majoria d'aquests detalls que no s'arriba a un temps.
>> Està bé.
Ara, anem a construir i allunyar d'aquests poc ximple
exemples matemàtics.
Seguiu utilitzant els mateixos fonaments, però el començament
expressar una mica més com Scratch.
Així que en Scratch, teníem aquestes expressions booleanes.
I en anglès, una expressió booleana és el que?
Veritable o fals.
És una cosa que s'avalua com a veritable o falsa.
1 o 0.
Activat o desactivat.
El que sigui que vulguis dir.
Ara en Scratch, les peces del trencaclosques es veia així.
I aquesta és la combinació, en la part inferior hi ha, de tres
peces d'un trencaclosques.
Una conjunció -
una cosa que té en blanc i en blanc.
I després dues expressions booleanes dins d'ella.
Així que vostè pot niar booleana per obtenir més
complicades expressions booleanes.
Per exemple, si és dissabte, i és agradable
temps, i després sortir al carrer.
O alguna cosa arbitrari així.
Així que vostè pot unir-se a expressions booleanes per arribar a un
major valor de la veritat, la resposta es basa
en els més petits.
>> Ara, en C, per sort, aquesta assignació és
en realitat bastant simple.
Els parèntesis ajudar a aclarir les coses aquí.
&& És el que significa "i". Així és com
anem a convertir aquests blocs de Scratch per C.
I per les condicions que vam veure en Scratch, a la mà esquerra
banda allà, es poden apilar de manera similar a C. Si x és menor
que i, a continuació, fer això.
Perquè si x és més gran que i, a continuació, fer això.
Altres vendes lògicament han de ser iguals, pel que diuen
que són iguals.
Així que ara podem començar a construir aquestes coses.
>> Així que farem un exemple.
Permetin-me obrir un arxiu que està a la pàgina web de l'assignatura que
Jo vaig escriure amb antelació.
Això es diu nonswitch.c.
I veurem per què en un moment.
Així que en aquest arxiu - nonswitch.c--
compte per primera vegada que hi ha un munt de
comentaris a la part superior.
Això és només explicar el nom del fitxer, el que
fa, i així successivament.
I, pel que sembla, es mostra l'ús dels operadors booleans AND-ing -
conjugar dues expressions.
>> Així que anem a veure com funciona aquest programa.
Incloc meus dos arxius, cs50.h i stdio.h.
Si desplaceu-vos cap avall, ara, per al programa, que és una mica més llarg
del que hem escrit abans, però bastant llegible.
Així que primer imprimeix a l'usuari, en la línia 18,
"Dóna'm un nombre enter entre 1 i 10." Tan
que està just aquí.
Ara tinc el sencer.
Però adonar-se que getInt - bastant simple.
És només va a aconseguir un int.
Això va a assegurar-se que rep un int i no un
cadena o un flotador.
No va fer cap tipus de comprovació de límits.
No va a filtrar els números a ser entre un
cert rang.
Així que hem de posar en pràctica que nosaltres mateixos.
Així com en Scratch, on podria fer una conjunció de
dues expressions, puc fer això en C com segueix.
Si n és més gran que o igual a 1, i n és menor que i
o igual a 3, vaig a molt arbitràriament decret que
nombre a ser un nombre petit.
Només pel bé d'un comunicat.
Perquè si n és entre 4 i 6, print "Vostè va escollir 1/2
nombre. "Si no, si n és entre 7 i 10, escriviu" escollit vostè un
nombre gran. "Else print" Vostè tria un nombre no vàlid ".
Perquè, lògicament, que segueix si hem
esgotat la nostra gamma.
>> Així que adonar-se'n no és del tot com escrivim major o
igual en una classe de matemàtiques.
¿És cert?
En general, dibuixar així, amb la línia sota d'ella.
Però no hi ha tal clau en el meu teclat.
Per tant el símbol en C per expressar major o
és igual a dos personatges, i el símbol de menys de
o és igual a dos personatges també.
Està bé.
Així que si executa aquest programa, que és fàcil endevinar el que és
farem.
Si torno a anar endavant i fer nonswitch, Enter.
I a continuació, executeu nonswitch.
Dóna'm un nombre entre 1 i 10.
Jo vaig a donar 11.
Vaig triar un nombre no vàlid.
Vaig a tractar el número 3.
Vaig triar un nombre petit.
Així que hi ha bastant senzill.
>> Què passa si vull canviar el comportament d'aquest programa i
fer alguna cosa una mica diferent en el seu lloc?
Deixin-me seguir endavant i dir això.
Déjame desfer de tot això.
I permetin-me dir if (n == 42).
I després vaig a seguir endavant i dir print "Vostè va prendre la
resposta correcta. "En cas contrari seguirem endavant i dir,
printf ("vas triar la
resposta incorrecta ");. Okay.
El fet que.
>> Ara, alguns punts que podem fer aquí.
Un, que no escrigui el símbol que es podria pensar és el
més raonable.
Quan vulgui comprovar la igualtat, resulta que vostè no utilitzi el
signe igual.
En el seu lloc, utilitzeu el signe d'igual a igual.
I per què podria ser això, només intuïtivament?
Si.
AUDIÈNCIA: [inaudible]
DAVID J. Malan: Correcte.
El signe igual s'utilitza ja per a l'assignació.
Algú realment no pensar en això.
I ara, quan es tracta de proves d'igualtat, hem de
ser més explícit, i dir igual a igual.
Un error molt comú és fer això.
I, si en horari d'oficina o una setmana en algun lloc o al
pròximes dues setmanes es fa alguna cosa com això i després
lluitar amb ell durant 10 a 20 minuts tractant d'esbrinar
el que la bestiola maleït és, adonar-se que vostè és un dels
persones que van fer aquest error.
Per tant, molt fàcil de fer.
Però l'objectiu ara és evitar aquest error.
Això podria avaluar, perquè el que s'està dient en realitat?
Si n es fa 42.
Així que la gent verb usar, verbalment, per expressar el
concepte d'assignació és "aconsegueix". Així que si n es fa 42.
Així que això significa assignar 42 a núm.
Ara tinc una expressió booleana entre parèntesis,
dins d'aquesta condició, el valor del qual és 42.
¿És cert?
Perquè si ho avaluarà de dins cap a fora, el total
resposta, ara, és de 42.
>> Així que si vostè va fer la pregunta, "si (42)," el que és
que realment està dient?
Doncs bé, les expressions booleanes només poden ser veritables o falses.
1 o 0.
Activat o desactivat.
Així que sembla que tenim aquí un cas de cantonada, en el qual tots d'una
sobtat, estic dient "si (42)". Això no és un valor booleà.
Llavors, què fan les computadores, però, és que essencialment equival
res que no sigui 0 s'interpreta per ser veritat.
1.
On.
Tots són funcionalment equivalents.
Només el valor 0, la paraula clau o fals, com veurem
finalment veure, en realitat és falsa.
Així que "si (42)" en realitat seria veritat, perquè és diferent de zero.
Així que per ser més precisos aquí, un valor booleà no és realment tan
Cert o fals, però per aquest
cas, si és 0 o diferent de zero.
Així falsa o no falsa.
I això ens permet abastar tant més
possibilitats en l'expressió entre parèntesis.
Així tenim que, amb tanta precaució, dir això -
si (n == 42).
Simplement perquè hem de especificar una prova de la igualtat,
no una assignació d'un valor.
>> Quina altra cosa és la pena assenyalar aquí?
Aquestes claus no són realment necessaris.
He estat fent només per ser volgués filar prim primmirat aquí.
Però quan vostè té una condició que només té una línia de
codi, per motius de comoditat, els programadors no és necessari utilitzar
les claus.
N'hi ha prou simplement guió, per raons estètiques, i
a continuació, escriure la línia de codi.
Només quan es vol escriure dues línies de codi - per
exemple, else printf ("Adéu!"). Si vostè vol fer
que, no funciona.
Pot sagnar tot el que vulguis, però el fet que té
escriure dues línies de codi sense necessitat d'utilitzar claus
significa que aquest programa no s'executa correctament o podria
Ni tan sols compilar correctament.
Així que per ara, per ser honest, crec que el millor hàbit és només
utilitzar les claus, i t'adonaràs que fan
súper clar el que està passant.
>> També, com un part - especialment si vostè està entre aquells que utilitzen
els llibres recomanats o recursos en línia -
adonar-se que existeix aquesta noció d'estil en
programació.
I algunes persones prefereixen posar la clau de tancament
aquí en una línia.
Hi ha qui prefereix fer coses ridícules,
com posar aquí.
No hi ha una resposta equivocada a l'hora de
estil, però això és incorrecte.
No obstant això, algunes persones ho fan.
[Rialles]
DAVID J. Malan: Així que parlar d'això ara, simplement perquè com
llegir sobre coses en els llibres o en línia, vostè va a obtenir
diferents missatges de diferents mestres i
diferents autors.
I només s'adonen que, funcionalment, són
generalment equivalent, però sigui constant.
Així que en aquest cas, anem a normalitzar l'arrissat
claus alineant aquí a l'esquerra.
>> Està bé.
Així que seguirem endavant ara i executar-lo, i veure què passa
amb aquest programa.
Fer nonswitch.
A continuació, executeu nonswitch.
Dóna'm un nombre enter entre 0 i - pel que no és rellevant
més, però jo només diré arbitràriament 42.
I he triat la resposta correcta.
Bé, en realitat prendrem això en una direcció diferent.
Resulta que hi ha una mica d'una altra sintaxi que
pot utilitzar en un programa.
Heus aquí una nova peça de sintaxi que és funcionalment el mateix,
però només introdueix una altra manera d'expressar-nos.
Així que això és el que es coneix com "declaració de canvi". I un
declaració interruptor funciona com segueix.
Cal, entre parèntesis, el valor que voleu
"Interruptor" on.
Vostè vol comportar-se de manera diferent en funció del seu valor.
Per tant això vol dir que l'interruptor en el valor de n.
I què vol dir això?
Bé, si n és 1 o 2 o 3, endavant i imprimir "Vostè
triat un nombre gran "i després trencar.
La raó de la ruptura és que la forma C és com funciona
aviat com es troba un cas que coincideix, comença l'execució
tot el codi sota d'ella.
Així que si tinc una línia de codi, com ho faig aquí a la línia 27, es
és executat.
Si afegeixo una altra línia aquí, el fitxer és executat.
Una altra línia aquí, el fitxer és executat.
El programa només deixa d'executar el que està per sota de la
declaració de cas aplicable quan explícitament
dir "trencar". Tan malament.
Dreta, en aquest cas, com a conseqüència d'això.
4 Cas o 5 o 6, de manera similar, va
per imprimir un missatge.
En aquest cas, el nombre mitjà.
Salt.
Cas 7, 8, 9, 10, que voleu imprimir "vas triar un gran
nombre. "Break.
I després hi ha, literalment, una paraula clau denominada "default"
que és eficaç com el "altre" constructe.
Així nova sintaxi, però intel · lectualment,
res de nou aquí.
És com el Scratch.
Si, en cas contrari si, en cas contrari si, tipus de bloc.
>> Així que aquesta és la versió commutada d'aquest programa.
Però noti que ho vam fer amb nombres aquí.
Permetin-me obrir una segona versió, només per mostrar
una cosa una mica més concret.
Així que aquí tenim graus en el seu lloc.
Resulta que es pot utilitzar switches no només en nombres enters, però en
personatges.
No en tots els tipus de dades, però almenys en caràcters.
Així que aquí, podríem fer alguna cosa com si el valor de C que
l'usuari va escriure, en la línia 19, amb la funció GetChar,
és majúscula o minúscula a, anem a interpretar com una qualificació,
i diuen que va recollir una qualificació excel · lent.
I a baix al llarg de la instrucció switch, tenim un altre
casos de "B" s i "C" s, i així successivament.
Però ara anem a completar una altra cosa.
I de nou, una mena de volar a través de
alguns d'aquests exemples.
Però en realitat és perquè puguem aplicar-les, ara -
o en realitat, només ha de traduir ara -
a C.
>> Així que permetin-me anar endavant i fer-ho.
Vaig a obrir un nou arxiu.
I jo faré include.
I després em vaig a fer int main (void).
Deixa guardar aquest arxiu com una loop.c.
Només com un exemple.
I seguiré endavant i fer el següent.
Vull escriure un programa molt tediós.
Així 10.
Anem a fer això.
9.
Està bé.
Així que vostè comenci a fer-ho a la programació, vostè és
probablement fent alguna cosa malament.
Però anem a començar per aquí de totes maneres.
Oops.
Això és realment dolent.
7.
6.
5.
4.
Res del que passarà quan arribem a 0.
3.
2.
1.
Bé.
0.
Elimina.
>> Està bé.
Així que tornarà 0.
Així que aquest programa és, òbviament, farà el mateix
tediosament diu que farà.
Es va a imprimir tots els
valors, de dalt a baix.
Així que em fan bucle.
I llavors - crits.
Fer circular.
Jo era al directori equivocat.
I ara m'ho dius a mi córrer bucle.
Retorn.
Woohoo.
Molt bonic.
Programa Niça, molt de temps.
>> Està bé, però ara farem això millor.
Igual que en Scratch, quan va començar a utilitzar un bucle
construir, en comptes de copiar i enganxar tota la
peces d'un trencaclosques, permetin-me presentar a aquesta cosa.
Així que en C, hi ha diverses construccions de bucles,
un dels quals té aquest aspecte.
Un bucle "for" té tres coses, separats per dos punts i comes.
I, a continuació, a l'interior del cos del bucle, per dir-ho - la
coses dins de les claus -
podem fer alguna cosa una i altra vegada.
Així que el que tenim aquí a la pantalla, és a dir
literalment, només un comentari.
El / / significa aquí ve un comentari.
Aquest no és el codi.
Això és només descripció d'Anglès, per a mi, l'ésser humà.
>> Així inicialitzacions, condicions i actualitzacions.
Bé, anem a veure com funciona això.
Això em permet reescriure el programa de la següent manera.
For -
així que aquí ve la meva loop -
int i -
aquí ve una variable anomenada "i" -
s'inicialitza a 10.
Així que aquí està la meva inicialització.
Vull fer aquest circuit tan llarg com "i" és major o
igual a 0.
I en cada iteració d'aquest bucle, vull
cal fer? -.
Així que vam veure + + dilluns.
- És l'oposat.
Es redueix el valor d'1.
Dins d'aquest cicle, el que vull fer realment alguna cosa.
Així que vaig a dir alguna cosa com printf.
No vull dir que 10 ara, perquè això òbviament és
d'imprimir el mateix valor.
Què és el que vull imprimir en canvi, probablement?
Si.
Així que "i". Així que% d, i.
>> Així que em vaig a robar una d'aquestes idees d'abans -
aquesta substitució de codis de format -
i aquí baix, en el fons, vaig a tornar 0, només
per si de cas.
Però ara, tinc un programa més succinta.
No és més que unes poques línies, i algunes línies no 10 o 11.
Deixa sortir el meu missatge aquí.
Remake bucle.
Torneu a executar el bucle.
I el que sembla ser la mateixa.
Ara, el programa no és més interessant.
Però ara puc escriure alguna cosa com això.
Jo puc canviar això a 100.
Després pot tornar a compilar el meu programa.
I llavors puc tornar a executar el meu programa.
I ara va super ràpid en els ordinadors d'avui en dia.
Però no tinc -
i, de fet, la meva memòria de retrocés no
fins i tot anar tan lluny.
Aquí anem.
Així que aquí tenim tot 100.
Però és fàcil cometre errors aquí.
Quin serà el comportament esperat si
accidentalment fer això?
Així que se sent com infinit.
Així que anem a veure si l'equip es comporta.
>> Així que permetin-me anar endavant i fer bucle.
I m'ho dius a mi córrer bucle.
Així que anem a tornar a això en un moment.
Anem a deixar que aquesta execució.
Perquè el que hem de comptar, com a mínim?
És probable que almenys 2 milions de dòlars, si hem de molts bits, i
estem utilitzant valors positius.
Així que anem a tornar aquí.
Davant aquest tipus de bucles, tenim el que s'anomena temps
bucles. Per tant, igual que en Scratch, vostè tenia sempre
blocs, blocs i havies de repetir.
De la mateixa manera, al carrer, només hi ha altres maneres
d'expressar-se.
Pel que té aquesta noció d'un bucle while que li permet
expressar-se de manera diferent.
I després hi ha una cosa que es diu un bucle do-while,
que funciona lleugerament diferent també.
I anem a molestar aquests a part amb el temps.
>> Però donem una ullada a aquest últim aquí.
Si entrem en -
segueix funcionant.
És bastant infinita.
Així que permetin-me anar en positiu, i mostrar com podem realment
governen l'entrada de l'usuari una mica més eficaç.
És un programa bastant curt.
I aquí tenim, en principal, una declaració int n.
Així que dóna'm una variable anomenada núm. Ara, jo dic literalment
"Fer". I després tinc obert arrissat
abraçadora, clau de tancament prop.
I després es dóna compte, després d'això, es diu que encara n
és menor que 1.
Així notar que aquestes línies -
19-24 -
redactar col · lectivament un bucle do-while.
I de nou, la sintaxi nova, no és una idea nova.
És només una altra forma de bucle, sintàcticament.
Llavors, què fa això?
Fer el següent mentre que n és menor que 1.
Llavors, què és el que vull fer?
Exigeixo que em donis un enter positiu.
Llavors jo realment tractar d'obtenir un nombre sencer de l'usuari.
Però en termes de l'ordre de les operacions aquí, pel fet que el
mentre condició és aquí, llavors em va a comprovar, és n
menys d'1?
Així que suposem que l'usuari -
després de ser exigit d'aquesta manera -
tipus en el valor 0.
Aquesta condició serà vertadera o falsa?
Bé, en realitat serà veritat.
Atès que n és 0, i 0 és menor que 1.
Llavors, què implica això?
Fes-ho de nou.
Només una vegada que la condició s'avalua com false.
Si escric en 42.
Doncs no, 42 no és menor que 1.
Per tant, aquest bucle es realitza executant.
I així, en aquest moment, el programa dirà, gràcies per
el 42, en aquest cas.
Ara que té aquesta forma d'expressar -
No hem d'esperar que això acabi.
Va a portar el seu temps.
Continuarà la propera vegada, potser.
>> Però ara, vostè té la capacitat d'entendre una mena
poc d'humor geek.
Disculpes.
Això no és representatiu d'humor en la ciència de la computació
món, però és valent.
Final [rialles] Anem en aquesta nota.
I ens veiem el dilluns.
[Aplaudiments]