[Powered by Google Translate] [♪ ♪ Buzzing]
Així que per introduir al que tinc a la pantalla;
és una de les eines que hem desenvolupat durant l'estiu;
es diu CS50 Spaces,
i és la nostra aplicació de col · laboració codificació
que utilitzarem en les seccions.
És molt bo.
Algun de vostès ha vist CS50 carrera encara?
Deixa treure això en una altra pestanya.
Run.cs50.net
Tan
si vas a run.cs50.net,
es pot veure aquest és un navegador en el seu camí a
en realitat codi - escriure codi C,
i després executar-lo,
per tant compila, executa, retorna les dades resultants a vostè,
així que això és una espècie d'una manera fresca d'experimentar
amb una part del codi que David s'acosta a conferències
i li donem a vostè en el conjunt de problemes
sense haver d'encendre l'aparell.
>> Llavors, què fa que els espais és diferent de la
si torno a aquesta fitxa,
Spaces és CS50 d'execució, com es veu aquí,
però si es desplaça sobre i mirar a l'altre costat de la finestra,
que vegi la raó que sóc l'única persona en aquest espai,
però el que vaig a fer és preguntar vostès a sumar-se a aquest espai amb mi
i tots arribarem al codi a la finestra petita mateix,
compartir codi entre si,
i parlar sobre les diferències entre el nostre codi.
Així que és una espècie de cosa cool -
a sumar, si vostè visita aquest enllaç aquí mateix, a la part superior
que he ressaltat,
vostè pot simplement escriure en apps.cs50.net/spaces/vqcspSnO.
>> Molt bé, així que per començar,
Jo et vaig a donar una mica d'un viatge d'aquest.
Farem uns ximples encriptació amb ell al principi,
només perquè tothom té una mica una idea del que és,
però el que he fet -
o el que vaig a fer aquí és -
Vaig a obtenir les que he escrit aquí,
així que vostè veu en aquest moment és buida;
no fa res.
És sol codi de la caldera placa, anem a cridar.
Amb una mica de coses per fer comentaris.
Vaig a guardar prement aquest botó Guardar.
I el que fa és
destacat fins aquí breument - la caixa de revisió save verd,
i ara, si vostè busca per a mi en l'espai,
fa clic en el meu nom,
es pot veure que tinc aquesta revisió aquí,
i si fa clic en aquesta revisió,
que va a carregar aquest codi en l'espai, també.
>> Així que tothom s'ha carregat el codi en el seu espai?
Molt bé, si no ho ha fet encara, seguir endavant i fer això,
i llavors el que jo vull que vostès fan en aquesta petita secció de tasques
és escriure una mica sobre tu mateix usant printf,
Així, per exemple, m'agradaria escriure
printf ("El meu nom és Nate");
i després m'agradaria escriure
"Em vaig graduar el 2009
de Stanford "
i m'agradaria conèixer la seva opinió sobre
quin any estàs a l'escola,
si estàs a la universitat o l'escola de negocis
o una altra escola de Harvard,
el que està estudiant si se sap encara;
si no se sap, això és totalment fresc.
Jo no vaig decidir fins que vaig arribar tard en el meu segon any.
i llavors també m'agradaria saber
cap bogeria que vols dir-me o
alguna cosa sobre la classe o simplement qualsevol altra cosa.
En acabar d'escriure que amb el seu petit printf,
si vostè s'estalviarà la revisió o bé
1 assegureu-vos que es pot executar
i que s'imprimeix exactament el que vol que la imprimeixin,
i llavors si seguir endavant i salvar aquesta revisió
utilitzant el botó Guardar de revisió, aquest primer noi poc per aquí,
i que poc anirà a través i fer una petita introducció d'aquesta manera.
Pel que només hauria d'haver de prémer el botó Play,
que és aquí a la part superior esquerra,
per la qual cosa aquest botó Reprodueix en la part superior esquerra es
enviar el codi de descompte al nostre servidor on Donat llavors.
Llavors, què és una mica boig per això es
Aquest codi en realitat no s'està executant en l'equip;
en realitat està sent enviat a través d'Internet.
>> Com va tot, Charlotte?
>> I - està bé. Jo - jo crec que sóc
havent dificultats de salvar
al servidor de manera que pugui - I pot executar el programa.
I després quan intento executar, es diu que hi ha un error.
Declarat com un virus, el que no hi és ja.
Oh, anem a veure, pots colpejar de nou a Desa?
El veig a la pantalla.
Dret >>, està bé, així que això és el que tinc.
I jo no sé per què no em deixa córrer.
Oh, està bé, ho sento.
Pot explicar per què - el que estava malament - el que no estava treballant amb ell?
>> Sí, perquè jo no vaig veure que hi havia una última línia on encara hi ha una variable
que no havia declarat, que no tenia la intenció que hi sigui.
Sí, perfecte!
>> Ara, si el guarda, jo crec que hauria de funcionar.
Ara que ho has salvat, funciona; impressionant.
>> Així que sí, a mesura que avancem a través de -
així que el que estava passant,
Només vaig a repetir això per la càmera.
El que estava passant era que aquesta variable es
va ser deixat en post - Suposo que va eliminar algunes altres coses
en la que va declarar com,
de manera que aquest estava tirant coses i no deixar que l'hi s'executa.
Així que això és exactament el que vols fer a la secció
S'han escrit persones intenten diferents peces de codi,
la compilació, vegi el que funciona, veure el que no,
i després una mica parlar d'aquestes coses, perquè aquests són els punts de tret que
Encara em trobo,
Encara - faig moltes tonteries tot el temps,
i jo no sé per què no funciona,
així que anem a aixecar revisió de Charlotte 3,
i anem a córrer.
>> Així que quan corro, ara que tinc el seu codi aquí,
Puc fer un zoom, premeu el botó Run,
el puja, el construeix, executa,
diu que s'ha executat correctament i, si em desplaço cap avall
veure Charlotte és un júnior a Adams House,
la psicologia, la secundària en l'economia; impressionant.
Encantat de conèixer!
Awesome.
Està bé, de seguir endavant, anirem a Daniel,
anar a la revisió 3,
compilar, executar;
¿Per què no ens expliques una mica sobre vostè, Daniel?
Llámame >> Dan.
Vaig a l'escola de negocis a través de vostès,
i jo era a la Infanteria de Marina abans que aquí,
i tot això és nou per a mi, així que sí.
No et sentis malament, tinc 30 anys i no sé res d'això.
Impressionant, gràcies, Dan!
Molt bé, tenim un altre Daniel.
Un va per Daniel - li presentar, Daniel?
>> >> És clar, sóc Daniel.
Sóc un estudiant de segon any a Mather en aquests moments.
M'estic concentrant en el govern,
però jo volia prendre CS50 perquè he sentit molt bones crítiques sobre la classe
i mai he provat abans de CS.
Desplaceu-vos cap avall i aquí es repeteix el missatge - cool.
Canviant de tema, Jared.
Com va tot?
>> Bé, com estàs?
Com pot veure, sóc un concentrador filosofia júnior a Eliot,
originalment des del sud de Califòrnia,
i estic interessat en prendre CS50 perquè m'agrada la lògica de la mateixa,
i sembla realment bo per fer coses a l'ordinador, així que.
Impressionant, on al sud de Califòrnia és vostè?
>> Al voltant d'una hora a partir de [inaudible], una petita ciutat [inaudible].
Oh, sí, el meu pare és de Redlands.
Cool stuff.
>> Bé, Jimmy, com et va, Jimmy?
>> Bé, com estàs?
Si ho fa prou bé!
Explica'ns sobre tu.
>> Sóc un estudiant de primer any, i no estic del tot segur del que estic especialitzant en
però estic una mica inclinat cap a l'economia.
Com Daniel davant meu, mai he fet res CS, però sona una mica fred.
Sóc originari de Chicago.
Awesome. Així que fes un cop d'ull al seu llistat aquí.
Jo volia preguntar, va fer aquesta impressió cap a fora com vostè esperava?
>> No, em vaig oblidar d'imprimir una nova línia.
De fet, m'oblidava que quan estava escrivint el meu cosa
per primera vegada, també.
És un tipus de dolor que recordar-se dels col · loqui en manualment.
Seria bo si només sé que és el que volia.
>> Bé, Kelly.
Wow, tenim 2 Kellys, 2, 2 Kellys Daniels.
Així que Kelly - vas per Kelly Ren?
Bé, impressionant.
O Kelly, vull dir.
>> Així que sí, així que estic Kelly.
Sóc un estudiant de segon any a Pfoho.
Vaig rebre un correu electrònic avui que encara tinc 7 setmanes per declarar la meva concentració,
així que estic tractant de no pensar-hi,
i m'agrada enfornar, córrer i Craisins.
No tinc experiència amb la majoria de CS;
Em va ensenyar a construir llocs web quan jo era molt jove,
però crec que probablement em van ensenyar malament un munt de vegades.
Esperem que vaig a aprendre una mica més
i - si.
>> Impressionant, bé, gràcies.
Anem a anar a l'altra Kelly;
Jo no tinc res - va dir vostè alguna cosa aquí?
>> [Inaudible]
Aquí està!
Sweet!
>> Molt bé, així que estic Kelly.
Sóc un estudiant graduat de primer any.
Estic especialitzant en la Ment, Cervell i Educació.
Em vaig graduar al Franklin & Marshall College el 2008
amb especialització en psicologia i sociologia
i un menor en francès.
Estic prenent CS50
perquè estic interessat en obtenir un doctorat en Neurociències
i sento que això m'ajudarà a entendre les tecnologies que s'utilitzen.
Awesome.
Canviant de tema, Mikaela.
És que la pronunciació correcta?
Bé, impressionant.
>> >> Sóc Mikhaila.
Sóc un estudiant de segon any a Kirkland House,
i m'estic concentrant en Enginyeria Mecànica.
Realment m'agrada el ciclisme, construir una bicicleta aquest estiu.
Estic prenent CS, en realitat,
com un requisit de concentració,
però ja saps, crec que és encara fresc espècie de classe d'enginyeria.
Impressionant - que va construir una bicicleta aquest estiu?
Sí >>.
Wow, com el marc i tot això?
>> Uh-eh (afirmativa).
Wow, això és genial.
>> [Inaudible fora de càmera xat]
[Rialles]
Sí, ha passat tant de temps.
Mai se sap, no?
Bé, fresc, bé gràcies, Mikhaila.
>> Molt bé, senyoreta.
>> El meu nom és Missy, sóc un estudiant de primer any,
el que significa que no sé res!
Vull concentrar-me en astrofísica.
En CS50,
Sento que definitivament l'ajudarà amb això.
Una dada curiosa sobre mi és que sóc un bomber certificat a nivell nacional.
Wow!
Com va succeir això?
>> Vaig assistir a una acadèmia
i va passar per l'infern d'un munt de setmana
i vaig obtenir el meu certificat.
Wow, felicitats!
Això no és poca cosa, segur.
Està bé, així que ara em farà.
Jo sóc el següent a la fila.
Jo - l'executi.
>> Així que el meu nom és Nate.
Jo era la classe de 2009 a Stanford.
Jo estava als principals sistemes simbòlics,
que és similar a la ment, la concentració Brain Behavior, aquí,
però és una mena de barreja de
ciències de la computació, la lingüística, la psicologia i la filosofia.
Una cosa així - si, un munt de coses rares, però va ser genial,
i després vaig fer la meva mestratge en Ciències de la Computació allà, també.
Així que jo sóc nou a Harvard aquest any.
Tenia moltes ganes d'entrar en l'ensenyament.
He passat els últims 4 anys a Stanford TA-ció classes de Ciències de la Computació
pel que David em deixa anem,
i jo estaré ajudant amb CS50,
així de fer això tot el temps, jo no estic a l'escola de postgrau.
Ha estat divertit.
Esperem que seguirà sent divertit, estic segur que ho farà.
>> Està bé, Sam.
>> El meu nom és Sam, sóc un estudiant de segon any a la universitat, a la legislació específica.
La meva major serà la història de la ciència, probablement, i VEUS secundària,
i el meu color favorit és el groc.
No hi ha necessitat d'emetre un judici ni res, però és un bon color!
I Stella.
>> Hola, sóc Stella, sóc un estudiant de primer any a Grays.
No tinc ni idea del que m'he concentrat en, però,
així CS50 era només una mica a l'atzar,
que és interessant.
Dada curiós, Jimmy va ser el primer amic de Harvard de la mina,
perquè els dos som de Chicago.
Cool, i Grace - que se suposa que és la realment bonic, oi?
Vaig pensar >> [inaudible].
Oh, sí.
[Inaudible / off-camera xat]
Bé, jo encara estic aprenent, encara està aprenent.
>> Així que tenim una mica més que és una cosa interessant aquí.
Sí, em pregunto, té vostè una idea que està passant aquí?
Vostè sap com interpretar això?
>> Se suposava que havia de ser posat el punt i coma després de cada línia.
Això és una mica d'un rotllo.
De vegades aquests punts i comes poden ser un veritable mal de localitzar.
Així que resulta que
el programa especial que estem fent servir aquest any per
compilar el nostre codi C es diu Clang,
i la raó per la qual han començat a utilitzar Clang aquest any -
perquè no hem utilitzat aquest programa en el passat;
hem utilitzat un altre anomenat GCC que és molt popular -
Clang en realitat li dóna missatges d'error que té sentit.
Aquest diu "espera", "després de l'expressió"
i fins i tot et diu l'expressió després que es necessitava un punt i coma.
Així que estàs arreglant?
>> Sí, ara mateix.
Impressionant, m'ho saber i anem a tirar cap amunt, i ho anem a executar.
Però sí, posant aquests punts i comes és una espècie de dolor.
>> M'ho van arreglar, així que crec que hauria de funcionar.
Impressionant - revisió 3.
Això sembla.
Molt bé, així que ara si l'executem,
aquí va.
Cool stuff.
>> Està bé.
Així que gràcies per fer això.
És molt bo per complir amb vostès.
Què farem ara és gastar el poc que ve
una mica d'entrar en els problemes de la secció
que provenen del conjunt de problemes d'aquesta setmana
i farem tot el que per a la majoria de les seccions
per a la resta del terme,
i després anem a salvar els últims 15, 20 minuts o menys
per parlar sobre el problema fixat
i després simplement qualsevol altra pregunta que vostè té en general sobre la classe.
Dit això, el que realment vull fer
S'han participant tots
utilitzant el material Spaces,
llençar al codi, llançant a suggeriments,
i parlant quan coses com aquesta ruptura
o no funcionen, perquè són coses que
Sé que em vaig trobar
quan vaig començar codificació,
i eren molt poc frustrant de vegades
perquè si és com 2:00 abans del seu conjunt de problemes es deu,
així - només per a la divulgació,
Jo no vaig començar programació fins que jo era un estudiant de segon any a la universitat.
Va ser una mica d'aquesta cosa estranya, desconeguda
que vaig sentir va ser una mica fred
i també he sentit que podria ser un veritable mal al cul
si no compleix amb un punt i coma i aquest és l'error només mantenir el seu programa de treball
i li impedeix anar a dormir,
així que sens dubte,
Si té preguntes per l'estil,
si vostè té preocupacions per l'estil, que em faci saber,
perquè vull fer d'això una bona experiència per a vostès.
>> Així que vostès han descarregat tot el conjunt de problemes encara?
Kinda saber on és? Bé.
Així que anirem a cs50.net, perquè jo no ho tinc en aquest compte,
aixecar els butlletins de problemes,
aixecar conjunt de problemes 2, i anem a veure l'edició estàndard d'avui.
Anem a aixecar l'especificació aquí.
Desplaceu-vos cap avall.
Així que anem a començar a buscar en aquesta secció de preguntes.
Han vist aquests curts encara?
Bé.
Així que hi ha curtcircuits en els bucles,
que es realitza per Tommy, un dels homes de cap d'ensenyament.
Hi ha un en l'abast,
Crec fet per un altre company d'ensenyament anomenat David
i després en una xifra de Cèsar també es fa per David.
Estan molt bé.
Han estat veient els seus pantalons curts fins ara?
How've estat?
¿Interessant? Bé, és bo saber-ho.
Si no ho són, es pot dir així.
Però abans de fer-ho,
Han mirat a aquestes preguntes
després de tot?
>> Anem a parlar d'això una mica.
Així que hem introduït en l'últim parell de setmanes
en conferència
un nombre de bucles diferents.
Aquest és el bucle for,
el bucle de temps, i després el bucle do-while,
i en la conferència, hem estat parlant molt sobre
com aquests llaços són tots
bastant similar en molts aspectes,
i vostè pot fer moltes de les mateixes coses amb un bucle while
que es pot amb un bucle per.
Només has de tipus d'ús de les combinacions adequades de les variables i tal.
pel que realment
la distinció real entre tots els bucles és que
de vegades són més útils
per utilitzar-los en un moment que en un altre moment.
>> Així, per exemple,
el bucle while que difereix d'un bucle do-while.
Tots senten que tenen un bon control sobre quan
un document while és més
útil o quina és la diferència?
>> Crec que la diferència és un bucle do-while
corre - No sé ben bé què és la terminologia,
però la sèrie de funcions dins del bucle.
Automàticament - que fa les seves carreres com a mínim
abans de comprovar la condició, o el bucle mentre que només va a funcionar quan
s'executa contínuament - si o no la condició és satisfeta.
Sí, això té sentit?
>> Fem una ullada a una mica de codi.
Així que per repetir la pregunta,
o la resposta, en lloc;
la resposta va ser que
un bucle while comprovar per veure si la condició
que especifiqui es compleix
abans que s'executa el cos del bucle, per primera vegada,
mentre que el do bucle while s'executarà automàticament el cos del bucle,
és el que anomenem - és estrany terminologia,
però si mai dir alguna cosa que no té sentit, m'ho saber -
el cos del bucle és aquesta cosa que es posa enmig de les claus.
I en un bucle do-while,
que el cos s'executa almenys una vegada,
i llavors la condició es comprova abans d'executar cada temps successiu.
>> Així que en realitat, Sam,
Et faria res escriure un senzill bucle while
en els espais?
>> Com una mena
fer una nova ...?
Acabo d'esborrar tot el que tens aquí.
Sí, només de netejar.
>> Bé, crec que estic tenint aquest -
que un vol, quan, o vols ...?
Sí, només és un temps real, imprimir alguna cosa.
I anem a veure.
Alexander, em vaig adonar que mai et va presentar.
>> Oh, això està bé.
Vostè - pot codificar un bucle do-while per a nosaltres?
>> Sí, ho intentaré.
Molt bé, només haurem de tirar d'ells cap amunt a la pantalla,
perquè tipus de tenir una idea del són les diferències.
>> Així que aquí està el que Sam ha fet.
Té un enter anomenat i
que s'ha inicialitzat a 17.
Llavors diu: while (int i = 17)
printf ("El meu nom és Sam.");
Llavors, què passa quan executi aquest codi?
Hi ha un error, què vol dir l'error?
Anem a estirar-lo cap amunt i parlar-ne.
S'ha produït un error, diu.
Anem a desplaçar-se cap avall.
Així que ens va donar aquest error, i va dir que,
"Hey, jo esperava una expressió."
Això és una mica críptic.
Sí, exactament així - i de nou,
hi haurà un altre petit insecte que ens posarem al dia en tan sols un segon.
Però aquest és un altre d'aquest tipus de coses estranyes terminologia,
de manera que aquest int i = 17
no és una expressió.
El que sembla que està fent és que és
declarar un enter anomenat i
i s'estableix per ser igual a 17
o, més aviat, posar 17 en què int i anomenat.
I això no té sentit
en el context d'aquest bucle while.
Això té sentit, com veurem,
en el context d'un bucle for, perquè les declaracions bucle Do començar
amb que per int i és igual a alguna cosa
i continua.
>> Així que vaig fer -
arreglar alguna cosa, està bé.
Aquí va, impressionant.
Així que ara les coses es veuen una mica diferent.
Un parell de coses han canviat.
Ens pot dir quines coses han canviat?
>> Vaig treure el int, així que no hi ha declaració [inaudible] en lloc d'una tasca.
El signe d'un igual, vaig posar dos signes d'igual, el que significa un peu d'igualtat.
Awesome.
Sí, i què va fer Sam es va treure la int
que era aquí abans,
així que si tinc prou amb veure això - això és el que era abans, va dir int,
que es declari que - pel que va treure el tipus.
Hi int, string char, curta,
els que són anomenats tipus.
Així que vaig treure el tipus
i després anteriorment,
acabava l'únic signe d'igualtat
i el que va dir era problemàtica sobre això
quan es té un signe igual,
que és un operador d'assignació.
Això no és provar si dues coses són iguals.
Això és realment posar una mica igual a alguna cosa.
Estem posant el número 17 a la variable i.
Així que per fer aquest tipus de comparació,
vostè ha d'utilitzar el doble iguals,
que és una mena de cosa rara
però és un error bastant comú.
Així que una cosa sí vaig a assenyalar, si no t'importa,
és que, en
nostra funció aquí a int main,
es veu que el cos de la nostra funció
es desplaça des del costat esquerre
per 4 espais o un tabulador.
La raó per la qual fem això
és només per facilitar la lectura.
Com es pot veure en el bucle mentre que Sam és aquí,
no guió en absolut,
i que no afecta la funcionalitat del codi.
S'executa exactament el mateix.
>> Així, per exemple, si arribem al cim aquí
i premi el botó Reproduir nostre, l'hi construeix,
que va a executar,
i el que passarà?
Per què diuen que encara funcionant?
>> Perquè seguiré repetint hi.
Exactament, i per què seguir repetint hi?
Com que el nombre enter >> mai canvia, pel que és sempre 17.
Sí, exactament, així
veurem, després - em recorden el teu nom?
Jimmy. Així que Jimmy va dir que
la raó de que això no deixa de repetir alta una i altra vegada
és perquè aquesta condició es compleix sempre.
Mai canviï el valor de i.
Mai canviar el contingut del que està emmagatzemat en aquesta variable.
Així que en aquest punt tenim aquest error que
el programa genera una sortida molt alta,
i si desplaceu-vos cap avall i tipus de mirada al que està passant aquí,
es pot veure que és hi, hi, hi, hi, hi, hi, hi tot el camí a través.
Awesome.
>> Així espècie de tornada al punt original
que tingui la sagnia aquí
en el cos del bucle, mentre que no afecta res.
El programa segueix corrent bé.
Típicament, per a un bon estil -
i això és una cosa que busquem en els conjunts de problemes -
li demanem que aquest guió per 4 espais, que es pot fer
amb només prémer la tecla de tabulació
o manualment posant en 4 espais a tu mateix.
Cool, bé així que anem a tornar enrere i mirar
Alejandro do-while.
>> Just alguna cosa que té una mica de dificultat.
Bé, bé, treballarem a través d'ell.
¿Això és bo?
Sí >>.
>> Bé, aquí anem.
Aquest és el codi que va escriure Alexander.
Vostè va per Alex - està bé.
Així que aquí està el codi que Alex ha escrit.
Per tant, tenim la nostra declaració de principal aquí,
i després tenim aquesta variable sencera anomenada i
de ser declarat just aquí.
Tenim una instrucció do
i després el cos de nou amb aquests aparells,
de manera que aquest és el cos de la do-while -
permetin-me fer un zoom en aquesta manera és més fàcil de llegir -
i al cos, estem tractant d'imprimir "aquest és el cos",
i + +,
així incrementar el contingut de i i fer això
fins que arriba a ser 3,
i després el nostre programa acaba.
>> Llavors, què passa quan executeu aquest programa?
>> M'esperava un identificador.
Bé, construir, executar, error.
Què passa?
Nosaltres ens desplacem fins aquí,
tenim aquesta cosa una mica críptic mirar,
esperat punt i coma després de la declaració d'alt nivell.
Això és una mica estrany.
Algú té una idea del que podria estar passant?
Una mica estrany, sí.
>> [Inaudible] es declara fora dels parèntesis?
Així que no s'apliquen a continuació, quan s'utilitzen parèntesi?
Així, va declarar que aquest tipus fora de les quals parèntesi?
Oh, aquests nois - les claus?
Sí >>.
Sí, exactament.
Així que resulta que
en realitat no es pot declarar una variable aquí així.
El que podria haver estat tractant de fer era -
recórtelo d'allà -
vostè pot posar dins de les claus aquí
o una altra alternativa
és posar completament fora.
I així aquests - depenent d'on vostè realment posar la declaració
d'aquesta variable sencera,
vostè pot obtenir 2 tipus molt diferents de variables;
quan està fora de la principal,
és el que anomenem una variable global.
Està fora de l'abast de qualsevol de les funcions -
no és dins d'una funció -
mentre que si ho posem dins de la principal,
com aquí, llavors s'anomena una variable local,
perquè és local per a l'àmbit d'aplicació de principal.
I anem a parlar una mica més sobre quins són les diferències
entre els 2 tipus i per què s'utilitzen diferents tipus de variables,
però per ara,
vostè pot mantenir totes les variables locals,
perquè nosaltres no tenim cap necessitat que les variables globals.
>> Està bé, així que això és una cosa aquí.
Intentarem executar de nou, a veure què passa.
Executar, aconseguir un altre error.
Apropar una mica, què obtenim?
Ens esperava després d'aquest parèntesi do / while.
Alguna idea del que està passant? Dan?
>> El temps i després parèntesi i després -
No sé si ha de redeclare int,
però el fer mentre (i <3).
Exactament, sí.
Així que resulta que Dan és exactament correcte.
No necessitem posar aquest tipus aquí de nou.
En el seu lloc, pot matar el tipus
i acaba de fer això.
Està bé.
Vaig a allunyar amb el zoom, provar un cop més.
Mira això, sinó que s'executa amb èxit.
Si es desplaça cap avall, "aquest és el cos" imprimeix 3 vegades.
Això és molt dolç.
Ben fet, ben fet, nois.
Ben fet.
Com va fins ara?
Ritme decent?
D'acord, genial.
>> Així que, com a espècie de tornada a la pregunta original,
nosaltres - i ara si veiem la diferència,
es veu que en aquest bucle do-while,
l'estat ocupa l'últim lloc.
Així com l'ordinador llegeix el programa
des de programes en C s'executen en aquest tipus d'ordre seqüencial,
on, literalment, començar amb la primera línia de principal,
i després executar la línia 6, línia 7, línia 8, línia 9,
línia 10, línia 11,
tot això a la part superior dreta aquí
es va a executar un cop
abans que alguna vegada provar aquesta condició de veure
si i - o el contingut de i, més aviat -
són menors que el nombre 3.
I només si un cop arribem a la línia 12,
el contingut de i són menys de 3
és el que realment tornar enrere a la línia 7
i després repetir el procés,
i després es prova la condició de nou i de nou i de nou.
>> Així que podem contrastar aquesta
amb - zoom de tornada,
desplaceu-vos cap avall a la versió de Sam,
anem a veure això, una mica canviat perquè ja no és un bucle infinit -
on si el zoom,
veiem que a mesura que el programa s'executa,
que va a declarar primer int i,
establir el contingut del i be a 0,
i llavors es realitza la condició del primer bucle mentre que,
pel que en aquest cas, aquest cos, aquesta printf ("hola") i + + i
ni tan sols executar
llevat que en realitat és menor o igual a 2.
Així que si i és 3, per exemple,
si posem això aquí
igual a 4 - o vaig a fer 3, perquè he dit 3 -
i després executar-lo,
que construirà, que executarà totalment bé,
però en realitat no s'imprimirà res,
perquè no prova que per al primer cas.
Així que a classe, quin tipus de parlar de per què aquests bucles do-while
són útils de vegades
i per que s'utilitzen en lloc d'un bucle while.
>> Hi ha - ¿Vostès tenen algun suggeriment
per què un document while pot ser més útil?
>> Bé, crec que do-while és que si vols entrada de l'usuari,
perquè d'aquesta manera vostè pot deixar
posar alguna cosa en un cop, si és correcte,
podem passar a la resta del programa,
però si no és correcte, llavors segueixes preguntant a l'usuari
fins que col · loqui l'entrada dreta.
Sí, exactament - exactament,
de manera que un do-while és útil
perquè quan es demani confirmació de l'entrada de l'usuari
perquè és necessari per obtenir l'entrada de l'usuari abans de poder comprovar-ho.
Així que en un conjunt de processadors, en pset 2,
on vostè està incitant a que l'usuari molt,
això és pràctic l'ús de
en lloc de només un bucle while simple.
Si un bucle while, es pot fer la mateixa cosa -
vostè pot fer el mateix amb un bucle while
com ho fa amb un bucle do-while.
Només has de tipus de tenir aquest procés duplicat
on s'obté la primera entrada i després iniciar el bucle while.
Mentre que un document while, només has d'escriure un cop
i és molt més net.
>> Està bé.
Alguna pregunta?
Té sentit?
>> The return 0 - això és només una espècie de lloc o és -?
Sí, pel que pot -
Bé, anem a cobrir això una mica més tard
però resulta que
0 aquest retorn que posem
al final del principal tot el temps -
que poc es pot simplement prendre com una cosa que fem
de moment.
El que hem començat a parlar amb funcions
tipus d'al final de la setmana passada i de nou aquesta setmana
és que una funció
pren les entrades que són aquestes coses dins dels parèntesis;
aquests són 2 entrades, els nostres arguments o paràmetres,
el que estan cridats també a la nostra funció principal,
i llavors una funció produeix una sortida
que anomenem un valor de retorn.
I el valor de retorn en el cas dels principal és aquest tipus int
aquest sencer,
i la manera d'explicar una funció, "Hey, això és el que la seva sortida
serà ", és amb la paraula" retorn ",
aquesta paraula clau, més aviat,
i principal per tornar 0
o principal sortida 0
és estàndard en els programes en C
perquè tornant 0 dels principals mitjans que
"Hey, tot executat amb el meu programa molt bé."
Si haguéssim de posar una mica diferent de 0,
1 com, per exemple,
que es fa servir per dir a qui va córrer aquest programa
que alguna cosa va sortir malament.
Així que a mesura que més involucrats amb la matèria durant el semestre,
si mai necessitat de dir,
"Oops, ja saps, alguna cosa va sortir malament amb aquest programa"
en lloc de tenir la meva caiguda del programa, vull notificar
el corredor del meu programa que alguna cosa anava malament,
es pot utilitzar el valor de retorn,
com en diem nosaltres, això no és 0.
>> Així que anem a cobrir una mica més
una vegada que entrem en funcions.
Aquest tipus de sentit?
Bé.
Les funcions són una mica estrany -
Crec que per a la gent que té un munt de fons matemàtiques,
es tracta d'una mica més fàcilment,
especialment si vostè té una mica de fons matemàtiques més abstractes
i que està acostumat a parlar sobre les funcions
i tot aquest tipus de coses.
Però anem a tractar de cobrir les
i anar bé i poc a poc a mesura que sorgeixen.
De la mateixa manera, aquest argc int conjunt,
char * argv [],
per ara, també pot prendre això com placa de la caldera.
Hem començat a cobrir els poc una mica en la conferència
quan parlem sobre els arguments que es passen als programes en la línia d'ordres,
però en els seus butlletins de problemes i els seus programes,
és totalment bé només per escriure buit i que sigui senzill.
I el que això significa és que el buit
"Hey, principal no acceptarà o no entrades;
aquest és només un programa que anem a executar just.
No anem a lliurar qualsevol informació addicional
cada vegada que la posada en marxa corrent. "
Així que per ara, vostè pot fer això;
també es pot fins i tot ometre el 0 retorn
al final dels seus programes i van a córrer molt bé,
però et recomano que simplement mantenir polz
En un parell de setmanes, començarem a tipus d'
retirar la tapa una mica i entendre més sobre
totes aquestes diferents parts mòbils petits.
>> Molt bé, ara anem a parlar de la nostra segona pregunta aquí.
Llavors, què significa "identificador no declarat" solen indicar
si enviada per Clang?
Crec que podria haver vist que ja avui en dia.
Pot algú donar un resum del que això significa?
A veure, Kelly - un dels Kelly.
>> So -
Sí, ho fa -
>> Crec que quan, com, no declarar les variables i s'intenta usar.
Sí, exactament, exactament.
Així que si mai veure aquesta sortida
al de compilar el programa,
igual que Kelly va dir:
significa que ha utilitzat una variable que no va declarar,
així que si torno a anar al nostre espai,
i faig alguna cosa com
printf (
"Hola% s")
i tractar d'omplir aquest% s
s amb una variable que no he declarat en qualsevol lloc
i tracte d'executar,
veuràs el que em poso en aquesta part inferior dreta aquí:
"L'ús d'identificador no declarat 's'";
que simplement vol dir que vostè no va declarar la seva variable.
El mateix passa si
té x i intenta emmagatzemar i 7 en el
i jo no declarar X.
Ho entenc mateix error:
"L'ús de 'x' identificador no declarat".
>> D'acord,
de manera que el xifrat César, no és molt segur,
Vaig a deixar que vostès veure aquest tipus curt, d'entendre per què,
i espero que després de fer un problema d'aquesta setmana estableix
on realment escriure un xifrat César, vas a entendre una mica més
sobre el que significa ser un lloc segur i insegur -
o no segur, suposo - insegur és lleugerament diferent.
L'altra cosa és que tenim aquestes altres preguntes aquí
sobre les funcions
i el que és una funció,
i quin tipus de parla breument que quan parlem de valors de retorn;
per a algú que hagi estat en una conferència,
pot resumir que ha estat a la conferència d'avui?
Està bé.
Anem a veure, tindrem - Pot algú dir-nos què és una funció?
Kelly?
>> Bàsicament >> cosa que recórrer a alguna cosa que està escrit a la biblioteca que és
més complicat allà, i llavors vostè acaba d'escriure un breu formulari d'ella,
així com la que vostè es refereix de nou a la biblioteca, utilitzant
tot aquest codi llarg i [inaudible].
Sí, exacte, i després vols afegir alguna cosa a això?
>> Sí, penso com alguna cosa similar al concepte d'una fórmula matemàtica en
en el que acaba d'escriure una fórmula i llavors es pot connectar variables en
i això és el que una funció és [inaudible].
>> Sí, així que tenim un parell de respostes aquí
que són alhora molt bo i just.
No s'està referint al codi que s'ha escrit en algun lloc a la biblioteca
que és més complicat
i llavors vostè pot aprofitar aquest codi
i realment s'utilitzin amb només escriure la forma curta de la mateixa -
o, millor dit, el seu nom -
i llavors també hi ha aquesta comparació a una fórmula en matemàtiques
o la física, tot aquest tipus de coses
on es té una fórmula
i que poden connectar a l'ordinador
les variables que la fórmula
per obtenir el resultat de la fórmula,
per la qual cosa pensar-hi com com l'equació de segon grau.
Imagineu si en comptes d'haver d'aprendre sobre
el que la fórmula quadràtica es troba a la classe de matemàtiques,
vostè acaba de tenir un programa de calculadora poc que vaig fer per tu.
Algú utilitza programes de calculadora a les classes de matemàtiques a l'escola secundària?
Sí, les classes de física?
On vostè pot dir, "Hey, fórmula quadràtica.
Aquestes són les variables que desitja ingressar.
Ara dóna'm la resposta ".
Això és una cosa del que és una funció.
És una manera per a nosaltres per
tipus d'escriptura com un petit subprograma mica
dins del nostre programa més ampli
i l'utilitzen una i altra vegada
de manera que no hem de copiar i enganxar el codi,
podem donar-li diferents entrades i obtenir resultats diferents,
és súper pràctic
quan vostè està tractant d'escriure programes diferents en moments diferents.
>> Així, per exemple, una funció que hem estat usant una i altra vegada i una altra
durant tot el curs és printf.
Printf és en si mateixa una funció
i resulta que en realitat és un bastant llarg i complicat,
desagradable aspecte, funcionen per escriure.
Així tan simple com sembla a nosaltres
per imprimir matèria cap a fora a la pantalla,
perquè tots ens vam fer al principi de la secció d'avui,
resulta que en realitat és, ja saps,
un bon parell de centenars de línies de codi.
No és una cosa que jo mai voldria escriure, sens dubte,
però nosaltres la fem servir cada dia, això és una mena de fresc,
de manera que hem de compartir amb els altres,
amb diferents programes,
pel que anem a bussejar més en funcions;
de moment, no estem -
l'única funció que estarem escrivint és principal.
Principal en si és també una funció,
i es pot veure que té la seva sortida,
seus insums, com els que hem parlat,
i després el seu nom, que és el principal.
Principal és una espècie de - és una funció especial allà.
Al programa de C, ha d'haver una funció principal,
i així de moment, hem omès tipus d'escriptura
el prototip, o la declaració de, principal.
Li hem donat a tu,
i hem acabava d'omplir els espais en blanc de classe.
>> >> Per tant per al conjunt de segon problema, no cal
escriure en la segona funció?
Jo no ho crec.
Jo crec que és tot aquí.
Sí, i xifrat de Cèsar,
vostè no ha de fer-ho, no ho sembla,
i Vigenère, vostè tampoc,
Per tant - i resulta que no sempre realment ha d'escriure
una funció, no?
Vostè diu sempre posar tot el codi dins de principal,
i molts programadors fer això.
A mesura que avancem,
comencem la introducció de funcions com una forma de
per netejar el codi,
perquè sigui més elegant,
en cas de tenir tasques - una cosa així com quan parlem de bucles,
com de vegades hi ha coses que vostè vol fer una i altra vegada i una altra,
i que té una espècie de la manera ingènua -
o el que sovint anomenem el "home de palla" solució,
és simplement copiar i enganxar una i altra vegada -
vostè pot fer el mateix amb les funcions on només has de copiar i enganxar
el mateix codi una i altra vegada,
però que infla el codi -
acaba de fer el seu codi molt llarg -
i també posa una mica confús,
i llavors vol dir que vostè no és capaç de com -
si mai vols utilitzar aquest codi de nou en un altre programa,
vostè també està atrapat copiar i enganxar de nou,
així que una de les coses que anem a parlar és de
tipus de disseny i l'estil dels seus programes,
i així, quan té sentit mena de
paquet d'alguna cosa i posar-lo com una funció separada,
t'animem a fer-ho,
i això és una cosa que, de nou,
no hi ha regla dura i ràpida.
Poques vegades ens diuen que vostè ha d'escriure una funció anomenada aquesta,
sinó que és més aviat una d'aquelles coses que només es desenvolupen amb el temps
com s'escriu més i més programes.
>> Una mica més preguntes?
Està bé, així que anem ara
tornar a pujar a aquest noi aquí,
així que estic encara en aquesta secció de preguntes.
Hem parlat de tots aquests éssers diferents,
el que és una funció, per què escriure funcions,
quan es pot copiar i enganxar?
Esperem que t'hem convençut que l'escriptura de funcions és una bona cosa.
Així que ara passarem a aquest programa MySpace,
i passarem una mica de temps fent això.
>> Per tant, anem a veure,
puc tenir algú que llegeixi això per a mi?
Tindrem Mikhaila - vaig a llegir aquest per a nosaltres?
>> Vols dir tornar quan MySpace -
Abans, quan MySpace era fresc.
>> "Abans, quan MySpace era fresc,
que era l'últim crit de tipus com aquest.
Potser encara ho és? Jo no estic molt segur.
En qualsevol cas, d'utilitzar l'aparell CS50,
CS50 Run, o espais CS50,
escriure un programa que sol · licita a l'usuari un missatge
i després mostra el missatge amb la seva primera lletra en majúscula,
amb totes les altres lletres en el cas d'alternança,
com per la sortida d'exemple següent,
text en negreta representa l'entrada en la qual alguns usuaris.
Per simplificar, es pot suposar que l'usuari
voluntat només lletres minúscules i els espais d'entrada.
Penseu en aquest problema una oportunitat de practicar;
no se li va demanar que presentés aquest programa ".
>> Awesome, gràcies.
Així com Mikhaila va dir,
anem a escriure un programa que myspaces seu codi.
Així que, algun de vostès utilitzen MySpace?
Qualsevol de vostès tenen comptes de MySpace?
Oh, sí, sí!
Va ser molt cool.
[Rialles]
Ho sé.
Cites mi mateix.
Així que el que estem tractant de fer és escriure un programa
que passa a través
i en majúscula la primera lletra
i després cada lletra després -
o qualsevol altra lletra després d'això, ho sento.
>> Per tant - i es pot veure en aquest exemple,
així és com s'executa el programa,
pel que aquest és només dir: "Estem executant un programa anomenat a.out.
L'entrada que anem a donar-li
va que se li pregunti.
No anem a proporcionar l'entrada a la línia d'ordres. "
Si vostè ha estat seguint totes les conferències
i sentint sobre els arguments de línia de comandes,
això és una cosa que aquells - que la sintaxi covard
a principal ve amb l'int argc, totes aquestes coses,
pel que aquí no s'està usant això, no estem tractant amb res d'això.
Només obtindrem aquest tipus en l'usuari,
i llavors aquesta segona línia amb la capitalització covard
és el que volem que el nostre programa de sortida.
>> Així que en lloc d'utilitzar l'aparell o Executar, utilitzarem els espais,
perquè tenim espais,
i per tant si vostès ho faria
obtenir el seu codi per buscar alguna cosa com això,
així que vaig a guardar aquesta revisió
només pel que té la placa de la caldera aquí
que són aquestes, int main (void), res en ell.
En realitat, el que farem és que només haurem de esborrar tot junt.
Volem una pissarra en blanc,
perquè no anem a començar a escriure codi;
més aviat, intentarem escriure una mica de pseudocodi
que en realitat només vol dir que anem a escriure alguna cosa que no és codi
aquest tipus de descriu el que volem fer,
una mica com David ho va fer en el primer dia de la conferència,
o suposo que va ser el segon dia de la conferència quan ho va fer la demostració mitjons conjunt.
Vostès recorden que - de veure els mitjons?
Joseph hi era espècie d'escriure en anglès?
Així que anem a fer el mateix.
>> Així que quan començo a escriure pseudocodi,
M'agrada començar per mirar el que l'entrada es serà.
I em dono un cas d'exemple,
així com "gràcies per l 'add!"
I llavors jo també escric el que vull que la sortida sigui,
que en aquest cas és una cosa semblant.
I aquest tipus de em dóna un bon lloc, igual que, començant a pensar,
"Està bé, vull prendre la línia 1
i vull convertir-la en la línia 2, "
i aquest tipus d'ajuda a guiar el meu pensament.
Aquest és un bon lloc per començar.
Una altra forma de pensar-hi, també, a mesura que es mouen en kinda
i com ho fa en els seus propis programes, és
pensar en alguna cosa així com ho són els casos límit a això?
Quins són els escenaris de tipus d'estranys?
Quines són les entrades estranyes que podríem obtenir?
I què si aquestes sortides sembla?
Per exemple, una entrada estrany
seria aquest,
crear absolutament res,
semblant al que hem d'emetre en aquest cas?
Una cosa que vull pensar, també.
>> Així que com una pregunta,
el que volem de sortida?
Si no rep cap entrada en absolut, el que hauria de ser la sortida del nostre programa?
>> Res.
Res? Sona molt bé.
Així que volem assegurar-nos que no estem escrivint res
si no s'aconsegueix res polz
Cool. Bé.
Tan
Vaig a trucar a un parell de persones a mesura que avancem a través d'
i només imaginar una cosa així com el que l'algorisme general és
i quin tipus començarà a treballar per això junts.
>> Per tant, anem a veure. Missy.
Com creus que ens agradaria començar?
Quin seria un bon lloc per començar aquí
si volem transformar, per exemple, la línia 1
a la línia 2?
Pot vostè només tipus d'explicar, en anglès, el que estàs pensant?
No et preocupis pel codi.
El >> primer que faria seria
classe de dirigir l'usuari a dir-los el que vols.
Molt bé, així, per exemple,
"Hey, usuari. Vull
una cadena "- impressionant.
Així que anem a escriure això.
Preguntar a l'usuari en una cadena.
Això sona com un bon començament.
Està bé.
Anem a preguntar a Kelly Ren aquest moment.
Què faríem llavors vols fer ara?
Quina classe del nostre costat -?
>> Recollir la seva entrada i guardar com una variable.
Gran.
Així recollir la cadena,
emmagatzemar en una variable.
Llavors, hi ha alguna cosa en especial que volem fer aquí?
Volem comprovar la seva entrada
abans de -?
Sí >>.
Què podríem voleu cercar?
>> Bé, vostè ha dit que no cal comparar és un nombre, no?
Perquè a suposar que es tracta de minúscules?
Si.
>> Així que resulta que - si.
Així getString està garantit per a nosaltres tornar una cadena.
No tornarà un nombre a nosaltres o alguna cosa així.
És possible que hi hagi caràcters dígits dins d'aquesta cadena, però.
I aquells, podem ignorar com es va fer la capitalització.
Però una cadena buida és totalment bé,
de manera que el cas aquí, a la línia 4 i 5,
dreta, on no hi ha entrades,
i hem posat res com la nostra sortida.
No ha de preocupar-se per assegurar-se que hi ha alguna cosa en la cadena de
o que la cadena és d'almenys 4 caràcters de longitud;
tot està bé.
Així que això es contrasta, per exemple, amb programes com els centaus que va anotar
on calia assegurar-se que estaven rebent nombres no negatius;
calia assegurar-se que vostè estava rebent el nombre correcte de dies en un mes.
I què fan això?
Com fer la prova?
Què és el que podria utilitzar?
>> Do-while.
Do-while, altres tipus de bucles, també, sí.
Per tant, resulta que no és necessari utilitzar un bucle en aquest cas,
quan ens demani la cadena, que és bastant agradable.
>> Molt bé, seguim.
Per tant, Stella.
Pots explicar-nos una mica sobre el que hem de fer ara?
Així que ara tenim la cadena, el tenim emmagatzemat en una variable;
¿Què és el que hem de fer amb la cadena?
Necessitem >> -
identificar el 2 -
Sí, només ho diu en anglès, que és impressionant.
Identificar els >> [inaudible] capitals - o, en majúscules.
Sí, pel que hauria identificar quines són les lletres majúscules i minúscules.
No podem majúscules o minúscules fins que hem identificat quins.
Així que anem a posar això aquí.
>> Per tant, només de pensar en aquest procés,
Com fer aquesta identificació?
Sap vostè, Dan?
Una mica el que nosaltres - què eina que hauríem de fer servir fora de la nostra caixa d'eines?
>> El posaria en alguna manera en com una matriu o una línia cada
és la seva pròpia caixeta,
i després des d'allà majúscules o no.
Bé, una eina que podem utilitzar és una matriu.
Què hem de veure a la cadena,
però, per entendre - que vam haver de buscar els personatges.
>> Així que has de mirar la longitud de la corda?
Sí, per la qual cosa part de que està rebent la longitud de la cadena.
Només per curiositat, què és el que utilitzem per obtenir la longitud d'una cadena?
>> Strlen?
Sí, strlen, anomenem a això "strlen"
Totes aquestes funcions de cadena, de manera que és una funció strlen,
i és súper útil, perquè podem usar per dir simplement,
Ei, strlen: Això és una cadena, digues-me quant temps és.
En la conferència d'avui, David va parlar molt sobre com s'implementa strlen,
el que realment està succeint darrere de les escenes.
Però aquest és un dels més pràctics molt super.
Hi ha altres que també estan a la biblioteca de cadenes,
com strcmp, que s'escriu "strcmp"
que s'utilitza per comparar cadenes entre si.
Els altres que utilitzarà com strstr,
que és bo per trobar seqüències sub i així successivament.
En la seva major part, tots comencen amb la cadena i després passar a ser una altra cosa.
La raó per la qual en realitat no els escriu com a cadena i així successivament
és perquè en com els primers dies de C,
quan la gent era la primera escriptura i tot això,
tenien limitacions en el nombre de caràcters que pot utilitzar
per als noms de funcions i noms de variables,
així que tot és com súper condensada.
Però cada vegada que veig una cosa que comença amb str,
que normalment vol dir que això té alguna cosa a veure amb una cadena.
>> Molt bé, així que has de obtenir la longitud de la cadena,
i llavors, què fem amb els personatges?
Saps, Sam?
>> No tinc ni idea, jo estava tractant d'esbrinar.
Realment no ho sé - M'agradaria que hi hagués alguna manera de -
Vull dir, jo crec que potser podríem fer alguna cosa amb parells i imparells,
però jo no conec cap funció així.
Si.
>> Però això - no necessàriament funcionaria,
perquè llavors vostè aconseguiria els espais a ser -
vostè hauria de tenir l'espai per obtenir consells sobre com -
Bé.
>> No sé - sóc de classe perdut en aquest punt.
Sí - no, no, no, aquests són bons punts.
Així que el que hem de fer és, igual que Sam va dir:
necessitem per seguir què cartes són les cartes imparells,
i quines són les lletres, fins i tot.
Però volem assegurar-nos que no només estàs buscant
a l'una i imparell
Els índexs de la cadena,
sinó més aviat mirar les cartes parells i imparells a la cadena,
així que hem de tenir una mica aquesta distinció entre
lletres - com el que en realitat és A, B, C, D, o així successivament,
i les coses que no són lletres, però encara en la nostra cadena.
Per exemple aquí, com aquest signe d'exclamació no és una lletra,
però segueix sent part de la nostra cadena, és encara un char.
Així mateix, tots aquests espais -
no té sentit per aprofitar un espai, no?
Així que volem assegurar-nos que estem d'alguna manera ometre els
sense deixar de rastrejar parells i imparells.
>> Així que una mica en la nostra caixa d'eines de programació
fins ara, si es vol,
tenim un nombre de diferents eines que hem parlat.
Així que una, per exemple, són variables,
com hem parlat aquí.
Una altra de les eines que hem parlat són funcions.
Fins ara hem parlat sobre les variables en el nostre pseudocodi aquí
com el que utilitzarem per emmagatzemar la nostra cadena.
Hem parlat de funcions per obtenir la longitud d'una corda, com strlen.
Hem estat parlant d'una altra cosa, i hem parlat
de molt abans a la secció d'avui: bucles.
>> Què pensen vostès sobre l'ús d'un bucle en aquest programa?
Jared, què et sembla?
Podríem utilitzar un bucle en aquest programa?
>> Probablement no, no, perquè vostè no ha d'anar a través d'ell més d'una vegada.
Bé, vostè no ha de passar pel que més d'una vegada?
>> La cadena completa.
Bé, així que vostè no ha de passar per tota la cadena una vegada.
Em sap greu que no tenia cap sentit!
Vostè no ha d'anar a través de tota la cadena més d'una vegada.
Bé.
Què et sembla?
>> Crec que és millor usar-los
pel que podem fer com capitalitzar mentre
la ubicació de la mateixa és el nombre de [inaudible].
Gran, i així capitalitzar què?
Bé, pel que estem dient que
hem d'utilitzar un bucle perquè volem
una lletra en majúscules, mentre que no és un nombre.
Així que - ho sento, t'agradaria afegir?
>> Jo havia de dir que la manera de tractar la cadena
i [inaudible] a part de [inaudible] en els personatges?
Si.
>> I llavors podem assignar els nombres a -
o en base a la ubicació de les lletres a la cadena?
Si.
>> I identificar si és parell o imparell i capitalitzar la pròpia carta
mentre que la ubicació de la carta és [inaudible] - ho sento.
Gran.
>> Així que només un resum.
Em pots recordar el teu nom una altra vegada - Em sap greu.
>> Charlotte.
Charlotte, està bé.
Llavors, què està dient Charlotte,
que és totalment correcte - Déu, això li agrada auto guió en mi -
és que si ens fixem en una cadena
com està a la part superior -
"Thanks for the add" -
com una seqüència de caràcters
on el està en la posició 0,
la h està en la posició 1.
A és a 2, llavors tenim 3, 4, 5;
l'espai està en la posició 6.
Considerant - quina és la posició de f?
7!
O? 8.
R? 9.
I després tenim a 10, i llavors jo realment no es pot escriure sense
poc embrutar a la pantalla.
Però això és en realitat la manera com es pot parlar de cadenes en memòria.
És una cadena
és una seqüència de caràcters,
i quan ens referim a un caràcter individual en una cadena,
que sovint ho fan amb referència a la posició del personatge
dins de la cadena,
probablement de la mateixa manera que parlem de setembre
sent el novè mes de l'any
o el dilluns és el primer dia de la setmana.
Així que això ens proporciona una forma de
esbrinar quines són imparells fins i tot davant
perquè vostè pot veure aquí,
si ho coincideixin amb aquesta samarreta,
es pot veure que totes les majúscules
estan en posicions parells,
almenys per a la primera paraula,
i llavors les coses són llançats fora un cop arribem a aquest espai,
perquè no es tenen en compte aquest espai com una carta,
així que és com si comencéssim
i va ser 0, 1, 2, 3, 4, 5,
espai, 6, 7, 8, l'espai,
9, i després 10, 11, 12, i així successivament.
>> Cool, així que sens dubte haurà de fer servir algun tipus de bucle
per revisar cada un dels personatges alhora.
Per tant en aquest punt,
tornarem al nostre pseudocodi vell aquí.
Com a part d'aquesta identificació de quines
estan en majúscules i quins són minúscules,
voldrem fer això en algun tipus de bucle.
Loop, còlon.
Quin tipus de bucle, dels tipus de bucles que tenim,
sembla ser una bona opció per utilitzar aquí?
>> Jo estava pensant el bucle for.
I per què està vostè pensant en bucle?
>> Com que comença en zero i, a continuació,
quan arribem a la longitud de la cadena,
i llavors cada iteració pot [inaudible], també?
Sí, exactament.
Així, de les opcions diferents de bucles,
que tenim per bucles, els bucles while i do-while.
Quan un bucle és particularment útil
és quan es vol saber
classe d'on vostè està en el bucle,
quantes vegades el bucle ha estat executat fins ara.
Que és exactament el que volem saber en aquesta situació,
com Kelly va dir:
amb seu fora del comentari anterior de Charlotte que volem saber la posició
del caràcter dins de la cadena,
i el bucle for ens donarà exactament això,
perquè si comencem espècie de mirar cap enrere en la nostra cadena,
si comencem el nostre llaç per a 0,
i es puja a través de la longitud de la cadena completa,
llavors podem associar la lletra T
amb el 0 en el nostre bucle for,
lletra H amb l'1 al nostre de bucle, i així successivament,
va tot el camí a través de l'extrem de la cadena.
>> Així que anem a començar a programar aquesta una mica
només per vostès tenir una idea de com es veu.
Vaig a guardar això,
així que tenim el nostre codi pseudo aquí,
i vaig a esborrar tot.
Així que tinc una pissarra en blanc.
Vaig a començar per escriure int main (void)
{
Vaig a posar el 0 retorn a
i després el.}
Així que en general quan començo a programar, això és el que començar.
El guardaré perquè vostès ho tenen.
Així que una de les primeres coses que parlem va ser
rebent l'entrada de l'usuari
i el seu emmagatzematge en una cadena.
Com fem perquè l'entrada d'un usuari?
>> GetString.
GetString, està bé.
Així que si escric GetString ()
i un punt i coma.
Tractarem d'executar aquest, es aquesta carrera, en primer lloc?
I per què no funcionarà això?
>> Vostè ha de declarar la variable.
He de declarar una variable. Bé.
>> Llavors, com puc fer això?
T'importa escriure alguna cosa, compartir?
I després podem pujar.
A veure, Dan, oi, està bé.
O Daniel. Copiar en què, d'entrada cadena = GetString ().
Awesome.
Això córrer?
Anem a intentar-ho.
Cop d'execució, el codi font pujar, edifici, va ocórrer un error.
Bé.
Llavors, què s'està encenent aquí?
L'ús de 'cadena' identificador no declarat.
>> Hem de incloure les biblioteques?
Sí, així de Dan dient que hem d'incloure les biblioteques.
És això el que anaves a dir, Stella? Awesome.
Això és impressionant, pel que Stella, pot
còpia aquest codi de espai de Daniel?
Si fa clic sobre Daniel Roland Ki, copiar,
i després es col · loca la línia include, i després guardar fora?
Avísame quan estiguis llest.
Així que aquesta sintaxi d'inclusió és també una espècie de covard;
hi ha com aquesta etiqueta hash,
I aquí està el incloure, i després hi ha els claudàtors angulars.
Te'n recordes de com funciona això, o he de posar en el codi aquí mateix?
>> Estic bé.
Bé.
>> El imprimir - No estava segur de quina biblioteca, però.
Oh, està bé - si, de manera que és la biblioteca CS50.
>> Oh, vaig posar biblioteca stdio.
>> Oh, el tinc - sí, no, això és -
per la qual cosa resulta que la cadena és realment una cosa que és especial per CS50.
Hi ha en realitat no és un tipus de cadena true
perquè aquí, la cadena està en la posició tipus, -
estem declarant una variable d'entrada es diu de tipus cadena -
i estem posant dins de l'entrada
el valor que es retorna a nosaltres: la sortida d'aquesta crida a la funció GetString.
Pots dir que això és una crida a la funció perquè té els parèntesis, com printf fa,
igual que strlen fa.
Però cadena no és en realitat un tipus real
en el llenguatge C.
Ho hem fet en un tipus, i anem a prendre alguna cosa més del que realment és
al carrer, perquè no hi ha una manera de treballar amb cadenes;
que acabem de fer alguna cosa perquè es vegi una mica millor.
>> Així que aquí anem.
Aquí està el codi de Stella.
Té el # include .
Altres persones criden a això com un hash de vegades inclouen o poden incloure una esmolada.
Ara podem començar, executar,
i encara obtenir un error.
Anem a veure el que passa.
"Variable no utilitzada 'input'".
Bé, això està bé, està bé.
Vull dir, no és genial,
perquè estem rebent un error i no està en funcionament,
però el que això vol dir és que
no hem usat la nostra variable, el que té sentit.
No hem tractat de fer res amb ella.
Aquesta és una forma que
Clang està tractant d'ajudar a fer de no només estem utilitzant variables
i després sense voler cridar res més endavant en el nostre codi,
ajudant a evitar els errors d'aquesta manera.
>> Molt bé, així que tenim l'entrada d'usuari,
que s'emmagatzema en una variable.
El següent pas va ser llavors
començar a buscar en tots els caràcters de la cadena
i la identificació de quines seran majúscula
i quins han de ser minúscules.
I igual que Kelly i Charlotte criat,
fem això amb un bucle for.
Llavors, ¿Algú es recorda de la sintaxi d'un bucle for
i m'agradaria prendre una punyalada en l'escriptura justa
la primera línia del bucle for, només per l'estona?
Kelly, vols donar-li una oportunitat?
>> Sí, així que cal inicialitzar primer,
així que em vaig posar = 0,
i després vaig fer i <strlen ().
Està a l'Espai - puc aixecar?
>> Sí, vaig ficar la pota una mica, però sí.
>> Bé, anem a estirar-lo cap amunt.
Awesome.
>> Però llavors jo no sabia si havia de -
Sí, està bé.
Així que aquí està el que Kelly té: veurem aviat.
Així que ella s'inclou la biblioteca CS50 a la part superior.
Ha inclòs la biblioteca estàndard de IO a la part superior,
i el IO estàndard té funcions com printf,
de manera que si mai vols utilitzar printf, necessita aquesta línia.
I llavors es va incloure la biblioteca cadena,
que necessitarem,
perquè la biblioteca de cordes té la funció strlen,
que arribarem en només una mica.
Així que si ens fixem en el que Kelly ha fet aquí,
Què ens pot caminar a través del que vas fer?
>> Sí, que sí - Dic, tinc errors, així que -
Sí, no, és -
>> Així que volia cridar a la cadena que em va venir a mi "cadena".
Volia imprimir la cadena
i llavors -
Jo volia com establir la cadena com una matriu com de cada personatge
ser diferent [inaudible], no?
I llavors jo volia començar a la posició 0
i després cada 2 espais,
M'anava a capitalitzar,
així que només ho va descriure com el 23, perquè jo estava mirant la taula ASCII.
Així que això és el que estava pensant - Sé que no està bé.
>> Ho tinc, així que això és un gran començament.
Crec que molta de l'estructura està en el seu lloc aquí.
Anem a passar per tipus de línia a línia i veure el que està passant.
Així que la manera que m'agrada fer això acaba de començar compilant el codi
i deixar que el compilador em diu com el que li passa al meu codi,
ja que el compilador és realment bo en que li diu el que està malament amb el seu codi.
Així que si la toquem, la construcció, i no s'acumula.
Es diu que hi va haver un error,
de manera que si desplaceu-vos cap avall i busqueu en el primer error,
va dir -
de desplaçar de nou fins a la part superior,
podem veure que hi ha 5 errors generats per aquí, a la part inferior.
Vaja, això és realment curta.
Suposo que simplement no aconseguirà res millor.
>> Aquí anem.
Així que hi ha 5 errors totals generats.
Aquí només puc veure les 2 primeres,
per la qual cosa es pot moure això una mica i després tipus de desplaçament cap amunt.
Aquest és el comandament que es va executar per compilar el codi,
i després el primer error va ser en file.c aquí:
"S'espera identificar o '('", i va ser en aquesta línia
on aquesta cadena = GetString ().
Es pot veure aquí que era a la línia 8 de file.c,
i llavors jo crec que això és de 12 caràcters - que és l'error.
Així que el que va malament en la línia 8 - Kelly?
>> Vostè només ha de trucar, com una carta o alguna cosa així,
s com a cadena o alguna cosa així?
Sí, per la qual cosa resulta que aquests noms de tipus especials,
així string, int, curt char,
que són totes les paraules clau especials,
i en realitat no es poden utilitzar com a noms de variables,
perquè el compilador veu això i diu:
"Oh, ja sé que és un tipus"
així que en realitat no es pot tenir una variable de cadena anomenada cadena,
com que estic tractant de fer aquí, el que no funcionarà.
Però en canvi, podem dir que és com es o st o str.
Tampoc es podria dir int.
No podem tenir una cadena anomenada int.
No podem tenir una cadena anomenada char; cap d'ells va a funcionar.
>> Així que simplement l'anomenarem s de moment.
Awesome.
Així que el següent que està passant en aquesta línia?
String - aquesta línia es veu molt bé?
Anem a donar-li una altra oportunitat, anem a executar.
Bé, de manera que encara amb errors.
Aquesta vegada, estem a 4 errors.
Així que ens van donar una.
Anem a pujar.
"Nom de tipus inesperat 'cadena': Expressió esperat", no?
>> Sí, això és perquè he intentat nomenar la cadena.
Sí, el que sembla que ara també hem d'anar fix
totes aquestes referències a cadena.
Vostè pot veure que hi ha una referència a la cadena d'aquí, un aquí, un aquí,
perquè puguem passar tot això a s.
Gran. Bé, executeu-lo de nou.
Edifici - un altre error.
>> Bé, ara que estem a un error,
així int i = s i després els claudàtors.
Llavors, ¿Pots explicar una mica sobre el que estava fent aquí, Kelly?
Sí >>.
Era a la línia 10.
>> No sé si necessitàvem tot,
però crec que estava intentant -
El guardaré perquè pugui seguir endavant.
>> Crec que estava
tractant de dir-li que comencen a la posició 0
al principi de la meva bucle for,
així que crec que potser aquesta paraula no era necessària.
Així que per recapitular,
vostè deia que això - que estaven tractant d'iniciar aquesta en la posició 0
I aconseguir això - si,
així que crec que abans, també, quan anaven caminant pel codi,
que estava parlant de com volia tractar la cadena com una matriu
pel que podem accedir a cada personatge individualment.
Crec que Dan matrius esmentades, també, tractant de convertir cadenes a una matriu.
>> Resulta que el tipus de sota el capó,
una cadena que s'emmagatzema com una matriu ja,
i es pot accedir com una matriu;
no hi ha conversió que vostè ha de fer.
No és una cadena - curs -
una cadena no és realment una matriu,
però es pot accedir com a tal, ja que tots els caràcters s'emmagatzemen
un al costat de l'altre en la memòria d'un,
així que si vol aconseguir el primer caràcter de la cadena,
és el mateix que rebre el primer nombre enter en una matriu d'enters.
Així que moltes vegades - ens tornarem
es refereixen a la 2 com
oh, com una cadena, com una matriu,
encara que en realitat - són coses molt diferents,
però es poden tractar molt semblants.
Així que resulta que aquesta línia en realitat -
no cal fer cap conversió,
i, de fet,
això en realitat no és una expressió vàlida,
que és el que el nostre compilador ens està dient.
És com dir, "Hey, espera una expressió,
i el que tenim aquí és una cosa que no és una expressió. "
Per declarar una matriu,
tot el que ha de fer és una cosa com això amb un punt i coma,
i després et dic la matriu quant de temps voleu que sigui,
tal com 5, de manera que aquesta línia 10
declarar una matriu anomenada i amb 5 punts en el mateix.
>> Aquest és una banda, el que no és necessari que el codi,
però això és - això és una cosa del que la declaració sembla.
>> Com no s'utilitza char i [strlen (s)]?
Char i [strlen (s)]?
I >> char, i després dins del parèntesi, strlen (s).
Sí, per la qual cosa podria -
que podíem fer això,
i això seria declarar - què això?
>> Crec que seria declarar una matriu
de, com - de -
oh, no cal l'i - oh,
sí, definitivament no és necessari l'i.
Ha declarar una matriu de caràcters
s de longitud.
I així, el que Sam està dient és que
aquesta línia 10 - m'ho dius a mi posar una mica d'espai entre ell i la resta perquè puguem aïllar -
aquesta línia 10 es declara una matriu
de caràcters, strlen (s) per valor d'ells,
però en realitat cal l'i,
i la raó per la qual necessitem i és perquè hem de donar un nom de la matriu;
en cas contrari, no tindria una forma de referir-se a la matriu més endavant en el codi.
>> Així que això d'aquí és el nom de la matriu
ia l'interior és la longitud.
Això ens donarà una matriu,
però això és - de nou, aquesta és una declaració.
No és una feina, no és una inicialització.
Si declarem aquesta sèrie com aquesta,
hi ha realment res en el contingut de la matriu.
És només escombraries - ho està aquí.
I com hem dit,
que en realitat ni tan sols és necessari fer aquesta conversió,
perquè ja podem tractar cadena s com una matriu.
Sé que ens estem quedant una mica llarg en el temps,
però vull aconseguir realment ràpidament a aquest bucle for
i li mostrarà com tenir accés als caràcters individuals de la matriu,
perquè això és clau per a la nostra missió.
I llavors et deixarem anar d'allí.
>> Així que aquí, tenim un bucle for
que es veu gairebé bé.
El que no és del tot gairebé arribem?
Com es digui - el que no està del tot bé en això per bucle?
>> No hi ha claus?
No hi ha claus, per exemple.
Vull assegurar-me que tenim el cos del bucle amb claus.
Vaja, no la clau de quadrat!
I què és el següent que hem de fer amb aquest bucle?
Si tracte i executar,
quin és aquest error que em surt?
Tinc tots aquests errors - que he de inicialitzar i.
Gran.
Així que aquest serà un bucle - això no és molt allà,
però està molt a prop.
Aquest codi, ara pot córrer,
construir, un error es segueix produint.
Per què se segueixen queixant,
dient que l'expressió no s'utilitza,
i això és perquè aquesta línia no fa res.
No ho guardi en qualsevol lloc, no teníem guardar el resultat.
On hauríem d'estar estalviant aquest resultat?
>> S o i?
Exactament, i aquesta sintaxi funky,
aquest s amb els claudàtors
significa l'accés del caràcter i de s.
Això serà una cosa que és realment important per a l'assignació.
Malauradament, haurem de parar aquí,
de manera que la secció Sebastià pot entrar,
però estic content d'estar fora després, i prendran les preguntes.
Així que gràcies nois per venir.
Això hauria de carregar, crear, executar.
Podem entrar en una cadena com "hola"
i s'imprimeix "qox".
[Rialles]
>> Així que no hi ha prou, però en moviment, aconseguint als bucles!
Gràcies per venir, i vaig a estar fora.