[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.
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]