>> [REPRODUCCIÓ DE MÚSICA]
>> ALTAVEU 1: Aquest és CS50 i aquest és el començament de la setmana dues.
Per tant, anem a bussejar a la dreta en alguna cosa és a dir amb errors, per així dir-ho.
Per tant, aquí és IDE CS50 i he detenir amb antelació aquest screen-- maleïda
ella.
Spoiler d'alerta.
Tot bé.
He tirat aquesta pantalla aquí, que té un programa molt simple.
Si ens desplacem cap avall, la majoria d'això és simplement comenta,
però aquí a les línies 13 a través 17 tenim un programa.
>> És sintàcticament vàlida, el que significa que si Va compilar ell, compilar i executar,
però és buggy.
Aquest programa pretén en els comentaris sobre de la tapa que s'hagi d'imprimir 10 estels,
però no ho fa.
I en base a la seva experiència, o aviat a ser experiència amb C,
Potser lògicament destriar per què això és, de fet, amb errors?
Sí?
AUDIÈNCIA: Es va de zero a 10.
Això és 11 iteracions.
ALTAVEU 1: Sí.
Així, va de zero a través d'e iguals a 10,
que per descomptat és d'11 iteracions.
Per tant, es va a impressió, de fet, 11 estrelles.
Per tant, la convenció de la informàtica en la majoria dels llenguatges de programació
és, de fet, només per començarà a comptar des de zero,
però comptar fins, però no a través de la valor que en realitat importa.
>> Ara, això és una cosa que Pren una mica de temps per acostumar
i fins i tot Scratch, dissenyada com és per als no programadors o no equip
científics i per als nens en gran mesura, està dissenyat per tenir
començar a comptar en general a la una.
I això està bé.
Pot començar a comptar absolutament en un si això és més còmode.
I comptar fins ia través de 10, però et donaràs compte particular aquesta setmana
i més enllà que tan moltes coses en la programació
suposar que 0 és el primer dígits amb què es compta,
que vostè va a resultar més fàcil només per entrar en aquest hàbit de partida
des de zero i comptar fins al valor vostè es preocupa en aquest moment de la
aconseguir anar.
>> Per tant, que s'ha fixat que.
Canviem el menor o equival a poc menys.
Fem una ullada a un segon exemple aquí.
>> Així, aquest programa també afirma en la seva comenta sobre de la tapa que s'hagi d'imprimir
deu estrelles, però no ho fa.
Quin és l'error aquí?
>> Així, què-- i ho sento, siguem clars.
10 estels.
Un per línia, però no és així.
Així que, de fet, em va deixar anar endavant i compilar aquest perquè és una mica menys
aclarir basat en aquesta descripció.
Déjame anar al nostre directori d'origen.
Fer cotxet un tall de punts, un buggy.
OK, veig 11 estrelles, que segueix sent problemàtica,
però també són tot en una sola línia.
Quin és el problema aquí?
Sí.
AUDIÈNCIA: [inaudible].
ALTAVEU 1: Sí.
Així que aquesta és una subtilesa que pot Recordo haver-me fet un breu esment de.
Tot i que tot es veu bastant, i està molt ben sangria,
i com que es veu a les ratllades com en aquesta línia 16 i 17 són,
de fet, amb sagnia sota aquest bucle.
Això és irrellevant.
L'equip no es conèixer o veure l'espai en blanc.
L'espai en blanc és només per nosaltres els éssers humans, estilísticament.
L'equip no sap quan es té claus, que seria, de fet,
solucionar aquest problema.
>> Així, si en realitat vam ser i posar explícitament en aquestes claus
això seria fer això deixant en clar que el compilador
que realment vull per executar dues línies de codi nou,
i una altra, i una altra.
Però quina és l'explicació fonamental?
Oi?
Nosaltres no estrictament necessari arrissat es prepara tot el temps,
tot i que és probablement el millor pràctica per entrar en l'hàbit de totes maneres
encara que afegeix dues caràcters al seu codi. Per què?
>> AUDIÈNCIA: [inaudible]?
ALTAVEU 1: Sí, així que és una altra solució en conjunt.
Oi?
Sobretot si a primera vista no ho fa realment apreciar el que està passant.
Bé, segurament podríem acaba de fer dues coses alhora
i simplement evitar el problema del tot.
I això està bé, però ara, per als propòsits de l'actualitat, el que
és l'explicació per l'error?
Per què eren totes aquestes estrelles en una línia?
Sí?
>> AUDIÈNCIA: Sembla que si vostè té una línia de codi,
vostè pot fer-ho sense ells.
ALTAVEU 1: Exactament.
Això és només una convenció humana.
La gent s'adona que és un mica molest o avorrit
a haver de posar les claus de tot de les vegades si el que vols fer
és executar una línia de codi.
Per tant, els éssers humans van decidir alguns Fa temps que això està bé.
Si vostè vol posar tota la seva bucle en aquesta sola línia com aquesta,
això està bé amb el single punt i coma al final.
Però només es pot fer una d'aquestes línia sense les claus.
>> Així que, quan la guia d'estil CS50 com li per assenyalar,
veuràs que en general, és bon hàbit
per entrar en això fins que estiguis pèrdua bastant còmode
d'aquest tipus de convencions i fer la seva pròpia cosa.
Mentre estàs acte consistent.
I parlarem més sobre estil una mica més tard avui.
>> Per tant, permetin-me obro un altre programa.
Per descomptat, hem fixar que el 10 també.
Déjame anar endavant i escric un veritable programa ràpid que vaig a trucar,
diguem, llaç dot C. Així, llaç dot C. I en bucle punt C que tindré,
incloure E / S estàndard punt H int void main.
I ara farem, de fet, un bucle.
Així, 4 int I aconsegueix zero.
I és menys de, diguem, 50.
I més, més.
I llavors aquí anem seguir endavant i no imprimir F.
I després vull imprimir R i una nova línia, punt i coma.
>> I això ha d'imprimir tot el números de zero fins a 50?
Alguns cap assenteix.
Uns núms.
Quin és l'error ja?
Quin és l'error fàcil que vaig fer?
Sí.
>> AUDIÈNCIA: [inaudible].
ALTAVEU 1: Sí.
Així que, encara que sembla com això és el que em proposo,
Recordo que I és també Només un caràcter ASCII.
>> Per tant, si jo dic, imprimir "I."
És, literalment, va imprimir I. Per tant, si jo
voler plug-in d'un marcador de posició valor que en realitat necessito fer això
i després plug-in de la valor d'I dinàmicament.
Altrament, només vaig a obtenir 50 d'I a la pantalla.
>> Així que, deixa anar endavant i fer d'aquest bucle, executar-lo,
i, de fet, tenim tot el camí a través de 49.
I si em desplaço en el temps que veig el número zero al principi.
>> Bé, i si em espècie de pota?
Què passa si faig això?
El fet que jo no estic pensant.
Quin és aquest programa.
Una vegada que estàs compila i s'executa, va a fer lògicament?
>> AUDIÈNCIA: Res.
>> ALTAVEU 1: Res.
Perquè és això?
>> AUDIÈNCIA: I està dissenyat per al zero.
Per tant, la condició és falsa.
ALTAVEU 1: Sí, exactament.
Tot el codi és correcte, sintàcticament.
Això compilar aquest codi s'executarà, però no ho és
farà res útil perquè jo em inicialitzar a zero.
Després vam comprovar, és que més del 50?
Òbviament, no, no ho és.
Així que el bucle no s'executa en absolut.
>> ¿I si fem alguna cosa una mica més temerari?
Així que, què passa si ho fem com int I aconsegueix zero.
I ara em deixa utilitzar l'estona bucle, que era una altra condició.
I mentre jo dic, mentre que I és més gran que o igual a zero i, a continuació, en l'aquí
seguir endavant i guardar l'arxiu, feu bucle.
I estic a punt d'executar.
Què vaig a veure això temps amb un bucle while?
Sí.
>> AUDIÈNCIA: Un bucle infinit?
>> ALTAVEU 1: Un bucle infinit?
Sí, i per què?
AUDIÈNCIA: Perquè és sempre zero.
ALTAVEU 1: Sí.
Així que s'inicialitza a zero.
Per descomptat que és sempre més gran que o igual a 0 com a resultat.
Així que, jo només vaig a veure això infinitament.
I ara, aquest ha arribat una vegada o dues vegades al capdavant del curs.
Què passa quan vostè tenir un bucle infinit?
>> AUDIÈNCIA: Control C.
ALTAVEU 1: Sí.
Així Control C eventualment respondre.
Per desgràcia, hem imprimim milions i milions de zeros ja
per la qual cosa l'equip té tipus de tinc davant meu.
Per tant, va ignorar em per una mica.
Però si vostè acaba de colpejar Control C uns pocs vegades en el seu teclat Mac o PC,
finalment deu, de fet, donar per acabat.
I si no, li mostrarem alguns tècniques abans de temps en el qual
en realitat pot matar la força als programes, igual que en Windows i Mac OS,
si cal.
Però anem a intentar alguna cosa més.
Anem realitat Increment I. És això encara serà infinit?
Déjame córrer això.
I ara vostè pot classe de veure el que està passant.
Això, també, és un bucle infinit.
Però això és una mica d'una pregunta amb trampa.
¿Això va a imprimir números de sempre?
>> AUDIÈNCIA: No.
ALTAVEU 1: No.
Per què?
He sentit que alguns ens aquí.
Algú-- Sí.
AUDIÈNCIA: No té prou bits per mantenir realment està passant.
ALTAVEU 1: D'acord.
Així que no tinc prou bits per seguir endavant.
Llavors, què passarà?
És només va a parar?
>> AUDIÈNCIA: En algun moment que tancarà ell--
ALTAVEU 1: Es tancarà el down bucle, però per què?
¿Què passarà al final de les seves fronteres?
Sí?
AUDIÈNCIA: Es farà un cicle de nou als nombres negatius.
ALTAVEU 1: Per als nombres negatius, o si només estàvem tractant positiu,
zero com a mínim.
Així que sí, absolutament.
Recordem que vam veure l'última vegada que si incrementar els seus trossets massa vegades,
i vosaltres Fore desbordament la capacitat de la seva int
o el que sigui el tipus de dades és, ets va a embolicar al voltant, probablement,
dos nombres negatius.
O si vostè ha especificat que el seu aquest producte ha de ser positiva,
que es pot fer, però nosaltres no hem vist això encara,
podria acabar almenys tornar a zero.
Encara que, en realitat si.
En aquest cas, negatiu números, en el cas
el bucle es va a acabar perquè no és, de fet,
més gran que o igual a zero si és negatiu.
>> Així que, per desgràcia, com llarga hauríem d'esperar?
En aquest moment estem fins què, 2000000-ish?
Som com 2 mil milions, anem a haver d'esperar
fins que realment podem veure aquest símptoma.
Però podem veure una mica més ràpid, maybe-- anem a veure si podem interrompre.
Vine.
Fins i tot els menús estan apareixent lentament.
Tot bé.
Per tant, anem a tornar a que en poc temps.
És una bona temps-- maleïda sigui, els cadells.
>> És un bon moment perquè alguns anuncis.
Així que, si et poden agradar per participar en YHack,
que és ser un esdeveniment patrocinat pels nostres amics de Yale.
I, de fet, alguns el curs de TFS a Yale estan involucrats amb això.
YHack és una organització internacional Hack-a-thon organitzada per i va sostenir
a Yale, que reuneix 1.500 de la mateixa manera que els hackers de mentalitat i creatius tots
el món.
Si això és d'interès, fer una ullada aquí.
Si això és massa breument en la pantalla, fer una ullada a les diapositives d'avui
per a la direcció URL per yhack.org.
Per tant, també a pocs anunciar.
Així que, oficialment seccions començaran la setmana que ve aquí i New Haven.
Recordeu que vaig a rebre una correu electrònic a la fi d'aquest cap de setmana d'allò més probable.
Es triga molt de temps per CS50 a la secció,
donades totes les persones en el classe i tothom es mou al voltant.
I tots els becaris d'ensenyament ' horaris també estan encara solidificant,
però estigui atent a un correu electrònic i si cal ser, pot tornar a la secció d'allà després.
>> Study.cs50.net.
Per tant, fins i tot si vostè és un participant constant en seccions, adonar-se que gairebé tots
dels recursos que fem servir en seccions estan a disposició del públic en el CS50
Estudiar a aquest URL aquí.
Per tant, si desitja mai per tornar opinió el material de la secció, o llegir per davant,
o no es pot fer una mica de setmana, adonar-se que les diapositives de la mostra,
i els problemes i les definicions, i més estan tots allí també.
>> Les hores d'oficina reprenen avui, i demà, i dimecres,
i el dijous comprovar el supòsit de lloc web per a l'horari.
>> I també, ara el llançament avui és CS50 Discutiu.
Per tant, sempre que vostè té preguntes per entre si o per al personal de l'assignatura,
i generalment estan treballant en un conjunt de problemes,
t'adones que no ho fa necessàriament de donar volta a la humana pròxima a vostè.
Si no hi ha ningú allà, vostè pot arribar a nosaltres i companys de classe
en línia a través CS50 Discutiu.
Per tant, aquesta és una discussió pensió per al curs,
i adonar-se que aquest és potser el millor
lloc per començar quan vostè té preguntes quan fora de les hores d'oficina
en particular.
>> Per dur començaran aquesta setmana també.
En Foc i Gel [Inaudible] a New Haven.
Fes una ullada a el curs de pàgina web amb la finalitat de confirmar la seva assistència.
En primer arribat, primer servit per això.
Si no rep en aquesta setmana farem aquests divendres majoria de tots els
durant el termini.
>> OK, i ara una paraula sobre la classificació.
Especialment en entrar en un problema establir un, que està fora aquesta setmana,
i el problema va fixar dos ia partir de llavors.
Com fem per avaluar conjunts P i avaluar la qualitat dels mateixos?
Així, és de quatre eixos que utilitzem en CS50, i són aquests quatre aquí.
>> Àmbit d'aplicació, que captura en una numèrica base de tot el del conjunt P
Què fer front a.
Es correspon aproximadament amb esforç, i és la nostra forma de capturar
¿Va tractar la meitat de la P set, tot el conjunt P.
Això és fàcil d'aconseguir perfecta puntuacions en si ho fa, de fet,
tractar tots els aspectes del conjunt P.
Així, tingues-ho en compte.
>> La correcció és exactament això.
El seu treball codi com l'especificació i com a solució de la mostra el personal '
suggereixen que el seu codi deu, de fet, treballar.
Check 50, si no s'ha complert amb el però, està en P establir una especificació
i de la voluntat general, donar-li respostes sí / no
pel que fa a si el codi és correcte.
Almenys en el que anem Per avaluar en base a les proves
que es corre dins d'aquest programa.
>> El disseny és molt més subjectiva.
Això és el ben escrit és el seu codi.
I això és una cosa que vas a millorar en el transcurs del temps,
i és una cosa que anem a proporcionar més informació qualitativa sobre.
I per disseny que podria significa abans d'hora
podria tenir la temptació d'alguna P set de fer alguna cosa loopingly,
però per tenir potser tres, o quatre, o 5 bucles niats davanteres o mentre niat
bucles.
Això generalment ha començar a fer tremolar
i seria generalment mal disseny considerat.
I vostè començarà a veure a la classe i De la classe que bones maneres de fer les coses,
males maneres de fer les coses que podrien ser tots correctes, però no
necessàriament ben dissenyat.
Igual que escriure un assaig.
Vostè pot ser capaç de posar paraules en una pàgina que són gramaticalment correcte,
però l'assaig o la tesi que estan en és
completament incoherent o poc convincent.
I el que podria ser l'anàleg al món escrit de mal o bon disseny.
>> I l'estil, també, és bastant subjectiu.
Però almenys que esperem coherència.
Això és el bonic que és el seu codi.
Són coses molt bé sagnia?
Són les seves variables bé nomenats / Són tots de les seves parèntesi i claus
alineat com haurien de ser?
Tenim una guia d'estil CS50 com el conjunt problema t'orientarà en.
Els més còmodes són la benvinguda a allunyar-se aquest
sempre que vostè treballa per compte consistent.
I això, també, és una lliçó reforçarem en la secció.
Així que, si tot això era una mica , Explica el conjunt i les seccions P ràpida
vaig a entrar en més profunditat en poc temps.
>> Però en general, tenim molt pocs cubs per CS50.
Les puntuacions són generalment en una escala d'un a tres, o d'un a cinc.
Estem literally-- i jo no podem dir això prou en la primera setmana.
Tres és bona.
Així, tot i que, sí, tres de cinc anys normalment, matemàticament,
podria ser un 60 per cent o menys com un D.
Tres és, de fet, bona.
I, de fet, esperem la majoria dels estudiants a la classe
per començar el terme al voltant dos en dos, i tres, i quatre potes.
Probablement no tants cincs.
No hi ha molts altres.
Però en general per iniciar en el punt ideal de la corba
de manera que a mesura que passa el temps, en realitat hi ha espai per a,
i oportunitats per a la progressió superior.
Així que, per favor no equiparar 3 amb 60%.
És molt més abstracte que això.
La fórmula amb la qual es calcula graus es ponderaran de la manera següent.
Correcció val més.
Disseny val una mica menys.
Estil val una mica menys.
I això generalment captura la quantitat de temps
que va en aconseguir cada un d'aquests eixos just.
L'estil és molt fàcil, ha de ser súper ràpid,
però és un hàbit fàcil per obtenir mandra.
La correcció podria prendre que la major part del temps.
Perseguint alguns podrien error prendre aquesta hora extra o més,
i així, el marcador en última instància, que capta.
I per això, ara una paraula més greu.
Des CS50 té la distinció, per bé
o per mal, de ser potser millor informat
amb els temes de l'acadèmica l'honestedat de la majoria de qualsevol altre curs.
I, en efecte, és al meu coneixement que enviem més estudiants, per desgràcia,
amb fins disciplinaris cada any com a conseqüència d'això. Per tant,
en l'interès de la plena divulgació, parlarem breument
sobre el que succeeix en CS50, i el que pot fer, i el que pot tenir en compte.
>> Així doncs, aquí des de 2007, quan Vaig heretar el curs,
és el nombre de casos de taula Ad.
Junta d'anunci és disciplinària de Harvard cos, o ara el Consell d'Honor,
a la qual es refereixen els casos quan els estudiants fan alguna cosa que el curs de
programa considera irraonable.
No hi ha patró veritable aquí, diria jo.
Es fluctua en el anys, però en general
aquest és el nombre de els casos que es coneixen.
El nombre d'estudiants que estan involucrats?
És també varia.
En general, l'any passat per exemple, 29 estudiants de la Universitat de Harvard
eren Ad embarcats, per així dir-ho.
29 d'ells els estudiants actuals, Dos d'ells estudiants anteriors,
que estaven col·laborant d'alguna manera desfavorable.
I després, en termes de la percentatge, en general al voltant de 3%
de la classe que, per desgràcia, fa que aquest tipus de decisions.
>> Així, l'any passat va ser de 3,5% del total d'estudiants de CS50
que era Ad embarcats, per així dir-ho.
>> Així que, què vol dir tot això?
I què és el que realment fem?
>> Així, per a la divulgació completa, ens absolutament, com els informàtics,
comptar amb eines de programari a la nostra disposició i és molt fàcil per a nosaltres, per ser justos,
companys de classe que altres que no són creuar aquestes línies per creuar comparar
cada presentació aquest any en contra de cada presentació durant els últims vuit anys.
Programari fa això.
I en última instància, és els ulls humans que decideixen
si o no fer cap referència la matèria per a la seva posterior adjudicació,
però el programari sense dubte ajuda.
I això, francament, és per això que crec que tenim un nombre tan gran de CS50.
No és perquè CS50 estudiants o estudiants CS més
generalment són menys honestos que qualsevol altre estudiant,
és només tenim la eines i les tècniques
amb la qual aprofitar aquesta primera passada.
>> Però sí mantenir un ull en totes aquestes coses
així, de nou, en interès de la reconeixent el treball que s'està posant
en per una súper majoria de la classe.
I la política del curs en l'honestedat acadèmica,
tot i que és un munt de paràgrafs de llarg amb un munt de bales
que són d'esperar bastant llegible, que realment no es redueixen a ser raonable.
I la millor regla d'or que oferim dins del pla d'estudis
És aquesta, l'essència de tot el treball que
sotmetre a aquest curs ha de ser la seva.
I de fet, en gairebé tots els casos referits per acció disciplinària
que era a causa d'algun estudiant a altes hores de nit típicament tornar el seu codi
més pura i simple a un company de classe, que després el va adoptar
en la seva totalitat o significativament dels mateixos.
>> Però en realitat, això està bé.
I de fet, a l'oficina hores, les tires de paper
vostè ha estat lliurat si véns per l'oficina hores la setmana passada encoratja tant.
Tens tota la benvinguts i encoratjats
per discutir els butlletins de problemes amb els companys de classe.
Per ajudar els altres quan ensopegada.
Però en general, la regla d'or ha de ser això, "quan vostè està demanant ajuda,
vostè pot mostrar el seu codi als altres, però vostè no pot veure la seva ".
Així que, en altres paraules, si estic lluitant amb algun conjunt P
i jo estic assegut allà al menjador saló, oa la biblioteca,
oa l'aula tractant de trobar alguna falta,
Certament puc mostrar el meu codi a la meva pantalla
a la persona que s'asseu al costat per a mi, sens dubte el personal,
sinó també un company de classe.
Però si la solució que el meu company de classe ofereix és, oh,
aquí només fer una ullada al que Ho vaig fer, que creua la línia.
>> I m'atreviria a dir que és en general una cosa raonable per a la majoria de la gent
de detectar molt fàcilment la línia de.
I així, consulteu el pla d'estudis per a més detall.
I ara un dels més aspectes controvertits
del programa CS50 que vaig pensar que parlaria en conclusió aquí
és l'anomenada clàusula de penediment.
Així que, aquí hi ha tota la lletra petita.
Però, en general hem vist en els últims 8 anys o més
que, de fet, gairebé tots CS50 de casos de deshonestedat acadèmica
han estat el resultat de simplement pobres fent tard a la nit la decisió.
El resultat de la tensió, el resultat de falta d'alimentació, la falta de son,
massa sèries P, massa terminis, massa compromisos.
S'acumuli en febrer 1 a.m. Estrès, 03:00 AM, 04:00, amb un termini imminent.
La majoria dels estudiants en aquests casos simplement han pres males decisions
que molt bé podrien lamentar la matí següent si no minuts més tard,
però fins l'any passat no hi va haver vàlvula d'escapament que aquests estudiants podrien
realment obrir-se a abordar realment el problema de front i sense por de ser
arrencat des de la universitat en conjunt.
>> I, de fet, hem introduït aquesta clàusula tot l'any passat,
que diu que si dins 72 hores, tres dies,
de creuar alguna línia prescrit en el pla d'estudis
véns endavant a un el curs de cap i tindrem una xerrada sobre aquest tema.
Encara hi ha alguns dels que resultat, al contrari del que és
ha informat del contrari.
Encara hi ha algun resultat que és accionable pel curs,
en general, la reducció a zero d'un conjunt P o prendre alguna altra acció,
però ho farem, de fet, manejar nosaltres mateixos i no
consulteu el més alt eren el resultat podria ser molt més greus.
I, de fet, per compartir el que va passar l'any passat, en els vuit anys, i ara
nou anys, de l'ensenyament d'aquest curs i després de jugar amb diversos botons,
girant diversos dials en l'últim diversos anys en l'honestedat acadèmica,
i veure per les dades sense aparents impacte, fins i tot dels discursos d'aquest tipus,
Aquest va ser sens dubte el millor hem introduït pedagògicament
en vuit anys al llarg de aquestes línies en CS50.
>> 19 estudiants es van presentar sota aquesta clàusula l'any passat.
Ens prenem cap mesura per set d'aquests estudiants,
determinar que eren innecessàriament preocupat.
Ells no tenien, de fet, creuat una línia, però
va ser una bona xerrada per tenir, però.
Ens ho van treure 11 de les puntuacions que es van presentar.
I en un cas, li preguntem a un estudiant per fer un conjunt de problemes.
Però més convincent, sincerament, amb aquests 19 xerrades,
que era molt més del que s'espera que tinguin, cadascuna d'elles
10 minuts de potser una una hora de durada, també va portar
a la llum una sèrie de qüestions en relació amb problemes familiars, problemes d'amic,
problemes de salut mental que després contracten,
amb la benedicció, resident de l'estudiant degà, o amics, o qualsevol altre número
dels recursos de suport.
Així que això era de lluny un dels millors usos del nostre temps
i un dels millors intervencions.
>> Amb això dit, no tenia d'entrada a la taxa de detecció
de deshonestedat acadèmica en general.
I m'atreveixo a dir, aquest subconjunt dels estudiants d'últim any
era un grup demogràfic que mai abans identificat abans
i mai havia connectat abans.
I així, es tractava de meravelloses històries d'èxit
tot i que van sortir a la llum en menys de circumstàncies òptimes.
Per tant, tingui això en compte com vostè fa, potser,
alguna mala decisió a tu mateix a la nit,
que es recorre tant de temps com l'estudiant en aquesta situació
posseir i presentar perquè puguem tenir aquest tipus de xerrada i tractar amb ell
d'una manera que és educatiu, i després podem deixar-lo enrere al dia següent.
>> Així que sense més preàmbuls, prendre la vora fora d'aquesta conversa,
la raó per la qual els cadells són fins a dir només per trencar el gel per un moment.
I, per desgràcia, tots són el son, però el que se suposava anava a succeir aquí
era tot el món se suposava per sorpresa i tipus de relaxar
després d'això molt pesada conversa.
Però pel que sembla, em vaig posar els cadells per dormir.
Però si vas a CS50 de cadells web Slash,
pots veure'ls tot el dia.
Particularment potser 02:00, o 3.00 hores, o 4:00 del matí a la nit
per veure una mica d'alleujament de la tensió allà.
Així que això és slash cadells.
Tot bé.
¿No era això divertit?
D'ACORD.
Així que, tornant a algun equip ciència, si m'ho permet.
>> Per tant, recordar que l'última vegada que vam començar sense mirar just a principal, que
va ser la funció per defecte, el quan bandera verda clic equivalent,
però també vam començar breument escriure algunes de les nostres pròpies funcions.
I fins al moment cap d'aquestes funcions han estat particularment gran o carnós.
Et fiques en els més grans funcions, probablement, P conjunt 2, P 3 set,
Definitivament P va fixar 4 en endavant.
En aquest moment la majoria dels seus programes, si no tots ells, sens dubte per a P
conjunt 1 es pot fer en la seva totalitat en principal.
Si el seu programa només cinc línies, 10 línies,
fins i tot 20 línies de llarg, perfectament raonable per escriure
tot en principal i de no complicar més el seu codi, però el que estem fent avui
i cap endavant està intentant també introduir algunes bones tècniques de disseny
de manera que ara el codi es torna més complicat i com els problemes
vol resoldre d'obtenir més i més interessant que té, més o menys,
les eines en la seva caixa d'eines amb les que per dissenyar bones solucions a aquests.
>> Per tant, anem a fer una ullada ràpida de tornada a aquest programa des de la darrera setmana, que
va ser funcions zero punt C. I compte que, senzillament,
sembla que això amb dos funcions, el principal i el nom d'impressió.
I pensant a tornar o potser revertir l'enginyeria d'avui,
el que va ser la motivació per introduir una funció en la línia 28 flama,
Nom d'impressió?
O el que era aquest un exemple d'en termes d'un principi o menjar per emportar,
si ho faria.
Alguns murmuris.
Què?
>> Sí descomposició tan funcional és una espècie de la manera elegant de dir,
descompondre el seu programa en les seves parts constituents
i aleshores utilitzar aquestes parts per acoblar un conjunt.
Per tant, això també és només una mica d'un mos ja,
però això és potser fins i tot una millor exemple d'alguna cosa
acaba de cridar l'abstracció.
Oi?
Abstracció serà un dels temes recurrents en CS50
i ciències de la computació més en general, ja que és
una tècnica amb la qual es pot resoldre problemes de manera més eficaç, ja que
pot escriure solucions més intuïtivament i de manera que les escales
i és comprensible per altres persones.
Què vull dir amb això?
>> Així, es podria dir que és molt més fàcil de llegir mirar un programa com aquest,
súper curt que sigui.
Quan vegi en la línia 22 que hi ha una funció anomenada, el nom d'impressió.
Aquest nom només diu el que fa.
Aquesta funció aparentment presa d'entrada entre els seus parèntesis,
i pel que sembla fa alguna cosa, presumiblement imprimeix el nom.
I així, tot i que absolutament podria tenir
fet el que vam fer fa una setmana, que era acaba de prendre aquesta línia real de codi,
desfer-se d'aquest, i obtenir desfer d'aquest tots junts,
quin tipus de resumir distància la noció de la impressió d'un nom.
No m'importa si vostè està utilitzant def impressió.
No m'importa si té una cent S i N. Aquests barra invertida
són detalls molt arcans.
El que m'importa com programador està imprimint un nom.
I així, què millor manera de fer- que per cridar a una funció, el nom d'impressió?
I així, aquesta va ser una de les motivacions per fer alguna cosa com això.
Fer el codi més llegible, més reutilitzable, i també s'auto descriptiva.
Ara, anem a fer una ullada en un altre exemple,
que era un funcions, que teníem aquí.
>> Per tant, aquest és potser encara més convincent perquè, en aquest cas,
No vull que acaba d'obtenir un int.
Vull aconseguir un int positiu.
I resulta que per obtenir un resultat positiu int que ha de fer un munt de treball de camp.
Oi?
No és una simple línia cridar com el nom d'impressió era,
que és certament menys convincent.
>> Per obtenir un int positiu, logically-- m'ho dius a mi desplaço cap avall per ocultar això.
Què has de fer?
Com totes les eines que tenen en aquest moment es
coses com definició d'impressió de Standard Biblioteca i també de la biblioteca CS50
tenim Obtenir Int, i obtenir Float, Obtenir Llarg Llarg, Get String,
però l'únic, Germane, en aquest moment és aconseguir Int.
Per tant, si l'única eina que tens en la seva caixa d'eines és Aconsegueix Int,
com fem per a la implementació que per aconseguir int positiu?
>> AUDIÈNCIA: Crear un registre i se'ls de si l'entrada que van donar
va ser positiu o no.
>> ALTAVEU 1: Perfecte.
Exactament.
Una altra de les eines que tenim a la nostra caixa d'eines d'una o dues setmanes
és només la construcció de bucle.
I així, si, si fem servir un temps llaç, o do while, o un primer pla
bucle que probablement podria aconseguir lluny amb qualsevol dels que estan en alguna forma.
Podem aplicar la noció de get int positiu només per l'ús Aconsegueix Int,
i després simplement seguir cridant- de nou i mantenir molestar a l'usuari
fins que ell o ella realment ens dóna el que volem.
>> I ara, aquest abstracció del procés
d'aconseguir un int positiu en una funció anomenada
Obtenir Int positiu és una mica més convincent perquè mira això.
Aquests són com 10 més línies de codi que
estan involucrats en l'obtenció d'un int positiu, i jo no m'importa com ho facis.
L'única cosa que importa és que vostè pot fer-ho, i per això m'he
ocults tots aquests detalls darrere d'un funció anomenada Get Positiu int que,
de fet, té aquesta do while.
>> I veure la setmana passada per la sintaxi allà, però simplement declara N,
i s'imprimeix el instruccions per a l'usuari.
Crida Obtenir Int i després comprova aquesta condició de nou, i una altra,
i una altra fins que l'usuari coopera.
>> Així que ara, a poques comprovacions de sanitat.
Per a aquells familiaritzats potser amb una mica de programació,
Per què es declara N, per què crec N fora del bucle Do While?
Per què és en la línia 29 i no en com 33, per exemple.
>> AUDIÈNCIA: Perquè quan declarar fora, tipus
de més, la scope-- més gran
>> ALTAVEU 1: Good.
>> AUDIÈNCIA: --i si es declara que dins del bucle, [inaudible]
perquè no sap res d'ell.
ALTAVEU 1: Exactament.
Si puc simplify-- és un problema d'abast.
I abast es refereix al context en el que hi ha una variable o és utilitzable.
I la bona regla d'or aquí és que en general, quan es declara o crear
una variable només es pot utilitzar a l'interior dels més propers abraçar claus.
Llavors, què vol dir això?
Si, en canvi, desfer això i vaig amb cosa que se sent una mica més simple.
Oi?
>> Línia 32 només es veu més net per a mi ara.
Estic fent les dues coses a una vegada i després assignar
la mà dreta a la mà esquerra.
El problema ara es basa en que la definició de l'àmbit d'aplicació
N és que es pot utilitzar en línies 31 i 32 a l'interior d'aquest bucle,
però on per aquesta definició pot no ser utilitzat?
D'acord, què?
Sí.
>> AUDIÈNCIA: 35.
>> ALTAVEU 1: 35.
Definitivament no 35.
I també on si no?
AUDIÈNCIA: 34.
ALTAVEU 1: Fins i tot 34 és problemàtic perquè és
fora de les claus.
I així, de fet, anem a veure què passa.
Oi?
Això pot semblar una mica intuïtiva o no podria,
però anem a veure el que el compilador ha de dir quan
entrem en directori d'origen d'avui.
Fer funció un.
Déu meu.
Bé, finalment vaig acabar que, per cert.
Tot bé.
¿I quin és el problema aquí?
Molt arcana a la vista.
Però això és el que typed-- fer funcionar un.
Això és el que indueix, que és en realitat
utilitzant el so metàl·lic del compilador amb algunes d'aquestes banderes
que veurem de nou en poc temps.
I de nou, busqui sempre en el primer d'error,
a causa que només podria tenir una cascada efecte de sentit en altres línies.
>> Així que el que això significa és que el problema està en funció 1.c.
Està en la línia 32.
I és a la columna, o caràcter, 13.
Així que quan el seu editor de text que pot ajudarà a identificar on és el problema.
Així que si em desplaço cap amunt, el que és la línia 32?
Això és de fet aquest això ja està ressaltat
dret aquí-- no utilitzada n variable.
Però no és inusitat.
Ho estic fent servir.
Però el compilador de confondre, perquè només existeix dins d'aquest àmbit.
I el que no puc usar aquí.
No puc usar aquí.
I el compilador, per tant, ni tan sols importa que estic tractant.
Sembla ser inusitat dins del seu abast real.
>> Així que podem ampliar l'abast fent exactament el que vam començar con-- int n.
I tot i que no és així mirar tan elegant, potser,
i estem tenint una línia addicional aquí, ara és l'abast de tothom.
Així que anem a intentar-ho de nou.
Així que la funció d'un.
Niça.
I ara si em si jo va executar la funció un, anem a donar-li negatiu 10,
negatiu 1, 0, 1, i de fet funciona.
>> Així que no hi ha una altra solució aquí.
Tu saps que?
Què passa si jo realment estic lluitant amb això?
Jo no sé on és el n suposa que ha d'anar.
Tu saps que?
Jo només vaig a posar tot el forma a la part superior del meu arxiu aquí.
Com seria això fer, què et sembla?
Sí?
>> AUDIÈNCIA: [inaudible].
ALTAVEU 1: Sí.
Així que m'he fet global, per dir-ho.
Si vostè té una variable que està fora totes les funcions que se li permet,
i el codi ha compilar i n ara serà accessible no només en get
int positiu, però també en què main-- és una mica preocupant perquè hi ha
ia una n en principal, de manera que més en què en tan sols un moment--
però això seria considerat un mal disseny.
Tot bé.
Si vostè ha de recórrer a alguna cosa així com, oh, vaig a
només cal posar aquí perquè el codi sembla compilar
en general, no és la millor pràctica.
Més aviat vol triar el més estret possible abast
per a les variables, el que significaria va amb el nostre disseny inicial, que
és aquí.
>> Ara com un a part, si tinguessis una forma idèntica amb nom de variable d'aquí,
la forma c manejaría esto-- encara que això no va a succeir massa often--
és que això segueix sent perfectament bé aquí.
Però aquesta definició de n en línia 22 hi haurà ombra el global.
Així que aquest treballarà dins principal, i el global
en realitat s'apliquen quan vostè està en aconseguir int positiu però més sobre això
una altra vegada, però només Per als curiosos.
>> Així que en resum, podem solucionar aquest problema aquí.
Ara anem a esmicolar altres dues peces abans de veure una última línia de codi
en aquest programa.
Obtenir int positiu.
A la banda esquerra de la seva paraula és la paraula int.
Què significa això què et sembla?
Fins ara hem vist majorment buit.
Sí?
>> AUDIÈNCIA: És el tipus de variable que vostè està preguntant sobre.
>> ALTAVEU 1: Sí, és el tipus de, deixa No diguis variable, però el tipus de valor
que jo estic demanant tornar.
I de fet, això és intuïtiva aquí, és d'esperar.
Oi?
Si vols aconseguir un int positiu, què és el que
vol que el function-- com el nostre voluntaris de la setmana passada
a lliurar una còpia d'una peça de paper amb un int en ell?
I així hem especificat que el tipus anomenat de retorn d'aquesta funció
és aconseguir int positiu.
Si no volem que tornar res, dius buit.
Si vols que torni una cadena, dius cadena.
Si vols que torni un flotador, dius flotador.
Però l'únic que s'aplica aquí lògicament, perquè estic fent servir get int,
tot i que m'estic limitant a valors positius, és retornar un int.
>> Així que per contra, què significa que hi ha un buit en parèntesi?
Què fan els parèntesis generalment definir?
Sí?
>> AUDIÈNCIA: Significa la funció de en realitat no aconseguir-ho.
>> ALTAVEU 1: Significa la funció de en realitat no aconseguir què?
>> AUDIÈNCIA: Una entrada.
>> ALTAVEU 1: Una entrada, en absolut.
Així que de fet, si el parèntesi aquí s'especifica buit,
Això només vol dir que no vull cap entrada.
Jo m'encarrego de el problema jo mateix.
I, de fet, vostè no ha de dir-li aconseguir res int positiu.
Vostè acaba de dir, obtenir int positiu, i que la funció s'apagarà i fer la seva cosa.
>> Però hi ha hagut un petit truc que he estat jugant aquí tot aquest temps
per assegurar-se que el codi es compila.
Observi que int-- obtenir positiu int void-- està en la línia 27.
Però per alguna raó aparentment estrany és també aquí a la línia 16.
I només per si de cas vaig a repetir això pel que és perfectament idèntics.
I jo he dit prototip amb un petit comentari d'una sola línia.
Què passa si elimino que, I Ara torneu a executar fan la funció 1, introdueixi.
Vaja.
Espera un minut.
On és la meva fitxa?
Eh?
Espera.
Realitza la funció 1.
Cal anar.
D'ACORD.
No hi havia guardat correctament.
Per tant, crec que hi ha una mica de error aquí on jo no estic
veure el nom de la fitxa en el moment.
Llavors, què està passant aquí?
Declaració implícita de la funció aconseguir int positiu és vàlida en C99.
Així confonent de nou.
Llavors, què és això indicatiu?
Bé, resulta que C és bastant estúpid.
Bé, és la programació idioma, o millor dit, el compilador és.
Només se sap el que té ensenyat, i és només
va a saber alguna cosa si ensenyat abans.
En altres paraules, en principal en aquest moment, estic
tractant de cridar a una funció anomenada aconseguir int positiu.
Però el compilador no va adonar-se que aconseguir int positiu
existeix fins a la línia 26.
I així, el que fa el compilador és només errors tan aviat com es posa a la línia 17,
dient declaració implícita d'aconseguir int positiu, que
és només una forma elegant de dir, no ho sé sap què aconseguir int positiu és encara.
>> Altres llenguatges com Java i Python i Ruby poden mirar cap endavant.
C no ho fa.
I així el camí fixem aquesta és una de dues maneres.
Qualsevol dels dos, si el problema és que arribar int positiu no s'ha vist abans,
així, permetin-me moc al cim.
Això seria solucionar aquest problema.
Però en general, és millor tècnica considerada
per posar la seva funció principal en el mateix superior perquè un ésser humà la lectura del seu codi
sap el que fa el programa, causa principal no s'enterra tot
el camí a la part inferior o en el medi.
És en la part superior.
Perquè no se sent ideal.
I vostè pot aconseguir realment en situacions en les
si les trucades Una de les funcions una altra, que crida a un altre,
vostè pot aconseguir en un problema on no pot anar sobre de l'altra, lògicament.
Simplement no és possible.
>> I així, la manera de treballar evitar això és simplement prendre
La signatura de la funció, de manera que speak-- la primera línia, on és declared--
i acaba de copiar, enganxar al superior, però no amb braces-- arrissat
només amb un punt i coma.
És com una petita pista del que està per venir.
I, de fet, tot aquest temps en què han vist coses com io.h estàndard
i cs50.h, de manera similar, en aquests punts arxius h hi ha altres prototips.
I veurem que en poc temps.
>> Així que en resum, quan es té un programa en un arxiu amb múltiples funcions
a més de principal, gairebé sempre volen declarar-
simplement per mitjà de la seva primera línia, seguit per un punt i coma,
a la part superior de l'arxiu.
Això va ser una gran quantitat d'una sola vegada.
Qualsevol pregunta?
Tot bé.
>> Així que anem a passar a continuació, a una mena de tos.
Oh.
Què apropiat.
Tot bé.
Tos.
Així que aquí és un c implementació d'un programa
que vam fer l'altre dia en Rasguño que molt simplement
diu la tos, tos, tos.
Tot bé.
I algú va dir unes poques Fa dies que no hi ha
una manera de netejar el codi ja.
Tot bé?
Tan aviat com vostè està copiant i enganxar probablement mal disseny.
Almenys una vegada que arribem a quatre o cinc o 20 tos, se sent una mala pràctica.
Acabem de seguir copiar, enganxar.
Quina és la solució òbvia a la neteja d'aquest programa per dalt?
>> AUDIÈNCIA: Loop.
>> ALTAVEU 1: Sí.
Així que utilitzi un bucle.
I podem fer servir un bucle per, per un temps bucle, qualsevol nombre d'enfocaments.
I de fet, això és el que que fem en la versió un aquí.
En canvi m'he reescrit en la versió un cough.c
sent la tos només dins d'un bucle per.
Molt bé, però hi ha una oportunitat ara de tipus d'inici
per dissenyar aquest una mica més com la lliçó que ens va ensenyar fa un moment,
que és esto-- suposar que volia per crear una funció anomenada tos,
Considerem per un moment el que va a ser similar.
Així que si vull alguna cosa a tossir, només necessito
utilitzar la impressió f dins de la funció.
I de fet ho sóc.
I de fet, tot això temps, en qualsevol moment que estiguis
cosa que imprimir la pantalla, un programador
exigiria que un efecte secundari.
No és lliurant algú de tornada un valor.
M'està prenent algun tipus d'acció que podria ser visualment evident.
Però aquesta funció tos, què tornar qualsevol cosa basada en la seva primera línia?
No, perquè el seu tipus de retorn és nul·la, la qual cosa només vol dir
no m'ha d'entregar res a canvi.
Podria estar fent alguna cosa visualment, però és que no em lliura
còpies d'un full de paper com la setmana passada.
>> Necessita alguna entrada?
No.
I el que és nul·la aquí també.
Així que això també és una mena de sobre-enginyeria d'aquest problema.
Oi?
He fet el programa més complexos, més línies de codi,
No he fet cap més funcional, però això
seria un trampolí, potser, per a una més àmplia
context amb codi més complicat.
Però què passa amb això?
Què he done-- simplement fent una ullada a això sense mirar el comentari
a la part superior del file-- el tenen Jo fonamentalment fet aquí amb el meu tos
aplicació que és diferent?
Sí, a l'esquena?
>> AUDIÈNCIA: Que sigui el que pot té un caràcter s'apagui.
ALTAVEU 1: Sí.
Així que això se sent una mica agradable.
Oi?
És com l'addició d'una característica al seu programa o de la seva funció, en aquest cas.
Encara no retorna res.
Podria tenir un efecte secundari visual, perquè està trucant impressió f.
Però ara he parametritzada la funció, que
vol dir que he pres especificats d'entrada de tipus int i cridar-n,
però podia dir-el que vulgui.
De fet, podria ser només vegades que siguin encara més explícit.
I llavors jo podria canviar això aquí.
Però el punt és que així és com jo crear una funció que pren l'entrada.
I si vostè recorda voltejant potser a través d'Internet en un sol
dels passejos virtuals, la quart i l'exemple la tos final,
t'adonaràs que aquí m'has generalitzar el meu codi de tipus further-- de abstreta
encara més.
Igual que la tos i l'esternut, tots dos són sobre com dir alguna cosa o fer
algun tipus de so.
Guardar seria el corresponent bloc de Scratch.
I així ho vaig fer en aquesta versió, que podem simplement fer una ullada a,
és tos és com dir, [TOS], tos, i mentrestant, l'esternut és
com dir, [ACHOO].
I pel que he generalitzi l'aplicació d'aquells
per ara l'aplicació aquesta funció genèrica,
dir, que és interessant per als propòsits d'avui
només perquè encara no té un tipus de retorn.
Però, quantes entrades té?
AUDIÈNCIA: Dos.
ALTAVEU 1: Dos.
I així, si vols prendre en dos arguments,
simplement separar amb una coma.
I si vols a continuació cridar a aquesta funció,
notar que acaba truqui per exemple, cita, cap de la cita,
per al primer argument, comuna n, per al segon argument.
Així que de nou, només tenim ara la blocs de construcció perquè puguem realment
posar en pràctica algunes de les nostres pròpies funcions.
Tot bé.
Per a qualsevol dubte sobre aquestes?
>> Així que ara anem a pelar una capa de ser així.
I l'objectiu, en darrera instància, és un problema conjunt de la setmana que
va a estar a cryptogrophy-- l'art de la codificació de la informació.
I específicament, la informació haurà de xifrar o desxifrar
va ser de text.
I així, aquest tipus d'invitacions la qüestió avui com així,
el que està passant sota de la campana amb el text més enllà d'ASCII de setmana zero,
I com podem realment començar a manipular-?
Així que aquí està el nom de Zamyla.
I en text, que podrien ser introduïts a igual que la funció de cadena get.
I a partir d'ara, quan veieu una cadena com esto-- Z-A-H-I-L-A--
començar a pensar-hi com si cada d'aquests personatges és en una caixa de la seva
pròpia.
I de fet, en una setmana o així és temps, cadascuna d'aquestes caixes
representarà molt específica un bloc de memory-- un mos de memòria.
Així que cadascuna d'aquestes cartes, en última instància, representarà 8 bits.
I en realitat a veure el que està passant de sota la campana al meu ordinador.
>> No obstant això, per no n'hi ha prou només per mirar Zamyla
a través d'aquesta lent, pel qual cadascun aquestes cartes és en la seva pròpia caixa.
I molt bé prou en C podem accedir a cadascuna d'aquestes caixes directament.
Així que si vol aconseguir el primer lletra del seu nom, súper fàcil en C.
Si voleu aconseguir l'últim carta, super fàcil, així
amb un tros de nova sintaxi.
>> Així que seguiré endavant en CS50 IDE i obrir la cadena de zero punt C.
I en aquest exemple aquí, hi ha un parell de coses noves que fer.
Així que per primera vegada en la línia 19, que hem vist aquesta cadena get abans--.
Així que com una prova de seny ràpida, si algú pot oferir verbalment
L'explicació d'un laic de el que està passant a la línia 19.
Com acaba de traduir això en Anglès que no company d'habitació en CS50
podria entendre.
Sí.
>> AUDIÈNCIA: Tenir l'entrada d'un usuari corda i deseu-lo en un s variable.
ALTAVEU 1: Good.
Tenir l'entrada de l'usuari una cadena i emmagatzemar-lo en una variable s.
Això és genial.
Així que a la mà dreta banda, anomenem cadena get.
Que torna un valor que no van ser assignats
del costat dret a l'esquerre a mà costat en una variable anomenada es que és
dissenyat per emmagatzemar una cadena.
Exactament.
>> Així que ara la línia 22, per el comentari a la línia 21,
òbviament imprimeix aquesta cadena un caràcter per línia.
Però com?
Així que en primer lloc, inicialitzem I 0.
I llavors, com s'arriba a al final del nom de Zamyla?
Bé, al final de El nom de Zamyla, vaig poder
escriure manualment en l'últim caràcter de el seu nom d'alguna manera, o el nombre de la mateixa.
Oi?
Si ens remuntem aquí-- Z-A-M-L-- I-L-A-- perquè jo pogués escriure.
Què és l'índex de L'última carta de Zamyla?
Si aquesta és 0-- parlant com un programmer-- 0, 1, 2, 3, 4, 5,
Jo heard-- tan de fet, l'última lletra en el nom de Zamyla és el sisè,
però si comptem des de 0, que serà el número 5.
Així que tingues-ho en compte aquí.
>> Resulta que hi ha una funció en C diu strlen i tornada al dia
i fins a la data segueix sent, una gran quantitat de programadors
triar sincronitzar noms per a la seva funcions que sonen com les paraules
que estan tractant de dir.
Així strlen és longitud de la cadena.
I així ho faria longitud de la cadena de S tornar quan Zamyla és l'entrada?
>> AUDIÈNCIA: Cinc.
>> ALTAVEU 1: Z-A-H-I-L. Sis.
Oi?
Quina és la longitud del nom de Zamyla?
Oi?
I en realitat, 6 lletres.
Oi?
I així, què significa això per al nostre bucle?
Anem a anar de 0 fins a sis, que
ens va a donar 5 iteracions.
Què fem a cada iteració?
Bé, cent C, algú endevinat l'altre dia,
significa un marcador de posició per a què?
>> AUDIÈNCIA: Char.
ALTAVEU 1: Només un char.
Així que un sol character-- no múltiples personatges com una cadena.
I llavors aquí està la nova línia que tenim imprimir.
I llavors aquí està la nova sintaxi.
Si voleu imprimir l'i-th caràcter de la cadena S, per així dir-ho,
vostè pot simplement dir el nom de la cadena S,
i després obrir claudàtor, i després va tancar claudàtor, amb una i
el mig.
I és una mica agradable en aquest quin tipus d'sembla a un quadrat
igual que les places en què Zamyla de existeixen personatges en aquesta foto allà.
>> Així que si realment executar aquest Ara, anem a veure què passa.
Feu cadena 0 punt slash string 0, i llavors estic
va escriure el nom de Zamyla.
No hi ha ràpida, perquè jo no ho vaig fer utilitzar la impressió f, però això està bé.
Només sé el que fer.
I, en efecte, imprimeix El nom de Zamyla, un per línia.
>> Ara serem una mica imprudent.
Suposem que jo no sabia sobre strlen i vaig pensar,
bé, ningú va a tenir un nom més gran que com 50 caràcters.
Seguirem endavant i tornar a compilar aquest i torneu a executar i, a continuació, escriviu en Zamyla
de nou.
Lògicament, el que és el programa va a tractar d'imprimir?
Z-A-H-I-L-A continuació, igual que 45 bytes desconeguts de memòria.
I de fet, tornarem a aquesta idea de la memòria.
Però així, lògicament, si El nom de Zamyla és aquest llarg,
com per la imatge aquí, el que estem dient
es mantindrà la impressió, tingui la impressió, mantingui impressió, tingui la impressió, tingui la impressió,
tot el camí fins al caràcter 50a, que qui sap el que ha de passar.
Així que anem realment a fer una ullada.
Anem escrigui en Zamyla.
Interessant.
Vam tenir sort.
Només un munt d'espai en blanc.
Oh.
Hi ha un caràcter funky.
Es veu una mica com una pregunta estranya marcar allà, però no és el nom de Zamyla.
Arribarem molt imprudent.
Què tal si imprimim 500 blocs al desconegut?
Seguirem endavant i fer això així i després tornar a executar.
I la pantalla completa, perquè anem hem de veure més espai.
Zamyla.
Tens sort de nou.
>> Ens atrevim a arribar més temerari?
Aconseguirem més temerari.
50.000 caràcters.
Això no és, certament, una bona idea.
Tot bé.
Feu cadena 0.
Aquesta serà la nostra última demostració.
Zamyla.
Ugh.
D'ACORD.
Així que la meva memòria és realment buit en aquest moment, que és en realitat una mica convenient.
El que estic tractant d'arribar A-- bé.
I ara estic sol aconseguirà imprudent.
500.000.
Make-- de pantalla completa de deixar-ho.
Retorn.
Zamyla.
Cal anar.
No tinc ni idea del que és, però sona malament.
Tot bé.
I, de fet, molt aviat, si vostè està entre els pocs afortunats en horari d'oficina
i en el problema d'establir un, podria molt bé trobar-se amb això.
Fallada de segmentació fa realitat tenen un significat ben definit.
Això significa algun tipus d'error relativa a un segment de la memòria.
I en termes simples, que vol dir que toquem
memory-- utilitzem memòria RAM en el meu equip perquè jo no he tingut accés.
I això és el que alhora potent i també perillós
sobre C és que en realitat tenir accés sense restriccions
a la totalitat de la memòria del programa o bytes o RAM, més específicament.
>> Així que, encara que el nom de Zamyla és només sis caràcters de longitud,
Encara puc anar enlloc en la memòria que vull.
I com un a part, si tens Has llegit algun article
al llarg dels anys sobre alguns servidor o algun programa
aconseguir esquerdats o hacker això és aprofitat alguna cosa
anomenat un desbordament de memòria intermèdia explotar que anem a realitat
parlar en poques setmanes, això és en general, en referència a alguna forma d'enganyar
un ordinador a anar bé més enllà dels límits de la memòria
que hauria de tenir, i trobar alguna cosa sucosa
en què un memory-- contrasenya, potser, d'una manera
d'eludir algun número de sèrie xec, o simplement generalment capaços
per enganyar l'ordinador està executant codi que no es pretenia.
Però tornem a la realitat per un moment
on estava aquest programa implementat amb strlen,
i introduir una cosa aquí.
Què hi ha de nou entre aquestes tres línies superiors?
>> Així punt cadena h.
Resulta que hi ha aquesta biblioteca anomenada Cadena punt H, o la Biblioteca de cordes,
el fitxer de capçalera, per així dir-ho, és punt cadena h que em dóna
l'accés a aquesta funció strlen.
Si ometo que el compilador és va a cridar a mi d'alguna manera.
Però saps què?
Ara anem a arribar molt matisada.
En la línia 22, hi ha alguna cosa tipus de inefficient-- mal dissenyat,
arguably-- sobre aquesta línia de codi.
Penseu en com s'implementen per-loop
i quins passos succeeixi de nou i una i altra vegada-- la inicialització,
la condició, el codi que és executat, llavors l'increment
o el canvi, llavors la condició, després el codi, llavors el canvi, llavors
la condició, llavors el codi, llavors el canvi, i així successivament.
Llavors, què podria ser una mica preocupant o mal fet aquí?
Sí, en blau.
AUDIÈNCIA: strlen és anomenat moltes, moltes vegades.
ALTAVEU 1: Sí.
Així strlen es diu moltes vegades, però el que és
la longitud del nom de la Zamyla primera vegada que el bucle s'executa?
>> AUDIÈNCIA: Sis.
>> ALTAVEU 1: Sis.
Bé, quina és la longitud del seu nom la segona vegada que s'executa el codi?
>> AUDIÈNCIA: Sis.
>> ALTAVEU 1: D'acord.
Encara és 06:00.
Oi?
El nom de-la no té canviat, fins i tot si estic buscant
a només una part de les lletres del seu nom.
I així, el fet que sóc efectivament fer aquesta pregunta, quin és
la longitud d'Zamyla, quin és la longitud de Zamyla, quin és la longitud de Zamyla,
sis vegades per separat, o de set, fins i tot, és una estupidesa,
perquè això és immutable aquesta resposta.
I així el que vaig poder en realitat fer és esto-- en cadena d'un
Tinc una mica millor versió aquí.
Allà- cadena whoops-- ha dos que tinc una versió lleugerament millor en el qual
Faig esto-- en lloc de només inicialitzar i a 0, també amb una coma
declarar una segona variable anomenada N-- Jo no he de dir int nou.
Que no hauria, de fet.
Però jo us dic n.
I llavors em inicialitzar n de el strlen de n, de manera que ara
Quantes vegades strlen s'executen en total?
Només una vegada.
I així que això és el que volem dir abans sobre un millor disseny.
En realitat una vegada que el seu codi és correcte, anant i pensament a través de,
estic fent servir tan poc memòria o tan pocs segons
o mil·lisegons de temps d'ordinador com possible implementar algun problema?
I jo vaig a desplaçar- i acaba d'esmentar
que hi ha aquesta menció de null en aquesta versió,
però anem a tornar a que en poc temps.
Perquè per ara, anem a fer una ullada en on això ens va a portar.
Així que un, resulta que ara que tenim la capacitat
mirar a caràcters individuals, podem aprofitar alguna cosa
des de la setmana 0 que era molt arcana i espècie d'interessant en el moment.
Però ara, i sobretot quan ens arribar a la criptografia en una setmana,
que serà molt poderosa.
Resulta que amb una mica de ints i carrosses de dades tipus--
i caràcters i cadenes i una altra coses-- alguns d'ells
es pot molt fàcilment convertida a un altre.
>> Per exemple, quan parlem sobre ASCII algun temps ago-- aquí està
Les lletres majúscules A a través de M, punt, punt,
dot-- hem dit que hi ha un mapatge entre aquestes lletres i números.
I de fet, és cert per a les lletres minúscules també.
Minúscules a és 97, el capital és un 65.
I hi ha un nombre en ASCII, que és just aquest mapeig
sistema per a totes aquestes altres lletres.
Llavors, què vol dir això?
Bé, vaig a seguir endavant i obert alguna cosa realment ràpid anomenat
ASCII 0, la majoria dels quals són els comentaris.
I de nou en línia sempre es pot vista a través dels comentaris.
>> I mirin el que això va a fer.
Així que té una funció principal.
He modificable els números només per ara, perquè sé el que estic fent.
Jo sé el que vull veure aquí.
I jo he inicialitzat a 65.
I estic explicant a través de 26 cartes en total.
¿I què vaig a imprimir una línia alhora
si es pot interpretar això posa en relleu la línia?
El que es impresa?
Sí.
>> AUDIÈNCIA: Vas per imprimir la carta que
correspon al mapa de la valor carta i valor enter?
ALTAVEU 1: Exactament.
Vaig a imprimir la carta corresponent al valor de nombre sencer,
i viceversa, de la següent manera.
Bé, això, algú va dir abans, és només un marcador de posició per a un char.
És encara.
Això, per descomptat, és un marcador de posició per a un no int-- una nova línia.
I ara noti, el meu primer valor que Estic connectant per aquest marcador de posició
no és només I. Estic dient, parèntesi, char I,
que el residu carbonós parèntesi és dient-li al compilador, el tractament que
no com el que és, que és un nombre.
Tractar-lo com un personatge real.
Considerant que el segon valor que estic endollant en-- jo-- hauria de ser només un nombre.
>> Així que si puc compilar aquest program-- així que això és fer ASCII 0,
ASCII slash dot 0-- Acabo d'arribar aquesta petita pràctica taula que
em mostra tot el possible assignacions sense haver de pensar-
a través o esbrinar pel meu compte.
I també estic imprimint, notar les lletres minúscules,
perquè unes poques línies més endavant, em també imprimir aquest mapeig
també, que és només per dir que una vegada que entengui
el que està passant sota el capó, oi
convertir automàticament un costat a un altre.
I de fet, si algun de vostès mai va fer això en l'escola primària
o escoltat sobre algú tenint míticament una nota
i que passa al seu o la seva amiga a la classe,
però la regirats cartes de com A es converteix en B,
i B es converteix en C, o alguna cosa més complicat que això, bé,
Com anar sobre la implementació que quan era petit?
Bé, només una mica sap A esdevé B, B es converteix en C,
però matemàticament, el que estava fent aquest noi?
Què estava afegint a cada lletra?
Efectivament, 1.
>> Així que quan vostè canvia de A a B, això és alguna cosa així com el canvi de 65 a 66,
que matemàticament significa simplement afegiu 1.
I pel que si anés a posar en pràctica aquest petit tècnica enganyosa
per al seu professor en codi, podria fer exactament això només
mitjançant l'addició d'una sola lletra junts.
Així que després de poc temps, estem anem a veure com ens
pot prendre avantatge d'això per realment lluita genuïna i unscramble
informació.
Mentrestant, sabem que hem començat introduir un parell d'altres biblioteques
aquí-- la cadena un avui.
I un lloc molt útil esperem que pugui trobar
es diu reference.cs50.net, que el professorat s'han reunit,
de manera que si vostè vol veure com funciona strlen,
vostè pot començar a escriure El nom de la funció,
feu clic strlen allà, i després una explicació menys còmode
va a aparèixer.
O si voleu que l'oficial Explicació basada en Linux,
pot fer clic més còmoda a la part superior dreta, i
presentarà la mateixa informació, però en termes més complexos.
Això és un recurs útil per a realment sap el que fa tot.
>> La propera vegada que anem a fer una ullada a Ovaltine
i més, i presentar- al món de la criptografia.
Abans d'això, ja veurem més tard aquesta setmana.
I ara, Colton Ogden.
Ens veiem dimecres.
>> [REPRODUCCIÓ DE MÚSICA]
>> ALTAVEU 1: El que el [SENYAL] estàs fent?
>> ALTAVEU 1: Estic menjant el meu postres?
Com es menja això?
Amb les mans?
>> [REPRODUCCIÓ DE MÚSICA]