>> [Música tocando]
>> DAVID Malan: Todo ben.
Benvido de volta.
É dicir CS50, e este é Unha semana, continuación.
Entón, unha das razóns que estamos pasando arredor de tecnoloxías como
Google Glass é que eles veñen con algo coñecido como unha API, un
Interface de Programación de Aplicacións.
E o que isto significa que, co arquivos correcto e co dereito
documentación, pode realmente escribir software para dispositivos incluso como estes.
>> E así, o que temos en mente para semestres final é, se un proxecto
que inclúen, por exemplo, vidro Google pode recurso, imos ver o que podemos facer en
termos de conectar-te con algúns prestado hardware, así como o
API accesíbel para que poida realmente comezar a crear software
que corre o mesmo cristal Google.
>> Outro dispositivo que vimos xogar co de tarde que pensamos que podería ser
diversión ao final do semestre é este peixe aquí.
Chámase Leap Movemento, e que está a piques de ver é tecnicamente un
publicidade ao teléfono, pero el fala o que neste particular
dispositivo é capaz de facer.
E, tamén, ven con unha API vía que pode escribir software para
controlar o seu propio ordenador de forma me gusta moito desta película dun minuto aquí.
>> [REPRODUCIÓN]
>> [FIN reprodución de vídeo]
>> Entón, agora, o dispositivo pasa a ser aplicada como un pequeno USB
conectores que se pode conectar o seu ordenador, pero eu non quedaría sorprendido
se antes de tempo que ten este tipo de tecnoloxías no seguinte lote de PCs
e Macs para que poida, de feito, interactuar con ela
de forma semellante.
En realidade, o que eu penso que eu ía facer, tamén, é Puxei unha pequena demostración
programa que ven con este software.
Entón eu coloque o pequeno sensor diante do meu portátil.
>> E como se pode ver, el xa entende que a man está aí
controlala.
E toda esta aplicación fai é marabillas pequenas cousas como esta.
Pero podes ver que, de feito, Teño cinco dedos alí.
Se logramos que el faga as 10, podes imaxinar un piano limpo
aplicación ou semellante.
Entón, se quere chegar ata despois da aula hoxe e xogar con iso como
así, vostede é benvido.
Entón, máis sobre iso máis cara ao final do semestre.
>> Así, un par de administrativa anuncios.
Un deles, por formar parte deste venres ao mediodía cs60.net/section.
Esta URL é o curso de páxina de inicio tamén.
Nese medio tempo, con todo, supersections vai estrear este domingo.
Supersections son unha cousa de unha soa vez, porque nos leva moito tempo para traballar
quen está en que sección e onde.
>> Polo tanto, este próximo domingo, haberá unha sección para aqueles menos cómodo,
unha sección para os máis cómodo.
E aqueles de vós nalgún lugar entre son benvidos para ir
un ou ambos ou ningún.
Ambos serán filmadas.
Eles van estar nun auditorio maior que unha sección normalmente estaría dentro
Pero o obxectivo aquí é equipa-lo con algún confort con un conxunto de problemas,
con C, co aparello CS50, esta fin de semana, antes de descubrir a súa
asignación formal de sección.
Entón, vai coñecer o TF e súa menor grupo de sectionmates nuns
tempo de unha semana.
>> Horario de oficina, pola súa banda, foron pasando.
Facer aproveitala las esta noite ou mañá á noite, se desexa.
Problema set 0 débese o venres.
Este é un día máis tarde do que o regular-programado xoves.
Pero, con un conxunto de problemas, verás que inclúe algúns warm-up
exercicios co que se Pode estender a súa
Xoves prazo para o venres.
Un conxunto de problemas, mentres, vai estrear na páxina web de suposto o próximo
Venres, se quere se roscar con como eu fixen era xa tarde
Venres á noite no seu cuarto.
>> Entón cs50.net/appliance é onde pode obter o aparello CS50
que comezamos a utilizar o luns.
Imos usalo un pouco máis hoxe.
Pero a seguridade de que o problema definido un especificación ha oriente-lo a través
precisamente os pasos que cómpre para obter este instalado e funcionando.
Entón non se preocupe en facer iso antes Pset 1, se non prefire.
>> Todo ben.
Entón, nós miramos o luns no código fonte, pero, no contexto dunha nova
linguaxe de programación, é dicir, C. e C, ao contrario de risco, non é de vídeo.
Non é Puzzles Pieces.
É máis inglés-como sintaxe.
E hai un par de pasos implicados realmente en escribir e executar un
programa en C, xa que ademais de fonte código coma este, precisas algo
chamado compilador.
E, en termos leigos, o que non un compilador facer por nós?
Si
>> ALUMNO: El converte o código que escribe para 0s e 1s.
>> DAVID Malan: Xenial.
Por iso, o código que converte Escribir para 0s e 1s.
El converte o chamado código fonte para código obxecto, o último dos cales parece
un pouco algo así.
E é a súa CPU, os cerebros dentro o ordenador, que, por mor da
persoas que crearon eses ordenadores, sabe o que estas secuencias
media de 0s e 1s.
>> Quizais só sexa impresión.
Quizais só sexa iso.
Quizais isto significa subtracción.
Quizais só sexa amosar un gráfico.
Existen patróns predeterminados de bits que o mundo decidiu dicir
certas cousas.
Pero para a maior parte deste curso, nós imos traballar nun nivel superior, e
imos tomar como certo que hai cousas como compiladores que poden
facer a nosa función de código fonte na forma na que pretendemos.
>> Así, o programa que escribiu por primeira vez a semana pasada e logo, empezaron a porta, co fin de
falar, C ese pasado Luns, foi iso.
Cando a bandeira verde premendo, dicir Olá
Este foi, por suposto, escrita en perigo.
E afirmou que o equivalente programa en C parecía un pouco
algo así.
>> Entón o que eu penso que ía facer en primeiro lugar é, imos desmembrar o que parece, a primeira
vista, en realidade, como moi misterioso sintaxe, pero vai comezar a notar
patróns moi rapidamente.
O que nós tamén imos facer hoxe é proporcionar lo con un modelo mental para algúns
canónico, algunhas construcións estándar na programación.
E entón nós imos realmente chegar nas nosas mans porco con algúns exemplos ben.
>> Polo tanto, para aqueles de vostedes máis cómodo, entender que esta semana e logo, xunto
semana pode moi ben ser un pouco de crítica.
Pero, sobre todo cando a edición hackers dun problema conxunto sae no
páxina web do curso o venres, eu creo que vai descubrir que, aínda que cubrir
algunhas lagoas ao longo da próxima semana ou dúas, vai comezar a estar cada vez máis
desafiado e atopar cousas novas e máis recentes.
>> Entón, imos provocar este programa ademais algunhas liñas de cada vez.
Na parte superior, temos o que hai de tecnicamente chamado
directiva de pre-procesamento.
Esta é só unha liña de código que se para incluír o contido dun ficheiro,
chamado estándar I / R, entrada estándar - ou, desculpe, estándar I / O, patrón
de entrada / saída. h, para dentro do meu propio programa.
>> Polo tanto, noutras palabras, se escribín iso programa con un editor de texto simple como
gedit, o equivalente a máis simple de algo así como o Microsoft Word, que
instrución # include stdio.h, é só vai dicir ao compilador, cara o
contido que outro arquivo, stdio.h, e cola-los aquí.
>> Agora, por que eu me importa?
O que nós reivindicamos é dentro deste ficheiro stdio.h chamada, que é almacenado
en algún lugar no meu disco duro, ou neste caso, en algún lugar do aparello CS50?
Alguén puxo aí para min.
Pero o que está nel?
>> Si, polo que é unha declaración de unha función chamada printf.
Entón printf recorda a función que exhibe palabras e caracteres e
números na pantalla do meu tiro.
Pero eu non quería escribir.
CS50 non escribilo.
Anos alguén escribiu, e esencialmente nos deu a receita para iso
nun arquivo chamado stdio.h.
Así que a primeira liña só me dá acceso ás funcións que alguén
escribiu anos, entre que son printf.
>> Agora, a seguinte liña que vou acenar miña man en, polo menos ata a próxima semana.
Pero, por agora, sabe que int main (void) é esencialmente o equivalente deste
peza do puzzle amarela cando bandeira verde premendo.
O mundo, desde hai anos, decidiu que, se está escribindo un programa no
linguaxe chamada C, comeza o seu programa cunha liña
que se parece con isto.
En só preto de unha semana, que vai facer sentido que int é, o que é branco.
Pero, polo de agora, só pense nisto como esta peza do puzzle amarelo.
>> Agora seguinte, temos unha chaveta seguido doutra preto rizados cinta,
por así dicir.
E veremos ao longo destes programas en C, así como a
JavaScript e PHP.
E estes só encapsulado liñas afíns de código.
O aberto chaveta esencialmente di, aí ven un código.
E a chaveta pechada, o que é inclinado na dirección contraria, só
significa, iso é todo para o código correspondente.
>> Así, a liña suculento neste primeiro programa é a última, printf,
entre comiñas, Ola mundo.
E eu chamei a cousa entre citas que a última vez?
Entón é unha cadea.
E unha corda é só o tecnólogo prazo para unha secuencia de
personaxes, unha palabra, unha frase.
Mesmo unha única letra pode ser o dobre citado.
Pero é unha secuencia de cero ou máis caracteres.
>> Barra-n, con todo, parece un pouco raro.
Pero simplemente dicir algo sinxelo para o ordenador.
Que é barra-n?
Nova liña.
Entón, iso é só a secuencia especial de personaxes que o mundo decidiu
significa poñer un salto de liña alí, xa que o compilador vai realmente comezar
confusa, xeralmente, se, moi compreensivelmente, pero incorrectamente, só
comezar a bater Intro para poñer novas liñas no seu código.
Ten que ser un pouco máis explícita con barra-n.
>> E nós imos ver que hai algúns outros, tales normas para caracteres especiais.
Por exemplo, se quere deixar o seu mente vagar a un caso de canto,
supoñer que eu quería imprimir unha comiñas na pantalla para
calquera razón, parecería que ser un pouco problemático, non?
Porque se eu poñer comiñas no medio do "Ola, mundo", para o que
razón, por que é que isto parece potencialmente problemáticos?
El rompe a cadea.
>> O compilador é só un programa.
Un programa como un compilador é só ir ler o top código para abaixo,
esquerda a dereita.
E se ve tres comiñas dobres no canto de dous fillos, non vai saber
Se quere dicir que a cousa á esquerda debe ser a cadea, ou a cousa a
á dereita, ou a cousa toda.
É ambiguo, e así o que un típico compilador facer é brotes,
e darlle algunha mensaxe de erro, e facer vostede xestionar o problema.
>> Así, dado que a barra-n significa un novo liña, o que faría os seus instintos agora
comezar a ser se quere incluír algo anômalo como un dobre
citar dentro deste caso contrario citado corda?
Cita barra-dobre.
E entón imos ver iso tipo de patrón tamén.
>> Se queres facer algo un pouco estraño, vai descubrir que o
solucións moitas veces seguen un patrón, ea barra invertida
denota unha secuencia de escape.
E isto significa só algo especial que necesitamos para representar nunha
xeito diferente.
En canto á forma como representa unha barra invertida, así, imos
volver a iso.
Pero a resposta tamén é certo algo evidente.
>> Entón, imos agora introducir algún outro construcións de programación
que viu en perigo.
Probablemente xa tida como certa xa se xa mergullou
conxunto de problemas 0.
Pero imos agora introducir a sintaxe en C para estes pola contra moi intuitiva
ideas, polo menos algúns deles.
>> Polo tanto, esta noción de unha condición ou unha rama, mentres que anteriormente nós
representado con un código que mirou como esta á esquerda en Risco -
Se x é menor que y, entón diga -
no canto agora en C - déixeme mellorar en no caso máis simple -
estamos indo simplemente para dicir que si, abra parénteses, algo é certo - un
Expresión booleana está a ir onde eu dixen condición -
Pechar parénteses, a continuación, facer o que é dentro desas chaves.
>> Entón, aquí, tamén, as claves é tipo como de risco de
Pezas de puzzle en forma de U.
Faga o que ten dentro destas claves.
Neste caso, slash slash.
E entender que é un dianteiro slash, non unha barra invertida.
Barra, barra, para os que xa programou
antes, só significa -
é só un comentario.
Un comentario non é unha liña de código, de por si.
É unha liña de inglés que, humano, escribir a si mesmo para
quizais lembra-lo de facer algo, explicar a si mesmo, para explicar a
outra persoa, o que o código está facendo.
É só un comentario descritivo.
>> Agora, por suposto, pode ter unha de dúas vías bifurcación na estrada, só por iso, un
tres vías bifurcación na estrada, facendo iso, e se continúa esta
estándar, pode ter de catro vías, cinco vías, seis vías garfos na estrada se
ten que xestionar, de feito, que moitas condicións.
E, a continuación, teña en conta o paralelismo aquí -
if (condición), else if (condición), eo único que é un pouco
estraño é o último, que É xusto que os outros.
Pero, de novo, esta é idéntica, conceptualmente, para o que fixemos
xa, aínda que a sintaxe vontade tomar algún tempo para se acostumar.
>> Agora, no presente exemplo, existen outra sintaxe estraña.
Vemos printf novo, paréntese aberta, e os parénteses.
E alí dentro é unha cadea.
As parénteses, no contexto de printf, vaia á esquerda
e dereito de que?
O que nós describimos que citada cadea como máis xeral?
>> Entón é un argumento.
Cada vez que ten unha función, como printf, e, a continuación, un paréntese aberta e un
preto paréntese e algo dentro que, se é unha cadea, ou un
enteiro, ou calquera outra cousa, a cousa en entre os parénteses chámase
un argumento.
>> E un argumento só inflúe comportamento da función.
Neste caso, é moi claro como.
x <y é o que está a ser transmitido, por así dicir, como un argumento.
E printf vai imprimir exactamente isto.
Porque, por suposto, a persoa de anos que aplicou printf non tiña idea
o que sucesores humanos foron vai utilizar printf para.
É por iso que hai argumentos, a influír no comportamento tras unha función de
foi escrito.
>> Agora, a expresión booleana.
Nós xa vimos isto antes en perigo.
Acontece en C, tamén se pode "ou" xuntos, por así dicir.
Dúas barras verticais significa que este bloque de código, este fas vai
realizar, a primeira condición é verdadeira ou a segunda condición é certa.
E aínda que non podería ter feito esta en perigo, podería de feito
facelo en perigo, e tamén pode expresarse de forma diferente -
O primeiro estado e a segunda condición é certa, entón o que é
dentro das chaves.
>> E así como un aparte, a razón é un dobre e comercial e un dobre
barra vertical, imos ver, finalmente, que unha única barra vertical e unha
único e comercial, en realidade, teñen distintas significado en C. Entón, por agora,
que a duplicación de símbolos é intencional.
>> Entón, imos presentar, brevemente, estoutro pouco de sintaxe.
Iso non chega a transitar para Cero, pero eu afirmo que eu poida
aplicar a noción dunha persoa, se entón, se máis, se else usando
algo chamado unha instrución switch.
E a única razón pola que isto realmente existe é só para dar a ti, programador, un
xeito un pouco diferente de resolver algúns problema, aínda que loxicamente
non lle dá calquera novas capacidades.
>> Por iso quero dicir iso.
Cando di chave, e, a continuación, un espazo, e logo, un par de parénteses, para dentro
dos cales pasa unha expresión -
e isto pode ser un pouco non obvio nun primeiro momento, pero iso non é un argumento,
tecnicamente, porque chave non é unha función.
Entón, por agora, só supoñer que estamos a usar parénteses en lugares diferentes
por razóns diferentes.
>> Entón chame expresión significa que podo poñer dunha variable dentro dos
parénteses, onde se le a expresión.
E entón, se esa variable -
Supoño que se chama x, e é só un enteiro -
Podo, entón, enumerar no meu slide aquí algo parecido con iso.
Se x é a miña variable, e eu quere facer algo, se x
é igual a 1, non podo facelo.
>> Se eu queira, en vez de facer algo Se x é 2, podo facelo.
Outra cousa, se eu queira facer outra cousa totalmente, podo ter un caso default en
caso en que fago iso outra cousa.
Entón, nese sentido, é equivalente a un Se x é igual a igual a 1, así que máis,
pero eu falar iso agora só porque imos velo de novo.
Pero, polo de agora, só sei que existe.
>> Todo ben.
Entón, estes dous últimos son algo máis complexo a primeira vista, pero eles
algo moi sinxelo.
Un lazo for en C é unha peza de código que só fai algo de novo e
unha e outra vez.
E o único irritante sobre el é iso é que é un pouco enigmático
para expresarse neste cíclico por defecto, pero o mundo estándar en
do seguinte xeito.
>> Cando usa un loop for, ten un par de parénteses novo.
E teña en conta as dúas comas alí dentro.
Estes dous comas tres separados expresións distintas dentro do
parénteses.
Un deles é o chamado inicializações.
Unha delas é a condición chamada.
E é un dos chamados actualizacións.
>> Mirou en abstracto, é dicir completamente non-obvio, entón imos ollar
un exemplo concreto.
En risco tivemos un bloque de repetición.
E este bloque dixo Repita 10 veces, digamos "Ola, mundo". Déixeme reclamar para
agora, e nós imos voltar a este, e iso, tamén, vai ser máis familiar para
vostede en pouco tempo, o equivalente C código se pode dicir que este -
unha instrución e un espazo, un par de parénteses, teña en conta as comas en
alí, que separan tres distintas cousas, o arranque, o
condición ea actualización.
>> E dar un palpite que a primeira está facendo.
Int i = 0.
En termos laicos duro, o que é que está a facer por nós, probablemente?
Entón, si.
Está declarando unha variable chamada i, e está dando o valor?
0.
Por iso, está creando unha variable chamada i, almacenando o valor en que 0.
É o chamado arranque.
>> Todo ben, agora eu reivindiquei antes que a cousa medio, i
<10, é a condición.
Entón o que está facendo?
Ben, o que o loop for fai cando un programa con un loop é executado, é
cada vez que o ordenador é executado mediante este loop, de arriba a abaixo, de arriba
inferior, así como vostedes fixeron cando contando-se e sentir-se,
novo e de novo e de novo, o ordenador vai
para comprobar esa condición.
E se é inferior a 10, que vai facelo de novo.
I é inferior a 10, que vai facelo de novo.
I sexa inferior a dez, que vai facelo de novo.
Así que parece suxerir que Espero está cambiando.
En caso contrario, teriamos un loop infinito.
E, de feito, eu está cambiando, porque a último tras o punto e coma non
é a sintaxe un tanto enigmática de i + +.
Pero aqueles de vostedes que xa o fixo antes, iso só significa
simplemente o que?
>> ESTUDANTES: [interpondo voces].
>> DAVID Malan: Engadir 1 para i.
Incrementar i.
Entón vimos un quebra cero peza para que, en realidade.
Non se parecía con i + +, pero iso só significa, moi simplemente, aumentar o
Valorados i por 1 a cada vez que fai iso.
Entón, literalmente, comeza i arrincar a 0.
Vostede, entón, comprobar o seu estado.
É 0 a menos de 10?
Si
Imos a través do loop.
>> A seguinte cousa que eu afirmo que o equipo de vai facer é que vai
incrementar i.
Así que é agora 1.
El verifica a condición.
É un inferior a 10?
Claro.
Entón fai iso de novo.
A continuación, el incrementa i + + para 2.
2 é inferior a 10?
Si
E de novo e de novo e de novo.
E, finalmente, en virtude da plus-plussing, debemos i é igual a 10.
É 10 a menos que 10?
Ben, obviamente que non.
E ese é o momento en que o loop for simplemente para.
E se ten máis de código no pantalla a continuación, o ordenador
recursos para realizar este código en vez.
>> Entón, de novo, aínda que iso vai ollar e sentir un pouco raro no
en primeiro lugar, por suposto, para aqueles de vostedes que nunca programou antes,
literalmente reduce conceptualmente o que é outra forma moi
puzzle simple peza en perigo.
>> Todo ben, eu prometín que non tiña ser outros análogos en perigo.
Hai un presente tamén.
E vimos iso brevemente última vez.
Pero lembre sempre o bloquear en cero?
El só fai algo para sempre?
Eu afirmaba que podería aplicar isto deste xeito.
E realmente pode aplicar esta nun grupo de diferentes xeitos.
>> Pero o loop while é só unha diferente forma en C de expresarse.
Ao final do día, non se pode facer calquera cousa con un loop while que
non pode con un loop for.
Entón, están ao final da funcionalmente o mesmo día.
Pero permite que se exprese un pouco diferente en
do seguinte xeito.
>> Co loop while, é o que está en parénteses que está verificados de novo e
unha e outra vez.
E tan pronto que a expresión é falsa, logo interrompe o ciclo de execución,
e o equipo prosegue realizar calquera outro código
ten no seu arquivo.
>> Pero o que é interesante aquí é que eu literalmente ingresaran verdade.
Certo é un tipo de valor booleano, un valor verdadeiro ou falso.
Así, podería facer realidade nunca false se eu teño literalmente
codificado-lo no meu programa?
Entón, non.
É un pouco raro que eu fixen iso.
Pero certo é verdade.
Non hai máis-plussing.
Non hai uso de variables aquí.
Entón por que eu codificado mentres certo, este loop é sempre indo a avaliar
novo e de novo e de novo.
>> Entón, cantas veces é Ola mundo vai imprimir na pantalla?
Forever.
Un número infinito de veces, ata que o batería morre ou algún outro externas
evento ocorre.
Polo tanto, este non é probablemente o mellor programa para escribir, porque se o usuario
non pode saír do seu programa, é probablemente non é o que pretende.
>> Pero, ás veces, os programas deben ter un loop infinito.
Por exemplo, se o seu ordenador ten un reloxo nel, el certamente sería
bo se o seu reloxo el manter a actualización ti para sempre, aínda que unha vez por
segundo ou unha vez por minuto ou algo parecido.
Así, mesmo lazos infinitos teñen o seu lugar.
>> Todo ben.
Para rematar, un agasallo.
E este é un pouco diferente funcionalmente, e nós imos voltar a
iso probablemente en Pset 1.
Pero hai outro tipo de loop chamado facer mentres loop.
E a única diferenza aquí entre un facer loop while e, digamos, un loop while,
é que a condición é revisada non antes de executar o código, pero logo
executar o código.
Así, na parte superior para o tempo loop, mentres facelo mentres
comprobar-lo na parte inferior.
>> E isto significa só que o loop while tipicamente executar máis veces
ou menor número de veces que un loop while?
Potencialmente máis veces, porque a facer while está dicindo claramente iso,
só despois que punto verifique O estado no interior do
parénteses é certo.
>> Entón, imos ver iso de novo probablemente en Pset 1.
Se queres facer algo en menos unha vez e logo, se cadra un pouco máis
veces, este é un bo construír a empregar.
Pero un loop while, pola contra, vai comprobar a súa condición de primeira.
E iso é todo para loops en C, non mentres, ao mesmo tempo, e para loops.
E, de novo, eles mapeiam moi ben de volta a cero, excepto este non
pode ter o mesmo analóxico en perigo.
>> Ben, que tal, agora, as variables?
Entón é así que eu declarei unha variable sintaticamente o outro día.
Tiven un int, que alegou é un número enteiro.
Entón eu tiven unha variable chamada contador, e logo, un punto e coma.
Entón o que é esta liña de código está facendo?
Este é, simplemente, declarando unha variable -
dicir, pedindo o ordenador, dáme un pouco de memoria, dáme uns bits - en
que podo gardar o que?
Un int.
E o punto e coma significa só final da liña de código.
>> Agora, a segunda liña é probablemente moi adiviñación.
Que é contador = 0; facendo?
É a asignación de 0 a combater.
E por iso esta é a outra cousa iso é un pouco aburrido
contra, digamos, álxebra.
Considerando que, en álxebra, o signo igual significa iguais, aquí en C, a igual
sinal significa asignación.
Entón iso significa poñer o que está á dereita no que está na esquerda.
E nós imos ver outro símbolo, é igual a iguais, cando queremos realmente probar
de calidade, un pouco irritante.
>> Pero iso é algo ineficiente.
É o tipo de chat que eu teño para declarar unha variable e
logo darlle un valor.
Entón C realmente nos permite simplificar esta e só facelo dunha vez.
Pode declarar a variable na parte esquerda.
Tamén se pode facer a asignación a dereito, poñendo o sinal igual en
medio.
Así, ao final do día, estes son dous equivalente, pero este, a verdade,
é probablemente o mellor costume de entrar só porque é un pouco menos
código, que é un pouco máis fácil de ler, e el só aperta
seu código, por así dicir.
>> Calquera dúbida, ata agora, sobre os loops, sobre variables, en condicións de, en
Booleanos, sexa técnicamente ou conceptual?
Todo ben.
Entón, agora o seguinte obtense unha pouco máis interesante.
E este é o exemplo que eu poñer última xa que só mapea un exemplo do risco
sobre a C.
>> Así, unha función.
En termos leigos, o que é unha función?
Ten que ser máis ousado coa súa resposta.
¿Que é unha función?
>> ALUMNO: Será que algo.
>> DAVID Malan: Que é iso?
>> ALUMNO: Será que algo.
>> DAVID Malan: Fai algo.
Aceptar.
Imos comezar por aí.
Así, unha función fai algo.
Polo tanto, é unha peza de código que se esencialmente aplicado en outro lugar que
realmente fai algo.
Agora, o que é interesante sobre a función é que pode recibir a entrada,
e pode producir unha saída.
E imos realmente tomar un ollo niso.
>> Entón, o home detrás da cortina foi deliberado un momento atrás.
Aquí temos unha táboa.
Pero supoñamos que iso realmente representa unha gran caixa.
Polo tanto, esta é unha chamada caixa negra.
E, en xeral, no deseño, no ordenador ciencia, caixas negras só referirse a
partes dunha función que alguén aplicou, e non
necesariamente saber ou importarlle como é aplicado baixo o capó.
Só lle importa que esta caixa negra, que agora vai comezar a chamar a
función, fai algo.
>> Así, por exemplo, se esta caixa negra o estadio aquí representa printf, unha
función, sei que a partir de exemplos anteriores que leva unha ou máis printf
argumentos, eo primeiro destes argumentos debe ser unha cadea, como
"Ola, mundo". Ben, se eu son a persoa escribir o programa, e quero
usar printf, eu, por exemplo, pode tome un anaco de papel en branco aquí e un
marcador negro e escribir sobre ela -
Eu grafada "mundo" -
H-E-L-L-S.
>> Entón, eu vou levar o meu marcador negro e eu vou escribir, tan grande e lexible posible en
este anaco de papel: "Ola, mundo", e agora eu reivindico que é o meu argumento.
Isto é unha cadea representado con un anaco de papel branco.
E agora a miña entrada para a función printf será iso.
Entón, eu estou chamando printf, pasando ese argumento como entrada para el.
>> E agora, eu non sei como a persoa que escribiu printf fixo anos, pero
Sei da súa documentación o seu propósito na vida é para imprimir o que eu
achegar a el como entrada.
E así, aínda que esta aplicación é descoñecido para min
debaixo do capó, agora Vexo, oh, está feito.
Ten algo impreso na pantalla.
E agora, o control do programa, se hai foron máis liñas de código, iría
xa volveron para min.
E así o feito de que Colton -
bendiga seu corazón, está escondendo aquí en unha mesa diante de todos vós -
é deliberada en que eu non sei e eu non me importa como printf é
aplicadas.
Eu só sei que, unha vez máis, desde a súa documentación, o que fai e como eu
debo usalo.
>> Agora, lembre que printf podería comezar algo máis sofisticadas.
Unha vez máis, estamos só falando do equivalente do bloque Say de cero.
Pero eu tamén fixen iso a última vez.
Eu quería facer o meu programa Ola a pouco máis dinámica e non só difícil
código algo así como "o mundo", e en definitiva non é algo ríxido código
arbitraria como a D-A-V-I-D no programa.
Quería pedir ao usuario para a súa nome, e, a continuación, facer algo con
esta secuencia que fornecen.
>> Polo tanto, hai algo un pouco diferente aquí. printf, hai pouco,
se, de feito, facer algo, pero non devolveu nada para min.
Non?
Colton non me entregar nada atrás, ningún pedazo de papel.
Había só un efecto colateral.
O meu introducindo "Ola, mundo" como un argumento a Colton resultou na
efectos secundarios dunha palabra, algunhas palabras, que aparece na pantalla.
>> getstring, con todo, é un pouco diferente. getstring tamén un
funciona, pero retorna un valor.
El non ten só un efectos secundarios estética.
En realidade, dáme, a persoa chamada ou utilizar a función,
algo de volta.
Polo tanto, neste caso, é getstring chamado con getstring aberto
paréntese, preto paréntese.
Será getstring, polo tanto, tomar calquera argumentos ou entrada?
Non, non parece.
O seu obxectivo na vida é só para ter unha cadea.
Ela non precisa máis detalles do que iso.
Entón deixe-me ir adiante e finxir que, de novo, desta caixa negra non é printf,
pero getstring, e deixe-me, a persoa escribir este programa, chamar ou usar
getString por só escribir G-E-T-S-T-R-I-N-G, aberto paréntese, preto
paréntese, getstring.
>> Agora, eu non teño ningunha idea de como o equipo CS50 aplicado getstring, pero eu sei que
se eu esperar o tempo suficiente, que vai facer o seu cousa debaixo do capó, quizais usando
algunhas variables, quizais usando algún condicións, é posible que o uso dalgúns loops,
quizais usar algunhas funcións, quizais usar -
só tentando tenda - quizais a usar algúns outros recursos de programación.
Pero se eu esperar o tempo suficiente - en realidade, en que o ordenador, isto acontece
super rápido -
se eu esperar o tempo suficiente, esta función getstring recibirá unha cadea
do usuario, que é presuntamente escribindo lo no seu teclado, e
entón, se cando getstring faise os personaxes do usuario
e almacena-los en unha cadea, que función, getstring, terá
preparado para me algunha saída que eu son indo a recuperar por medio do
operador de asignación.
>> E se eu for, de feito, para a saída aquí, Obosi ten xenerosamente
participaron, sen saber iso en avanzar, escribindo o seu nome a este
variable, que está representando unha corda.
Agora, o operador de asignación significa que, mesmo aínda que iso poida se sentir un pouco
redundante, eu realmente teño para facer a miña propia copia deste.
Porque na man esquerda lado - berros! -
conta que esencialmente ten cadea nome no lado esquerdo.
Entón, eu tamén vou facer miña propia copia deste.
E iso é un pouco de unha mentira branca, porque imos ver nunha semana ou dúas de
tempo que as cordas non son realmente o que parecen ser.
>> Pero, por agora, aquí está o valor de retorno.
Aquí é a miña propia copia do mesmo despois usar o operador de asignación.
E agora, o que quero facer a continuación?
Temos agora a segunda de dúas liñas de código.
Entón, agora quero chamar printf.
Imos finxir que agora que o negro caixa está de volta de novo a ser
printf e non getstring.
>> Printf este tempo vai tomar cantos argumentos?
Entón mire, é como dous.
Hai dúas comas alí, pero unha desas comas, é
dentro das comiñas.
Así, o primeiro argumento é literalmente será isto.
H-E-L-L-S, coma por cento s, barra-n.
E agora eu estou ofrecendo non un argumento, pero dous argumentos para printf.
>> E o que printf debe facer estas dúas entradas despois pasalas en
como argumentos?
É suposto tomar a segunda de eles, que eu chamei de nome, de xeito que o
segundo anaco de papel que escribín un momento atrás chámase nome.
Vai ficha do valor dentro desta variable no espazo reservado,
% S, de xeito que, unha vez máis, en só un momento de tempo, veremos un efectos secundarios de
chamar printf, polo cal agora temos non ven "Ola, mundo" pero "Ola,
Obosi. "
>> Así, unha gran salva de palmas para os dous os nosos voluntarios, dos cales só un sabía
diso estaría pasando.
Todo ben.
Entón, talvez, simple como iso era, Certamente, se xa está familiarizado
con tal, espero que nunca vai esquecer que a vista particular de como
funcións de traballo.
>> Polo tanto, non hai máis que getstring.
Dentro da biblioteca CS50, hai unha banda enteiro de funcións, as cales
son capitalizar só para deixar claro que escribimos estas funcións.
Tipicamente, en C, case todos os outros función que vai usar e minúsculas.
Pero nós deliberadamente usar maiúsculas só para deixar claro que estes
son Rodas pequenas de tipos que imos utilizar por só unhas semanas que
simplificar o proceso de obtención de entrada do usuario.
>> A biblioteca CS50 non fai nada que vós mesmos non podían facer por
só usando o código C a partir dunha libro OldSchool.
Pero, de novo, usalos como adestramento rodas de tipos para só un par de
semanas para que poidamos librarse do complexidade que en breve vai entender
-Se de facer algo como relativamente simple como a obtención de
de entrada a partir dun usuario.
>> Entón sabe que terá acceso a getchar, GetDouble -
dobrar.
What 's - e logo GetFloat.
¿Que é un float?
Imos comezar por aí.
>> Estudante: [inaudível].
>> DAVID Malan: Yeah.
É un número con un punto decimal.
Así, mentres un enteiro é un enteiro, o cal é só un número de 0 a 9,
un certo número de repeticións da mesma, un flotador é algo
cun punto decimal.
E un dobre, pola súa banda, tamén é un número con un punto decimal, pero máis
números despois do decimal punto, potencialmente.
>> Entón, nós imos voltar a este antes de tempo.
Porén, en xeral, cada un destes tipos de de datos, cada un destes tipos de variables
que unha biblioteca como a nosa, pode volver ao ti, use números distintos de bits para
gardar información.
Normalmente, un Char, que significa só un personaxe, utiliza 8 bits.
E iso é realmente consistente coa nosa byte de voluntarios a semana pasada que
veu e representou un Caracteres ASCII de cada vez.
Así, un Char é de 8 bits.
>> Un flotador pasa a ser 32 bits, tipicamente.
E un dobre, como pode imaxinar, é en realidade 64 bits, o que é máis,
o que significa que pode ter maior números ou máis precisión.
Pero, de novo, máis sobre iso outra hora.
GetLongLong, con todo, aínda que estupidamente nome, é realmente só unha
enteiro que é dúas veces máis grande, o dobre tempo, potencialmente, como unha forma regular
número enteiro, 64 bits en lugar de 32.
E GetString estamos a usar.
>> Pero resulta que, na biblioteca CS50, que é aplicado, como veremos, en
baixo a forma dos dous ficheiros, un dos cales chámase cs50.h, ten outros dous
tipos de datos nel.
Booleanos non existen en C. Pode simulalo los usando só 0s e 1s
ao longo dos seus programas.
Pero na biblioteca CS50 crearon os símbolos de "certo" e "falso"
para representar 1 e 0 para que non ten que codificar algo
literalmente como 1 e 0.
Pero imos ver de novo.
>> Cadea, tamén, non existe.
E é por iso que eu mencionen é un pouco de mentira para agora.
Pero imos pelar que capa antes de tempo.
Pero, polo momento, unha cadea é un secuencia de caracteres.
>> Mentres tanto, en C, é de feito teñen diferentes tipos de datos.
Teña en conta que estes son minúsculas.
Así, as funcións que viu hai pouco son funcións escritas por CS50 que
volverei para vós un valor que cae nunha destas categorías.
>> A Cheat Sheets matrimonio só para plantar a semente aquí. printf non só
levar% s como espazos reservados.
Leva% d para enteiros decimais, ou% i ía funcionar tan ben.
% F está valores de punto flotante. % C é para un char, se quere só conectar un
caracteres nunha secuencia pre-formatado como temos benvida a facer, pode utilizar% c.
>> E entón, un pouco irritante,% LLD é por un longo, longo enteiro decimal,
o que só quere dicir que se realmente precisa dun gran número e que está a usar algo
chama un longo, que virá de volta a nun pset, pode usar% para LLD
dicir printf, Póñase realmente unha gran enteiro aquí baixo a forma do seu segundo ou
algún outro argumento.
>> E, finalmente, eu che prometín que Hai algunhas outras fuga
secuencias que printf soporta.
Vimos barra-n.
Barra-r verás.
É unha especie de unha cousa old-school.
Se xa usou unha verdadeira máquina de escribir anos atrás e tirou a manivela
que non só a rotación do volante mover a liña, tamén cambiou a
todo isto por todo o camiño de volta a á esquerda, así, barra-r só
esencialmente move o cursor de volta para o inicio da liña
sen mover para abaixo.
Pero, de novo, máis sobre iso, se cadra, no futuro.
>> Barra-citas, barra-double, barra-barra invertida é o
solución para o pequeno misterio Aludi anteriormente.
E barra-0 é realmente bastante interesante.
Pero imos volver ao que en pouco tempo.
>> Entón déixeme entrar, agora, o CS50 aparello, e imos realmente facer unha
rápida quentar con un dos exemplos xa e despois moveuse para
algo un pouco máis complexo.
Entón, se eu abrir o meu programa chamado gedit -
este é o meu editor gráfico.
E eu podo facer iso -
déixeme pechar a fiestra alí -
por medio deste icono aquí en baixo, gedit, na parte inferior esquerda
canto á beira do menú.
>> Eu estou indo a ir adiante e avanzar, e gardar este exemplo en, digamos, John
Pasta de Harvard.
Pasta de John Harvard é só a súa casa directorio onde todos os seus arquivos de vivir
por defecto.
E eu vou gardalo como un arquivo chamado Ola-0.C.
E eu escollín ese nome só por iso aliñan co código de exemplo na
páxina web do curso e na YouTube vídeos en liña.
>> Entón agora eu vou comezar a escribir o meu primeiro programa.
Déixeme achegar a lexibilidade.
E eu estou indo a ir adiante e dicir int void main, que é así mesmo
amarelo peza do puzzle que inicia un programa.
Comece o hábito ao longo do anos de apertura meu chaveta, a continuación,
tamén pecha-lo e, a continuación, voltar a onde quero poñer o meu código, simplemente
porque iso me axuda a manter todo equilibrada, sobre o meu
programa queda moito tempo.
>> E agora, aquí, eu estou indo a ir adiante e dicir, printf, citar unquote,
Ola mundo, barra-n, preto cita, Pechar parénteses, o punto e coma.
Entón, eu estou só repetindo todo o que temos tomado como certo ata agora.
Agora vou para diminuír o zoom.
>> E esa fiestra de terminal aquí abaixo, o que estou autorizado a facer nesta negro
ea fiestra de negro?
O que podo usalo?
Polo tanto, este é o lugar onde eu executar comandos e onde eu poida compilar as cousas.
E eu vou mantelo simple.
Vou usar un programa chamado Make, o que non é
tecnicamente un compilador.
Chamado Clang do compilador, pero imos volver a iso nun
semana ou tempo de dous.
>> De momento, eu só vou escribir facer Ola-0, pero os que foron
comparando nas súas mentes o que me ingresaran co que eu debería ingresaran pode
xa sei que eu fixen algo mal aquí.
Agora, hai claramente algúns erros.
Antes de ollar para o que son, de calquera pensamentos sobre o que eu fixen de malo?
>> ESTUDANTES: [interpondo voces].
>> DAVID Malan: Yeah.
Estou sentindo falta de ficheiro de cabeceira da biblioteca.
Calquera destes arquivos h. San chamados de cabeceira arquivos, e colectivamente
pertencen a cousas chamadas bibliotecas.
Bibliotecas son só anacos de código que outros escribiron.
Así, o estándar de [? i?] é unha biblioteca colección de arquivos que conteñan código
que outros escribiron.
>> Entón, eu estou sentindo falta diso.
Entón por que estou a recibir un erro?
Ben, deixe-me volver arriba en miña fiestra da terminal aquí.
E, por desgraza, no C, como en unha morea de linguaxes de programación, especialmente
se é todo novo para ti, o erro mensaxes son precisos, pero eles tamén son
moi enigmática.
E o problema aquí, en vermello, é "Función de biblioteca implicitamente declarando
printf co tipo ", e entón rula á seguinte liña, "int const char *,
... "El só queda realmente esmagadora rapidamente.
>> Pero o que ten que comezar a facer, se, novo, novo para todo iso, é só para
comezar a buscar palabras clave.
Obviamente, eu non podería entender a metade as palabras que eu estou a ver aínda.
Vai, con todo, dentro dunha semana.
Pero vexo printf.
E iso debe comezar, en pouco tempo, a refrescar a súa memoria, todo ben, printf.
Algo está mal con printf.
Será que eu deletrear mal?
Non, non se parece - oh.
Non podo usalo, a non ser que eu ensino o compilador que existe.
E así, unha vez máis, vai cos seus instintos, mesmo se realmente non entendo
as mensaxes de erro reais.
>> E, de feito, a solución aquí é só inclui-lo na parte superior do arquivo
así, resaving meu arquivo con Control-S ou o menú Ficheiro.
E se eu agora volver aquí, Vou aclarar iso.
Control-L é só un xeito agradable para limpar a pantalla.
E entón eu vou escribir "Ola facer 0 "Enter, e agora eu aínda vexo un
secuencia enigmática de símbolos, pero imos volver a iso.
Iso é o que fan está facendo por ti.
É a automatización do proceso de toma unha orde moi aburrido que inclúen
Clang, o compilador real.
Pero o feito de que eu non teño erros significa que esa cousa debe funcionar.
>> Entón, eu estou indo agora para facer - déixeme achegar de novo -
./hello-0 Intro, e, de feito, eu vexo "Ola, mundo". Entón, imos agora mellorar
este nunca tan pouco só para replicar os pasos que pretendía.
Vou cambiar o nome deste con Gardar como para hello1.c.
E agora vou declarar unha variable chamou o nome, por iso o nome cadea,
e eu vou poñer nel o valor entre comiñas
D-A-V-I-D close-quote punto e coma.
E agora eu estou indo para substituír o "mundo" co espazo reservado para unha cadea?
% S.
>> E agora, cantos argumentos deben printf aproveitar este momento?
Así, dous.
Entón eu ir fóra das comiñas.
Eu tecleo "nome" despois de comas.
Pero eu fixen algo máis mal neste momento.
Pero imos supor que eu non fixen entender iso aínda.
Déixeme ir ata aquí.
>> E noten, tamén, eu estou quedando un pouco cansar de escribir "facer Ola 0" todo o
tempo, "facer" e todo iso.
Así, verifica-se, en Linus pode moitas veces bater a frecha para arriba no seu
teclado, e realmente pode rolar a través de todos os comandos que eu
executado anterior para agora.
Entón, se eu fai iso, Arriba, Arriba, hai facer Ola 0.
Non quero iso.
Eu só quero cambiar isto para Ola 1 neste momento, Intro.
Finalmente, que vai aforrar tempo.
>> Todo ben.
Desafortunadamente, non é un erro.
Entón deixe-me ir para arriba.
Este parece que realmente masacrado este programa.
Quero dicir, o meu Deus, é dúas liñas de código, e as súas 10 liñas de erros.
Mais olle para o alto primeiro.
Uso da cadea do identificador non declarado.
Será que quero dicir estándar i n?
Non, eu non fixen.
Eu quería dicir cadea.
>> Pero onde está a variable de cadea tipo declarado, DD podemos dicir?
Polo tanto, é o CS50 da biblioteca.
Por iso, non é suficiente, nestes primeiros par de semanas, só para usar
C o que nos dá.
Eu tamén estou indo a ir ata aquí, e eu podería poñelas enriba ou abaixo, pero vou
só mantelo alfabética para manter as cousas en orde.
Eu estou indo a incluír cs50.h, que é pre-instalado para
vostede no aparello CS50.
E é de código aberto, polo que mesmo as persoas en Internet pode usalo na súa
ordenadores propios.
Pero el ven co aparello CS50.
>> Entón, agora déixeme volver e recompilar Ola facelo con un.
Drogas.
Aínda outro erro.
Déixeme ir ata o primeiro, con todo.
Esta é algo complexo.
Constante carácter multi-carácter.
Isto non está me axudando.
Pero aviso, Clang é polo menos un pouco algo decente, en que con un pouco de
verde símbolo acento circunflexo, está dicindo aquí é onde eu estraguei todo.
Por que é apuntar, con ese pequeno Arqueiro Verde, ao apóstrofo seguinte
para o meu nome?
>> Polo tanto, esta é unha das cousas que só acostumar, especialmente se ten sido
programación en Python, JavaScript ou, ou outras linguas onde este detalle
non importa.
En C, non importa.
Se declarar unha cadea, que é unha secuencia de 0 ou máis caracteres,
realmente usar comiñas dobres.
Entón, eu realmente teño cambiar isto de volta para abrir cita, pecha cita, con
comiñas dobres.
As aspas teñen o seu lugar, pero só cando está usando individuo
caracteres, pero máis sobre iso outra hora.
Polo momento, as comiñas dobres son necesarias.
>> Entón, agora, déixeme volver ao meu terminal fiestra, faga Ola 1.
E quen é seguro?
Este programa agora vai para compilar correctamente?
Aceptar.
Así, tres de nós pensamos iso.
Todo ben.
Intro.
E el realmente fixo.
Polo tanto, non hai ningún erro esta vez, mesmo que este programa está quedando un pouco
máis complexa.
Se eu agora facer punto barra 1 Ola, intro vai dicir "Hola, David."
>> Pero imos facer a terceira iteración Por iso é polo que, cando a
programa é realmente dinámica.
Déixeme ir adiante e cambiar o arquivo nome, só por coherencia coa
arquivos que terá dispoñible para ti despois liña.
Intro.
E agora estou indo a ir e non almacenar "David" codificación aquí.
O que eu podería facer para moi simplemente mellorar este programa?
>> Podería chamar getstring.
Pode ser un pouco o que non é obvio a piques de acontecer, entón eu vou
para realmente engadir outra liña, printf, e dicir o nome, colonos, preto cita, só
para dar ao usuario un aviso na pantalla.
E agora eu estou indo a ir aquí, e eu estou vai utilizar o meu atallo de teclado.
Eu estou indo a ir cara arriba, cara arriba, e cambiar Hola Hola 1 a 2, Intro.
E, por sorte, estou facendo progreso.
>> E agora vou subir a punto barra Ola e
cambiar isto a 2, Intro.
E agora o meu programa -
Vou facer zoom in - está quedando algo máis fermosa.
Nome será, digamos Rob Neste momento, entra, Ola, Rob.
Podemos facelo de novo.
Nome, Lauren, Intro.
Nome: José, Intro.
Nome, imos tratar de ser difícil, Intro.
Eh.
Non é realmente un erro.
Entón é un pouco feo.
Entón quizais poidamos solucionar este no futuro, non agora.
>> Pero como é que instintivamente percorrer preto de enderezo
ese desafío particular?
El só parece estúpido.
Como evita cousas ollar estúpido?
Así poderiamos facer, OK, eu oín un par cousas, unha condición e un loop.
Poderíamos usar, unha, unha condición, para comprobar o que é a lonxitude da cadea
o usuario nos deu?
E se é 0, el é só citar unquote, eles só prema Intro, en seguida,
talvez eu debería berrar con eles e leva-los de novo.
Pero como a levalos de novo?
Ben, eu tamén oín loop, e eu podía facelo de novo e de novo e de novo
avisar o usuario para o mesmo.
>> Ben, imos facer outro exemplo usar unha diferente
función na biblioteca CS50.
Déixeme pechar este proceso.
Déixeme crear un novo.
E eu vou chamalo adder.c, só porque é fácil de facer aritmética simple,
aínda que iso será completamente por baixo do esperado co que podería facer
con calquera ordenador moderno.
>> Pero déixeme ir adiante agora e -
Eu aprendín miña lección última vez - inclúen cs50.h, include stdio.h, int
void main, que, polo momento, vou asumir unha fe cega, pero imos asumir
que vai entender o que isto significa que antes de tempo.
E eu vou dicir unha cousa como "dáme un int."
>> E agora, como fago para obter un int?
Quero finalmente declarar unha variable chamada x de tipo int e
nela almacenar un número enteiro a partir do usuario.
Así, foi un bocado.
Pero se alguén quere propoñer, como fago para declarar un enteiro chamado x?
X INT.
>> Entón, el realmente é tan sinxelo.
Dáme un int.
Chama-x.
Agora eu uso o operador de asignación.
E como fago para almacenar a partir do deixou un valor de usuario?
Non quero chamar getstring, obviamente, senón getInt.
Calquera argumentos?
Non
Por iso, ábrese paréntesis, preto paren de inmediato, e logo unha
comas remata a liña.
>> Agora, deixe-me facelo de novo.
Dáme outra int.
Esta vez eu vou facer int, imos chamalo y, é igual a getInt.
E agora déixeme facer unha cousa super-sinxelo como un pouco de matemáticas.
Así printf, a suma das% d é o espazo reservado para un int.
E% d, período, barra-n.
>> Todo ben.
Entón, iso non é verdade matemática.
Pero se eu quero dicir que a suma deste valor máis este valor é igual a este
outro valor, cantos argumentos en total de que eu debería estar dando printf,
en última instancia?
Así, catro, non?
Esta cadea e, a continuación, os tres valores.
Entón x é o primeiro que quero ser conectados por primeira vez ao% d.
y será o próximo.
>> E agora eu medio que quero dicir z, z, aínda non existe.
Pero isto non é un gran negocio.
Porque o que fai instintivamente, especialmente se tivese un
calculadora gráfica, o que escribe?
Como preto de x + y?
Polo tanto, non é unha variable real.
É só a suma de dous outras variables.
E iso é perfectamente lexítimo.
C seguramente entende simple aritmética así.
>> Punto e coma, salva.
Agora, deixe-me ir para abaixo aquí e escriba make víbora, Intro.
Non hai erros, de xeito que é un avance tamén.
Escriba víbora.
E outro atallo de teclado, se comezar a se cansar
con todos os comandos -
Se comeza a escribir unha orde, como punto reducir anuncio, e é aí onde o
aburrimento entra en acción, normalmente pode bater Tab para que o ordenador rematar a
descansar da frase para ti, se non é ambiguo que debe vir despois do anuncio.
>> Entón deixe-me ir adiante agora e premer en Intro.
Dáme un int, 1, 2, e Afortunadamente, é 3.
Pero, como sempre, os programas de probas non debe reducir a
só probalo unha vez.
Déixeme tentar un caso extremo, como negativo 1, dáme un, e que un
verifícase tamén.
E eu probablemente vai querer facer un pouco máis probas rigorosos, pero estou moi
cómodo co lugar onde iso está.
>> Ben, agora imos tratar outro programa que esta vez utiliza un
bits doutra sintaxe.
Déixeme crear un novo arquivo.
Vou chamar esta conditions0.c para aliñar cun código de exemplo liña.
E déixeme ir adiante e facer inclúen cs50.h inclúen
stdio.h, en void main -
Aceptar.
Alí imos nós.
Temos o noso cliché estándar.
>> E esta vez eu vou dicir printf, "Gustaríame un int, por favor", só para
facer a ventá de algo máis agradable.
E agora quero ter unha int do usuario.
Vou chamalo n este tempo, só porque non soa como número.
getInt, e agora, o que facer Eu quero facer con el?
Ben, se non é - e eu vou facer zoom in -
se n é maior que 0, quero facer o seguinte -
printf "Escolleu un número positivo." Senón, vou escribir printf "Vostede
escolleu un negativo
número. "Todo ben.
Polo tanto, este programa, aínda que eu fixen iso rápido, parece certo sintaticamente.
Déixeme tentar iso.
Fai condición 0.
Parece estar a funcionar.
Condición 0, entrar.
Imos darlle un int de 50.
Eu escollín un número positivo.
Imos tentar de novo.
Estado 0.
Negativo 50.
Eu escollín un número negativo.
>> Pero agora, déixeme escoller o que imos seguir chamando un caso de canto, que é máis
un caso interesante que pensa pode darlle algúns problemas, 0.
Agora, eu estou seguro que este é un dos Nestes casos recuncho onde cero é
nin positivo nin negativo, entón miña programa, aínda que en sintaticamente
corrixir - el compila, el roda - non é loxicamente correcta.
Entón cal é a solución simple aquí se eu queira para detectar, se eu queira manipular n
é igual a 0 separado?
>> Así, se n é igual a 0, entón quero dicir algo así como printf "Escolleu a 0."
Déixeme tentar iso agora.
Déixeme volver aquí, desmarque miña fiestra, e recompilar.
Hm.
Un erro xerar.
Pero eu quere comprobar se n é igual a 0.
>> Entón, de novo, outra cousa estúpida para acostumar, é signo igual
o operador de asignación.
Polo tanto, este é realmente un erro en que, tecnicamente, aínda que o compilador
protexeu-me de min mesmo, nos ser tecnicamente copiar 0 en n, que
non é o que quero.
Quero probar a igualdade con iguais iguais.
E para que agora se pode o meu mellor solución.
>> Déixeme realmente salva isto como, por exemplo, conditions1, para ser novo e mellorado.
Polo tanto, agora si recompilar tanto, faría condicións -
berros - facer conditions1 dot barra conditions1, Intro, "Gustaríame un int,
por favor. "Eu estou indo a ir adiante e escriba 50.
El aínda é bo.
Negativo 50, menos mal.
0, e, de feito, detectáronse que eu peguei 0.
>> Entón, o que máis pode agora fago con isto?
Ben, nós certamente podemos facer cada vez máis cousas complexas.
Pero o que me gustaría propoñer é que imos rematar con esta nota aquí.
Se tirar tanto, vai ver, se cadra, unha caricatura súa favorita
ata hoxe pode nunca entendín.
E iso é sobre a calidade da risa ten que comezar con bromas CS.
Entón, iso é certo.
>> Pero o máis convincente, eu penso que tiña dar un pouco de provocación para luns.
Entón nós comezamos con números enteiros.
Nós xa mencionado carrozas.
Temos aínda refire dúos, que, unha vez máis, darlle números
tras os puntos decimais.
>> Pero resulta que os coches alegóricos e dobres, e, en realidade, ordenadores,
fundamentalmente, non pode expresar algúns valores precisamente.
Sabemos de clases de matemáticas que pode ter calquera número de números despois do
punto decimal.
E tamén se pode poñer unha barra vertical para dicir que estes van para sempre.
>> Desafortunadamente, non pode realmente facelo nun ordenador.
E así xorden casos de canto.
Por exemplo, supoñamos que está facendo algo financeira.
Está facendo matemáticas con porcentaxes e
con dólares e centavos.
E os centavos non liña necesariamente up.
Pois ben, parece que as fraccións de tostões pode comezar a sumar cando
modelado cun sistema informático de tal forma que intelixente
os seres humanos poden sacar proveito.
>> E aqueles de vostedes que aínda non viron, eu quere darlle un teaser de 30 segundos de
un filme marabilloso, coñecido como Office Space, que vai pintar un retrato dun
problema que debe enfrontar primeiro que o luns.
Se puidésemos aumentar o volume algo, doulle 30
segundos de espazo de oficina.
>> [REPRODUCIÓN]
>> -Quero dicir, ti, non se mostra e pode manter o seu emprego.
>> -En realidade, eu a ser promovido.
>> -Podería programar un virus que rasgar aquel lugar fóra un gran momento.
>> -Ben, como é que funciona?
>> -Cada vez que hai unha transacción bancaria onde o interese é calculado, e non
son miles ao día, o equipo termina con estas fraccións de un centavo.
>> -Pero eu non vou facer algo ilegal.
>> -Ilegal?
Samir, este é a América.
>> -Temos de xuro por Deus.
>> -Se ninguén sabe sobre iso pero nós, non?
Ningún membro da familia, sen noivas, ninguén.
>> -Claro.
>> -Estou de acordo.
>> -Non te preocupes, cara.
Non vou contar a ninguén quere.
>> [FIN reprodución de vídeo]
>> DAVID Malan: Entón este é, entón, CS50, que era Office Space, e todo vai
ter sentido o luns.
Vexo vostedes despois.
>> Narrador: Na seguinte CS50, Rob axusta-se estar fóra do
Harvard plan de comida.