[Música tocando] ANDI Pengo: Esta é CS50, e Benvido a semana dous de sección. Isto é, de feito, mentres semana dous dos nosos class-- de feito, a primeira semana tivemos sección. Concerto de mans, como moitos de vostedes todos veu a sección de super a semana pasada? OK, iso é OK. Está ben. Cantos de vostedes viron Super sección a semana pasada? Aceptar. E vostedes fixeron ben no problema definir un? Entón, eu estou indo tomalo que temos unha banda de nenos realmente intelixentes nesta clase e as cousas van estar ben. Aceptar. Entón first-- En primeiro lugar, nós só estamos indo a brevemente atravese a axenda para hoxe. Imos falar sobre a loxística do curso. Moitos de vostedes probablemente ten dúbidas sobre como as cousas funcionan neste curso. Imos respostas las. Nós imos brevemente pasar por riba de loops en caso algún de vós perdeu sección de super. Imos falar sobre o mapeamento de ASCII. Falaremos sobre matrices, funcións, argumentos de liña de comandos. E, finalmente, o que vostedes probablemente todos realmente quero estar aquí para aprender sobre, é o seu pset2. Nós imos ter algúns trucos interesantes e consellos para como facelo. Aceptar. Ademais, en segundo lugar, temos lotes de doces aquí. Quen gusta de doces, só chegar aquí. Tome un pouco. Eu teño unha morea. Temos unha tonelada na oficina. Eu realmente non quero para comer doces ao longo do día. Vostedes deben comer todos os doces, porque o trouxo aquí para vós. Basta comer doces. Haberá doces cada sección. Entón, primeiro, quen son eu? O meu nome é Andi Pengo. Eu son o xefe de TA CS50 aquí en Yale. E ademais que, tamén eu me ser-- se alguén como-- súa carreira amigo, o seu ombreiro para chorar. Se a noite antes do seu debido pset, non ten idea do que está a suceder, hit me up. Nós imos lamentar xuntos, etcétera. Só sei que eu estou aquí como un recurso para ti como a liña de fronte para axudar a descubrir como caras para resolver problemas en CS50 e alén. Meu correo é andi.peng@yale.edu. Eu tamén vou mandar un individuo enviar correo-e co meu número de teléfono nel de xeito que non todo o mundo no Internet poden ver o meu número de teléfono. Sinto-se libre para me conectar en calquera momento. Serio, o teléfono é xeralmente ligadas a miña man. Non podo responder nuns minutos. Podo non responder en poucas horas. Pero podo garantir-lle, se me e-mail, se me chamar, texto min, vou responder no prazo de 24 horas. Moitas veces, eu vou responder antes que, porque eu entendo que todo o mundo ten algúns problemas, e quere que as súas respostas a ser contestada moi rapidamente. Con todo, se chamar me 30 minutos antes que peza que é debido xoves noite-- ser como, Andi, me axude, Eu non podo dar started-- vostede que ombreiro para chorar. Pero pode ser hora de pensar en como non facelo a próxima vez. Aceptar. Oops. ¿Como volver? Alí imos nós. Polo tanto, neste curso, temos un tonelada de apoio para todos. Ademais só seccións aquí, que cada semana comeza a gastar 90 minutos marabillosos comigo, temos tamén o horario de oficina. Cantos de vós xa ten foi para o horario de oficina para obter axuda? Gran. Isto é realmente bo de ver, porque temos un equipo de máis de 45 axencias de viaxes e CAs adestrados para este curso que está aquí para axudar vostedes cos seus Serie de exercicios. Luns están detidos en Teal clase 17 Hill House aquí en Yale. Martes e xoves, son mantidos en commons. 8: 00-11: 00 practicamente todos os días da semana. Veña, veña para fóra. Calquera problema, non problema-- só veña, e entón nós imos axudar con iso. En segundo lugar, ademais do expediente e seccións, temos tamén calzóns. Alguén xa viu unha parella do shorts ou orientacións nos vídeos na páxina web? Aceptar. Entón son moi, moi útil. Nosa linda produción Harvard equipo alí naquela escola no norte, eles filmado e producido estes vídeos paso a paso incribles. Eles van leva-lo paso a paso a través como proceder para resolver un problema. Moitas veces, se está confuso sobre un concepto simple, un concepto singular, Bótalle un ollo, porque probablemente temos un curto en algún lugar na nosa web. E normalmente é un gran recurso para buscar cando está primeira perdido sobre como xestionar un problema. En terceiro lugar, temos tamén study50 e reference50. Así, no estudo 50 sitio é só unha ligazón. É, eu creo, study.cs50.net ou algo así. Pode buscar en Google. Temos lotes de lamas preparadas. Temos lotes de calzóns e cousas walkthroughs-- todos compilados moi agradable e limpo para vós todos para percorrer, consulte os conceptos que está confuso sobre. Probablemente estaría cuberta alí study50. Reference50-- semellante. Temos unha morea de varias notas axiña dispoñíbeis para a súa disposición. E, para rematar, temos o que é Discutir chamado CS50, un foro no que, a noite anterior está facendo os seus problemas, din, Ten unha pregunta. Entre CS50 Discutir. Poste súa pregunta. E, a continuación, un dos hundreds-- quizais, thousands-- de pares tomar esta clase en liña pode facer login. E quizais alguén pode obter a súa resposta ante unha lata TA. É esencialmente só unha foro en liña que todos podemos utilizar para discutir os nosos problemas. Iso é legal. Aceptar. Entón, conxuntos de problema. Estamos a piques dereita no grosor do conxunto de problemas dous. Moitos de nós xa ten loitado por un conxunto de problemas. Xa sabemos que quizais esperando a última noite para facer o seu pset non é a cousa máis intelixente a facer en CS50. Consellos e suxestións esencialmente para éxito son ler todo o spec. Como moitos de vostedes xa ten ler a especificación para pset 2? Aceptar. Isto é un valor sólido. Sei que vós probablemente xa recoñecido por agora, as especificacións son moi longo. Son moi, moi longo. É realmente difícil de ler cada liña de que coidadosamente palabra por palabra. Quere só roçar a onde di-lle para facer algo. Podo asegurar que, non fagas iso. Se fai iso, probablemente está perderá nalgún lugar onde dille como comezar un problema ou que lle di o que nome o seu problema ou ela lle di, esta é probablemente a mellor forma para comezar a facer o seu problema. E entón vai ser perdida. Cando intenta ler o seu especificación no medio, unha morea de importante information-- en que non está vai ser capaz de realmente acceso. Polo tanto, le toda a spec. Probe ler toda a especificación antes de ir para a sección, porque entón, cando falar do pset, todos podemos facer unha idea do que está pasando. En segundo lugar, este é un concepto que eu vou gusta de referencia moito ao longo do semestre do curso. Pero, esencialmente, coñecer-nos a medio camiño, non? Me, como o seu TA e Jason como curso director e SCAZ como o seu profesor de e David como o seu profesor e todos os outros ATs adoráveis ​​neste curso, asistentes neste course-- imos facer o noso mellor para garantir que está definido para ter éxito neste curso. Imos realizar sección. Imos realizar o horario de oficina. Nós responder o teléfono chamadas, responder aos seus e-mails, facer todo o que pudermos para facer Comproba se as súas preguntas son respondidas. Con todo, nos axudar tamén. Atopar-nos no medio do camiño. Se ven para o horario de expediente non ir para a sección, non vendo as conferencias, non tendo idea do que está a suceder, sexa como, me axude. Eu vou ser como, ben, eu sinto moito. Pode ser o momento para prestar que ombreiro para chorar, porque eu non estou seguro o que podo facer para axudar se non tentar, polo menos, axuda Se algo no inicio. Atopar-nos no medio do camiño. Vostede sabe, por favor, veña preparado para responder e obter listo para se implican no material. Isto fai as cousas moito máis máis doado para todos os implicados. Si, iso é moi fermoso isto. Grading. Así, no plan de estudos, é moi en profundidade acerca de como nós grao. Pero, esencialmente, a repartición neste é do 50% da súa nota serán os que, Serie de exercicios é fermoso, porque é iso onde está gastan a ampla maioría do seu tempo no curso. Quizzes 40%, ea súa proxecto final será do 10%. Haberá dous cuestionarios ao longo o curso do semestre. Eu creo que as horas e datas son tamén aparece no plan de estudos. O xeito que nós imos ser Grading seus Serie de exercicios é que temos esencialmente catro valores que atribúe a cada grao. Temos un valor de alcance, exactitude, deseño e estilo. Entón, como podes ver, este é o tipo da nosa fórmula de cálculo Serie de exercicios. Tres damos máis peso para corrección, porque, obviamente, o seu adestrador debe ser a probar para os casos que queremos que para probar. Vós todos teñen check50 á súa disposición. É unha función moi útil que podedes todo cargar o seu código para os nosos servidores, onde imos comprobar isto para vostede. E xa viu aqueles frowny rostros, caras do Smiley. Son realmente, realmente útil. Por favor, non ser a estudante que lle gusta intentos para codificar en todas as respostas a elas. Eu sempre vin un pset onde alguén viu todos os valores de check50 e eles simplemente codificado em-- se este número, imprimir este número. Se ese número, imprimir ese número. Non faga iso. Aínda que tecnicamente check50 está correcto, a súa forma de resolver o problema non é correcto. Entón, só tes que usar check50 con moderación. Pero tamén asegurarse de que entender como funciona, o programa está funcionando Ademais de check50, porque non podemos probar todas as posible caso de check50. Nós imos estar probando algúns deles. O deseño é esencial, como ben deseñado é o código? Se é copiar-pegar múltiple liñas de código moitos, moitas veces. Poida que non ten bastante o mellor deseño no seu código. Quizais sexa hora de engadir que loop. Esencialmente, aquí é só todo sobre a tentar facer o seu código, intentando escribir o seu código de forma tan eficiente posible, para que o seu programa execútase tan axiña como sexa posible. Para rematar, temos estilo. Entón, o estilo é unha especie de arbitrario, termo subxectiva. Sei que temos oficialmente unha guía de estilo para 50 CS50, onde di que, oh, ti debe ter un espazo aquí. Ten que tipo de formato seu código dese xeito. Ten que nomear as cousas deste xeito. Realmente non me importa, per se, como escolle o estilo do seu código, só o tempo que sexa consistente. Por exemplo, se desexa deixar un espazo despois do seu catro antes do seu ciclo de catro, só facelo todo o tempo. Non tipo de facelo. Non facelo outras veces. Se che gusta de manter rizado espazo claves dunha certa maneira, só sempre facelo dese xeito. Non tipo de facelo nalgún lugar aquí e en algún lugar non existe. Cando estamos clasificación, é realmente difícil se eu non teño idea de como está formateo seu código, as cousas son tolas e fóra de lugar. Se só mantelo consistente, é moito máis fácil para min como o maior para poder ler o seu código. É moito máis doado para ti coma un estudante para poder ollar a través do seu código para ver o que hai de malo con que cortar porque hai cuestións. O estilo é unha das cousas máis fáciles podedes facer para obter correas completa. Esencialmente, se só se preocupan si pagar cinco minutos de atención ao seu código cada semana, ten que estar recibindo puntos de estilo completos. Para rematar, temos o que se chama o multiplicador do ámbito de aplicación. Scope-- Sei que é un gran palabra, especialmente nesta clase. Pero alcance, todo o que medios é que estás as Serie de exercicios para o mellor da súa capacidade. Se virar en tres dos seus catro problemas e nin sequera tentar o última, probablemente está vai perder algúns puntos en ámbito de aplicación. Mesmo se acaba de comezar o problema, facer o mellor para atravesa-la. Mesmo se non funciona, transformalo en, pois que mostra e demostra para nós que estás, que intentou o conxunto de problemas co mellor da súa capacidade. E entón podemos darlle todos os puntos de alcance. Scope tamén é moi importante para cando falar do menor gota puntuación pset. Así, ao longo do curso do semestre, vostedes teñen nove Serie de exercicios. E nós imos realmente estar caendo a menor puntuación fóra dos nove, pero só se ten puntos ámbito completo. Entón, se transformar nun pset incompleta, por desgraza, non podemos deixar que un, xa que o seu ámbito de aplicación Os puntos non foron concluídas. Así, mesmo se ten a terrible semana onde está morrendo e está enfermo ou o seu can morre, o seu gato morre, e está resaltado coa lección de casa, só tentar o pset. Facelo o mellor da súa capacidade. Se iso non funciona, non importa. Basta liga-lo en. Polo menos podemos dar apunta para o esforzo. Nun esforzo para esta clase. Polo menos gota puntuación máis baixa para o esforzo. Entón, si. Iso é moi fermoso isto. Alguén ten preguntas para agora sobre como nós grao na clase? Ou calquera destes? Calquera destes tan far-- seccións, o horario de oficina? Legal. Aceptar. Polo tanto, este é un tema que non un realmente lle gusta falar sobre. Realmente non me gusta falar sobre iso. Vostedes realmente non quero para me escoitar falar sobre iso. Pero, desgraciadamente, todos ten que falar sobre iso. David pasou 20 minutos a charla falando sobre iso. E ese é o tema de honestidade académica. Entón, nós todos aquí teñen probablemente escrito un ensaio nalgún momento da nosa carreira Yale. Nós probablemente xa conquistou unha charla onde temos se dixo para non plagiar noso ensaio, porque este traballo non é nosa. En ciencia da computación, temos o mesmo tipo de concepto. Todo o traballo que enviar, todo o código que escribe debe ser o código que escribiu. Non debe ser o código que ten copiado doutro lugar. Non debe ser un código que xa pesquisei e estatelou no e realmente non sei se funciona. Vostede medio que ten un sentido de o que está facendo, pero non realmente. Cando en dúbida, esencialmente, é só ser razoable. No noso programa, temos toda unha lista de cousas vemos como razoable contra non razoable. Por exemplo, razoable é vostede eo seu amigo discutir cal o mellor camiño a percorrer loxicamente sobre como resolver un problema. Isto é moi razoable. O que non sería razoable é se caras reuníronse, escribiu o mesmo código, e virou-se o mesmo código. Iso non é razoable. Mesmo, tipo dun ensaio. Se quere discutir co seu amigo, hey, iso é o que quero escribir sobre. Estas son as etapas que quero tomar para escribir sobre iso, xenial. Iso é marabilloso. Por favor, colaborar entre si. Se vós comezar escribindo o mesmo, transformar, o mesmo ensaio, que é menos Aceptar. Así, cando en dúbida, só non facelo. Aquí, en CS50, temos guións que corren para automatizar a probar non só a corrección do seu código, pero tamén a singularidade do seu código. Entón, por favor non nos coloquen na posición de ter que someter o seu caso para EXCOMM. Por favor, só para todo o mundo, imos só facer esta unha experiencia marabillosa. Todos aprende mellor, todos somos máis felices, e nós son todos creados para ter éxito neste curso. Algo que é moi único sobre esta clase que eu creo que todo o mundo debe realmente prestar atención é que temos que se chama arrepentimento cláusula no noso programa. Entón, basicamente, no prazo de 72 horas, se Cree que se faga algo non está realmente certo foi adecuado, por favor, veña a nós. Prometemos-lle que dentro de 72 horas imos manexar o caso nos sen referirse a unha maior autoridade na administración. Polo tanto, se ve a min e dicir: Andi, hey, realmente sinto moito, pero eu creo que hai algunhas liñas no meu código de onte á noite que eu medio que pesquisei, saíu de Pila Overflow, copiar e pegar, e eu estou moi, moi triste sobre iso, deixe-me saber. Por favor, non só deixar lo apodrecer e só espero que pegalo. Imos pegalo. Só veña a min. Deixe-me saber dentro de 72 horas. Imos descubrir unha solución. E nós prometemos que non imos referirse a autoridades universitarias esencialmente. Polo tanto, é no seu mellor interese para ser só honesto con todos parte no curso. Aceptar. Aceptar. Entón, agora, rapidamente, antes Eu seguir adiante, calquera ten dúbidas sobre loxística sobre o xeito no que os cursos que imos realizar, como seccións van a correr, nada diso? Aceptar. Si. Audiencia: [inaudível]? ANDI Pengo: Si. Entón quizzes-- cantos de vostedes son na sección segunda / mércores? Cantos de vostedes están en martes / xoves? OK, polo que é unha fracción sólida aquí. Así, a forma que nós funcionan que en Yale é que van ter dous separados quizzes-- un para cada section-- que serán tomadas durante a clase. Creo que é de outubro de finais de outubro, algo así como unha semana do quiz. É, polo que só vir á clase. Nesa luns ou mércores, vai facer a proba. Nesa martes ou xoves, vai facer unha proba diferente. Pero o mesmo material será cuberto. Si. Boa pregunta. Si. Audiencia: Onde nós ir comprobar nosas notas? ANDI Pengo: Si. Entón eu vou estar enviando un correo electrónico calquera que sexa cada semana cando os cuestionarios son graded-- ou, pesaroso, cando Serie de exercicios son clasificados. Serie de exercicios son xeralmente xirado ao mediodía ou o venres. Entón, eu prometer que vou tentar levalos de volta para ti polo mediodía do venres seguinte. Cada vez que grao un pset, eu enviarei unha notificación sobre o libro de notas que lle di a súa puntuación se pode ver en liña. Tan certo, esta semana, despois de que eu nivelación de acabado Serie de exercicios da semana pasada, vostedes van recibir un correo-e notificación dicindo a vostede, hey este é o lugar onde ir ver as súas notas. E podes ver todos repartición das súas notas. Podes ver os comentarios. Oh, cousa rápida tamén. A sección de comentarios na gran libro é onde eu probablemente vou pasan a maior parte do meu tempo de clasificación. Entón, unha cousa que é realmente importante cando vostedes están vendo súas notas nos seus Serie de exercicios é non só mirando no escore físico pero tamén tendo tempo para realmente ler os meus comentarios. Moitas veces, que lle dá un feedback de como está resolvendo un problema. Se precisa facer algo un pouco mellor, crítica constructiva é normalmente mellor dato naqueles sección de comentarios. Entón, por favor, por favor, eu vou para pasar o tempo escribindo comentarios. Por favor, eu realmente aprecio iso se vós ía ler estes comentarios. Aceptar. Legal. Todo ben. Entón, imos comezar a falar e só revisar rapidamente parte do material a partir semana de cero só polo que estamos na páxina da dereita comezando problemas desta semana. Así, o loop while é un un dos tres tipos de mallas discutir anteriormente nesta clase. Un loop while esencialmente está escrito na sintaxe en que, cando unha determinada condición, facelo varias veces, non? Pense nisso neste gráfico aquí. Vas para comezar nunha punto no seu código. Vai entrar na condición de loop se-- Non sabe-- x é inferior a un. Se iso é verdade, está indo para realizar o corpo do loop. E vai seguir facendo que unha vez máis, de novo, de novo, máis e over-- que é por iso que é un loop-- ata que a súa condición convértese en falsa. Así, deste xeito, un loop while é unha das formas máis simple para escribir calquera tipo de condición que Debe repetir máis e máis e máis. Só ten que ter coidado cando está escribindo calquera tipo de lazo que ten unha condición de saída como así como unha actualización para o que quere que é para que o bucle non fai só correr máis e máis infinitamente. En calquera caso, está indo para querer asegurarse de que está cambiando algún aspecto da seu código ou ao final do ciclo só para asegurarse de que ten un xeito para progresar no sentido da condición que pretende reunirse para final. Isto ten sentido para todos? Nós só non quero estar collidos nesta espiral onde que ir ao redor e ao redor e non hai ningunha forma de romper o ciclo. E cada lazo esencialmente ten un xeito de facelo. Aceptar. En segundo lugar, moitos de vostedes Serie de exercicios nos seus Mario probablemente tivo que contratar este tipo de loop. El é chamado un loop Do While. Primeiro de todo, alguén me pode dicir que a diferenza entre un facer while e un loop while é? Si. Audiencia O loop Do While execútase en primeiro [inaudível]. ANDI Pengo: Si, exactamente. Así, un loop Do While sempre fai todo o que está dentro do facer, dentro dos corchetes alí e fai esa condición antes de comprobar as-- sorry, fai este código antes comprobando a condición. E iso é especialmente relevante para nós aquí nesta clase, porque a maioría das veces imos querer pedir o usuario por algún tipo de entrada. E entón, dependendo a entrada que nos dan, entón podemos avaliar, oh, facer necesitamos levalos de novo? Así, no Mario, se o usuario lle deu unha altura negativo, por exemplo, está indo para a primeira liña e facer todo o que está dentro. Entón está indo para comprobar agora. Vostede sabe, é negativo 1, que é un número positivo? Se non é, eu estou indo a ir volta e repita o tumulto e repita e repetir e repetir ata que finalmente, darlle un número que lle gusta, que todos podemos empregar no noso código. É moi importante para esencialmente calquera entrada do usuario. Podo asegurar-lle calquera tempo nun pset onde pedimos-lle para introducir calquera tipo de código, somos probablemente vai darlle un caso de proba en que somos vai darlle algo malo é iso vai romper o seu código. Se intentamos pedirte para introducir un enteiro, podemos só darlle unha corda e ver como lidaria con iso. Se nós lles pedimos que empregan unha idade, podemos darlle un número negativo para ver como lidaria con iso. Só asegúrese de que vostedes están probando para casos en que non obter o mellor entrada, imos só dicir. E un loop Do While é moitas veces a mellor xeito de proxectar o seu código para que atende a ese ámbito. Aceptar. Aceptar. Polo tanto, esta é probablemente a máis lazo complexo dos tres que nós miramos ata agora. E parece moi asustado no comezo. Pero eu asegura que, xa que vós incorporarse o xeito de como usar un loop for, é unha das cousas máis útiles, a maioría das ferramentas no seu arsenal para avanzar nesta clase. Así, por exemplo, en arañazos, tivemos este bloque moi sinxelo que dixo só repita esta seguro Frases determinado número de veces. By the way, SAJ-- iso é SCAZ Andi Jason. Nós moitas veces asinar a nosa correos electrónicos SAJ. Se dicimos SAJ, non sexa confuso. Isto é só nós. Así, en perigo, fomos capaces de ter un bloque que dixo, repita Encántame SAJ! 10 veces. Moi sinxelo. A lóxica por tras diso é unha moi, moi sinxelo, non? Eu quero ir primeiro a través do primeiro tempo e ver que, por segunda vez para ver que, por terceira vez, etc. etc., ata chegar a 10. E a forma que representamos que en código é só a través dun loop for simple. Así, para, está indo para declarar súa variable aquí, neste caso, cun int. Estamos indo para nomea-la i. Nós imos arrinque-lo a 0. E a edición de parada é será i é menos que 10. E a actualización será i ++. E dentro do loop, que vai a realizar ata que, finalmente, chega ao final do condition-- onde caso, que vai romper o loop. Debe haber cousas que caras teñen todo tipo de visto antes e tiña que facer para o seu problema definido. Alguén ten algunha dúbida sobre loops agora? Aceptar. Gran. Aceptar. Polo tanto, para aqueles de vostedes que teñen le a especificación pset para esta semana sabemos que imos ter que empregar algo chamado ASCII e táboa ASCII. Entón David en charla pasaron brevemente como os ordenadores essentially-- todo é codificado nun ordenador binario, en ceros e uns. E a forma que os ordenadores son capaces para almacenar os valores diferentes, ademais a ceros e uns son a través de cartografía estas cifras para representar outros díxitos ou esencialmente outros personaxes. Polo tanto, neste caso, un ASCII mesa-- todo o que fai É personaxes mapa, é carácteres, para números. Así, o ficheiro de código fonte en seu Computador-- que ve, hey, unha morea de ceros e uns, ceros e uns, ceros e uns. Iso é o que almacenado na memoria real do ordenador. Pero cando nós, humanos, tanto comunicar co ordenador, nós want-- dicir, por exemplo, se quero a maiúsculas A, Vou ter que dalgunha forma de dicir ao ordenador, oh, cando escribir letras maiúsculas A, quero dicir esta representación en binario. E así a forma de facelo é xogou un cousa arbitraria chamado unha táboa ASCII, onde nós, como seres humanos, como programadores, hai algún tempo, decidimos que arbitrariamente estaban indo para asignar estas cifras Os valores para estes personaxes. Entón vostedes pode google iso en liña. Eu creo que hai unha ligazón a el na súa pset-- só un mapa da táboa ASCII, ASCII táboa. El só traduce binario números en caracteres. E iso vai ser moi útil para o seu conxunto de problemas sempre que sexa calcular calquera cousa ou se quere amosar certa caracteres ou números enteiros ou manipular certos personaxes. Vai ser moi importante que todos vostedes saben como navegar unha táboa ASCII. Así, por exemplo, a letra maiúscula A é representado polo número 65. E a unha minúscula é representado por 97. Por iso, é importante saber que o diferenza entre os dous valores é 32. Moitas veces, se precisa converter de un para o outro, a diferenza é de 32. E non se preocupe se vostede é do tipo de confuso sobre iso en primeiro lugar. Nós falaremos de como iríamos en empregar este código real. Aceptar. Polo tanto, para aqueles de vostedes con portátiles fóra, Sinto-se libre para puxar arriba unha táboa ASCII, porque estes probablemente esixen vostedes para facer referencia o que os personaxes están. Aceptar. Entón, sabendo que certos caracteres Rueiro para determinados números, se eu fose para executar só o primeiro liña de que code-- o printf un, minúsculas, un sinal de menos maiúscula A. Alguén ten un palpite sobre o que sería imprimindo da pantalla agora? Entón, primeiro de todo, o que fai minúsculas a representar? Cal é o número que codificado na táboa ASCII. Sentímolo? Audiencia: 97? ANDI Pengo: 97, xenial. E o que é maiúsculo? Audiencia: 65. ANDI Pengo: Entón, o que é 97 menos 65? Audiencia: 32. ANDI Pengo: Aceptar. Entón, o que vostedes pensan que vai pasar cando entrada que liña de código no meu ordenador? Audiencia: [inaudível]. ANDI Pengo: Sentímolo, fale. Sen preocupacións. Este é un moi seguro ambiente, menos a cámara. Estamos todos indo a-- non se preocupe. Só imos todos finxir é só nos refrixeración nesta sala. Sen preocupacións. Ningunha pregunta é moi estúpido. Ningunha resposta é unha resposta estúpida. Eu probablemente vou cometer erros no curso do meu ensino. Serio, xente, só deixar escapar para fóra. Sexa confiado en si mesmo, sabe? Entón, o que foi iso? Quen dixo que a última resposta? Aceptar. Berrar que bos e claros. Audiencia: 32? ANDI Pengo: 32. OK, imos realizar este código e ver se é iso que pasa. Aceptar. Entón, como podedes tipo de ver, a notación típica teño configurar aquí para saber como ía empregar calquera tipo de programa no noso ordenador. Temos a nosa función principal dentro da nosa función principal. Eu só vou copiar e pega esta liña de código. Tamén debe ter coidado cando caras están copiando e colando código. Ás veces, certos operadores non pegar máis correctamente. Nese caso, a non ser sinal era en realidade un trazo. E así o ordenador non buscalo. Así que tiven que ir cara atrás e redigitar fisicamente iso. Só ten que ter coidado cando vostedes están facendo iso. Aceptar. Estamos indo para executar este aquí. Entón, nós estamos indo ao noso cd en section2. Eu chamei este asciimath programa. Entón lembre, cando executar calquera programa, queremos primeiro recompila-lo executando a través do noso make. E entón nós queremos realmente executada o programa facendo dot-slash. Entón, nós estamos indo a ./asciimath. Seguro, alí imos nós. E vemos 32. Ben feito. Merece unha peza de doce. Doces para ti. Desculpe. Todo ben. Aceptar. Así podemos volver ao noso exemplo aquí. Aah, non. Aah. Aceptar. Eu só vou mantelo así. Aceptar. Aceptar. Entón, como podedes ver, podemos facer unha morea de cousas moi interesantes, unha morea de cousas moi legal, unha morea de cousas moi complicadas que inclúen Caracteres ASCII e números. Despois de descender para a liña de cinco, iso é unha chea de seguir adiante. Non estamos indo a ir a través da sección. Sinto-se libre para, se pode, razoar en papel primeiro sobre o que debe estar a suceder cando introducir tal unha secuencia de valores. Por exemplo, en que a última liña, temos z-- que representa un certo number-- A-- o que representa tamén unha certos number-- máis 1 modulos 26 ademais dun minúsculas. Se vós manter a lectura a través destes, ten pode ver un estándar xorden en como estamos manipulando o código. Bastante, altamente suxerir despois da sección todos vostedes caras ir adiante e entrada aqueles todo no seu ordenador para ver que tipo de números están saíndo e razoamento través porque aqueles son pasando, porque para os seus Serie de exercicios que vai ser moi importante para entender por que certas cousas están a ocorrer. Todos estes diapositivas será liña. Así, non preocupacións sobre o intento de fisicamente copiar as notas. En liña de todo. Iso por si só sección será liña. Todo o meu código fonte que Estou executando será liña. Si. Será que aínda ten algunha dúbida? Audiencia: Cal é modulos? ANDI Pengo: Aceptar. Entón modulo é un operador que ser moi importante para pset das súas caras aquí. Así, a forma que os operadores no C e no traballo de programación é que ten o que se chama a símbolo de división eo símbolo módulo, que é como o sinal de porcentaxe. Así, en C, cando fai un enteiro dividido por un número enteiro cunha barra, C ten unha tendencia a querer cortar off todos os puntos decimais, quere porque un número enteiro para converterse nun enteiro. Non vai querer ser un dobre con unha morea de casas decimais despois todo isto. Entón, se eu fai 3 dividido por 2, vai para cortar a 0,5 e só darlle un. Entón, iso é algo a ser moito coidado cando está facer calquera tipo de matemáticas na programación, é que as cifras que comeza poden non ser os números que estaba a pensar, é por iso que o redondeo na súa última pset é tan importante. Modulo dálle o resto. Así, por exemplo, se eu fixen 3 modulo 2-- tan 3 por cento sinal 2-- que lle daría o resto deste. Entón 3 dividido por 2 é de 1,5. É un resto de 1. Sería darlle o 1, que é o que queda de que. Entón, cando vostedes están movendo a través da táboa ASCII, modulo vai acabar por ser algo que é moi importante, e imos discutir iso máis tarde. Aceptar. Polo tanto, algo que é moi, moi novo e moi orixinal que temos discutido esta semana é o concepto do que é unha matriz. Entón matriz é o primeiro tipo de estrutura de datos que imos atopar nesta clase. Toda a estrutura de datos está é algún tipo de arbitrariedade, literalmente cousas como estrutura que nós, como os programadores crearon, que poñemos no noso código que pode conter outros anacos de código. Polo tanto, neste sentido, unha array-- pense nisto como un armario de arquivo, onde se abre diferente baldas de armario de arquivo, podes acceder cousas distintas. Na memoria, unha matriz é só a facer o mesmo no seu ordenador. Pode ter diferentes nós blocks-- chamalos indices-- dunha matriz. É como un bloque, andel de memoria que creamos dentro do seu ordenador que pode introducir certas cousas en diferentes espazos. Así, con unha matriz, ten Sempre ten que specify-- ten que especificar declarar un matriz no seguinte formato. Vai primeiro especificar o tipo de datos que quere crear da matriz. Se eu queira un array de enteiros, Vou poñer int alí. Se quero unha matriz de cadeas, Vou poñer cordas alí, o nome da súa matriz, e, a continuación, terá corchetes. E dentro dos corchetes, es terá o tamaño da súa matriz. Algo que é realmente importante para ter en conta ao crear matrices é que, unha vez que crear un array, que tamaño non pode cambiar. Entón, se sabe que agora ten unha matriz de tamaño 10, vostede sabe que eu vou ter 10 células dentro de 10 ou índices neste gama, e iso non vai para ampliar ou diminuír non importa o que, e que non hai Actualmente só 10 bloques de espazo alocados na súa memoria que pode almacenar ata 10 cousas que quere que puxo. Así, deste xeito, un tipo de datos de matriz, a estrutura de datos que é unha matriz é moi diferente de algúns outros nós imos facer a cobertura máis tarde neste curso. Si. Por exemplo, se quería crear unha matriz de tamaño 3 que contidos variables de integer-- Oh, escusa, de temperature-- e temperatura, de por suposto, é un número enteiro. Entón, nós criaríamos int, que é o Tipo de datos que queremos para almacenar. Imos chamar esta temperaturas por unha cuestión de nomenclatura de nomeamento algo que todos nós entendemos. E nós imos ter corchetes. E queremos tres números. Entón, nós estamos indo a poñer tres no interior do mesmo. Algo que é realmente importante ter en conta é que as matrices son indexados cero. Todo o que significa é que comezar co índice de 0, e corre cara arriba a través da tamaño da matriz menos 1. Así, por exemplo aquí, teño unha matriz de tamaño 3. Vai poder para prender tres valores. Pero os números que themselves-- número, a matriz, este índice, a matriz, son de 0 a 2. Polo tanto, rapaces, ser moi, moito coidado cando está pasando por un problema definidos ea creación de calquera tipo de matriz, porque moitas das veces é realmente, realmente doado esquecer iso. En realidade, eu non teño o índice de 3, que actualmente só ten o índice de 2. E se tentar acceder ao índice de terceira, que será o que se chamado o terminador nulo. Non vai, en realidade, existen na matriz. E o ordenador é non vai gusta diso. Polo tanto, teña coidado sempre está accedendo as cousas só para garantir que Lembre que as matrices son cero-indexado. Aceptar. Así, o primeiro exemplo é só un xeito de crear unha matriz. O segundo exemplo, eu teño a continuación é só unha forma separada de crear o que é o mesmo datos estrutura que temos só introduciu. Entón, en vez de fisicamente executando a través de e poñendo en temperatura de 0 é igual a calquera outra cousa, temperatura 1 é igual a calquera que sexa, temperatura 2 equals calquera que sexa, eu podería realmente só crear todo isto directamente nunha liña a temperatura entre corchetes é igual. E teña en conta, neste caso, non para especificar o tamaño da súa matriz é, porque o ordenador vai pasar e ver que non hai tres elementos nesas claves. E vai saber, OK, Eu teño unha matriz de tamaño 3. Non está indo a necesidade de introducir-lo do seguinte xeito. E tamén, si, de que xeito. Alguén ten preguntas acerca de como nós facemos matrices ou como a estrutura dunha matriz funciona? Si. Audiencia: [inaudível]? ANDI Pengo: Si, exactamente. Entón, se fose para declarar e arrincar unha matriz seguinte método, que é a segunda forma, pode só deixalos. E o ordenador automaticamente sabe que Debe contar cantos elementos son nesas claves, separados por comas. Entón, aquí ven 65, 87, 30. Así, o ordenador sabe, oh, hai tres enteiros. Sei que para crear un nome de matriz temperatura con tres elementos nel. Boa pregunta. Si. Audiencia: Non se pode crear unha matriz con diferentes tipos de datos que poderían ser celebrados iso? Por exemplo, con números enteiros [inaudível]? ANDI Pengo: Para efectos desta clase, non, de momento. Cando se crea un conxunto de datos estruturar como unha matriz, está dicindo a ordenador, hey, eu teño de ti para reservar este moi memoria no meu disco duro, sendo cada célula dun número de bits. Lembre que aprendemos a semana cero que datos diferente tipo teñen tamaños diferentes? Así, por exemplo, unha cadea é unha cantidade diferente de espazo que un char, que é unha cantidade diferente de espazo a partir dun número enteiro. E por iso, se non especificar e mesturar e combinar que tipo de variables tes, o ordenador de vai ser moi confuso. E non vai saber a cantidade de memoria para che dar. Así, a efectos do dereito Agora, os ordenadores só poden recoñecer un tipo dunha matriz. Boa pregunta. Aceptar. Entón, por suposto, o segunda pregunta que temos é, ben, agora que creamos un array e poñemos todas esas cousas na matriz, como é que imos vai ser capaz de acceder a ela? Así, a estrutura típica que sempre acceder a unha matriz é a nosa linda para loop. Eu prometer a vostedes que nós imos ser vendo unha morea de este compañeiro aquí. Esencialmente, en calquera momento para valores de entrada nunha matriz ou se quere acceder a eles, o mellor forma de facelo é un loop for, porque en un loop, ten sei cantas veces é vai querer executar pola matriz, porque ten unha edición de parada, non? E cada vez que executa través, podes acceder un elemento diferente da matriz. E tamén, esta é unha das razóns polas que normalmente nós comezamos o noso loops co valor 0, porque cando acceder arrays, pode acceder ao contido cero. E así un paralelo moi ben. Vostedes poden ter quería escribir para int i é igual a 1. i é menos que ou igual a 3. Pero non ía funcionar tan ben aquí, porque só teñen elementos de 0, 1, e 2. E por iso, se fose comezar o i no elemento 1, 2 e 3, vai acabar en execución fóra dos límites da súa matriz, e cousas malas van pasar. Entón, eu espero que vós ver o seguinte de por que nas clases anteriores estabamos ensinando a vostedes como executar e formatar un loop for do xeito que estabamos. É porque agora temos transitou en matrices, Podes ver porque os presta 0 Se ben para o acceso. Entón, a nosa forma de facelo é isso-- son só imprimir lo aquí por mor de imprimir a eles. Pero eu teño o meu espazo reservado, coma. E o accedendo real parte está a suceder. O nome da matriz foi chamado de temperatura. Polo tanto, é de temperatura eo i-ésimo elemento da matriz. Así como o loop for percorre, que vai comezar a 0. Vai para imprimir o Índice 0 desta matriz. A continuación, el vai para imprimir fóra do primeiro elemento. A continuación, el vai para imprimir a segunda. E entón nós imos romper. É clara sobre todo como isto está a suceder? Gran. Todo ben. Polo tanto, temos aquí unha forma de dicindo: se non quere para codificar me em-- como o programador. Eu non quería realmente fisicamente poñer en cada elemento individual desta matriz. Se eu quixese, en vez teñen os valores de entrada do usuario, cal é a mellor forma de facelo? Ben, aquí eu creei esta función encantador, en que eu poida declarar unha matriz. Entón imos int scores-- só dicir que queremos facer unha matriz que contiña as notas de todos os 18 dos alumnos aquí nesta sección. Creo que temos un pouco máis de 18 nenos de hoxe. Pero por mor do exemplo, imos supor que tivemos 18. Quere crear un nome de matriz con correas Tipo int porque puntuacións, por suposto, son números. E eu vou ter 18 en corchetes, porque é así que moitos estudantes I quero ser capaz de almacenar decenas de. E a forma que eu cubrir a matriz é que eu tiña executa-lo a través dun loop for, de Claro que, con 0 sendo meu índice 0. E, sendo, a continuación, con 18 meu deixar edición, porque non hai 18 elementos na matriz. E entón eu vou facer printf, Intro marcar para student-- Yada Yada Yada. Alguén me pode dicir por que aquí estou imprimir i + 1 e non eu? É unha especie de un truco pregunta, non realmente. En realidade, non fisicamente afectar o funcionamento do código. Si. Audiencia: [inaudível] 0? ANDI Pengo: Si, exactamente. É un pouco raro dicir, hey, é o estudante 0 nesta clase. É un pouco raro. Entón, nós, como seres humanos, realmente non me gusta para pensar en como os ordenadores pensan. Así, aínda que no ordenador, é almacenar valores no 0-th índice, cando somos seres humanos, nós realmente non quere referirse a nós mesmos como cero. Entón, cando eu só imprimir que, Eu estou indo a imprimir e engadir 1 só por unha cuestión de claridade. Entón, cando imprimir, eu vou ser capaz de imprimir os alumnos do 1 ao 18. En realidade, non ter impacto a execución de código de calquera forma, do xeito que eu imprimir. Pero teña coidado cando está de feito, o acceso a matriz. Cando ves as puntuacións i, notar aquí que eu son realmente acceder ao contido 0 e non o máis 0-- 1 ou 1 + 1, Neste caso, o índice así que é realmente clara. Está todo o mundo tipo de Aceptar no como iso está en execución a través e con todos os índices que son poñer un valor para a matriz e crear unha matriz con 18 números que o usuario vai a entrada? Aceptar. Legal. Aceptar. Pasamos agora en algo que é moi relevante para esta peza, ben definido. Sei que na charla, David-- Sentímolo, vostede tiña unha pregunta? Audiencia: pode aumenta-la? ANDI Pengo: Si, entón eu tente. Pero eu non sei. Por algunha razón, este versión de PowerPoint non é realmente traballar ben co visor. Entón, nós só estamos indo para mantelo así. Todos estes serán enviados en liña. Sentímolo, persoal. Si. Aceptar. Por iso, tamén pode ter cordas. Entón, se vostedes realmente notice-- I sabe Rob pasou por riba este en que charla que fez-- unha cadea é realmente só un array de caracteres, se pensar sobre iso, non? Unha secuencia de caracteres é un nome ou un frase ou unha palabra, non? Se eu fose para crear unha cadea co nome Andi-- só o meu nome, A-N-D-I. Vostede pensar que iso fose só unha variable. Pero, en realidade, é discriminado en só unha matriz de caracteres. Entón, ten un carácter de un almacenado nun valor de matriz. Ten un carácter de n almacenado no segundo índice e así por diante e así por diante. Así, de tal xeito, que realmente ten este tipo de estrutura definida en pór para nosas cordas. Entón, aquí, se eu fose para a entrada palabra "comer" - así palabra é igual a cadea obter cadea. Se eu fose para introducir a palabra "comer", que é fisicamente o camiño que o meu ordenador está almacenando esta secuencia na miña memoria. E se eu quería correr por aquela e de impresión que out-- así para a i é igual a cero, lembre, en charla, que cuberto algo que se chama strlen, ou a lonxitude da corda. Porque realmente non saber o quão grande é a matriz de calquera inputting-- do usuario Por exemplo, I introducido a palabra "comer", e sei que é tres caracteres, non? Entón, eu podería poñer nun de tres alí e todo vai estar ben. Pero se o seu algo a entrada do usuario que é un número diferente de valores, está indo a non ser capaz de realmente sabe que cando programar o seu código. Así, a forma que lidamos con casos de proba así é que temos algo chamada strlen, que é só unha función que lle di canto tempo unha cadea é. Entón strlen da palabra. Miña palabra é comer. n é igual a strlen da palabra. Alguén me pode dicir o que valor, en realidade, é logo alí? Que n representando dereita Agora, neste exemplo, se eu tivese que comer? Audiencia: 3. ANDI Pengo: 3, exactamente. Polo tanto, temos para int i é igual a cero, n é igual a 3, esencialmente. E eu vai executar ata que sexa menos que 3i ++. E está indo a ir esencialmente a través de e facer o mesmo. Vai para imprimir cada valor e darlle E-A-T. É só denotando unha xeito diferente de escribilo. Isto vai ser moi útil. Si. Audiencia: Cal é os beneficios de poñer n é igual a palabra strlen interior que loop [inaudível]? ANDI Pengo: Si. Entón, se eu fose a-- dicir, por exemplo, se eu fose para facer, e, a continuación, fazer-- oop-- que, no meu código, sería de feito, estar facendo como o mesmo. Con todo, o xeito que David explicou el durante a charla, se algún de vós Teña en conta que, foi a de que, como o ser humano, como programadores, realmente tratamos programar nosa código, polo que o noso equipo ten para traballar o menos posible, de xeito que o noso código é moi eficiente. Entón, se eu tivese que alí, o que que pasaría a través do meu loop é que eu ía primeiro declarar unha variable i chamado será 0. Vou comprobar, oh, o que é a strlen de palabra? Oh, o strlen é 3. Entón é i menos de tres? Si, é. Vou correr. E entón a segunda vez de volta ao redor o lazo, eu estou indo a incrementar i. i vai ser un. E eu vai comprobar, oh, pero cal é a strlen da palabra? Oh, é tres. E iso parece tipo de desperdicio, cada vez que realizar a través do lazo, estar comprobando a función, aínda que os strlen de palabra nunca realmente cambia? Polo tanto, é enerxía extra para un ordenador. Cando comezar a falar sobre as cousas que son millóns e millóns e miles de millóns de sitios longo, imaxine o seu ordenador ter que ir fisicamente a través de correo comprobar todos os que en cada momento. É por iso que, para facer só por unha cuestión de eficiencia, nós só tenden a facelo, pois deste xeito estamos só chamando a función xa no inicio, e que cada vez que pasa polo que está pasando para almacenar o valor 3 alí, que non ten que comprobar continuamente o tempo. Si. Audiencia: Sentímolo. Só [inaudível]. Podería vostede int n é igual a strlen e colocá- que por enriba do lado de fóra do loop así como? ANDI Pengo: Si. Podería facelo, absolutamente. A razón pola que temos que aquí é porque a forma como un lazo para obras é que se chama variable local no sentido que todo o que é creando dentro do loop for só existe dentro do loop for. Así, a variable i only existe nestes soportes. E aquí as variables de n tamén só existe nestes soportes. Entón, se fose usar strlen de palabra varias veces para abaixo abaixo, absolutamente a mellor forma de facelo sería declaralo la ata o cumio así que non ten que facelo unha vez. Si. Audiencia: Por que ten un nova liña despois da cento vendo se quere poñer todo as letras ao lado del separan? ANDI Pengo: Oh, eu quería imprimilas los todos en cada liña. Non importa. Si, é un formato. Esta é unha boa pregunta. Si, se eu quixese imprimir todo en só unha liña, Non tería o trazo no. Aceptar. Todo o mundo é bo? Aceptar. Legal. Entón eu creo que eu falei abondo. A canto de vós para ser executado a través do código e me diga o que está mal aquí. Onde está o erro? Entón, como podes ver, eu teño declarado nova matriz de tipo cadea clase chamada. E eu teño entrado Sam, Jess, e Kim para el. E eu estou tentando imprimir todos os elementos da matriz. Alguén me pode dicir por que iso me vai dar problemas? Vou dar a vostedes 10 segundos para pensar sobre iso. Aceptar. Si? Audiencia: É o centro esquerda igual a 3 ou [inaudível]? ANDI Pengo: Correcto. Entón, cantas veces é que iso realmente indo para percorrer este ciclo? Audiencia: Four. ANDI Pengo: Exactamente. Vai por catro veces. Vai percorrer a 0, 1, 2, e 3, xa que o seu elemento é i é inferior ou igual a 3. El non vai parar cando é 2. Vai mantê- indo ata acadar 3. E, como sabemos, só hai tres elementos na nosa matriz real. Se intentamos acceder a cuarta elemento ou o índice de 3, está indo bater en algún lugar na memoria que non existe. Chámase o terminador nulo. Nada vai estar alí. O seu ordenador non vai estar moi feliz con vostede. Si. Alguén ten preguntas sobre por que estaba a suceder? Esa é unha área común para evitar. Si. Audiencia: Non fai o primeiro deslice tamén teñen unha secuencia de 2? ANDI Pengo: Non. Así, esencialmente, cando está facendo unha matriz, este dereito paréntese Hai que number-- todos está dicindo a vostede é como moitos elementos que eu teño. Non está realmente dicindo me os índices de nada. Polo tanto, neste caso, eu sei que quero para escribir con tres partes, con tres lugares físicos para Manteña o que quero soster. É por iso que o número tres está aí. Con todo, se eu quería para realmente acceder a ela, se eu quería dicir, printf número soporte de clase, a continuación, está indo para realmente poñer o índice física alí. Si, boa pregunta. Audiencia: Entón é o físico índice debería ser [inaudível]? ANDI Pengo: Eu sinto moito. Pode falar un pouco? Audiencia: Entón é o índice físico [Inaudível] cada unha das caixas? [Inaudível]? ANDI Pengo: Si. Entón, eu vou volver a dereita aquí. Pense ben aquí. Temos unha matriz de tamaño 3. Hai tres lugares, como, espazos reservados físicos en aquí. Pero son nomeados 0, 1 e 2. Entón, se eu quixese acceder a eles, a forma que eu acceder a eles é printf de todo o que eu quería aquí. Vostede tería que imprimir o seu nome, porque, entón, o ordenador sabe, oh, eu preciso ollar nesa matriz ao índice 0. Si. Pero o tamaño non cambia. O tamaño é 3, independentemente de como rótula-los. Aceptar. Todo o mundo é bo? Audiencia: Entón, cada vez que eu [inaudível]? ANDI Pengo: Aceptar. Polo tanto, neste caso, nós realmente non chegar a el neste momento en curso. Pero sabe que un string-- como eu dixo antes, unha cadea é esencialmente un conxunto de caracteres. Entón, se eu crear unha matriz de cordas, eu medio que teño unha matriz de matriz de caracteres, non? Polo tanto, neste caso, porque ten unha matriz de cadeas, se fose para introducir unha palabra moi longa, que aínda ocupa só un espazo, porque esa é a unha cadea. Pero se tivese que pensar en os personaxes desa matriz, a continuación, que está ocupando moito máis caracteres que calquera das outras palabras son. Non é realmente importante para o momento. Pero iso é só en xeral como está a traballar. Aceptar. Entón, iso é algo que eu vou deixar facer moito ao longo do semestre. Necesito descansar miña voz. Vostedes precisan para estimular a si mesmos. Moitos de vostedes probablemente teño que durmir agora. Estou introducindo problemas aleatorios onde nós, como unha clase ou cun compañeiro próximo a está indo para pasar uns minutos discutindo sobre como nós iríamos sobre como resolver ou a creación dun programa como este. Entón, agora, queremos para crear un program-- imos chamalo upper.c-- que converte unha palabra en minúsculas para unha clase alta maiúscula string--, desculpe. Palabra en cordas, desculpe, é sinónimo. Eu estou indo a cambia-los para significar o mesmo. Si. Tome un par de minutos. Non ten que ser escrito en calquera lingua. Só en código ou pseudocode loxicamente como iríamos mesmo vai facer sobre tal problema. Si. [SIDE conversa] Notei tamén que vostedes can-- Eu medio que xa ver o programa. Eu creo que a miña falta de modo presentador é un problema. Pero é OK. [SIDE conversa] Si, por favor, rapaces. Veña incorporarse doces. Veña incorporarse doces. Audiencia: Si! [SIDE conversa] ANDI Pengo: Tamén, si, Vou comezar a tirar doces en persoas que non responden a preguntas. Polo tanto, ten que todas as preguntas de resposta. Ou supoño que a xente que non responder a preguntas. Si, outra forma arredor. [SIDE conversa] Audiencia: [inaudível] ANDI Pengo: Si. Si. [SIDE conversa] Todo ben, persoal. Tome-se, como, máis 10 segundos. [SIDE conversa] OK, persoal. Entón, antes de comezar a probar realmente escribir fisicamente código, un bo hábito para desenvolverse é que queremos primeiro tipo de razón loxicamente como iríamos facelo. Quere ter a certeza, antes de fisicamente comezar a tentar codificar en Mario, que faga Asegúrese de que ten o seu pseudocódigo. Que está levando-o a través o que precisa para crear así que, cando fisicamente escribir o seu programa máis tarde, vostede é capaz de detectar erros no seu código e cousas así. Entón imos só comezar por-- en inglés, en pseudocódigo, será que alguén quere dar me unha explicación xenérica de como ía facelo? Si. Audiencia: [inaudível]. ANDI Pengo: Por suposto, non se preocupe. Audiencia: Pode solicitar a el ou pedir alguén para obter corda 1-- si, corda, e logo-- ANDI Pengo: Si, por iso este é un bo comezo. Vou comezar a escribir, Sentímolo, como fala. Assim-- Audiencia: -o minúsculas números son máis elevados, non? Ou as letras minúsculas teñen números elevados? ANDI Pengo: Exactamente. Audiencia: Entón subtraímos 32 desde calquera [inaudível]. ANDI Pengo: Grande. Entón nós medio que ten un sentido xeral de como traballar sobre este problema. Sabendo que medio que aprendeu a forma física que as cordas son almacenadas na memoria, o que fai xa sei que está indo probablemente ten que escribir no seu código a fin de percorrer a cadea? Audiencia: Para loop. ANDI Pengo: Un lazo é, exactamente. Gran. Entón nós medio que temos un xenérico pseudocódigo escrito este tipo de está dando observa sobre como movería sobre como resolver o problema. Agora que ten iso, pode referencia-lo para máis tarde cando estás realmente escribir o seu código. Así, podemos realmente ir aquí. E eu teño unha función chamada upper.c-- alí é-- de só un modelo en branco agora que vostedes están indo me axudar a descubrir sobre como escribir esta liña de non code-- liña de código. Será varias liñas de código. Ao iniciar calquera tipo de pset en branco, o que é o primeiro que eu teño lembrar de facer? Audiencia: [inaudível]. ANDI Pengo: Gran Yep. Engadir. stdio.h. Moitas veces este é un dos Os erros máis fáciles persoas vai facer cando están escribindo, é que eles van esqueza incluír un biblioteca importante que precisan. Entón, se é o horario de oficina e está tipo, Non sei por que o meu código non funciona. Que me pode dicir por que non funciona? Imos dicir que # include? Ten que # incluír iso. Aceptar. Entón, nós temos o estándar de E / S aquí. É que a única biblioteca nós imos ter aquí? O que máis é que imos facer? Desculpe. Alguén acaba de berrar para fóra? Audiencia: [inaudível]. ANDI Pengo: Alí vai. Aceptar. E como fago para ir sobre como iniciar calquera tipo da función, calquera tipo de función principal dentro do noso programa? Int principal. Aceptar. O que fago para poñer aquí dentro? Cal é o primeiro que quere facer? Se queremos obter un secuencia do usuario, o que imos ter para facer nesta primeira liña? Sentímolo, vostedes só senten libre para falar e voz alta. Só berrar o que quere. Audiencia: Peza ao usuario? ANDI Pengo: Como podemos facer isto? Ask-- son eu que vou escribir "preguntar ao usuario"? Audiencia: printf. ANDI Pengo: Aceptar. Printf. O que quero para printf? Audiencia: Tipo en algo. ANDI Pengo: Como isto? Xente, finxir que eu son un ordenador. Fisicamente me contar cada paso que eu teño para escribir aquí? Estou facendo algo mal? Debo escribir algo? Audiencia: Precisa comiñas. ANDI Pengo: Eu teño citas? Aceptar. Aceptar. Audiencia: E, a continuación, nova liña. Punto e coma. ANDI Pengo: Semicolon? Aceptar. Bo. Audiencia: E quizais especificar que o quere en minúsculas? ANDI Pengo: Grande. Vostedes rin de min esquecendo de poñer un punto e coma. Eu asegura que en algún lugar no transcurso da presente clase, vai se esqueza de poñer un punto e coma, e levará tres horas para descubrir por que o seu código non funciona. Xa pasou con todos nós. Probablemente vai ocorrer con vostede. Obter un bo hábito de usar punto e coma. Aceptar. Audiencia: Quere para facer a barra invertida en? ANDI Pengo: Claro. Quere facer a barra invertida en? Audiencia: Si. ANDI Pengo: Grande. Aceptar. O que fago agora? Audiencia: Get cadea. ANDI Pengo: Obter cadea. Entón o que eu escriba? Alguén? Audiencia: String s. ANDI Pengo: String s. Audiencia: GetString. ANDI Pengo: Alguén, me pode dicir onde esta función GetString vén? Audiencia: string.h. ANDI Pengo: string.h? Pensas que é de string.h? Audiencia: [inaudível]. ANDI Pengo: Alí vai. É a partir CS50.h. Se está sempre confuso sobre onde un arquivo de biblioteca é un ficheiro de cabeceira é dicir, google literalmente string.h, e eu vou che dicir cales son as funcións que están en string.h. Aceptar. Polo tanto, agora que eu creei unha secuencia e eu teño solicitar ao usuario que, Eu almacenado nunha variable s nomeados, o que eu teño que facer agora? Audiencia: Asegúrese de que é en letras minúsculas. ANDI Pengo: Sentímolo? Audiencia: Asegúrese de que é en letras minúsculas. ANDI Pengo: Todo ben, imos facelo. Como podo facer iso? De feito, para os fins da clase agora, nós só estamos indo a asumir que todo que a entrada que xa está en minúsculas. Se quería comprobar, faría basta engadir unha declaración condicional que verifiquei, que percorreu cada elemento de matriz única e comprobado se é entre certos valores. Eu esquezo o que o número de valores son minúsculas. Pode buscalo na táboa ASCII. Pero si, iso é un punto moi bo. Pero agora, nós só estamos indo a asumir que todas as cordas que entrada están en minúsculas. Aceptar. Entón, como eu ía sobre este problema vén despois? Audiencia: Para loop. ANDI Pengo: Para loop? Aceptar. Dime o que escribir. Audiencia: Para int i é igual a 0. ANDI Pengo: Aceptar. Audiencia: Oh, de feito, entón facer unha coma e facer n é igual a strlen. ANDI Pengo: cousa tan importante que eu creo que ela entendeu aquí é que non teñen que dicir int n a segunda vez que o fixo. Só sei que nun de loop cando está declarando: realmente non precisa do int de a segunda vez que fai unha variable. Pode dicir n strlen. Audiencia: De s. ANDI Pengo: s. Aceptar. Audiencia: Entón un punto e coma. ANDI Pengo: Claro. Audiencia: E entón [inaudível] n. Entón i ++. ANDI Pengo: Grande. Todo ben. O que queremos dentro deste loop for agora? Teña en conta que, se nós estamos indo a ser executado a través unha corda e executado a través dunha matriz, queremos comprobar as cousas nel. O que imos ter? Este é o tipo de parte complicada agora. Alguén ten un palpite? Aceptar. Entón, en primeiro lugar, como é que imos mesmo acceder? Como aínda primeiro cheque ou acceder a un elemento na matriz? Como facemos isto? Cal é a notación que usan para facer iso? Cal é o nome dese array chamado? É chamado de s, non? Lembre, calquera secuencia de caracteres é sempre unha matriz. Soporte de forma s i, non? Porque ese é o valor actual ou valor de índice que estamos comprobando. E nós estamos indo a definir que a igualdade de a-- queremos un valor minúsculas, non? Queremos transformar esa lower-- Sentímolo, queremos unha maiúscula. Queremos transformar a minúscula valor nun maiúsculas. E así como-- Sinto moito, cal é o teu nome? Audiencia: Heidi. ANDI Pengo: Sentímolo? Audiencia: Heidi. ANDI Pengo: Heidi. Como dixo Heidi Inicialmente, estamos probablemente Vai ter as-- estamos probablemente vai ter que restar 32 desde calquera charc que é, non? Porque nun ASCII táboa, a diferenza entre unha letra minúscula e unha letra maiúscula é de 32. Entón, cando estamos a facer iso, estamos probablemente Vai querer restar 32, non? Entón, nós imos facer s i. Será que todo o mundo entender por que eu fixen iso? Porque agora, na nosa matriz, estamos comprobando o índice 0, non? E no índice de 0 a corda, que é o primeiro carácter. E ese personaxe que imos para supoñer que é minúscula. Se queremos facelo maiúscula, nós ten que restar 32 a partir do seu valor, porque na nosa ASCII mesa, é así que nós obtelo correspondente á próxima valor que pasa maiúscula. Será que todo o mundo entende isto? Si. Audiencia: Podería tamén non minúsculas un minus-- ANDI Pengo: Si, o que é realmente moi bo. Eu vou volver a iso pregunta despois facemos iso. Si. E entón se eu queira mira o que está a suceder, Eu probablemente vou quere imprimir, non? Alguén me diga o que Quero imprimir aquí. Audiencia: por cento printf c barra invertida [inaudível]. Ese é o valor de [inaudível] s i. ANDI Pengo: s i, desculpe? Audiencia: [inaudível]. ANDI Pengo: Eu non sei. Que pensas? Audiencia: Ben, eu wouldn't-- Eu creo que eu non tería bring-- Eu ía leva-la para fóra do dentro, porque [inaudível]. ANDI Pengo: Oh, que tería feito isto? Audiencia: É. ANDI Pengo: Imos deixar de xeito que é, e eu vou explicar por máis tarde. Teña en conta que, mesmo cando ten un lugar reservado, quere poñer parénteses en torno a el. Todo ben. Polo tanto, este debe ser unha función sólida aquí. Imos executa-lo e ver se compila. Fai superior. Uh-oh. Isto non parece moi bo. Por que isto está a suceder? Como ocorre con calquera erro, quere ir para atrás e para comezar co primeiro, porque normalmente provoca un erro lotes de outros erros despois. Aquí vemos upper.c: 18: 25, que di me neste programa chamado upper.c, na liña 18, implicitamente declarando erro biblioteca de funcións co tipo strlen blah unassigned--, eu non sei o que está pasando despois diso. Todo o que está me dicindo agora é que algo está pasando a strlen. E o ordenador está confuso, porque é como, eu non sei o que strlen é? O que significa que, probablemente, dicirlle que falta? Audiencia: Está perdendo [inaudível]. ANDI Pengo: Está seguro. Exactamente. Polo tanto, este é o lugar onde se importante asegurarse de que todas as funcións que usa no seu código está a ter a cabeceira correcto ficheiro para a biblioteca, ou vai obter lotes de erros eo seu código non vai para saber o que está pasando. Entón, nós estamos indo a incluír string.h aquí. Agora, cando intenta compilar superior. Compilar correctamente. Imos realizar este programa. Entón escribir algo en letras minúsculas. O que vostedes queren escribir? Berro para fóra algo. Todo ben, Charly acaba de entrar. Nós imos escribir o nome de Charly. Charly en letras minúsculas. E espero que, esperanza, este é vai berrar e cuspir Charly en letras maiúsculas. Yay! que todo o mundo entender como Eu fun sobre como solucionar isto? O xeito que eu poida manipular usando números enteiros algo que para resolver Quero facer en cordas, porque os caracteres e enteiros pode ser referenciado do mesmo xeito, porque de cartografía ASCII. Entón, para volver ao seu punto, se eu quería poñer aquí en vez de 32 A maiúsculo menos minúsculas só como un que, que funcionaría igual ben, porque iso é simplemente o diferenza entre estes dous valores. Se eu queira facer esta Charly novamente--. Oh, non. Eu creo que nós fomos polo camiño mal, non? Audiencia: [inaudível] un minúsculas. ANDI Pengo: Alí vai. Yep. E fóra cospe Charly. Polo tanto, teña coidado cando está subtraindo valores para lembrar que é maior que o outro. Por exemplo, aquí eu esquezo que é, en realidade, unha minúscula maior que A. maiúsculas Entón, cando intentou restar-los para o outro lado arredor, eu teño 32 negativo. E meu ordenador era como, Non sei o que é. É probable só algunhas aleatoria valor que non é moi boa. E así asegurarse de que é subtraindo na lonxitude correcto para atopar o personaxe que quere. Aceptar. Alguén está confuso sobre como nós foi sobre como escribir esta función? Aceptar. Entón, en realidade, unha función xa existe na biblioteca chamada ctype.h. Chamado ctype.h da biblioteca. Esta función é, en realidade xa escrito para ti. Chámase a superior. E así, con fins de este pset, está indo para descubrir que realmente quere empregar moitas das funcións contidas dentro da biblioteca ctype. Para arriba, para descargar, é superior, é lower-- aqueles son todos funcións que vai ser capaz de utilizar moito, moi rapidamente no seu propio código que fai exactamente o que iso fai. Escribir para fóra como converter unha cadea para maiúsculas. Pero este é realmente o código que alguén escribiu e que pode acceder a través dunha función diferente. Si? Audiencia: Entón acaba de copiar un está alí e facelo para cada carta? ANDI Pengo: Si, porque eu non facer se preocupan polos valores de un. Só me importa que a diferenza entre eles é de 32, non? A diferenza entre minúsculas b maiúsculas e B tamén é 32. E a diferenza entre C e maiúsculas C é sempre 32. Eu só teño que se preocupan o diferenza entre os dous, porque todas as cartas seguen o mesmo patrón, non? Se eu tivera a diferenza entre un deles, Eu sei que a diferenza entre todos eles é. Boa pregunta. Si. Todo o mundo é bo? Aceptar. Oop. Aceptar. Entón, outro concepto que é vai ser moi útil como continuar a desenvolver seu código é esa idea da creación de funcións ou abstracción. Entón, agora, todos temos tomado álxebra. En álxebra, se ensina que non hai esta cousa marabillosa chamada unha función máquina, onde se entrada de un tipo de número, é executado a través desta función marabillosa e fóra aparece unha saída diferente, non? No código, o mesmo acontece en calquera tipo de función. Para que eu puidese fisicamente escribir no meu corpo do meu código unha declaración principal que realmente fai calquera que sexa o corpo do código está facendo. Pero fóra iso, eu tamén podo escribir moitas funcións diferentes que facer moitas cousas diferentes. Por exemplo, xa comezou a usar algúns deles. Que é un Printf-- función que outra persoa xa escrito que podemos chamar o noso código. Para upper-- neste caso upper-- é outra función temos escrito que Pode chamar o noso código. E entón eu creo que por iso que facer temos ata funcións? Por que non só plop lo todos na mesma liña de código? Isto fai máis doado para todos. Ben, o razoamento detrás diso é, ante todo, da organización. É realmente irritante ir por medio de códigos de alguén e unha función como printf. Se vós realmente sabía o que o función printf implicou a escribir, é, tipo, 1.000 liñas de código. Cada vez que eu quería para printf algo, Eu tiña que escribir 1,000 liñas de código, que sería moi aburrido de ler, non? É por iso que temos só creou esta función abstracto que xa temos alguén outra persoa escribiu noutro lugar. E cada vez que precisa usalo en noso código, nós só temos que dicir printf. E que é capaz de usar a función alguén escribise no noso código. Ela fai máis doado de organización de ler o código. En segundo lugar, é a simplificación. El simplifica os pasos que temos necesarias para resolver o noso problema. Printf, funcións como printf, funcións como a superior son todas as cousas que nos permiten simplificar o noso código abaixo polo que é máis fácil. Ea última cousa é a posibilidade de reutilización. Así, o feito de que temos unha función chamada printf que podemos chamar de moitos diferente veces e permite que sexa reutilizable. Se eu fose escribir printf, Só gravala-lo unha vez. El só existe na medida en que un só lugar. Se eu quixese facelo de novo, eu faría ten que copiar e pegar todo isto na miña segunda liña de código. É por iso que se crearmos unha función que existe fóra do noso principal, podemos simplemente invocar Lo e reutiliza-la sempre necesitamos de xeito que é moito máis fácil para nós, como programas de escribir. Así, a forma que nós realmente escribir unha función é moi semellante, non? Este é o tipo da primeira caso en que nós imos ver un take función nun estilo distinto do noso void main int. Neste caso, se eu quixese escribir unha función chamada q, non? E o valor int aquí é todo a dicirme, o que quero iso funcionar para volver para min? Se eu queira cubo un número enteiro, Vou querer introducir. Estes son os parámetros. Eu estou indo a entradas un valor do tipo int. E eu vou volver outro tipo de valor int. E aquí, como pode ver, todo o que eu estou facendo é cubing calquera que sexa a miña entrada é como a miña saída e devolve-lo. Entón, todo isto fai é función toma algún tipo de número enteiro. El multiplica por si só dúas veces de xeito que en cubos efecto. E, a continuación, el retorna o que quere que a saída é. Polo tanto, neste caso, é dúas liñas de código que tiñamos de escribir extra. Pero se nós quería chamar sobre iso varias veces, é moito máis fácil de escribir que un liña aquí é o cubo de Ten que pasar por varias veces. Así, a forma que, esencialmente, calquera formato para calquera tipo de función vai existir é como aquí. Entón temos o nome da función. Neste caso, é chamado cubo. E nós nomealo porque cubo é doado de lembrar. Pode nomealo cadrados e el realmente pode ser en cubos. Non importa. Só un nome que está atribuíndo a súa función. Este aquí, int, é a tipo de parámetro que necesitas. Entón, o que fai esta función precisa, a fin de operar? Ben, el que de unha entrada. Eu nomeei-entrada. Pode nomealo o que quere. Pero eu teño algo do tipo int. Vai realmente realizar o que está dentro de aquí, o corpo da función. E, a continuación, o tipo de retorno aquí, este int-- todo isto está me dicindo é que esta función é vai voltar a min en int. Por iso, vai levar nun int, e el lle vai dar de volta un int. Será que todo o mundo entender como o formato deste tipo funciona? Legal. Aceptar. Polo tanto, non se preocupe se isto parece un pouco dereito abstracto agora. Isto é algo que nós imos falar sobre. Imos mergullar no máis profundo máis tarde no curso. O xeito que calquera tipo de nivel superior abstracción destas cousas traballo é que, en memoria, en ordenador, todo almacénase neste tipo de pila, eu vou dicir. Entón, alí enriba na parte superior. Non sei se podedes ver que ben. Vou tentar facer zoom. Aquí, na parte superior, nós ter o texto físico que o ordenador é interpreting-- todos os ceros e uns que existe no noso ordenador. E entón temos o inicializar datos de datos e non inicien, o que chamamos variables globais. Así, as variables que hai en todos os programas e en toda a súa totalidade, esencialmente, código. Non te preocupes se vostedes son tipo de claro a este respecto. Realmente non importa agora. E entón temos o que é chamado dunha pila dunha pila. Pense nunha pila literalmente como só como unha pila de cousas, unha pila de diferente cousas que están a ser empurrados enriba un do outro que almacenar os diversos variables e sintaxe no seu código. E, a continuación, aquí no fondo, temos as variábeis de entorno que está executando dentro só a súa pequena liña de código. E nós só estamos indo a zoom no da parte real do conxunto. Entón, aquí mesmo, se fósemos para aumentar en só nesta área do conxunto, este é o que parece. E iso é realmente moi importante cando vostedes falan sobre funcións, porque aviso de que o memoria do seu ordenador é almacenar as variables e as funcións e os parámetros de ambos seu función e as súas principais variables en diferentes lugares. Entón, agora, a principal é a función real que está executando nun código. Vostede seus parámetros almacenados aquí e as súas variables locais almacenados aquí. Variable local significa só que calquera variable que existe só dentro desa función. E encima diso, ten ese función separada chamada cubo. Ten que é parámetros así como os veciños locais. E a razón que pode vexa aquí é que o que ocorre cando cubo leva nunha valor da súa función principal é que, en realidade, está copiando que rematou. Entón, se eu quería cubo 2 e 8 de regreso, que 2 en realidade, é introducido como un parámetro e está copiado forma que ten iso xa existente en dous lugares diferentes na memoria. E ten que ter moito coidado en lembranza de que unha desas en realidade está manipulando. E un exemplo do que pasou que sería moi, moi malo existe aquí. Entón aquí, eu teño, en teoría, un programa aquí, unha función principal que estou declarando un int x é igual a 1. Estou declarando outro int y é igual a 2. E entón eu estou funcionando- a través desta función chamado intercambio, onde supoñer que está cambiando os dous valores. E entón eu vou imprimilas los, non? Isto é o que quero que este programa para facer. Entón, imos baixar e un ollo. Entón, se eu realmente escribir un diferente función, como se pode ver, nós temos a nosa principal función aquí. E entón temos o noso segunda función aquí. Void intercambio. Baleiro significa só que é non vai voltar nada. O nome da función é chamado intercambio, e é indo a dúas variables de entrada, e un int int b, a partir da súa función [inaudível]. Entón, basicamente aquí, somos X e Y que pasa a esta función. E se fósemos crear isto-- así que queremos para crear un valor temporal, non? Imos asignar iso a un. E entón un vai agora igual b. E b vai estar de volta onde o valor temporal foi, que é un, porque cando quere cambiar cousas, non pode simplemente gusta trocalos. Ten que manter un fóra para que se lembra o que é iso, porque xa cambiar un, esquece o que ese valor orixinal, verdade? Polo tanto, en teoría, este programa debería funcionar, non? Se eu quixese cambiar o dous, deben cambiar. Entón, imos executa-lo e ver se funciona. Entón, como podedes ver, x Era unha vez un e y era xa dous. E se eu imprimir lo, X aínda é 1 e y é 2. Hmm, este programa non parece ser funcionando de maneira que quero que funcione. Alguén quere tomar un tiro en adiviñando porque iso estaba pasando? Ten que ver coa forma na que que as cousas son diferentes almacenados en lugares diferentes na memoria. Aceptar. Entón vostedes non teñen que preocuparse moito sobre iso agora. Pero sei que o cubo dos lugares variables foron a e b, porque aquí na nosa función, temos declarou a eb como as variables que hai dentro do cubo, que a función. Pero como se pode ver, os parámetros que está tomando en estaban sendo gardados aquí. Pero non estabamos realmente retornando nada. Non estabamos realmente cambiando xe y. Estabamos só cambiando a e b. Nós tiña copiado x e y en algo chamado a e b. Pero nunca realmente manipulado x e y si. Vostedes están vendo como isto está a suceder? É que nós simplemente copiou acabou, pero non, en realidade, mantido o control de onde estaban na memoria. E agora o ordenador está a buscar, oh, eu teño executar esa cousa medio esta función encantadora. Pero x e y son aínda xe y. Nada aconteceu con Los debido ao feito que estes parámetros e variables locais almacénanse nunha diferente poñer na memoria. E este é un de nivel superior concepto que imos comezar a ver máis tarde no curso. Pero só sei que este é un problema que pode ocorrer e que nós imos descubrir formas de como tratar con isto máis tarde no curso. Aceptar. Todo ben. Así, o último concepto que estamos realmente cubrirá que vai ser útil ao pset esta semana son o que son chamados argumentos de liña de comandos. Entón Rob na súa charla atravesou tipo de brevemente sobre como estes traballos. Esencialmente sabe que cando está escribindo como unha función principal, cando escribiu funcións antes no pasado, tivemos void main int. E a razón que tivemos alí baleiro foi porque os nosos programas non Debe os valores de entrada para realizar, non? Cando eu execute Mario, eu non precisaba para realmente escriba algo cando eu execute Mario. Podería pedir ao usuario despois. Pero isto non sempre será así. Por exemplo, neste O problema de semana define, vai ser proposta que, en Ademais de realizar o seu programa, vai querer entrada certas cousas en liña recta como realizar o seu programa. Entón, a nosa forma de facelo é chamado un argumento da liña de comandos, que é como un argumento pode introducir directamente como estás executar o programa. Así, a cualificación para iso, é moi complexo para o futuro, pero realmente non é tan difícil. Entón int main-- que é só a súa función principal. En argc coma soportes secuencia argv. Entón, todo o que está dicindo é que este int argc-- todo o que está dicindo a vostede é que aqueles son o número de argumentos do ordenador debe esperar. Entón, unha cousa que é realmente importante para manter o control de é o nome físico do seu programa conta como un dos argumentos. Entón, se eu quería ter o meu programa realizar unha liña de comandos adicional argumento, son realmente terá dous. Argc realmente vai ser dous. E entón secuencia argv bracket-- todo o que está facendo, iso está me dando unha matriz de cadeas que é indo só para ver e almacenar o que todos estes argumentos na liña de comandos son. Así, por exemplo, se eu quixese ter esa programa, ./copy infile outfile, non? Isto é só un típico mando Linux. O que realmente é argc? Cantos argumentos da liña de comandos están aí realmente niso? Todo iso fai é facer unha copia do un infile do nome dun ficheiro e copia para outro ficheiro, non? Isto é todo isto está facendo. Como verás, eu estou facendo iso nunha liña sen realmente ter do programa. Cal é a nosa argc neste caso? Cantos argumentos que temos? Audiencia: Tres? ANDI Pengo: Temos tres, exactamente. Polo tanto, é moi intuitivo para só creo que é só o infile e outfile o. Pero sei que o nome físico do programa que está executando conta como unha. Polo tanto, neste caso, argc é, en realidade, tres. Que tal, o que é argv 0? Lembre, todo o Argumentos da liña de comandos foron almacenados nunha matriz de cadeas. Entón, se eu tentar acceder a ela, o que sería argv soporte 0 dáme? Audiencia: [inaudível]. ANDI Pengo: Exactamente. Me daría o punto cortar copia, porque iso o elemento 0, o primeiro elemento da miña matriz. E sobre argv 1? Audiencia: INFILE. ANDI Pengo: INFILE, exactamente. E sobre argv 2? Audiencia: OutFile. ANDI Pengo: OutFile. Isto é un pouco complicado agora. O que vostedes pensan argv 3 estará me dando se eu intentase imprimir iso? Audiencia: [inaudível]? ANDI Pengo: Será que ten unha man enriba? Si. Audiencia: Unha alternativa. ANDI Pengo: Exactamente. Entón lembre de unha conferencia que ten ao final dunha carreira algo chamado un terminador nulo? Nós imos chegar a esta tamén máis adiante, na clase. Pero sabemos que na notación, o xeito no que o ordenador sabe que é o fin da matriz é que pon algo chamado un nulo terminator ou un trazo cero. Entón, se tentar acceder argv 3, está indo bater ese trazo 0. Isto é aínda máis dunha pregunta capciosa. E sobre argv 4? Polo tanto, este é terminador nulo pasado pasado dos límites da nosa matriz. ¿Que pensas que vai ocorrer cando intentamos facelo? Audiencia: [inaudível]? ANDI Pengo: Sentímolo? Digamos que un pouco máis alto? Audiencia: [inaudível]. ANDI Pengo: Si. Que é o nome do área que probablemente vai conseguir. Pero sabe que argv 4-- que permite o acceso lugares no seu ordenador de memoria que realmente non debe ser conmovedora, porque agora xa sabe o que é argv. Vostede sabe que é unha matriz de tamaño 3 que ten dot copia, infile e outfile. Se tentar ir tan ademais que que é pasado o terminador nulo, seu ordenador ten, probabelmente, almacenado algo en argv 4. E realmente non debe ser permite o acceso ás argv 4, porque ten un arquivo armario e só está permitiu o acceso a estes tres baldas. Pero se tentar chegar moito máis alá a plataforma de onde está autorizado, vai comezar a xogar con outras cousas na memoria do ordenador. Isto vai ser moi, moi malo. Entón, só sei que. Teña moito coidado para que non pode comezar aleatoriamente acceder elementos nunha matriz que non estaban en o que quería crear. Yep. Aceptar. Entón, imos facer outro exemplo da terminal aquí. Aceptar. Entón Rob rapidamente charla o outro día fun a través deste exemplo, onde tivo int main int argc argv cadea corchetes, o que está me dicindo que eu son terá argumentos de liña de comandos. Ten, se é igual a argc é igual a 2-- lembre, é igual a igual significa comparación. De ser igual a 2, entón eu son indo para imprimir Ola, calquera que sexa o primeiro elemento da matriz é. Impresión Else, Ola mundo. Que isto vai esencialmente ocorrer? Alguén pode explicar só en Inglés o que este programa está facendo? Si. Audiencia: Se alguén escribiu nun comando e dixo que o seu nome e apelidos, non vai só imprimir o primeiro e dicir: Ola, calquera que sexa o seu primeiro nome é. ANDI Pengo: OK, imos executalo. Así, por exemplo, se eu fose facer o ficheiro facer Ola Ola a-- a-- o que me quere de entrada? Audiencia: Primeiro e último nome. ANDI Pengo: Primeiro e último nome? Espazos? Audiencia: É. ANDI Pengo: Pode alguén dizer- me agora, o que é argc? Só dereito alí? Ops, desculpe. Déixeme volver. Cantos argumentos da liña de comandos é-- vostedes non poden realmente ver. Pero eu vou tentar facer zoom. Estou intentando. Si, hai tres, non? É barra dot Ola, é Andi, e é Pengo. Entón, o que vostedes pensan que esta programa será imprimir? Oh. Oh, desculpe. Nome mal. Está imprimindo, Ola mundo. Alguén quere explicar por que isto está a suceder? Si? Audiencia: [inaudível]. ANDI Pengo: Exactamente. Entón, aquí, son condicionais é, se argc é igual é igual a 2. Así, só no caso de que hai dous argumentos de liña de comandos. Entón eu estou indo a imprimir, Ola, sexa cal sexa. Pero máis, eu vou imprimir só, Ola mundo. Así que alguén quere para me dar un exemplo de como eu sería capaz de realmente obtelo para imprimir o valor de argv 1? O que eu tería a entrada aquí? Só unha cousa, non? Porque o Ola punto para xa conta como o primeiro argumento. Eu só teño unha. Entón dot Ola eu só fago Andi. Ola, Andi. Será que todo o mundo entender por que isto está a suceder? Si. Audiencia: Entón, o espazo entre a linha-- comando é [inaudível]? ANDI Pengo: Non. Así, o espazo nunha liña de comandos argumento, x, para dicir ao seu ordenador que este é o comezo dunha nova secuencia. Entón secuencia argv aqui-- el tendas todos os seus argumentos de liña de comandos en cordas. E así o espazo na liña de comandos argument-- todo o que fai é dicirlle, é dicir, ao final dunha cadea e é hora de seguir adiante a outro. Si. Isto é moi importante para seu pset, porque é será probar estes. Entón, alguén ten dúbidas sobre este asunto? OK, legal. Si? Audiencia: Entón a razón que faría poñer enteiro argumento calc vez de [inaudível] sería momento para introducir información adicional para [Inaudível]? ANDI Pengo: Si, exactamente. Algúns programas esixen que a entrada dun argumento da liña de comandos que entra e que usa isto. Si. Audiencia: Entón, o que se [inaudível]? ANDI Pengo: Ben, o que eu teño a continuación, a cambio na miña programa? Audiencia: Só 3. ANDI Pengo: Por que pasando, que pensas? Audiencia: Porque o [inaudível]. Audiencia: Vostede tería que cambia-lo para 2 [inaudível]. Audiencia: 1 e 2. ANDI Pengo: 1 e 2, exactamente. Polo tanto, neste caso, probablemente quere ter dous printf statements-- un impreso que 1 e argv o que impreso argv 2. Aquí. Podo realmente facelo rápido real. Alí vai. Oh. Non é o que quería. Pero se vostedes xogar con o formato, que vai saír. Si. Legal. Sei que estamos un pouco curto no tempo. Pero eu estou indo só para pasar rapidamente un uns minutos pasando por atenciosa-- Audiencia: Ten dous minutos. ANDI Pengo: Eu teño dous minutos? Grazas. Algúns consellos PSet rápido. Polo tanto, para este pset, eu recomendo, como dixen, todos poderán ler o spec. Vai estar escribindo un tres programs-- chamado initials.c, un chamado caesar.c, un chamado vigenere.c. Algunhas partes importantes que vostedes realmente queren para manter tan mente-- hai esa función chamado atoi-- como me gusta de dicir, a trois. Claro se isto é de feito, como di. Pero todo o que está facendo, está introducindo. Converte unha cadea para un int. Así, un representa ASCII para i enteiro. É só a conversión ASCII valores para valores enteiros. Entón lembre se argv, a matriz que almacena todos os seus comandos de liña arguments-- almacena-los todos como cadeas. E por iso, se quere ser capaz de ter un deles ser un número enteiro, terá para utilizar este valor aquí. Modulo, como nós Cubrimos antes na aula hoxe, permite que teña o resto do que ten. Entón, se temos realmente, realmente grandes números en Caesar, E se temos o fin dunha serie de Vigenère? Como está indo a ser capaz para conseguir que a involucrar en torno a? Se eu acertar z e quero Lo para volver a un, como eu vou chegar que para embrulhar arredor? Probablemente vai querer usar modulo en algún lugar. En segundo lugar, navegar arredor súa biblioteca. ctype.h. Esa é unha nova biblioteca que temos. Vostede vai atopar unha morea de moi, moi isupper funcións no útil, islower, toupper, tolower, isalpha, etcétera. Todas as funcións que serán moi útiles cando está tentando descubrir, é unha letra minúscula ese personaxe? ¿Como converter este cadea para un maiúscula? Todas estas cousas van ser moi, moi útil para o seu pset. Aceptar. O horario de oficina esta noite son 8:00 ás 11:00 na clase Teal mañá así como mércores e xoves. Horario de atención están en commons. Sugiro que caras todo comezar inmediatamente, porque non quere ser que neno que xoves ten problemas someter o seu pset e é como, eu non sei o que facer. Comece, eu rematar, eu sometidos. Probe dar-se algún espazo, por mor dos problemas de código sempre ocorrer. Quere estar seguro de que dá a si mesmo unha gran cantidade de tempo para poder para completar as Serie de exercicios. Legal. Vou ir por aquí. Audiencia: É iso en liña xa? ANDI Pengo: Non sei se é en liña xa, pero vai ser. Vou ir por aquí, se alguén ten dúbidas xa. Grazas por vir.