[Powered by Google Translate] DAVID J. Malan: Todo ben, iso é CS50 e este é o final da semana 1, tarxetas etc estudo está eo número total de compañeiros que ten para este ano é 745. E estamos tan entusiasmados de ter tantos de vós no curso este semestre, pero que este curso é tan grande, entender que é isto como xantar venres, como as horas de oficina, 15 persoa seccións e así por diante que son realmente significaba para crear esta máis íntima ambiente. Así, aínda que podemos reunir unha vez ou dúas veces por semana, aquí Sanders, sei que moito da súa experiencia neste curso vai ser moi hands-on en a carón dos seus compañeiros e do corpo docente. Entón, imos alí, Fall 2012. Entón, lembro que a última vez que rematou cunha nota de imprecisión, falando sobre a representación de números. E nós miramos unha das fallos que se produciron, no mundo real, cando se trata de malentendido como os ordenadores funcionan. Ben, hoxe nós imos revisitar unha desas ideas como así como continuar a discusión do cliente CS50 e C eo que significa realmente o programa. Pero, primeiro, só un par de anuncios de remuíño. Seccións comezan este domingo, e na primeira semana é sempre unha pouco de inicio rápido, porque só teño en formas súa sección. Estamos facendo o mesmo, agora, cos compañeiros de ensino, agora que eles saben os seus horarios, polo que estamos tratando, por Sábado de mañá, para seguir con vostede, coa súa sección asignación e TF. Entenda que eles van comezar o día seguinte, domingo ou luns ou martes. E entón imos acomodar os cambios de sección que poidan xurdir os días que virán. As horas de oficina, con todo, son, unha vez máis, esta noite, 08:00 a 11, en Annenberg, así como mañá á noite. Aínda que os xogos de problemas son xeralmente debido ás xoves ao mediodía, entende que ten ata cinco días de atraso para gastar, polo tanto, a dispoñibilidade de horario de oficina os xoves se diñeiro nun deses días de atraso e, así, presentar algo o venres. Deixe-me suxerir que scratch é entre o máis divertido, entre os máis baixas importantes conxuntos de problemas. E gustaríame colgar os días de atraso, estratexicamente, só cara ao final do semestre, cando a vida empeza a estar no camiño con exames semestrais e outras clases. Establecer un problema, non obstante, sería publicado no seu curso web onte, como será a camiñada do curso a través de vídeo, que será filmado en 02:30 venres e, a continuación, publicado en liña o día seguinte. Así, terminou o luns. Eu quero - na verdade, unha nota aquí. Como as clases - porque Sanders non é exactamente prestan a Q & A ocasional e cara atrás moi ben, estamos vai tentar algo un pouco este ano, en que Se vostede non está cómodo levantar a man ou só prefire non levantar a man nunha sala como esta, imos ter algúns dos compañeiros de ensino e CAs cs50.net/discuss tripulación durante a charla. Entón se ten unha pregunta, porque eu estaba completamente claro sobre algo ou está curioso sobre algúns tema, tente enviar alí. Marcalo con un rótulo de charla, e nós imos facer o noso mellor hoxe e na próxima semana - nós tentar facer iso - a área das TIC en soporte electrónico, liña, ou se se sente como deberiamos realmente afrontalo lo en masa, un dos compañeiros de ensino ou CAs vai levantar a man e pedir anonimamente no seu nome. Entón, imos tentar dar un regalo para ver como isto funciona ben. Pero, por todos os medios, seguen a erguer as mans, como lle gustaría. Entón última vez que revelou que o 10% ou un décimo non é, en feito, 0,1, como foi ensino por moitos anos. É, de feito, un valor coma este. Pero iso non é totalmente certo, non? Só temos esta restrición en computadores en que, se só teñen unha cantidade finita de memoria, a memoria RAM, ou máis especialmente bits, así, hai só un número finito de cousas que pode representar. Por exemplo, se temos o número cero, e queremos representar en binario usando oito bits, onde un pouco, de novo, é un cero ou un un, poderiamos representa-lo como 00000000. E iso é un pouco innecesarios detallado. Así como no sistema decimal, no mundo real, Xeralmente, se quere escribir o número 123, que seres humanos probablemente non escribo 00000123 aínda que, funcionalmente, que é exactamente o mesmo número. Nós só unha pinga ceros á esquerda, por así dicir. En binario, podemos facer o mesmo. Binario e cero cero, e binario é só cero. Só ten un único bit. Pero, de novo, a unidade de medida máis común no mundo da computación é máis, oito bits. Só porque un pouco, bastante inútil. Oito bits, non moi útil, pero polo menos é máis útiles que unha única unidade de medida. Así, con oito bits, imos normalmente representan binario. Polo tanto, temos aquí os números cero, un, dous, e entón, como Nate fixo no noso vídeo última mércores, podemos seguir contando ata sete, oito. E entón, se usamos máis e máis bits, nós pode contar ata o infinito. Pero se só ten un número finito destes bits, como é caso de calquera sistema informático, ou mesmo de mísiles sistema, así, en verdade só ten un cantidade finita de precisión. Entón se quere para representar o número como 0,1, así, o ordenador ten que escoller. E se só ten un número finito de números que pode representar, pode chegar preto de 0,1 por ti, pero non pode necesariamente dar-lle exactamente o valor que quere. E este é só un dos retos de ordenadores, debaixo do capó, afortunadamente. A medida que avanzamos máis no semestre, o nivel máis baixo estes detalles fan-se moito menos interesante, pero certamente o aplicación destas ideas pode ter un mundo moi real ramificacións. Un deles é un pouco divertido. Como moitos de vostedes xa viron o Office Space incrible película? Se non ten, que é o seu non-oficial lección de casa para a semana. Pero en Office Space, os compañeiros en que a película teña vantaxe de exactamente esa idea, pero realmente roubou doutro filme que pode ter visto, incluso anos antes. Entón deixe-me dar-lle algúns segundos de este trailer de esta película incrible e iso é moi academicamente relevante. [XOGOS de película] En realidade, estou sendo promovido. Eu podo programar un virus que vai rasgar que Pon gran momento. Ben, como é que funciona? Cada vez que hai unha transacción bancaria onde o interese é computerizada, existen miles ao día, o ordenador acaba con esas fraccións de un centavo. Pero eu non vou facer nada ilegal. Ilegal? Samir, este é a América. Ten que xurar a Deus. Se ninguén sabe sobre iso, pero nós, non? Ningún membro da familia, non noivas, ninguén. [Inaudível]. Non te preocupes, cara, eu non vou contar para ninguén quere. [Película remata] Todo ben, entón quizais eu atope este filme mellor que a maioría persoas aquí, pero en calquera caso, o virus que foron intentando crear - e no cine, a calquera hora que eles chaman algo de un virus, xeralmente non é realmente un virus. É só un programa que alguén escribiu para facer algo. E, neste caso, as faces estaban tentando escribir un programa que se aproveitou da súa empresa chamada Innotech de sistema de computación en que, ordenadores, tamén, aínda que trata de diñeiro, non necesariamente representan diñeiro con precisión. Así, aínda que pode ter $ 0,10 na súa conta bancaria, 0,10, así, o ordenador pode realmente creo que ten este centavos moitos na súa conta bancaria. E entón o que estes faces estaban aspirando a facer - e eles roubou a idea, ao parecer de Superman III, onde Richard Pryor fixo a mesma cousa - eles eran esencialmente escribir programas que aspiran a ocupar toda a fuga números, todos os pequenos, minúsculos, pequenas fraccións de tostões, e siphoning aqueles fóra de forma que os seres humanos só pensamento, oh, é só 0,10 dólares alí, pero todos os que números finais, eventualmente, engadir-se. Entón, unha idea marabillosa e divertida na que saíu pola culatra película en particular. Pero no mundo real, tamén, hai moito máis sobre implicacións destes tipos de cousas. E unha das razóns para mergullo no campo do ordenador ciencia é, de novo, a súa aplicabilidade non ao Ciencias da Enxeñaría só, pero só para noutros campos tamén. Polo tanto, este é un ollar menos alegre co que pode dar mal, pero tamén é bastante apertura dos ollos, eu creo que, cando se trata de entender exactamente como omnipresente tecnoloxías como ordenadores e de programación ou nos días de hoxe, baixo a forma de software. Polo tanto, este próximo clip é só preto de seis minutos, continúa onde paramos a última vez, pero permítenos mirar un pouco máis en profundidade en un tal estas cuestións. Deixe-me ir directo ao punto en que parou, que estaba ben aquí. E nós temos a parte dous de dous, por preto de seis minutos aquí. [MOVIE PLAY] Atormentado tecnoloxía de foguetes modernos. En 1991, co inicio da Guerra do Golfo, o Patriot mísil experimentou un tipo similar de problema de conversión de número. E, como resultado, 20 persoas, 20 soldados norteamericanos, foron mortos e preto de 100 resultaron feridos cando o Patriot, que debería para protexer contra Scuds entrada, non conseguiu disparar un mísil. Cando o Iraq invadiu Kuwait e América lanzou un deserto Tempestade no inicio de 1991, as baterías de mísiles Patriot foron implantado para protexer a Arabia Saudita e Israel a partir do Iraq Mísiles Scud ataque. O Patriot é un EUA de medio alcance do sistema superficie-aire, fabricado pola empresa Raytheon. O tamaño do interceptor Patriot en si, é sobre preto de 20 metros de lonxitude e pesa preto de 2.000 quilos. E leva unha ogiva de aproximadamente - Eu creo que é máis ou menos 150 libras. E a ogiva en si é un explosivo de alta que ten fragmentos en torno a el. A carcasa da ogiva está deseñado para actuar como chumbo groso. Os mísiles son realizadas catro por recipiente e son transportado por un semi-remolque. O Patriota sistema anti-mísil remonta polo menos a 20 anos. El foi orixinalmente concibido como un mísil de defensa aérea para derrubar avións inimigos, na primeira Guerra do Golfo. Cando a guerra chegou, o Exército quería usalo para lanzar Scuds para abaixo, e non avións. A Forza Aérea de Iraq non era tanto un problema, pero o Exército estaba preocupado Scuds. E así eles intentaron actualizar o Patriot. Interceptar un mísil inimigo viaxando a Mach 5 ía a ser bastante difícil. Pero cando o Patriot foi levado en servizo, o Exército non estaba en conta unha modificación do Iraq, que fixo a súa Scuds case imposible de bater. O que pasou é que eran os Scuds chegando eran inestables. Eles estaban bailando. A razón para isto foi o iraquís, a fin de obter 600 quilómetros fóra dun mísil franxa de 300 quilómetros, levou peso fóra da ogiva fronte e feita a ogiva isqueiro. Polo tanto, agora o Patriot está intentando entrar no Scud, e máis de tempo, a esmagadora maioría do tempo, sería só voar polo Scud. Unha vez que os operadores do sistema Patriot entendeu o Patriot errou o obxectivo, eles detonaron a ogiva Patriota. Para evitar posibles sinistros, foi permitido a caer ao chan. Iso foi o que a maioría da xente viu, como bolas de lume no ceo grandes, e incomprendido como interceptacións de cabezas Scud. Aínda que, no ceo de noite, Patriots parecía ser Scuds destruído con éxito, en Dhahran, non podería haber erro sobre o seu rendemento. Alí, o sistema Patriot radar perdeu o control dun entrada Scud e nunca lanzado debido a un fallo do software. Foi a israelís que descubriu que canto máis tempo O sistema foi ligado, canto maior sexa a diferenza de tempo tornouse, debido a un reloxo incorporado no ordenador do sistema. Preto de dúas semanas antes da traxedia en Dhahran, o Israelís informaron ao Departamento de Defensa que o sistema estaba perdendo tempo. Despois de preto de oito horas de carreira, eles notaron que o sistema foi facendo visiblemente menos preciso. O Departamento de Defensa respondeu dicindo todos as baterías Patriot non deixar os sistemas por un tempo longo. Nunca dixeron que moito tempo foi - 8 horas, 10 horas, 1.000 horas. Ninguén sabía. A batería de mísiles Patriot estacionado no cuartel en Dhahran E o seu reloxo interno fora danado en máis de 100 horas en na noite de 25 de febreiro. É monitor tempo cunha precisión de aproximadamente un décimo de segundo. Agora, unha décima de segundo é un número interesante porque non pode ser expresado en binario, exactamente, o que significa non pode ser expresada en calquera exactamente ordenador dixital moderno. É difícil de crer. Pero usar isto como un exemplo. Imos incorporarse o número un terceiro. Un terceiro non pode ser expresada en decimal, exactamente. Un terzo é 0,333 suceder ao infinito. Non hai ningunha forma de facelo con absoluta precisión en decimal. Isto é exactamente o mesmo tipo de problema que aconteceu en o Patriot. Canto máis tempo o sistema funcionou, o peor erro que o tempo se converteu. Despois de 100 horas de operación, o erro en tempo foi só cerca dun terzo dun segundo. Pero en termos de branco un mísil viaxando a Mach 5, que resultou nun erro de seguimento de máis de 600 metros. Sería un erro grave para os soldados en Dhahran. O que pasou é un lanzamento de Scud foi detectado polo alerta temperá satélites e eles sabían que o Scud estaba chegando na súa dirección xeral. Eles non sabían de onde viña. Era agora ata o compoñente radar do Patriot sistema, defendendo Dhahran, para atopar e seguir o mísil inimigo de entrada. O radar foi moi intelixente. Realmente controlar a posición do Scud e despois prever onde probablemente sería a próxima vez que radar enviou un pulso para fóra. Que foi chamado de o portón alcance. Entón, unha vez que o Patriot decide pasou tempo suficiente para ir cara atrás e comprobar o próximo lugar a este detectado obxecto, que vai volver. Entón, cando el volveu para o lugar incorrecto, non ve obxecto, e decidir que non había obxecto. Foi unha falsa detección e cae na pista. O Scud entrada desapareceu da pantalla do radar. E, segundos despois, el bateu no cuartel. O Scud matou 28 e foi o último despedido durante a primeira Guerra do Golfo. Traxicamente, o software actualizado chegou en Dhahran o día seguinte. E a falla de software fora fixado, pechando un capítulo de conturbada historia do mísil Patriot. Patriot é na verdade un acrónimo para "Tracking Phased Array Interceptar de Target ". Todo ben, entón un resultado moito máis triste de non moi comprensión deste mundo. E o takeaway, realmente, a partir da película é que a solución alí foi reiniciar o seu sistema de defensa antimísiles de cando en vez. E entón, de novo, un dos obxectivos deste curso, certamente nunha escala máis humilde que estas aplicacións, é ollos de todos realmente aberto para con exactamente como ir sobre máquinas de facer facer o que quere facer e como ir sobre iso correctamente, mentres que ao longo do camiño facendo iso así, de forma elegante, e así por diante. E así, hoxe, imos mergullar en un pouco máis diso, pero de xeito que non ir moi rápido, sobre todo para os menos cómodos, pero tamén para que se poida manter o interese do aqueles máis cómodo, imos comezar axiña cun pouco de resumo de algunhas desas ideas. E, de novo, pregunta, tanto en persoa ou en liña, se ten preguntas para que poidamos manter todos na mesma páxina. Así, o dispositivo CS50, paso rápido cara atrás, é o que, nas súas propias palabras? Todo ben se non ten idea do que estas palabras poden ser aínda. [Inaudível] Ok, entón unha interface universal para - que todos podemos compartir. Absolutamente. Así, poderiamos, por exemplo, dicir-lle para ir a algún web, a descarga deste software para Mac OS. Baixo este software para Windows, configurar en Deste xeito, e que. Pero a realidade é, entón, nos deparamos con moitos técnico apoiar cuestións. E tamén nos días de hoxe, moito do que está a ser feito do lado do servidor, no mundo da computación, especialmente cando se trata de desenvolvemento web e aplicacións web based, é na verdade moitas veces feito en computadores Unix ou Linux, ao contrario Macs ou PC con Windows. Así, entre os pros, entón, usar esa cousa chamada CS50 Appliance é todo nós imos ter o mesmo ambiente. Entón, todos están na mesma páxina, non importa cal hardware ten chegou ao campus con, pero tamén vai ser meter en exactamente o mesmo ambiente que vai empregar para extremo semestre, así como para o desenvolvemento web, así como no futuro para aplicacións reais do mesmo. Entón, máis concretamente, o aparello CS50 é unha peza de libre software que permite que executa un outro sistema operativo, Linux, neste caso, no seu propio ordenador, dunha fiestra. Agora non pode só baixar o aparello. Debe dun programa co que xogar ou realizar o aparello. E aquel anaco de software é xeralmente coñecido como un hypervisor. Hipervisores vir en forma de produtos como o VMware, Virtual Box, Parallels. Todos os tipos de empresas fan software libre e comercial, igualmente. O que podes ver no problema Set 1 son instrucións sobre como obter o software gratuíto co que a executar Appliance CS50. E unha vez que fai, vai ter, nunha ventá no seu Mac ou PC, un ambiente de traballo que se parece moito como este, onde el ten unha cousa-menú Inicio, como na canto esquerdo inferior. Ten unha carpeta Home ou directorio home, no ángulo superior esquerdo alí, unha lata de lixo, e así por diante. Entón imos separar os detalles necesarios como imos nós. Pero agora imos comezar a mergullo en C. Entón C é a linguaxe de programación, semellantes en espírito á Cero, pero moito menos gráfica, pero, ironicamente, lonxe máis poderosa, unha vez que comeza ilustrado con el. Así, en C, escribimos os programas, escribindo código fonte, que é esta sintaxe do inglés, semellante ás medias demostración de que fixemos a última vez que lle permite expresarse con bastante precisión, se arcanely, para o seu ordenador. Entón, que tipo de produto de software que realmente precisa para escribir programas nunha linguaxe como C, na base da nosa conversa luns? [Inaudível] OK, só precisa un editor de texto. Non precisa de ningún software especial per se para escribir programas. Só precisa un editor de texto como o Bloc de Notas, en Windows, TextEdit no Mac, ou algo chamado gedit, no mundo da Linux, que imos empregar aquí. E é iso, escribir programas. Pero a escrita é só a metade da ecuación. Debe entón executa-los. Pero, a fin de executar programas - non pode executar código fonte. Vostede, en vez de facer o que a el primeiro? Si DAVID J. Malan: Debe recompila-lo. E doutra persoa, a compilación do código fonte significa - [Inaudível] DAVID J. Malan: Exactamente. Traducíndose para ceros e uns. Porque todos nós, nestes días, ten ordenadores que posúen procesadores, case todas as cales son feitas por unha compañía chamada Intel e Intel Inside, significa que hai está dentro do seu cerebro ordenador, coñecido como o CPU. E unha das cousas que o cerebro fai é, el sabe Como entender os patróns de ceros e uns. El sabe o patrón de bits representa diso, o que estándar representa subtrações, o patrón de bits representan a impresión, e creando un son audible. Así, en resumo, o procesador, xunto co sistema operativo, que é unha peza de software que roda encima do CPU, por así dicir. Xuntos, estes dous anacos sabe como executar programas que Nós seres humanos escribir. Entón, se eu vou para o Appliance CS50 aquí, eu teño abrir un editor de texto e podo acceder a este nun par de formas. I pode ir ao menú, Programación, e entón eu podo seleccionar - Non, non este menú. Eu podo ir Accesorios / gedit aquí para abrir meu editor de texto pouco. Ou, máis simplemente, que pode facer clic nesta icona pouco no fondo canto esquerdo. E agora eu teño ese ambiente aquí. É moi reminiscente de un editor de texto simple, con só unha ou dúas diferenzas. No cume, onde está o cursor piscando agora, este é o lugar onde Eu podo comezar a escribir o meu código. No fondo é esa cousa chamada xanela de terminal. E que tipo de cousas que podo facer neste chamado fiestra de terminal? [Inaudível] Ok, entón eu vou executar comandos. E algúns dos comandos que transcorreu o luns foron un pouco enigmáticas no inicio, pero ls á lista, cd para o directorio cambio, rm para eliminar. Entón, é unha especie de xeito old-school de navegar no seu ordenador, usando só o teclado e comandos textuais, e non, en xeral, utilizando un rato. Pero imos ver, en pouco tempo, iso realmente nos dá unha pouco máis de potencia e un pouco máis de precisión coa que nos expresar. E entón, aquí á esquerda, nós só estamos indo a ver, Como comezar o software de escrita, un pequeno resumo do programa que temos escrito na esquina superior esquerda. Pero imos ver iso de novo antes de tempo. Entón, imos facer algo moi sinxelo aquí. Deixe-me primeiro ir adiante e vai Arquivo, Gardar, e eu son só Vai facer clic en jharvard aquí, máis á esquerda, e jharvard é, de novo, o nome para o cartafol do meu fogar, a miña arquivos persoais, eu agora sendo John Harvard, como todos vostedes en breve será John Harvard neste ambiente. El ten este directorio Home, Meus Documentos e así por diante, que quero gardar agora este ficheiro dentro Entón, eu vou chamalo hello.c. Entón eu estou indo a ir adiante e faga clic en Gardar e, agora, o que eu teño aquí é unha guía chamado hello.c, tanto como outro tipo de editor. Entón, agora deixe-me ir adiante e comezar a escribir un programa. int main (void). E entón eu fixen a última vez, printf para impresión formatado, ("Ola, mundo!" );. Case completa. Pero eu estou sentindo falta dun par de detalles. O que falta a partir deste programa que eu realmente teño para que realmente compilar? Si [Inaudível]? DAVID J. Malan: Si, entón eu teño incluír o estándar I / O biblioteca. Así que ir por riba de inicio, entón eu só vou facer un espazo para el alí. E eu vou facer # include. E teña en conta os corchetes angulares alí. E como un aparte, gedit é un usuario pouco agradable, se ás veces, un pouco confuso, no que intenta axudar á súa ollos entender o que se aliñan co que. Así, o feito de que o meu cursor está ben próximo a este ángulo soporte, observe como está destacando o ángulo outro soporte máis un regalo. E iso é só para chamar a miña atención para o feito de que eu teñen simetría. E simetría na programación xeral é bo. Do mesmo xeito, se eu pasar o meu cursor fin, observe como o claves de liña para mostrar que, si, eu teño un aberto e un pechado, por así dicir. Todo ben, e podo facer outra cousa. Non é estrictamente necesario, pero unha boa práctica, para dicir voltar 0. E 0 retorno fai o que para nós aquí? Ou significa o que? [Inaudível] DAVID J. Malan: Pero nada está mal. E, francamente, é difícil para moito para dar mal nun programar ese curto. Entón, eu só estou sendo super explícito que está todo ben. Eu, o ser humano, cando executar este programa, probablemente nunca ver que 0. Xeralmente, estes números que están sendo retornados de inicio apenas elevar as súas cabezas para os seres humanos cando algo sae mal. E comeza un pouco de pop up de erro do sistema dicindo, un, dous, tres, ou calquera que sexa o número que se foi realmente devolto. Entón, calquera cousa de malo iso? [Inaudível] DAVID J. Malan: Entón este non é tanto un erro funcional pero unha estética. Eu probablemente debería poñer un carácter de nova liña alí no final desta cadea, para que realmente se move o cursor a seguinte liña, o programa só parece un pouco máis bonito. Entón, agora deixe-me ir ata a miña ventá de terminal e zoom para atrás dentro E esa cousa aquí, é chamado de liña de comandos. É só me lembrar que eu son, jharvard @ aparello, onde aparello é o nome do computador no que estou. Entre parénteses está presente til, o símbolo rabisco, que representa o que? Audiencia: directorio Home. DAVID J. Malan: directorio Home. Entón, iso é só unha notación abreviada para dicir que están en seu cartafol persoal onde todos os seus arquivos van por defecto. Entón, agora, aquí, podo escribir ls á lista. E a única cousa que eu vexo aquí no momento é hello.c. E iso é bo, porque eu escribín iso. Entón deixe-me ir adiante e fai Olá E repare que eu non estou escribindo facer hello.c. En vez diso, eu só estou escribindo o nome base do ficheiro, Olá E facer, como vimos na segunda-feira, só vai deducir que quero o. arquivo c. Entón agora eu escriba facer Olá Agora eu vexo este comando moi longo e vai continuar vendo iso de novo e de novo. Pero, para ser bumbum, por suposto, a palabra que só apareceu, Que é o compilador real. Facer é só unha utilidade de construción. É só un programa máis agradable que me salva, o longo prazo, de ter que escribir tedioso longo mandos como ese. Entón pode realizar Clang manualmente. Podes escribir todo isto manualmente. Así queda moi tediosa. E así que é só un programa que simplifica a nosa vida e executa comandos máis complexos para nós. Todo ben, entón agora o ficheiro que eu debería ter no meu directorio actual? Non só hello.c, pero tamén Olá Entón, se eu quero correr Ola, lembro que eu digo punto barra, onde os medios de punto ir a carpeta actual, onde queira que son, a continuación, executa o programa chamado Ola, e de feito, agora, Teño Ola mundo. Todo ben, todas as preguntas sobre o fluxo de traballo ou a sintaxe de o que nós fixemos? Todo ben, entón imos levar as cousas por riba de un entalhe novo. Polo tanto, este foi underwhelming só para escribir un programa que só xa di Ola, mundo. Entón, nós cambiamos, o luns, para dicir, Ola, David. É un pouco máis persoal, pero tan difícil codificado como primeira versión. Polo tanto, non todo o que convincente. Pero existe, en C, certamente funcións ademais impresión, funcións que permiten obter datos introducidos polo usuario. E o xeito que fixemos iso, o outro día, foi o seguinte. Antes de que realmente imprimir algo, comecei a algo do usuario. Entón deixe-me facelo de novo. Cadea s, onde s é só o nome dun arbitrario, aquí, por un cadea, é igual a GetString. Entón, o que foi GetString? É, obviamente, recibe unha cadea, con base no seu nome. Pero o que é máis tecnicamente? É unha función. Polo tanto, é unha función que non ven con C per se. CS50 equipo escribiu isto. E así, para usar isto, non pode simplemente engadir stdio.h, Tamén cómpre incluír o que? Si Entón cs50.h, que é só un arquivo que escribiu hai uns anos. Nós instalado no aparello para o lado todos os ficheiros por defecto. E así, estas primeiras semanas de clase, usaremos isto só para simplificar o proceso de facer moi básico cousas como a entrada do usuario recibindo. Porque, como veremos algunhas semanas, a entrada do usuario entrar en un linguaxe como C é sorprendente complexo, especialmente porque non sabe con antelación, xeralmente, como moita cousa que o usuario vai escribir dentro E cando non sabe a cantidade de datos que esperar, non saber canto de memoria para reservar. E se realmente ten un usuario que está intentando contraditorio para invadir o seu sistema, frear o ordenador, así, xeralmente o primeiro método de ataque é, así como eu fixen en Luns, escriba unha secuencia enteira longa de caracteres aleatorios, presione Enter, e ver o que rompe. Porque xeralmente, se unha quebra do programa, que apunta a un fallo de seguridade, potencialmente. El certamente apunta para ti, programador, tendo feito unha erro, pero máis perigoso, que podería ter feito un relacionadas coa seguridade erro, e, xeralmente, nós imos ver que é así que as máquinas están comprometidos para este día, tanto no mundo da web e programas no liña de comandos, coma este. Todo ben. Así cadea s é igual GetString. Entón, máis concretamente, agora, o que é que a liña 6 facer aquí? Así, a función do lado dereito está cadea, leva cantos argumentos? Okay. Entón ningún. A sanidade pouco comprobar. Un argumento, unha vez máis, é só unha entrada a unha función de cambiar seu comportamento estándar de algunha maneira. Pero, neste caso, eu non quero cambiar o comportamento dos GetString. Eu só quería ter unha secuencia. Entón eu coloque nada nos parénteses, e entón eu coloque un coma demarking o fin da liña de código. Agora, o signo igual non significa igual, per se. Isto significa asignación, o que significa poñer o que queda emitidas dentro dereito de todo o que é do lado esquerdo. Entón, á esquerda, dicimos que temos declarado cadea chamada s. E máis concretamente, temos memoria alocada dentro que nós imos poñer os bits que representa unha secuencia de caracteres. Pero para hoxe, nós alocamos ou declarada unha cadea. Todo ben. Entón, agora, unha vez que eu fixen iso, quero conectar o valor de s non, o valor de David. Entón, iso é malo por que? Entón, este é só literalmente o s hard-Coded. É para dicir "Ola, s", o que non é o que quero. Entón, podo facer iso. O sinal de porcentaxe é un espazo reservado, pero agora eu teño pasar para imprimir un segundo argumento. Lembre que os argumentos para funcións son separadas por comas, para comas que vén aquí eu coloque tras esta é a carta. E, neste contexto, agora, s é a variable e printf, ao recibir as dúas entradas - a cadea da esquerda eo nome variable á dereita - que vai conectar o último para a antiga para nós, e só imprimir unha secuencia de caracteres contén fermosa agradable que é o que nós ingresaran dentro Entón, imos tentar iso. Indo para adiante e zoom out, de volta a miña xanela de terminal. Aumentar o zoom na parte inferior aquí. Insira facer Olá Clang parece ser reprise. Eu estou indo a escribir. / Ola, Intro. Nada parece estar a suceder aínda, pero é neste ventá que eu poida escribir algo como Nate, Intro, e agora temos Ola, Nate. E podo facelo de novo con Rob, e así por diante. Polo tanto, agardamos que agora este programa está comportándose como eu pretendo. Agora non, todo o usuario que agradable. Eu non teño idea o que está a ser esperado de min. Entón, nós certamente podemos limpar isto un pouco. Deixe-me volver aquí e, en vez de só mergullo e pedindo ao usuario para unha secuencia, deixe-me dicir explicitamente o usuario o que eu estou esperando. Entón printf ("Introduza unha cadea:" ); Entón non variables aquí. Non hai sinais de por cento. Só a frase simple Inglés. Déixame ir ao fondo aquí e siga novamente o meu programa. Pero nada parece mudar. Por que? Eu teño que recompilar. Así erro fácil de cometer. Pero ten que non só gardar o arquivo, pero recompilar o programa. E así se eu volver a correr facer Ola, agora Clang executado. Agora podo executar. / Olá E agora eu vexo "Introduza unha cadea:". Okay. Agora é un pouco máis user-friendly. Nate, Intro, Ola, Nate. Ben, imos tentar de novo e comezar a pensar sobre casos de canto. Así como scratch, é encorajado ou están a ser encoraxados na especificación do tipo de pensar sobre o que podería ir mal se non prevista todo o que o usuario pode facer. Erros, polo tanto, podería ocorrer. Entón, introduce unha secuencia - o que é un caso de canto aquí? ¿Que é un escenario que eu, o programador, non pode ter anticipado? Si Okay. Entón, o que se eu escribir un número coma este? Todo ben. Entón, el aínda funciona. Gramaticalmente non ten sentido. Pero polo menos o programa. O que é outro caso esquina? Algo que eu non esperaba. Si? Okay. Entón, nós poderíamos facer algo como un número moi, moi grande. Entón, imos facelo aquí. Deixe-me afastar por un segundo, deixe-me salientar. Non se pode copiar e pegar aquí. Todo ben. Entón eu non podo copiar e pegar esta xanela de terminal, así que imos apenas simula-lo. Deixe-me afastar, vai romper. Eu non vou facer iso por moito tempo, porque non vai realmente romper neste programa. Pero podería. Intro. Pero iso non aconteceu. Todo ben. Pero é un caso de canto xenuíno. E a única razón que se comportou correctamente, para falar, é porque a función GetString CS50 é realmente concibida baixo o capo, como veremos algunhas semanas, para reservar automaticamente RAM máis e máis, máis e máis de memoria do sistema operativo, cando se entende, wow, realmente escribiu algo moi longo. Agora, iso é un pouco de mentira. Se realmente parou por un bo tempo e eu escriba algo así como 5 millóns de carácteres no teclado aquí, ou realmente bateu copiar e pegar un pouco, que moi posiblemente podería facer que o programa trabe. Só un pouco máis difícil de simular que, cunha finita cantidade de tempo. O que é outra esquina caso poderiamos tentar? Si? Si Entón, por que non responder a nada? Entón, nós realmente temos que tomar algunhas medidas, porque doutra forma o programa vai sentir alí piscando durante todo o día. Pero se eu só prema Intro - OK, agora, aínda parece mal. Non falla, pero quizais haxa agora unha oportunidade de iniciar a implantación dun programa máis rigoroso que realmente comprobar. E se a cadea, a sentenza, a palabra que escribiu ten lonxitude 0, así, talvez debería berrar co usuario ou dicir-lle para introducir unha cadea de novo, de xeito que realmente conseguir o que se parece un comportamento correcto e non só a supervisión completa da miña parte. Pregunta ao redor? Número decimal. Polo tanto, pode probar iso tamén. 1,10000005. Parece que vai só traballar realmente ben. E que, en realidade, é esperado. Aínda que pode ter ingresaran o número alí, ou un maior número anterior, entende que cando estamos escribindo usuario de entrada e estamos usando a función GetString, non importa o que eu estou escribindo parece un número. Lembre que de acordo co ASCII, todo o seu teclado ten un valor numérico, que pode ser mapeada a unha personaxe, un char. Polo tanto, neste caso, aínda que eu pode introducir un número, o ordenador vai pensar nela, por así dicir, como unha cadea - algo que se parece un número, pero é en realidade non o número. Pero iso é realmente un xeito perfecto, porque agora podemos De feito, a transición para escribir programas que usar outros tipos de datos. Así, ademais de usar caracteres, ou mellor, ademais de utilizar cordas, entender que teñen outros tipos de datos en C, así como na noutros idiomas. Un char, como o nome suxire, é só un personaxe único. A flutuación é un valor de punto flotante, e iso é só unha fantasía forma de dicir un número real - algo que ten un decimal momento en que algúns números á esquerda e / ou á dereita. Un int é un enteiro, que é só un número como 123. E agora o máis interesante son cousas como parella. O que dixemos un dobre foi a última vez? E 64, non. Así, mentres normalmente un float é de 32-bit - por iso é tanto tempo na memoria, el usa 32 ceros e uns representan valores - un dobre é, literalmente, o dobre, o que significa que pode representar números grandes ou pode representar números máis precisos. Entón vostede pode ter máis números despois do punto decimal, pero como o compañeiro dixo no vídeo, incluso algo simple conceptualmente como 1/3 non pode ser representado con precisión por un ordenador, porque finalmente se executar para fóra de bits, e polo tanto, só se pode facer .33333333 tantas veces, en que punto só teño que dicir que estou fóra de representación espazo, eu teño que chama-lo só un día e representa-la un tanto imprecisa así. E un longo tempo - nome estúpido, pero é porque non hai un tipo de datos coñecido como un longa en C, que casualmente é moitas veces 32 bits, así como un int é de 32 bits, pero un longo tempo e xeralmente 64 bits. Entón, isto significa só que pode representar maior números que iso. Todo ben. Entón, se nós realmente queremos comezar a representar as cousas, pode ter que tipos máis sofisticados e é por iso que temos cadea. Entón, na biblioteca CS50, que arquivo chamado cs50.h, temos realmente declarado un tipo de datos, por así dicir, chamado cadea, pero cadea non existe na realidade. Isto é, de novo, unha desas capas, imos pelar de volta nunha semana ou dúas e xoga-lo fóra, e realmente mirar debaixo da capa en que unha secuencia realmente é, e como é representado. Tamén imos ollar para valores booleanos. Entón, o que era un bool no contexto do scratch? É certo ou falso. Entón é só un valor que é verdadeiro ou falso, ligado ou desactivado, 1 ou 0, con todo quere ver no mundo. Así, en C, grazas á biblioteca CS50, que á súa vez inclúe outra biblioteca debaixo do capó, temos acceso a un tipo de datos que se denomina bool, que será literalmente nos permiten asignar os valores verdadeiro ou falso para cousas nun programa. Entón, imos adiante aquí e escribir un pequeno programa que fai algo que inclúen números vez. Entón deixe-me volver a Appliance CS50, deixe-me ir adiante e crear un novo ficheiro chamado aquí - imos só dicir algo simple, como math.c. Todo ben. E agora vai ata o cumio do meu programa, eu son vai facer o de sempre - # Incluír, para que eu poida usar printf, int main (void) - imos volver, finalmente, o que significa int aquí, o que significa baleiro aquí, pero polo de agora, só sei que ten que iniciar programas como este. Agora eu estou indo a ir adiante e dicir algo un pouco diferente - printf ("Déame un número:" );. Entón eu vou facer int n = GetInt, porque Acontece que GetInt é outra función na biblioteca CS50 Ademais GetString. E agora eu vou facer algo estúpido, como "grazas a% d ", por enteiro decimal, e entón n coma, e a continuación, voltar 0. Entón, de novo, voltar 0 non ten nada que ver co número que eu son pedindo ao usuario para. Só significa que, ao final de todo, presuntamente, está ben. Entón deixe-me ir ata a miña ventá de terminal aquí. Deixe-me facer escribir matemáticas, entrar. E algo está mal. Facer matemáticas non funcionou. Aquí está a primeira das nosas mensaxes de erro. Por que? A enigmática pouco, pero - Si Entón cs50.h. Entón, de novo, especialmente no inicio, vai escribir o seu primeiro programa para pset 1 en seccións, en horario de oficina, e francamente, vai ser esmagadora, por veces, o que isto están realmente dicindo. Pero vai entender moi rapidamente comezan a caer en baldes en que este significa que xa parou un do # inclúe, na parte superior do ficheiro. E Clang, compilador, está informando sobre iso Declaración dicindo, en vez fantasiosamente, implícita de GetInt función non é válido. Todo ben. Entón, o que significa isto? Significa só que implicitamente declarado en GetInt a sensación de que non explicitamente declarado. Para declarar explicitamente int, ten que ensinar Clang que existe. E a solución moi sinxela para iso é ensino-lo por incluíndo este ficheiro, cs50.h, no a parte superior do seu arquivo. Porque, literalmente, o que non é # include di Clang moi bonito para ir atopar o ficheiro chamado cs50.h, copia, pegalo automaticamente na parte superior do meu programa para min, e despois converter o código fonte para ceros e uns. Pero iso, obviamente, moi tediosas se nós, humanos, tivo ir copiando e colando eses arquivos grandes en todo momento, así # include só fai todo iso automaticamente, sen turvando o meu código con alguén da biblioteca. E unha biblioteca é só outro arquivo que contén funcións e outras cousas que alguén teña escrito, que somos alavancagem para o noso propio ben. Todo ben. Imos tentar de novo. Facer matemáticas. Intro. Bo De xeito que parece funcionar. Entón deixe-me executar matemática;. / Matemáticas. Introduce me dá un número, 123. Grazas pola 123. Agora imos tratar de outro caso de esquina. Unha cadea é moi xeneroso, porque un secuencia pode ser calquera cousa. Pode ollar como números, parece caracteres, parecen palabras. Pero un int é un int. Entón agora eu son o autor difícil, e está dicindo "Déame un número, "o que se eu tentar facer algo como 0,1? Ben, este é un número, e é consistente coa código que usei aquí, pero debaixo do capó, eu son de curso mediante o GetInt función. Entón imos ver o que acontece. Intro, novo intento. Todo ben. Deixe-me ser difícil e só prema Intro novamente. Intro, Intro. Entón agora parece que GetInt é un pouco máis poderoso do que GetString. Nós, o equipo, aplicado de tal forma que, se nós observamos non ten nos deu un int - e un int é un número decimal ceros conteñen, uns, dous, tres, catro, cinco, seis, Setes, oitos ou noves. E é iso. Sen puntos decimais, sen personaxes, sen puntuación. Parece que temos que cooperar. Entón deixe-me tentar catro, cinco, seis, e que me deixa completamente. Entón, realmente, ser anal aquí, eu probablemente debería dicir "Deixa-me un enteiro ", a fin de transmitir ao usuario exactamente o que eu pretendo. Agora imos pensar sobre debaixo do capó. Non imos ollar como cs50.h é aplicado hoxe, esa biblioteca. Pero se el segue dicindo que repetir, repetir, repetir, que a programación construír estou presuntamente usando debaixo do capó para implementar isto? Entón, só un loop, non? Unha das ideas máis simples que vimos en scratch. The Forever construír, a repetición construír. Presuntamente, neste programa, baixo o capo, mesmo que está escrito en C, e non de cero, está facendo algo chamado equivalente para sempre, se o usuario non ten ingresaran en un número enteiro, digamos repetir, repetir, repetir, repetir, de xeito entón, finalmente, cando nós comezamos un enteiro, entón romper con ese ciclo. Entón, o que outras funcións que podemos utilizar aquí na biblioteca do CS50? Ben, máis ou máis obvias, polo menos con base na tipos de datos que agora sabe que existen. Implementar GetString, GetInt, pero en todo o primeiras semanas do termo, tamén se pode usar e GetFloat GetDouble GetLongLong e, a fin de obter exactamente o tipos de datos que quere. Porque o detalle clave aquí é que ao contrario de algunhas linguas, como Python e Ruby, onde non tes que necesariamente declarar o tipo de datos dunha variable - Non ten que dicir ao ordenador cal o tipo de material está indo a poñer na variable - en C, ten que ser sempre tan precisas. Entón, se quere unha variable chamada n, un anaco de almacenamento que, neste caso, pasa a ser de 32 bits, por convención, é ten que dicir ao ordenador que eses bits son vai almacenar un número - non un personaxe, e non unha cadea, non un float. E este aborda a cuestión que efectivamente correu a semana pasada. Se estamos usando ceros e uns números para representar non só Pero, como números e BS e Cs, como no mundo é unha ordenador vai saber que este patrón de bits, en realidade, representa o número 65, en vez de representar a letra A, que por coincidencia, de acordo coa ASCII, lembro, era equivalente a 65? Entón, eses tipos de datos proporcionan o contexto para o ordenador, de xeito que se sabe se estes bits deben ser interpretados como unha int ou como unha cadea. Calquera dúbida, entón, sobre este asunto? Si? DAVID J. Malan: Boa pregunta. Se tirarmos stdio.h, imos gardar o arquivo - deixe-me ir ata a fiestra de terminal e executar facer zoom matemáticas, e escribir - agora eu teño un erro distinto, porque estou implicitamente declarando que funciona agora? Printf. Entón agora eu creei un novo problema, cuxa solución é esencialmente a mesma. Eu teño poñer isto de volta. Audiencia: [inaudível] DAVID J. Malan: Ah. Entón, se eu sacar - Ok, si. Entón, se eu eliminar a inclusión do padrón de E / S biblioteca se aquí, e entón está dicindo que se librar de printf, obter librar de printf? Si Isto debería funcionar, porque eu non estou máis usando calquera - berros. Acaba de mentir? Ah, ok. Iso non vai funcionar por mor dun novo erro que acaba de publicar. E este é un pouco máis auto-explicativo. Cal é o problema? Non utilizados n variables. Entón, ese erro é o resultado de termos configurado o aparello a ser particularmente pedante, para realmente gritar vostede por cada erro posible, aínda que sexa o tipo de un erro non fatal como este - é realmente como un gran tratar que lle atribúe un int, poñer un número no que, a continuación, só fixen nada con el? Así, funcionalmente, non. Iso non vai romper o programa. É só unha especie de idiota, non? Non hai valor a pedir para que o número, almacenado nunha variable, se non vai facer nada con iso, se imprimir lo ou garda-lo. Polo tanto, neste caso, é Clang recoñecendo tanto, e está dicindo non utilizados n variables. Así, podemos solucionar isto, se realmente queremos. Pero, de novo, isto non é unha boa programación agora. Entón, eu só podería facelo - baixar aquí, deixe-me limpar a pantalla, facer matemáticas. Que funciona. Agora podo correr o meu programa de matemáticas, ten entrada - Ben, iso foi malo. Recibe a entrada, e iso é todo o que fai, neste caso. Entón, en realidade, imos tratar outro ángulo caso de que non creo máis cedo. Neste caso - aquí, imos volver ao que é un pouco máis user-friendly. Deixe-me volver aquí e facer executar as matemáticas novo. Oops, o que eu fixen de malo? Ten que rodar máis para atrás. Okay. Agora estamos de volta ao estado orixinal, onde todos e espero que ben. E agora, se eu executar matemáticas, 123 parece funcionar. Pero este non é realmente unha proba eficaz, só para dicir ok, iso funciona. 789, que funciona. Tempo para presentar. Porque hai casos de canto outros aquí. Unha secuencia realmente non nos dan moito problema, escribindo nun morea de caracteres. Pero e se eu escribir isto? Bater o número 1 dun monte, moi por aquí - todo ben, está quedando un pouco aburrido, entón eu vou deixar por aquí, e eu vou bater Intro. O que diaños pasou? Polo tanto, esta pode, en realidade, ser explicado. Entón levou-o como binario? Un bo pensamento, pero non, non é o feito de que tomou como binario, porque de feito, que era só unha especie de coincidencia. Podemos facer iso de novo. Polo tanto, non hai 2 no sistema binario, que é probablemente o suficiente de calquera maneira. Intro. De modo que non era o problema. O que máis? Exactamente. Entón, creo que volta para o que un int realmente é. É de 32 bits que colectivamente son interpretadas como un número. Se ten de 32 bits, o que significa cada un dos bits pode ser un 0 ou un 1., 0 ou 1 Entón, isto significa que hai dúas posibilidades para este bit, dúas posibilidades para iso, dúas posibilidades para iso bit - de xeito que é 2 veces 2 veces - de xeito que é 2 á potencia de 32 é o número total de permutacións de ceros e uns, se ten 32 espazos reservados, ceros ou uns, na fronte de ti. Entón, se eu teño 2 a 32, matematicamente, que é o que? Entón é moi. E 4 millóns, máis ou menos. E 4 millóns non parece ser o que foi impreso aquí. En realidade, iso parece máis preto de 2 millóns. Pero isto non é unha coincidencia. O feito de que o ordenador teña interpretado mal o meu número enorme, miña secuencia enorme duns e, a continuación, a miña secuencia enorme de dúos, como preto de 2 millóns, é explicada como? Hai un límite para o int. Hai un certamente un valor máximo que pode representar. Pero normalmente é 4 millóns, non? 2 ao 32 é de aproximadamente 4 millóns, que parece ese é o maior número. Entón, non o resto, pero un bo pensamento. Números negativos. Entón se ten 4000 millóns cousas que se pode representar con esas varias permutacións de 32 e 0s 1s, ben, é lóxico que, humanos, pode querer representan non só números enteiros positivos pero enteiros negativos. E, de feito, esta é a suposición de que o C fai. Así, con 32 bits, pode representar aproximadamente negativa 2 millóns de todo o camiño ata a positivo 2 millóns. E por iso, neste caso, o que estamos realmente a ver é só á marxe da capacidade do noso enteiro, e temos, polo que para falar, rebordou un enteiro. Tentamos empinar máis bits nel que pode realmente se encaixan. Así, o resultado final é que esencialmente ten todos os bits 1. Nós capotou todos os nosos bits, nós tratamos de representar o maior número posible, pero non é claramente case grande abondo para representar as dúas cousas que eu teño só escribiu dentro Si? Audiencia: [inaudível] DAVID J. Malan: Boa pregunta. Por que non podemos simplemente representar que negativo asinar como só un personaxe? Entón, nós absolutamente posible, e entón poderiamos salvar un bit adicional. Pero aínda vai ter que representar ese trazo e que vai custa-lle polo menos algo, presuntamente un pouco. Entón, si, nós poderíamos ter 32 bits usados ​​para o noso número, pero agora necesitamos outro pouco utilizado para o noso guión símbolo, o signo menos. Polo tanto, agora temos 33 bits valores, o que poderiamos facer, pero é só non é o camiño que está feito. Fixemos un xuízo anos chamada atrás, 32 bits é unha especie de unidade de medida aquí. Entón, nós estamos indo a usar un destes bits de forma eficaz para representan negativa, e 31 bits para representar o número. Outras preguntas? Todo ben. Iso é moi. Por que non imos ir adiante e ter a nosa pausa de cinco minutos aquí? Todo ben. Entón, de novo, para non esaxerar as aplicacións matemáticas de programación, imos arrincar fóra este exemplo antes de se cambiar a outras construcións, só porque ha ilustrar algúns puntos comúns tropezo nalgúns dos o básico cando se trata de programas de escritura. Neste caso, facendo expresións aritméticas que teñen algún relevancia interesante para ver a sintaxe. Polo tanto, esta é só unha fórmula coa que pode converterse temperaturas de Fahrenheit para Celsius. Se non lembra, esta é só a fórmula. Entón, se chame en Fahrenheit valor de 32 graos, o que é conxelación, que vai ser de 32 ata 32 é 0, e, de feito, 0 en Celsius e tamén de cero. Entón sanidade rápido check alí - que é a fórmula familiar. Deixe-me ir ao aparello, porén, e comezar escribir un programa chamado, como f2c, "Fahrenheit para Celsius punto c ". E na parte superior aquí, vou comezar con # include stdio.h, e eu vou facer int main (void), e de novo, imos voltar no futuro, como o que significa int alí e que baleiro significa que hai. E agora déixeme ir adiante e aplicar un programa que esencialmente fai esta conversión para nós. Entón printf, imos dicir, a temperatura en graos Fahrenheit. E entón deixe-me ir adiante e obter o valor do usuario. Que tipo de valor que eu debería recibir do usuario, se eu queira para me dar unha temperatura en graos Fahrenheit? Si? O que propón? Si Entón boia sente bastante razoable. Temos de novo, só algunhas opcións que vimos ata agora. Temos cousas como char, float, double, int, longo tempo, bool cadea,. Entón, destes, boia sente bastante razoable. Nós poderiamos usar un dereito, dobre, porque se nós realmente queremos representan a temperatura dun ser humano - 98,60000 - poderiamos usar 64 bits para facelo, pero parece que esaxeración para a temperatura. Entón imos ir con float. Agora eu teño unha variable. Só para manter as cousas simples, eu vou chamalo de f, mais eu podería só como correctamente chamalo de temperatura, pero ou é bo. Entón flotar f = GetFloat. Así que eu agora teña decidido usar GetFloat, porén, eu preciso facer unha corrección. Si Entón, necesitamos # include , en caso contrario, o compilador é vai berrar coa xente. Agora que eu teño un coche alegórico, deixe-me ir adiante e facer o de conversión. Entón, primeiro, deixe-me tamén adquirir o hábito de aquí comentando o meu código. Entón, de novo, un comentario é só unha notación para o ser humano que é non forma parte do programa en si, senón un, axuda a entender o que fixo na mañá seguinte, ou o próximo mes, axuda o seu compañeiro de ensino entender o que fixo ou o que quere facer, por iso é práctica xeralmente moi boa. Cada poucas liñas de código, escriba un comentario vostede ou o seu compañeiro. Entón, aquí, eu vou dicir: "Pregunta ao usuario de temperatura." Non ten que ser unha frase completa, só unha frase curta. Pero a idea detrás comentando en C é que cada un dos seus comentarios deben capacita-lo - ou, digamos, un TF ou un compañeiro - a roçar o seu programa e saber exactamente o que fai, por non tanto a lectura do código, pero lendo os comentarios, que debe ser sucinta e clara. Todo ben, entón agora déixeme ir adiante e dicir: "Converter Fahrenheit para Celsius. "Entón, eu estou indo a ir adiante e facer, digamos, float c. Imos manter Celsius como un valor de punto flotante. E deixe-me dar unha facada no presente. A fórmula é, de novo, aquí enriba. Como 5 / F 9 veces menos 32. Entón, imos facelo. Entón, 5 dividido por 9, de menos - Oops, eu estraguei todo xa. Equipos. Entón, 5/9 F menos 32 veces. Entón F menos 32, punto e coma. E agora, aquí abaixo, eu estou indo para adiante e dicir, imprimir resultado. E esa parte é doado. Printf. Cómo fago para imprimir ese? Ben, eu podería dicir "Ese número Celsius é% f \ n", só para algunhas estética. E entón, que o valor que quero conectar aquí como printf segundo argumento? Okay. Entón, só c. Entón, imos comezar con iso e despois é só devolver 0. Unha vez máis, non ten nada que ver coa matemática. Significa só que todo está ben. Agora, iso é correcto, este programa? Todo ben. Entón eu fixen algúns erros. Mesmo se non ten idea do que é programación, pode clasificar de inferir de volta á escola primaria que o erros aquí podería ser. O que é un dos primeiros? Audiencia: [inaudível] DAVID J. Malan: Yeah. Entón, nós estamos falta parénteses. Foi deliberado que eu fixen parénteses na charla desprazar aquí, porque hai realmente esa noción de orde de operacións, ou precedencia, que determinadas operacións - multiplicación - teñen maior conexión, teñen maior precedencia, que cousas como a suma ou a resta. Entón, nós temos feito isto por anos só para deixar claro exactamente operación matemática que debe ser feito primeiro. Entón eu probablemente debería imitar exactamente isto. En caso contrario, o ordenador é, presumiblemente, vai facer algo así como dividir 5 por 9, a continuación, multiplicar F, a continuación, restar 32 da cousa toda. O que non é, de feito, o que queremos facer. Entón imos parenthesize. Imos engadir meus parénteses aquí, parénteses aquí. Imos poñer iso aquí. Aquí, eu só notei outro erro que cometín ao longo do camiño. Si? Audiencia: [inaudível] DAVID J. Malan: Ah. Bo Entón, temos de feito o mesmo número enteiro cuestión da división de antes. Eu corrixir isto, imos ver o que o síntoma é. Pero nós imos ter que corrixir un outro erro aquí. Si? Audiencia: [inaudível] DAVID J. Malan: si. Entón, erro estúpido que eu fixen, pero incriblemente importante. O ordenador non vai só pechar os ollos e deixar F-me usar capital, cando realmente declarou a variable como un f minúsculas aquí, na liña 8. Entón eu teño corrixir na liña 11 capitalización meu, que un pouco, era un F maiúsculo por erro. E aquí? Se isto minúsculas tamén? Debería ser, pero iso é unha coincidencia. Que f% non ten nada que ver coa variable. Entón, só para ser super claro aquí, deixe-me ir adiante e renomear iso, brevemente, "temperatura". Deixe-me o nome esta "temperatura". Deixe-me cambiar o nome deste. Porque, de novo, f% globalmente significa, "flotando valor do punto." Non ten nada que ver coa miña variable. Pero "temperatura" en todo o lugar é un pouco prolixo, entón eu vou volver para o meu s "f" minúscula. Agora, deixe-me ir adiante ata a miña ventá aquí. Fai f2c - que foi, unha vez máis, o nome arbitrario I deu a este ficheiro. Parece feita. Déixame correr f2c. Intro. Temperatura en Fahrenheit - imos facer un camiño fácil. 32. OK, corrixir. Pero, se eu fago agora 212 a ebulición - maldita. Todo ben. Entón, claramente non corrixir, se o TF intenta polo menos, dous valores. Entón, cal é o problema aquí? Ben, xa puxo o dedo sobre o que é o problema. Pero por que é que o caso? Ata aquí, cando eu estou facendo a matemática de 5 dividido por 9. Así, conceptualmente, é perfectamente correcto. Totalmente consistente coa fórmula. Pero os computadores só fan exactamente o que dicirlles o que facer. E o que estamos efectivamente dicindo o ordenador aquí é dividir o enteiro 5 9 polo número enteiro e darme o resultado. O problema, porén, é cando fai a división usando datos tipo, a saída é o mesmo tipo de datos como as entradas. E por iso, as dúas entradas son ambos enteiros, a saída é ir ser un int. E así 5 dividido por 9 é algo punto. Pero o que é o enteiro máis próximo para apuntar algo? Entón, é realmente 0. Así como discutir o luns todo, tras o decimal punto queda truncado. El só queda xogado fóra. Polo tanto, este é un erro completo, porque eu podería moi ben só multiplicar todo por 0 aquí. Agora, podo fixar iso nun par de formas. Eu podería facelo. 5,0 dividido por 9,0. Tecnicamente, non precisa aínda de facelo. El é suficiente para facer só un dos números de un flotador - ou dobre -, poñendo o punto decimal aquí. Porque o que ocorre agora é cando divide un número enteiro por un float, ou unha parella, o ordenador vai entender oh, un dos que máis precisa. Deixe-me errar do lado de lle dar máis precisión que pretende. Entón el vai converter o resultado - el pode voltar o resultado como un valor de punto flotante ben. Entón, que ía traballar. Isto podería funcionar. E hai outro mecanismo que veremos na maior detalle a próxima semana. Pode, de feito, como o programador, dicir ao ordenador para tratar efectivamente un tipo de datos como se fose outro. Entón, eu podería realmente facer iso. En parénteses, o que podo dicir algo así como (float), aberto paren, paren preto. E iso é o que se chama "casting". Unha vez máis, máis a próxima semana. Pero esta é só a forma programática de dicir o ordenador, eu sei 9 é un número enteiro ou un longa. Sei que non é un valor de punto flotante. Pero tratalo como tal, de calquera maneira. Entón, para lanzar un tipo de datos significa converter dun a outro. Francamente, isto é só un pouco feo, por iso quere propoñer que imos volta para a suxestión orixinal de só converter isto para valores de punto flotante manualmente. Porque agora é só super claro o que está a suceder, e non é todo o que distrae. Entón, imos agora volver á miña xanela de terminal. Fai f2c. Deixe-me ir adiante e executar isto. E, como un aparte, se cansar de escribir os comandos unha e outra vez, entender que os ordenadores, como o Linux aquí, tenden a ser moi intelixente. E se eu acertar arriba, podemos ir pola miña historia enteira da ordes, para arriba e abaixo. Polo tanto, neste caso aquí, podo simplemente ir ata a executar facer f2c. Estou sendo chamado, porque eu fixen de que un segundo atrás. Xa é ata a data. Entón agora podo correr f2c novo. Imos tentar 32 Fahrenheit. Agora imos tratar de 212 Fahrenheit. Ufa. Parece funcionar. Agora, iso é bo, pero el sente un pouco arbitraria que Estou mostrando seis números tras os puntos decimais. Non? Se vostede é a persoa do tempo na televisión, é unha especie de idiota se está lendo a temperatura este grao de precisión. Entón imos simplificar isto. Entón, imos realmente ir ata aquí, ao meu printf. E si, quero flotar. Pero quero agora especificar a precisión. E eu vou ser un pouco sucinta. Eu vou dicir, dáme un punto despois do punto decimal. Entón, en vez de dicir f%, eu vou dicir 0,1% f. E isto significa só dar-me unha posición despois do punto decimal. Todo ben. Imos tentar de novo. Deixe-me volver a executa-lo despois de compilar. E agora eu escriba 32, e eu volver a valor máis sucinta. E podo escribir agora 212, e volver dunha forma máis sucinta valor tamén. E hai outras cousas que podes facer con printf. Pode realmente especificar quão grande o número debe ser. Se queres ter estofo sobre el, para que poida aliñar á dereita ou Aliñar á esquerda todos os seus números ou tentar cousas center. Entón entender que hai pequenos trucos que podes facer alí. Pero só se resumen a códigos de formato, como temos alí. Polo tanto, en termos de esta cuestión de precedencia. Este é un cadro moi aburrido pasar por metodicamente. Pero entender que os autores do C veñen-se coa regras que especifican que os operadores teñen maior precedencia, máis poder de conexión, que outros. Así, mentres na escola, xeralmente sabía que era multiplicación e división, suma e resta, a continuación, a continuación, algunhas outras cousas. Nun mundo de programación, hai unha moi longa lista de cousas. E iso non é algo que paga a pena memorizar agora. Vai acostumar a el antes do tempo. Pero, así como na escola, xeralmente parénteses resolver as cuestións de precedencia, por facer super claro para o ordenador e humanos que se pretende. Polo tanto, considero que só unha folla de fraude pouco alí. Pero a maioría deses detalles que non vai conseguir por algún tempo. Todo ben. Agora, imos construír e afastarse estes pouco parvo exemplos matemáticos. Aínda usan os mesmos fundamentos, pero comezar expresar-nos un pouco máis como scratch. Así, en scratch, tivemos estas expresións booleanas. E en Inglés, unha expresión booleana é o que? Verdadeiro ou falso. É algo que é valorada como verdadeira ou falsa. 1 ou 0. Activado ou desactivado. Todo o que quere chama-lo. Agora en scratch, as pezas do puzzle mirou como este. E esa é a combinación, no fondo alí, de tres pezas do puzzle. Unha conxunción - algo que ten en branco e negro. E entón dúas expresións booleanas dentro dela. Así, pode expresións booleanas niño de obter máis complicado expresións booleanas. Por exemplo, se é sábado, e é bo tempo, a continuación, ir para fóra. Ou algo arbitrario así. Así, pode xuntarse se expresións booleanas para chegar a un maior valor de verdade, cuxa resposta está baseada en que os menores. Agora, en C, afortunadamente, ese mapeamento é realmente moi simple. Parénteses axudar a facer as cousas claras aquí. && É o que significa "e". Entón é así que imos converter eses bloques a partir de cero para C. E para as condicións que vimos en scratch, na man esquerda banda alí, pode empilhá-los de forma semellante en C. Se x é menor de y, entón facelo. Else if x é maior que y, entón faino. Else loxicamente eles deben ser iguais, por iso digo que son iguais. Así, podemos agora comezar a construír estas cousas. Entón imos facer un exemplo. Deixe-me abrir un arquivo que está na páxina web do curso que Eu escribín con antelación. Iso é chamado de nonswitch.c. E imos ver por que, en só un momento. Polo tanto, neste arquivo - nonswitch.c - primeiro entender que hai unha morea de comentarios na parte superior. Isto é só explicando o nome do ficheiro, o que fai, e así por diante. E, ao parecer, demostra o uso de Boolean E-vel - conxunción de dúas expresións. Entón imos ver como este programa. Eu incluír meus dous arquivos, cs50.h e stdio.h. Se rolar para abaixo, agora co programa, que é un pouco máis do que xa escribín antes, pero moi lexible. Entón eu primeiro imprimir para o usuario, na liña 18, "Deixa-me un número enteiro entre 1 e 10." Así que está alí. Agora podo entender o enteiro. Pero entenda que GetInt - moi sinxelo. El só vai ter unha int. Vai garantir que non un int e non un corda ou unha boia. Pero non vai facer calquera tipo de verificación de límite. Non para filtrar os números para ser entre un determinado intervalo. Polo tanto, temos que implementar que nós mesmos. Así como scratch, onde eu podería facer un conxunto de dúas expresións, podo facer iso en C da seguinte forma. Se n é maior que ou igual a 1, e n é menor que e ou igual a 3, eu estou indo moi decreto que arbitrariamente número para ser un número pequeno. Só por causa dunha declaración. Else if n é entre 4 e 6 de impresión "Escolleu un medio número. "Else se n é entre 7 e 10, print" Escolleu un número grande. "Else imprimir" Escolle un número válido ". Porque loxicamente, que segue, temos exhaustos nosa gama. Así que isto non é exactamente como escribir maior ou igual ao dunha clase de matemáticas. Non? Adoita deseñar lo así, a liña baixo el. Pero non hai ningunha clave no meu teclado. Así, o símbolo en C para a expresión maior ou é igual a dous personaxes, eo símbolo para menos ou é igual a dous carácteres tamén. Todo ben. Entón, se eu executar este programa, pode imaxinar o que é vai facer. Se eu ir adiante e facer nonswitch, Intro. E despois executar nonswitch. Déame un número entre 1 e 10. Vou dar-lle 11. Eu escollín un número válido. Deixe-me tentar o número 3. Eu escollín un número pequeno. Entón hai moi sinxelo. E se eu queira cambiar o comportamento deste programa e facer algo un pouco diferente, no canto? Deixe-me ir adiante e dicir iso. Deixe-me librar de todo isto. E deixe-me dicir se (n == 42). E entón eu estou indo para ir adiante e dicir print "Vostede escolleu o resposta correcta. "Else imos ir adiante e dicir: printf ("Vostede escolleu o resposta errónea ");. Okay. Só porque. Agora, algúns puntos que podemos facer aquí. Un, eu non escriba o símbolo que pensas que é o máis razoable. Cando quero comprobar a igualdade, acaba por non utilizar o signo igual. Vostede, en vez usar o signo igual xeito. E por que pode ser, só de forma intuitiva? Si Audiencia: [inaudível] DAVID J. Malan: Correcto. O signo igual xa se usa para asignación. Alguén realmente non creo niso. E agora, cando se trata de probas de igualdade, temos que ser máis explícito, e dicir iguais iguais. Un erro moi común é facelo. E, en caso de expediente ou semanas algures próximo ou no próximas dúas semanas facer algo así e despois loitar con el por 10, 20 minutos tentando descubrir o que o erro maldito sexa, entender que é unha desas persoas persoas que fixeron este erro. Entón, super fácil de facer. Pero o obxectivo agora é evitar este erro. Isto pode avaliar, porque o que é iso realmente dicindo? Se n recibe 42. Entón, as persoas verbo usar, verbalmente, para expresar a noción de asignación é "queda". Entón, se n fica 42. Entón iso significa asignar 42 a n. Agora eu teño unha expresión booleana entre parénteses, dentro desta condición, cuxo valor é de 42. Non? Porque se avaliar iso de dentro para fóra, o total resposta, agora é de 42. Entón, se eu pregunta-lle a pregunta, "se (42)," o que é que realmente dicindo? Ben, expresións booleanas só pode ser verdadeira ou falsa. 1 ou 0. Activado ou desactivado. Entón, parece que temos un caso de canto aquí, en que todos dunha súpeto, eu estou dicindo que "se (42)". Isto non é un valor booleano. Entón, o que os ordenadores fan, pero é esencialmente iguala calquera cousa que non é 0 é interpretado para ser verdade. 1. Conectado. Son todos funcionalmente equivalente. Só o valor 0, ou a palabra chave falsa, como veremos finalmente ver, é realmente falso. Así, "se (42)" sería realmente certa, porque é distinto de cero. Entón, para ser máis preciso aquí, un valor booleano non é realmente tan moi verdadeiro ou falso, pero para iso dos casos, se é 0 ou non-cero. Tan falso ou non falso. E que nos permite abarcar aínda máis posibilidades na expresión entre parénteses. Entón, necesitamos, sempre con moito coidado, dicir isto - if (n == 42). Simplemente porque necesitamos especificar unha proba de igualdade, non unha asignación dun valor. O que máis paga a pena notar aquí? Estas chaves non son realmente necesarios. Veño mediante a só para ser nit-picky aquí. Pero cando ten unha condición que só ten unha liña de código, como unha conveniencia, os programadores non precisan usar as chaves. Basta só guión, por razóns estéticas, e continuación, escriba a liña de código. Só cando quere escribir dúas liñas de código - para exemplo, else printf ("Adeus!"). Se queres facer que esta é rota. Pode recuar todo o que queiras, pero o feito de que ten ingresaran dúas liñas de código sen usar claves significa que este programa non funcionará correctamente ou se cadra nin sequera compilar correctamente. Entón, por agora, para ser honesto, eu creo que o mellor é só costume utilizar as chaves, e podes ver que eles fan super claro o que está a suceder. Ademais, como un aparte - especialmente se está entre aqueles que usan os libros recomendados ou recursos en liña - entender que hai esta noción de estilo no programación. E algunhas persoas realmente prefiren poñer a chaveta aquí en liña. Algunhas persoas prefiren facer cousas ridículas, como poñer-los aquí. Non hai resposta errónea cando se trata de estilo, pero iso é malo. Pero algunhas persoas fan iso. [Risas] DAVID J. Malan: Entón eu falar iso agora, simplemente porque, como ler sobre cousas en libros ou en liña, está indo para obter mensaxes diferentes de diferentes profesores e distintos autores. E só entende que, funcionalmente, son xeralmente equivalente, pero ser consistente. Polo tanto, neste caso, imos padronizar o crespo claves aliñados aquí do lado esquerdo. Todo ben. Entón, imos adiante agora e executar isto, e ver o que acontece con este programa. Fai nonswitch. A continuación, executa nonswitch. Déame un número enteiro entre 0 e - de xeito que non é relevante máis, pero eu só vou dicir arbitrariamente 42. E eu escollín a resposta correcta. Ben, agora imos realmente tomar isto en unha dirección diferente. Acontece que hai algunha outra sintaxe que Pode usar un programa. Aquí está unha nova peza de sintaxe que é funcionalmente o mesmo, pero só presenta outra forma de nos expresar. Entón é iso que se chama "switch". E un switch funciona do seguinte xeito. É preciso, entre parénteses, un valor que quere "Switch" en. Queres comportarse de forma diferente a base do seu valor. Así, isto significa que conecte o valor de n. E o que significa isto? Ben, se n é 1 ou 2 ou 3, vai adiante e imprimir "Vostede escolleu un número grande "e, a continuación, romper. A razón para a quebra é que o camiño é C funciona como así que atopar un caso que corresponde, que inicia a execución todo o código embaixo. Entón, se eu teño unha liña de código, como fago aquí na liña 27, el é executado. Se eu engadir outra liña aquí, é executado. Outra liña aquí, é executado. O único programa para realizar o que está por debaixo da Declaración caso aplicable cando explicitamente dicir "romper". Tan mal. Dereita, neste caso, como un resultado. 4 Proceso, 5 ou 6, do mesmo xeito, vai Para imprimir unha mensaxe. Neste caso, o número medio. Romper. Se 7, 8, 9, 10, que vai imprimir "Escolleu un gran número. "Break. E despois hai unha palabra clave literalmente chamado "default" que é efectivamente como o "outro" construír. Entón nova sintaxe, pero intelectualmente, nada aquí de novo. É como o scratch. Se else if, else if, unha especie de bloque. Entón esta é a versión cambiou deste programa. Pero teña en conta que nós fixemos cos números aquí. Deixe-me abrir unha segunda versión, só para amosar algo un pouco máis concreto. Polo tanto, temos aquí os graos vez. Acontece que pode usar as opcións non só en números enteiros, pero en caracteres. Non en todos os tipos de datos, pero, polo menos, en carácteres. Entón, aquí, nós poderíamos facer algo como o valor de C que o usuario introduciu, na liña 19, usando a función GetChar Un é o capital ou minúsculas un, imos interpretala como unha reixa, e din que colleu unha nota excelente. E para abaixo ao longo da instrución switch, temos outro casos de "B" s e "C" s, e así por diante. Pero imos agora completar outra cousa. E, de novo, especie de voar a través de algúns destes exemplos. Pero é realmente para que poidamos aplicala los, agora - ou realmente, só traducir-los agora - para C. Entón deixe-me ir adiante e facelo. Vou abrir un novo arquivo. E eu vou facer include. E entón eu vou facer int main (void). Deixe-me salvar o ficheiro como un loop.c. Só como un exemplo. E eu estou indo a ir adiante e facer o seguinte. Eu quero escribir un programa moi tediosa. Entón, 10. Imos facelo. 9. Todo ben. Así que comezar a facelo na programación, é probablemente facendo algo mal. Pero imos comezar alí de calquera maneira. Oops. Isto é realmente malo. 7. 6. 5. 4. Nada vai pasar cando chegamos a 0. 3. 2. 1. Okay. 0. Eliminar. Todo ben. Entón volva 0. Polo tanto, este programa, obviamente, vai facer o que moito tediosamente di que vai facer. Vai imprimir os valores, de arriba para abaixo. Entón deixe-me fan loop. E entón - berros. Fai loop. Eu estaba no directorio incorrecto. E agora déixeme correr loop. Intro. Woohoo. Very nice. Programa, longa e agradable. Todo ben, pero agora imos facelo mellor. Así como no scratch, cando comezou a usar un looping construír, no canto de só copiar e pegar todo o pezas do puzzle, deixe-me presentar esa cousa. Así, en C, existen varias construcións de iteração, un dos que se parece con isto. Un lazo "é" ten tres cousas, separados por dous puntos e comas. E, a continuación, no interior do corpo do lazo, por así dicir - a cousas dentro das claves - podemos facer algo novo e de novo. Entón, o que eu teño aquí na pantalla, este é literalmente só un comentario. O / / significa aquí ven un comentario. Este non é un código. Esta é só unha descrición inglés, para min, o humano. Inicializações así, condicións, e actualizacións. Ben, imos ver como funciona isto. Isto permite-me reescribir este programa como segue. Para - Entón, aquí vén o meu loop - int i - aquí vén unha variable chamada "i" - queda inicializar a 10. Polo tanto, non é a miña inicialización. Eu quero facer ese lazo tan longa como "i" é maior ou igual a 0. E en cada iteração deste lazo, quero facer i -. Entón vimos + + o luns. - É o oposto. El diminúe o valor 1. Dentro deste ciclo, que quero realmente facer algo. Entón, eu vou dicir algo así como printf. Eu non quero dicir 10 agora, porque iso obviamente é só indo para imprimir o mesmo valor. O que quero para imprimir en vez diso, probablemente? Si Así, "i". Entón% d, i. Entón eu vou roubar unha desas ideas de máis cedo - esta substitución de códigos de formato - e despois aquí abaixo, no fondo, eu vou volver 0, só para unha boa medida. Pero agora, eu teño un programa máis sucinto. É só poucas liñas, e non uns 10 ou 11 liñas. Deixe-me ir para a miña rápida aquí. Lazo remake. Executa de novo loop. E que parece ser a mesma. Agora, o programa non é máis interesante. Pero agora podo escribir algo como isto. Podo cambiar isto para 100. Eu podo entón recompilar o meu programa. E entón podo volver a executar o meu programa. E agora vai super-rápido en computadores de hoxe. Pero alí eu teño - e realmente, a miña memoria de retroceso non incluso ir tan lonxe. Alí imos nós. Polo tanto, temos todos os 100. Pero é doado cometer erros aquí. O que vai ser o comportamento esperado si accidentalmente facer iso? Entón ela se sente como infinito. Entón, imos ver se o ordenador se comporta. Entón deixe-me ir adiante e facer loop. E deixe-me executar loop. Entón, imos voltar a iso en só un momento. Imos deixar que a execución. Porque o que debemos contar ata, como mínimo? Probablemente, polo menos, 2 millóns, se temos que moitos bits, e estamos usando valores positivos. Entón, imos voltar aquí. Ademais destes tipos de loops, temos o que se chama, mentres Loops. Entón, así como no scratch, tiña sempre bloques, e tiña bloques de repetición. Do mesmo xeito, en C, só tes outros xeitos de se expresar. Entón tes esa noción dun loop while que lle permite expresar-se un pouco diferente. E entón tes algo chamado un loop do-while, que opera de forma lixeiramente diferente tamén. E nós imos provocar estes separados ao longo do tempo. Pero imos dar un ollo neste último aquí. Se entrar en - aínda en execución. É ben infinito. Entón deixe-me ir positiva, e mostrar como podemos realmente gobernar a entrada do usuario un pouco máis eficaz. É un programa moi curto. E aquí temos, en principal, unha declaración int n. Entón me dea unha variable chamada n. Agora, eu literalmente dicir "Facer". E entón eu teño aberto rizado cinta, chaveta preto. E entón entender, despois diso, el di que mentres n é menor que 1. Entón, observe que estas liñas - 19-24 - compoñer colectivamente un lazo do-while. E, de novo, nova sintaxe, non unha idea nova. É só outra forma de looping, sintaticamente. Entón, o que iso fai? Faga o seguinte, mentres n é menor que 1. Entón, o que quero facer? Eu esixo que me dea un número enteiro positivo. Entón eu realmente tentar obter un número enteiro do usuario. Pero en termos de a orde das operacións aquí, porque a mentres condición é aquí, entón eu estou indo para comprobar, é n menos que 1? Entón, supoña que o usuario - despois de ser esixido, desta forma - tipo por valor 0. Esta condición será certo ou falso? Ben, iso realmente vai ser verdade. Porque n é 0, e 0 é menor que 1. E o que iso implica? Facelo de novo. Facelo de novo. Facelo de novo. Só unha vez que a condición é valorada como false. Se eu escribir 42. Ben non, 42 non é inferior a 1. Así pois, este lazo está feito de execución. E entón, nese punto, o programa vai dicir, grazas por a 42, no presente caso. Agora que ten ese xeito de se expresar - Non debemos esperar a que isto termine. Vai levar moito tempo. Para ser continuado a próxima vez, se cadra. Pero agora, ten a capacidade de espera para entender un pouco de humor geek. Desculpas. Este non é representativo do humor na ciencia da computación mundo, pero que é bonito. Final [Risas] Imos con esta nota. E nós imos velo o luns. [Aplausos]