[Powered by Google Translate] DAVID Malan: Este é CS50, e isto é o inicio da Semana 1.
O que nós pensamos en facer hoxe é dar un ollo cara atrás en
algo que moitos de vostedes probablemente xa pasou por algún
tempo e agora pode parecer un pouco familiar.
Esta cousa aquí, que, por suposto, é na -
Audiencia: Ciencia.
DAVID Malan: Ciencia centro.
Polo tanto, esta é, en realidade, un dos primeiros ordenadores
de volta da década de 1940.
Foi un dos primeiros ordenadores electromecánicos
que foi capaz de particularmente longa,
auto-sostidas cálculos, e que realmente vemos en
o centro de ciencia é só un pequeno anaco desa cousa.
O que nós pensamos en facer, entón, é dar un ollo cara atrás nun vídeo
que foi feita hai algún tempo, a introdución deste
cousa para o mundo.
E vai ver a partir da música e da voz que de feito os
Foron tempos moi felices.
>> [REPRODUCIÓN]
-Un triunfo de habilidade matemática e mecánica é este
nova calculadora gran automática na Universidade de Harvard.
Intricados problemas de matemáticas, colocado a través da
máquina, en forma codificada na cinta, sexan resoltos de precisión
pequena fracción do tempo necesario para o humano
cálculo.
Deseñado para axilizar toda forma de matemáticas e científica
investigación, o cerebro mecánico xigante vai traballar para os Estados Unidos
Mariña dos Estados ata o final da guerra.
>> DAVID Malan: Entón, o que quizais non sabe é que estaba en
este mesmo dispositivo que un termo que todos agora tomar moi bonito
por certo foi cuñado, que un erro.
Así, un dos enxeñeiros que traballan neste ordenador
literalmente atopar unha traza pequena na máquina que resultou
nalgúns cálculos incorrectos.
E como a historia vai que traza foi gravado para este rexistro
xornal aquí, de volta de 09 de setembro de 1940 e algo,
e así naceu para o mundo o "erro" prazo.
Así, a partir de agora, consideramos erros para calquera tipo de erros en
programas, tanto feitas polo home, ou, neste caso, os insectos.
>> Entón, algúns anuncios, como proceder.
Entón CS50 ten unha tradición de ofrecer comidas de tipos de
a maioría dos venres durante o semestre, onde levamos de 30 a
40 alumnos ó lume e xeo en Praza de casual
conversa fiada, conversa sobre ciencias da computación,
falar sobre o futuro.
Invitados alumnos e amigos da industria para falar
estudantes.
Realmente para un fin de facer o que é unha clase moi grande
todo o máis íntimo, polo menos de cando en vez para
subconxuntos de alumnos.
Entón, se quere unirse a nós este venres, 1:15 PM, ir
CS50.net/lunch RSVP.
E nós imos facelo recorrentemente, non tan de preocuparse se non está
entre os primeiros 30 ou así esta semana.
>> Así notas escriba.
Unha palabra sobre os recursos que pode agora comezar a estar dispoñible
para os alumnos da clase.
De xeito que os seus xefes non precisan estar en baixo durante as clases
rabiscar baixo todo o que digo e así por diante, o que facemos
en vez diso é proporcionar a partir do corpo docente dunha
conxunto canónico de notas.
Polo tanto, temos un dos nosos compañeiros de ensino, Andrew Sellergren,
que se senta cada semana, revisa os vídeos, e despois
escribe o que cremos que é unha forma xusta
conxunto oficial de notas.
E desexa Andrew, tamén, de poñer notas de rodapé en snarky
a parte inferior.
Entón, esperamos que aproveite estes como un libro de referencia para
divertido, e tamén, vir preguntar o tempo, como unha oportunidade para revisar
o que pasou en conferencias individuais.
Polo tanto, aqueles están ligados na páxina de charla.
>> 0 conxunto de problemas, mentres, está fóra.
E, en termos de recursos dispoñibles para ti -
paso a paso.
Milo levou o primeiro venres.
Foi filmado, poñer en liña ata sábado.
E así entender, se non está seguro por onde comezar,
para este ou futuro P-sets Apague sempre primeiro o
paso a paso ou o seu vídeo.
Paso está en marcha; no cs50.net/section é onde
deberán presentar as súas preferencias, se non ten
xa, por hoxe.
Porque seccións comezará o vindeiro domingo, luns,
e martes.
Facemos seccións eses tres días, todas as semanas do
semestre para a maior parte.
E nós tamén introducir de novo, pistas diferentes.
Entón, será preguntado sobre esta forma de paso, se
non vin iso xa se está entre os menos
cómodo, máis cómodo, ou algures no medio.
E se é unha especie de enriba do muro, xeralmente en algún lugar
entre o que a maioría dos alumnos acaban verificando.
Horario de oficina comezar esta noite.
>> Entón Scratch é clave mínimo, a pesar de que é moi natural
a executar para varios erros, ou ser incerto sobre como
implementar algo.
Entón entender que vai comezar o horario de expediente esta semana.
Eles van estar en Annenberg luns, martes, mércores,
Xoves, 20:00 - 23:00 durante as vacacións de cerebro.
Classmen superiores pode entrar, e se ten problemas para obter
na porta, porque vai ser swiping, pode falar o seu camiño
e explicar que está con CS50.
Tipicamente 20 a 30 nós no equipo vai estar alí para axudar
Vostede é un en un.
>> Tras a chegada a idea é esta: vai traer o seu ordenador portátil,
vai ter o seu cargador, nós imos ter os cables de alimentación extra,
particularmente ao longo da parede sur do Annenberg onde
hai moitas tomas eléctricas.
E o principal punto de entrada para a oficina hora Q & A é para ir
cs50.net/discuss e escribir
súa pregunta alí.
E rótula-lo con pset 0 ou 1 pset, calquera que sexa a semana
pode ocorrer de ser.
E entón o que imos facer é ter unha táboa de bolseiros de ensino
e asistentes do curso, xeralmente 8 ou 10 ou ben de nós,
pasando, mantendo un ollar atento sobre a tarxeta, e
arrincar coas preguntas realmente tan axiña como sexa posible,
referíndose lo a artigos relacionados, se aínda non atopou os
vós, referencias en liña, segundo o caso.
E entón, se hai problemas, como hai inevitablemente
será, ou só fai máis sentido para sentir un a un,
traballar con problemas con alguén.
>> Ou acaba de entrar en horario de oficina realmente
necesitando esa mentalidade.
Non quere ir a través do formulario electrónico,
realmente quere atopar con alguén.
Comunicar que a nós, eo que vai ocorrer é cando o seu
pregunta foi vista por un membro do equipo, e nós
determinar, si, este debe ser enviado a un dos 20 ou
30 membros do equipo aquí localmente, vai ver na esquina superior esquerda desta
pouco Introduza o botón Fila comeza a palpebrar no cs50.net /
discutir.
E iso está lle dicindo que agora foron convidados, así
para falar, para entrar na cola.
E facendo clic neste botón, o seu nome aparecerá en
un iPad que o saúdo CS50, un dos cabezas do curso, será
estar seguro preto da entrada de Annenberg, que, entón,
ver como descritos aquí, os alumnos que teñan dúbidas sobre
á esquerda, os membros do equipo que están presentes na dereita.
E con un click de esquerda e dereita, o seu navegador irá
comezar a palpebrar así que, por exemplo, o profesor McGonnagal
Está preparado para velo nunha táboa específica en Annenberg.
>> Entón nós fixemos parte deste último ano.
Nós reiniciar o horario de expediente e
reimplementadas moito do software.
Entón entender que esta será quentar esta semana.
Pero tamén entender tamén, nos últimos anos, como xa debería ter oído
de amigos, o horario de expediente tiña de feito 50 a
150 alumnos dunha soa vez.
E é simplemente imposible para nós para tratar con isto
En efecto, un a un, ao longo da noite.
E entón o que realmente estamos indo a tentar facer este ano é
capitalizar o feito de que unha morea de preguntas son
frecuentes e moitas veces pode ser mellor respostar
de forma asíncrono.
Entón pode clasificar de pensar a través da resposta do persoal,
e podemos pensar a través do seu código, sen Calefacción
presión de necesariamente loitando
polo lado a lado.
Así, estímase que preto dun terzo ou a metade das cuestións
será enviado en persoa, e imos tentar arrincar fóra como
moitos como un media ou máis electronicamente,
durante o expediente.
E nós imos continuar a utilizar Discutir
ao longo da semana, así.
>> E, finalmente, entender que este curso pode ser feito de aprobación / reprovação.
Entón se está enriba do muro ou só pensar que é realmente
non estou seguro se este é o mundo para ti, ou iso é realmente
moi raro para ti, entender que esta é unha forma marabillosa
de gañar un pouco de confianza que para entrar no
clase, como eu fixen, francamente, anos atrás.
E entón temos cinco semanas para clasificar de descubrir por
a si mesmo se quere quedar de aprobación / reprovação, pasar a unha carta
grao, ou semellante.
E, normalmente, o que pasa / fallo non, eu creo que, para os estudantes e
que, se pór en que 10 horas, 20 horas, o que sexa
pode ser en algúns problemas, e está batendo coa cabeza
contra a parede,
e realmente non pode perseguir algo, e
ten tantas outras cousas que cómpre facer, honestamente, o que
creo que pasa / falla é, leva a bordo fóra de
situacións como esta.
Onde tomou a cousa de 90% do camiño.
Vostede sabe, non é moi perfecto.
Pero ten unha morea de fóra, no entanto.
Por iso, considero pasa / fallo como dando-lle que
modelo mental, se cadra.
>> Durante toda a semana, certo modo pasado, mergullou Scratch, e nós
falou sobre a programación nun nivel moi elevado de vídeo.
E hoxe nós facemos a transición cara a unha linguaxe
chamado C, unha linguaxe de baixo nivel de programación enriba
que moitas linguas modernas son agora construídos, incluíndo algúns
dos que estamos usando para finais do prazo.
E sintaticamente, o que parece
é todo moi semellante.
Entón, imos comezar a facer esa transición aquí.
Polo tanto, este foi un programa da semana pasada que era o máis sinxelo de
Ola programas mundiais.
El simplemente impreso para a pantalla do mundo Ola, cun
globo de fala pouco saíndo do gato.
Ben, se nós comezamos agora a traducir isto para outro
linguaxe, entender que as ideas de hoxe e mércores
son idénticas, pero a sintaxe comeza a cambiar.
Así, mentres a semana pasada tivemos, cando premendo bandeira verde, digamos
Ola mundo.
Hoxe imos ter int, void, principal, printf,
retorno, con algunha outra sintaxe de alí tamén.
Chaves e parénteses e comiñas, e outros enfeites.
Pero entenda que o núcleo da idea aquí é a impresión,
e, finalmente, o feito principal é que agora vai ser
sinónimo do inicio dun programa.
Inicio vai ser o lugar onde a bandeira verde xuta as cousas fóra.
>> Entón agora imos desmembrar algúns dos bloques de construción aquí
Antes de mergullo en algúns exemplos concretos.
Polo tanto, chamado esta semana unha última declaración, en que é só
unha instrución.
Facelo - neste caso, dicir Hola mundo.
Ben en C, se miramos só unha liña que, é así que somos
vai comezar a expresar esa peza de puzzle particular:
printf ("Ola mundo");.
E agora imos provocar estes separados máis e máis ao longo do tempo,
pero entende que non hai un patrón aquí.
Entón un, temos esa cousa chamada printf, que é
esencialmente análoga á palabra Say.
Isto é o que vai facer.
Printf, e f aquí significa "plano".
Por iso só significa que pode inserir
varios detalles estéticos.
Entón, pecha comiñas é o comezo do que imos
para comezar a chamar a unha cadea.
Unha palabra, unha frase, unha frase.
Unha secuencia nunha linguaxe de programación é unha secuencia de cero
ou máis caracteres.
Así, h-e-l-l-o, coma, e así por diante é,
pecha comiñas, unha cadea.
E agora barra invertida n, un pouco sintaticamente raro, pero nós
xa definido que a semana pasada no sentido de que?
É só unha nova liña.
É só un xeito de transmitir ao ordenador que quere que o
equivalente de bater a entrar alí, pero non
quere realmente prema Intro e, polo tanto, desorde todo o
formato do seu programa actual.
Agora, os parénteses rodean esa secuencia, aberto e paren
paren preto, e dentro do que é a nosa secuencia.
Porque iso é porque en C, programación e outros
linguas, cousas como printf ter argumentos, ou tomar
parámetros.
>> Entón comeza a pensar agora este bloque Say vermello como un
función, como un método, como un procedemento.
Pode chamar o que ti queiras, por agora, pero
é unha especie de miniatura dun programa que só fai unha
cousa, nunha única liña, nin menos.
Entón printf tamén é o que nós imos comezar a chamar a
función, e as funcións de facer algo - neste caso
imprime unha cadea formatada para a pantalla -
pero funciona ter argumentos ou parámetros.
E por argumentos ou parámetros, grazas, queremos dicir
que o seu comportamento pode ser influenciado polo que pasa
dentro dos parénteses.
Polo tanto, neste caso, as necesidades printf dicir que imprimir, e nós
só pasar, entre comiñas aquí, a secuencia que
realmente quere imprimir.
E o punto e coma ao final desta liña é só un
incómodo histórico en que a finais da maioría das liñas de código,
poñer un punto e coma para facer super claro para o ordenador
que esta liña de código remata aquí.
Agora iso é bo porque, como veremos como os programas están máis
complexo, a coma vai facer super-humanos claras para nós,
e tamén o ordenador, onde as liñas de código de inicio e de fin.
Entenda que algunhas linguas non teñen ningún
deses mesmos detalles.
E, de feito, en JavaScript, non sempre de algo
como o punto e coma.
Pero máis sobre iso por vir.
>> Entón loops.
Tivemos algo así, moi intuitivamente, obvio, facer
algo novo e de novo e de novo.
Como poñer medias, ou dicindo Hola, neste caso.
Ben, a partir de hoxe en C, poderiamos expresar esa arañazos
bloquear como while (true) printf ("Ola Mundo").
Entón, observe que estamos empezando a construír sobre o puzzle, literalmente
peza de antes.
Temos o mesmo bloque vermello, pero é dentro deste
bloque para sempre entre corchetes, ea mellor maneira de traducir iso
C é a seguinte.
Non hai ningunha contrasinal para sempre.
Vostede non pode simplemente escribir f-o-r-e-v-e-r en C.
Así, o análogo é máis próxima ao mesmo tempo.
>> Agora, mentres (certo) semella un pouco estúpido, porque fai o valor
de cambio sempre certo?
Presuntamente non.
É como dicir que mentres un, mentres, ao mesmo tempo certo.
É todo a mesma cousa, certo é sempre o caso.
Polo tanto, este lazo é, en realidade, inducindo o tipo de loop?
Só un ciclo infinito, seguro.
Un lazo para sempre ou como nós o chamamos a semana pasada,
só un ciclo infinito.
Entón, ás veces iso é malo.
Ás veces iso é un erro, ás veces é por iso que ten
a esfera de praia fiación ou ampulheta ou semellante.
Pero, neste caso, de forma deliberada, por calquera
razón, quería imprimir a mesma cousa de novo
e de novo e de novo.
Ou, no caso de que como un reloxo, que quere facer
algo novo e de novo e de novo.
Así loops infinitos pode ter sentido.
E isto é como en C podemos traducir para sempre ao código.
>> Entón, agora que é un pouco máis específico.
Tiñamos repetir 10 veces a seguinte declaración.
Así, mentres (certo) non funciona moi ben alí, porque é a verdadeira
sempre é verdade.
Entón, en vez ollar para a versión C, agora a sintaxe queda un
pouco máis enigmática.
Pero para ser honesto unha vez que comezar a ver iso, todo queda
bastante familiar rapidamente.
Entón é iso que se chama un loop.
Un lazo for vai dicir ao ordenador para facer algo
de novo e de novo e de novo durante o tempo que
esas cousas son certas.
Agora, o que queremos dicir con iso?
Así, hai tres partes para un loop for, e imos
Volveremos a este nun contexto real de
exemplos nun momento.
Entón non se preocupe se non moi afondar dunha vez.
Pero int i = 0 é, longa historia curta, dicindo que me dea un
variable que é do tipo enteiro, entón me dea un número
chamado I, e arrincar a 0.
Isto é dar-me como un x alxébrica variable e
inicializar a 0.
Pero, neste caso, nós o chamamos i.
Entón, no medio, di i é menor que 10.
Que está dicindo ao ordenador as seguintes cousas así por moito tempo
como i é menor que 10.
E, obviamente, comeza a menos de 10 porque
que comeza en 0.
Entón, finalmente, pode, talvez, creo que o que eu + + medios.
É un pouco de sintaxe que significa só incrementar i.
Entón engada 1 para i, de novo e de novo e de novo.
>> E así, como veremos este ciclo, esta sintaxe, ao contrario, aplica
precisamente o mesmo que, francamente, en scratch era tan
moito máis fácil de expresar.
Repita 10, e está feito.
C, e na maioría das linguaxes de programación, temos que ser un
pouco máis instrutivo para o ordenador e, en realidade,
especificar algo así.
Pero imos voltar a esta e outra sintaxe.
>> E sobre variables?
En Scratch tivemos algo así como estes bloques de laranxa,
onde eu podería declarar unha variable.
Imos chamalo arbitrariamente balcón.
Imos comezar a 0, e despois
imos sempre facer algo.
Neste caso Scratch eu estou dicindo que o balcón, de xeito que o
gato vai ter unha burbulla pequeno discurso que está falando
o número que é nesta variable.
E entón temos contra o cambio por 1.
Entón, todo isto é acondicionada dentro dun bloqueo Forever.
Entón, nós xa agora os bloques de construción en C con
que para traducir iso.
>> Unha forma de facelo é iso.
Déame un enteiro, chamalo de balcón.
Arrincar-lo a 0
na primeira liña alí.
While (true), entón eu vou roubar esa idea a partir dun momento
atrás, vai adiante e faga o seguinte.
Imprimir o balcón, e entón incrementar o contador,
de novo, e de novo, e de novo.
Ou aínda, + + significa só engadir 1 para algo.
Pero hai unha nova peza de sintaxe aquí.
O que está pulando como non entre os nosos exemplos anteriores?
Si, este% d.
Así, pode talvez inferir que isto está facendo, francamente, con base
en que o bloque de borrador é facendo.
Pero, de novo en C, nós só temos que ser un pouco máis específico
cando se trata de nos expresar.
>> Entón printf ("% d \ n").
Moito máis do que podemos tirar tan familiar.
As citas só significa que é unha corda, barra invertida n
é só unha liña nova.
Entón a única cousa nova aquí% d.
E todo o que é un espazo reservado.
D% vai para denotar un número decimal.
E ordenador% d medio, coloque un número decimal aquí.
Ben, o número que quere poñer alí?
Ben, como pode talvez inferir, tras a vírgula dicimos
contador, que é o nome dunha variable que declarou ou
creou algunhas liñas antes.
Polo tanto, esta é só unha forma de C de conectar unha variable nun
corda dinámica.
Porque, por outra banda, se eu tivese feito algo parecido en vez
iso, printf ("contador"), o que sería esa
programa, en vez facer, presuntamente?
El vai, literalmente, imprimir "contador".
O que non é o efecto que quero.
Eu teño que substituír nalgunhas valor numérico.
Entón, imos ver que as funcións entón, como printf, non pode tomar
só argumentos individuais, como
"Ola mundo".
Eles poden tomar coma entre comiñas, e despois de algunhas variables
que vai estar conectado, como veremos a secuencia anterior
A través destes espazos reservados sinal%.
>> Ben o que dicir de expresións booleanas?
Expresións booleanas eran eses valores, verdadeiro ou falso.
Si ou non.
1 ou 0.
Activado ou desactivado.
Entón, en scratch se parecen con iso, e entender que o
bloque inferior aquí é, en realidade, a conxunción
de dous bloques máis pequenos.
Entón eu medio que arrastrada e caeu tres pezas do puzzle
xuntos para facer esta peza de puzzle máis alá para que eu
pode transmitir a idea de que quero x ser menor que Y e
y para ser inferior a z.
E para que eu poida traducir esas dúas liñas separadas do seguinte xeito.
A parte superior pode ser moi trivialmente traducida para C,
con só x <y.
Quizais con algúns parénteses para unha boa medida.
E entón, en C, non escribe e para denotar a
conxunción de algo.
Vostede no canto escribir &&.
E como nós imos finalmente ver un único e comercial acontece
significa algo diferente.
Entón && só denota a idea de AND.
>> Entón, de novo, aínda que iso comeza a parecer bastante complexo,
un dos efectos da introdución de riscos, ademais
ter só un tipo de diversión na rampa onde podes facer
algo que é moi gráfica e animación, e
partilhável e similares, e tamén para transmitir a idea de que
todas as ideas que comezan mergullo hoxe en diante
foron incorporados, aínda que sinxela
interface desde o primeiro día.
Que tal ese aquí?
>> Así, as condicións.
Así, o bloque de arañazos na esquerda alí parece
un pouco máis complexo.
Pero é só arrastrar e algúns
caendo de pezas coñecidas.
Se x é menor que y, digamos así.
Else if x é maior que y, digamos así.
Senón, podemos loxicamente supoñer é de supoñer que
eles deben ser iguais.
Entón, dicir que son iguais.
Agora en C, á dereita, a mesma cousa exacta.
E noten que as claves van ser un
recurso de C e outras linguaxes que fan este tipo
de túnel.
Así como o bloque si é esa cousa amarela que é unha especie de
agarrando o bloque vermello dentro del.
Do mesmo xeito son estas claves -
esas claves -
destínase a evocar a mesma idea de abrazar un ou máis
liñas de código que son recuados para dentro deles.
Así, no lado da man dereita aquí, menos do que x, y printf
("X é menor que y").
Else if x é maior que y, imprimir o mesmo.
Imprimir máis que son iguais.
>> Entón, en suma, non hai un mapeamento bastante directa ou tradución
da lingua que vimos ata agora, ata para algúns
dos recursos máis sofisticados.
Entón non pode estar usando isto para o seu proxecto, ou quizais non
estar usando isto para o seu proxecto esta semana.
Pero nós temos esas cousas chamadas de matrices en C. No Scratch,
son chamados de listas.
E vimos que o RPG Fruitcraft semana pasada.
O carinha azul que estaba andando, pegando
cereixas e laranxas e afíns.
Ben no scratch, que foi aplicado con esa laranxa
bloque que contén palabras, neste caso, estamos literalmente
Ademais de "Orange" para unha
variable chamada inventario.
Así, en C, esta sintaxe vai estar un pouco máis enigmática.
E nós imos voltar a este a próxima semana e facer máis
cousas interesantes no mundo da criptografía con el.
Pero na parte inferior aquí, estas dúas liñas esencialmente
traducir para o que estamos facendo un scratch bloquear alí enriba.
Pero máis sobre iso por vir.
>> Entón, poñer isto xuntos, aquí é un programa en C. Entón imos
rapidamente provocar unha separación de algúns dos anacos de sintaxe aquí, pero
entón imos realmente comezar a escribir un código, Coñeza
vostede con algunhas das ferramentas que vai utilizar, e ver se
pode construír agora algúns deses bloques básicos de construción
a semana pasada, agora sintaticamente en C. Así, na parte superior aquí, este
é, quizais, un dos programas máis chat que podería
escribir máis calquera linguaxe de programación.
Pero é un tipo de ten un significado especial porque é a
programa canónica que calquera científico da computación cando escribe
ensinar a alguén unha linguaxe de programación -
un programa Ola Mundo.
>> Así, na parte superior, vemos esa noción de # include
e, a continuación, entre parénteses angulares, stdio.h.
Nós imos voltar a iso, pero realmente o que
significa que hai un arquivo neste mundo chamado estándar
I / O, stdio punto h, e que é só un arquivo de texto que
alguén escribiu anos.
E dentro dese ficheiro de texto son un monte de
funcións ou métodos ou procedementos, que alguén
escribiu que somos os beneficiarios do porque
agora pode usar o código da persoa.
As funcións que el ou ela escribiu.
Neste caso, printf non é algo que eu escribín, é
non algo que CS50 escribiu.
É algo que alguén escribiu anos atrás e poñer un
arquivo chamado stdio.h e entón, como un aparte, poñer
outra parte da función noutro arquivo.
Pero imos chegar alí.
>> Entón # include é só a nosa forma de dicir, en
C, me dá acceso a funcións que outra persoa escribiu.
E neste caso eu me importa, porque quero printf.
Agora temos int main (void).
Polo tanto, esta é unha desas cousas que, francamente, que o día 0,
moi bonito eu teño que tipo de fóra da zona, porque é só
non é interesante
intelectualmente, algunha da sintaxe.
Pero, por agora sei que funciona, tamén coñecido como
procedementos ou métodos, xeralmente producen algún valor.
Eles fan algo.
Eles veñen con unha resposta.
Eles producen saída.
Entón int xunto principal é só a nosa forma abreviada de dicir
que esta función, este procedemento, e, finalmente, vai
para lle dar de volta o número.
E por que imos volver.
Principal é só o estándar mundial estándar para o estándar
función que vai executar nun programa C, cando
executalo.
Baleiro significa só unha cousa, principal, non leva
argumentos, neste caso.
Entón, eu estou sendo super explícito.
Non hai cordas alí, non hai comas.
Baleiro significa que non hai argumentos para inicio.
>> Agora, por fin, afortunadamente, as dúas últimas liñas son familiares.
Dentro das claves, temos un printf
e temos un retorno.
E o retorno é o tipo de pena que temos que
poñelas alí, pois neste caso non está facendo todo o que
moito interese.
Pero, en un programa de ordenador, cando unha función devolve 0,
Isto significa que todo está ben.
Nada deu errado.
En cambio, se unha función devolve 1, ou un negativo, ou
1.337 negativo, ou algúns números aleatorios como esta, que
significa, xeralmente, que, en realidade, un erro.
Entón, se está no seu Mac ou PC, se xa viu
algunha mensaxe irritante porque o ordenador deixou de funcionar ou
conxelado, e hai unha mensaxe de erro enigmáticas,
e despois de algún código, código do sistema como
1,2,3,4, algún número,
que, xeralmente, é un detalle innecesario dicir
a maioría de nós seres humanos, pero iso é o que algunha función ou algún
programa realmente volveu, un valor non cero.
E o beneficio diso é que 0 significa que todo ben, e
entón ten basicamente un número infinito de cousas que
pode dar mal.
É por iso que eles escolleron 0 para o ben e un valor distinto de cero a
malo, como veremos en breve.
>> Entón, imos adiante e escribir isto.
Entón, lembro que outro día eu usei o meu Mac para abrir unha
ventá de terminal e logo abri programa de texto, como
TextEdit, e empecei a escribir un código.
Ben, iso é bo.
Pero a súa experiencia vai ser diferente nun Mac, ou
nun ordenador Solaris, un ordenador con Linux, calquera que sexa operativo
sistema de ocorrer de estar usando.
E así, o curso, o que, en vez de usar é algo
chamado Appliance CS50.
Así, o CS50 Appliance é unha peza de software para descargar
que permite que executa un sistema operativo chamado Linux,
especialmente Fedora Linux, no seu propio Mac ou PC.
E fai iso baixando algo chamado un hypervisor.
Entón, todo isto será documentado en conxunto de problemas 1.
E vai ser orientado cara o que precisa facer a descarga.
Pero o resultado final, se ten un Mac ou PC, e vostede
baixar un software libre.
Vostede, entón, baixar o Appliance CS50, e di que
software libre - o hypervisor -
para executar o Appliance CS50 nunha ventá no seu ordenador.
E o que ocorre é iso.
>> Teño agora, aviso aquí, o que parece ser un escritorio
ambiente.
E deixe-me realmente encoller este única xanela.
Polo tanto, este é agora o meu Mac, cunha pequena fiestra aquí, e no interior
desta xanela pasa a ser unha totalmente
sistema operativo diferente.
De feito hai este menú iniciar aquí, lembra
Windows, que ten unha morea de sub-menús, incluíndo
unha ligazón para a guía de CS50, Dropbox, e similares.
E o que este ambiente agora é un ambiente estándar
que todos poden agora utilizar, de xeito que non importa o que o seu
ordenador, o que ten instalado, que a versión
Mac OS ou Windows está executando, todos nós agora temos a
mesmo ambiente.
E agora, neste ambiente que pode comezar a escribir un código.
>> Entón, eu estou indo a ir adiante e abrir un programa chamado gedit.
Isto é comparable a notepad.exe, ou
TextEdit en un Mac
E este é só un programa de edición de texto super sinxelo
que se parece iso a primeira vista.
Agora arriba, eu teño unha paleta de branco, no fondo eu
ten esa ventá negra que di jharvard aparello @.
E iso porque a conta de usuario que pre-creado
para todos é chamado John Harvard.
El ten un cartafol onde todos os seus arquivos están indo para ir, e
é aquí que podemos comezar a escribir un código.
Entón deixe-me ir adiante aquí e zoom un pouco, e eu son
vai facer # include, int main (void), e
entón eu vou facer printf ("Ola Mundo")
, Presentar 0.
Agora, iso é todo moi negro e branco.
>> Deixe-me ir adiante e facer unha cousa para ensinar gedit o que eu son
realmente facendo.
Deixe-me ir Gardar como.
Vou escoller o lado esquerdo aquí jharvard.
Entón, de novo, mesmo se nunca usou Linux antes, francamente
hoxe en día, todos eles son esencialmente en devolver o
mesmo tipo de interface -
Mac OS, Windows e Linux.
Entón eu escollín cartafol jharvard casa aquí.
E eu estou indo a gardar o arquivo como hello.c.
Así, na parte superior, eu escriba hello.c; nomear un C
programa coa extensión c. é
o que é unha práctica común.
E eu bati en Gardar.
E agora o que é bo é que efectivamente ensina gedit,
que se trata dun programa C.
Teña en conta que o meu texto en branco e negro é agora codificados por cores, ou
sintaxe destacada, o que só me chama a atención sobre o
diferentes partes semántica do programa.
Na parte superior esquerda alí, como os meus programas están máis complexos, eu son
Vai ter un resumo de todas as cousas que eu escribín.
Entón é iso aí.
Entón deixe-me afastar e ir ata a fiestra da terminal.
>> Polo tanto, esta é quizais novo para moitas persoas.
Se nunca usou un ambiente de liña de comandos, nunca
utilizado DOS, ou nunca usou Linux, ou nunca abriu
Mac OS xanela de terminal, hai unha morea de cousas que
podería facer a interface gráfica, como apuntar e premer e
arrastrando e deixando caer, e outros semellantes, pero en xeral -
seguramente no mundo da informática -
usando unha liña de comandos, onde non ten o rato
Xeralmente, só tes o teclado, é realmente moi
máis poderoso do que interface, unha vez que se acostumar a
varios comandos.
E tipo que libre-de da necesidade de apuntar e premer
en todo.
Así, en gedit imos clasificar de ter o mellor dos dous mundos.
Nós pode arrastrar e soltar texto, podemos velo
agradable e codificados por cores.
Pero cando chega a hora de executar o noso programa, nós ás veces
usar só esta pequena fiestra aquí.
>> Entón, eu estou indo a ir adiante e facelo.
Na xanela inferior en branco e negro, eu estou indo para adiante
e escribir bumbum.
E tinido é o nome dun compilador.
É un programa que converte o meu código fonte
en, para que o código obxecto.
0s e 1s, que vimos brevemente a semana pasada.
Teña en conta que, a semana pasada, nós prometemos que iríamos
ir algo así - é necesario para
algo así -
e este certamente non é algo que un ser humano vai
facer manualmente.
Polo tanto, en vez imos utilizar un programa, e este programa en
Neste caso chámase Clang.
E o nome do meu programa é hello.c.
Polo tanto, a fin de compilar hello.c a partir do código fonte en
código obxecto ou 0s e 1s, que debe ser suficiente só para facer
isto e prema Intro.
>> Ok, nada parece ter acontecido.
Pero eu sei que agora, ou a semana pasada, que o nome do patrón de
un programa, cando escrito en C, é estupidamente chamado a.out.
Nome máis desinteressante que podería vir enriba con.
Unha é a primeira letra do alfabeto para fóra é o que era
emitidas, pero que así sexa.
Este é o meu programa, e agora punto barra, como veremos, é
en realidade, só un tipo de recurso de seguridade, pois
a.out é un programa que eu escribín.
El non veu co meu ordenador, é
non en arquivos de programas.
Non está no cartafol Mac aplicacións.
Eu teño ser explícito super co ordenador, e dicir
Neste programa, a.out, está no cartafol actual, o
directorio actual.
E a forma de representar isto nun ambiente coma este
é punto representa calquera cartafol no que está dentro
E así. / A.out significa só correr
o cartafol actual.
E eu executar este con Intro, e listo, o meu primeiro programa.
>> Agora, deixe-me dar un paso atrás.
Esta xanela é un pouco pequeno, e entender que o fondo
á esquerda do aparello aquí é outro icono.
Unha delas é o Chrome, que debe ser moi familiar, só unha tea de
navegador dentro do aparello.
E este icona branco e negro é só un
fiestra máis grande terminal.
Entón, se está un pouco aburrido a sorte de ter só
esta porción minúscula dunha fiestra coa que interactúan
cos programas, podemos facelo en vez.
E agora déixeme comezar a escribir algúns logo
ser comandos coñecidos.
ls.
Entón, ls é o comando para a lista.
Así, en un Mac ou Windows, en xeral, dúas veces nun
carpeta e listo, ve todos os ficheiros de varios
e carpetas.
Nun ambiente de liña de comandos, onde podes escribir só
mandos ou texto ls é o equivalente.
Entón me mostre o que está neste directorio.
>> Agora, hai unha morea de cousas aquí que é tanto un pouco
familiar e un pouco raro.
Pero teña en conta que, como Windows e Mac OS, jharvard
ten un cartafol de escritorio.
Así, as iconas que están na miña zona de traballo acontecer
para o cartafol.
Hai unha carpeta de descargas, cousas que
Chrome pode poñer alí.
Dropbox.
Así, o dispositivo vén con soporte embutido para o Dropbox
de xeito que, ao longo do semestre, pode sincronizar co Dropbox
conta para que todos os seus programas son copiados.
Son accesibles no seu outro ordenador.
Se algo der mal co aparello, pode
moi facilmente recuperar Dropbox.
Así que a carpeta está alí para iso.
Hai dous arquivos que eu fixen - hello.c
e a.out.
E despois a dereita hai algunhas outras carpetas que nós imos
chegar ata o final do semestre, a web
programación.
Entón, cando eu fago. /, A.out, Intro, que está dicindo que vai
no directorio no que estou, o directorio actual, e executar o
programa chamado a.out alí.
>> Todo ben, entón iso é bo e bo, pero non é todo o que
convincente para escribir un programa chamado axudar a.out.
Así, podemos realmente facer iso un pouco diferente.
Entón, en vez de só clang execución, hello.c, imos engadir
o que se chama un argumento de liña de comandos.
Así, un argumento de liña de comandos, ou un conmutador, neste caso, é só
outra palabra ou frase que escribe nun prompt despois
o programa que quere executar.
Polo tanto, neste caso, bumbum é o programa que quero correr, o
saída dun medio de ficheiro que non é máis chamado a.out.
Saída dun arquivo chamado Ola, e facelo por compilar o
A última palabra sobre a liña, hello.c.
Así, en breve, esta é unha mellora moi marxinal, en que
en vez de ter este ficheiro a.out estupidamente nomeado,
Agora podo facer clang o Hola, entón hello.c, e
a continuación, prema Intro.
Nada parece acontecer, pero de novo moi parecido 0 - cando
nada parece ocorrer significa que nada de malo aconteceu -
entón imos facer ls agora Intro, e en realidade eu agora
ten un programa Olá
Entón, se eu escribir Ola agora, non comando encontrado.
OK,. /.
Entón exactamente correcto.
Entón, porque este programa que eu escribín, e non veu con
o ordenador,. / Ola, Intro, significa
Agora estou correndo Olá
>> Entón é iso aí.
Agora, o que vai finalmente chegar a liña de comandos máis e máis
argumentos que nos permiten facer máis, pero só para aqueles para
quen este pode ser o vello sombreiro, deixe-me realmente entrar nunha
directorio aquí e só dar-lle un teaser do que doutra forma nós
podería ir sobre a aplicación Ola Mundo.
Deixe-me entrar aquí, e eu vou abri-lo.
Entón, en realidade, eu vou explicar o que eu estou facendo, entón
Isto é útil.
Deixe-me de volta.
>> Entón, eu veño facendo iso hai moito tempo.
Entón, observe máis á dereita, hai un par de
directorios que son nomeados estrañas source1m e source1w.
Esta é só unha convención boba que usan.
Fonte significa só o código fonte, significa que este é un dunha semana, e
m significa que é luns, e w significa que é Mércores.
Polo tanto, nada de enigmático alí.
É só notación abreviada.
Esas cousas azuis son carpetas, tamén coñecido como
directorios.
Eu quero ir a esa carpeta agora, e nun ordenador normal
Eu podería simplemente facer dobre clic na icona de cartafol e
hai todos os meus arquivos.
Pero nun ambiente de liña de comandos, eu non podo facer
que, entón en vez diso, eu teño que cambiar directorios manualmente.
Entón, se eu escribir cd e despois source1m, Intro, observe que
miña solicitude, a cousa en branco á esquerda, só cambiou.
E así, de feito, cando só dixo parénteses e, a continuación, os
squiggle pouco, o símbolo til, que só significaba que estaba
no directorio de John Harvard casa, os seus Meus Documentos,
os seus arquivos persoais.
Pero agora, en parénteses dise ~ source1m /.
Isto só significa que eu estou nunha carpeta chamada source1m
que está no directorio de John Harvard casa.
Entón, se eu agora quero listar os ficheiros neste cartafol, fácil
pregunta, eu escriba só ls.
E agora eu vexo todos os ficheiros que pre-creado para hoxe
lectura, todos os cales, ou a maioría dos cales, pasar
ao final. c.
>> Entón deixe-me ir adiante agora e executar gedit dun programa chamado
holloway.c, que é escrito por un hacker aleatoria
en Internet, que parece un pouco con iso.
E nós non imos pasar por iso en calquera
detalle, pero para aqueles máis cómodo, en particular, se
quere dar un palpite sobre o que este programa fai aquí.
Asegúrese, se é máis ou menos cómodo,
Non estamos sequera chegar a este tipo de cousas ata o final de
neste semestre.
Isto é o que é un exemplo de un concurso C ofuscado, que
medios escribir o programa máis enigmático ollar posiblemente
pode superar outras persoas intelixentes, que son igualmente
tentando escribir cousas e demostrar que poden escribir
cousas máis enigmáticas do que.
De xeito que este non é un exemplo de un programa de benestar escrito do
perspectiva de estilo, este é un exemplo dun programa que
gaña un concurso, para as persoas intentando
ser vago e abstracto.
>> Entón, se nós executar esa cousa, deixe-me ir para a miña xanela de terminal,
por así dicir.
Polo tanto, este ambiente branco e negro é chamado de
ventá de terminal en xeral.
Deixe-me ir adiante e recompila-lo.
Eu non vou usar bumbum, porque este programa é un
pouco enigmática e precisa de un distinto
compilador, un chamado GCC.
Pero fai a mesma cousa.
É preciso fonte para código obxecto.
E agora, se eu executar a.out, programa que
só vin isto.
Entón aquel suxeito que ano gañou a competición.
De calquera forma, non estamos indo nesa dirección, per se.
>> Entón, imos realmente probar agora destrinçar o que podemos facer
con estes bloques de construción básicos para facer máis e máis
programas interesantes.
Entón, escribiu un programa, nós executar un programa.
Agora podemos realmente simplificar e xa non ten que escribir
o ruído palabra no prompt.
Acontece que os nosos programas están máis enigmática, que pode, ou
máis complexo si, podemos realmente facer ese comando.
Entón deixe-me volver para o meu directorio home, por así dicir, deixe-me
Eliminar - RM é o comando de eliminación - estou indo a eliminar
o ficheiro chamado a.out e Olá
E agora conta nun ambiente de liña de comandos, así como no
unha interface gráfica, ten solicitado. Eu non podo facer clic nun botón aínda que eu
ten que escribir y para si, y para si.
E agora eu escriba ls novo, observe que os verdes
programas - a.out e Ola -
se foron.
Coidado con rm.
Pode facer cousas malas, como pode arrastrando
cousas para o lixo.
>> Entón, agora imos adiante - e eu podería facelo - clang o
Ola, ola -
Eu xa estou aburrido escribindo este comando.
Aínda que eu escriba algo axiña.
Así, podemos, en vez fan Olá
Entón, fai non é un compilador.
É só un programa agradable que vén con Linux, neste
caso - o sistema operativo -
que automatizar o proceso de compilación de programas.
Entón, en vez de lembrar clang o nome do ficheiro e
a continuación, así por diante, especialmente unha vez que as liñas están máis longos e
máis, eu só podo escribir facer.
E iso vai cuspir unha morea de cousas que
imos finalmente ver este semestre.
Pero agora, se eu entender ls tipo, Ola está de volta no meu directorio.
E de feito eu poida executa-lo con. / Olá
Entón faga só automatizar o proceso de executar o que foi,
neste caso, un mando moito máis tempo, máis complexa.
Entón, imos comezar a usar make, só porque é moi
máis agradable.
>> Pero agora imos facer un programa máis interesante
que simplemente dicir Olá
Entón, nos programas que temos escrito ata agora non hai principal.
Isto é só a cousa estándar que chuta todo fóra.
Pero hai outras funcións aí fóra tamén, e
stdio.h é o único que vimos ao comezo do noso
ficheiro, e iso é o que se coñece como a biblioteca estándar.
Dentro da biblioteca estándar é unha morea de funcións
que alguén escribiu, e podemos comezar a usar estes
funcións para escribir máis
programas interesantes para nós mesmos.
>> Entón deixe-me volver para o aparello.
Vou pechar esta xanela de terminal.
Vou pechar as cousas que escribín anteriormente, e só ir
en hello.c, e observe agora podo facer o seguinte.
Ola mundo non é tan interesante, gustaríame
personalizar o programa para min.
Entón, en vez de dicir mundo, eu vou
vai adiante e dicir -
Eu podería escribir David -, pero iso realmente é unha especie de
fundamentalmente os mesmos.
Pero imos tentar esa idea do espazo reservado.
Lembre que en C, en vez de printf, tivemos estes
espazos reservados, e hai máis que% d.
Entón% d era, proba de sanidade rápido.
Ok, número decimal, é iso.
Díxitos decimais, iso é todo.
Entón c%, como imos atopar, vai ser un personaxe.
Engade un personaxe aquí, unha carta da a Z,
ou símbolo de puntuación.
Un único carácter,% f, alguén sabe doutras linguas?
Así, un valor de punto flotante.
Un número real.
Entón, non é un número decimal - este é realmente un número real con
un punto decimal e un número de díxitos á esquerda
e dereita.
% S, cadea.
Iso que nós imos ver con bastante frecuencia.
Un fío de novo, é só unha palabra, unha frase, unha secuencia de
caracteres individuais.
E, por último, LLD?
Polo tanto, este é un caso de esquina.
Longo decimal, de lonxitude.
Entón, se non quere só un número que é tan grande,
quere un número maior, vai ter que especificar a
o ordenador que é dun tamaño específico.
>> Entón, imos axustar iso un pouco.
En vez de só un código ríxido de David, deixe-me un pouco
dinámicamente dicir s%.
Entón engada% s aquí, que é un espazo reservado para a cadea.
Entón deixe-me facer coma e "David" por aquí.
Agora, iso non é todo o que intelectualmente interesante,
porque todo o que eu teño feito agora é realmente crear máis traballo para
o ordenador.
En vez de dicir ao ordenador facelo todo dunha vez, eu estou agora
dicindo iso e inserir unha cadea aquí eventualmente, coma,
aquí é esa cadea.
Entón iso non é unha mellora, pero é polo menos
un paso cara a un programa máis interesante.
Porque agora, deixe-me ir adiante e facer esta xanela un pouco
maior, deixe-me ir adiante e executar o make Olá
E agora,. / A.out non funciona, por que?
Todo ben, agora é chamado Olá
Entón, de novo, facer, e tamén cun estrondo o-, o nome de
programa a ser algo máis interesante.
E listo: agora di Ola David.
>> Todo ben, aínda un programa estúpido.
Entón agora imos realmente volver aquí e introducir a noción
dunha variable.
Non sería bo se eu puidese declarar unha variable
cuxo tipo é string?
E o valor da variable, en realidade, vén de usuario
si mesmo.
Así, de forma arbitraria, vou conectar o meu s variable, que é
só unha convención común cando ten unha variable chamada
a cadea.
Vou facer signo igual, e entón eu vou chamar un
función chamada GetString.
Entón GetString non é algo que vén embutido C. É
unha función que o persoal CS50 escribiu, en realidade, só para
estas dúas primeiras semanas, para simplificar o proceso de
incorporarse entrada do usuario e obter a entrada do usuario en forma
de cordas, ou números, e tal.
Entón GetString é como printf, pero, obviamente, no canto de
imprimir lo vai facer o que o seu nome di, ten unha cadea.
Pero para usar GetString, nós imos ter que facer un cambio
aquí, alén diso.
Entón intuitivamente, este programa, esperamos, vai de algunha maneira
obter unha cadea de usuario, e entón o que é o que vai facer
con esa secuencia, chamada s?
El só vai imprimir lo, non?
Aínda non un programa estimulante porque todo o que está a suceder
que facer é conectar ese valor onde% s
di que debe ir.
>> Entón, imos polo menos ver iso en acción.
Deixe-me salvar e zoom out.
Agora, na miña xanela de terminal para acá, a pequena porción de unha,
deixe-me de novo fan Olá
Ok, e ah, caramba, eu teño unha morea de erros.
Deixe-me ir para arriba, e vemos o noso primeiro -
entón imos realmente facelo nunha ventá aínda maior para que
pode ver o que eu estraguei todo -
entón faga Olá
Ok, iso é un desastre, non?
Eu escribín tres liñas de código, e
que me deu 12 erros.
Entón, por que é isto?
Entón, por sorte, moitas veces cando ve moitos, moitos erros
cuspindo unha vez máis, é realmente só porque
confundiu o ordenador aquí.
E permanece confuso co tempo el está aquí.
E por iso só comeza a tropezar, e tropezando, e
cuspindo máis asustado do que realmente se aplica.
Así, en xeral, sempre comezar co de arriba.
>> Entón, o exemplo máis arriba de vermello, a
mensaxe de erro é este.
Uso de cadea do identificador non declarado, que
significa estándar en?
Non.
Eu quería dicir corda, pero iso é porque, tamén, a secuencia de palabras
que eu continúe a usar verbalmente, en realidade,
non existe en C tamén.
É algo que vai usar só para a primeira ou segunda semana
aquí, pero hai un ficheiro chamado cs50.h.
Entón, por agora, sei que hai esa outra biblioteca que o
persoal escribiu, polo que foi escrito máis recentemente do que
stdio.h.
Pero dentro cs50.h é unha definición, un sinónimo de
tipo, que crea esta secuencia de palabras.
>> Entón, agora déixeme volver á miña xanela de terminal.
Eu estou indo para limpar toda esa desorde por Ctrl-L. Nós só
limpe todo limpo, e eu estou indo a ir adiante e facer
Ola de novo, Intro.
Entón, o que pasou agora?
Agora, todos estes erros foi aínda.
Entón o que eu realmente fixen?
Eu só ensinaba o ordenador que cadea existe, e é
nese ficheiro chamado cs50.h.
Entón deixe de reclamar, porque agora sabe onde atopar
declaración de que a función do modo de falar.
Nos casos en que existe no mundo.
>> Entón agora eu estou indo a ir adiante e executar Olá
Parece que teño un loop infinito, que nada está a suceder.
Entón eu teño escribir algo aquí, certo.
A primeira liña de código no meu programa foi GetString.
Polo tanto, é literalmente agardando por min para obter unha cadea.
Entón, nese sentido, si, é un loop infinito.
Ao parecer, en GetString é o comportamento estándar que
escribiu - o persoal -
que só di esperar e esperar e esperar e esperar e esperar,
ata que o usuario lle dá unha secuencia escribindo algo dentro
Entón deixe-me ir adiante e escriba D-a-v - i-d, Intro.
E aí está, Ola David.
>> Agora iso parece que é só un acto?
Deixe-me ir adiante e escribir en Tommy.
Introduce, ok, parece estar funcionando.
Obras para Rob, obras para Zamyla, traballa para - ok.
Por iso, vai para o traballo, o máis probable.
Por iso, debe imprimir o que realmente darlle,
e podemos ser un pouco difícil aquí.
Imos ver se facemos algo como Olá
Pode ir por aquí, imos ver, copiar, pegar.
Eu non vou ser capaz de pegar que moitas veces aquí.
Cole, ok, Shift + Ctrl + V. Entón, o que podería
acontecer que é malo aquí?
>> Ok, entón, segfaults.
Entón, algúns de vostedes con orixes anteriores sabe que
xeralmente, dando ordenadores lotes de entradas cando son
probablemente non quixo recibir nomes longos coma este - ruins
as cousas acontecen.
De feito, no mundo da web, tamén, iso pasa un pouco,
polo que, cando está designado un sitio web, cando está
deseño de Facebook, ten que tomar decisións arbitrarias se
fronte, como canto tempo será de alguén
Facebook usuario ser?
Ou canto tempo vai primeiro nome de alguén ser?
Canto tempo o número de teléfono de alguén ser e similares.
E se os programadores fan suposicións malas, programas de romper
porque tentar darlles máis saída, máis entrada
en vez diso, eles teñen de memoria.
Ou RAM alocados para el, e por iso, agora eu presione Enter,
que o programa realmente funciona, porque estabamos na biblioteca
e nós, en realidade, adiantou que neste caso particular.
Pero, sen dúbida, este semestre, vai escribir polo menos un
programa que vai dicir estas palabras.
Teña en conta que esta semana a partir de agora, quizais dentro de dous días.
Fallo de segmento é unha cousa mala.
El ha referirse a súa facendo algo que o ordenador do
non prevista.
E, nese caso, o programador, non prevista.
Así como o que esta pila de medias, varias foron as
casos de canto que poderiamos ter atopado.
Do mesmo xeito en programas se non prevista o tempo que
o nome de alguén que vai ser.
Ou o que eu teño un usuario mal intencionado, eo seu nome é
realmente moi curto, pero eles están só tentando
xogar comigo?
O que vai ser o comportamento do meu programa?
Ben, nese caso, algo realmente pode funcionar.
>> Entón, imos facelo.
En 90 minutos, este é un tempo moi longo
facer ciencia da computación.
Por que non temos o costume de tomar un de cinco minutos
romper aquí, e cando volvemos, imos mergullar en algúns
programas máis complexos e convincente?
Cinco minutos.
>> Todo ben.
Entón, un comentario rápido.
Dixéronme que se iso fose na pantalla antes, o que
saíu da miña boca foi cs50.net/rsvp.
Isto é correcto. cs50.net/lunch.
Entón, agora pode probar RSVPing a este en / xantar.
Pero imos facelo agora.
Así que esta foi super rápido, super novo para unha morea de xente.
Sombreiro vello para algunhas persoas.
Entón, imos voltar por un momento, e ver como chegamos a
esta saída Ola mundo hai pouco.
>> Entón, primeiro, hai esa Appliance CS50.
Unha vez máis, peza de problema de software, definir un vai dicir
como baixa-lo, onde baixa-lo, o que para premer
e así por diante.
E entón, unha vez que seguir estas instrucións, será capaz
maximizar a xanela, eo seu Mac ou PC vai parecer un
pouco algo como isto.
Un fondo negro, unha carpeta base, na parte superior, onde todos
seus arquivos van, unha lata de lixo na esquina superior esquerda,
un menú na parte inferior.
Entón, de novo, moi semellante en espírito para Mac OS ou Windows,
mesmo que pasa a ser o Linux.
Entón, o que seguinte facer?
Ben, nós comezamos a escribir programas.
E lembrar da semana pasada, que todo leva a escribir unha
programa é un editor de texto simple,
como o Bloc de Notas ou TextEdit.
Francamente, aínda pode usar o Microsoft Word.
Pero as cousas malas van ocorrer finalmente, porque iso é moi
pesada solución para escribir un programa, máis vai
garda-lo no formato de ficheiro incorrecto.
Pero é só un editor de texto, un procesador de texto, é todo o que é
necesario para escribir un programa.
>> Así, no Appliance CS50, podemos facelo dunha forma sinxela.
Podemos simplemente prema na icona no ángulo inferior esquerdo.
E, de novo, un conxunto de problemas ha aconsellamos-lo sobre iso, e listo -
ten esta interface branco e negro onde podemos comezar
escribir código.
Entón, imos comezar a escribir un programa super sinxelo de novo.
Eu estou indo a ir a Arquivo, Gardar, e eu vou chamar
iso, imos dicir, hello2.c.
E eu estou só dicindo o premendo no jharvard, coloque o
no seu directorio home, eu realmente non me importa
onde este vai.
E despois en Gardar.
E agora podo comezar a escribir o meu programa.
E recordo máis cedo que eu teño que escribir int
main (void).
Zoom arriba, á esquerda.
E entón quero dicir printf, leve dous.
E agora unha cita, nova liña estreita, peche
parénteses, punto e coma.
E entón eu vou por aquí a miña xanela de terminal que se
incorporado no gedit, só por conveniencia.
E eu estou indo a ir adiante e escribir facer Ola, pero non
Ola só, hello2.
>> Entón, o meu arquivo é chamado hello2.c. Meu arquivo, polo tanto,
debe ser chamado hello2, neste caso.
Caramba, o que eu fixen de malo?
Todo ben, entón eu claramente omitido unha liña, se se lembra o que
programas anteriores parecer.
Pero imos ver se non podemos provocar este apart.
Desafortunadamente, a maioría das persoas que escriben os programas cos que
escribimos programas non simplificar as cousas moi ben.
Entón, temos que tipo de roçar sobre o que non facer moito
sentir aquí e ver se conseguimos descubrir o que está mal.
A primeira liña alí di implicitamente declarando C
función de biblioteca printf con tipo int.
OK, eu entendín parte diso.
Pero parece estar aludindo ao feito de que eu usei printf
mal, de algunha maneira.
E que sentido é malo?
Eu só non ensinar o ordenador que está nun arquivo
chamado stdio.h.
Agora eu só teño que só memorizar agora que printf é
en stdio.h, e por suposto haberá outras
funcións no mesmo arquivo que imos acostumar.
>> Entón, agora deixe-me ir adiante e prema Ctrl-L só suposto
distancia, reprise facer hello2, e listo.
E este comando novo, máis complexo do que nós imos explicar a
fins de hoxe.
Pero foi bumbum, bumbum e leva o código fonte e
Cospe 0s e 1s.
E os 0s e 1s, neste caso, son chamados de que?
Ok, obxecto de código.
E o ficheiro que está no chámase así
hello2, neste caso.
Porque o meu arquivo de texto hello2.c, Intro.
E agora eu tomar dous puntos de exclamación, exclamación
punto, punto de exclamación.
Todo ben, entón agora temos a capacidade de obter cordas,
aparentemente.
Ben, o que máis podemos comezar a partir de usuarios?
>> Ben na biblioteca CS50, hai outras funcións que
están indo para simplificar as nosas vidas nestes primeiros días.
GetChar, GetDouble, GetFloat, GetInt,
GetLongLong, GetString.
Ben, imos arrincar fóra o máis fácil deles en primeiro lugar.
GetString literalmente fai iso.
El está alí, á espera de que o usuario escriba algo,
e así que eu escriba algo e presione Enter, el
fai algo con ese valor.
Entón, imos voltar a ese exemplo para ver exactamente o que
GetString estaba facendo.
Deixe-me ir adiante e abrir o gedit, hello.c, e recordar
este dereito antes do rango, este é o lugar onde paramos.
>> Entón, imos agora provocar isto ademais de un pouco máis de detalles.
Así, na liña 6, hai dúas cousas
suceder na actualidade.
O signo igual é separar primeiro semestre e segundo semestre.
Así, no lado esquerdo do signo igual, estamos
dicindo cadea s.
E entón, só palabras laicos, que é string s
facendo, que pensas?
É a creación de algo?
Entón, é a creación dunha cadea chamada s.
Agora, o que iso realmente significa?
Ben, é reservar espazo para unha cadea chamada s.
Iso non é certo.
O que se está facendo?
Ordenadores ben, como saben, teñen unidades de disco duro, que é onde
os seus arquivos están gardados.
Os ordenadores teñen memoria RAM, e é onde os programas son cargados
mentres eles están funcionando.
Entón, cando premer dúas veces nun icono e Microsoft Word abre
anterior, o Microsoft Word está en execución, por así dicir, na RAM, o que é
a parte electrónica do seu ordenador.
Non é a parte física, mecánica que está xirando, onde
os datos son xeralmente almacenadas a longo prazo.
Así cadea s é moi fermoso dicir que o ordenador me dá
memoria RAM suficiente para atender a unha corda.
Agora que é un pouco de unha simplificación, porque
quão grande é a corda vai ser?
Ben, nós realmente non sabemos aínda, entón nas próximas semanas
nós imos realmente tirar a capa que é a cadea e
imos dicir-lle o que realmente é.
Cadea, polo de agora, só unha simplificación agradable do noso mundo.
Pero cadea s declara unha cadea chamada s, por agora.
Declara unha cadea.
El reserva un espazo na memoria RAM para a cadea que o usuario é
a piques de escribir.
>> Agora imos ollar para a dereita do signo igual.
Por iso, di GetString ().
E un pouco de sanidade comprobar.
O feito de que non hai nada dentro dos parénteses
implica que sobre GetString?
El non ten argumentos.
Ou sexa, non pode influír no seu comportamento de forma algunha.
Cada vez que usalo, vai incorporarse unha cadea e é iso.
Por outra banda, printf, espero que o seu comportamento fai
cambian cada momento.
Se non, é unha función de impresión bastante inútil se
fai a mesma cousa.
Se sempre imprime David ou algo
arbitrario todo o tempo.
Entón printf ten sentido ter un argumento.
GetString realmente non precisa dun argumento, porque eu quería
para obter unha cadea de usuario e é o usuario que vai
para abastecer o dinamismo escribindo en letras diferentes
cada tempo no teclado.
>> Entón, o que GetString que en última instancia?
Pense nisso como esta pequena caixa negra.
E esa caixa negra ten ningunha entrada, pero cando bate
, El cospe unha cadea que o usuario introduciu dentro
E o feito de que hai un sinal de igual non significa tomar
o que é cuspir na dereita e almacena-lo dentro
o que está na esquerda.
Sinal para igual aquí, en realidade, non significa
igualdade, en vez tecnicamente significa asignación.
Colla o valor á dereita, e coloque-o no
variable á esquerda.
Entón, iso é todo o que está a suceder alí.
>> Agora na liña 7, estamos chamando printf.
Entón, espero que printf está quedando un pouco aburrido agora.
Así imprimir unha secuencia formatada.
O cadea?
Imprimir "h-p-l-l-o,% s
\ N ".
Todo ben, entón o que quero plug-in% s?
Literalmente, calquera que sexa almacenado s.
Polo tanto, neste caso, proba de sanidade pouco, cantos argumentos fai
printf tomar?
Ok, eu oín un.
Eu oín unha vez.
Dous, eu oín dous.
E como preto de tres?
Ok, tres?
Excelente.
Tres respostas posibles, só unha delas é a correcta.
Así, os argumentos de novo influír no comportamento dunha función.
No pasado, printf que só pode tomar un argumento.
"Ola mundo" foi un único argumento.
Con todo, agora, entender onde esta coma é.
Esta comas está fóra da cita / unquote, o que significa
printf hey, aquí vén un segundo argumento.
>> Entón comas en linguaxes de programación
separados varios argumentos.
Polo tanto, a resposta é sempre non é un, porque
hai este comas.
Entón, como mínimo, printf é aparentemente levando dous
argumentos desta vez.
Pero a oportunidade para unha pregunta truco aquí é o que
sobre esta coma?
Isto implica que hai, en realidade, tres argumentos?
Isto, este, e este.
Entón, non, porque esa coma está dentro das comiñas, que
significa que é realmente só unha estética de inglés.
Non ten nada que ver co número de
argumentos deste programa.
Polo tanto, este é coma fóra das comiñas.
E a continuación, voltar 0.
Por agora, imos só unha especie de levar un regalo na fe para
hoxe, e só sei que cando as funcións son feitas execución
liñas de código, que xeralmente debe retornar algún valor.
Neste caso, só porque principal debe voltar un int,
iso é só a forma como a linguaxe C funciona.
>> Entón, porque nada deu mal, se sente como o programa
ben, eu só codificado no retorno 0.
Pero, en contraste, e eu vou escribir isto no código pseudo
agora, así como José fixo cando fixemos a media
exemplo, a semana pasada.
Se algo deu mal - este non é o código real - foi
mal, a continuación, voltar, digamos, 1.
Else return 0.
Polo tanto, este é o lugar onde nós estamos indo con iso.
Este non é o código C real, só pseudocódigo.
Pero é así que pode volver
distintos valores posibles.
Pero agora eu estou indo só para ir adiante e volver 0.
Todo ben, todas as preguntas, ata agora, sobre a funcionalidade, sintaxe,
ou semellantes?
Si, na parte de atrás.
>> Audiencia: [inaudível]
DAVID Malan: Pode falar un pouco máis alto?
Por que fixo iso 0 retorno do programa, e?
Audiencia: [inaudível]
DAVID Malan: Ah, iso é porque eu teño preguiza, desculpe.
Ningunha resposta boa académico, volver 0.
Podo tipo de rescatar iso, dicindo tecnicamente C, se principal
non retorna explicitamente un valor, 0 será devolto
automaticamente para ti.
O que é certo, eu non estou cubrindo-se.
Pero, eu debería ter feito isto desta maneira.
Non takeaway interesante do que a outra que o meu erro.
Si?
>> Audiencia: Normalmente, cando escribe no baleiro, significa que
non retornar algo.
DAVID Malan: Correcto.
En vez diso, vostede especifica antes do nome dunha función, por
exemplo, aquí, nula, entón a función
non retorna nada.
E, polo tanto, quere só de dicir, o retorno ou nada,
e que sería consistente.
E nós imos voltar a iso.
E só FYI, unha das capturas coa aprendizaxe
programación nun mundo que ten centos de libros e
centos de sitios por aí que vai, invariablemente
ver sintaxe diferente en diferentes libros
por persoas distintas.
Entenda que imos facer o noso mellor en seccións e conferencias para
consistente.
Pero ás veces vai ver sintaxe conflitantes.
Así, sempre en dúbida, pode preguntar.
E, en xeral, nós imos coidar de conferencias e seccións para
case sempre presenta-lo no camiño certo.
E digo case sempre, porque se trate.
Outras preguntas?
>> Público:% s hai fóra do aparello?
DAVID Malan:% s hai fóra do aparello?
Si
Entón% s ten que ver coa C. O feito de que nós estamos usando o en
o aparello fundamentalmente non ten nada que ver co
características da linguaxe que estamos a usar.
De feito, a semana pasada, cando usamos o meu Mac, eu escribín
C código no meu Mac
Eu podería usar% s no meu Mac, e pode usalo en
seu ordenador con Windows se instala un compilador, como
Visual Studio de Microsoft.
Así,% s.
Todo o que estamos facendo neste xanela de hoxe ten que
facer C. E, fundamentalmente, nada que ver co
sistema operativo en cuestión.
Por outra banda, a xanela do terminal branco e negro - cando
Eu estou escribindo cousas como ls, rm e CD e -
que ten que ver co sistema operativo e
navegar arredor.
Si
Audiencia: eu quería dicir a biblioteca, a biblioteca CS50.
DAVID Malan: Ok, entón se quere dicir a secuencia de palabras clave, que
só existe na biblioteca CS50, correcta.
Isto non existe no C-se, e de feito nun par
de semana imos tirar a biblioteca CS50 e comezar
facer as cousas a partir de cero nos, por así dicir.
Outras preguntas?
Si
>> Audiencia: [inaudível]
DAVID Malan: Boa pregunta.
Son o caso ordes sensibles?
E deixe-me facer unha distinción aquí.
Así, os comandos son xeralmente as cousas que vou escribir no
parte inferior da xanela, na fiestra da terminal.
Calquera cousa ata aquí sería declaracións ou de código C.
Pero en ambos os casos, a resposta é a mesma, si.
Ambos estes ambientes, o código C na parte superior ea
liña de comandos do sistema operativo no
fondo, son maiúsculas de minúsculas.
Polo tanto, ten que capitalizar GetString con capital G,
capital de S. Debe escribir printf en todas as minúsculas.
Debe teclear ls en todas as minúsculas.
Así, en case todas as situacións deste semestre caso, pode, en
materia feito,.
Si
>> Audiencia: [inaudível]
DAVID Malan: Ah, entón todo ben, o que se tivésemos un ficheiro
chamado hello.d.
Así, parece D é unha linguaxe de programación.
E así, nalgúns casos, poderiamos escribir un programa en
este ficheiro e telo compilado en que a moda.
Podemos, e en realidade, resposta curta é, eu non sei.
Entón, imos facelo.
Deixe-me ir adiante e crear un novo arquivo.
E o spin aquí, honesta, en xeral, é que sempre que calquera dúbida
neste semestre, e ten o seu dispositivo ou ordenador
abrir, vai adiante e tratar de algo.
Entón, eu estou indo a gardar un arquivo chamado hello.d.
Gardar esta.
E eu vou correr facer Ola Intro.
Parecía inferir que c é máis probable
que d, neste caso.
Outras cuestións.
Si
>> Audiencia: [inaudível]
DAVID Malan: Ok, dicir que, unha vez máis.
Audiencia: [inaudível]
DAVID Malan: Como faría para diagnosticar ou que
solución de problemas que?
Entón, moi probablemente, porque son diferentes linguas,
máis probable que vai quedar completamente
programa diferente emitidas.
Recibir mensaxes de erro completamente diferentes.
E tamén só en termos de deseño, sería sen dúbida ser un
decisión de proxecto pobres para estar escribindo dous diferentes
linguas con arquivos de forma case idéntica nomeados, en
o directorio exactamente o mesmo, utilizando un
ferramenta automática como facer.
Entón eu tamén pode empurrar cara atrás e dicir, en 15 anos de facelo,
nunca cometeu ese erro.
Podería acontecer.
Pero hai só diferentes, eu creo,
defensas loxísticos no lugar.
Ademais, as mensaxes de erro que decorreriam, que sería
finalmente revelar cal é o problema.
Pero un caso extremo posible.
>> Todo ben, entón imos presentar só un par de outro
características aquí agora, para que poidamos comezar a construírse en máis
e un programa máis complexo.
Entón, primeiro de todo, de matemáticas.
Así, exemplos de matemáticas son só unha especie de fácil a primeira semana.
Isto non é para dicir que toda a programación está a piques
matemáticas.
Certamente, a comprensión de varias características de
matemática, álxebra, en particular, é
bastante relevante aquí.
Nas clases de nivel superior CS, álxebra lineal,
cálculo, e semellantes.
Pero entendo que a maioría do que imos facer este semestre non reduce
de matemáticas, e por suposto non a aritmética, por si só, pero realmente
só para a lóxica e pensamento coidadoso.
E así esa conexión que a informática ten moito tempo,
especialmente no nivel do ensino medio, coa matemática, é unha
pouco erro.
Porque a maioría dos programas que imos escribir, realmente, son
especie de maior nivel e foco na resolución de problemas que
seguro, pode utilizar algunha adición, subtracción, e varios
fórmulas matemáticas ou semellantes,
pero ao final do día, é sobre pensar e non
só aplicar o que podería ter feito como se fose un TI
calculadora no ensino medio.
>> Entón, con iso dito, imos agora facer algo con estes
operadores matemáticos que existen para que poidamos viaxe
ao longo de algúns dos aspectos fundamentais da programación, ou en
Neste caso C. Así, existen, como a biblioteca CS50 suxerido,
e hoxe estamos usando só GetString - e nun momento
quizais función de outro -
pero existen diferentes tipos de datos dun ordenador.
Ao final do día, os ordenadores só sei 0s e 1s.
Pero lembre que a semana pasada falamos sobre o sistema binario
na representación de números, como o número 0, e 1, e 2,
todo o camiño ata un 8, como no vídeo de Nate.
E entón podemos contar moito maior debido a que
fixo no escenario aquí.
Pero se quere representar non só números, pero letras,
Nós, os seres humanos, teñen que chegar a algún arbitraria
convencións, no que, ao final do día todos meu ordenador
ten é a capacidade de expresar 0s e 1s, así que sería mellor
comezar a estandarizar os patróns de 0s e 1s que representan
cousas distintas.
Un nivel de 0s e 1s que representa a letra a.
Patróns de 0s e 1s que representan a letra z.
Patróns de 0s e 1s que representan a cor azul, ou
vermello, ou algo semellante.
Necesitamos utilizar todos eses 0s e 1s nos expresar en
contextos diferentes, de formas distintas que non son
necesariamente numéricas.
>> Polo tanto, en termos de representación, C ten diferentes tipos de datos,
e vimos un deses ata agora.
Vimos int, e observe o que non está na pantalla
agora é string.
Cadea non, de feito, existen en C. De novo, é unha
simplificación que estamos presentando para o primeiro
par de semanas.
Un char é un personaxe individual.
Un float é un número real, cun punto decimal e cifras para
á esquerda e á dereita.
O dúo é o que, para aqueles con fondo de volta antes?
Así, unha parella é algo dúas veces.
Engade dúas veces moita precisión.
Entón, o que significa isto?
Así, en cada un destes casos, o tipo de mundo estándar
cantos bits son usados ​​para representar
cada unha desas cousas.
Entón, se asistiu vídeo ASCII Nate xa cara á parte
de pset 0 ou máis tarde esta semana vai, probablemente sabe
que ASCII -
representacións de caracteres -
utilizar tantos bits?
E pode ata lembrar da nosa demo a semana pasada como
moitas persoas estaban no escenario.
Así, 7 ou 8, tipicamente.
Entón, xeralmente 8, e hai algo chamado prorrogado
ASCII que utiliza todos os 8 bits, en vez de sete.
Pero, en xeral, estamos a falar de potencias de 2, polo tanto, neste caso, 8.
Así, un char nunha linguaxe de programación é xeralmente 8 bits.
Así, un int é xeralmente 32 bits.
Un flotador é xeralmente 32 bits.
O dúo é xeralmente 64 bits.
E o que significa isto?
Isto significa que pode representar números grandes, ou no caso
de números reais, pode ter números máis tras a
decimal.
A precisión moito máis, nese caso.
Agora, un longo tempo, por desgraza, é nomeado.
Polo tanto, hai un int que é de 32 bits.
Hai unha lonxitude que é, non, os 32 bits.
E un longo tempo, que é de 64 bits.
Con todo, algúns dos que son sensibles ao contexto, depende
que tipo de ordenador que ten.
Así, en xeral, imos indicar nunha casa ou nun quiz cando
que realmente importa.
Pero o punto é que hai todos estes diferentes
representacións aquí.
>> Entón, imos mergullar de feito nun programa.
En vez de escribir este a partir de cero, deixe-me ir adiante
e abrir a partir do código fonte de hoxe - o que é
en liña - se quere xogar en torno liña, o retorno ou
Mércores o aparello no seu ordenador, instrucións
para que ha conectar na páxina principal do curso.
Aquí está o programa super sinxelo.
Pero el ten un pouco de algo novo na parte superior que
non tiñamos antes.
Unha morea de liñas azuis de texto.
Entón, estas liñas azuis representan comentarios.
Polo tanto, é moi útil nun programa para ser capaz de escribir
algúns comentarios para si mesmo ou para os compañeiros ou amigos, ou
compañeiros de ensino, este tipo de describir o que está a suceder no
este ficheiro, pero non ten nada que ver co código C en si.
Nada que ver co programa funcional, é só
estética.
Así, a forma de facelo en C é xeralmente comezar o seu
comentarios / *, e que acaban cos seus comentarios
* /.
E se vostede é realmente anal e quere debuxar tipo de imaxes,
entón ía poñer unha morea de estrelas, faría unha
pequena caixa como esta.
Pero nada diso importa.
O único que importa é a primeira
e. último
Isto é o que se chama un comentario multi-liña.
E iso é só unha convención humana moitas veces fan as estrelas e caixa
cousas como esta se ten unha morea de tempo libre.
>> Entón, despois de que teña escrito en algúns comentarios, en xeral, veñen
a coraxe reais do programa.
Aquí está o noso familiarizado # include.
E só rápido, iso é necesario ou non necesario?
Audiencia: necesario.
DAVID Malan: Entón non é realmente necesario.
Entón, por que, con todo, non é necesario?
Polo tanto, non hai printf.
De feito.
Todo o que estamos facendo neste programa é a matemática.
Entón, podo realmente eliminar iso.
Entón non ten que sempre inclúen algo
a parte superior dun programa.
>> Entón imos simplificar isto un pouco.
E agora entender o que este programa fai.
Non moito interese.
int x = 1.
Ben, o que se está facendo?
Ben, creo que volver para o modelo mental antes.
O lado esquerdo desta expresión fai o que?
Crear espazo para un número enteiro.
Entón, canto espazo?
Ben, acontece que sei agora que é 32 bits.
Anteriormente, unha corda foi tecnicamente 32 bits, pero máis
en que, no futuro.
Pero un int é de 32 bits.
Polo tanto, esta expresión á esquerda aquí, int x só di hey
sistema operativo, dáme 32 bits de memoria RAM -
tamén coñecida como 4 bytes de memoria RAM -
para que eu poida poñer un enteiro nese espazo.
O número enteiro que quere poñer?
Ben, só o número 1.
int y recibe 2, fai exactamente a mesma cousa, aínda que o
número é maior, en termos da súa magnitude.
O número en si é aínda só 32 bits.
É só o patrón de bits é diferente
representan 1 contra 2.
int z agora di me dar outro de 32 bits, chame-z, e poñer o
engadir 1 e 2 en.
De xeito que agora é presuntamente z almacenar o valor 3,
e despois voltar 0.
>> Agora este programa, non é facer calquera cousa de interese?
Entón, en realidade, non fai nada de interesante, en calquera
sentido, por que? Está facendo un pouco de matemáticas.
Pero non está retornando a resposta, non.
Está retornando 0.
Non está imprimindo a resposta.
Polo tanto, este programa é fundamentalmente inútil, xa que
agora.
Está facendo un traballo.
Vai levar moito número de segundos ou microssegundos, para
correr, pero non está realmente facendo algo
útiles para o ser humano.
>> Entón, imos realmente agora abrir math2, onde agora estou, en realidade,
impresión do resultado.
Polo tanto, este tamén pode ser detectada a partir dos exemplos anteriores.
Se eu queira facer algunha matemáticas sinxelas, int x = 1, y
= 2. z é 1 máis 2 agora.
O que é que isto vai imprimir obviamente?
Só 3.
Entón sanidade rápido check.
Deixe-me cambiar a este directorio.
Entón cd source1m.
Deixe-me ir adiante e escriba make math2.
Ningunha mensaxe de erro xurdiu, entón deixe-me executar -
non a.out me deixar correr math2. Intro.
E, de feito, el imprimiu 3.
Ben, imos dar un ollo a unha variante deste.
En math3.c, agora temos este exemplo aquí.
>> Entón, este tipo de un interesante.
Polo tanto, neste un aquí, a resposta vai estar 1 dividido por 10,
e entender que eu dixo-o como unha boia.
Por que quero que sexa unha boia?
Ben, é unha fracción.
Vai ser un número real.
Por iso, vai ser 0,1, espero - 10%, neste caso.
E o que eu, entón quere imprimir?
Ben, esa resposta.
Ben, imos provocar estes separados en primeiro lugar.
Así, no lado esquerdo, declarar unha
flotar, chamalo de responder.
No lado dereito, non un dividido por 10 e poñer este
responder dentro da variable.
Agora, esta liña parece un pouco máis enigmática.
Pero notar algunhas características familiares. % Significa aquí vén un
espazo reservado.
f significa aquí está un valor de punto flotante, só un real
número, algo cun punto decimal.
0,2 significa o que?
Alguén sabe por experiencia anterior?
Dúas casas decimais.
Entón, nós non vimos isto antes, pero é só unha forma de
exercicio de un pouco máis de control sobre printf e
dito non me dá 30 puntos despois do punto decimal,
ao contrario, danme só 2.
>> E entón, imos adiante e executar este.
Entón faga matemática 3, e agora déixeme correr de matemáticas 3, Intro.
E iso non é certo.
Nós parecemos ter atopado noso primeiro erro xenuíno.
Ben, quizais eu non estou só mirando preto o suficiente.
Entón deixe-me ir ata aquí, e deixe-me poñer 20 decimal
lugares punto alí.
E deixe-me compilar iso, facer math3, execute.
Seguro que 1 dividido por 10 non é 0.
Entón, o que está a suceder?
Ben ok, entón, en realidade, el non ten que ver con iso.
Isto é un bo pensamento.
Isto é realmente só unha coincidencia
que nós estamos facendo isto.
Pero só para probar que non é iso, eu vou
voltar algo aleatorio.
Non faga iso na casa, porque é simplemente incorrecto.
Pero facer math3, deixe-me executalo.
Entón non ten nada que ver co que eu estou volvendo, só ten que ver
co que eu estou imprimindo.
Pero eu oín-lo aquí.
O que?
Audiencia: Entón necesitamos escribir os números en
a división como -
>> DAVID Malan: Ok bo.
Polo tanto, temos que escribir os números que participan do
división aquí como valores de punto flotante de si mesmos.
Así, o problema aquí é como antes: C, como acontece con moitos
linguas, ten diferentes tipos de datos.
E eses tipos de datos, por exemplo, son estes aquí.
E os tipos de datos en cuestión aquí, cando eu escriba un e entón eu
tipo 10, son probablemente os tipos que datos?
Por iso pode ser un int, non?
Definitivamente non é un flotador porque non hai decimal
punto ou algo así.
Entón, realmente, eu teño un int dividido por un int.
>> Entón, a cousa interesante sobre matemáticas e un ordenador que
se está facendo división con números enteiros -
1 dividido por 10, é de 0,1 si.
Con todo, cando está dividindo un número enteiro por un número enteiro, o
resposta ten que ser tamén un enteiro só porque, por agora.
E cal é a implicación entón?
Ben, a resposta é 1 dividido por 10 é igual a 0,1, o que
o ordenador vai facer é que eu non teño ningunha idea de como
representan 0,1, porque iso é un valor de punto flotante e non un
enteiro, que vai cortar todo despois do
punto decimal e só mostrar a 0 no inicio.
E o feito de que está a ser impreso como un punto flotante
valor, é só unha cousa estética.
Isto é porque eu estou forzando o ordenador para imprimir esta como unha
flotando valor de punto.
E de feito eu teño declarouse como unha boia, pero a matemática é
pasando por aquí.
>> Entón deixe-me realmente solucionar isto dun xeito moi sinxelo.
Por que non eu só fago 10,0 e 1,0, aínda que
tecnicamente eu podería ir lonxe con só facendo un deses.
Agora déixeme ir adiante e facer math3.
Deixe-me ir adiante e agora corren math3, Intro.
E agora, oh boy.
Agora temos un novo problema completamente.
Entón é mellor, non, estamos máis preto de 0,1, pero o que é claramente
mal aquí?
A non ser que estamos mentindo para ti por anos, non?
1 dividido por 10 é, en realidade, non é ben 0,1, entón o que é
realmente está a suceder aquí?
Ben, pode tipo de razón por esta lóxica.
Se un ordenador ten só unha cantidade finita de RAM para comezar
con, e en realidade un ordenador só usa 32 bits para unha
flotando valor do punto, é lóxico que, cunha
número finito de bits, 32, neste caso, si, pode
representan unha morea de cousas.
Realmente é de catro mil millóns de valores distintos pode ser
representado con 32 bits, 2 a 32, pero aínda é finito.
Entón, o problema é que hai un número infinito de real
números, certo.
Se me der un número real, sempre te podo atopar un
un pouco maior, un pouco menos, por só mellorar a
números que están despois do punto decimal.
Entón, se non ten un número infinito de bits, que
posiblemente non pode representar un infinito
número de números reais.
>> Entón hai esa imprecisión inherente ordenadores, e
iso está tropezou en todo o tempo, mesmo no máis simple dos
programas coma este.
Pero tamén nalgúns problemas do mundo moi real tamén.
En realidade, imos ter un momento para só dar un ollo
algo que realmente aconteceu na realidade.
Nós imos asistir só o primeiro par de minutos, e logo
imos publicar a liña de conexión.
Pero esta é a proba só o que pode dar mal, moi
honestamente, dunha forma moi tráxica cando estas cousas non son
apreciados ou só a nós, seres humanos cometen erros cando se trata de
eses tipos de detalles de implementación dos computadores modernos.
>> [XOGO VIDEO]
-E agora volvemos a desastres de enxeñaría en marabillas modernas.
Ordenadores.
Todos temos que chegou a aceptar os problemas, moitas veces frustrantes
que ir con eles.
Erros, virus e erros de software son pequenos prezos da
pagar para o barrio.
Pero en militar de alta velocidade e de alta tecnoloxía e espazo
aplicacións do programa, o problema pode ser menor
ampliada en desastre.
O 4 de xuño de 1996, os científicos se preparaba para lanzar un non tripulado
Foguete Ariane 5.
El estaba transportando satélites científicos destinados a
establecer con precisión como o campo magnético da Terra
interactúa cos ventos solares.
O foguete foi construído para a Axencia Espacial Europea e
despegou da súa instalación na costa da Güiana Francesa.
>> -A cerca de cerca de 37 segundos de voo, eles primeiro
notado algo estaba mal, que os picos foron
xiratoria de forma que realmente non debería.
Preto de 40 segundos de voo, claramente o vehículo
estaba con problemas, e é aí onde eles tomaron a decisión de
destruílo.
Un oficial de seguridade da serie con coraxe tremendas presionou o
botón, explotou o foguete antes que podería converterse nun
perigo para a seguridade pública.
>> -Esa foi a viaxe inaugural do Ariane 5, ea súa
destrución ocorreu por mor dun fallo incorporado no
software foguete.
>> -O problema do Ariane foi que había un número que
require 64 bits para expresar e que quería convertelo lo
a un número de 16 bits.
Eles asumiron que o número nunca foi
vai ser moi grande,
que a maioría dos díxitos do número de 64 bits foron 0s.
Eles estaban equivocados.
>> -A incapacidade de un programa de software para aceptar o
tipo de número xerado polo outro estaba na raíz
o fallo.
Desenvolvemento de software tornouse unha parte moi cara
nova tecnoloxía.
O foguete Ariane 4 fora moi exitosa.
Así, gran parte do software creado para el tamén foi usado
no Ariane 5.
>> -O problema básico é que o Ariane 5 foi máis rápido,
acelerado máis rápido.
E o software non tiña que representou.
>> -A destrución do foguete foi un enorme financeiro
desastre, todo debido a un erro de software minutos.
Pero esta non foi a primeira vez problemas de conversión de datos tivo
atormentado tecnoloxía de foguetes modernos.
>> DAVID Malan: Nós imos deixar por iso mesmo.
Pero iso é proba de quão aplicable mesmo algúns dos
máis baixos estes detalles de nivel que comezamos a
explotar hoxe son.
Polo tanto, aínda que comeza un pouco distraído, quizais, por algúns dos
a sintaxe e arcaneness aquí, entendemos que ao longo do
termo que vai ser focado só como iso é aplicable
mundos moito máis alá do CS.
Imos velo o mércores.