>> [Reproducció de música]
>> DAVID J Malan: Molt bé, benvinguts a CS50.
Aquest és el començament de la segona setmana.
Una paraula d'un dels nostres amics al campus -
si vostè està interessat, possiblement, ja sigui ara o en algun futur a llarg termini
fins i tot, un cop més còmode, l'ensenyament els estudiants de secundària una mica
alguna cosa sobre la informàtica, fer el cap a aquesta URL.
Ells tenen una especial necessitat en aquest moment de mestres, sobretot si vostè té
tingut algun contacte amb la informàtica.
>> Així que recorda que l'última vegada, es va introduir uns tipus de dades en C, i
és possible que hagi començat a obtenir el seu mans brutes amb aquests fins al moment
al problema d'establir un.
I vam tenir una xerrada.
Així que en termes una mica tècnics, el que és un char com la coneixen avui en dia?
>> Així que és un personatge, però anem a ser més precisos moments.
Què s'entén per caràcter o individu carbó?
Un caràcter no numèric -
pel que no necessàriament.
Resulta que els nombres parells, fins i tot puntuació i lletres estan
representat amb aquestes dades tipus conegut com un char.
Així que no és necessàriament alfabètic.
Sí?
>> Així que és un caràcter ASCII.
Així que si penses en la setmana zero, quan vam tenir el nostre byte de voluntaris
venir i siguin titulars de les mans en alt o no tots, que representaven bits.
Però en conjunt com un grup de vuit, que representaven un byte.
I hem introduït la noció d'ASCII en aquesta conferència, que simplement és una
mapatge entre nombres i lletres.
I utilitza ASCII, com els éssers humans implícites, vuit bits
per representar un caràcter.
>> Així doncs, si vuit bits pot cada presa en un de dos valors -
zero o un -
Això vol dir que hi ha dues possibilitats per aquesta persona -
zero o un -
per a esta persona, dues per a aquest persona, dos per a aquest.
Així, un total de dues vegades dues vegades dues vegades dues vegades 2 -
així que dos al vuitè en total.
Així que hi ha un nombre total de caràcters 256 possibles que pot
representar amb vuit bits.
>> Ara, aquells de vostès que parlen d'Àsia idiomes poden saber que hi ha més
personatges del món que només As i Bs i Cs i Ds.
I, en efecte, ASCII no és suficient per una gran quantitat d'idiomes del món.
Però més sobre això en un altre moment.
Per ara, sap que a C si vol per representar una lletra, un tros de
puntuació, o simplement una mica de caràcters a la natura, s'utilitza un char.
I és un byte o vuit bits.
>> Què tal un int?
Bé, un int és un nombre enter.
Quants bits, si vostè recorda, era un nombre enter típicament?
Recordo que ningú?
Així que és en general 32.
En realitat, depèn de l'ordinador que utilitzeu.
No obstant això, en l'aparell, i en una gran quantitat de ordinadors, és 32 bits o quatre
bytes - vuit vegades 4.
I ints només són utilitzades per emmagatzemar números, ja sigui negatius,
positiu, o zero.
>> I si vostè té 32 bits i només es preocupen pels números positius, pot
qualsevol estadi quants possible sencers d'un ordinador pot representar de
zero en un màxim?
Pel que seria 2 a la 32, que és més o baix, quatre mil milions.
Així doncs, aquestes potències de dos seran temes recurrents en la informàtica.
Com veurem, són bastant convenients treballar amb fins i tot si no és prou
fàcil de fer els càlculs al cap.
>> Així que anem a dir més o baix, quatre mil milions.
Ara, des de fa molt de temps -
pot tipus de conjectura.
És més que un int.
Quants bits?
Per tant 64 bits o bytes de vuit.
Això només vol dir que vostè pot representar fins i tot nombres més grans, positiu més gran o
grans nombres negatius.
>> I què hi ha de surar?
Això és un punt flotant valor de 32 bits.
Això és només un nombre real, alguna cosa amb un punt decimal.
Però si en canvi necessita més llocs després de la coma decimal o desitja
representar un nombre més gran amb alguns fracció després d'ella, es pot utilitzar un
doble, que és de 64 bits.
>> Però hi ha una interessant portar aquí.
Així que si ints estan limitats per 32 bits i fins i tot llargs llargs estan limitats per 64
trossets, aquest tipus de planteja la pregunta, I si en realitat es vol explicar
superior a 4 milions de dòlars per a un int?
Bé, només ha d'utilitzar molt de temps.
Però el que si voleu comptar més alta de dos a la 64, més o menys?
>> Ara, això és un nombre enorme.
Però amb el temps, és possible que en realitat es preocupen per aquest tipus de valors,
especialment si vostè està utilitzant una base de dades i començant a recollir munts i munts
i un munt de dades i assignació única nombres a cada peça de les dades.
Així que tipus de tenir un problema.
I de la mateixa manera, amb el punt flotant valors - flotadors o dobles -
si només té un nombre finit de trossets, quants nombres totals vas poder
possiblement representi?
>> Bé, és menys clar quan es involucrar a un punt decimal.
Però és sens dubte finit.
Si vostè té un nombre finit de bits, un nombre finit dels éssers humans, un finita
nombre de bombetes, segur que pot només representar un nombre finit de
valors de coma flotant.
Però, quants nombres reals són la part del món?
Hi ha un infinit.
Així que és una mena de problema, ja que no tenen una quantitat infinita de
de memòria o la memòria RAM en l'interior dels nostres ordinadors.
Així que algunes coses difícils poden ocórrer.
>> Així que seguirem endavant i tractar d' expressar això aquí.
Déjame anar per davant i obrir gedit.
Vaig a seguir endavant i desar un fitxer anomenat "floats0.c" només per estar
coherent amb un exemple que és disponible en línia, si vol.
I jo seguiré endavant i definir de la següent manera -
Vaig a seguir endavant i dir, int principal buit, com fem sovint.
>> I després, en aquest programa, vaig a declaro un flotador, de manera que una de 32 bits
variable anomenada f, de manera arbitrària.
I després em vaig a guardar-hi No sé, una dècima, pel que 0,1.
Així que vaig a expressar que com una dividit per 10, que és perfectament
legítim en C.
>> I després a la segona línia, simplement voleu imprimir aquest valor.
Així recordem que podem utilitzar el familiar printf.
No volem utilitzar% i per a un int.
Volem utilitzar% f per un flotador.
I llavors em vaig a fer barra invertida n, Tancament de cometes, comes, f, punt i coma.
>> Així que aquí està el meu programa.
Ja hi ha un error.
Algú per qui aquest fet clic Ja vull assenyalar almenys
un error que he fet?
Sí?
Si.
Em vaig oblidar "# include" a la cim, símptoma que si intento
compilar aquest serà que el compilador va a cridar a mi,
dient símbol indefinit o alguna cosa per l'estil.
No entén alguna cosa com printf.
>> Així que vaig a fer "# include ", Deseu el fitxer.
I ara està en millor forma.
Però també vaig a assenyalar a terme un nou detall a l'actualitat.
A més d'especificar el lloc titulars com a% f% i% s, es pot
de vegades influir en el comportament d'aquest marcador de posició.
Per exemple, en el cas d'un flotant valor del punt, si només vull
per mostrar un decimal després de la període, puc fer realitat 0.1f.
En altres paraules, em separo de la f i el signe de percentatge amb 0,1, només
dient printf, és possible que tingui un tot grup de nombres després de la coma decimal
punt per a mi.
Però jo només vull veure a un d'ells.
>> Així que seguiré endavant ara i estalviï aquest programa, entrar al meu terminal
finestra, i jo seguiré endavant i el tipus de fer surar 0, entrar.
Veig aquesta línia un tant críptic que començarà a tenir més sentit, ja que
es burlen d'ell, a part aquesta setmana i la vinent.
Ara vaig a seguir endavant i executar zero flotador.
I, maleïda sigui.
>> Així que hi ha un altre error aquí per alguna raó.
Estic bastant segur que una desena part, o un dividit per 10, no és 0.0.
Potser estic sense mirar a suficients dígits.
Per què no puc dir dues 0.2 per veure dos decimals en lloc d'un de sol.
Deixa tornar a la meva finestra de terminal aquí i va colpejar un parell de vegades per
veure a la meva història.
No fer surar zero una altra vegada, i després de nou.
I ara entrar.
>> I ara estic bastant segur que això és un error.
I el que podia fer tres i quatre, i estic probablement seguirà veient a zeros.
Llavors, ¿on és l'error?
Una dividit per 10 hauria de ser 0,1.
Algú vol prendre una punyalada en el la qüestió fonamental és?
Sí?
Tots dos són nombres enters.
¿I què?
Així que amb un dividit per 10, que és el que faig a l'aritmètica.
I em fa 0.1.
>> Si.
I el que és realment la qüestió.
Quan vostè pren un sencer en un ordinador i ho divideixes per un altre nombre enter,
l'ordinador per defecte va a suposem que desitja un sencer.
El problema, però, és clar, és 0,1 que no és un nombre enter.
És un nombre real.
I així, el que l'equip fa per per defecte és simplement llença a les escombraries
sobretot després del punt decimal.
No arrodonir cap amunt o avall en si.
Simplement tira a les escombraries tot el que després del punt decimal.
I ara que té sentit.
Perquè ara estem clarament va deixar amb zero.
>> Però espereu un minut.
No estic veient un zero int.
En realitat estic veient 0.00.
Llavors, com conciliar això ara?
Si un dividit per 10 és igual a zero, però estic veure 0.00, on està rebent
convertit de nou en un nombre real?
Si.
Exactament.
>> Així que aquí, en línia de cinc, quan en realitat botiga que 0.1, el qual és
truncat a zero, a l'interior d'un flotador, això és efectivament equivalent a
emmagatzemar no com un int, però, de fet, com un flotador.
D'altra banda, estic a continuació, utilitzant printf per explícitament imprimir aquest nombre a dues
decimals tot i que hi ha podria no ser en realitat cap.
>> Així que aquest tipus de merda, no?
Pel que sembla, no es pot fer matemàtiques, almenys en aquest nivell de
de precisió, en un ordinador.
Però sens dubte hi ha una solució.
Quina és la solució més simple que podria potser fer, encara que sigui intuïtiva per
solucionar això?
Sí?
Gireu els sencers en -
si.
Encara que no estic molt segur del que és realment està passant aquí, si
fonamentalment té a veure amb aquests dos estar sencers, bé, per què no ho faig jo
fer que el 10,0, de manera que aquest 1.0, torneu a desar el fitxer.
Permetin-me tornar a la inferior i recompilar.
Permetin-me ara tornar a executar.
I allà -
Ara, tinc la meva desena representats com 0,10.
>> Està bé.
Així que això no és dolent.
I permetin-me assenyalar una altra manera podríem haver resolt això.
Permetin-me realment aconseguir la regressió en el temps que quan vam haver aquest és un
Fa desè d'un moment.
I m'ho dius a mi seguir endavant i tornar a guardar l'arxiu com un nom de fitxer diferent, només per
tenir una mica de control.
Així que va ser una versió.
I ara me n'aniré endavant i dugui a terme una versió més.
Anem a trucar a aquesta versió 02:00 zero indexats.
>> I que faré en lloc això - saps què?
Addició de punt zero funciona en aquest cas.
Però suposem que fos una variable.
Supòsit 10 van ser una variable.
En altres paraules, suposem que no podia hard-codi només 0,0 al final
d'aquesta expressió aritmètica.
Bé, jo puc fer realitat una cosa entre parèntesis es diu fosa.
Puc llançar aquest nombre enter de 10 a un flotador, i puc llançar que un sencer en un
surar, també.
A continuació, els càlculs que va a fer 1.0 està efectivament dividit per 10,0,
el resultat que va en f com abans.
Així que si a compilar això com fan carrosses 2, i ara sura 2, amb si mateix
respondre, també.
>> Així que aquest és un exemple bastant artificial, per resoldre aquest problema
mitjançant la introducció de fosa.
Però, en general, de fosa serà una cosa molt poderós, especialment per
problema va fixar dos en el termini d'una setmana, quan Per convertir un tipus de dades
un altre que al final de la dia es representen de la mateixa manera.
Al final del dia, cadascun dels El que hem parlat fins ara és
només sencers sota la campana.
O si això és massa baix nivell per et, són només números
sota de la caputxa.
Fins i tot els personatges, de nou, recorden des de la setmana zero, són nombres
sota de la caputxa.
>> Què vol dir, que pot convertir entre diferents tipus de nombres si
són només bits.
Podem convertir entre nombres i si les cartes són només
bits, i viceversa.
I de fosa d'aquesta manera és un mecanisme de programació que permet a la força
canviar un tipus de dades a un altre.
Per desgràcia, això no és tan senzill com podria haver agradat.
>> Vaig a tornar a entrar en carrosses 1, que era la més simple, més
un de senzill amb 0.0 s'afegeix a cada un.
I així com un repàs ràpid, m'ho dius a mi seguir endavant i tornar a compilar
això, fan carrosses 2 -
Lamentablement, això és fer carrosses 1.
I ara anem a córrer carrosses 1.
I a la part inferior, observi que de fet entenc 0.1.
Així, problema resolt.
>> Però encara no.
Ara seré una mica curiós, i vaig a tornar al meu
sentència printf i dir, saps què?
M'agradaria confirmar que aquesta és realment una desena part.
I vaig a voler veure aquesta a, diguem, 5 decimals.
No és un problema.
Com canvi el dos per cinc, I recompileu amb maquillatge.
Em torna a executar com a flota gener.
Mirant bastant bo.
Els meus revisions podria acabar allà, però M'estic posant una mica més aventurer.
Jo canviaré 0,5-0,10.
Vull veure 10 dígits després el lloc decimal.
>> I jo vaig a seguir endavant i tornar a compilar això i tornar a executar flota gener.
Que tipus de penediment d'haver provat aquest més perquè els meus matemàtiques no és tan
corregir més, sembla.
Però espereu un minut, potser això és només una casualitat.
Potser l'equip està actuant una mica estrany.
Deixin-me seguir endavant i fer 20 punts decimals i assegurar-me que sé
com fer matemàtiques.
Sé com programar.
Feu carrosses 1, recompilar, i maleïda sigui.
Això és realment, realment arribar lluny de la marca.
>> Llavors, què està passant aquí?
Intuïtivament, en base als supòsits abans sobre la mida dels tipus de dades,
que ha d'estar passant aquí sota de la caputxa?
Sí?
Exactament.
Si desitja que aquest gran precisió, i això és una diables d'un munt de precisió -
20 números després del punt decimal.
Vostè no pot representar una nombre arbitrari menys que tingui una
nombre arbitrari de bits.
Però no ho fem.
Per a un flotador, només tenim 32 bits.
>> Així que si 32 bits només poden ser permutats en un manera - igual que els nostres éssers humans en, etapa
mans amunt o cap avall - en un nombre finit de maneres, només hi ha un nombre finit
dels nombres reals es poden representar amb aquests bits.
I així, l'equip amb el temps haurà de
començar a tallar cantonades.
L'ordinador pot ocultar els detalls de nosaltres per una mica de temps.
Però si comencem a ficar els números i mirant cada vegada més lluny en el
posterior números al nombre enter, llavors comencem a veure que és
en realitat s'aproxima a la idea d'una desena part.
>> I així resulta que, tràgicament, hi ha un nombre infinit de nombres
no podem representar amb precisió en un ordinador, almenys amb un finit
nombre de bits, un nombre finit quantitat de RAM.
Ara, per desgràcia, això a vegades té conseqüències en el món real.
Si les persones no arriben a apreciar aquest o una espècie de donar per fet el fet
que el seu equip s'acaba de fer el que que diuen que fer i no fer
entendre aquests subjacent detalls de representació -
que, francament, en algunes llengües són ocultes per a l'usuari, a diferència de C -
algunes coses dolentes poden succeir.
>> I el que jo pensava que faríem és fer un pas enrere.
I es tracta d'una vídeo de vuit minuts.
Es va emetre fa uns anys, i dóna penetracions en realitat el que pot sortir
malament quan menors d'apreciar aquestes tipus de detalls en el tot-massa
món real.
Si poguéssim apagar els llums durant uns pocs minuts.
>> ALTAVEU 1: Ara tornem a l'enginyeria
desastres en Meravelles Modernes.
>> Ordinadors -
tots hem arribat a acceptar la problemes sovint frustrants
d'anar amb ells.
Errors, virus i errors de programari són petits preus a pagar pel
conveniència.
Però en l'alta tecnologia i d'alta velocitat programa espacial militar i
aplicacions, el problema més petit pot ser ampliada cap al desastre.
>> El 4 de juny de 1996, els científics disposats a llançar un coet no tripulat Ariane 5.
Portava satèl · lits científics dissenyats per establir amb precisió com
camp magnètic de la Terra interactua amb els vents solars.
El coet va ser construït per a l'Europeu Agència Espacial i tret de la seva
instal · lació a la costa de la Guaiana Francesa.
>> JACK Ganssle: En uns 37 segons d'iniciat el vol, que va notar per primera vegada
alguna cosa anava malament.
Els filtres es gira sobre un eix en de manera que en realitat no hauria.
Al voltant de 40 segons de vol, clarament que el vehicle estava en problemes.
I va ser llavors quan es va fer una decisió de destruir.
L'oficial de seguretat de gamma, amb enormes budells, pressiona el botó,
explotar el coet abans que pogués convertir-se en un perill per a la seguretat pública.
>> ALTAVEU 1: Aquest va ser el primer viatge l'Ariane 5, i la seva destrucció
es va dur a terme a causa d'un defecte incorporat en el programari del coet.
>> JACK Ganssle: El problema a l'Ariane era que no hi havia un nombre
que va requerir 64 bits per expressar.
I volien convertir a un nombre de 16 bits.
Se suposa que el nombre mai va ser serà molt gran, que la majoria dels
els dígits en el de 64 bits nombre eren zeros.
Es van equivocar.
>> ALTAVEU 1: La incapacitat d'un programari programa per acceptar el tipus de
nombre generat per altra era en l'arrel de la falla.
El desenvolupament de programari s'havia convertit en un part costosa de la nova tecnologia.
El coet Ariane 4 ha estat molt èxit, pel que gran part del programari
creat per a ella també era utilitzat en el Ariane 5.
>> PHILIP COYLE: El problema bàsic era que l'Ariane 5 va ser més ràpid,
accelerat més ràpid.
I el programari no tenia representar per això.
>> ALTAVEU 1: La destrucció del coet va ser un gran desastre financer,
tot es deu a un error de programari minuts.
Però aquesta no era la primera vegada que les dades problemes de conversió havien plagat moderna
tecnologia de coets.
>> JACK Ganssle: El 1991, amb l'inici de la primera Guerra del Golf, la Patriot
míssils experimentar una classe similar d'un problema de conversió de nombre.
Com a resultat, 28 soldats nord-americans van ser van morir i unes 100 van resultar ferits
quan el Patriot, que se suposava per protegir contra els Scud entrants,
deixat de disparar un míssil.
>> ALTAVEU 1: Quan l'Iraq va envair Kuwait i America va llançar Tempesta del Desert a
principis de 1991, les bateries de míssils Patriot van ser desplegats per protegir l'Aràbia Saudita
i Israel de l'Scud iraquià atacs amb míssils.
El Patriot és un mitjà abast EUA sistema de míssils terra-aire fabricats per
l'empresa Raytheon.
>> Teodoro Postol: La mida de la Patriot si interceptor és més o menys
20 peus de llarg.
I pesa al voltant de 2000 lliures.
I porta una ogiva d'al voltant de -
Crec que és al voltant de 150 lliures.
I el propi cap de combat és un alt explosiu que té
fragments al seu voltant.
La carcassa del cap de combat està dissenyada actuar com perdigons.
>> ALTAVEU 1: Els míssils es van realitzar quatre per contenidor i són transportats
per un semiremolc.
>> PHILIP COYLE: The Patriot antimíssils sistema torna al
menys de 20 anys.
Va ser dissenyat originalment 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 usar
per enderrocar míssils Scud, no avions.
La força aèria iraquiana no era tant d'un problema.
Però l'exèrcit estava preocupat per míssils Scud.
I pel que va tractar de millorar la Patriot.
>> ALTAVEU 1: interceptar un míssil enemic viatjant a Mach cinc anys era
serà un repte suficient.
Però quan el Patriot es va precipitar en servei, l'exèrcit no estava al tant d'un
Modificació de l'Iraq que va fer la seva Scud gairebé impossible d'assolir.
>> Teodoro Postol: El que va passar és els Scud que eren
venir a eren inestables.
Van ser desplaçament.
La raó d'això era que els iraquians, en per obtenir 600 quilòmetres d'un
Míssils de 300 quilòmetres de distància, es pes de l'ogiva davantera.
Van prendre el cap més lleugera.
Així que ara la Patriot està tractant venir al Scud.
I la major part del temps, l'aclaparadora majoria de les vegades, ho faria igual
volar per l'Scud.
>> ALTAVEU 1: Una vegada que el sistema Patriot els operadors es van adonar de la Patriot es va perdre
el seu objectiu, que va detonar els Patriots cap per evitar possibles
baixes si es permetia a caure a terra.
>> Teodoro Postol: Això va ser el que més persones van veure com a grans boles de foc al cel
i incomprès com intercepta d'ogives Scud.
>> ALTAVEU 1: Encara que en el cel nocturn Patriots semblaven ser èxit
destruir míssils Scud, en Dhahran no podria haver error sobre el seu
rendiment.
No, el sistema de radar del Patriot perdut seguiment d'un Scud entrant i mai
posat en marxa a causa d'un defecte de programari.
>> Va ser als israelians que va descobrir per primera vegada que el més llarg és el sistema de
estava en, més gran és el temps de discrepància es va fer a causa d'un rellotge
incrustat a l'ordinador del sistema.
>> JACK Ganssle: Unes dues setmanes abans de la tragèdia en Dhahran, els israelians
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 està
que es vegi amb menys precisa.
El Departament de Defensa va respondre comptant totes les bateries Patriot
per no deixar els sistemes durant molt de temps.
Mai van dir el que molt temps va ser.
Vuit hores?
10 hores?
1000 hores?
Ningú ho sabia.
>> ALTAVEU 1: La bateria Patriot estacionat 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.
>> JACK Ganssle: Es va rastrejar el temps a una precisió d'una dècima de segon.
Ara, una dècima de segon és un nombre interessant, ja que no pot ser
expressar 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.
Donarem el nombre d'un terç.
Una tercera no es pot expressar exactament en decimal.
Una tercera va 0.333 en l'infinit.
No hi ha manera de fer això amb la precisió absoluta en decimal.
Aquest és exactament el mateix tipus de problema que va passar al Patriot.
Com més temps el sistema va funcionar, la va esdevenir el pitjor error de temps.
>> ALTAVEU 1: Després de 100 hores de funcionament, l'error en el temps només era
aproximadament un terç d'un segon.
Però en termes de focalització d'un míssil viatjant a Mach cinc, que va donar lloc a
un error de seguiment de més de 600 metres.
Seria un error fatal per als els soldats en Dhahran.
>> Teodoro Postol: El que va passar és un Scud llançament va ser detectat per primera
satèl · lits d'advertència.
I sabien que el Scud venia en la seva direcció general.
No sabien d'on venia.
>> ALTAVEU 1: Correspon ara al radar component del sistema Patriot
defensa de Dhahran per localitzar i mantenir seguiment del míssil enemic entrant.
>> JACK Ganssle: El radar era molt intel · ligent.
Seria realment un seguiment de la posició de el Scud i després predir on
probablement seria la propera vegada el radar envia un pols a terme.
Això es deia la porta de distància.
>> Teodoro Postol: Llavors una vegada que el Patriot decideix, ha passat prou temps per anar
enrere i comprovar la ubicació per aquest objecte detectat, torna.
Així que quan va tornar al mal lloc, a continuació, veu cap objecte.
I es decideix que no hi havia cap objecte, que era una falsa detecció, i
gotes de la pista.
>> ALTAVEU 1: El Scud entrant desaparèixer a la pantalla de radar, i
segons més tard es va estavellar a la fortalesa.
El Scud va matar 28 i va ser l'últim disparat durant la primera Guerra del Golf.
Tràgicament, el programari actualitzat arribar en Dhahran l'endemà.
La falla de programari s'havia fixat, tancant un capítol en la problemàtica
història dels míssils Patriot.
>> Patriot és en realitat un acrònim Fases per al seguiment de matriu
Intercepció de la meta.
>> DAVID J Malan: Molt bé, de manera que un exemple alliçonador, per estar segur.
I, afortunadament, aquests nivell inferior els errors no són una cosa que anem a
normalment han de apreciar, sens dubte no amb alguns de la nostra
més primerenca dels programes.
Per contra, la majoria dels errors que vaig a trobada serà lògic en la natura,
sintàctica en la naturalesa per la qual cosa el codi no funciona bé.
I tu ho saps molt ràpid.
>> Però, sobretot quan arribem a la final del semestre, es va a
tornat més i més d'una possibilitat de realment pensar molt en el disseny
dels seus programes i la subjacent representació
allà, també, de les dades.
Per exemple, anem a introduir MySQL, que és un motor de base de dades populars
que es pot utilitzar amb els llocs web de emmagatzemar dades en el back-end.
I vostè haurà de començar a decidir en Al final del semestre, no només el que
tipus de dades al llarg d'aquestes línies per utilitzar però exactament la quantitat de bits d'usar,
si voleu emmagatzemar dates com a dates i hores com vegades, i també
coses com què tan gran és el que desitja que el identificadors únics a ser per a, per exemple, els usuaris
a la base de dades.
>> De fet, si alguns de vostès han tingut Facebook representa des de fa força temps,
i vostè sap com accedir amb el seu identificador d'usuari -
que de vegades apareix en el seu URL del perfil llevat que hi hagi triat un
sobrenom de la URL, o si vostè té utilitza Facebook Gràfic API, el
API a disposició del públic pel qual es pot demanar Facebook per dades en brut -
es pot veure el que la seva identificació numèrica és.
I fa uns anys, Facebook essencialment va haver de canviar l'ús de
l'equivalent d'enters a l'ús a llarg llarg perquè amb el temps ja que els usuaris vénen
i anar a crear un munt de comptes i comptes falses, fins i tot ells amb molta facilitat
van ser capaços d'esgotar una cosa així com un 4 MIL MILIONS de valor possible com un int.
>> Així que més en aquest tipus de qüestions en el camí, també.
Molt bé, així que estava fent.
Aquesta va ser la imprecisió.
Un parell d'anunciar.
Així seccions comencen oficialment Diumenge, dilluns, dimarts.
Vostè escoltarà per correu electrònic aquesta setmana quant a la seva assignació de secció.
I vostè també aquí en aquest moment com per canviar la seva secció si el seu
horari ha canviat o el seu nivell de comoditat ara ha canviat.
Mentrestant P-conjunt i un pirata informàtic són un per aquest dijous amb l'opció de
ampliar aquest termini pel especificacions a divendres
d'una manera típica.
>> Adonar-se que s'inclou amb el problema especificacions establertes són les instruccions de
com utilitzar l'aparell CS50, marca, , Així com alguns CS50 eines específiques
com l'estil 50, que pot proporcionar amb realimentació dinàmicament en el
la qualitat del seu estil de codi i també comprovar 50, que pot proporcionar
retroalimentació dinàmica quant a la seva correcció de codi.
Forgive que encara estem planxar uns pocs problemes amb el control 50.
Alguns dels seus companys de classe que s'ha iniciat al voltant de les quatre hores de divendres nit
l'especificació pujar notat des de llavors alguns errors que estem treballant
a través, i es disculpa per qualsevol persona que ha experimentat frustracions innecessàries.
La culpa és meva.
Però seguirem fins al CS50 discutir quan això es resolgui.
>> Així que una paraula en els propis resultats.
Així que serà una o dues setmanes abans de començar a obtenir informació sobre els butlletins de problemes
perquè encara no té un tipus d'ensenyament.
I tot i així, anem a començar a avaluar el problema C estableix abans que
tornar enrere i avaluar zero, per la que s'obté més rellevant
retroalimentació més ràpida.
Però, en general, pel pla d'estudis, CS50 butlletins de problemes s'avaluen al llarg del
després de quatre eixos -
àmbit d'aplicació, correcció, disseny i estil.
>> Àmbit d'aplicació serà un nombre normalment entre zero i cinc que
capta la quantitat de la peça que va mossegar.
En general, vostè vol que això és cinc.
Vostè almenys intentat tot.
I noti que és un factor multiplicador pel que el fer només una part de la
conjunt de problemes no és la millor estratègia.
>> Mentrestant, més obvi és el importància de correcció -
només és el programa correcte amb pel que fa a l'especificació?
Això es pondera deliberadament més pesadament que els altres dos eixos per un
factor de tres, ja que reconeixem que en general passarà
molt més temps a perseguir alguns errors, aconseguir que el codi funcioni, llavors
són sangria i triant noms de variables adequades i els
agrada, que és a l'altre extrem l'espectre d'estil.
>> Això no vol dir que l'estil no és important, i anem a predicar la volta
temps, tant en les classes teòriques i en les seccions.
Estil es refereix a l'estètica del seu codi.
Has triat bé-nomenades les variables que són curts, però alguna cosa
descriptiva?
És el codi amb sagnia com s'ha vist en de conferències i d'una manera consistent
amb estil de 50?
>> Finalment és disseny adequat allà al mig.
El disseny és el més dur d'un a posar un El dit a perquè és molt més
subjectiva.
Però és potser el més important de els tres eixos en termes de pedagogia
valor amb el temps i que serà oportunitat del becari docent per
li proporcionen informació qualitativa.
De fet, en CS50 tot i que tenen aquestes fórmules i resultats, al final
del dia aquests són molt deliberadament molt petits cubs - els valors en punts
entre zero i tres i zero-cinc.
No tractem de traçar línies molt gruixudes entre sèries d'exercicis o entre
estudiants sinó centrar-se tant com podem en qualitatius, escriptura a mà
retroalimentació, ja sigui escrit o verbal per part de el seu company d'ensenyament en particular,
vostè arribarà a conèixer molt bé.
>> Però, en general, aquests són els pesos que els diversos eixos tindran.
Mentrestant, també, val la pena tenir en importa que vostè no ha de suposar que un
tres de cada cinc és un 60% i per tant, més o menys si no.
Tres està destinat deliberadament a ser tipus de mitjà de la carretera bona.
Si vostè està rebent grups de tres en el inici del semestre, és
de fet la intenció de ser un bon lloc per començar.
Si vostè està rebent dos en dos, fires, hi ha definitivament un treball per pagar una mica
més atenció, per aprofitar de seccions i hores d'oficina.
>> Si vostè està rebent quatre potes i els cinc primers, grans.
Però en realitat, esperem veure trajectòries entre els alumnes - molt
individualitzat per alumne, però a partir el semestre aquí a una mena de
els dos a la tres gamma però acabant aquí al rang de quatre a cinc.
Això és el que realment estem buscant.
I tingui present que el delta que exposes entre la setmana zero i la setmana
12 quan estic fent notes.
No ens importa en absolut com que just al començament si el seu
trajectòria és de fet cap amunt i fort.
>> Probitat acadèmica - així que em vaig posar el veu més greu per un moment.
Així que aquest curs compta amb la distinció de enviant més estudiants que qualsevol altra
a la història en el tauler d'anuncis, crec.
Tenim sort de recompte perduda en aquest punt de la freqüència amb que això passi.
I això no és perquè els estudiants en el 50 són més deshonestos que el seu
companys de classe en altres parts.
Però adonem, també, que som molt bons en la detecció d'aquest tipus de coses.
>> I aquesta és l'avantatge que un classe de ciències de la computació té que
podem i fem comparar tots els estudiants butlletins de problemes de parells contra tot
altres, no només aquest any però tots els anys anteriors.
Tenim la capacitat, igual que els estudiants de la classe, a Google i buscar el codi
en llocs com GitHub i fòrums de discussió.
No hi ha absolutament solucions a CS50 d' p-estableix flotant per aquí.
Però si vostè pot trobar-los, podem trobar-los.
I tot això és molt automatitzat i fàcil i trist per a nosaltres de trobar.
>> Però vull destacar, també, que el política d'honestedat acadèmica del curs és
molt destinat a ser molt el contrari d'aquest esperit.
De fet, aquest any hem reformulat les coses en el pla d'estudis que sigui aquest, punt
punt punt amb més detall en el pla d'estudis.
Però el tema principal en el curs realment és ser raonable.
Reconeixem que hi ha una significativa quantitat de pedagògica
valor a col · laborar, en certa mesura, amb els seus companys, per la qual cosa
dos o tres o més és de peu en un tauler blanc
pissarres, així parlar, les seves idees -
escriure pseudocodi en imatges, Diagramació que hauria de ser si Mario
hagués de escriure primer en pseudocodi.
Què ha de fer l'algorisme cobdiciós -
¿Com s'ha de comportar per problema estableix una?
>> I adonar-se que el comportament que fomentem és molt
molt en aquest sentit.
I en el programa, veureu una manat sencer de bales sota una
categoria raonable i no raonable categoria que ens ajuda a ajudar
vostè envolta la seva ment al voltant d'on nosaltres vam treure aquesta línia.
I, en general, una regla d'or decent és que si vostè està lluitant per resoldre
alguns errors i el teu amic o company de classe està assegut al seu costat, es
raonable per tu mostrar- el seu codi i dir, hey, em poden ajudar
M'agradaria saber el que va malament aquí?
>> No solen comprendre el costat oposat.
No és una resposta correcta per a la seva amic o company aquí per dir, oh,
només cal mirar a la mina ia la figura cap a fora d'això.
Això és una mena de irraonable.
Però tenir algú més, un altre cervell, un altre parell d'ulls mira
la pantalla o mirar el seu codi i diuen, estàs segur que voleu
tenir un bucle aquí?
O estàs segur que voleu que mengi aquí?
O oh, aquest missatge d'error significa això.
Aquests són molt raonables i encoratja comportaments.
>> Els casos als quals estava al · ludint a anteriorment es redueixen a que els estudiants són
a altes hores de la nit fent mal judici decisions i enviament per correu electrònic el seu codi de
altra persona o simplement dient: aquí, és a Dropbox o
Cerca a Google a la nit.
Així que animo i prec, si vostè té els inevitables
moments d'estrès, estan xocant en contra de la data límit, no tens caps de
dia, ja que és ja divendres en què punt, el correu electrònic caps del curs o
jo directament.
Diguem, escolta, estic en el meu punt de ruptura aquí.
Tindrem una conversa i entendre-ho.
Recórrer al web o algun altre no comportament raonable no és el
solució, i molts dels seus companys de classe ja no són aquí a
campus causa d'aquesta manca de criteri.
Però és molt fàcil d'eludir aquesta línia.
>> I aquí hi ha una petita imatge per animar Aparteu-vos de Reddit manera que ara
tot estarà bé.
>> Així, un resum ràpid, llavors, d'on ho deixem.
Així que la setmana passada, recordem que introduïm condicions, no en zero
però en C aquest temps.
I hi havia alguna cosa de nova sintaxi, però realment no hi ha noves idees en si.
Vam expressions booleanes que podríem o juntament amb dos verticals
bars o i, juntament amb dos símbols d'unió, dient que tant l'esquerra
i el dret ha de ser veritat perquè això executar.
Després vam interruptors, que busquem en poques paraules, però jo proposo són molt
només sintaxi diferent per aconseguir el mateix tipus d'objectiu si vostè sap d'
avançar en el que els seus casos seran.
>> Ens fixem en els bucles.
Un bucle és potser el més comú, o almenys l'un que la gent
solen arribar instintivament.
Tot i que sembla una mica críptic, veuràs molts, molts exemples d'aquest
en poc temps, ja que tens ia finals de la setmana passada.
Mentre que els bucles poden igualment aconseguir el mateix.
Però si vostè vol fer qualsevol incrementación o actualització de
els valors de variables, que han de fer-ho manualment més que l'
per al bucle abans permet.
I després hi ha el do-while, el que ens permet fer alguna
almenys una vegada, mentre que una mica la resta és cert.
I això és particularment bo per programes o per als jocs en què voleu
per sol · licitar a l'usuari que alguna cosa almenys una vegada.
I llavors, si ell o ella no és capaç de cooperar, és possible que vulgueu fer-ho
una i altra vegada.
>> Amb les variables, per la seva banda, teníem línies de codi com aquest, el que podria
de dues línies.
Vostè podria declarar un int anomenada comptador, punt i coma.
O simplement pot declarar i definir-lo, per així dir-ho.
Donar-li un valor alhora.
>> I després, finalment, parlem sobre les funcions.
I aquest és un bon exemple de la el sentit que il · lustra
dos tipus de funcions.
Un d'ells és GetString (), que, de nou, crear una cadena de l'usuari.
Però GetString () és força interessant, la mesura en què ho hem utilitzat,
perquè sempre hem fet servir amb alguna cosa a la banda esquerra d'un
signe igual.
És a dir que GetString () retorna un valor.
Retorna, per descomptat, una cadena.
I després a la banda esquerra, estem simplement salvar aquesta cadena a l'interior d'un
variable anomenada nom.
>> Això és diferent, en un sentit, des printf printf perquè, almenys en el nostre
ús aquí, no retorna res.
Com acotació al marge, sí retorn alguna cosa.
Simplement no importa el que és.
Però té el que hi ha anomenat un efecte secundari.
¿I quin és aquest efecte secundari en tots els cas que hem vist fins ara?
El que printf fer?
S'imprimeix alguna cosa a la pantalla, pantalles de text o números, o alguna cosa
a la pantalla.
I això és només considerat com un efecte secundari perquè en realitat no és el lliurament
de nou a mi.
No és una resposta dins de les un quadre negre que es pugui
arribar a entrar i prendre.
És només que ho fa pel seu compte, i molt com Colton estava connectat a aquesta
quadre negre la setmana passada, i d'alguna manera màgicament va anar dibuixant a la pissarra
sense que jo realment involucrats.
Això seria un efecte secundari.
Però si en realitat havia d'arribar de tornada a aquí i dir, oh, aquí hi ha la cadena
per part de l'usuari, que ser un valor de retorn.
>> I fins al moment, només hem fet servir funcions que altres persones han escrit.
Però en realitat podem fer aquestes tipus de coses nosaltres mateixos.
Així que vaig a anar a la CS50 aparell nou.
Permetin-me tancar la pestanya que havia obert fa un moment.
I m'ho dius a mi seguir endavant i crear un nou arxiu.
I jo seguiré endavant i anomenar això positive.c.
Així que el que vull fer alguna cosa amb nombres positius aquí.
Així que seguiré endavant i fer int -
ho sento -
# Include.
No fem que la mateixa error com abans.
Int main (void), obert arrissat clau, clau de tall.
>> I ara vull fer el següent.
Vull escriure un programa que insisteix que l'usuari dóna
m'assabento positiu.
Així que no hi ha cap funció GetPositiveInt a la biblioteca CS50.
Només hi ha GetInt ().
Però això està bé perquè tinc la construccions amb les que puc imposar una
poc més restricció en aquest valor.
Jo podria fer alguna cosa com això.
>> Així int n -
i si vostè està escrivint al llarg, només s'adonen Vaig a tornar i
canviar algunes coses en un moment -
així que int n és igual GetInt ().
I això posarà un interior d'int n.
I permetin-me ser una més descriptiva.
Permetin-me dir alguna cosa així com exigeixo que vostè em dóna un nombre enter positiu.
>> Està bé.
Així que una mica d'instruccions.
I ara què puc fer?
Bé, ja sé de la meva senzilla condicions o branques, igual que
tenia en Scratch, que pogués dir alguna cosa com si n és menor o igual que
zero, llavors vull fer alguna cosa agrada, això no és positiu.
I llavors jo podria fer -
Bé, però realment vull aconseguir aquest int.
Així podria seguir aquí i vaig poder tipus de la còpia d'això i aquest guió.
I després, a D'acord.
Així que si n és menor que o igual a zero fer això.
>> Ara, què passa si l'usuari no coopera?
Bé, llavors em vaig a prestat això aquí.
I després vaig per aquí i aquí i aquí.
Així que això no és clarament la solució, no?
Perquè no hi ha final a la vista.
Si vull demanar que l'usuari dóna m'assabento positiu, puc
aconseguir realment el int.
Llavors puc comprovar que int.
Però després vull veure-ho una altra vegada i comprovar de nou i torni a comprovar.
Així que, òbviament, quin és el millor construcció a utilitzar aquí?
D'acord, una mena de bucle.
>> Així que vaig a desfer de gairebé tot això.
I vull aconseguir aquest int almenys una vegada.
Així que vaig a dir que fer -
i vaig a tornar a la mentre que en un moment -
ara, què?
Jo faré GetInt int n gets ().
D'acord.
Així que això és bastant bo.
I ara, ¿amb quina freqüència Jo vull fer això?
>> Permetin-me posar l'interior printf del bucle pel que puc demanar una vegada i una altra,
si sigui necessari.
I què és el que vull aquesta mentre la condició de fer?
Vull seguir fent això mentre que el que és el cas?
Si.
N és menor que o igual a zero.
Així que ja, hem significativament netejat el codi dalt.
Hem prestat construir una molt simple - el do-while.
Jo he robat només les grans línies de codi que vaig començar a copiar i
enganxar, que no era prudent.
I ara em vaig a enganxar en realitat que aquí i fes-ho una vegada.
>> I ara, ¿què és el que vull fer en el al final d'aquest programa?
Només diré una cosa simple igual que, gràcies pel - i
Faré% i per int -
barra invertida n, coma, i després endoll n, punt i coma.
>> Està bé.
Així que anem a veure què passa ara quan executo aquest programa.
Vaig a seguir endavant i no faci comentaris.
Damn.
Uns pocs errors.
Així que permetin-me retrocedir fins a la primera.
No treballar a través d'ells cap enrere.
Treballar a través d'ells, de dalt a baix no sigui que en cascada i només
una cosa estar equivocat.
Declaració implícita de la GetInt function ().
Si.
Així que no va ser suficient.
Jo com que vaig cometre el mateix error, però una mica diferent aquesta vegada.
Necessito no només incloure stdio.h però També cs50.h, que inclou la
les anomenades declaracions d'aconseguir int, que ensenyar l'aparell, o ensenya
C el GetInt () és.
>> Així que permetin-me tornar a desar.
Vaig a passar per alt els errors d'altres perquè esperaré que ells són
d'alguna manera relacionats amb l'error Ja vaig arreglar.
Així que permetin-me anar per davant i tornar a compilar amb fer positiu, Enter.
Damn.
Tres errors, encara.
Permetin-me desplaço fins al primer.
La variable n Nous.
No hem vist això abans.
I això, també, és una mica críptic.
Aquesta és la sortida del compilador.
I el que la línia ressaltada allà - positive.c: 09:13 -
és a dir, s'està dient en la línia nou de positive.c, en el caràcter 13,
La columna 13, que va cometre aquest error.
>> I en particular, s'està dient jo no utilitzada variable n.
Així que anem a veure -
línia de nou.
Estic usant n en el sentit que Li vaig a donar un valor.
Però el que el compilador no li agrada és que no em sembla usar-lo.
Però espereu un minut, ho estic fent servir.
En la línia 11, que estic fent servir aquí.
Però si em desplaço cap avall encara més en positive.c: 11 -
pel que en la línia 11, caràcter 12, la compilador em diu, ús de
identificador no declarat n.
>> Significa no declarats que tinc no s'especifica com un
variable amb un tipus de dades.
Però espereu un minut.
Vaig fer exactament això en la línia nou.
Així que algú està realment confós aquí.
És o jo o el compilador perquè en la línia de nou, de nou, estic declarant un
int n, i estic assignant-li el tornar el valor GetInt ().
Llavors estic fent servir aquesta variable n en línia 11 i comprovar si el seu valor és menor
que o igual a zero.
Però pel que sembla, és dolent i trencat per què?
Digues-ho una altra vegada?
>> Ah, he de declarar núm abans entrar al bucle.
Però per què?
Vull dir, només vam proposar fa poc que està bé per declarar variables
tot en una línia i després assignar-los un valor.
Una variable global - Tornem a aquesta idea en un moment.
Per què vols que em posi fora del bucle?
És.
Exactament.
>> Així que, encara, una mica contradictori, permetin-me resumir.
Quan es declara n interior del bloc do allà -
específicament dins les claus -
aquesta variable n té el que hi ha anomenat un àmbit -
sense relació amb el sistema de puntuació en el per descomptat - però té un abast que és
limitat a aquelles claus.
En altres paraules, en general si es declara una variable dins d'un conjunt de
claus, aquesta variable només existeix dins d'aquestes claus.
Així que per aquest sol lògica, tot i que He declarat n en consonància 9, que
essencialment desapareix l'àmbit d'aplicació, desapareix de la memòria, per dir-ho,
pel temps vaig arribar a la línia 11.
A causa de la línia 11, per desgràcia, és fora d'aquestes claus.
>> Així que, lamentablement, no puc solucionar aquest problema que es remunta al que vaig fer abans.
Vostè pot fer això al principi.
Però, què estàs ara no fent cíclicament?
Òbviament estàs no aconseguir el int cíclicament.
Així que podem deixar la GetInt (), i s'absentin de la GetInt () dins de la
bucle perquè això és el que volem molestar a l'usuari i una altra.
No obstant això, n'hi ha prou que anar fins a la línia, per exemple, sis.
Int n, punt i coma.
No li donis un valor encara, perquè que no cal de moment.
>> Però ara aquí, avís - això seria un error molt fàcil.
No vull a l'ombra del meu anterior declaració de n.
Vull fer servir el que n realment existeix.
I ara, en la línia 10, Assigno un valor n.
No obstant això, en línia de sis, declaro n.
I jo també puc o no puc utilitzar-lo en la línia 12 ara?
Perquè puc entre els quals arrissat claus és N declarat ara?
El que aquí a la línia cinc.
Per un aquí a la línia 14.
Així que si ara puc ampliar, guardar l'arxiu, vagi una còpia en i executar make positiu,
compilat aquest moment.
Així que això és ja el progrés.
Retallar. . / Positiva, Enter.
>> Exigeixo que em dones un enter positiu.
Negatiu 1.
Negatiu 2.
Negatiu 3.
Zero.
Una.
I gràcies pel qual el que ara s'imprimeix.
>> Déjame intentar una altra cosa, per curiositat.
M'ha informat al'entrada un enter.
Però i si en comptes escric en be?
Així que ara veu un prompt diferent -
torneu a intentar.
Però enlloc de la meva codi Què vaig escriure torneu a intentar.
Així que, probablement, és el reintent prompt ve, què li diries?
Sí, des GetInt () en si.
Així que una de les coses que fa el personal de CS50 per vostè, almenys en aquests primers
setmana, és que hem escrit alguna quantitat de comprovació d'errors per assegurar-se que si
truqui GetInt (), vostè almenys tornar a un int de l'usuari.
No rebrà una cadena.
No rebrà un char.
No va a aconseguir alguna cosa més en conjunt.
Rebreu un int.
>> Ara, potser no sigui positiu.
Potser no és negatiu.
Nosaltres no garantim voltant d'això.
Però anem a molestar a l'usuari que torni a intentar, reintent, torneu a intentar fins que ell o ella realment
coopera.
De la mateixa manera, si ho faig 1.23, això no és un enter.
Però si jo escric en, diguem, 50, que em dóna un valor que jo volia.
>> Està bé.
Així que no està malament.
Teniu preguntes sobre el que acabem de fer?
La conclusió clau és, per ser clars, no tant el bucle, el que hem vist
abans tot i que no tenim realment utilitzat, però el tema d'abast, on
les variables només poden ser només poden utilitzar dins d'un cert marge especificat.
>> Bé, permetin-me abordar el suggeriment que va fer prèviament, la d'un
variable global.
Com acotació al marge, resulta que una altra solució a aquest problema, però
típicament una solució incorrecta o una solució mal dissenyat, és
declarar la variable com el que és cridada una variable global.
Ara estic una mica de violar la meva definició d'abast perquè hi ha
ni claus a la part superior i la part inferior d'un arxiu.
Però la implicació que és que ara, en línia de quatre,
n és una variable global.
I com el seu nom indica, és només accessible a tot arreu.
>> Rasguño en realitat té aquestes.
Si ha utilitzat una variable, es pot recordar has de triar si és per
aquest element sprite, o per a tots els sprites.
Bé, tots els sprites és només el més clar manera de dir global.
Sí?
Ah, bona pregunta.
>> Així recordar que en la primera versió del meu codi, quan incorrectament
n declarats i definits en la línia de nou -
Jo vaig declarar com una variable i jo li vaig donar un valor amb
l'operador d'assignació -
això em va donar dos errors.
Un d'ells, el fet que n no es va utilitzar, i dos, que en la línia 11
només que no va ser declarat.
Així que el primer que jo no ho vaig fer direcció en el moment.
No és estrictament un error declarar una variable, però no la fem servir.
Però una de les coses que hem fet en el CS50 aparell, deliberadament,
pedagògicament, és que hem barri puja el expectatives que el compilador crea
Assegureu-vos que està fent les coses no només correctament, però molt bé.
>> Perquè si vostè està declarant una variable com n i mai utilitzar o fer-lo servir
correctament, el que es fa aquí?
Realment no serveix per a res.
I és molt fàcil amb el temps, si no configuri el seu propi ordinador en
d'aquesta manera, a només ha codi que té petits romanents aquí, les restes allà.
I mesos després, un mira cap enrere i vostè és com, per què és aquesta línia de
Codi d'allà?
I si no hi ha una bona raó, no beneficia a vostè o els seus col · legues
en el camí a haver de ensopegaran llavors.
>> Com acotació al marge, on està que ve?
Bé, recorda que cada vegada que compilem programa, totes aquestes coses són
sent impresa.
Així que anem a tornar a aquest.
Però, de nou, fer és una utilitat que automatitza el procés de recopilació de
executar el compilador real anomenat so metàl · lic.
Aquesta cosa, veurem amb el temps, té a veure amb la depuració amb un especial
programa que es diu el depurador.
Això té a veure amb l'optimització de la Codi - més sobre això en el futur.
Std = C99 -
això només significa utilitzar la versió de 1999 de C. C ha estat present més temps que
això, però van fer algunes bones canvis 10 més fa anys.
>> I aquí els rellevants.
Estem dient que fer tot el que prèviament hauria estat una advertència
un error que impedeix l'estudiant de compilació.
I mitjans de paret fan que per a un manat sencer de les coses, no
només en relació amb les variables.
I llavors m'ho dius desplaçar-se fins Al final d'aquesta línia.
I això, també, que finalment va a tornar.
Això és, òbviament, el nom de l'arxiu que estic compilant.
Això recorda el nom del fitxer Estic sortida com el nom
del meu programa executable.
Aquesta-lcs50 només significa utilitzar el CS50 biblioteca i els zeros i uns que
el personal va escriure i compilar abans aquest any, integrar
que en el meu programa.
>> I ningú sap el que és-lm?
És la biblioteca de matemàtiques, que és aquí, fins i tot si ets
sense fer res de matemàtiques.
És només proporciona automàticament que ens fan.
>> Bé, deixa fer un altre exemple aquí mitjançant l'obertura d'un nou arxiu.
I m'ho dius salvar aquest com string.c.
Resulta que mentre parlem de les dades tipus actuals, hi ha fins i tot més
passant per sota de la campana el que hem vist fins al moment.
Així que permetin-me ràpidament fer un programa ràpid.
Inclogui stdio.h.
I vaig a guardar això.
I ja saps, no em deixis fer l' mateix error una i altra vegada.
Inclogui cs50.h.
I me n'aniré endavant ara i fer int main (void).
>> I ara simplement vull fer un programa que fa això - declarar una cadena
anomenada s i obtenir una cadena per part de l'usuari.
I permetin-me fer una mica de instruccions aquí -
si us plau dóna'm una cadena - així l'usuari sap què fer.
I llavors aquí sota d'aquest, Vull fer el següent -
per int i en zero.
Un cop més, els informàtics solen començarà a comptar des de zero, però podríem
fer que un si realment volíem.
Ara em faré i és menor que la longitud de la cadena del s.
Així strlen -
S-T-R-L-E-N -
de nou, és concisa perquè és més fàcil per escriure, tot i que es tracta d'un
poc críptic.
>> Aquesta és una funció que no hem fet servir abans, però literalment fa això -
tornarà a mi un nombre que representa la longitud de la cadena
que l'usuari escriu.
Si s'escriuen en hola, tornaria cinc perquè hi ha cinc
lletres en hola.
Llavors, en cada iteració de aquest bucle, i plus plus.
Així que de nou, un estàndard de construcció, fins i tot si vostè no està molt molt còmode o
familiaritzats amb ella encara.
>> Però ara en cada iteració d'aquest bucle, compte del que faré.
Vull seguir endavant i imprimir un sol personatge -
per% c barra invertida n en una nova línia.
I després, ja saps el que vull fer?
Qualsevol que sigui la paraula és que l'usuari escriu en, com a hola, vull imprimir
H-I-L-L-O, un caràcter per línia.
En altres paraules, vull arribar a la caràcters individuals d'una cadena,
el qual fins ara una cadena acaba estat una seqüència de caràcters.
>> I resulta que jo puc fer s, suport, I, claudàtor de tancament, tancament
entre parèntesis, punt i coma.
I jo he de fer una cosa més.
Està en un arxiu anomenat string.h strlen que es declara.
Així que si vull fer servir aquesta funció, He de dir-li al compilador,
esperar per usar-lo.
Ara vaig a seguir endavant i fer el programa anomenat cadena.
Dot, barra, cadena.
>> Si us plau, dóna'm una cadena.
Vaig a seguir endavant i escriu.
Hola, en majúscules, Enter.
I ara noto He imprès el un caràcter després de l'altra.
Així el nou detall aquí és que una cadena, al final del dia, pot ser
visitada per mitjà de la seva individu personatges mitjançant la introducció de la plaça
notació de claudàtors.
I és que una cadena sota el capó és de fet una seqüència de
personatges.
Però el millor d'ells és en la memòria RAM de l'ordinador -
Mac, PC, el que sigui - són literalment, d'esquena a l'esquena -
H-I-L-L-O -
a nivell individual, al costat bytes en la memòria.
>> Així que si vol aconseguir en la vuitena tals bytes, que en aquest bucle hauria
suport de zero, suport d'un, suport de dos, Suport de tres, quatre bracket -
això és zero indexats fins a cinc -
que s'imprimeixi H-I-L-L-O en la seva pròpia línia.
>> Ara, com un teaser, deixa mostrar-te el tipus de coses que finalment serà
capaç d'entendre, almenys amb una mica de mirar proper.
D'una banda, el que inclou en l'actual exemples, si ho desitja, és en realitat
una de les primeres fugides de la presó per l'iPhone.
Jailbreaking significa formació d'esquerdes al telèfon el que en realitat es pot utilitzar en un
divers portador o instal · lació seu propi programari.
I t'adonaràs que això sembla completament críptica, el més probable.
Però mira això.
L'iPhone va ser aparentment va trencar amb un bucle, si un estat, una persona
condicions, un manat de funcions no hem vist.
>> I de nou, no ho farà en primera vista, probablement
entendre com funciona.
Però tot el que tenim sort de prendre per fet en la nostra vida moderna
en realitat tendeix a reduir, fins i tot a alguns d'aquests fonaments que hem estat
mirar.
Deixin-me seguir endavant i obrir una altre programa, holloway.c.
Així que això, també, és una cosa que en realitat no hauria de saber.
Encara que cap dels empleats o que pogués Probablement resoldre això observant
perquè aquest era el codi d'una altra que es va presentar al que és
històricament conegut com un ofuscat C concurs, en el qual escriu un programa
que compila i s'executa, però és tan condemnadament críptica cap ésser humà pot entendre el que
que farà fins que que en realitat executa.
>> Així que de fet, si ens fixem en aquest codi, veure un switch.
Veig principal.
Veig aquests claudàtors implicant algun tipus d'arranjament.
Algú vol endevinar el que aquest programa en realitat
Que si em quedo Holloway?
Sí
D'acord.
Ben fet.
Tan sols el personal i jo no pot entendre el que aquestes coses fan.
>> I ara, finalment, deixa que em vagi per davant i obrir un altre programa.
Aquest -
una vegada més, farem el codi font disponible en línia - això és només
tipus d'agradable a la vista.
Tot el que van fer és prémer el barra d'espai una mica.
Però aquest és el codi real.
Així que si vostè pensa que és bastant, si realment executar aquest en el sistema,
finalment veurà el que pot fer coses com aquesta.
>> Així que us deixem en aquesta nota i ens veiem dimecres.
>> [Reproducció de música]
>> ALTAVEU 2: En la següent CS50, la TFS en escena un motí.
>> ALTAVEU 3: Aquí està.
Posa-ho!
>> [Reproducció de música]