Jason Hirschhorn: Benvido á CS50 sección, todos. O meu nome é Jason Hirschhorn. Eu son unha morea de TFS seu, pero unha morea de xente veña unirse a nós estudantes, extensionistas e estudantes en liña intentando mirar a sección se perdeu a súa sección naquela semana ou só incorporarse se quixesen revisar algunhas material. Así, de acordo co programa, que todos de que leu, correcto? Eu vexo unha morea de acenos de cabeza. Seccións proporcionarlle oportunidades para explotar o campo de material nun ambiente máis íntimo, así como mergullo actividades hands-on. Entón, iso é basicamente o que estamos estará facendo cada semana. Nós imos pasar por o que temos determinado a ser o máis importante temas abordados na aula, e os Probablemente a máis útil, e tamén máis probable que veña en conxuntos de problemas e en probas, e na súa codificación vida fóra do CS50. Entón, nós estamos indo a ir a eses temas, discutir-los, pasar por riba deles, responder a calquera preguntas que vostedes teñen, e entón imos facer unha chea de problemas prácticos de codificación. Vós todos trouxo portátiles, o que é fantástico. Esta é unha clase de ciencia da computación. Con todo, moitos dos exercicios que facemos, non vai ter os seus portátiles para. Pode facelos nunha folla de papel. É así que está indo a facelas na quizzes. E, de feito, esta é unha gran forma de realmente sei que como facer algo, se non ten 50 Comproba a dependen ou Facer a confiar en nós, dicindo cometeu algún erro. Entón, vostede é benvido ao código da run.cs50.net aparato ou, o que é outra ferramenta que permite codificar en liña, pero eu tamén recomendo, se aínda non experimentou, usando unha folla de de papel e tratar estas prácticas problemas nunha folla de papel. Porque unha vez máis, que é en definitiva, o que será pediu para facer en quizzes. Entón, imos comezar co noso axenda para hoxe. Nós imos pasar por riba de algunhas normas para nosa sección, entón imos mergullar en matrices, funcións e liña de comandos argumentos, que é o que vostedes Cubrimos a semana pasada, en charla e luns, eo que vai cubrir máis de mañá. E entón, finalmente, imos para falar pset2. Se eu puidese ter un concerto de mans non olhei ao problema conxunto de dous especificación. Digamos todos. Fantástico. Imos falar sobre conxuntos de problemas un pouco, pero se ler o conxunto de problemas especificación, que é todo o que precisa facer. Se ler isto antes de vir a clase e sección o martes, vai ser unha boa posición. Podemos percorrer o conxunto de problemas, que é o que imos para facer o final. Nós imos pasar por a lóxica, comproba se todos están na mesma páxina. Eu quero que sexa capaz de saír o martes me sentindo moi cómodo co que cómpre facer para o conxunto de problemas desta semana, e se non fai iso, eu vou feliz ir despois e traballar con vostede. Pero iso é algo que ten que facer, pero eu creo que sería moi intelixente, só para ler o conxunto de problemas especificación de clase o martes, que soa como unha moitos de vostedes fixeron. Vou comezar por unha axenda cada clase entón vostede sabe a onde estamos indo. Isto tamén é útil para persoas que asisten en liña, xa que cada sección é codificación por cores, por iso, se quere vir cara atrás e só asistir a 10 minutos antes que toda a sección de 90 minutos, pode simplemente ir á sección código de cores e ollar para esa parte. Entón, eu tente división las en bo módulos que permiten a ti - se quere volver e revisar, ou outros alumnos que só son ver unha sección para repasar - para atopar a cousa específica que querer prestar atención para e aprender máis sobre. Doce. Normas. Eu son un líder FOP no campus. Non sei se alguén fixo FOP. Alguén facer FOP? Unha persoa fixo FOP. Dúas persoas fixeron FOP. Incrible. Entón FOP é o primeiro ano ao aire libre Programa de Orientación. Tomamos calouros para o bosque e facer das experiencias máis máxicas de súas vidas, correcto? Si Soa sobre a dereita. Entón, eu só quería comezar a nosa primeira sección discutindo algunhas normas á clase e nosa relación porque eu creo que son moi importantes. En primeiro lugar, como os que son a miña sección recibiron e foi discutida en que correo electrónico, eu adoro iso. Esta é a miña parte favorita do ano. Eu estiven tan animado. Estiven aquí durante horas de hoxe. Non deixei este edificio, excepto para ir comer, porque eu amo CS50 sección, amo ensinar, me gusta moito de traballar convosco. Unha das miñas maiores prioridades, se non o meu prioridade número un, non só para esta clase, pero incluíndo a miña outra clases e extraescolares, é apoiar vós e axudar vostedes, e facer o meu mellor para estar seguro de que caras teñen un marabilloso, divertido, produtivo contorno, emocionante experiencia nesta clase. Iso é o que eu estou comprometido. É por iso que eu amo facelo. Ese é o meu número de unha cousa, apoiar vós. Se tes algunha dúbida sobre charla, o conxunto de problemas, sección, vida, mesmo se quere falar vida, sentirse libre para chegar por favor. Ten o número do meu teléfono móbil, ten meu correo dirección, ten a miña GChat. Pode contactar-me en calquera ou todas os que sempre, pero probablemente non vai conseguir a resposta sempre. Intento e volver dentro de 24 horas. A miúdo será dentro 20 minutos ou 24 minutos. Eu debería ter dito que para facela en paralelo. Pero vai ter unha resposta moi rapidamente. Se me texto dunha hora antes do conxunto de problemas é debido, vou calmalo para abaixo e facer exercicios de respiración profunda con vostede, pero se aínda non comezou, probablemente non vai rematar, e Realmente non podo axudar alí fora aínda que eu vou probar o meu mellor. Entón eu vou facer de todo Podo apoia-lo. Por favor, Sinto-se libre para chegar é na sección de novo, en horario de oficina se me ver, ou incluso do lado de fora. Estou feliz por marcar un horario para atender e traballar con problemas con ou pasar por riba de material. Así que é o número un, soporte. Vou facer todo o que eu pode apoia-lo. Número dous, reunión no medio. Polo que eu quere ser, eu son non é omnipotente ou todopoderoso ou onisciente, entón eu non sei todo o tempo se o que estou facendo está quedando transversalmente, a forma que eu estou ensinando a tema axuda a aprender, ou se están confuso sobre un tema, aínda que non levantar a man ou pedirme ou me envíe un correo-e. Ou mesmo se, unha vez máis, están confusos sobre algo sobre o conxunto de problemas. Se non chegar a min, Non podo saber con certeza. Vou facer o meu mellor para a facturación en Vós, asegúrese de que todo é indo ben, intento ensinar as cousas dun xeito que será propicio para a maioría dos os seus estilos de aprendizaxe, pero se hai nada que eu poida facer, me aviso. Ao longo destas liñas, se queres algunha axuda co conxunto de problemas, eu son máis que feliz en axudar co conxunto de problemas. Nós imos facer unha chea de que na dirección da segunda metade desta sección. Pero se aínda non leu o problema define atrás e aínda non asistiu a ruta a través e non asistir os shorts e esperando que eu te ensinar todo o que foi filmado en liña ou que se pode atopar en CS50 estudo, iso non é realmente xusto comigo ou con seus outros compañeiros. Entón, por favor, eu estou máis que feliz en axudar vós, mais vós ten que me coñecer en medio. Temos toneladas de recursos para Está dispoñible na CS50. Eu mencionar algúns deles. Por favor, sacar proveito deles. Se está confuso, eu estou máis que feliz para axudar explicalo las doutro xeito, pero non é xusto que alumnos mostran-se en horas de oficina, non comezou nada, e é Xoves á noite e están esperando o TF para camiñar con eles a través de cada cousa para o conxunto de problemas debido ao mediodía do día seguinte. Ten sentido? Unha vez máis, por favor, nos atopar no medio. E, finalmente, as altas expectativas. Eu vou estar de clasificación todo o mundo que é na miña sección, ou marcando a súa conxuntos de problemas. Non volveron problema definir cero ou un aínda. Estamos moito sobre iso. Levou moito tempo para rematar establecer seccións, e agora podemos empezar a clasificación. Vou leva-los de volta para ti o máis axiña posible. Estes son algúns dos meus orientandos aí. Vou leva-los de volta para ti o máis axiña posible. E para o problema de conxunto de dous, estaremos en programar e imos comezar facelos para ti moi rapidamente tras ti transformalo los dentro Cando comeza o seu conxunto de problemas cara atrás, vostede terá puntuación, como vostede sabe de lectura do currículo - exactitude, proxecto, ámbito e estilo puntuacións. Tamén terá comentarios. Os comentarios son máis importantes que as correas. Eu creo que é seguro dicir que. Puntuacións son só un número dun a cinco. É difícil ler naqueles. É difícil mellorar daqueles. Pero os comentarios serán apuntar específico cousas que fixo ben ou áreas pode mellorar e darlle algúns ideas para o futuro ou alternativa formas de facer as cousas. Entón, por favor, por favor, por favor lea a través dos comentarios. Eu coloque unha morea de tempo en eses comentarios. Por favor, lea con eles e non só desprazar para abaixo para o fondo do PDF, busque a súa puntuación, ou ir en liña e atopar a súa puntuación, e despois pasar por alto os comentarios. Isto non é como está pode ir mellor. Isto non é como está indo para aumentar súa puntuación final, só mirando para as puntuacións. Por favor, mire estes comentarios. E ao longo da liña de grandes expectativas, unha vez máis, como dixen, vostede poden ser pontuadas dun a cinco. Dous, tres, e catro son os gran maioría das contas vai estar recibindo. E fives están realmente raro. Sempre hai cousas o que podemos facer mellor. Cada vez que codificar un programa, non hai sempre algo que me podería ter feito mellor. Entón, en vez de dicir que comeza un período de cinco o tempo en todo e fixo todo perfecto, eu non creo que calquera de nós realmente cremos que nós - ou Por sorte, nós non facemos todo mellorar o tempo. Entón non se preocupe se non recibín cinco. A cinco non mapea a un A, un catro non mapea a un B, tres non non mapa nunha C. Isto non é como as puntuacións traballar. Como David xa dixen moitas veces, en final do semestre as súas puntuacións e entrada de min, o seu TF, reúnense e determinar a clasificación final para ti. Pero, de novo, non é cinco, A, catro, B, et cetera. Entón eu vou ter grandes expectativas para vós. Vou esperar un bo problema conxuntos e eu vou dar o producto como tal. E non vai dicir que é indo para obter un grao peor. Está clasificada en termos de o seu progreso de semana cero cara ao final do curso. E, finalmente, en termos de alta expectativas en clase, encántame cando as persoas participan. Entendo que algunhas persoas se senten máis ou menos cómodo participante. Outras persoas están participando non levantando a man e falar o tempo. Pero nesta clase van ser facendo unha serie de pequenos problemas, unha morea de mini preguntas, e, a continuación, algúns maiores problemas de codificación. Entón, en definitiva traballar estes exercicios fóra cando facelas no seu computador ou en unha folla de papel. Pero eu tamén vou che dar algún tempo antes Alguén sempre ten que responder a algunhas das preguntas que eu pido. Entón por que eu vou darlle un tempo para pensar sobre iso, porque nós imos facer as cousas de socios, ás veces, Vou esperar que todos para ser contratado un pouco. E por falta dun termo mellor, non probablemente será chamada fría, que é o lugar onde todo o mundo vai ter a oportunidade pensar sobre a resposta, e, a continuación, Eu ligo para ti, e, a continuación, vai dicir a resposta. Non hai problema, ou se asustar con iso. Xa fixen iso no pasado e atopamos que é moito máis exitoso, tamén ler a investigación educativa no que a determinar se era ou non un boa táctica. É moi útil, especialmente se dar aos alumnos tempo para pensar sobre o respostas e non sexa los só vir e dicir isto pronto de cara. Pero se non sentirse cómodo responder, eu tamén son moi bo en sentindo que fora, e nós non imos poñelas no lugar, especialmente en a cámara, a pesar de ningún dos está na cámara agora. Polo tanto, estas son as normas que eu teño. Só unha cousa ao longo das liñas de atopar no medio. Vou dar a vostedes unha morea de feedback. Por favor, me dea un feedback ben. Hai un sitio web, sayat.me/cs50. Polo tanto, é un producto honesto. Se queres dar a el durante a sección, Eu recibín un correo electrónico cada vez que isto ocorre. Imos facer unha pausa un pouco, entón eu vou ollar a través do feedback despois. Se ten calquera producto, por favor, deixa-me alí. Se me dar feedback sobre o Q, que é marabilloso, pero este é o guía o que fai ao final. Pero iso será ao final do semestre para Non vou ser capaz de aproveitar calquera que producto e transformalo en ensinar vostedes mellor. Entón, por favor, se ten calquera producto, deixa para min. Amo producto. Back to FOP, temos o producto o tempo. Vostede me pode dar vantaxes, cousas boas, deltas, cousas que podo mellorar. Podes comentar as miñas roupas. Isto non vai ser tan útil, pero é benvidos para comentar calquera e todo. Por favor, por favor, me dea feedback. Eu valoro moito iso e Significa moito para min. Unha norma, divertido. Nós imos ter unha chea de diversión. Espero que neste curso, vai ten unha chea de diversión. Teremos doces na sección. Haberá música. Estaremos espero coñecer un outra algo así, entón eu quero que este sexa un desfrute, experiencia envolvente. Sei que algúns de vós xa durmiron en as conferencias que tivo hoxe máis cedo, por iso espero que non vai ser agora o caso. E se é o caso agora, só non ronco porque iso podería ser trabado na cámara. Doce. Calquera dúbida, comentarios ou preocupacións Antes de pasar calquera cousa temos falou? Grande. Entón, nós estamos indo a ir en matrices primeiro. Isto é como facer un array. Nós xa vimos isto antes. Ten un tipo de datos, ten un nome, e entón tes un tamaño. Ben aquí, eu creo dúas matrices. O primeiro é un conxunto de caracteres, e ten 26 espazos. O segundo é un array de puntuación, e ten tres espazos de tres enteiros. Si? ALUMNO: Son todos estes diapositivas dispoñible en algún lugar para nós? Jason Hirschhorn: Gran pregunta. A pregunta era: son todos Estes diapositivas dispoñibles? Si Todas estas láminas estará dispoñible, e, no futuro, vou envialas a antes sección. Hoxe, con todo, xa que este é o primeiro semana, tivemos un inicio tardío. Por iso, normalmente, vai ter eses diapositivas, pero elas estarán dispoñibles en liña e Vou envialas a ti logo da clase. Calquera outras preguntas? Entón, de novo, as matrices son caixas, por falta de unha palabra mellor, que posúan múltiple elementos dun tipo de datos, e eles están á beira do outro na memoria. E así, unha vez máis, esta é a forma como pode facer dous tipos de matrices. Entón, despois de que fixo a súa matriz que a primeira liña - puntuación int, soporte tres, preto do soporte - vostede quere arrincar. Quere poñer algúns valores alí. E é así que poñer algúns valores en alí, basta escoller o indice e escribir o número. Imos aproveitar esta na tarxeta. Todos poden ver? Todo o mundo pode ver. Doce. Entón iso vai ser o meu array chamado Scores. Como podes ver, é o tamaño tres. Hai tres caixas de alí. Cada un pode caber o que tipo de tipo de datos? ALUMNO: Integer. Jason Hirschhorn: Un enteiro nun presente. Nós escribir decenas int, ea primeira palabra é o tipo de datos que ir nas caixas desa matriz. Entón, podo encaixar tres. Por que eu teño cero ata alí na tarxeta? Por que dicir puntuación de cero é igual a 1? Lembre me do seu nome. ALUMNO: Kurt. Jason Hirschhorn: Kurt. ESTUDANTE: si. Jason Hirschhorn: Por que? ALUMNO: Por o primeiro índice é cero, imos comezar a partir de cero. Jason Hirschhorn: Entón, imos comezar a partir de cero. Isto é exactamente correcto. Esta é a parte confusa e viaxe vontade ti, especialmente cando se está intentando percorrer matrices, o que imos facer de aquí a pouco. Comezamos a partir de cero. Entón, se eu queira referirse ao primeiro caixa, non é unha caixa. Desafortunadamente, é caixa cero. A segunda é unha caixa, e no presente caso, o terceiro é unha caixa de dúas. E sobre o cadro tres? Onde caixa tres é? Ou se quero facer contas, soporte tres, franxa estreita, o que é iso? Entón, vostede dixo que o personaxe nulo. Outros pensamentos? Qué é o soporte de marcar tres soporte? ALUMNO: realmente non existe porque só definir como puntuación, soporte de tres. Jason Hirschhorn: Entón vostede di realmente non existe. Nalgúns casos, cando estamos lidando con cordas, xeralmente nós imos poñer un valor nulo personaxe no final. Nós imos chegar a iso nun segundo. Pero, neste caso, non hai hai unha terceira caixa aquí. Así, a última caixa en calquera matriz tamaño é menos 1. Entón, se temos unha matriz de tamaño n, a primeira caixa está en cero, a última é en n menos 1. E neste caso, non existe. Hai algo aquí en memoria, pero non é o noso. Non el propio. Non pedimos para el. Polo tanto, se tentar acceder a ela, o que imos facer algo, estamos indo probablemente para entrar en apuros. Neste caso, estou inicializar meu matriz con tres variables. Estamos poñendo un en caixa cero, un dous no cadro unha, e tres no cadro dous. Alguén ten algunha dúbida sobre arrincar un array? Entón nós fomos ao longo deste momento. Scores, soporte de tres, preto do soporte, que non existe. Estamos a cero indexadas en ciencia da computación, entón comezamos a contar desde cero. O último cadro dispoñible para nós, é a terceira caixa, pero o cadro chámase número dous. Alí en baixo, esta é unha alternativa xeito de arrincar arrays. Así, no canto de crear unha matriz sobre liña, enche a primeira caixa e logo a segunda caixa, a continuación, a terceira caixa, pode facer todo nunha soa liña. Entón, nesa liña, ambas matrices. Isto xera a mesma matriz exacta como o que creamos aquí, pero só fai iso nunha liña. Agora creamos a nosa matriz. Normalmente, unha vez que crear unha matriz, ten quero facer algo con el, se que é enche-lo ou facer as cousas de fóra e imprimir-los na pantalla. Neste caso, estamos pasando pola nosa conxunto puntuacións, que inicializar en a primeira liña aquí en gris. E, a continuación, na segunda liña, comezan iteración través da matriz. Alguén ten algunha dúbida sobre a estrutura dun loop? Entón que é o loop for. Temos a nosa condición de inicio, e logo, nosa condición final, e entón nós iteración, i, cada loop. E nas claves no presente para loop, o que pasa se eu fose para executar este programa? Alguén me pode dicir o que teriamos? [? Matu? ?] Matu: Imprimir todos os resultados en cada liña. Sería imprimir cada puntuación nunha liña separada. Jason Hirschhorn: O que é exactamente sería imprimir? ALUMNO: Sería imprimir un, despois dous, despois tres. Jason Hirschhorn: Exactamente. Ía imprimir un, despois dous, despois tres, cada un en liñas separadas, xa que imos a través da matriz e vai ver que a segunda, o printf declaración, puntuacións i. Así, na primeira rolda a través de noso para loop, i é igual a cero, o que significa que estamos quedando o valor en puntuación de cero - que, se volver para noso diagrama, é un - e recheo en - Oh, el di que c. Iso debe ser% d. Vou corrixir isto en algo cando Eu entrego iso para vós. Pero nós estamos presentando un enteiro polo que debe ser% d aquí, non% c. Que é% c para? ESTUDANTE: Carácter. Jason Hirschhorn: Carácter, exactamente. Qué é o outro? Se non queres facer d% a un enteiro, o que máis pode facer? ALUMNO: i. Jason Hirschhorn:% i, exactamente. Entón, calquera dúbida sobre a iteración a través da matriz? Entón o que ocorre se non se fai iso? No canto de facer i é inferior a tres, nos i é menos que ou igual a tres. Que pasa cando executar este código? Si, Annie? ALUMNO: Eles están indo para imprimir cousas estrañas na cuarta liña. Jason Hirschhorn: Entón dixo, é vai imprimir cousas estrañas no cuarta liña? Alguén ten unha resposta á súa pregunta? Así, as posibilidades son de que, cando chegamos ao - Entón, na cuarta rolda a través da nosa para loop, así como penso, Annie, será puntuacións franxa tres, que que xa descubriu que non existe, e nós imos tratar e acceder tanto, imprimir lo fóra, use-o de algunha maneira. Así, o ordenador probablemente ir con rabia de nós. Está absolutamente seguro. Pode pechar o programa completo. Pode imprimir algo moi raro. Non pode dicir con certeza. As probabilidades son de que probablemente vai estar bravo con ti e só saír inmediatamente. Pero este é un erro común que vai ter onde está só fóra por un de fin, e este é un problema que vai praga que en toda a súa codificación. Un xeito que máis me gusta de facer é só nun cadro branco, pasar por cada iteración do lazo na man ou no papel para ver o que está pasando, e entón xeralmente entenden, oh wait, eu non debería ir á menor ou igual a tres. Eu debería ter parado a dous, que se o que pasa se a súa condición é menos que tres. Calquera dúbida tan lonxe? Doce. Entón, todos vostedes teñen os seus ordenadores aberto. Nós imos darlle 2-3 minutos para escribir un programa que crea un array cos enteiros dunha por cinco anos e, a continuación, imprime cada enteiro nunha nova liña. E se tes algunha dúbida, levante a man. Estou feliz de pasar por aquí. Como dixen, imos dar tres minutos a escribir isto. Están todos ben, se eu fose a un nova ventá e pechar isto? Sinto moito se non tivo a oportunidade para rematar, pero imos facelo xuntos agora. Entón, na pantalla, eu # include cs50.h, # include stdio.h. Alguén me pode dicir o que estas dúas liñas fan? Michael? ALUMNO: Inclúense as bibliotecas CS50 que fixo e que ten Steve gardados para que poida usar para facer a súa vida máis fácil. Jason Hirschhorn: Entón dixo que eles incluír as librerías, unha que CS50 feita, cs50.h, e un que é só estándar, ven con o paquete C, stdio.h. O que quere dicir incluír as bibliotecas, aínda que? Pode ser un pouco máis específico? ALUMNO: El fai que se pode empregar certas palabras de código para unha funcionando pasar sen ter que ir e facer a función c si mesmo. Jason Hirschhorn: Pode darme un exemplo? ESTUDANTE: Como printf é aquel que pode usar. Jason Hirschhorn: printf. Entón dixo que printf é un destes funcións en vez de ter que printf escribir no seu propio país, printf é incluído na verdade en stdio.h, para que só pode usalo e asumir que vai traballar. En stdio.h, se abriu o ficheiro, sería incluír como printf obras, todo o código para printf? Por que está bailando a cabeza? ALUMNO: Por o ficheiro de cabeceira só inclúe a declaración da función. Jason Hirschhorn: Exactamente. O ficheiro de cabeceira só inclúe declaración da función. Entón, basicamente, cando compilar tanto, bateu Fai a conta, que imos facer nun segundo, o compilador sabe que se usa printf, printf existe. Vai ser definido en algún lugar. Non é un problema para vostede usalo. E entón, máis tarde, que incluirá a ceros e uns que realmente conteñen printf de implantación e fundín-los co seu código. Como asegurarse de que inclúe o uns e ceros para, por exemplo, conseguir corda? ESTUDANTE: Obter corda está cs50.h. Jason Hirschhorn: Correcto. Entón, que di estar corda existe, declaración da función. Pero entón os ceros e uns, o binario arquivo que realmente inclúe a implantación de corda get? Como asegurarse de que vai co seu programa? ALUMNO: Pase o vinculador argumento de liña de comandos. Jason Hirschhorn: Pase o ligador no argumento da liña de comandos. Como fai iso? ALUMNO: É a l-liña no bumbum Jason Hirschhorn: Exactamente. Dis-l CS50, non? Isto inclúe os uns e ceros. ALUMNO: Pero Facer fai que, para ti, non? Jason Hirschhorn: Exactamente. Faino por ti, pero, finalmente, Non terá que facer, ou vai ter que facer unha facer no seu propio país, de xeito que é un bo para lembrar. Se estaba indo a usar un destes outras bibliotecas, non só ten para escribir # include e logo á biblioteca. Tamén cómpre vincula-lo dentro E esas dúas cousas son diferentes. L-CS50 é diferente de # include cs50.h. Entón temos int main baleiro rizados claves, e agora imos ao código dentro principal. A primeira liña que eu teño aquí é un comentario que di, crear unha matriz con ints dun a cinco. ¿Que é unha boa palabra para describir o que eu teño agora na pantalla, só comentarios dentro principal? O que chamamos iso? ALUMNO: Pseudocódigo. Jason Hirschhorn: Pseudocódigo. Grazas, Jeffrey. Isto é exactamente correcto. Pseudocódigo. Vostedes viron pseudocódigo antes? Levante a man se xa usou pseudocódigo antes de definir un problema. Aproximadamente a metade de vós. Recomendo o uso pseudocódigo para romper os problemas en menor, máis fácil de morder anacos. Por outra banda, se fai o pseudocódigo, ten ter os seus comentarios xa amplamente embutido, así que non ten que volver e tentar descubrir o que estaba facendo. Entón, alguén me pode dar esa primeira liña para crear un array con ints un a cinco anos? Vostede? ALUMNO: Int e logo, pode chamar calquera número, e despois cadrado soporte de cinco anos. Jason Hirschhorn: números para int, corchete cinco. ALUMNO: Igual, e entón chaves. Jason Hirschhorn: Igual, chaves. ALUMNO: Un, dous, tres, catro. Jason Hirschhorn: Un, dous, tres, catro, cinco. ALUMNO: E entón claves e logo, punto e coma. Jason Hirschhorn: e Curly claves e punto e coma. Excelente. Imprimir cada int nunha nova liña. Pódese dar me que o código, por favor? [? Matu? ?] Dalle. ESTUDANTE: For ( Jason Hirschhorn: For ( ALUMNO: int i = 0 Jason Hirschhorn: int i = 0 ALUMNO: Punto e coma i inferior a cinco. Jason Hirschhorn: Punto e coma, i inferior a 5. ALUMNO: Punto e coma, i + +. Jason Hirschhorn: Punto e coma, i + +. ALUMNO: parénteses pechados, logo chave de apertura. Jason Hirschhorn: parénteses pechados e dúas chaves. Dentro das claves? ALUMNO: E entón printf "% d / n" Jason Hirschhorn: Sentímolo, espera. Printf "% d / n, multimedia pechada. ALUMNO: E entón cita pechado, comas, conta, soporte i. Jason Hirschhorn: Comma, conta, soporte i. ESTUDANTE: Sentímolo, números soporte i. Jason Hirschhorn: Números, soporte de i. ALUMNO: Sentímolo. E, a continuación, pechado entre parénteses, punto e coma. Jason Hirschhorn: Closed parénteses, o punto e coma. Vou gardar ese. Imos facer a conta. E como fago para executar o número? ALUMNO: barra invertida. ALUMNO: Dot barra - Jason Hirschhorn:. / Contar, exactamente. Grazas. . / Contar. Un, dous, tres, catro, cinco en novas liñas. Parece que funcionou. Si, Noah? ALUMNO: Tamén pode facer igual ou igual a catro, como i é inferior a ou igual a catro? Hai algunha vantaxe de facer menos de cinco anos, ou só unha forma diferente de gravala-lo? Jason Hirschhorn: Entón a cuestión é vostede podería ter feito i é inferior ou igual a catro, no canto de i é menor que cinco. Tería que traballar a mesma cousa? ALUMNO: Debería. Jason Hirschhorn: si. É totalmente tería funcionan do mesmo xeito. Estilisticamente, é xeralmente menor que, e podes ver nun segundo cando nós cordas, pode usar algo chamada strlen, que xa viu antes, para obter a lonxitude da cadea. E non pode facer menos que o igual strlen. Podería facer menos que ou igual strlen menos un. Entón é só máis agradable para facer menos que strlen. Si? ALUMNO: E na real quizzes, facer debemos proporcionar comentarios sobre o noso código tamén? Jason Hirschhorn: A cuestión estaba en probas, non se Ten que proporcionar comentarios? Entón, imos falar máis sobre probas cando eles veñen para arriba, pero en xeral, un bo regra de ouro é sempre que estea escribir código, proporcionar comentarios. Se obter o código mal, pero o comentar dereito, pode obter algúns crédito tanto de min se eu estaba clasificación vostede nun conxunto de problemas ou nun quiz. Entón, os comentarios son sempre bo para ofrecer. Doce. Conde. Excelente traballo. Imos seguir adiante. Strings. Strings. Nós xa vimos isto antes na charla. Isto fundiu miña mente cando eu atopou por primeira vez iso. Probablemente non explotar de ninguén presente aquí, pero iso é OK. Cadeas son arrays de caracteres, e eles acaban con, como dixen antes, o terminador nulo, o que é este personaxe / 0. Se imos trazar unha corda no consello, imos deseña-lo aquí. Entón, canto tempo é esa corda? Sentímolo. Canto tempo dura esta cadea? Estudante: [inaudível]. Jason Hirschhorn: Catro? Por que é catro? ALUMNO: Porque o quinto lugar é para o carácter nulo. Jason Hirschhorn: Entón o quinto lugar é para o carácter nulo. Entón, se eu fose para executar strlen en iso, el me daría catro. Corrixir. E a matriz, con todo, se eu fose arrincar esa matriz, cantos espazos eu tería que pedir? ALUMNO: Five. Jason Hirschhorn: Five. Eu tería que preguntar a cinco, pero eu podo só poñer catro personaxes aquí porque eu teño poñer isto nulo terminador no final. Entón imos escribir en "ohai" e poñer o terminador nulo ao final. Imos dicir que esta é unha cadea s é igual a este. Cal é a franxa de cero s? s soporte cero, Annie? ALUMNO: O. Jason Hirschhorn: O, exactamente. s un soporte? s soporte de cinco anos? s soporte de cinco anos? ALUMNO: Non existe. Jason Hirschhorn: Non existe. Exactamente. Legal. Calquera dúbida sobre a comprensión cadeas como arrays de caracteres? OK, entón. Máis un programa para vós. Escribe un programa que pide ao usuario para unha cadea e entón móstrase cada personaxe nunha nova liña. Entón, imos ter tres minutos para escribir Neste programa, e despois imos codifica-lo como un grupo. Sentímolo. Ten que ver iso? ALUMNO: Non Jason Hirschhorn: Aceptar. Imos dar un minuto para este código, ou polo menos comezar a facelo. Así, pode seguir traballando, pero eu vou para comezar a pasar por iso. Así como antes, eu teño na pantalla # Include cs50.h, # include stdio.h. int void main. Dentro claves do principal, eu teño dous comentarios, pseudocódigo. Unha delas é pedir unha cadea do usuario. A segunda é imprimir cada personaxe nunha nova liña. Entón, Anna, pode dar-me preguntar para unha cadea de usuario? ESTUDANTE: printf. Jason Hirschhorn: printf? ESTUDANTE: si. ( Jason Hirschhorn: ( ALUMNO: "dáme unha corda. Jason Hirschhorn: "dar me un str - oops - cadea. ALUMNO: / n "), punto e coma. Jason Hirschhorn: Acabar coa cadea, parénteses pechados, punto e coma. ESTUDANTE: si. E entón a seguinte liña, corda s = get cadea. Jason Hirschhorn: cadea s = get cadea. ESTUDANTE: si. E, a continuación, () Jason Hirschhorn: () ALUMNO: Punto e vírgula. Jason Hirschhorn: Punto e vírgula. Fantástico. Entón, eu vou ir unha corda e Vou gardalo en que? Cal é a variable chamada que creou? ESTUDANTE: String s. Jason Hirschhorn: A variable chámase s. É tipo cadea. Exactamente. A seguinte cousa que queremos é imprimir cada personaxe nunha nova liña. Quen me pode dar ese código? [Inaudível]? Pode dar isto para min? ALUMNO: Por suposto. Jason Hirschhorn: Imos facelo. E moito. Eu non me gusta de repetir o que di por que está facendo as cousas ben, pero eu ten que repetir de xeito que cando eles transcribir iso, poden obter toda a saída de texto na transcricións. Entón podes só seguir falando. Desafortunadamente, non teño dicir sobre ti. Sinto moito, pero - ALUMNO: Isto é bo. Para int i = 0 Jason Hirschhorn: Para int i = 0 ALUMNO: Eu menos - Jason Hirschhorn: Punto e vírgula. ALUMNO: Antes diso, podemos poñer unha variable para obter int lonxitude do nome? Jason Hirschhorn: Oh, non quero poñer o punto e vírgula? Aceptar. Entón o que quere facer despois de cero? ALUMNO: Eu quero comezar o lonxitude da corda de s e establecer que unha variable? Jason Hirschhorn: OK, Entón, como fago isto? ALUMNO: Entón fai lonxitude int = Jason Hirschhorn: Int length = ALUMNO: S-T-R-L-E-N. Jason Hirschhorn: S-T-R-L-E-N - ALUMNO: É s. Corchetes. Jason Hirschhorn: (s). ALUMNO: E entón eu creo que ten que poñer un punto e coma entre os dous ints. Jason Hirschhorn: Un punto e coma tras a cero? ESTUDANTE: Yeah. A continuación, coloque un punto e coma despois diso, e vostede di, i menos longo. i menos de lonxitude, que é a variable. ALUMNO: E logo punto e coma. Jason Hirschhorn: Punto e vírgula. ALUMNO: i + +. Jason Hirschhorn: i + +. Non é o noso loop for. OK, dentro do loop for. ALUMNO: E despois facer printf. Jason Hirschhorn: printf. ALUMNO: Soportes. Jason Hirschhorn: entre parénteses, comiñas. ALUMNO: Parénteses, multimedia,% c / n. Jason Hirschhorn:% c, Aceptar. ALUMNO: / n. Jason Hirschhorn: / n. ALUMNO: citas pechado. Jason Hirschhorn: citas pechado. ALUMNO: coma. Jason Hirschhorn: coma. ALUMNO: S. Jason Hirschhorn: S. ALUMNO: bracket i. Jason Hirschhorn: bracket i. ALUMNO: E parénteses, a continuación, pechado. Jason Hirschhorn: parénteses pechado. ALUMNO: E logo punto e coma. Jason Hirschhorn: Punto e vírgula. Fantástico. Entón, imos gardar esta. Fai deletrear. Oh boy. Eu teño un par de erros. Primeiro erro na liña 11, el di: Espérase expresión, e está dando me un erro que o segundo int, hai o erro. Hai algún erro en torno de alí. Alguén sabe o erro que é? Kurt? ALUMNO: Coido que debería ser unha coma e non un punto e coma. Jason Hirschhorn: OK, comas en vez de un punto e coma. Así é que todo o que necesitamos para corrixir? ALUMNO: Non Jason Hirschhorn: Qué máis necesitamos fixar? ALUMNO: Temos que incluír string.h. Jason Hirschhorn: Include string.h. Onde é que eu teño incluír isto? ALUMNO: O mesmo lugar que está incluíndo as outras cousas, non tras incluír stdio.h. Jason Hirschhorn: Imos ver se isto funciona primeiro porque, xeralmente, máis me gusta para corrixir unha cousa primeiro, e despois realizar , E, a continuación, ver os erros que temos. Entón, nós estamos indo a limpar o terminal co control n, imos facer facer feitizo. Así, outro erro na liña 11. Espérase comas. E eu aínda estou a recibir erros nesta liña. Por iso, non me deu un erro dicindo que non entende o que é strlen, pero está me dando erros neste liña, o que máis está mal? Mark? Marcus. ALUMNO: Ten que eliminar a segunda declaración int? Jason Hirschhorn: Eliminar o segundo int. Imos tentar iso. Agora limpar o terminal. Fai deletrear. Erro. Implicitamente declarando biblioteca función strlen. Entón, agora vemos este erro. O que necesitamos para incluír? ALUMNO: STRING.H. Jason Hirschhorn: Include string.h, Imos facer # include string.h na parte superior da pantalla. Imos gardar, faga deletrear. Agora compilado. Entón, de novo, as cousas que precisaba Teña en conta que a liña 12 no noso loop para cando estamos a súa creación, int i = 0, lonxitude = strlen (s). Esta é unha estratexia fantástico. O estilo deste é grande, o proxecto deste é grande. Podemos ir a esas razóns máis tarde, pero deste xeito só precisa chamar strlen unha vez, no canto de cada xa que executa a través do loop. Con todo, ten que usar unha coma alí e non precisa de novo int. Se está declarando ambos variables en conxunto, ten Non precisa de novo int. E entón, se está indo a usar strlen, que é outra biblioteca función non incluído no stdio.h ou cs50.h, facer -Se de incluir string.h. Kurt? ALUMNO: Entón, se non ten dicir o tipo de lonxitude é, iso significa que ten que ser un int? Non pode ter dous diferentes tipo alí? Jason Hirschhorn: Entón, podería ten dous tipos diferentes. A lonxitude é un int aquí, con todo. A lonxitude é un int porque é coma e logo o mesmo. ALUMNO: Entón, el asume que está a suceder a ser o mesmo que o primeiro? Jason Hirschhorn: Exactamente. Non imos facer iso agora, pero pode incluír dúas variables sobre a mesma liña usando un tipo de datos. Entón, int x, y crearía dúas variables. Así, int x, y, se facelo, dá me unha variable x e y non utilizado por non usalos. Entón, antes de poñer en branco é só un truco de fantasía, se non usar algo, a usalo. Pero, como ve, eu creo x e y na mesma liña, con comas. É a creación de dous enteiros alí mesmo. Entón, si, totalmente posible crear dúas cousas na mesma liña separadas por comas. Imos nos librar dos que, con todo. Polo tanto, non hai maxia. Grazas a vós para codifica-lo para nós. Imos facelo unha vez, executa-o. Déame unha cadea. [Inaudível], fixo máis do mesmo. Cal é a corda? ALUMNO: Olá Jason Hirschhorn: Olá H-E-L-L-O, cada personaxe nunha liña. Parece gran. Imos executa-lo de novo. Sempre vai comprobar para os casos de canto. ¿Que é un bo caso para comprobar canto? ALUMNO: Un número? Jason Hirschhorn: Un número. Entón, eu vou poñer nun, e imprime un. Non está pedindo cartas, de xeito parece que as cifras de traballo. Bo caso canto para comprobar. ¿Que é un bo recuncho caso para comprobar? ALUMNO: A secuencia en branco. Jason Hirschhorn: Hm? ESTUDANTE: Como unha cadea baleira. Jason Hirschhorn: cadea baleira. Entón, non imos poñer en calquera cousa. E o que é impreso? ALUMNO: Nada. Jason Hirschhorn: Nada. Parece que funciona. Vostede podería tentar máis casos de canto, pero en xeral, os números, un de datos é diferente grande para probar, así non é nada. Nada, cero, negativos son sempre grandes cousas para intentar cousas que Debe proba, as cousas seguramente imos probar para e check 50 vai probar. Calquera dúbida sobre spell.c? OK, imos cabeza cara atrás. Eu teño máis dun programa para vostedes escriben. Chámase students.c. Este é un programa que pide ao usuario para cinco nomes, así que elixe ao azar e imprime un dos nomes. Este programa é un pouco máis parte do que os dous últimos que escribiu, Entón, por que non imos tardar cinco minutos para codifica-lo individualmente, e despois imos codifica-lo como un grupo. Este programa tamén implica algunhas cousas pode non ter visto antes, entón se Ten unha pregunta sobre como facer Fago isto, levante a man. Vou vir e sinala-lo na dirección correcta. Pero nós tamén estamos a facer iso porque esta vai ser unha boa forma de introducir algunhas temas que son complicadas. Así funciona, non? ESTUDANTE: Yeah. Jason Hirschhorn: Sempre que une nun conxunto de problemas, hai moitas formas de facer , Pero algúns son máis elegantes do que os outros. Imos mergullo dentro # Include cs50.h. # Include stdio.h. void main int, chaves. Dentro das claves, Eu teño dous comentarios. A primeira é, pregunta ó usuario por cinco nomes. O segundo é, escoller aleatoriamente e imprimir un dos nomes. Entón imos facer o primeiro, pregunta o usuario durante cinco nomes. Quen pediu o usuario para cinco nomes e me pode dicir como facelo? Só dúas persoas fixeron a primeira parte. Tres persoas fixeron a primeira parte. Catro, cinco. Ton, como fai iso? ALUMNO: Podería declarar unha cadea e logo, nome, franxa cinco. Jason Hirschhorn: cadea Nome Clave cinco. Entón o que é esta liña facendo, name cadea soporte de cinco? ALUMNO: Vostede ía declarar unha matriz de cadeas. Jason Hirschhorn: Este é unha matriz de cadeas. Cantas cordas van para caber aquí? ALUMNO: Five. Jason Hirschhorn: Five. Excelente. Imos chamalo de nomes por estamos indo a obter varios. OK, o seguinte? ALUMNO: E entón ten un loop - Jason Hirschhorn: Para loop. ALUMNO: - para i = 0. Jason Hirschhorn: For (int i = 0. ALUMNO: Punto e vírgula. Jason Hirschhorn: Punto e vírgula. ALUMNO: Eu inferior a cinco. Jason Hirschhorn: Eu inferior a cinco. ALUMNO: Punto e vírgula. Jason Hirschhorn: Punto e vírgula. ALUMNO: i + +. Jason Hirschhorn: i + +. ALUMNO: E parénteses, a continuación, pechado. Jason Hirschhorn: parénteses pechados, e logo, algunhas claves. Dentro das claves? ALUMNO: E entón printf. Jason Hirschhorn: printf. ALUMNO: parénteses abertas, name% d. Jason Hirschhorn: Sentímolo? ALUMNO: Nome. Jason Hirschhorn: Nome. ALUMNO: E entón o espazo, e logo,% d. Jason Hirschhorn: Nome, espazo,% d. ALUMNO: E entón / n, logo pechado. Jason Hirschhorn: nome Entón, espazo, % D / n, parénteses pechados. ALUMNO: Comma, i + 1. Sinto moito. Cita pechado, e logo, coma, i +1. Jason Hirschhorn: Closed cita, coma, i +1. ESTUDANTE: si. E entón a seguinte liña - Jason Hirschhorn: i + 1. ESTUDANTE: si. E entón o seguinte foto son os nomes soporte i. Jason Hirschhorn: Seguinte liña son os nomes soporte i. ALUMNO: = get cadea. Jason Hirschhorn: = Get - capital de G-E-T - cadea. Oops, desculpe. ALUMNO: Open, parénteses pechados e despois - Jason Hirschhorn: aberto, pechado paréntese. ALUMNO: Punto e vírgula. Jason Hirschhorn: Punto e vírgula. OK, entón arrincar a matriz de cordas, nomes e, a continuación, pasar por unha loop for, e cinco veces imprimir algúns pedir ao usuario e, a continuación, almacenar cinco cordas. Alguén ten algunha axustes a iso? Tom, eu creo que todo o mundo de acordo con vostede. Parece moi bo. Aceptar. Por que fixo i +1, aínda? ALUMNO: Quero dicir, non ten ser, pero i 1 de xeito que sexa un nome para nomear cinco. En caso contrario, sería nome cero a nomear catro. Jason Hirschhorn: Entón fixo i +1 porque senón tería impresos de cero a catro, porque é así que os ordenadores pensan, pero os seres humanos realmente non ler así. Isto é outra cousa vai atopar. Ás veces, cando imprimir algo ao usuario, vai querer facelo un pouco máis fermosa, e facer i 1, neste caso, é un forma a facelo máis bonito. Eu tamén vexo cinco dúas veces, cadea nome é cinco, i é inferior a cinco. Sei onde ten cinco. Ten iso de min dicindo Ten cinco nomes. Pero se quere facer o código nun pouco máis robusto, algo que nos podería facer é aquí, do lado de fóra de int, poderíamos facer algo como isto, # Establece, e que nós poderíamos facer NOMES 5. Entón, basicamente, onde queira que eu escriba de capital N, A Capital, o capital M, E maiúscula, S en maiúscula, esa secuencia, que substituirá 5, en que, co código. Ou imos só chamalo - imos basta chamalo NUMBER. Entón, eu estou definindo as tapas NÚMERO ser 5. Entón, agora, cada vez que eu teño o número 5, I pode substituílo con todos os números caps. E agora, se eu queira cambiar o número de nomes, o único que cómpre facer é esta liña, a liña de catro, onde eu teño # Establece o número 5, cambiar isto a 10, ou que cambie a 4. Cando o seu código queda maior, non está vai lembrar de ti todas as partes poñer cantos nomes que quería, e en Para que non perda un, este é unha boa forma de facelo, para atopar algo alí enriba e despois é só usar esta frase por todo o seu código. Marcus? ALUMNO: É iso estilisticamente preferido de establecer globalmente a constantes n? Jason Hirschhorn: Así é que estilisticamente preferido de todo o mundo definindo a n constante? Entón está dicindo que podería facer, int numero = 5? ALUMNO: Será que eles teñen consoantes en C ou non? Jason Hirschhorn: Ou const - en iguais. Entón está dicindo só unha variable global? ESTUDANTE: Yeah. Jason Hirschhorn: Entón, estilisticamente, non hai, necesariamente, un dereito responder, pero as dúas cousas son mellores que só xogando estes aleatoria números en todo o seu código. Nós os chamamos números máxicos. Cando eu ollar para o seu código ou cando ninguén está lendo isto, Non quero só estes números aleatorios que non ten sentido. Ata o número 26, que é xeralmente o número de letras do alfabeto, é mellor para definir alfabeto enriba e gardar o número 26 en que cadea, se iso ten sentido. Ou nun conxunto de problemas, en vez de - unha vez máis, nós non falamos sobre iso en tempo, pero en vez de simplemente xoga en todas as partes a 25 ou 10, pode gardar o número 25 como cuarto ou 10 como DIME, e iso fai máis doado para quen está lendo o seu código entender por que escolleu ese número. E tamén para vostede, se quere actualizar o código, convértese en algo máis robusto. Si? ALUMNO: É este código tamén estar dispoñible para nós despois? Jason Hirschhorn: Todos estes códigos que escribimos xuntos son será enviado a vostede rapaces e dispoñibles. Si Entón, pregunta ao usuario cinco nomes. Aleatoriamente elixir e imprimir un dos nomes. Quen fixo esta liña? Esta é a liña máis complicada aquí. Sentímolo, Tom Vostede fixo un bo traballo, pero este é un pouco máis complicado. Marcus, vai adiante. ALUMNO: Ben, primeiro, vai Debe incluír stdlib.h e time.h. Jason Hirschhorn: Entón está dicindo que a na parte superior, incluír dúas bibliotecas. Quere me incluír S-T-D-L-I-B dot H, Biblioteca defecto, e o foi o outro? ALUMNO: Time.h. Jason Hirschhorn: # include time.h. Polo tanto, estas son dúas bibliotecas. Presumo que agora imos estar usando funcións que están contidas nestas dous, e é por iso que necesitas para inclui-los? ALUMNO: Entón, primeiro ten vai querer escribir srand. Jason Hirschhorn: Srand. ALUMNO: (equipo (0) Jason Hirschhorn: Sentímolo. Srand (equipo ( ALUMNO: 0. Jason Hirschhorn: 0. ALUMNO :)), punto e coma. Jason Hirschhorn: Outro paréntese pechada? Punto e coma. Vou só substituír o nulo con NULL. Que vai facer o mesmo, pero Xeralmente, verás NULL, que imos falar sobre iso liña en un segundo. ALUMNO: Estilisticamente mellor? Jason Hirschhorn: Xeralmente, as persoas NULL certo, pero mesmo. ALUMNO: E entón o nome int. Jason Hirschhorn: nome Int ALUMNO: = Jason Hirschhorn: = ALUMNO: Rand. Jason Hirschhorn: Rand. ESTUDANTE: () Jason Hirschhorn: () ALUMNO: número módulo. Jason Hirschhorn: Cal é o modulo? O personaxe? O personaxe por cento? ALUMNO: carácter cento. Modulo número que marcou enriba. Jason Hirschhorn: Modulo NUMBER. ALUMNO: E logo punto e coma. Jason Hirschhorn: Punto e vírgula. ALUMNO: E entón nova liña, printf. Jason Hirschhorn: printf. ALUMNO: ( Jason Hirschhorn: ( ALUMNO: " Jason Hirschhorn: " ALUMNO:% s / n Jason Hirschhorn:% s / n ALUMNO: " Jason Hirschhorn:% s / n " ALUMNO: Comma, os nomes de espazo. Jason Hirschhorn: Espazo - ALUMNO: Oh, eu creo, o que que chamamos aquí? Jason Hirschhorn: Nós o chamamos nomes. ALUMNO: soporte Open, nome. Jason Hirschhorn: Abre o soporte, o nome. ALUMNO: soporte pechado. Jason Hirschhorn: soporte pechado. ALUMNO :) Jason Hirschhorn :) ALUMNO: Punto e vírgula. Jason Hirschhorn: Punto e vírgula. OK, imos gardar. Imos facer este código. Alumnos. Imos realizar este código. Alumnos. Non / alumno. . / Alumnos. Nome. Diremos David. Nome dous, RJ. Nome de tres, Rob. Nome catro, Lucas. Nome de cinco, Joseph. E entón el imprime Joseph novo. Entón deixe-me executar de novo. Deixe-me facer os mesmos nomes. David, RJ, Rob, Lucas, Joseph. E el me deu a David neste momento. Entón eu fixen o mesmo, pero deu me unha cousa distinta, e iso é porque, claro, estamos pedindo para un nome aleatorio. Entón eu creo que, a partir de enriba de min vagando arredor da sala, que a maioría das persoas probablemente ten a primeira parte dereita, creación desa matriz e, a continuación, quedando todos os nomes. Estou falando sobre as liñas 10 a 16. Pero as liñas 18 a 21 son, probabelmente, algunhas cousas que non teña visto antes, entón imos pasar por aqueles. Esta liña, srand tempo NULL é esencialmente - Sentímolo, imos saltar abaixo unha liña, rand (). Isto dálle un número ao chou, un número enteiro aleatorio. E se bater home rand, que unha morea de que fixo - M-A-N espazo R-A-N-D - no terminal como este, M-A-N espazo R-A-N-D, prema Intro. Vostede viría ata o manual e sería capaz de ler que o rand saídas de comandos Nume bytes pseudo-aleatorios Tras a sementeira do número aleatorio xerador de unha vez. Entón, iso é unha descrición. Iso é o rand fai, dá un número aleatorio cando chamar esa función. Desafortunadamente, non é realmente aleatoria porque se só chamar aleatoria sen estar algunhas sementes, algúns punto de partida, el sempre vai escoller a mesma e que utiliza unha fórmula para determinar o próximo. Entón, se chamar rand, el só vai darlle o mesmo. Será moi previsible. En realidade, non será aleatoria. Entón o que necesitamos facer, por Marcus instrucións para min, eran rand sementes con outra cousa, que é o que a función srand fai. Sementa rand con algo un pouco máis aleatoria que a mesma cousa, e está sementando-lo co tempo NULL, que é, só por convención, o actual o tempo en segundos. Entón está asumindo que todo o mundo non é vai executar o código no exacto mesmo segundo, polo que é unha aposta segura que tempo NULL será diferente cada vez que este código é executado. Aposta segura que así, srand vontade rand sementes con algo diferente cada vez. Entón, por convención, cando quere un número aleatorio, escribimos esta liña, srand NULL tempo, para dar unha gran semente máis aleatoria, e despois corremos rand, que nos dá un número aleatorio. Si? ALUMNO: Pode dicir o que quere dicir con semente? Jason Hirschhorn: Semente de in - así rand vai escoller un número e vai utilizar algún fórmula para chegar alí. Por iso, vai comezar con algo e, a continuación, transformalo en algo baseado fóra desta fórmula. Se sempre darlle o mesmo, el sempre vai transformalo no mesmo. Así que o primeiro que dar é a semente. Entón quere dar algo diferente para comezar con, e por iso vai transformalo en algo diferente. E, finalmente, a liña 20, dicir chamada a% modulo, e iso é confuso. Isto é algo que é un pouco distinto aquí que realmente non ten en matemáticas da vida real. Pero, esencialmente, cando toma un xigante número e dividir en C, o que pasa co resto? ALUMNO: El queda truncado. Jason Hirschhorn: El queda truncado. Entón, 20 dividido por 3 é o que? O que isto quere volver ao ti, 20 dividido por 3. Sentímolo, 10 dividido por 3. O que isto quere volver para ti? Estudante: [inaudível]. Jason Hirschhorn: 10 dividido por 3 só devolve 3, non 3 restante 1. Entón, o 10 módulo 3 retorno é só o resto, 1. Entón, se quería saber o que 10 dividido por 3 realmente era, se fose facer 10 dividido por 3, terá a súa 3, e logo, faría 10 modulo 3 e quere obter a 1. Entón entender que 10 dividido por 3 é 3, un resto. E nesta liña, pode rand calquera número enteiro, esencialmente. Entón modulo está dicindo, división lo por número, o cal é, neste caso cinco. E se dividir por un número, o número enteiro sempre ten que ser inferior a ese número. Entón, se está dividindo por un número 5, o resto é sempre vai ser de cero a catro. Isto é só a forma como as matemáticas funciona. Así, un gran número moduloed por un menor número sempre volverá resto e sempre volver algún número que é menor que o número que dividido. Alguén ten algunha dúbida sobre modulo, porque vai vir en moito, moi útil, entón eu quero que seguro todo o mundo entende isto? Legal. E vimos que este programa funciona. OK, seguindo adiante. Así, na seguinte, imos entrar funcións, e nós estamos indo a ir a través do resto das cousas moi rapidamente porque quero chegar argumentos de liña de comandos. Así, as funcións son, esencialmente, Como viu, as caixas negras. Eles levan as cousas chamados parámetros, eles fan algo para eles, sexa muda-los ou crear algúns efectos secundarios, e, finalmente, eles cospen algo, o que se o valor de retorno. Alguén me pode dar unha razón por iso que usaría funcións? Calquera? Unha razón pola que usariamos funcións? Calquera? Vin as dúas mans. ¿Que é un bo motivo? Marcus? ALUMNO: Se ten que chamar o mesmo anaco de código varias veces. Jason Hirschhorn: OK, se precisa para chamar a mesma peza de codificar varias veces. Jeff, se ten unha razón diferente? ALUMNO: Só que podes codificar menos. Jason Hirschhorn: Pode codificar menos. Correcto. Se queres facer algo moi - no código anterior, eu podería ter escrito obter secuencia de cinco veces, pero unha loop fai que pareza máis bonito e ten que escribir menos código. Funcións son unha idea similar. Se eu queira facer o mesmo unha chea, movelo a unha función e chamar iso de funcionando á vez. Isto fará que esa cousa para ti. Isto é un gran motivo utilizar funcións. Entón, anatomía dunha función. A función xeral semellante a esta. Comezará co tipo de retorno, entón vai ter o nome. Vai levar os argumentos, se non, coñecido como os parámetros, e dentro esas claves, vai escribir o seu código. Vimos unha función moito. Esa é principal. Aquí é principal superposta anatomía que tiña antes. Que int aquí significa? Que int significa? Cando escribo int main (void). ALUMNO: Tipo de retorno? Jason Hirschhorn: Sentímolo? ALUMNO: O tipo de retorno. Jason Hirschhorn: Int é o tipo de retorno, exactamente correcto. Iniciar retorna un int. Qué é o principal? ALUMNO: nome da función. Jason Hirschhorn: Principal é o nome da función. Exactamente. E baleiro? Que é o baleiro dentro dos parénteses? ALUMNO: Non hai que calquera valor externo. Jason Hirschhorn: void So - dereita. Dentro dos parénteses, poñemos o parámetros ou argumentos dos función recibe, o que pasa no interior da caixa negra. Cando escribe baleiro, está dicindo iso leva nada dentro Entón int void main principal medio de non ter nada dentro Dentro das claves, temos algúns código, e entón veremos a finais voltar cero. Que significa retorno de cero significa? Ben, nós falamos sobre o tipo de retorno. Principal que voltar un int. Iso é o que esta liña fai. El retorna un int, cero. Claro que non vimos que moitas porque na programación que facemos con as máquinas que facemos e os compiladores usamos hoxe en día, non precisa desa liña. Principal é especial o suficiente para que el sabe cando chegar ao final do principal, só voltar cero se todo foi ben. De feito, se algo non vai ben, principal, moitas veces, voltar un diferente número significando que algo deu mal co seu programa. Entón, xeralmente cando ver o código, Non escriba retorno cero, pero é bo para saber que isto está a suceder por tras da escenas porque sempre que escribir outro tipo de función, está indo a necesidade de incluír unha liña de retorno. Se está dicindo que eu vou voltar un int, ten que escribir devolver algo. Se digo branco aquí no comezo, void void principal, para exemplo, el non volve nada - branco non significa nada - así que non que a liña de retorno. Pero sempre escribir algo que non é para anular o tipo de retorno, ten que unha liña que di que volta e ten que poñer algo alí que corresponde ao tipo. Calquera dúbida sobre iso? Doce. Scope. Isto é algo que temos tocou tamén. Cada variable, como sabemos, ten unha certa marxe, e iso é basicamente falando sobre onde a variable pode ou non pode ser referenciada. E gustaríame dicir o que pasa entre chaves permanece dentro das chaves. Así, por exemplo, se miramos a este código, estamos definindo unha variable global fóra do principal, int a, aquí enriba na parte superior. Estamos chamando outro int dentro dunha principal. Temos algunhas claves máis Crespo, e estamos chamando outro un int. Temos tres un no código. Estes non son o mesmo. Creei tres variables distintas. Entón dentro destas rizado interior tirantes, digo a = 4. Que un é que está falando, o primeiro, o segundo, ou o terceiro? ALUMNO: o terceiro. Jason Hirschhorn: Está falando sobre o terceiro. Todos aqueles a realidade se pode falou neste particular, exemplo, porque o seu alcance todo vai para esas claves máis íntimos. Con todo, cando chamar as cousas da mesma nome, hai algo chamado escondidos. Así, só se xestione ou reparar ou empregar o variable máis recente, ou a un máis próxima de ti. Así, aquí dentro, é dicir máis próximo a un terceiro a esta liña, a = 4, entón afecta o terceiro. E a última liña, a = 2, o cal é un que está falando, o primeiro, segundo, ou un terceiro? ALUMNO: Segundo. Jason Hirschhorn: Está falando sobre o segundo, unha. Claro que, a un terceiro está máis próximo en que o código, pero o terceiro un non existe fóra esas claves. Unha vez que chegar a ese pechado rizado cinta, como é que se foi, esencialmente. Entón, os dous únicos que lle queda son aqueles os dous primeiros e, por suposto, xa que está máis preto da segunda. Entón, iso é bo para Lembre-se sobre o ámbito de aplicación. Por exemplo, eu estou seguro que atopou facelo en un loop while. Se inicializar a variable dentro o que while e despois tentar acceder a ela do lado de fóra, probablemente Ten algún aviso como, este variable non existe. Isto porque a idea de alcance, que as cousas só existen dentro desas chaves. Curly claves son como unha aperta xigante que está dando ao seu código, é outro forma de pensar sobre iso. Polo tanto, esta é outra función, algo para vós código, hellofunction.c. Nós imos saltar que, por agora, pero iso é algo que eu encouraged-lo a practicar no seu propio país. Escriba un programa no que as chamadas principais outra función que imprime unha saúdo ao usuario. É esencialmente tomando Ola mundo e abstraindo que printf en outra función. Pero nós non imos facelo agora porque non temos tanto tempo saíu como eu tería gusto. Entón declaración da función. Nós xa vimos isto antes tamén. Se queres escribir unha outra función, ten que deixar o ordenador coñecer e principal sabe que existe. Entón, o que facemos é por riba de inicio, escribimos o tipo de retorno, o nome eo parámetros e logo, por baixo de inicio, aquí, nós realmente copiar esa liña e logo escribir o código real. Así, deste xeito, se chamar a función en principal na parte superior, principal sabe que Ola existe, por exemplo, se eu fose para chamar Ola, e, a continuación, mira para a posta en marcha a continuación. Qué acontece se eu non incluír este liña enriba, anular Ola (void)? Se eu non incluír esta liña e chamadas principais Ola, eu son recibirá un erro. Eu estou indo a obter un erro porque o compilador non sabe que esa cousa existe. Isto é semellante a iso que non # include cs50.h. Que esencialmente cs50.h está facendo está poñendo obter corda alí enriba. É poñer obter int alí enriba. É poñer todos aqueles función prototipos antes principal de xeito que cando chamalos en principal, principal sabe que esas cousas existen. Iso é o que estes arquivos h. Crear. E por iso, se está indo a facer o seu propio función, ten que asegurarse de pór este prototipo alí enriba. Calquera dúbida sobre iso ata agora? Argumentos de liña de comandos. Isto é o que nós imos rematar , E entón espero que nós imos espremer nalgúns pset. Non sei se nós imos ser capaces de espremer en que por mor do tempo, pero con vostedes que están aquí, e se Queren dicir que despois de un pouco, nos pode pasar por iso de fóra. Pero imos rematar con argumentos de liña de comandos para os últimos 15 minutos. Nós acordo, Michael? Está acordado? Bo Non sei se durmir cos ollos pechados. Sería complicado. Argumentos de liña de comandos. Aqueles que son unha forma de pasar información nun programa. Finalmente, nós imos atopar os outros. Pero, esencialmente, imos parar escribir int main (void) se queremos ter algúns argumentos de liña de comandos. Nós imos escribir esta cousa chamado int main (int argc, corda argv, corchetes. Isto é confuso. Isto é unha morea de letras que non están en Inglés humano, polo que estamos indo a descompactá-los agora. Argc significa conta argumento - e de novo, todo isto vai estar dispoñible en liña - e este é o número de argumentos. Argv significa argumento do vector, e quen son os propios argumentos. É unha matriz de cadeas. Temos realmente ver unha matriz de corda antes de hoxe. Creamos un no último programa que cifrada. Entón, aquí está un exemplo. Eu escriba. / Ohai CS50 sección na miña liña de comandos. Argc, neste caso é igual a 3. Argv soporte 0 é ohai, argv soporte 1 é CS50, argv pista 2 é a sección. De novo, argc é o número de argumentos, e para te enganar un pouco bit, contamos sempre co nome da funcionan como o primeiro argumento. Polo tanto, neste caso, hai tres argumentos, o nome da función e logo, os dous que eu escriba dentro Logo, imos a gardar os propios argumentos en argv. E, de novo, só, como vimos antes, fixemos esta última no programa que cifrada. Pode mover-se a través da matriz de argv e obter estas cadeas. Isto é esencialmente o que fixemos no a fin do noso último programa. Nós escoller un nome aleatorio e, a continuación, foi para a nomes de soporte que quere e impreso a secuencia situado alí. Enriba de só unha matriz, xa propias cordas son matrices, como falou, pode ter matrices de matrices, que se esencialmente o que argv é. Unha maneira que pode pensar sobre é dicir as liñas e columnas. Podo chamar iso agora. Entón argv - que non está apagando. Imos deseñar baixo ohai. Entón, se eu escribín en, sección CS50 ohai, Eu estou indo a truncar sección para este exemplo. Pero, esencialmente, o meu multidimensional array, ohai CS50, imos facer seita. Entón, aquí, podo acceder a - se eu só dar argv un número - iso é malo. O que hai de malo neste diagrama? ALUMNO: Comezar polo cero. Jason Hirschhorn: debe comezar con cero. Eu probablemente debería tamén xiralo, pero pois eu xa deseñado tanto, estou vai deixar lo alí por un tempo. Pero comeza a cero. Iso é certo. Sentímolo se isto é pequeno. Podedes tipo de ver? Entón, se eu fai argv 0, vou obter toda ohai. Se eu fai unha argv, eu vou ir todos CS50. Se eu fai argv 2, eu vou ir todos seita. Pero agora, como dixemos, cordas son propias matrices. Entón, o que podo facer é que podo tratar esta como unha matriz multi-dimensional, e eu pode facer algo ao longo das liñas de argv 0, 0, o que me dá só o carácter 0. Argv 0, 1, o que me dá só h. Argv 1, 3, o que me dá só este 0 aquí no CS50. Entón, por que os propios fíos son matrices, estamos poñendo que na outra matriz. Temos agora array de arrays, e nós pode indexar a nosa primeira matriz e entón o índice para o noso segundo array. E, como era de esperar, nós facemos iso por só poñer os dous - facemos os corchetes só xunto un do outro. Polo tanto, neste exemplo, argv é unha CS50 e argv 1, 2, como dixemos, non é máis que 5. Alguén ten algunha dúbida sobre arrays multi-dimensional? Vostedes están facendo incrible. Doce. Entón, nós temos un outro programa aquí, e esta é a última cousa que somos vai facer agora. Entón, quero que escriba un programa que leva o nome completo do usuario, dous e só dous argumentos de liña de comandos e finalmente imprimir un saúdo ao usuario, que inclúe o seu primeiro nome. Entón, por que non tomar tres ou catro minutos para facer iso, e despois imos sobre el como un grupo, e entón imos embrulhar? E, de novo, aquí, cando dicimos ter un nome completo acordo coa descrición do usuario deste problema, que debe ser de ordes argumentos de liña, evitando obter cadea. Si, Marcus? ALUMNO: Entón, cando di que dous comandos argumentos de liña, é que, ademais . O / run, ou - Jason Hirschhorn: Boa pregunta. Facer, incluíndo o. / Run, tres argumentos de liña de comandos. Ou, incluíndo o. / Personalizado, a Neste caso, porque esa é a nome deste ficheiro. Entón argc sería tres. Pero quero só dous argumentos dado ao programa. Debo especificar iso. Vou facer este cambio antes de publicar estes e envialos a vós. ESTUDANTE: E se ten un nome do medio? Jason Hirschhorn: Se ten un medio nome, está sen sorte. Sinto moito. Ou se só vai por Shakira, tamén está fóra de sorte. Si? ALUMNO: Entón, cando a xente non ten cs50.h, eles definen argv como estrela argv de char? Ou aínda se chama cadea argv? Jason Hirschhorn: si. Entón, cadea, de novo, máscara sobre o que exactamente está a suceder alí. Isto vai ser descomprimido quizais o mércores, pero en breve. É como Rodas pequenas. Por esencialmente, é o mesmo. Entón, imos dar un minuto para o programa este, a continuación, imos falar como un grupo e, despois como dixen, envolver. E eu creo que aínda son doces extra, entón vostedes deben espera ter que, ou por favor, tome isto. Sentímolo se aínda está escribindo, pero quero mergullo e nós pode remata-lo xuntos. Entón, eu teño escrito, # include cs50.h, # include stdio.h. int main (void), rizado cinta, rizado cinta, dentro de tres liñas de pseudocódigo, ter o nome completo do usuario, dúas e só dúas liña de comandos argumentos, imprime un saúdo ao usuario, que inclúe o seu primeiro nome. Así, o primeiro, tomar nome completo do usuario. Quen me pode axudar a tomar nome completo do usuario? Cómo fago esa parte? Vostedes fan a primeira parte? Colla o nome completo do usuario. Así, para que unha liña de comandos argumento, o que debo escribir? ¿Que debería cambiar en miña declaración de función? ALUMNO: Non quere que sexa máis branco. Jason Hirschhorn: Exactamente. Non quero que ela sexa anulada. O que quero que sexa? ALUMNO: argc Int Jason Hirschhorn: Int argc. ALUMNO: argv secuencia. Jason Hirschhorn: cadea argv. ALUMNO Sergio, soporte. Jason Hirschhorn Sergio, soporte. É exactamente iso, e iso é en realidade, como eu vou conseguir nome completo do usuario. Eles están indo para poñelas alí. De modo que un está feito. Entón agora quero dous e só dous argumentos de liña de comandos. Entón Noé, o que é unha forma que eu poida comprobar o seu número de orde argumentos de liña que eu teño? ALUMNO: Vostede fai un if. Jason Hirschhorn: Si declaración, exactamente. O que quero que a condición? ESTUDANTE: Se argc superior a 3. Jason Hirschhorn: Se argc é maior que 3. Se argc superior a 3, o que fago? ESTUDANTE: Return 1. Jason Hirschhorn: Return 1. Será que garantir que teño dúas e só dúas? ALUMNO: Non Se é maior que argc 3 e inferior a 2. Jason Hirschhorn: Se argc é maior a 3 e argc é inferior a 2. ¿Que é un xeito que podo escribir isto en só unha liña, ou sen o uso que e operador booleano? ALUMNO: Non é igual a 2. Jason Hirschhorn: Se argc non é igual a 2. Exactamente. Entón, se argc non é igual a 2, é dicir me vai dar a este programa, personalizado, cando executa-lo, e que me vai dar cantos argumentos de liña de comandos? Cantos vou buscar? Sentímolo. Déixeme reformular iso. Se argc = 2, cantas cousas fixo o usuario escribir na liña? ALUMNO: Unha. Jason Hirschhorn: Só un. Entón, antes, estaba seguro, Noah. O que eu realmente teño poñer alí? ALUMNO: Isto é igual a 3. Jason Hirschhorn: ARGC non é igual a 3. Quero ser igual 3 porque quero personalización máis dos outros dous. Entón, se argc non é igual a 3, o retorno 1. Por que di voltar 1? ALUMNO: Por iso significa que está mal. Jason Hirschhorn: Isto significa que é malo, eo que é o que imos facer? ALUMNO: Re-solicitar ao usuario. Jason Hirschhorn: Vai saír o programa, polo que terá que correr de novo, pero non temos nada aquí para solicitar a eles de novo. Non pedín por iso. Entón, iso é correcto. Retorno 1 só sae do programa. Grande. E imprimir un saúdo ao usuario que inclúe o seu primeiro nome. Como podo facelo? Anna? ESTUDANTE: printf. Jason Hirschhorn: printf. ESTUDANTE: (" Jason Hirschhorn: ( ALUMNO: "Ola Jason Hirschhorn: "Ola ALUMNO:% s Jason Hirschhorn:% s ALUMNO: / n Jason Hirschhorn: / n ALUMNO: ", Jason Hirschhorn: ", ALUMNO: argv Jason Hirschhorn: Sentímolo? ALUMNO: argv Jason Hirschhorn: argv ALUMNO: corchetes 1. Jason Hirschhorn: corchetes? ESTUDANTE: 1. Jason Hirschhorn: 1. ALUMNO: E) punto e coma. Jason Hirschhorn :) comas. Imos realizar este. Fai personalizado. . / Personalizado. É só saír. Por que saír? ALUMNO: Non especificou ningún argumento. Jason Hirschhorn: Eu non fixen poñer todos os argumentos dentro Parece gran. Vostedes acertaron de cheo. Entón, de novo, entrou argv e Comprobarase a principios argc. Estes son dous importantes cousas para lembrar. Así, nos nosos dous últimos minutos antes de nós deixar, non imos chegar a pset dous, pero como dixen, se quere ir despois por 10 minutos, eu o faría el feliz de ir máis convosco a lóxica para estes conxuntos de problemas. Tivemos unha chea de cubrir hoxe entón eu non chegar ata eles. Xeralmente, gustaríame incluír que, ao final. Entón, se quere ir por aquí, ir ao redor de 10 minutos. Nós imos facelo. Entón, como eu mencionen no inicio, pset cero e un, teremos que retorno de volta para ti como pronto como sexa posible. O obxectivo é facer que pset un producto, Comentarios a parte, antes pset dous é debido. Entón, se cometeu algúns erros ou estilisticamente, as cousas poderían ser mellores, vai ter esta información para que non vai facer as mesmas cousas en pset dous. E entón, no futuro, vai ter todo do seu producto e comentarios pset de volta antes de que o próximo é debido. Por último, se eu puidese poñer noutro plug para o GABARITO. Esta é a súa primeira sección. Foi a miña primeira sección ensinar este ano. Vaia ata alí. Escribir cousas, boas e malas, e eu vou usalo para facer sección mellor a próxima vez. E para rematar, unha vez máis, se precisa calquera cousa, me aviso. Estou máis que feliz en axudar vostedes. Se só quere doces, I terá doces extra. Estou feliz en trae-lo para ti. Este será un curso incrible. Este é un dos, se non o meu favorito Por suposto, eu tomei en toda a miña vida, e eu espero que sexa que marabilloso para ti. Entón, quero facer todo no meu poder para facelo incrible para ti. Vou enviar un correo-e se está na miña sección ou Noah, e tratará de axenda con cada un dos vostedes un tempo de facturación sobre o próximo par de semanas para que eu poida obter un sensación de que o seu fondo CS é, e tamén me vai axudar a adaptar estes seccións para mellor atender ás súas necesidades. Entón, iso é o que eu teño aliñados. Unha vez máis, eu vou velo do lado de fóra Se queres estar alí. Este foi de dúas semanas sección. Grazas a vostedes moito.