>> [Música tocando]
DAVID Malan: Ola, todos.
Este é supersection de CS50.
Seccións atribuídas non vai comezar por unha semana.
E así, hoxe, estou aquí com--
>> MARIA: María.
DAVID Malan: --to realmente Bótalle un ollo problema
definir un, o curso de primeiras semanas de material,
se orientado con CS50 IDE, un pouco Linux, o sistema operativo que é
rodando en IDE, así como ollar para algúns da transición
a partir de cero para C liderado ata un conxunto de problemas.
>> Así, sen máis delongas, nun conxunto de problemas,
vai ser CS50 presentou a IDE, que
é esta programación baseada en web ambiente que usamos en orde
para escribir programas.
Foi deseñado para ollar moi reminiscente dun ordenador típico
sistema executando unha operación sistema chamado Linux.
Pero é na chamada nube, o que significa que todos na clase
pode realmente ter o seu propia conta e usalo, tamén.
>> Así, a maioría de vostedes probablemente nunca usou un ambiente Linux antes ou que
mesmo un ambiente de liña de comandos.
E unha liña de comandos ambiente é diferente.
É todo textual.
É todo comandos de teclado.
E non é mousing, hai iconas, sen fiestras de diálogo, non hai menús.
É puramente texto.
Así, nun primeiro momento, o tipo de se sente como un paso
atrás en termos de sofisticación.
Pero acaba sendo moi máis poderoso, certamente,
para un científico da computación, en última instancia.
>> Entón, imos dar un ollo.
Aquí estou a CS50.io, a través do cal pode poñerse en CS50 IDE.
E así como no scratch, hai tres áreas principais para esta pantalla.
Así, na parte esquerda, temos o que vai ser o navegador de ficheiros.
E hai esa carpeta no top, que é agora baleira
dende que eu me librei de toda a miña arquivos antes supersection.
E é aí onde nós imos gardar arquivos C que escribimos.
Na parte superior dereita, temos un lugar onde todo o noso código se ve escrito.
E, de feito, se eu premer este plus, esta permitirá que escolla Novo ficheiro.
E aquí podo comezar a escribir código C ou, realmente, calquera número de outras linguas.
>> E, a continuación, na parte inferior, onde di jharvard @ ide50-- e vostedes van
dicir que un simple diferente-- o que foi este chamado?
Fiestra de terminal.
Si.
Así, a fiestra de terminal a liña de comandos chamada
interface a través da cal se pode interactuar co sistema operativo subxacente.
E, por agora, imos fan moi pouco uso isto--
só para compilar, para ollar mensaxes de erro que vemos,
e para realizar os nosos programas.
Pero, ao final, imos a facelo moito máis, tamén.
E aínda pode instalar software e administrar o seu espazo de traballo
dentro CS50 IDE, así.
Pero máis sobre iso noutro momento.
>> Entón, imos adiante e escribir un programa moi sinxelo só
que pasar por un warm-up de ola.c, que é quizais
o programa máis simple que podemos escribir.
Eu xa abriu unha nova guía.
Eu estou indo a ir adiante e din inclúen io.h. estándar
Logo int main (void).
E entón printf ("Ola, mundo" barra invertida n, multimedia preto,
pechar parénteses, e coma.
>> Todo ben.
Entón agora entender miña xanela é sen título.
Entón, eu estou indo moi rápido para ir ata Arquivo, Gardar.
E é importante que Eu chamo iso non "Ola".
Así, un erro moi común, especialmente nun conxunto de problemas,
é accidentalmente pode conectar ao seu programa "auga" ou "ganancioso" ou "Mario"
ou "crédito" ou similar.
Pero o que realmente quere facer se ten a extensión de ficheiro
porque esta é a única forma que o compilador e tamén o editor de código
sabe que é realmente escribindo código C.
Entón deixe-me ir adiante e prema Gardar.
>> E agora, tamén, o que CS50 IDE fixo por nós é tamén é
sintaxe destaque todo.
Entón, está feito todo moi colorido.
E todo o propósito de que non é funcional.
É só para deseñar os ollos para o conceptualmente diferentes pezas
deste programa.
Entón, imos adiante e compilar iso.
E podo compilar este nun par de formas.
E unha semana, o xeito old-school que fixemos
era literalmente no mando linha-- "hello.c clang".
E entón eu prema Intro.
E nada parece ocorrer na ventá do terminal.
Pero o que fixo o cambio no IDE?
Onde, de novo, só significa IDE Integrated Development Environment.
É un xeito elegante de dicir este desenvolvemento integrado
ambiente para o desenvolvemento de software.
Entón, o que cambiou na interface de usuario?
O que notou que é diferente, María?
>> MARIA: Eu notei algo baixo a IDE50 cartafol aquí.
>> DAVID Malan: Yeah.
Entón, aquí enriba, non só temos "hello.c".
Tamén temos "a.out", que é tipo de nome mudo para un programa.
Pero, en realidade, é o nome por defecto para un programa cando acaba de compilar o código
e non dicir o compilador o ficheiro de saída.
Entón, se eu queira realizar isto, eu Debe dicir ao compiler--
ou mellor, eu teño dicir o espazo de traballo que eu
quere executar o programa chamado "a.out".
Intro.
E non hai "Ola, mundo ". Agora, o" ./ ".
é realmente importante.
Aínda que normalmente temos só escribir os nomes dos comandos,
cando é un programa que escrito, quere dicir "./"
porque que di explicitamente Linux que quere executar un programa chamado
"a.out" que está neste, onde dot significa que este directorio que estou actualmente
in, que pasa a ser chamado espazo de traballo, "a.out.
Porque se eu só dixo: "a.out", Intro, Eu estou indo a obter "a.out comando non
atopado "porque o Computador-- porque eu inventei "a.out";
el non veu co Computador-- non sabe onde mirar para el,
aínda que sexa á dereita embaixo do meu nariz, por así dicir.
Aceptar.
Así poderiamos cambiar isto para ser "clang -o Ola hello.c".
E se eu prema Intro, o programa é que isto vai saída para min?
Cal é o nome do ficheiro?
Si, na parte de atrás.
Iso é certo. "Ola".
Así, "Ola" será o nome do programa
porque usamos un chamado argumento da liña de comandos, que é só
un modo de cambiar o comportamento o compilador para realmente saída
o nome do ficheiro específico.
E, de feito, se eu aumentar para fóra, e mirar para arriba aquí,
agora eu teño non só "a.out" e "hello.c", pero tamén "Ola", como ben.
Entón agora podo facer "./hello," Enter.
E non hai "Ola, mundo".
Pero lastly-- e esta agora será a convención
usan todo o semestre, typically--
é tamén pode simplemente dicir "facer Ola".
E, de feito, está dicindo que é superior a data porque xa existe.
Deixe-me ir adiante e eliminar, con o comando rm, tanto "a.out" -
e dicir "eliminar a.out ficheiro regular?"
Isto significa só que é vostede seguro de querer borralo?
Eu vou dicir que si.
E entón eu estou indo a eliminar "Ola", pero non "hello.c".
Eu estou indo a dicir "si" explicitamente, pero de "y" é suficiente, como ben.
>> E agora entender se eu escriba ls-- que, recall,
significa lista-- el mostra todos dos arquivos no meu cartafol.
E, de feito, se eu aumentar para fóra, e mire na esquina superior esquerda,
confirma que o que é neste cartafol, mesmo
aínda que é etiquetado como IDE50-se aquí e non espazo de traballo, é só "hello.c".
Entón agora aquí abaixo, se eu que "facer Ola," Enter,
agora vexo un comando moito máis tempo, pero un mando máis sofisticado que está pasando
para ser útil nas semanas que virán.
E agora podo dicir "./hello."
>> Entón, imos dar un rápido paseo Ordes dalgún outro Linux.
Entón por que non damos un paso para atrás e realmente ollar para C máis
xeralmente, a transición desde cero a C, e, a continuación, completar cunha mirada
no primeiro problema definido C. Todo ben.
Entón, eu estou indo a ir adiante e só limpa o meu espazo de traballo con Control-L só
para manter a pantalla limpa.
Pero iso non ten funcional impacto doutra forma.
>> Lembre que vimos algúns comandos agora.
Entón vimos clang, que xeralmente se non terá que realizar manualmente máis.
Nós en vez vou usar make.
Pero vimos tamén ls, que mostra unha Lista dos ficheiros no meu directorio.
E agora por que existen dúas há-- arquivos agora, "Ola" e "hello.c".
Por que hai unha estrela ou un asterisco tras "Ola"?
O que isto significa, en base no que vimos nunha semana?
Que pensas?
O que a estrela significa?
>> MARIA: For-- o programa "Ola"?
DAVID Malan: "Ola *".
Si.
Ah, si?
Oh, executable.
Iso é certo.
Entón isto significa que "Ola" é executable.
Entón, en realidade, é por iso Podo facer "./hello."
Todo ben.
Entón, o que máis podo facer aquí?
Ben, resulta que eu poida tamén crear directorios.
Entón deixe-me ir adiante e crear, por exemplo, un directorio "pset1".
E o problema especificación definida terá que facer exactamente iso,
así que non ten que lembrar hoxe.
Pero "pset1 mkdir" parece non ter ningún impacto.
Pero, de novo, ningunha mensaxe de erro xeralmente é bo.
Entón, se eu escribir "ls" agora-- ah, agora Eu teño un arquivo executable chamado
"Ola", un arquivo C chamado "hello.c".
E, a continuación, a barra final, por así falar, quere dicir que este é un directorio.
>> Entón, en realidade, agora quero abrilo.
E eu non facer dobre clic sobre el como nunha GUI, un ambiente gráfico.
I en vez dicir "cd pset1."
Intro.
Nada interesante parece aconteceu, excepto o meu pequeno alerta
aqui-- esta é a forma de Linux de lembrar me onde estou, entón o que carpeta é aberta.
É só me dicir explicitamente en oposición a graficamente.
E se eu escribir "ls", por que vexo outro solicitar inmediatamente, pensas que,
cando incluír o contido pset1?
MARIA: Probablemente non facer ten algo alí dentro.
DAVID Malan: Yeah.
Entón non temos obviamente creado algo alí dentro
porque eu só creou o directorio.
Agora, se eu quería crear un file-- para exemplo, eu podería crear un novo ficheiro.
E entón eu podería ir Gardar e salva-o como,
como, "mario.c" se está facendo a edición estándar do pset un.
E entón, como calquera Mac ou PC, só escoller o "pset1 cartafol, Gardar.
E agora o arquivo está baleiro.
Pero imos facer zoom novo para un segundo.
Imos facer ls aquí.
Agora vemos "mario.c".
>> Polo tanto, hai algúns outros comandos que paga a pena ter en conta ao longo do tempo--
claro, ou Control-L é o que eu teño foi bater; mkdir vimos;
rm vimos, tamén, o que é para eliminar ou borrar un arquivo.
Coidado pode Também-- e se ollar en tutoriais en liña, vai rm-rf
é unha forma moi común de dicir eliminar un cartafol que ten cousas nel.
Só ten que ser super, super coidadosa.
rf significa de forma recursiva eliminar todo o que é
estás eliminar e forzosamente excluílo.
Entón recursiva medios se é un cartafol con un cartafol con un cartafol con un cartafol,
eliminar todos eles.
E forzosamente significa nin sequera preguntarme si ou non, estou seguro?
Polo tanto, é un xeito super perigosa de borrar unha morea de cousas rapidamente.
Pero beware-- demasiado frecuentemente fai un intrépido estudante borrar accidentalmente, digamos, pset
un, por exemplo.
>> MARIA: E no caso de que só facer -r, van
para preguntar-lles sobre cada ficheiro único.
>> DAVID Malan: Cal é moderadamente irritante.
>> MARIA: Si.
>> DAVID Malan: Entón é por iso moitos de nós, a auto incluído,
teño o costume de utilizar o -rf.
Pero é perigoso.
Así, o comprador ten coidado.
E entón mv é unha especie de curiosamente chamado.
Entón que é o mando de movemento, que se sente un pouco raro
porque realmente pode usalo para mover arquivos dun lugar a outro.
Por exemplo, supoñamos que eu errei.
Supoña que eu creei un novo ficheiro para o pset.
E eu salva-lo como "greedy.c."
Pero supoñamos que eu accidentalmente salve- en IDE50-- así no meu propio espazo de traballo
e non en pset1.
>> Podes ver tanto na esquina superior esquerda.
Hai "greedy.c."
E hai algunhas solucións.
Entón, un, podo utilizar o forma agradable super-
de só arrastrando e soltando o.
E iso, en realidade, corrixir este problema.
Pero hoxe, estamos intentando buscar as formas máis misteriosas, pero poderosas
de facelo.
Entón deixe-me tomar "ls" no pset1.
E eu só vexo "mario.c."
Deixe-me ir adiante e facer "cd ..".
Entón CD novo é cambiar directorio.
".." Significa que, aínda?
A última vez dixen "cd pset1 "para entrar en pset1.
Polo tanto, cando digo "cd ..", o que estou facendo?
Atrás.
Si.
>> Entón vai para o pai chamada.
Ir un nivel superior, como saír dun cartafol.
Entón Intro.
E, de feito, mire o que fixo.
Me cambiou só no espazo de traballo, no canto de en pset1, que é en espazo de traballo.
E agora, se eu escribir "ls", hai unha morea de cousas.
No existe "greedy.c".
Entón, agora déixeme usar mv para, literalmente, mover "greedy.c" en pset1.
E entón unha morea de comandos de Linux funcionan exactamente como este.
Eles non teñen argumentos ou toman unha argumento ou toman dous liña de comandos
argumentos e así por diante.
E neste caso, é literalmente facendo o que
el di que, aínda que succinctly-- mover greedy.c en pset1.
Intro.
Nada parece ocorrer.
Pero se eu fai un ls novo, ganancioso está desaparecido.
E se eu fai "cd pset1", Intro e, a continuación, ls novo, agora é o lugar seguro.
Como un aparte, para algunha razón especial
se ten intermitente liña de rede
ou está camiñando por aí campus coa súa tapa do portátil
pechada e, a continuación, abrilo de novo e do seu espazo de traballo
parece un pouco fóra de sincronía, non é gran cousa.
Só actualizar o seu navegador fiestra, e que debería
resync de xeito que o lado esquerdo navegador de ficheiros parece exactamente
como a ventá do terminal.
Non se preocupe.
En caso de dúbida, recargar a páxina, así desde que salvo os ficheiros xa.
Aceptar.
Entón mv tamén se pode usar para renomear arquivos.
E imos dar un ollo este comando final aquí.
Así suppose-- e esta é Super común, tamén, dende o principio.
Algúns estudantes, en ocasións, crear un arquivo chamado, imos dizer-- o que é unha?
Como "WATER.C."
Entón eu vou berrar, para ningunha razón, en todo tapóns.
Pero isto non é o nome correcto para o arquivo
soamente porque o noso conxunto de problemas especificación non lle dixo
para gardar o ficheiro como todas as tapas "WATER.C."
Pola contra, esperamos "water.c" en minúsculas.
E, de feito, este é problemático porque check50,
un programa que vai reunirse en problema
definir un que examina automaticamente a corrección do seu código
vai berrar con vostede se non pode atopar "water.c" en todas as minúsculas.
>> Entón, eu teño fixar iso.
Tantos camiños diferentes para facelo, a primeira das cales
sería a de Control prema co botón dereito do rato ou o nome do ficheiro e só cambiar Renomear.
Totalmente ben para facelo.
Pero, de novo, hoxe, imos facelo un pouco máis extravagante.
Imos usar mv para cambiar "WATER.C" a "water.c."
Entón, tamén se pode usar o primeiro argumento renome-lo para o segundo argumento
o segundo argumento non, está realidade, un cartafol ou un nome de directorio.
>> Todo ben.
E, por último, un pouco trick-- polo que estou en meu directorio do espazo de traballo no momento.
Se eu queira entrar nun pset, Eu certamente podo escribir "cd pset1."
Pero é tan tedioso para escribir "pset1" ou máis nomes de ficheiros ou nomes de directorio
aínda.
Entón, moitas veces en Linux, que podes facer é comezar a escribir "PSE"
e só se cansar, Tab bater, e deixá- a figura de ordenador para fóra para ti.
Super útil para entrar na ese hábito.
O único problema é se ten varios arquivos ou carpetas dende
coa letra "P" ou "ps", pode que
para escribir un pouco máis antes de ordenador sabe o que facer.
>> MARIA: Gústanos atallos.
>> DAVID Malan: Esta vontade aforrar moito tempo.
E tamén, como dixemos na clase, pode rolar para arriba na historia, para arriba e abaixo,
para atopar recentemente executada comandos, como ben.
Todo ben.
Entón, agora, imos voltar a nosa atención ao para un programa sinxelo, Ola mundo.
Entón, nós compilamos esta exactamente.
E agora, por que non tomamos un ollar para os tipos de datos
e, a continuación, a transición de algunha correspondente bloques cero para C.
MARIA: Awesome.
Polo tanto, agora que comezou escribir programas en C,
imos comezar a falar sobre tipos de datos e variables.
Así, algúns tipos de datos que gustaríame saber a partir de agora
son os que son destacada en azul.
Polo tanto, temos int en primeiro lugar, que significa enteiro.
E que mantén enteiros, como Pode que guessed-- para 1, 2, 3,
e outros enteiros que pode pensar.
>> DAVID Malan: E tamén negativo.
>> MARIA: E tamén os negativos, si.
E 0.
Entón temos Carrozas, que son números de punto flotante.
Entón, iso é todo números reais que teñen puntos decimais.
Entón, 5.0, 5.2, e aínda máis díxitos despois do punto decimal,
ben, e tamén os negativos.
Entón temos de char que é un personaxe.
Entón eu creo que falamos de isto charla hoxe.
Pero temos cartas, para example-- A, B, C-- que pode ser almacenado como un char.
Pero, entón, temos moito máis símbolos que pode ser almacenado como un char.
E os almacénanse como ASCII.
>> E entón temos bool, que son Booleans.
E os avaliar como True ou Falso ou 1 e 0 respectivamente.
DAVID Malan: E lembre que booleano vén desde a biblioteca CS50.
Polo tanto, non está construído en C, pero é super útil
para ter a noción de certo e falso.
E aínda que pode penso-- feito divertido.
Un bool tecnicamente precisa cantos bits, verdadeiramente, para representar certo contra Falso?
Cantos bits pensas necesitará dun máximo?
Si, só un.
Así, verifícase que C non pode dar-lle só un pouco.
A menor unidade de medida pode obter é oito.
Entón é un pouco unha perda que é utilizando un byte de toda, ou oito bits,
para representar Verdadeiro ou Falso.
Pero iso é só a forma que é aplicado en C na biblioteca de CS50.
MARIA: E entón os que estamos non vai falar sobre como extensivamente
agora-- dereito dobre, isto é para Carrozas maiores.
Longo longo e curto son tamén para números enteiros.
DAVID Malan: De feito.
Na edición de hackers de pset un, nós realmente usar longo, longo.
Pero para a edición estándar, que non deben ser necesarias.
MARIA: Cool.
Aceptar.
Entón ten que ser operators-- Probablemente está familiarizado coa maioría destes.
Adicionalmente, +; resta, -.
Para a multiplicación, ten por *.
Polo tanto, non o X que adoitamos empregar.
División, temos a barra invertida.
E módulo é o noso último operador que imos falar agora.
É un operador que nos permite levar o resto dunha división.
Entón, se temos 4% 2, 4 dividido por 2 é 2 cun resto de 0.
Así 4% 2? 0.
4% 3 é 1.
4% 5 é de 4, como podería ter imaxinado.
E recorda se cando se utiliza todos estes os operadores a utilizaren as normas PEMDAS.
>> DAVID Malan: Entón, para ser claro, se facer 2 a 4%, por que é que 0, exactamente?
>> MARIA: Por 4 dividido por 2 é 2 cun resto de 0.
Entón modulo dános esa resto como oposición ao resultado da división.
DAVID Malan: E, de feito, o que imos atopar este útil
para é que en algúns problemas iso non é necesariamente un,
se quere ter o efecto restrinxir-se
para unha gama de números como 0 a algo,
pode utilizar o módulo para embrulhar arredor máis cedo do que como a 2 mil millóns
ou o valor de 4 millóns que falamos sobre a charla.
>> MARIA: Si.
E mesmo en "ganancioso", poderiamos.
DAVID Malan: Si, en un conxunto de problemas, tamén.
MARIA: Si, bo.
DAVID Malan: Boa información.
MARIA: Sentímolo.
Boolean expressions-- así para os operadores booleanos,
imos falar sobre todo deses que ve aquí.
Entón, agora temos dous sinais de igual recollidos para iguais.
Polo tanto, estas son para comparación.
Ata agora, só vin un sinal de igual.
Isto é cando atribuímos un valor a unha variable.
Entón, se nós vimos int n = 5, a continuación, temos asignado 5 para a variable n.
Pero, se queremos usar == para comparación, podemos comprobar que n == 5.
E se n == 5, a continuación, iso é verdade.
>> Así, os operadores booleanos permítennos basicamente
para avaliar booleano expresións como True ou False.
Polo tanto, non temos a equals-- signo de admiración e iguais.
Entón, nós tamén podería comprobar que n non é igual a 5-- así n! = 5.
Menos que, a menos que ou igual a, maior que, maior que ou igual a,
e, a continuación, temos a lóxica AND e OR lóxico.
E os nos permiten avaliar múltiples expresións booleanas xuntos
para vir xunto como basicamente Toda unha expresión booleana.
Polo tanto, se queremos atopar un número, por exemplo, que é maior que 5 pero menor que 15
á vez, queremos usar o E lóxico operador para ver se n é
maior que 5 && n inferior a 15.
DAVID Malan: E aquí, tamén, é realmente fácil
a comezos para accidentalmente usar só un único e comercial
ou unha única barra vertical.
E espero que o compilador berrar con vostede, porque realmente
ten un significado moi diferente.
Para os curiosos, son usado para operacións bit a bit,
operando en anacos individuais.
Pero quere que o par deles aquí.
E super importante é que primeiro, o signo igual,
que é o operador de igualdade como oposición ao operador de asignación.
>> MARIA: E a barra vertical é situado entre o Borrar e Retorno.
DAVID Malan: Si.
Nun teclado típico dos Estados Unidos.
>> MARIA: Si.
Entón, imos saltar directo para instrucións condicionais.
En risco, ten xa visto probablemente
as declaracións que lle permiten comprobar que algo é certo, entón
facer outra cousa.
Entón podes querer para comprobar se o seu sprite é
tocar algunha outra entidade gráfica ou o bordo da pantalla.
E entón podería querer rematar o xogo ou facer outra cousa.
Así, para que a sintaxe é "if (condición)."
Polo tanto, se o seu sprite está tocando algo, non é dentro das chaves.
>> Entón temos declaracións if-else.
Else permítenos facer algo A condición de que
comprobar que hai no inicio non é verdade.
Polo tanto, se o sprite está tocando o border facelo, senón facer outra cousa.
Así, se non, facer outra cousa.
Entón, temos un pequeno exemplo para isto.
Así, se (military_time <12), nos quere printf "Bos días"
Else imos printf "Boa noite!"
Exemplo básico.
>> DAVID Malan: Good.
>> MARIA: Cool.
Polo tanto, agora temos instrucións switch.
Alterne declaracións en lata xeral permítennos facer unha chea de o mesmo
que acabamos de falar sobre con que declaracións.
Por exemplo, agora temos a forma xeral da instrución switch
que nos permite tomar unha variable chamada n
e comparalo con unha morea de valores distintos, que aquí
chamar CONSTANT1, constant2.
Podemos ter moito máis.
E os chámanse casos.
>> Entón, se temos unha chave statement-- e funciona
só para integers-- temos un variable, neste caso, que é n.
A variable n é igual a CONSTANT1, nós
executará algún fragmento de código ou algo que queremos facer.
E entón nós ía romper.
Polo tanto, a pausa significa que a instrución switch
ha parar a execución se n é igual a CONSTANT1,
e, a continuación, o programa seguirá.
Ha saír fóra da cambiar declaración e vai
seguir facendo outra cousa.
>> Se, con todo, n non é igual CONSTANT1, entón caso para constant2
verificarase.
Así, se n é igual a constant2, que outra fragmento de código será executado.
E entón el vai romper que é igual a el.
E entón podemos ter Também-- non necesariamente, embora-- un caso por defecto,
que vai pasar se n non é igual a calquera dos casos que alistou.
E, no caso estándar, nós tamén non necesariamente precisa dunha pausa
porque a instrución switch saberá que necesita para rematar despois do default
caso se ese é o caso.
>> DAVID Malan: Pero estilisticamente, sempre poñelas alí.
>> MARIA: Si.
>> DAVID Malan: Yeah.
Entón, sobre todo cando se inicia, especialmente nos menores
cómodo, eu persoalmente só recomendo ir con o IFS
IFS e elses correo if-else-if-elses etc. que
porque son un pouco máis simple.
Este é un bo optimization, ou ás veces incluso estéticamente
fai o código máis lexible.
E, de feito, probablemente medio do semestre imos ver un problema
definir onde só queda mellor e máis fácil de ler para os humanos
usando unha instrución switch.
Pero non se preocupe agarrándose a esta moi cedo.
>> MARIA: Si.
Se tes unha morea de if, non pode ser só moi lexible.
Pode non ser moi rápido para que poida pasar por iso.
Así, as declaracións poden cambiar ser moi útil, así.
E tamén, non recorde-- non facer esqueza poñer as quebras de alí.
>> DAVID Malan: Non lembrar diso.
>> MARIA: Por entón podes caer a través dun caso a outro.
Entón, imos dicir que se CONSTANT1 Non ten unha instrución break nel.
Entón podemos caer caso constant2 dentro.
E nós non queremos facelo se que xa chegou a caso CONSTANT1
e é igual a n.
>> Así, por exemplo, se temos unha variable n que contén un número de clase,
e queremos ver que que clase é-- Se n é igual a 50,
nós estamos indo a imprimir "é CS50 Introdución á Ciencia da Computación I. "
Entón imos romper.
E é iso.
Se, con todo, n é igual para 51, nós imos
imprimir "CS51 é Introdución a Ciencia da Computación II. "
Entón, de novo, nós imos romper.
Con todo, se, a continuación, poñemos 124, 61, calquera outro número que pode pensar,
ou programa non vai de recoñecer que.
Entón, que vai dicir: "Sentímolo, eu son non familiarizados con esta clase. "
E vai romper.
DAVID Malan: Entón pode realmente ver o if, else if, else idea aquí.
É só sintaxe distinta para expresando a mesma idea exacta.
>> MARIA: Exactamente.
Agora temos os nosos operadores ternários.
Así, os operadores teñen ternários tres parts-- unha condición,
algo para facer se esta condición é certa,
e, a continuación, algo que ver se esa condición é falsa.
Entón ve, basicamente, A sintaxe de que aquí.
Temos o punto de interrogación, e as-- entón o que chamamos iso?
DAVID Malan: O colon.
MARIA: Colón.
Grazas.
Desculpe.
Entón, imos ollar para o noso exemplo para ver se podemos dar sentido a isto--
class_num == 50.
Entón, aquí vemos o noso operador booleano == que compara a class_num variable
a 50.
Tendas Entón class_num un enteiro.
E se ese enteiro é igual a 50, entón nós estamos
indo para almacenar "David Malan" no interior do profesor de cadea.
Se o número de clase non fai igual a 50, "non David Malan"
será o profesor.
>> DAVID Malan: Grazas.
E así, este parece equivalente a o que, diría que, a primeira vista?
>> MARIA: Para min parece como if-else declaracións.
>> DAVID Malan: Yeah.
E, de feito, este é o tipo dunha linda un forro,
por así dicir, para a posta en marcha de exactamente a lóxica de if-else
pero facendo todo nunha única etapa.
>> MARIA: Exactamente.
Si.
Polo tanto, se as declaracións máis poi- incorporarse unha morea de espazo.
Poden ser moi longo para algo tan sinxelo coma iso.
Entón, iso pode ser moi sucinta e moi agradable.
Entón, agora imos en ollar execución de algo novo e de novo,
polo tanto, a comprobación por un condicionar varias veces
e, a continuación, continuar a facer algo mentres que a condición é verdadeira.
Entón, iso nos trae moi ben en loops de tempo.
>> Á esquerda, temos noso primeiro bucle while.
Así, mentres algo é certo, facer algo de novo e de novo.
Entón asegúrese notar que a nosa condición aquí é validado na parte superior.
Tendo en conta que, coa nosa segunda loop-- chamamos que un do-while loop-- facemos algo,
entón comprobar se hai unha condición.
E se esa condición segue a ser verdade,
Imos volver e facer as cousas de novo.
Así, a principal diferenza é onde a condición é posible para.
E o código non pode ser executado se a condición non é
certo co loop while.
Considerando que, co do-while loop, temos o código
que sempre executado polo menos unha vez.
E, a continuación, mentres a condición segue a ser verdade,
podemos volver e facer unha iteración novo dentro.
Entón, por que pensas que usariamos un do-while loop sobre un loop while?
Dereita.
Polo tanto, se queremos para solicitar ao usuario para algún tipo de entrada,
se queremos pedirlles para introducir o seu nome,
queremos pedir-lles, polo menos, unha vez máis.
E no caso de que entrar ese nome, non somos
imos pedir-los de novo porque xa coñecemos.
Pero no caso de que non entrar o seu nome, ou no caso de que
escriba algo que é obviamente, non un nome,
aínda queremos seguir pedíndolles para no seu nome.
>> DAVID Malan: E en charla tivemos un así coa obter int positivo
exemplo, onde non hai nada para comprobar en principio, porque non ten mesmo
obtido un int.
Por iso, queremos facer isto-- obter un int do user--
a continuación, comprobar que, se cadra, de novo e de novo e de novo.
>> MARIA: Exactamente.
Para loops-- Aceptar.
Para loops poden nos permiten facer case exactamente o mesmo, tamén.
En realidade, é exactamente o mesmo.
Non hai nada que pode facer loops
que non sería capaz que ver con loops de tempo.
Pero para loops pode parecer un pouco pouco máis complicado sintaticamente
porque eles teñen tres partes no que
era antes só o condición con loops de tempo.
Así, a primeira parte que mar, o máis á esquerda, temos "int ananos = 0."
Polo tanto, este é o lugar onde nós iniciar nosa variable.
>> Entón temos un punto e coma e "ananos <7".
Polo tanto, este é o lugar onde fora condición realmente é.
Entón é iso que teriamos poñer só no momento loop--
"mentres ananos <7".
Aquí, que vai no medio do noso loop for.
Así, "dwaves <7".
E entón a nosa última parte é "ananos ++" que é onde nós actualizamos a nosa variable.
Entón, o importante para entender é que esta
vai pasar por este loop for sete veces e executar sete veces.
Polo tanto, temos sete ananos, e eles están todos
vai dicir: "Eu estou aquí para axudar, Brancaneves "
porque está preparado para axudar a Brancaneves.
>> Con mentres loops, teriamos feito o arranque ea actualización
non dentro da condición, unha vez máis, pero antes ou dentro do loop while
para asegurarse de que nós-- porque necesitamos sempre esas pezas.
Entón, para asegurarse de que temos eles, tería aínda engadiu-los
en, non só dentro dos parénteses.
>> DAVID Malan: E así parece como-- na palestra, por exemplo,
Eu case sempre uso, como, eu e n variables e moi aburrido.
Parece que pode usar máis intelixentemente chamado variables, tamén.
>> MARIA: Si, é realmente moi bo usar variables un pouco máis descriptivos
porque todo se alguén está consultar o code-- quizais estea motoniveladora
ou se está colaborando con somebody--
quere estar seguro de que eles entender o que está facendo.
>> Aceptar.
Entón, iso é algo moi funky-- loop dentro dun loop for.
Non sei se xa vin que antes.
Probablemente non.
Pero podemos realmente ter isto-- así ciclos en vez de lazos.
Entón, alguén quere andar quizais me con o que está pasando aquí?
DAVID Malan: Vou tomar unha facada.
MARIA: Cool.
DAVID Malan: Aceptar.
Entón, spoiler-- queremos imprimir o material que está na parte inferior dereita
alí.
>> MARIA: Correcto.
Yeah, yeah.
>> DAVID Malan: Entón temos só poñer este exemplo de saída alí.
Entón eu podo inferir a partir da superior loop que é
iteración sobre as liñas lazo máis externo, por así dicir.
E está interactuando sobre columnas co lazo máis interno.
E intuitiva, este debe esperanza ten sentido
porque, por natureza de cada programa que vimos
antes, printf, que é a función que estamos usando, en definitiva,
ten a capacidade de imprimir material out esencialmente liña por liña.
Como, unha vez que emite unha nova liña, hai
non dobrando cara atrás e imprimir algo superior da pantalla, polo menos
non usar printf como este.
>> E así, a este respecto, fai sentido en que o circuíto externo
debe estar referíndose ás liñas porque para cada dada liña,
vai querer imprimir XXXXX, e, a continuación,
pasar á seguinte liña, XXXXX.
Así, as liñas veñen en primeiro lugar.
E, a continuación, dentro de cada fileira, imprime columnas.
Se tentou facelo do oposto, probablemente non faría
saír como quere.
>> MARIA: Si.
Nós só non podería volver a liña anterior con printf.
>> DAVID Malan: E o que é interesante por chat de hoxe sobre o alcance,
en realidade, é que liña é un int que está declarado no circuíto de nivel superior.
Pero teña en conta que aínda é dentro, por así dicir,
as claves que siga inmediatamente,
aínda que non é tecnicamente dentro desas claves.
Entón liña está no ámbito ao totalidade do tramo de código,
tanto dentro do exterior para o lazo e no interior do interior para loop.
Pero doutra banda, onde é a columna no ámbito?
A columna variable?
É, só no loop interno.
E iso é OK porque non acceder fóra das súas claves.
Todo o que facemos é imprimir un novo liña ao final alí.
De xeito que, de feito, é OK.
>> Entón, iso ten o efecto, parece que, de facer tres liñas e catro columnas.
>> MARIA: Correcto.
Entón, primeiro imos nós, a nosa primeira liña.
E só na nosa primeira liña, nós facemos o catro columnas dentro a primeira liña.
Entón, nós imprimir catro Xs.
E entón podemos saír do loop, xa que nós xa impresos catro Xs.
E nós imprimir unha nova liña.
E entón pasamos a mesmo proceso por dúas liñas
para completar un total de tres.
>> DAVID Malan: E é interesante notar que é só un artefacto da fonte, o feito
que a saída de exemplo parece moito máis alto,
como se houbese máis liñas que columnas.
Pero é só porque o X é máis alto do que ancho.
Isto é todo o que está a suceder alí, máis o espazo en branco entre as liñas.
>> MARIA: Correcto.
Legal.
DAVID Malan: Todo ben.
Así, unha rápida ollo a un conxunto de problemas, sacar algunha dúbida, e despois retrasar?
Todo ben.
Así, nun conxunto de problemas, hai tres retos principais, en definitiva.
Pero, primeiro, vai atopar que o conxunto de problemas
especificación, como acontece con moitos o Serie de exercicios esta caída, vai oriente-lo
a través de algúns exercicios de quecemento, sinala-lo para fóra algúns recursos
que pode ou non vimos xa.
Por exemplo, CS50 ten un conxunto de shorts,
que son pequenos vídeos, Non ao contrario deste, pero que
son moi specific-- tema quizais cinco minutos,
10 minutos de duración en lazos ou ou en condicións en algoritmos
ou posterior no máis temas avanzados, así.
E nós xeralmente incorporar aqueles en o problema
conxuntos para que os alumnos ten un recurso co que
a avaliar material que pode ter xa chegar no charla ou sección.
Pero deste xeito é máis focado e máis na punta dos dedos.
>> Tamén tenden a incorporar no problema define cousas chamadas orientacións.
Así, case todos os exemplos que fago en charla, no escenario aquí, nós tamén
lanzar na cámara en avanzar un máis lento,
un paso a paso máis íntimo por min en meu portátil do mesmo código, liña por liña
de xeito que en clase, imos miúdo follas algo ou alguén
vai interpor cun responder a unha pregunta.
Pero iso non significa necesariamente afondar por todos na audiencia.
Entón vai atopar o código orientacións para a maioría dos exemplos
o que facemos aquí en charla para que pode atravesalo-la no seu propio ritmo
e retroceder ou avanzar rapidamente ou ignore por completo, se desexa.
>> Hai moitas veces un pouco preguntas warm-up que
pedirlle que tipo de reforzar este material
e asegúrese de que vostede é cómodo antes de continuar co resto do pset.
E entón, por suposto, hai o propio pset.
E unha das cousas nós deliberadamente
facer en CS50 é case todo desinteressante ou intelectualmente desinteressante
mentres que mecánica pode ter que facer
é case sempre moi ben documentada.
Ao longo do termo, nós imos comezar a facer preguntas máis retóricas
como lembrar de como facer isto ou aquilo?
Pero, xeralmente, atoparás que os conxuntos de problemas que obteña
a través da mecánica algo para que
os retos intelectuais interesantes, son en definitiva, cómpre a vostede o alumno.
>> Con iso dito, Zamyla, a quen nós mantidos referíndose hoxe en conferencia,
é un dos nosos empregados de toda a vida membro que tamén ten orientacións
sobre os problemas específicos como PSet Mario e ganancioso, aínda que non regar este ano.
E é naqueles orientacións que moitas veces ela
ofrece algúns consellos e trucos para como proceder, nunca te dicindo
exactamente o que facer, pero rather-- como unha condición,
se will-- dándolle, polo menos, un par de ideas para que cómpre a vostede,
en definitiva, para decidir como abordalo-los.
>> MARIA: como unha especie de alto nivel comprensión da lóxica do que
estamos lle pedindo para facer.
>> DAVID Malan: Exactamente.
E, de feito, de Zamyla orientacións están destinadas
para responder á frecuencia pregunta de onde
Comecei a facer, especialmente cando estas especificacións son longos
un pouco asustado dado todo o texto e as imaxes que teñen en si.
>> Entón water.c, atoparás despois de concluír que,
é, en realidade relativamente simple.
Absolutamente son unha banda de que vai bater
súas cabezas contra a parede intentando para descubrir por que non está compilando
ou por que non funciona correctamente.
Pero unha vez que está feito con el e unha vez que
pasou un tempo loitando con calquera dos erros que poida ter,
vai descubrir que é un programa moi curto.
El se pode facer en só algúns liñas de código, a maioría dos cales
vimos aquí en charla xa se que monta os bloques de construción correctas.
>> E, como suxerimos aquí, que vai pedir
que especifique cantos minutos alguén está tomando baño no campus.
Nós especificar no problema definir o tipo de fluxo de auga
en, tipo, unha ducha de baixo fluxo cabeza, moi parecido ao clip de Seinfeld
vimos onte ou o contrario do mesmo.
E entón só ten para facer un pouco de matemáticas,
realmente-- aritmética usando C para contar nos como moitos, grosso modo, botellas de auga
equivale a que se somos tomar un ducha n minutos.
>> Agora, en mario.c, que vai un programa para ser lixeiramente máis longo.
Aínda non será tanto tempo.
Só algunhas liñas máis longas que water.c.
Pero vai ser oportunidade para recrear a vella escola Mario
pirámide de Super Mario Irmáns ou algún follow-on.
Non vai parecer tan máis fermosa ou tan cores como aquel alí.
Nós só estamos indo a usar pequenos hashtags como temos aquí na pantalla
usando texto ASCII.
Pero vai achegar a mesma idea.
E vai ser un exercer que a primeira vista
parece bastante simple-- só imprimir unha pirámide simple.
Pero hai algunhas características aquí que son interesantes.
Nótese que a aresta da dereita de pirámide, en realidade, ten dous ancho.
Polo tanto, non hai dous iguais columnas de altura, os cales
convertelo en esixir un pouco pouco de pensamento para facer
seguro de obter exactamente o que a dereita, como oposición a só un perfectamente angulado
liña.
Entón, iso é un pouco de un caso de canto pero coincide co xogo real.
>> E tamén é non-obvio a primeira vista vista como imprimir o espazo en branco.
Entón, cando eu ollar para o mostra aqui-- saída
e é tamén o spec --- lo tipo de miradas como un rectángulo,
pero unha diagonal do rectángulo foi cortada,
e é só espazos en branco, por así dicir.
E así un pediu frecuentemente cuestión aquí é sempre, ben,
como fago para mover as hashtags a dereita?
Ou como podo imprimir os espazos en branco?
E é realmente máis fácil que a maioría dos estudantes pensan.
Non?
Pode achegar-lo visual por só bater a barra de espazo unha ou dúas veces
ou tres veces.
>> E por iso mesmo que case con printf sempre imprimir unha cadea ou un int
ou unha palabra como "Ola, mundo "ou serie de palabras,
tamén se pode imprimir só Cita, espazo, pecha comiñas.
E iso vai realmente dar- un espazo baleiro alí.
Polo tanto, manter isto presente e non overthink este.
Vostede realmente ten que decidir liña por liña por liña,
non ao contrario do seu exemplo, un hai pouco, cantos deses
columnas deben espazos en branco e cantos deles deben ser hashtags.
Vai levar un pouco de tempo, pero é en definitiva, un puzzle lóxica das sortes.
>> MARIA: Si.
Pero a lóxica de ir liña por liña vai ser moi útil aquí.
DAVID Malan: Yeah.
Eu creo que o código de exemplo que mesmo gave-- aínda que non fose un programa completo.
Aínda que int e principal e stdio.h baleiro e #include,
unha morea de cousas a partir de charla.
Pero os bloques de construción parecen estar alí.
E entón, finalmente é algo un pouco máis algorítmica.
Así, verifícase que en calquera momento entrar CVS ou calquera tenda de barrio
e alguén lle entrega o contas de caixa ou moedas como cambio,
verifícase que eles, os seres humanos, ou non sabe ou non,
son, probablemente, a usar o que é chamado un algoritmo lambón,
polo que se está en débeda, din, $ 21 en cambio, porque, por algún motivo
compras algo moi barato con un gran proxecto de lei no CVS,
que sería moi aburrido o cashier deulle 21 cuartos individuais ou, peor
aínda así, unha morea de moedas.
Pola contra, o que unha persoa razoable é probablemente vai facer é que eles van
para incorporarse un US $ 20 e, a continuación, un proxecto de lei de US $ 1, e entregar-lle só dúas contas nese caso.
MARIA: Entón eles están a buscar minimizar o cambio que dan de volta para ti.
DAVID Malan: Exactamente.
E mesmo negocio con moedas, tamén.
Se vostede está en débeda, digamos, US $ 0,50, espero que non quere 50 moedas de un centavo.
Non quere dous trimestres, por exemplo.
Agora, iso fai supoñer que o cadro ten
suficiente de todas as denominacións que el ou ela pode querer darlle.
Pero nós lle permiten asumir tanto no problema.
E o obxectivo, en definitiva, é a aplicar en código C un algoritmo lambón.
Así, o usuario ten permiso para escribir o que
cambiar el ou ela está en débeda con dólares e centavos, unha especie de punto flotante
valor probablemente.
E entón tes que facer as contas e descubrir mediante algoritmos, así,
cantas moedas podo dar vostede minimamente para lle dar
exactamente esa cantidade de cambio.
Pero non vai ser un algunhas partes difíciles aquí, non?
Como hai custe cuestión imprecisión.
MARIA: Exactamente.
Así coma flotante valores teñen imprecisión.
Será que imos falar sobre iso na aula hoxe?
>> DAVID Malan: Nós fixemos a última vez en charla.
Nós falamos sobre imprecisión.
E non quere enganar o usuario de canta cambio que el ou ela é debido.
E así o paso a paso, en especificación conxunto de problemas,
dar un pensamento, en definitiva, como a como pode paliar os imprecisión
erros, potencialmente.
É evitable, certamente, para as entradas que estamos falando.
E, de feito, pennies-- quizais nós imos adiar para Zamyla,
Coido que, para os trucos alí.
Entón, finalmente, vai atopar un progresión de problemas esta semana,
o primeiro dos cales é moi pequena, a continuación, medio, a continuación, un pouco maior.
Pero todos eles utilizan o edificio quarteirões a semana pasada,
dende supersection, conxunto de problemas especificación
pon en numerosos recursos.
Pero, aínda así, en todo loitando, especialmente entre aqueles menos cómodo
sen fondo anterior, vir para o horario de oficina
o luns e martes e Mércores e xoves.
Ir CS50 vía Discutir o sitio web do curso,
a través do cal podes falar con funcionarios e colegas.
>> Pero, ao final, eu creo que o mellor consello é simplemente comezar cedo.
Non é o tipo de clase que Serie de exercicios que estar comezando o mércores
noite, ou peor noite xoves.
>> MARIA: O meu mellor consello é comezar o luns.
DAVID Malan: luns.
Entón, se aínda non comezou já-- non.
Pero aínda que non luns, a continuación, martes.
Canto máis cedo, mellor.
E esa é a razón pola que o curso ten tantos días de atraso é
para darlle un pouco de presión psicolóxica
comezar máis cedo, pero aínda deixar cousas escorregar cando as cousas tardan máis
do que lle espera.
>> MARIA: E quere facer uso o horario de oficina, tanto como pode, tamén.
>> DAVID Malan: Algunha pregunta?
Todo ben.
Ben, por que non podemos aprazar aquí?