[Reprodución de música] DAVID J. Malan: Todo ben. Este é CS50 e este é o inicio da Semana 2. E vai lembrar que, ao longo o último par de semanas, vimos introducir ordenador ciencia e, á súa vez, a programación. E comezamos a historia por medio de Cero, que a linguaxe gráfica desde o MIT Media Lab. E, a continuación, máis recentemente, a semana pasada, fixemos introducir un higher-- un linguaxe de nivel máis baixo coñecido como C, algo que é puramente textual. E, de feito, última vez que explotado dentro dese contexto unha serie de conceptos. Este, recall, era a propia primeiro programa nós encontramos. E este programa, moi simplemente, imprime, "Ola, mundo". Pero hai moito magic parecendo suceder. Hai esa #include con estes corchetes. Hai int. Hai (void). Hai parénteses, corchetes, punto e coma, e moito máis. E así, recordar que introducimos Raspadinha para que puidésemos, idealmente, ver o pasado que a sintaxe, o material que non é realmente todo o que intelectualmente interesante, pero pronto é, absolutamente, un pouco complicado para involucrar súa mente en torno. E, de feito, un dos máis comúns as cousas no inicio dunha clase de programación, sobre todo para os menos cómodo, é para frustrado por e tropezou algúns sintáctica erros, sen esquecer a erros lóxicos. E así entre os nosos obxectivos hoxe, en realidade, vontade sexa para equipa-lo con algún técnicas de resolución de problemas sobre como para resolver mellor os problemas propios baixo a forma de depuración. E vai lembrar, tamén, que o ambiente que foi introducida última vez que foi chamado CS50 IDE. Este é un programa baseado na web que permite programar na nube, por así dicir, mantendo todo o seu arquivos xuntos, como teremos novo hoxe. E lembrar que revisitado estes temas aquí, entre elas funcións e loops, e variables e expresións booleanas, e condicións. E, de feito, un pouco máis que traducido do mundo do scratch para o mundo do C. Pero a construción fundamental bloques, por así dicir, foron realmente aínda o mesmo a semana pasada. En realidade, nós realmente só tiña un diferente peza do puzzle, se quere. No canto de que o vermello gardar bloque, nós en vez tiña printf, que é esta función en C que permite imprimir algo e formato-lo na pantalla. Introducimos o CS50 Biblioteca, onde teñen agora á súa disposición get_char, e get_int, e get_string, e algunhas outras funcións como ben, a través do cal se pode obter a entrada do propio teclado do usuario. E tamén tivo un ollar para as cousas como these- bool, e char, e double, float, int, cadea long_long. E hai aínda outros tipos de datos en C Noutras palabras, cando declara unha variable para almacenar un valor, ou cando aplicar unha función que retorna un valor, pode especificar o que tipo de valor que sexa. É unha cadea, como un secuencia de caracteres? É un número, como un número enteiro? É un punto flotante valor ou similares? Así, en C, ao contrario do risco, nós realmente comezou a especificar o tipo de datos estabamos volvendo ou usar. Pero, por suposto, tamén foi para algúns límites fundamentais da informática. E, en particular, esa linguaxe C, recordo que demos un ollo a integer overflow, a realidade que, se ten só un cantidade finita de memoria ou, en concreto, un número finito de bits, só pode contar tan alto. E así nós miramos para este exemplo aquí en que un contador nun avión, en realidade, se executar o tempo suficiente sería rebosar e producir un programa un erro potencial físico real. Tamén mirou flotante punto de imprecisión, a realidade que, con só un número finito de bits, se é 32 ou 64, só se pode especificar tantos números despois dun punto decimal, tras o cal comezan a estar imprecisa. Así, por exemplo, un terzo en mundo aquí, no noso mundo humano, o que si sabemos é só un número infinito de 3s despois do punto decimal. Pero un ordenador non pode necesariamente representan un número infinito de números se permitir só que algúns cantidade finita de información. Así, non só nós equipa-lo con maior poder en canto de como pode expresarse en un teclado en termos de programación, Tamén limita o pode realmente facer. E, de feito, os erros e os erros poden xorden a partir destes tipos de problemas. E, de feito, entre os temas hoxe van ser temas como a depuración e, de feito, mirando por baixo do capuz o xeito no que as cousas foron introducidos na semana pasada son realmente aplicadas de xeito que é mellor comprender tanto as capacidades de correo as limitacións dunha linguaxe como C. E, de feito, imos pelar as capas dos máis simple de estrutura de datos, algo chamado un array, que Cero pasa a chamar unha "lista". É un pouco diferente nese contexto. E entón nós tamén imos presentar un dos primeiro dos nosos problemas específicos do campo en CS50, o mundo da criptografía, a arte de Nomes ou cifrar Información que pode enviar mensaxes secretas e descodificar mensaxes secretas entre dúas persoas, A e B. Polo tanto, antes de transición, a ese novo mundo, imos tratar equipa-lo con algún técnicas coas que pode eliminar ou reducir, polo menos, algúns das frustracións que probablemente xa atopou ao longo da última semana só. De feito, antes de lle son algúns dos such-- seus primeiros problemas en C. E as probabilidades son, se vostede é como eu, por primeira vez tenta escribir un programa, mesmo se pensar loxicamente o programa é moi sinxelo, pode moi ben bater nunha parede, e o compilador non vai cooperar. Facer ou Clang non para realmente facer o seu tiro. E por que pode ser iso? Ben, imos dar un ollo, quizais, un programa sinxelo. Eu estou indo a ir adiante e gardar isto en un arquivo chamado deliberadamente buggy0.c, porque sei que a ser fallo con antelación. Pero pode non entender que, se esta é o primeiro ou segundo ou terceiro programa que realmente estou me facendo. Entón, eu estou indo a ir adiante e escribir, int main (void). E, a continuación, dentro das miñas chaves, moi familiar ( "Ola, mundo-- barra invertida, n ") - e un punto e coma. Eu salvo o ficheiro. Agora eu estou indo a ir para abaixo na miña fiestra de terminal e tipo make buggy0 porque, de novo, o nome do ficheiro é hoxe buggy0.c. Entón eu tecleo facer buggy0, Intro. E, oh, Deus, lembro a última vez que ningunha mensaxe de erro é bo. Así, ningunha saída é unha cousa boa. Pero aquí eu teño claro un número de erros. Así, a primeira liña de saída despois de escribir facer buggy0, recall, se emite bastante detallado do Clang. Debaixo do capó, IDE estabelécese CS50 para usar unha morea de opcións con este compilador de xeito que non ten para pensar sobre eles. E iso é todo o que a primeira liña medios que comeza con Clang. Pero despois diso, os problemas comezar a facer o seu aspecto. Buggy0.c na liña 3, carácter 5, existe un gran erro, vermello. Qué e iso? Implicitamente declarando función de biblioteca printf co tipo int (const char *, ...) [-Werror]. Quero dicir, moi rapidamente queda moi misterioso. E, por suposto, a primeira vista, non queremos espero que entenda o totalidade da mensaxe. E así unha das leccións para hoxe vai ser a de tentar entender patróns, ou cousas semellantes, a erros que pode ter encontradas no pasado. Entón, imos provocar única apart aquelas palabras que mira familiar. O gran, vermello de erro é claramente simbólica de que algo está mal. implicitamente declarando biblioteca printf función. Así, aínda que eu non entendo moi ben o que declarar implicitamente función de biblioteca medios, o problema seguramente refírese a printf de algunha maneira. E a fonte dese problema ten que ver co declarar. Declarar unha función é mencionalo-lo por primeira vez. E usamos a terminoloxía a semana pasada de declarar un prototipo de función, ou cunha liña na parte superior do seu propio ficheiro ou nun arquivo de cabeceira chamado. E en que ficheiro fixo dicimos a semana pasada que printf é citar, unquote, declarou? En o ficheiro é o seu prototipo? Entón, se se lembra, o primeiro que eu ingresaran, case todos os programas última vez-- e, accidentalmente, un momento atrás comezou escribindo myself-- foi esta aqui-- hash-- #include