[Música tocando] ALLISON Buchholtz-AU: Hola a todos. Benvido ao seu primeiro sección oficial CS50. Como pode, ver iso é sección CS50-like, só para puxar arriba a nosa axenda para hoxe. Entón, quen son eu, como eu estou seguro está a se pregunta. Eu son o seu TF. Non son só un estudante ao chou que está representando o TF. E eu vou pasar por especie de seccións fluirá, expectativas que temos, recursos, así por diante e así por diante. Nós imos falar sobre matrices, ASCII funcións, argumentos de liña de ordes, e non é aquí, pero Eu tamén estará axudando vostede medio que pensar súa próxima pset para esta semana. O que eu estou seguro que todo o que pode apreciar. Entón, primeiro question-- quen son eu, ademais do seu TF exuberante aquí. Estou Alison Buchholtz-Au. Este é o meu segundo ano TFing CS50. Eu tamén TF CS51 na primavera. Podes ver de novo alí se decide tomar. Eu tamén son un PAF, polo tanto, calquera Freshmen-- e se non é un calouro, este é o meu terceiro ano como un compañeiro aconsellando. Estou moi ben verso en aconsellando-o sobre a vida e cursos dentro CS e non dentro CS. Eu son un Concentrador de Ciencia Ordenador. Eu son un senior na Adams House, mellor casa. E antes de que eu mudei para CS miña sophomore Spring, Eu estaba realmente un enxeñeiro biomédico. Eu estaba indo a ir á escola Med. Eu estaba indo a ser un cirurxián de trauma. E iso ten completamente cambiou dende que eu tomei CS50. Fixen o curso sophomore miña caída. Foi a miña primeira introdución ao CS nunca. Eu era un dos 78% de vostedes que tiña cero de experiencia chegando, e el cambiou completamente a miña vida. E agora eu estou a traballar en Microsoft, ea súa encantador TF. E CS50 é probablemente un das mellores experiencias que eu tiven aquí no Harvard-- tanto tomar a clase e ser capaz de axudar ensinar os alumnos coma ti. Entón, eu estou realmente animado que estamos todos aquí. No caso de que veu en tarde, hai doces, que ten que sentirse libre para vir incorporarse ou enviar alguén para agarralo lo para ti. é certo. Non quero comer iso. O meu cuarto ten bastante chocolate, polo que vostedes deberían tentar rematar isto. Sei que existen 100 pezas, pero como, 04:00 o luns, Creo que todo o mundo podería utilizar un pouco de azucre. Entón, todos vostedes que son oficialmente na miña sección debería comezar un correo electrónico de min co meu número de teléfono, correo electrónico address-- Sinto-se a liberdade de me engadir Gchat, Sinto-se a liberdade de me engadir en Facebook, e tamén para o resto de vós, pode enviar-me ben aquí. Existen dous H de. Todo o mundo sempre fai como dous L's ou dous c. Dous H das no apelido. Se non, vai ir e Eu non estou indo a obter o seu correo electrónico. Polo tanto, Sinto-se a liberdade de me correo-e, poñerse en contacto comigo en calquera momento. Non pode volver vostede dentro de 24 minutos, pero prometo volver para ti en 24 horas. Se me chamar de media hora antes seu pset é debido, sendo así, Eu non teño idea do que estou facendo Allison. Me axude. Eu estou indo a calmalo, pero ao final do día, se está me chamando de media hora antes seu pset é debido, sen nada escrito, Vou ser como, así, quizais é hora de usar este día de atraso. Entón eu vou responder a todos os seus solicitudes de forma moi oportuna. O meu teléfono é normalmente ligado ás miñas mans. Eu normalmente responden moi máis rápido que 24 horas, pero só podo garantía unha resposta de 24 horas. Todo correcto. Entón, por que estamos aquí? Ademais, se ten dúbidas en calquera momento, por favor, deixe-me saber. Eu falo moito. Eu falo rápido, pero, por favor Sinto-se a liberdade de me deter. Dáme espazo para respirar ben. Entón seccións son un tempo para que realmente só mergullo en, obter algúns hands-on experiencia, a pasar por temas que mencionados en clase ou en materiais de estudio que recomendamos que vós liña. E nós imos realmente pasar por algúns destes recursos en algo. Por iso, algunhas notas sobre o apoio sección. CS50-- unha das cousas que fai que unha das miñas clases favoritas é a sensación de que nunca está só. Temos un equipo de máis de 100 persoas que están aquí para axudar. Temos o horario de expediente De luns a xoves. Polo tanto, hai moita xente que amo a clase tanto como eu fago e quen son realmente aquí porque queren estar aquí. A maioría de nós son estudantes, e este é como unha quinta clase, ademais para o resto do noso traballo. E é unha chea de traballo, pero nós facemos iso porque amamos tanto, e que realmente quere ensinar-lle e axudar a compartir o noso entusiasmo para este tema e esta clase. Entón por favor, aproveitar. Veña falar connosco. Eu estar soa, cando os meus alumnos non falar comigo, entón se quere, vir saír comigo. Será xenial. Así, a sección é obviamente un dos seus máis grandes cousas. Nós imos pasar por cousas que aprendeu na clase, facer algúns breves exemplos cando temos tempo, e, en xeral de tipo ter unha idea sobre as cousas ten que estar pensando sobre a establecer o seu problema. Shorts-- cantas persoas realmente asistir o vídeo do seu cero curto? Alguén me recoñecen? Polo tanto, estas son moi grandes. Ten que definitivamente ver aqueles. Unha morea de traballo foi posto en los. E eles están só pretende ser xunquillo-size pezas para simplemente asistir por tres ou catro minutos e obter un unha mellor comprensión do concepto. Camiño throughs-- como moitas persoas xa asistiron A camiñada de paso para os anteriores? Zamyla é incrible, non? Tipo, eu desexo que eu era Zamyla veces. Entón, en definitiva usar os seus walk-through. Vai división la en pezas, mordida de tamaño pequeno. E cando ten estes enormes especificacións dos seus conxuntos de problemas, que será moi importante para poder simplemente atopar un lugar para comezar a traballar lentamente e a través del. Todo ben, nós tamén temos Study50, que é study50.harvard.edu, eu creo. Pode só Google estudar, e que vai vir cara arriba. Esta é unha das máis mellores recursos que temos. É PowerPoints con notas e practicar problemas para ti con solucións que Pode realmente camiñar. Entón, se quere máis práctica, máis que nós en seccións ou máis que os seus conxuntos de problemas, que é realmente un lugar que eu encouraged-lo a ir. Foi construído no verán pasado por algúns dos meus bos amigos. E é incrible. De feito, moitas das láminas que eu vou estar a usar para a Sección virá de Study50. Entón, unha morea de TFS usalo. E, finalmente, como eu mencionado, o horario de expediente. Se está a ter problemas coa lección de casa, está ter problemas cun concepto, veña para o horario de expediente. Ir ao principio da semana, se poida. Saia ao quad, porque é tipo de lonxe. A ninguén lle gusta andar por aí. Pero é a súa vantaxe, porque entón está terá todos estes TFS, [Inaudível] rodean. E sobre todo agora, Só unha información, quintas son moi frío agora en Mather porque os seus Serie de exercicios son debido ás xoves. E quere saber utilizar os seus días de atraso aínda. Entón, se está a ter problemas con conceptos, hai moitas TFS que están aí para axudar. Entón veña para Mather o xoves. Se quere verme, Eu vou estar alí. Eu estou facendo a miña propia tipicamente lección de casa, porque ninguén quere a miña axuda. Entón veña vernos. Atopar-nos no medio do camiño. Así como moitas persoas xa asistiron charla ou asistir-lo en liña? Como moitas persoas foron para Super sección a semana pasada? Legal. Isto é realmente un bo número. Cantos de vós xa leron o especificación para esta semana, para a súa pset? Ooh, eu estou orgulloso de vós! Máis doces para vós. Bo, entón o que queremos dicir "Buscar-nos a medio camiño", é que a sección é realmente só Será super útil para ti se vostede poñerse en despois de ler a súa especificación para o seu pset. Porque cando eu pasar por unha visión xeral de cousas que ten que estar mirando para fóra, el non vai facer tanto sentido se Non sei o que o seu conxunto de problemas será pedindo que faga. Se non vir a sección, obviamente Non podo ser tan útil. Non vou leva-la persoalmente se non ven a miña sección, agora, pero en definitiva ten que. Se non funciona, velos en liña. Eles están aí por unha razón. Minas vai estar alí. Como pode observarse, estamos a ser gravada, polo que vai estar alí para vós. Así, vai lectures-- que é, obviamente, onde está a recibir o iniciar o seu material aquí. Entón, seguramente vou probar axudar tanto como eu poida, pero eu só podo coñece-lo tan lonxe. Ten que tipo de atoparnos no medio do camiño. Grading-- así, todos vostedes que recibín un correo electrónico de min, vostede é a miña sección oficial. Estarei clasificación súas Serie de exercicios. E eu só quero dicir, unha cousa que ten que realmente prestar atención ao son os comentarios. Os comentarios son moitas veces máis útil do que a puntuación real, dámoslle. E os comentarios son realmente onde eu gasto moito do meu tempo cando estou de clasificación. Entón, gustaríame recibir se le-los. E son, en realidade, como está indo para aprender máis sobre deseño e estilo e as cousas que son un algo menos cortada e seca. Entón, realmente prestar atención a esas observacións. Se ten dúbidas sobre eles, ou preguntas sobre a súa puntuación, por favor, veña falar comigo quere antes sección, Eu probablemente vou ser colgado para fóra no lobby, ou despois. Se desexa axenda one-on-one reunións sobre como pode axudar a mellorar máis tarde conxuntos de problemas, é só me avisar. E, a continuación, só un par de consellos para vostedes. Entón, unha das cousas máis importantes Sempre salientar a miña sección cando está a aprender como facer o código para escribir as cousas no papel primeiro. Se ten un plan de xogo para onde o código que ir eo que necesita facer e el é discriminado en pequenos anacos de pseudocódigo código que escribiu para fóra, vai ser menos propensos a cometer erros de sintaxe ou crear un bucle que se Non ten outra cousa. Se sabe onde está vai global, está menos propensos a facer estes pequenos erros que, ás veces, leva-lo hora de corrixir, porque queda tipo, onde estou falta nesa franxa? Na mesma nota, por favor, use Style50. Especialmente cando se está indo ao horario de expediente, se o seu código é todo conmutada a un lado, é política curso que podemos dicir, resolve-lo de xeito que parece que Style50 di que debería, e entón nós imos axudar. Por iso vai facilitar a súa vida. Isto vai facilitar as nosas vidas. Todo o mundo está feliz. Todo o mundo queda mellores notas. Non é iso que todos queremos? Entón escriba as cousas no papel antes Sempre toca seu ordenador. Falar as cousas a un alto nivel, e asegurarse de que sabe onde está indo. E se non está seguro, sentir-se con alguén e camiñar con eles a través de paso a paso o que o código se quere facer. E nove veces fóra de 10, pode como, oh, eu esquezo unha condición if ou eu esquezo comas aquí ou Estou a actualizar esta mal variable. Polo tanto, estas son as miñas suxestións para o éxito. Entón, xa que aproximadamente a metade do que ollar como asistiu sección super, Eu só vou moi brevemente pasar por loops, que non estaban na nosa axenda orixinal. Pero son realmente importantes. E así eu vou tipo de velocidade a través de quen antes de entrar na nosa sección real. Antes de facelo, están aí calquera perguntas-- loxística, persoalmente, hai calquera outra cousa que quere saber sobre min ou sobre sección ou clase en xeral? Todo ben? OK, legal. Encantador. Entón loops-- vostedes todos deben recoñecer estas pezas a partir de cero. Entón loops son basicamente só unha forma de facer algo un certo número de veces, algúns repetido acción con base en algúns condicional. Polo tanto, temos tres tipos diferentes. Temos loop for, while e do-while. Así, para loops-- só temos unha moi disposición xeral aquí dun loop. E iso é óptimo para cando vostede sabe como moitas veces algo que realizar. Cando falamos sobre o outros loops, vai ver por que isto é unha importante distinción. Pero para loops son para algo set. Vostede sabe que pode calcular o número ou sabe o número de veces que quere este repetido ao principio. Entón, se ve aquí, nós ter só un tipo xeral do cadro esqueleto para un loop aquí. Así, para-inicialización, este é o lugar onde súas variables son inicializados. Con Mario, eu estou seguro que vostedes fixeron algo así como int i é igual a 0. É aí que ía ocorrer en azul. Ten a súa condición, o que é o que é comprobado cada vez. Se esta condición sexa verdadeira, entón o resto do código é executado. A continuación, el vai executar novamente-- e preguntar. E despois temos de actualización, onde está a actualizar a súa variable. Entón, unha vez máis, con como Mario, eu estou seguro vostedes fixeron algo como i plus plus. Así, cada vez que o loop foi, eu teño actualizado para que cando estabamos comprobando-lo contra algunha condición, estaba cambiando. Porque se só ten unha variable estática, se se executa a primeira vez, só vai executar infinitamente. Entón tes que ter seguro que actualizar a súa variable correctamente. E tamén temos só unha representación visual alí. Todo o mundo bo? Para laçadas. Debería ver estes na súa pset. Legal. Entón, aquí é só un exemplo fácil. Imprimir Este é CS50! 10 veces. E así temos a nosa arranque, como podemos ver alí, con int i é igual a 0, para i é menos de 10, e eu plus plus. E vai imprimir que 10 veces. Así, mentres loops-- mentres loops son grande cando non fai, necesariamente, ten que saber cantas veces se vai actualizar o comezo. Vostede só ten algúns condición que é comprobada. E iso podería ser algo así como while-- imos dar un exemplo de súa pset. Se Mario, tenta entrada dun número negativo. Non? Era para ti re-solicitar o seu usuario. Así, pode dicir, ben, se as entradas de usuario algo menos que cero, re-aviso A eles. E estou seguro de que podería foi algo que algúns de vós usado no seu código. Entón é unha cousa sinxela. Ten tempo, algúns condicional que está marcada cada vez que o código vai a realizar. De ser avaliado como verdadeiro, nós executalo. Se non, non. E o que é realmente algo importante-- I creo que David falou sobre en lecture-- son as claves. Calquera que sexa de dentro do claves é o que corre. Se esquece os tirantes, que vai só ser a liña directa tras este tempo foi executado. Entón, se ten tres cousas que son presuntamente a acontecer cando este condición de ser valorada como certa, e non ten esas claves, só o primeiro que vai ocorrer. Polo tanto, é moi consciente do onde poñer as súas claves. Se queda con Style50, iso vai axudar definitivamente. Legal. Polo tanto, esta é unha conta atrás de 10 a cero. E como ve aquí, nós arrincar algúns contador fóra dela. Unha cousa que é diferente é Non estamos inicializar nosa variable dentro do noso loop while. É inicializar fóra dela. Estamos simplemente poñendo o condición no noso tempo. Polo tanto, neste caso, é á vez conta é maior que cero. E nós imprimir o que a nosa conta é, e despois de que nós diminuiremos nosa variable. E iso é tamén unha outra cousa a notar. A nosa actualización non acontecer dentro que a primeira parte do bucle while. Realmente vai ocorrer dentro as claves, o corpo do seu texto. Polo tanto, mentres loops --- do-while son grandes para validación do usuario. Entón, algúns de vostedes poden ter tamén usou iso no seu pset. Pode dicir, facer, como, pedir ao usuario a entrada. E entón cando, como, o entrada é menor que algún número. Así, para un caso explícito con Mario, el sería facer printf, introduza un número enteiro, e logo, algún enteiro é igual getInt. E entón vai realmente executar este código primeiro. Realmente vai ter algún tipo de número enteiro. E entón podería dicir que, aínda que número enteiro que é menor que cero. Entón, o que vai facer é que é vai realizar polo menos unha vez. Vai comprobar a condición. Se a condición é verdade, que vai correr de novo. Entón faga-while son óptimo para validación do usuario, porque sabe que o código está indo a executar, polo menos, unha vez máis, mentres que con mentres loops, non está garantir que se indo para executar unha vez. Vai comprobar a condición primeiro e despois decidir para executalo, mentres que un do-while será executar o código en primeiro lugar e, a continuación, comprobar a ver se ten que repetir-lo. Será que esta distinción ter sentido para todos? Está ben. Legal. Polo tanto, neste caso, este é o tipo do que eu estaba falando, esta re-prompts ata obter un número positivo. Entón, nós sabemos que printf "Introduza un número positivo" e, de feito, pedindo que entrada ocorrerá polo menos unha vez. Se o usuario está mal e mantén escribindo un número negativo, que sabe cantas veces vai realizar. Pero este código é garantía para realizar polo menos unha vez. E é por iso que é óptimo para validar a entrada. E vai usar isto un pouco. Todo ben, todas as preguntas ata agora? Estamos todos ben? Estou falando moi rápido? Somos bos? Está ben. Impresionante Entón, nós estamos indo para adiante e falar de arrays. Legal. Así, as matrices son basicamente só estruturas de datos que nos permiten almacenar cousas do mesmo tipo. Entón, se ten unha matriz, que é ou só terá ints ou que só terá Carrozas ou que só vai ter caracteres. Non vai ter un int con un char con un coche alegórico con unha parella. Unha cousa. Arrays son só un tamaño, ou son só un tipo. Polo tanto, temos aquí unha matriz de tamaño tres con tres números enteiros na mesma. Poderían flota, pero estamos vai dicir que están enteiros. Entón, unha cousa a entender é que matrices son un conxunto de tamaño cando arrincar eles, e eles non son easily-- xa que todos son menos cómodos, ten que só pensar neles como non sendo capaz de estender en tamaño. Con todo gran establecer súa matriz, en principio, que é o tamaño que vai para estar, porque as matrices son bloques continuos de memoria. E cando vostedes se en algo máis de como a memoria é realmente dispostas discos e na pila ea pila, vai facer un pouco máis de sentido. Pero podería só pensar en como é só unha liña de espazos no seu disco. E non pode garantir que non hai será o espazo libre despois. Pode arrincar dunha matriz de tres e, a continuación, quizais arrincar outro conxunto de cinco máis tarde, e é inmediatamente. Entón, se fose para ir Mancha pasado tres en que a primeira matriz, estaría escribindo sobre outra cousa. Entón matrices é-- para vós, só consideralos como un tamaño fixo. Así, a creación dun array-- está indo a necesidade de facelo un pouco. Así, do mesmo xeito que temos un estrutura xeral para o noso para loops, temos un bo xeral estrutura para a nosa matriz. Porque son dun tipo, toda a elementos dunha matriz son dun tipo, precisa para arrincar o que este tipo é. Entón, como ve aquí, temos unha bo tipo de datos soporte pouco. Entón, se nós estamos creando un int matriz, que han ser int. Se estamos creando un char array, que será de char. Se estamos creando unha cadea array, que será cadea. E, a continuación, o nome da súa matriz, o que lle gustaría que fose. Entón quizais sexa os resultados das probas ou que é estudantes ou que sexa doce. Calquera que decidir o nome do seu array, que é o que vai ser. E, a continuación, entre paréntesis, vai ten o tamaño que quere. Entón, nós estamos almacenando 10 alumnos ou estamos almacenar 15 tipos de doces? O que non. Así, no noso exemplo aquí, estamos creando un array de tamaño tres, o que vostedes vexa aquí á dereita. E cando nós primeiro arrincar el, todo está definido a cero. El só pensaba de como unha lousa en branco. Temos todos estes espazos, temos todo estas caixas poderiamos poñer os nosos datos en, pero son só en branco polo de agora. Polo tanto, se queremos realmente asignar-lles estes valores, facémolo como ben debaixo aquí mostra. Entón tes o que quere que o nome do seu matriz é e, a continuación, o índice que quere. Así, o índice refírese só, como, o slot de que estamos mirando. E unha cousa importante a ter en conta é que arrays son indexados cero. Polo tanto, se queremos o primeiro espazo na memoria da nosa matriz, vai ser cero. Se queremos que o segundo, que será un. Se queremos que a terceira, será dous. Así por diante e así por diante. Que é tamén por iso que, convencionalmente, cando facemos para loops-- eu estou seguro vostedes estaban se pregunta, por que comezamos a 0 contra 1? E iso é porque cando nós facemos a transición en usar matrices, el mapea correctamente. Entón, se quere iteración nunha matriz, que fai moito máis sentido facer i é igual a 0, pois nós sabe que corresponderá para o primeiro lugar de memoria. Todo o mundo ben con iso? Legal. E, a continuación, na parte inferior aquí é só outra forma de iniciar unha matriz. Aínda ten o seu tipo de datos eo nome, pero no canto de realmente poñer un tamaño de alí, pode só facer corchetes baleiros. E, a continuación, con estes rizado cintas na parte inferior, pode só introducir os datos que quere separados por comas. E iso será automaticamente dicir, OK, eu vexo que ten tres cousas nestas claves. Entón, sei que eu teño para reservar tres bloques de memoria e logo almacena-los. Así, a primeira versión que pode usar se está pregunta o usuario a entrada de valores, de modo que pode iterado través da matriz e ask-- obter algún int entrada deles. Se sabe de antemán os valores, fai moito máis sentido utilizar a segunda forma. Pero na maioría dos casos, pode non saber que eses valores van ser. Legal. Algunha pregunta? Todo ben. Entón, accedendo elements-- así un das grandes cousas sobre matrices é que son aleatorios acceso, o que significa que Non ten que ollar a través de cada bloque. Se sabe que quero o que é o bloque dous, pode só dicir, dáme bloquear dous. E é por iso que estes índices son tan importantes, e é así que nós realmente acceder a eles. Polo tanto, neste caso, como vimos antes, cando estabamos a asignación de valores, no único Antes, tiñamos o nome eo índice queriamos acceso, non? Así, do mesmo xeito, iso é todo que facer para que realmente tirar para fóra de datos. Temos o nome e nós ten o índice que queremos. Polo tanto, neste caso, o loop aquí en baixo, no fondo, calquera sabe o que está facendo, o que sería imprimir? Mmhmm? Exactamente. Entón, si, é só iterado. i é igual a zero-- podemos camiñar a través do código só rapidamente. i é igual a cero, i é menos de tres, neste punto, non? Así que comprobar a fóra. E nós dicimos: OK, impresión f o que está na temperatura i. i é cero aquí cando nós primeiro iteración, entón imos a este primeiro punto, e dicimos, OK, 65 é o número que desexa imprimir. Entón, que vai imprimir 65 e despois facer unha nova liña. i ha actualizar, polo que imprime 87. El actualiza de novo, e só pode imprimir 30. Todos legal? Impresionante. Todo correcto. Entón aquí é unha especie de un cousa que eu estaba dicindo como pode manter o control de puntuación de alguén e por iso usaría o primeiro modo de arranque de no canto de que o segundo camiño. E iso só vai pasar. E teña en conta que temos unha clase de tamaño 30. E nós estamos inicializar esta matriz de enteiros que é de tamaño 30. E entón nós estamos interactuar a través e estamos pedindo ao usuario para entrada puntuacións para cada un destes e, a continuación, atribuílo lo a un lugar específico na memoria nalgún lugar nesa matriz. Legal? Isto ten sentido para todos? Mmhmm? Entón hashtag axustar o tamaño da clase 30 é unha condición procesador directiva, que só significa que ten gets-- facer como o proceso de compilación. Pode pensar niso como unha variable global. A forma como o facemos é typically-- permite que o seu código para ser máis facilmente modificado. Entón, imos dicir que o tamaño da clase de súpeto vai 30-15, se eu non tivese definido deste xeito, eu o faría Ten que pasar por todo o meu programa e cambiar cada instancia de 30-15. Pero con iso, eu teño que cambiar un local, e todo cambia. Se queres facer un hash definir nun caso onde está mantendo o control dalgúns definir o número de contas para unha clase ou está a usar un número que será utilizado, como, ao longo dun longo programa, é mellor para definir que, no inicio de xeito que, se algunha vez cambia, comeza para cambiar un punto no canto de 100. Si? ALUMNO: entre facelo e só declarando [inaudível] alí na parte superior. ALLISON Buchholtz-AU: Entón, ten que ver coa efficient-- é unha especie de fóra do ámbito o que podemos cubrir nesta sección. Ten que ver máis coa eficiencia e como as cousas realmente traballar no proceso de compilación. Se quere realmente saber sobre iso, eu estou feliz en enviar-lle un correo electrónico cos recursos sobre o tema. Hash definir tende a ser preferido para as cousas. E como codificar máis, tipo de aprender as nuances de cando usar un mundial contra o hash definir. Pero, de momento, realmente non ten preocuparse iso é que a resposta curta. Todo o mundo ben con iso? E tamén, se quere para usar un hash definir, é realmente importante ter en conta que o nome debe ser en todos os tapóns. Non estamos só facendo Clase de tamaño para ser dramático. El realmente debe ser en todos os tapóns. Legal. Calquera outra cousa alí? Somos bos? Encantador. Benvido. OK, entón eu quero que vostedes vexan para iso e ver se pode atopar o erro. Vou che dar unha información. Está nalgún lugar en que loop para. Mmhmm? ALUMNO: Debe ser menor ou igual a 2. ALLISON: Así, podería ser menor ou igual a 2, ou podería ser inferior a 3. E o que é o razoamento para iso? Estudante: O [inaudível], 0, 1, 2. ALLISON: Exactamente. Así, nunha matriz de tamaño n, nós só ten índices de n menos un. Legal. E entón podemos estar realmente tolo e obter matrices multi-dimensional. Un dos problemas cando o levei na miña arrays multi-dimensionais requiridas anos, e eu creo que un deles pode esixir este ano, así que sexa cómodo. Quentar a cabeza con iso agora. El vai volver a asombro ti, pero dunha forma legal. Entón pode realmente só penso de arrays multidimensionais como matrices de matrices. Así, pode tipo de pensar neste top liña como a primeira peza de memoria. E este é o segundo anaco de memoria, ea última liña é o terceiro anaco de memoria. E dentro diso, hai unha matriz. Pero, por suposto, é máis fácil para describir como este. Entón arrinque-lo do mesmo xeito. Este é un personaxe consello de tres por tres. Entón tes tres liñas e tres columnas. Estamos representando deste xeito. E acceder a ela a Igualmente, a columna por liña. E así 1,1 como vemos aquí. Nós atribuímos un cero, cero, alí enriba. 2,0 e 0,2. Entón, vostede tería só que acceder eles-- se alguén xa fixo álxebra lineal, Do mesmo xeito que accede un elemento en un matrice, é a mesma idea aquí. Así, pode relacionalo la de volta á matemática. Non se preocupe moito moito sobre iso agora. É bo ter unha exposición, para saber que pode facelo. Pode crear algúns tolo number-- que poida crear matrices tolo é todo o que eu vou dicir. [Inaudível] El queda un pouco tolo, pero é moi legal. Impresionante. E entón, polo que temos un exemplo aquí. El calcula unha lonxitude de corda. Así como moitas persoas sabían que as cordas que está a usar son só un conxunto de caracteres? OK, si. Entón vostedes poden pensar que non ten matrices usado antes, pero en calquera momento usa getString no Biblioteca CSView, está en realidade, só a pedir unha matriz de caracteres. E nós estamos coidando de todo que no back-end para ti. Pero está a usar matrices desde que comezou. Só non sabe diso aínda. E sempre que ten un array de caracteres ou unha matriz que está almacenando unha cadea, o último que é sempre o que é chamado un terminador nulo, o que é este aquí. E que é ao final do cada palabra que está almacenando. Polo tanto, se queremos descubrir a lonxitude dunha cadea, podemos dicir, ben, xa sabe, o contido deste bloque non é igual ao noso terminador nulo. Isto significa que hai algunha personaxe alí que realmente se preocupan iso é parte da palabra. Vostede aumenta a súa lonxitude. E entón, cando nós realmente comezar a o final da palabra, que vai rematar e vai volver a nosa lonxitude para nós. Mmhmm? ALUMNO: Será que o espazo contan como o terminador nulo? ALLISON: Entón é un espazo non un terminador nulo. Entón se ten un espazo multiple-- é, en realidade, un valor ASCII específica. Estudante: Cal é a exclamación igual de novo? ALLISON: Entón, iso é o que se refire. Se nunca me escoita en horario de oficina, Sempre chamalo, como, estrondo igual. Entón bang non é. Polo tanto, este non é igual. Entón, se está a tratar de ver se algo é falso, vostede sabe que sempre fai, o que quere que estrondo a variable é, e se é falsa, que avalía a verdade e pode facer cousas legais con iso. Máis sobre iso máis tarde. Legal. Todo de bo alí? Impresionante. Polo tanto, agora é o tempo dos seus rapaces para traballar, xa que teño falado. Entón, quero que só crear unha matriz cos números enteiros de un, dous e tres, e logo, telos impresos. Non ten que facer, como, principal, blah, blah, blah, o que sexa. Eu só quero que arrincar a matriz e, a continuación, crear un loop for para imprimir-los out-- ou un loop while, ata ti. Vou dar-lle un par minutos para traballar niso. Vou descansar miña voz. Se ten algunha dúbida, estou feliz para vir arredor e falar con vostedes. Sinto-se libre para falar uns cos outros. Obteña máis doces. En realidade, eu vou andar por aí con doces. Como é iso? Quere algún? Calquera outra persoa nesta sala quero doces? Tamén pode ter máis dun, xente. Tome un puñado se queres. Maio tamén. Todos boa persoa? Está ben. Ademais, eu estou indo a crear Google dunha forma anónima, e vostedes poden só enviar feedback despois de cada sección se hai algo que quere mellorar ou algo que quere facer. Se eu son un pouco enérxico para ti, podo falar máis abaixo. Vou crear esa e enviar que para todos vós despois. Todo correcto. Entón, imos comezar pequeno. Como poderiamos comezar a nosa matriz? Cal é o tipo de nosa matriz? Un int, non? OK, entón o que quere para chamar a súa matriz? Int matriz, legal. Todo ben, entón temos int int matriz é igual, eo que temos despois diso? Estudante: [inaudível] corchetes. ALLISON: Cintas. E entón, dentro das claves? Comas dous comas tres. Legal. Entón está todo ben. Polo tanto, agora temos o noso loop for. Así, na primeira parte do noso loop for, o que temos? ALUMNO: i é igual a 0? ALLISON: Entón int i é igual a 0, e entón o que é a nosa condición? O que me vai ser menos que? Menos de tres anos, e como nós imos actualizar i? i plus plus, actualizar-o por un. E entón nós imos ter algúns printf do número enteiro, eo que é que a última parte que é realmente vai dicir o que debe ser a impresión? Sería o nome do array, que é int array, non? E o que é nos soportes de int array? Eu. [? Entón eu?] Chamou meu exemplo, pero aí vai. Non é tan malo. Todo o mundo bo? Legal. Así, estamos a facer coas matrices. Parabéns. Vostede conseguiu iteración a través de todos as-- si? Estudante: [inaudível] ALLISON: Si. ALUMNO: Eu teño unha pregunta. Debería recuar as claves? ALLISON: Entón as claves deben aliñar co loop for, e entón todo dentro das claves debe ser recuado. ALUMNO: OK, se o loop ser recuado? ALLISON: O lazo non ten que ser recuado neste punto. Se estivese no inicio, se nós realmente tiña unha función principal aquí, sería recuado da principal. Pero, neste caso, está todo ben. Si, pregunta. ALUMNO: Debe ter os corchetes tras exemplo? ALLISON: Si, se está inicializar lo desa forma. Entón lembre, este é o segundo xeito de arrincar un array onde temos as claves e, a continuación, o noso real datos separados por comas dentro. ESTUDANTE: Eu penso que había soportes para este exemplo. ALLISON: Non, son claves. Son claves. Se está inicializar lo que a segunda forma, é tirantes. Se fósemos dicir, int example-- se nós só queriamos unha matriz en branco para ints, sería exemplo int tres soportes. Os parénteses representan o tamaño. Cando ten chaves, é os datos reais está poñendo nela dese xeito. Podemos rolar cara atrás moi rápido. Entón, nun presente, esta é só a nosa matriz de inicio, o arranque. E aquí, somos individualmente asignación de puntos para eles, de xeito que este representa o índice do noso array, que é por iso que temos soportes. Pero aquí, se observar, temos deixou nosos soportes sen tamaño, e Inicialize-o co datos reais todo-en-un con tirantes. Estudante: Entón por que non temos corchetes neste exemplo? ALLISON: Entón, en que parte? Estudante: non iríamos digamos, exemplo int soportes é igual claves [inaudível] corchetes, por exemplo. ALLISON: Oh, desculpe. Está certo. Temos soportes alí. Sorry guys, meu mal. Si, ten que ter entre parénteses despois exemplo. Está absolutamente seguro. Estudante: [inaudível] non facelo. ALLISON: Non, ten que ter soportes, porque se non, é non vai declarar unha matriz. Estudante: [inaudível]. Sentímolo por iso. ALLISON: Sentímolo, pero ten que entre parénteses despois exemplo. Typo. Boa captura, estrela do ouro para ti. Ademais, se está facendo unha pregunta, se vostedes só iría me dicir os seus nomes, Encantaríame iso. Encantaríame poder coñecer os seus nomes. Non estou indo ao frío chamalo, realmente quero só saber os seus nomes. Entón, por favor, de feito, me diga os seus nomes. Leah: Leah. ALLISON: Leah. OK, entón eu sei funcións no pasado en breve eles falaron sobre iso durante a charla. Así, as funcións son unha especie de só como esas cousas pequenas do tamaño da mordida onde pasar en insumos, algo máxico pasa, e terá saídas. Legal. Entón realmente usado un Moitos destes xa. Obter int, obter corda, impresión f. Estas son todas as funcións onde acaba de chamalos, hai moitas cousas máxicas pasando no fondo que non necesariamente ver, e terá o que quere. Ou polo menos comeza o que espera que quere. E, basicamente, o punto de funcións, e un dos principais temas do CS, é romper o seu código en partes gerenciáveis. Cando comezar a escribir estes programas moi longos, ou en risco cando tiña esta gran idea para un xogo, ten que ser capaz de rompe-lo abaixo, como, OK, como fago para comezar? Cales son as pequenas pezas que eu teño? Oh, eu teño preguntar a usuario para algo. Agora eu teño imprimir algo. Oh, eu teño calcular este valor. E aprender a romper o seu código e os grandes problemas que ter para estes pequenos anacos e creación de funcións é, en realidade, un dos grandes piares da CS. Así, pode pensar nunha función tan como unha caixa negra, unha caixa negra máxica, que poñer as cousas en e terá algunha saída. E o resto do programa Non precisa saber necesariamente o que está a suceder dentro desa caixa negra. Todo o que interesa é o que entra eo que sae. Legal. Entón, por que funciona? Organization-- como dixen, cando está xestionar grandes bases de código, como organiza o seu código será moito máis fácil se usa funcións. Porque vai ser capaz ser, como, OK iso, é o que esta función fai e aquí está o que outro fai. E pode facilmente ver como todos eles se encaixan. Entón, dividíndoo en todo esas subpartes gerenciáveis. Entón simplification-- eu estou seguro que vostedes todos viron iso, como dixen, co Scratch. Ten esa gran idea, e vostede é como, como é que todo este traballo? Pero se se achega a el fragmentada, dis, OK, como fago un duende flotan pola pantalla? Isto é un pouco máis fácil. Entón, bo uso da función marcas seu código moito máis fácil de ler. Ela fai máis doado de depurar que como entrar nos seus conxuntos de problemas posteriores, vai realmente quere ser capaz de facer. E son tamén máis fácil para proxectar e implementar. Pode codificar-se unha pequena funcionar de xeito relativamente rápido e que seguro que traballa contra a tentar para crear todo este programa de longo e, a continuación, tipo de percorrer e ver o que funciona eo que non é. E, a continuación, a capacidade de reutilización. Entón funcións só precisa para ser escritos unha vez máis, e entón pode usalos tantas veces como sexa posible. Entón, é, así, nun sentido ecolóxico. Se tivese cousas como impresión f, onde tiña que escribir a maxia que vai detrás de imprimir f cada vez quería imprimir algo, sería moi enfermo e canso del ata o final. Unha das cousas que vai aprender en clases posteriores CS, ou un dos mellores consellos que recibín é, se está copiando e colando código, probablemente debe ser unha función. Se ten exactamente o mesmo todas as liñas en todo o seu código, se consignado los para fóra, seu código sería probablemente ser, tipo, cinco veces máis curtos e ser moito máis fácil de ler. E, no canto de tentar resolver todos eses lugares diferentes onde as cousas pode dar mal, ten unha función que comeza a solucionar. E eu prometer, unha morea de presente Pode parecer tipo de abstracto agora, pero como entrar máis tarde e problema máis tarde define, vai facer moito máis sentido e realmente ser levado a casa. Hai algunha pregunta sobre as funcións ata agora? Por que estamos utilizando-os? Sei que non obtivesen na cerna da cuestión aínda. Así, a definición dunha function-- como matrices, necesitamos algún tipo de-- este é só a saída xeral. Polo tanto, esta é unha función que é só vai cubo algunha entrada. E na seguinte páxina, en realidade, temos todos estes impresionantes pequenas cousas aquí. Así, todos poden ler que, por curiosidade? Sei que o vermello e negro pode ser un pouco difícil. Pero as cousas grandes para sabe-- así a primeira un aquí é o noso tipo de retorno. Polo tanto, este é falar da saída desta función cando, neste caso, que poñer en algún número, o que estamos recibir é que este número ao cubo. Por iso, debe ser un int neste caso. Quizais sería unha dobre ou algo máis tarde, pero, neste caso, é un int. Con c, sempre ten que un tipo de retorno. Vai ser un int. Será un float. Vai ser un matrimonio. Pero ten que especificar o que esta función vai voltar. Se non, vai berrar con ti, e que non pode compilar. Vai estar triste, e eu vou estar triste. E non é só bo. Está ben. E entón temos o noso nome da función. E como podes ver aquí, con c hai ese paradigma moi consistente. Cal é o seu tipo, cal é o nome, e entón algunha outra cousa ao final. Entón, nós temos o noso tipo de retorno, o noso nome da función, e logo temos o noso cabeceira con nosa lista de parámetros. Así, a lista de parámetros é, o que é esta función vai levar en? A lista de parámetros é simplemente un sinónimo de, cales son as nosas entradas? E, do mesmo xeito que nós Ten que definir a nosa función e darlle unha volta escribe, cada un dos nosos insumos precisa ter un tipo asociado a el. Entón, nós sabemos que a nosa función Pode realmente traballar. Polo tanto, neste caso, temos algunha entrada int. Entón, de novo, que vai ser do tipo eo que está chamando. E entón, como ve aquí temos o noso corpo. Polo tanto, temos algunha saída int, que é só a nosa propia entrada veces si veces, que só cubos lo. E entón volvemos esa saída. Entón, como ve aquí, temos un int veces un int veces un int, así el retorna un enteiro, que foi declarada alí. Entón, todo é ções. Todo está feliz. A súa función será executada. E esta é só a cousa xeral. Entón, sempre ten tipo de retorno, nome, ea súa lista de parámetros. Cada cousa no seu lista de parámetros, ou de entrada, precisa ter un tipo asociado a el. E entón ten o seu corpo aquí co que quere facer coa súa entrada. E entón, obviamente, ten quere voltar algo. Ás veces funciona só vai volver. Eles realmente non volver algo para usar. Pero ten que volver de algunha maneira. E cando está facendo súas propias funcións, podemos entrar niso algo máis profundo. Persoalmente, se quere, hai un gran número de cousas distintas que podes facer alí. Todo o mundo bo? Calquera cousa nesta lista que me quere para pasar por encima, que non entendeu? Todo o mundo é bo alí? Legal. Impresionante. OK, entón nós estamos poñendo todo iso xunto agora. Polo tanto, temos algunha entrada int cubo, tan este é un programa completo aquí. Ata agora, eu teño tipo de dato ten snippets homes que poidan estar a suceder dentro dun programa. Estivemos só mirando para as funcións. Pero aquí está un programa enteiro. Así como moitos de vostedes se lembran do prototipo palabra da charla? Legal. Temos un. Cal é o seu nome? Steph: Steph. ALLISON: Steph? OK, impresionante. Entón, se lembra o que é un prototipo? ALUMNO: Vostede di que [inaudível] antes de que realmente tratar con isto. ALLISON: Vostede recorda por que? Estudante: Non. ALLISON: Aceptar. Estrela do ouro. Entón, si, un prototipo que temos de antemán, porque, se non, noso compilador vai berrar para nós. El vai dicir, OK, o que é esa función de cubo? Tipo, ten literalmente non me dixo nada sobre iso. É como cando entrar nunha aula, e alguén é como, hai un quiz hoxe. E vostede é como, vostede nunca me falou sobre iso. Non estou feliz coa xente. O prototipo é basicamente como seu programa dicindo, mira. Cabeza cara arriba. Non vai ser un quiz sobre o día de hoxe. Non se desespere cando chegar a el. Vai estar ben. Polo tanto, todo o prototipo fai é dicir principal, eu vou usar esta función. Eu prometer que vou definir iso máis tarde. Non se desespere para min. Só compilar e facer o que eu digo para ti. Polo tanto, temos o prototipo alí só para facer o noso compilador feliz. E é basicamente unha promesa que marcou esa función máis tarde e que non está só chamando esa cousa aleatoria que non sabe o que está a estará facendo. Polo tanto, neste caso, temos principal aquí. Nós arrincar algún enteiro x. Isto é dous. Estamos indo para imprimir o que é x. Nós imos cubo x. Como verás, temos a nosa declaración da función aquí que nós falou anteriormente. Vai cubo x, e, a continuación, se Teña en conta que, a función de cubo, de feito, retorna un enteiro para nós, que é almacenado en x novo para que poidamos imprimir fóra oito, ou cubo x agora. Isto ten sentido para todos? Somos bos? Todo correcto. Impresionante. Todo correcto. Cantos de vós Teña en conta que este de xeito que este é basicamente só o seu pila eo seu chea, só unha vista de como a memoria é grabada aquí. Entón, nós só queremos facer Asegúrese de que entenda como estas están representados na memoria. Se tomar clases de como CS61 e outras cousas máis tarde, comeza a aprender iso moito máis en profundidade, e é moi legal. Recomendo fortemente. Pero, por agora, eu vou dar a visión ampla así que non ten que coñecer o cerna da cuestión. Así, a parte superior só un segmento de texto que contén os ceros e uns reais, o binario para iso. E este é usado para almacenar variables globais, se ten algún. Como se move cara abaixo, nós ten, como ve aquí, datos inicializados, non inicializar datos, e despois heap. Entón, nós realmente non falar sobre a pila agora. Nós imos chegar a iso máis tarde. De momento, eu estou indo só para onda as mans e ser como, non precisa saber sobre iso agora. Pero imos falar un pouco pouco sobre a pila. Así, a pila é where-- temos zoom in. É dicir, en realidade, como o programa nós só mirou ocorre na memoria. Entón o que ocorre é que, cada xa que chamar a unha función, temos o que se chama unha pila armazón, que é un destes. Entón parámetros de principais. Entón, estas son as cousas que pasamos a principal. Entón, eles están aquí na parte inferior, porque esa é a primeira cousa que chamamos. E entón chegamos ao inicio da locals, e cando dicimos que, queremos dicir as variables locais que son almacenados dentro principal. Entón veciños aquí sería, como, x é igual a dous no caso presente. Por que está situada a principal. Será que todo o mundo se lembra ámbito, pasando por riba que na charla? Está ben. Así, só as variables que son inicializados dentro principal. Entón é por iso que temos principal [? vocals. ?] E, a continuación, dentro principal, que chamamos cubo. Non? Entón, nós temos outro cadro cos parámetros do cubo. Polo tanto, neste caso, o cubo de parámetros son agora o x que pasamos en, os dous que temos pasado. E entón, os veciños do cubo, que é onde a cubagem real ocorre. E despois el volve. Entón, o que pasa é como cubo realmente fai o que se quere facer, el retorna. Cando volve, este cadro deixa, e súa retornou ata principal. E, a continuación, dentro principal, nós realmente pode imprimir lo. Entón, cando está retornando algo, cando a función retorna, é como pasar eses valores para o cadro de abaixo e, a continuación, saír. E as cousas teñen que realizar en orde. E cando comeza a programas grandes, podemos facer máis frío e máis complicado diagramas. Pero, por agora, este é só unha visión xeral entón tes unha especie de comprensión do que acontece cando está chamando unha función e como isto realmente parece na memoria. Legal? Todo o mundo bo? Impresionante. Polo tanto, este é o que está só tentando cambiar cousas. Como podemos ver aquí, temos noso prototipo da función para que o noso compilador non berrar con xente. Temos algúns principal, e nós quero cambiar xe y. Eles non fixeron esta demo en charla, con todo, teñen eles? Eles non teñen? Está ben. Entón, nós estamos indo a ir sobre este, moi brevemente. Vai chegar a este exemplo máis en profundidade, penso eu, esta semana. E, a continuación, a próxima semana podemos realmente mergullo por que isto non funciona. Entón temos ese baleiro función aqui-- intercambio. Entón baleiro significa só que nada é de retorno. E temos de intercambio int ae int b. E nós temos algúns temporal variable que é a. un se lle atribúe a b, e, a continuación b se lle atribúe á temperatura de xeito que A e B do Os valores son agora conmutada. Pero reviravolta na historia, iso non funciona. E parte do que realmente ten que ver co feito de que un e B aquí, os que son pasadas en aquí, son en realidade unha copia de x e y. Entón, cando a función realmente retorna, el cambia as copias, pero non o real x e y do. Así, unha forma de pensar sobre iso é isso-- finxir estes son intercambio. Ok? Así, en principal, temos x e y inicializar. Pero cando nós realmente ir para arriba a estes cadros con intercambio, estamos pasando os valores máis para el, e eles están inicializar. E soa vez en directo aquí. Así, a eb vivir aquí. E son trocados. Pero cando volver, non facer algo coa eb. unha eb licenza coa nosa función. E así xe y estar na mesma. Terá máis en como resolver isto e como realmente tratar con isto máis tarde. Pero é só unha cousa ao tipo de manter presente. Use-o para o futuro. Non te preocupes se iso non facía todo o sentido do mundo. Son copias é a cousa máis importante. Se indo para facer calquera cousa lonxe diso, pasou en copias. Entón os orixinais estar na mesma. Todo o mundo bo? Legal. Así, os argumentos da liña de comandos. Estou seguro de que ao principio vós todos tiña aquelas grandes, como, baleiros principais int. E vostede é como, fresco Aceptar. Realmente non me importa. Este é só o que eu teño que escribir. Pero nos seus novos programas, especialmente neste pset, e por que hai giz no chan? Coa súa próxima pset, está vai estar a ver iso. Int main, int arg c, corda de arco v, entre parénteses. Así, a partir do que só hoxe aprendín, o que pensamos que o segundo parámetro ou que o segundo elemento é aquí? É unha matriz. Cara a un tipo de matriz? Matriz de cadea, si. Legal. Entón é así que vai sendo declarar estes agora. Alguén se lembra o que estes significan? Non? Hmm? ALUMNO: arg c. ALLISON: Entón arg c mantén un contador. É un int. É un número, non? Entón, o que pensas que o número é de? Si. Así arg c é o número de cordas que compoñen a liña de comandos. Entón, se fósemos realmente fazer--, hai exemplos tras este, polo que non vou estar á fronte de min. É un número de cordas que só facer a súa liña de ordes. Entón, cando fai, como, dot cortar Mario, iso é unha cadea que pasa a ser. Nesta peza, vai realmente ser alimentando as cousas na liña de comandos, como eu estou seguro que vostedes que lin a serra spec. Así, nestes casos, é posible que ter dous ou tres argumentos. Vai ser unha cousa útil para usar. E entón arg v, como dixemos, é só unha matriz de cadea. Así que o que realmente garda introducido na liña de comandos. Polo tanto, temos estes. Ten algunha barra dot copiar outfile infile. Así, se arg c é o número de cordas que estamos pasando para o comando liña, que é a nosa arg c neste caso? Tres. Exactamente. Entón, cal é arg v cero? Entón, cal é o primeiro que temos gardado? Dot cortar copia, exactamente. E, a continuación, o segundo sería infile. A terceira sería outfile. Así que sobre arg v tres? Sería nulo, xa que iso é o fin da nosa matriz, non? Legal. E entón o que pasa co sexto? É unha especie de unha pregunta capciosa. Ish. Non sabemos o que é? É indefinido. Nós non temos idea do que podería ser. É todo o que é dereito despois da matriz na memoria, e non temos idea do que é iso. E é perigoso tocar aqueles cousas, porque para todo o que sabe, é unha parte da memoria que non debe ser acceder ou nulo. E pode facer cousas malucas. Chama-se sobre-indexación seu vinculados á súa matriz. Non vai a fóra dos límites da súa array, ou cousas malas poden ocorrer. Vostede volta e, así, as leis da física foron destruídas ou algo así. Legal. Isto ten sentido para todos? Non é tan malo. Entón, agora, todo o mundo é parte favorita, revisión pset. Yay! Está ben. Polo tanto, para aqueles de vostedes que non leu a especificación pset, está facendo algún realmente cousas legais con cifrado. Vai crear unha Ceasar Cifra e unha cifra de Vigenère. Ten que definitivamente ler o especificación para ver como funcionan. E se está a ter algún problema sobre o que realmente debe estar facendo, por favor, veña falar comigo, enviar correo-e me ou texto me. Estou por preto. Así, existen tres principais cousas aquí que nós quero falar about-- só tipo dunha extensión da charla. Cousas que pode non saber sobre, consellos e ferramentas útiles. Entón, nós imos facer unha revisión rápida de ASCII, porque iso vai ser super importante para a cifra do Vigenère. Estamos indo para a conversión de entradas de liña de comandos, que vai ser moi útil para Caesar Cipher. E entón modulo. Legal. Entón, ASCII mapea caracteres para números. Este é un gran cadro. Debe ter este marcada en algún lugar. Vai querer isto para o primeiro a medio prazo. Estou seguro que todo o mundo ten ese gráfico na súa folla de medio prazo. Así, aprendela. Adoro. Mantelo accesible. Será útil. E todo isto é unha codificación que mapea alfabética, numérica, e outros caracteres para números para o noso equipo. Por mor do curso, na final, todo o que almacenar se ve convertido ata ceros e uns, por iso necesitamos de algunha maneira para representar a texto e os personaxes que estamos todos afeitos ver como unha especie de número. Entón, como podemos ver aquí, temos maiúsculas A, que é logo alí. É 65. E minúsculas A é 97. Así, pode descubrir out-- como dixen anteriormente, se tivese variedade de múltiple cordas, o que cada un deles posúe un terminador nulo. Sería un espazo. Espazo ten a súa propia especial-- Eu esquezo onde está aquí. Ah. 32 é o espazo. Entón, todo é mapeado para el. Polo tanto, temos de matemáticas ASCII. Pro tip-- en Vigenère de, pode ser tentado para converter os números para enteiros, pero é realmente mellor práctica para poder usar o caracteres como este cando está realmente manipulando-os. Entón, se quere usar números, pode. Pero unha mellor forma, é unha forma que que tenden a gusta de vostedes para facelo, É deste xeito que está en realidade, subtraindo caracteres. Entón, quero que vostedes tipo de descubrir estes para fóra. Por que non tentar todo outro? Entón, facer o primeiro, o un terceiro, quinto e un. Porque quero estar seguro de que falamos sobre todo o que necesitamos para falar. Eu só vou dicir, un dos cousas importantes a-- oh wait, vostedes non vin este. OK así que facer os tres primeiros. Imos facelo. Porque temos que falar de modulo. Sei. Matemáticas é difícil. Pode usar unha calculadora. Está certo. Ou tirar unha táboa ASCII, porque probablemente vai querer iso. Legal. Entón eu vou camiñar rapidamente vós a través destes. Entón, as persoas teñen táboas ASCII tirado para arriba? Cal é a nosa numérico número de minúsculas A? ALUMNO: Sete. ALLISON: Entón minúsculas A é 97 e maiúsculas A é 65. Entón, 97 menos 65? Audiencia: 32? ALLISON: 62, si. Polo tanto, neste caso, o que sería imprimir? Ese primeiro? Se temos por cento d, o que iso indica? ESTUDANTE: Un número. ALLISON: Estamos imprimindo a un número real. Entón, nós estamos indo realmente para imprimir 32 aquí. E se iso fose por cento c, 32 nos daría un espazo. Así, entendendo que caracteres poden ser impresos tanto como números e segundo os personaxes reais é realmente importante, e pagar a atención sobre os tipos reais que estamos facendo aquí. Legal. Así, para cada un destes outros, que é o que vai ser a impresión? ESTUDANTE: Un personaxe. ALLISON: Unha personaxe. Legal. Entón, se vostedes queren saber, ten pode traballar estes para fóra no seu propio país. Se está a ter problemas, me e-mail. Pero a segunda só será imprimir unha minúscula b. O terceiro pode imprimir unha maiúscula B. A cuarta imprimirá fóra unha maiúscula C, ea última será unha minúscula A. E a última um-- en realidade estamos indo para entrar a que ese tolo por cento sinal significa que mesmo nun par de diapositivas. Polo tanto, proba aqueles no seu propio país. Se ten problemas, por favor, veña falar comigo. Se é tipicamente en Adams corredor D, probablemente vai atopar arredor de min. Entón, atoi. Cantos de vós xa viron isto función ou oído falar del, ao final? Calquera? Legal. Entón, o que realmente significa para ASCII é para enteiro. Entón, o que podes facer é, con César, para quen le a especificación, vai facer barra punto César Despois de escribir o seu programa, e logo, vai entrada dun número que quere codificar a mensaxe secreta con. Pero, se nos lembrar, toda a nosa insumos son almacenados como cadeas. Non? Temos unha variedade arg v iso é todo o tipo cadea. Entón, se só tentar tirar ese, sería Pensas que que un ou calquera número usou é realmente un personaxe. Entón está indo a obter algúns resultados tolos. Entón, se o quere transformar isto nun número enteiro que pode usar para manipular súa palabra ou a súa mensaxe, vai querer usar atoi. atoi só converte súa secuencia para un int. Entón, se temos unha secuencia de 12, se chamamos atoi en 12, ou o que quere que a entrada é, vai realmente volver para ti o número enteiro. Non é o carácter ou a secuencia de 12. Que, cando comeza de engadir que a números, será moi diferente, porque a cadea 12 é algún número tolo en ASCII, pero o número enteiro 12 é, en realidade, 12, que é o que quere. Entón, quere estar seguro de usar atoi. Vai querer esta en César, porque necesita o int fornecido pola usuario na liña de comandos. Pero cando eles poñelas ao mando liña, é almacenado como unha cadea para comezar. Será que isto ten sentido? Non precisa necesariamente que iso para Vigenère. Con Vigenère, como dixen antes, ten que tentar e utilizar Matemáticas ASCII que máis parece este, onde está, de feito, usando os caracteres que se dan a vostede. Legal. Todos bo alí? Impresionante. Así módulo. Así que se está dado este número enorme de César? Ten esa idea de que se está en Z e está dado un número de dous, isto significa que need-- Z fai o segundo carta tras si, non? Entón, ten que de algunha maneira participa en torno, e modulo é a forma de facelo. Entón, todo o que fai é dálle o resto da división do primeiro número polo segundo. E temos algúns exemplos para que algo máis concreto facer. Pero basicamente usa modulo cando quero facer algo envolvente. Entón, se só quere o números dun a oito, pode utilizar en calquera outro modulo número, e será sempre devolver un número de cero a oito. Así, algúns examples-- se temos 55 módulo 10, el só dálle o resto do 55 dividido por 10, que sería de 5. E despois de tres modulo cinco, Alguén adiviña o que sería iso? Tres. Entón se ten un número menor antes o modulo, non pode ir en uniformemente. É cero. Entón, el só devolve o propio número. Así, oito modulo oito sería? ALUMNO: Cero. ALLISON: Cero. Xa que vai en uniformemente. 16 modulo 15? Audiencia: One. ALLISON: Cool. E entón este último é só para amosar você- pode estar se pregunta, OK, cal é a orde das operacións aquí? Será que dividir por primeira vez? Será que modulo primeiro? Entón modulo ten a mesma precedencia como a división ou multiplicación, e os seus asociativo esquerda. Por iso, é do mesmo xeito. Sempre faría parénteses, logo multiplicación, división, e módulo en orde de esquerda a dereita. Así, as regras estándar. Basta colocar-lo na mesma categoría como a división e multiplicación. Polo tanto, neste caso, teriamos ten 1 máis 2 dános tres. Nós que multiplicar por dous, entón temos 6. Nós modulo que por 2, o que nos dá? ESTUDANTE: 0. ALLISON: 0. E, entón, engadir 2, de xeito que obter 2 neste último caso. Entón modulo-- está indo definitivamente para estar pensando en formas de incorporar que cando está enrolando arredor do alfabeto. Se vostede está en Z e ten que mover encamiñar tres espazos para chegar a C, hai todo este concepto de enrolar. Entón, vou deixar para vostedes para descubrir exactamente como vai usalo. Pero en definitiva, unha ferramenta útil para a súa pset esta semana. Realmente me gusta diso. Este é un dos meus favoritos Serie de exercicios. Entón, despois de facelo, se ten amigos, pode, así, enviar outro segredo mensaxes e asegurarse de que funciona. Porque vai descifrar-lo ou algo. Moita diversión. E iso é o final da sección. Rematar cedo. Eu aínda teño 15 minutos con vós, por iso, se hai algo que desexa pasar por riba de máis, eu sería feliz en facelo. Calquera outras preguntas sobre seu pset para aqueles de vostedes que xa comezaron ou ler o spec. Todo o que falamos aproximadamente a última hora e 15 minutos que me gustase de min ao tipo de repetición, eu sería feliz en. Ou podemos chamala, e pode todo saír e levar máis doce contigo como vai. Pero se hai algún persistente preguntas, por favor, deixe-me saber. Tamén pode vir cara arriba e falar comigo despois. Eu prometer que eu non mordo. Algo máis? Todo o mundo é bo? Sentimento de todos como poden xestionar este pset? Vai ser caras bos. Horario de atención están alí por unha razón. Legal. Todo ben. Ben, nese caso, grazas todo o que tanto a benvida. Espero velo a próxima semana. Haberá máis doces. Pode haber outras cousas legais. E estou ansioso para estar para coñecer todos vostedes este ano.