[Powered by Google Translate] ZAMYLA Chan: Todos todos, seguro.
Benvido ao Paso a paso 1.
Este paso a paso estará en pset 1, que é C. Eu espero que
todos nos divertimos cos seus proxectos de scratch.
Entón agora neste paso a paso, estamos, en realidade, vai ser
capaz de poñerse en C, poñerse en escribir un código de máquina.
Entón, se non estaba en Paso a paso 0, entón estes
orientacións realmente - nós estamos indo a pé a través da
conxunto de problemas, falar a través de algúns consellos e técnicas comúns
que pode usar.
Imos romper a asignación ata mordidas gerenciáveis, de xeito que
podedes comezar e espero
entender como facelo.
>> Okay.
Así pset 1.
A serie de exercicios deste ano terá unha estrutura onde o primeiro -
alí vai ser unha sección de preguntas, unha serie de
cuestións que realmente vai axudar a comezar con
o pset, axudar a practicar algunhas técnicas que precisa.
E así, esas preguntas, eu non vou cubrir o
paso a paso, porque na súa sección, o ensino da súa asignado
compañeiro é realmente vai percorrer os
cuestións con vostede.
Ao final da súa sección, vai estar co
respostas a estas preguntas, pero tamén coa confianza que
pode aplicar algunhas das características que precisa
para as últimas partes do pset.
>> Pset 1 constitúe Mario.
E iso é un programa pouco de diversión, onde esencialmente nós
escribir e imprimir unha pirámide media na escena Mario típico.
E, a continuación, a segunda parte do pset chámase Greedy.
E así, en Greedy que actúan como un ganancioso
caixa, onde se alguén nos dá unha cantidade de diñeiro
que queremos, nós calculamos a cantidade mínima de moedas que
podemos volver a eles para aínda darlles ese importe.
>> Todo ben.
Así, cada paso a paso vai ter unha caixa de ferramentas.
E, de novo, non pode usar todas as ferramentas neste
caixa de ferramentas ou pode empregar todos eles.
En calquera caso, é moi bo saber que
está equipado con.
Polo tanto, temos a Appliance CS50, que eu vou amosar a vostedes e
presenta-lo a iso.
A continuación, tamén en xeral, bo estilo é sempre un dos nosos
ferramentas máis importantes.
Estilo esencialmente se refire a como lexible é o código?
Cando alguén vai e le o seu código, que teñen
un tempo doado?
Poden entendelo lo?
É elegante?
Entón imos falar sobre como obter datos introducidos polo usuario válido no seu
programa, pois en ambos Mario e Greedy, cómpre
preguntar ao usuario a entrada e darlle algún tipo de número.
Entón queremos estar seguro de que o número é válido.
Entón lembre-se en scratch, tivemos bloques como repetición,
Repita ata que, ou esperar, ou para sempre.
Entón, nós estamos indo para o tipo de traducir iso en C agora e
ollar lazos como for, while, e do-while.
Entón tamén nós tamén imos ter amosar valores de volta na
pantalla, e en Mario ou Greedy.
E así imos falar sobre como imprimir cousas de cordas para
enteiros e coches alegóricos.
E entón, finalmente, imos falar sobre pseudocódigo, realmente
concepto importante para lembrar durante este curso.
O que eu creo que máis me axuda con conxuntos de problemas é pensar e
describir o que quero facer antes de pensar en calquera C.
Pero só describir a acción.
Entón pseudocódigo é unha especie de entre Inglés e C, tipo de
describindo os procesos sen a sintaxe correcta pero
introducindo unha estrutura boa o suficiente.
E entón eu vou ter algúns exemplos de pseudocódigo para ti tamén
neste paso a paso.
>> Okay.
Entón, o que nós imos estar traballando con é o aparello CS50.
É esencialmente unha máquina virtual que executa un tipo de
ordenador dentro do seu propio ordenador.
E iso ten unha morea de beneficios.
Unha delas é que é pre-configurado con unha morea de ferramentas que
precisa para CS50.
Como así, o que significa que todos están no mesmo terreo,
se Mac ou PC ou outro sistema operativo.
Todos podemos executar a máquina virtual.
E así hai instrucións no manual.cs50.net/appliance.
E por iso, se vai para ese enlace e seguir as instrucións,
entón vai ser capaz de instalar o dispositivo.
>> Entón, primeiro, vai ter instalar unha aplicación, un
aplicación real para poder executar a máquina virtual.
E entón baixar o aparello.
Pero, de novo, hai instrucións no
manual.cs50.net/appliance.
Entón, eu xa baixou o meu aparello, e eu instala
en VMware Fusion.
E así, unha vez eu baixei o aparello, fun ao arquivo.
Fun abrir e logo descubrir onde eu
almacenado o Appliance CS50.
E de alí, eu corrín aquí.
Pero eu teño-o xa aquí, por iso imos dar un ollo máis de preto.
>> Todo ben.
Polo tanto, agora estamos dentro CS50 Appliance.
Eu fixen iso en pantalla completa.
Pode optar por facelo se quere ou só telo como un
ventá menor no seu escritorio.
Aquí temos só un escritorio sinxelo, con
unha casa e un lixo.
Pero se vai para o menú e, a continuación, a programación, entón ve
que temos algo chamado Terminal.
E así, aquí, podemos navegar en torno do noso ordenador.
Podemos escribir código.
Pero, en realidade, nós imos usar un programa chamado gedit, ou "g
editar, "calquera que sexa.
Entón, nós imos estar usando aquel de escribir código.
Entón tes esas dúas ferramentas que vai empregar, sobre todo
de escribir código.
Entón, ademais, é como un ordenador normal.
Temos un navegador.
Nós escoller o Google Chrome.
O que eu fixen é que eu crear un Dropbox para conter todos
os documentos.
E entón iso é algo que é moi animou.
Dropbox usa nube sincronización e por iso, se -
así, por exemplo, algo que por casualidade - non imos esperar -
acontece co seu dispositivo, entón todo está
sincronizados na nube.
>> Todo ben.
Polo tanto, estas son as aplicacións que vai empregar na
CS50 Appliance.
Agora, para navegar ao redor da liña de comandos.
O terminal realmente pode actuar como unha especie de camiño para realmente
escribir comandos -
gusta, se vostede é un Mac, un Finder.
Ou, se está en Windows, eu creo que é "explorar o meu
ordenador "ou algo así.
Entón, se nós volver para o aparello, imos abrir un
ventá de terminal.
Por iso, ten ese aviso, jharvard aparello @.
Nós só facer esa maior.
Okay.
Entón, se escribir o comando ls, entón, que lista todos os
arquivos no noso ordenador, no noso directorio actual.
Os directorios son como carpetas.
Usamos estes termos como sinónimos.
Todo ben, entón listados os arquivos
que están neste directorio.
Agora, se queremos acceder, por exemplo, o noso Dropbox, entón podemos
cambiar directorios.
Entón, CD e Dropbox.
Nós ls novo, e ver a lista de ficheiros que están en
este cartafol.
Isto é análogo ao ir á miña casa, a continuación, premendo
Dropbox, e despois de ver a lista aquí.
>> Todo ben.
Entón, imos dicir -
cando vostedes van facer o seu pset 1, imos facer unha
directorio chamado pset1.
Entón, nós estamos no Dropbox agora, como se pode ver a partir deste
solicitar aquí.
Entón imos facer un directorio.
Entón, mkdir, imos chamalo pset1.
E agora, se nós, ls novo, entón nós
ver que pset1 aparece.
E así, se queremos ir a dentro pset1, entón podemos ir dentro
esa carpeta co comando cd.
Todo ben.
Entón, de novo, imos ver se nós -
dicir, imos facelo doutro xeito.
Isto é análogo a só dicindo "Crear
un novo cartafol, pset1.
Pero como atopar, vai interactuar con
o terminal moito.
Entón, ás veces, é moito máis fácil, unha perda máis rápida de só
traballar no terminal para facer eses tipos de cousas.
Okay.
E entón estes outros comandos.
Hai un rm para eliminar o ficheiro.
Entón, simplemente escribe rm e despois o nome do
ficheiro para excluílo.
Nós imos entrar en algúns exemplos de que, máis tarde.
E entón temos algo chamado o mando home, que
trae un manual para un tipo de función.
Unha vez máis, eu vou traer un exemplo real de que, máis tarde.
>> Polo tanto, outra ferramenta moi importante, como xa refire brevemente
antes, é o estilo.
Entón, basicamente, o estilo ten que ver coa lexibilidade.
Será que alguén sexa capaz de ler, seguimento e
comprender o seu código?
Isto é especialmente importante para vostede, vostede mesmo, en realidade.
Se queda se codificación final, e despois en ti
volver e pensa, o que significa variable?
Diga, se está a traballar nun proxecto en grupo con alguén, e
ambos teñen que mirar para o outro código.
É moi importante que nomear as súas variables correctamente
e facela agradable, porque iso fai toda a diferenza.
Pero, entón, por riba de todo, estamos nun camiño correcto agora.
Polo tanto, para o interese do CS50 e especialmente para o seu
compañeiros de ensino e niveladoras que vai estar a ollar para o seu
Serie de exercicios, por favor, use o estilo correcto.
E os seus compañeiros de ensino vai ser moi feliz.
Entón, de novo, o estilo inclúe o retroceso cousas correctamente,
especialmente por medio do seu dispositivo e retirada aqueles.
Nomear variables algo que ten sentido.
Agora seguir a convención cando ten
varias palabras no seu nome variable, entón
conecta-los con un subliñado, como ve na medida en que
Exemplo Nome alí.
>> Entón, finalmente, algo chamado de números máxicos.
Basicamente, cando estás lendo a través de código e dicir
ten unha variable -
dicir, non tes unha variable, pero só dicir que todo ben, ata que tales
e tal é inferior a 10.
A continuación, o seu alumno está a ir ben, espera,
onde foi que 10 vén?
Entón, realmente explicar-se importa moito.
Para axudar a explicar e comentarios.
Comentarios son probablemente a cousa máis importante incluír no
seus programas.
E axuda a explicar non só a verdade -
que axuda a explicar o tipo de razoamento como
vai xunto.
E así se fai iso, unha vez máis, que vai ser moito máis fácil
para volver no seu código e tipo de entender o que está a
facendo alí.
Unha vez máis, alumnos realmente me gusta de comentarios.
Entón comentar ben e -
tipo como de puntos libres.
E quen non lle gusta puntos libres?
Tamén pode ter varias liñas de comentarios.
E así eu incluído un tipo de modelo aquí.
Esencialmente, estes son xeralmente utilizados na parte superior da súa
programa para tipo de explicar, en xeral, o que
seu conxunto de problemas fai.
Inclúe o seu nome, a data, etcétera.
E así, como eu dixen nese comentario multi-liña,
manual.cs50.net/style_guide ten máis consellos e regras sobre
estilo para loops, etcétera.
>> Okay.
Polo tanto, agora que eu xa lle dixen un pouco sobre o estilo, imos ver
esta acción en.
Todo ben.
Entón, aquí, Tommy escribiu-nos unha deliciosa horrible
exemplo de estilo nun programa.
Entón mira aquí, todo ben.
Este é, en realidade, todo ben.
Vostede ve o comentario multi-liña aquí.
Vostede comeza cunha barra e, a continuación, dous asteriscos.
Vostede segue xunto, aliñado os asteriscos ao longo da liña
e despois rematar cun asterisco e barra.
Todo ben.
Entón, iso é bo.
Este aquí é bo.
El incluíndo as súas bibliotecas.
Pero, entón, aquí ten comentarios que abranguen varias liñas.
Hai moitas cousas erradas con iso.
Comentarios que abranguen varias liñas, aquí está a usar
a sintaxe para comentarios de liña só individuais.
Tamén está mesturando todo no mesmo comentario.
Entón, nós queremos evitar isto.
Entón aquí vemos que estes aparellos, por exemplo, son todos
sobre o lugar.
O retroceso é malo.
Realmente non mostrar sempre que algo
comeza e remata outra cousa.
Entón, así, vemos que ten unha variable definida i = 5 aquí.
Pero, entón, este catro xorde da nada, e non hai
comentar a verdade explicar de onde que vén.
>> Okay.
Entón agora imos ollar para algo que en realidade é só o mesmo
código, excepto con mellor estilo.
Entón, de novo, este é o exemplo bo estilo,
o exemplo de liñas múltiples.
E entón aquí é bastante limpo.
Vemos que inicia unha declaración aquí, entra nunha nova
liña, ten unha chave de apertura.
El ten un recorte.
El mantén este retroceso -
mantén este uniforme indicación en todo o territorio
programa e realmente mostra cando un bloque de código comeza cando
un bloque de código remata.
Isto pode parecer un pouco detallista da nosa parte para comezar
con, pero vai ver como está escribindo o seu código.
É moi útil para ser capaz de separar iso.
E, de novo, os seus alumnos realmente me gusta diso.
E así se ve, no canto de só poñer un número
Alí, en realidade o nome das iterações variables.
E por iso non estamos realmente mirando para este código agora
pero só unha especie de ver un exemplo de
estilo ben contra o mal.
E por iso, se ollar para os lado a lado aquí, faría
definitivamente prefiro ler a da dereita.
>> Todo ben.
Entón, unha última cousa antes de mergullo na carne real do
pset é como compilar e executar o código.
E así, esencialmente, cando escribe C, que en realidade non é
traducidas para o código de máquina real, e os ceros
aqueles que a máquina poida realmente ler e interpretar.
Entón temos algo -
Clang é un compilador que usan para C.
Existen moitos compiladores.
Pero en CS50, imos usar Clang.
E así Clang basicamente se traduce de C para máquina
código para ti.
Entón, imos ollar un exemplo - mergullo no aparello aquí.
Todo ben.
Entón, agora estamos no noso directorio persoal.
Nós, en realidade, non están onde un código.
Entón imos cambiar o noso directorio para Dropbox/walkthrough1, onde
Eu teño gardado un código.
Entón, se nós presionar ls, entón vemos que eu teño un
par de arquivos aquí.
>> Todo ben.
Entón, eu xa escribín hello.c, entón imos compilar
e despois ver o que fai.
Así, un comando de compilación básica sería bumbum entón hello.c,
esencialmente dicindo ben, compilar hello.c para min.
Eu prema en Inserir, parece ir cara á dereita.
Imos facer clic ls novo.
Este arquivo a.out mostrou agora.
E así a.out é un ficheiro executábel.
Entón, para executa-lo, fai un. / A.out.
E así vemos que este programa hello.c aparentemente
imprime hello cinco veces.
Todo ben.
Pero dicir que non quere usar o a.out nome.
Por exemplo, queremos executar o programa Ola, porque iso
fai máis doado de entender.
Entón, digamos que hello.c bumbum e entón tes que esencialmente
para pasar algunhas cousas chamadas bandeiras.
Así dicindo ok, así quero nomear esta outra cousa.
Tamén pode pasar un monte de varias bandeiras,
que vai ver.
Así, a bandeira para nomear algo programa que
quere é o.
Tras-o, escribe o nome do programa.
Imos chamar-lle só Olá
>> Entón, agora, vemos que, en realidade, ten un arquivo executábel Olá
Así, podemos executa-lo, e el fai o mesmo que antes.
Polo tanto, agora que temos Ola, tamén se pode eliminar, polo
exemplo, o noso a.out.
Entón rm para eliminar, a.out, o terminal pode solicitar que, pregunta
para vostede para confirmar se realmente quere
apaga-lo ou non.
Dicimos y para si.
E alí imos nós.
A.out está desaparecido.
Todo ben.
Pero ás veces queda confuso se lembrar de todo o
bandeiras que necesitamos para incluír e escribir bumbum.
E como vemos cando estamos usando programas máis complexos, imos
estar incluídos bibliotecas diferentes.
E así os nosos comandos para Clang vai ter máis e máis.
Entón incluído no Appliance CS50 é o comando make.
Entón, simplemente escribe facer Olá
Oops.
Nós xa fixemos este ficheiro executable.
Entón deixe-me só eliminar-lo rapidamente.
Agora imos escribir make Olá
E mira aquí nesta liña que, esencialmente, dicindo facer
Ola implica todos eses comandos
entrar nel para ti.
>> Entón incluído no Appliance CS50 é o arquivo make.
Entón, simplemente cando ten un nome.c ficheiro, entón todo o que fai
é dicir facer nome do ficheiro.
E entón vai ter un executable
ficheiro con ese nome.
Si?
>> COLUMNA 1: Para o meu ordenador, en vez de Clang di GCC.
É que, como -
ZAMYLA Chan: Yeah.
Así, o ordenador pode dicir GCC ao contrario Clang porque
O GCC é outro tipo de compilador.
Se estás no Appliance CS50 aínda, entón
usar Clang.
Se non, entón quizais veña falar comigo despois ou engadir
en CS50 Discutir e podemos clasificar.
>> Todo ben.
Polo tanto, agora que temos o noso tipo de ferramentas básicas para abaixo, entón nós
Pode mergullo Mario.
Okay.
Entón Mario é un programa onde esencialmente imos ser
facer a nosa propia especie de versión primitiva do Mario
fondo do xogo.
Vostede sabe, Mario xeralmente ten un cachimbo e un
árbore e algúns bloques.
E despois hai unha especie de pirámide metade.
Entón, nós estamos indo só para concentrarse no que a pirámide metade,
facer o código de tal forma que imprime hashes para o tipo
de bloques neste formato.
Entón, o que vai ocorrer é que o usuario pode introducir un certo
altura da pirámide, e entón vai imprimir iso
de xeito que a parte inferior esquerda hash -
tan no fondo moi ben aquí - que unha pode aliñar
co ángulo inferior esquerdo do seu terminal.
Okay.
>> Entón, a primeira cousa que cómpre -
o pequeno problema primeiro mini que temos que afrontar é como
para a entrada do usuario.
Polo tanto, temos que estar lidando con o que o usuario inserir e despois
tipo de cousas saída de alí.
Entón, imos ollar para buscar un arquivo chamado apples.c que escribín
que se encarga de entradas e saídas.
Okay.
Entón, aquí enriba, eu inclúe algunhas das bibliotecas
que eu teño.
O importante aquí é stdio (estándar I / O). Que trata
con entradas e saídas normais, porque nós imos
estar lidando con entradas do usuario.
Todo ben.
Entón eu comece a miña función principal.
E entón eu preguntarlle ao usuario correcto, cantas mazás ten?
Entón, aquí, o que esta liña fai -
I atribúa a variable i como o valor GetInt.
>> Así GetInt é unha función que está incluída no stdio.
E así, esencialmente, que vai tratar con isto para ti.
El ha pedir ao usuario para un int.
O que quere que eles retornan, que será asignado ao
variable i.
E entón é só un pequeno programa que diminúe a
valor de i en 1 e, a continuación, imprime o novo valor.
O agradable sobre gedit é certo que hai un mini
dereito terminal aquí.
Entón, en vez de ter que cambiar para adiante e cara atrás entre
gedit e da terminal, realmente pode
basta executa-lo dende aquí.
Entón, primeiro imos entrar no directorio correcto.
Entón, imos cambiar os nosos directorios para
Dropbox/walkthrough1.
Todo ben.
Entón agora imos facer mazás, compila-lo para nós.
E agora imos realizar mazás.
Cantas mazás que temos?
Eu digo que teño 3.
E el di que "mwahaha eu vou comer un deles" e di
"Agora tes dúas mazás".
>> Todo ben.
Entón, imos correr de novo.
E imos dicir que eu teño unha mazá.
Agora eu teño 0 mazás.
Okay.
Polo tanto, este programa parece funcionar como esperaba.
Nós introducir un número, diminúe-lo por 1, e, a continuación,
imprime o novo.
Pero e se, por exemplo, eu teño -1 mazás?
Iso non facer moito sentido.
Pero aínda é un número enteiro, para que o programa acepta.
E así el retorna un número aínda máis negativo.
Entón, iso é unha lección para nós que, aínda que o GetInt
función e os outros asociados, tales como
GetFloat ou GetString -
aínda que os vai o tipo de datos á dereita para
exemplo, se eu tivese acaba de dicir [tipagem]
el me dixo para tentar de novo.
Entón, iso vai tratar con calquera tipo de datos a súa entrada
é, pero non vai realmente comprobar, así, é realmente un tipo de
valor que quero?
Entón, a continuación, unha parte da Mario é que o usuario ten que introducir un
número que representa a altura da pirámide de media
que está facendo.
E entón, se estamos tendo este usuario a altura, entón
debe haber dous límites para iso.
Non?
Na especificación, el di que non debe ser superior a 23
personaxes, porque ese é o tipo de defecto
altura do terminal.
Pero entón, cal outro límite, quizais o límite inferior, poder
queremos incluír?
>> Na realidade estamos deseñando unha pirámide, tipo de pensamento de volta
para o alto dunha pirámide pode ser, pode nunca ser inferior a un
determinado número?
Speaker 2: maior que tres.
ZAMYLA Chan: Hmm?
Speaker 2: maior que tres.
ZAMYLA Chan: Ese é un punto bo.
Pode ser -
podemos querer restringi-lo a só unha pirámide nivel tres.
Pero imos pensar -
imos dicir como unha conta de un táboa de hash como unha pirámide tamén.
Entón, o que debe ser a nosa real límite inferior ser?
Pensando en mazás, non queremos un
pirámide altura negativa.
Non?
Okay.
Entón, cando pedir a entrada do usuario, entón vai ter que
incluír algunha forma de facer que o número enteiro que
eles lle proporcionar non é negativa, porque non pode
debuxar unha pirámide negativo.
>> Okay.
Polo tanto, hai algunhas formas de facelo.
Esencialmente, unha vez que pedir a entrada do usuario, que pretende esixir
que lle proporcionar a entrada correcta.
Entón quere esixir que lle proporcionar un número
que non é negativo, pero tamén menos que 24.
Entón, nós estamos lidando con cero a 23, inclusive.
Todo ben.
Entón, nós queremos esixir continuamente -
se eles non nos deron un número enteiro válido, queren
continuamente esixir ningunha.
Déame unha entrada válida.
Deixa-me unha altura válida.
Entón, lembro de volta en scratch, tivemos a repetir ata bloque ou
para sempre bloque.
Aqueles son lazos que son moi semellantes á liña de tempo e
O loop Do While, o que nós imos entrar en só un segundo.
Así, o loop while ten esencialmente unha condición que verifique
iso é un valor booleano que poñer alí dentro, como o
bloques en cero cos ángulos.
Isto é o que pasa dentro dos corchetes do loop while.
Entón vai ter que ter algún tipo de condición alí.
E, como xa discutir anteriormente, esta condición será
teñen que ver cos límites do número enteiro que foi introducido.
Así a condición tería algo que ver co feito
o número enteiro está dentro dos límites adecuados.
>> Entón iso é un loop while.
Por exemplo, pode pedir para o completo e despois
comprobar continuamente mentres esta entrada non é válida.
Por exemplo, manter a re-alerta, continuar a preguntar
o usuario a un número enteiro.
De xeito que podería ser un camiño.
Outra forma podería ser un do while, que é moi
semellante a un loop while, excepto o que facer, mentres que un fai é -
pode tipo de ver a sintaxe -
é que ten que facer e, a continuación, o corpo do ciclo real primeiro.
A continuación, el ten as condicións momento.
Entón o que fai un loop mentres -
o que é útil para que eles realmente realizar o
código polo menos unha vez e despois comprobar que a situación é
ou non cubertas.
Entón, se fose facer un loop Do While, a continuación, dentro da súa
declaración que pode pedir a un enteiro, porque vai no
polo menos ten que preguntar ao usuario unha vez.
E entón, despois de levalos, entón podes dicir que está ben,
ben, unha vez eu fixen iso, é válido?
Se for, entón podes só seguir adiante.
Pero se non é, entón só vai actuar como un estándar, mentres
loop e continuar a preguntar.
>> Okay.
Entón, nós estamos de volta para Mario.
Entón, nós sabemos como pedir a entrada do usuario que é correcto
dentro dos límites dereita.
Entón, agora nós realmente necesitamos para deseñar esta pirámide metade.
Parece que os caracteres de texto simple.
Entón, imos realmente aberto -
imos abrir unha xanela e dicir todo ben, así que se eu fose
realmente vai facelo manualmente, escriba un para min?
Okay.
Entón, imos ver.
Imos dicir, por exemplo, queremos facer unha pirámide que é
aliñadas ao longo do lado esquerdo, a continuación, vai só facer -
en Mario, o nivel superior ten dous bloques, en vez de un.
Entón, imos comezar con dous.
Nós prema en Inserir.
Nós facemos tres, e despois catro, Intro, cinco.
Okay.
Entón, iso é moi sinxelo.
Excepto neste conxunto de problemas, queremos que, en realidade, para aliñar con
do lado dereito da nosa pantalla.
Todo ben.
Entón, como pode un de vós realmente escribir esa tal que
está aliñado ao longo da dereita?
En vez de poñer o hash primeiro, como pode tipo de
movelo xunto?
Speaker 3: Escriba unha liña?
ZAMYLA Chan: Hmm?
Speaker 3: Escriba unha liña?
ZAMYLA Chan: Yeah.
Si
Vostede podería escribir como un subliñado ou algo parecido
que, pero podemos só dicir usar un espazo.
Imos poñer en tres espazos como aquí.
A continuación, a seguinte liña, así, teriamos que poñer dous espazos.
A seguinte liña, nós só poñemos un espazo.
E entón, para a nosa última liña, que non ía poñer espazos.
E aí temos a nosa pirámide.
>> Entón, este é o tipo de -
Lembre que tipo de lóxica.
E tentar descubrir algún tipo de estándar que podemos
entón traducir para C e participa en algún tipo de lazo.
Todo ben.
Entón, dicir que temos unha altura de oito, entón a nosa primeira liña terá
dous hashes.
Pero, para os hashes, que tería que escribir algunha
espazos de antemán.
Non?
O que eu fixen é que eu só pasei.
Eu tirou-me, unha pirámide no meu editor de texto, unha
pirámide cunha altura de oito e, a continuación, calcular cantos
espazos que eu precisaba facer.
Entón, eu dixen que todo ben, ben, a primeira liña é
vai ter dous hashes.
Pero antes diso, eu teño de entrada sete espazos.
O próximo ten seis espazos e, a continuación,
tres hashes, etcétera.
>> Entón imos tentar traer isto para outra capa de
abstracción.
E se tivésemos a liña n, cantos e como hashes
moitos espazos que necesitamos?
Alguén ve o defecto?
Así, a primeira liña ten dous hashes.
A segunda ten tres.
O terceiro ten catro.
Entón, a liña n-ésimo tería -
Speaker 4: n + 1?
ZAMYLA Chan: Yeah.
N + 1.
Exactamente.
Entón, vemos que o número de hashes vai ser -
se estamos contando a primeira liña a ser un, entón o número
de hashes é só vai ser unha máis que iso.
Okay.
Entón o que ocorre co número de espazos?
Entón, imos tratar de expresar isto en termos de altura.
A altura é de oito, a continuación, o primeiro
liña ten sete espazos.
Así, este tipo de corresponde a 8 menos 1.
Non?
Entón a segunda liña vai ter seis espazos,
Que é 8 menos 2.
Entón eu vou deixar para a especie de figura fóra
o estándar para aquel.
>> Okay.
Pero, na programación, ás veces nós realmente índice en cero.
Entón, imos comezar de cero en vez de un.
Así, en vez da primeira liña a ser chamado a primeira liña,
imos ser chamándoo de liña 0 º.
Entón, dependendo da forma que quere para implementar lo, sexa
moito coidado se comezar de cero, se comezar a
un, o seu patrón vai ser compensado por un.
Okay.
Polo tanto, agora que tipo de descuberto o programa,
teño que dicir ben.
Así, para cada tipo de nivel de escaleira, eu vou para imprimir
tal e como o número de espazos e, a continuación, tal e
tal número de hashes.
Iso depende do estándar que foi establecido antes.
Okay.
Polo tanto, unha forma de iterar e tipo de curso
través dun número definido de cousas é unha especie de loop, como
a repetición 10 bloque ou repetición como e entrou nunha
número de scratch.
Entón, basicamente, para cada nivel de escaleiras, imos querer
imprimir os espazos en primeiro lugar.
A continuación, imprime o número de hashes.
E entón imos querer introducir unha nova liña e despois repetir-lo
novo para o próximo bloque.
Okay.
>> Entón, imos ollar para loops por un segundo a especie de ver unha forma
que pode pasar por un determinado número, desprácese ata o número
de pasos desta pirámide metade.
Entón, para loops son compostos de tres partes.
Primeiro, ten unha inicialización.
De xeito que esencialmente define unha variable.
Vai ser axustado para que o valor de cada vez
que para partidas do circuíto.
Entón vai ter unha condición.
O seu lazo para só será executada mentres que
condición valorada como verdadeira.
E entón vai ter unha condición de actualización.
Entón, o que ten que ver coa variable que inicializar.
Así como algúns dos basicamente asegurando que podemos saír
do lazo, que non continuar a execución
para sempre e sempre.
Porque a diferenza de scratch, nós realmente non temos só un
lazo para sempre sinxelo.
C, o programa ten que rematar finalmente.
Entón, temos que garantir que dalgunha forma temos que parar.
>> Okay.
Entón, un exemplo de un loop que pode querer usar para
Mario é esta.
Entón tes un enteiro i que comezan en 0.
Mentres que é menor que a altura, o corpo é executado
do circuíto aquí dentro.
Despois de que o corpo do lazo foi executado, así que faría
i aumentar en 1.
A continuación, o programa ía comprobar de novo - Ben, ben, é menos do que eu
a altura?
Se for, entón ten que continuar.
Entón, aquí está un exemplo de cero a indexación, onde comezamos a
cero e entón nós -
notar que a condición é menor que a altura.
Entón, dicir que a nosa altura é de catro anos, por exemplo, i
terá comezo ás 0.
Vai ser 1.
Vai ser 2.
Vai ser 3.
E entón, xa que actualiza cando o lazo para actualizacións, vou
entón, ser definido como 4.
Pero 4 non sexa inferior a 4 e, a continuación, de xeito que sería
seguir para o resto do noso lazo.
>> Okay.
Así que está comezando de cero.
Pero tamén podería comezar a un, por exemplo.
Pero desde que comezamos nun, nós medio que temos que ir máis dunha
tempo ao final.
Entón é por iso que nós engadimos o menor ou igual a.
Polo tanto, unha das grandes cousas que máis me gusta sobre o ordenador
programación é que hai tanta
moitas formas de facer as cousas.
Así, pode escoller se comezar de cero, se
comezar un.
Ademais, se o desexa, pode utilizar só un
while loop, por exemplo.
Entón, vostede podería -
imos realmente hello.c aberta.
Polo tanto, temos un loop aquí.
El comeza en i = 0, i <5.
Eu teño aquí un comentario dicindo o que fai.
Ela imprime Ola cinco veces usando un loop for.
Pero nós tamén podemos facelo usando un loop while tamén.
>> Entón, imos ver como podemos facer iso.
Entón, se imos imitar un loop for, entón nós tamén queremos
imitar o arranque, a condición e actualización.
Así, a condición debe ser moi sinxelo, porque o
mentres sintaxe, cando mira para el, el di que mentres (condición).
Entón imos a condición de entrada alí.
i <5.
Okay.
Entón, sabemos que queremos imprimir adeus.
Sabemos que este é o corpo do noso loop.
Pero estamos perdendo o arranque
ea actualización, non?
Porque nós non podemos ter un lazo para sempre.
Ten que rematar.
Entón, imos engadir algún tipo de arranque aquí, usando o
mesmo que usan no noso circuíto para, int i = 0.
Okay.
Entón, imos comezar con un int i.
Nós repetimos este loop while mentres i é menor que 5.
Entón, vostede non ten unha cousa, que é a actualización.
Entón, o que sería actualización, cómpre usar se eran esencialmente
recriando o lazo se riba?
Temos o arranque i é igual a 0.
Temos a condición i é inferior a 5.
E entón, aquí está unha actualización, non?
Entón, nós queremos copiar.
Queremos dicir ben, i + +.
Esta é a mesma cousa que dicir i = i + 1.
Pero dende que é usado tantas veces abreviada, por que é só
dicindo i + +.
>> Grande.
Okay.
Aquí eu realmente non saír do meu programa de mazás.
Entón, eu estou indo só para premer Control-C e inmediatamente
botas-me para fóra do meu programa e trae
me de volta para o terminal.
De xeito que, por exemplo, se ten un erro onde
esqueceu de actualizar o seu ciclo como tal que sería
rematar, e entra en un loop infinito, entón podes
usar Control-C para saír desa.
Todo ben.
Entón, nós estamos no directorio correcto.
Entón, imos facer Olá
E entón, se corremos Ola, vemos que o circuíto fai adeus
exactamente a mesma cousa como o noso circuíto para fai.
Entón, iso é só unha suxestión.
Se está máis cómodo co loops ou
con lazos, mentres, poden ser intercambiables.
Entón, calquera que quere usar para percorrer -
neste caso -
a altura da pirámide Mario.
E así unha vez máis, este é só un recordatorio, se comezar de cero
para a súa variable, entón vai querer ter un diferente
condición que se comezou en un.
Polo tanto, este tipo de táboa só mostra un recordatorio.
Se queres repetir 10 veces, por exemplo, entón
Pode comezar a variable en cero.
E a súa condición pode ser inferior a 10.
E para que tipo de mostra a matriz do que iso.
>> Okay.
Entón nós pasamos por Mario.
Nós xa dixen, Ok, así, cómpre comprobar a entrada correcta,
de cero a 23, inclusive.
Nós imos atopar algún tipo de defecto, algún tipo de forma
de expresión da liña nth ou a liña de orde i.
E imos decidir, Ok, imos imprimir esta
moitos espazos, este hashes moitos, nova liña.
Todo ben.
Polo tanto, temos que.
Entón agora podemos pasar Greedy.
Greedy é un programa onde un usuario lle dá unha cantidade de
diñeiro que, esencialmente, vostede como o cadro que volver.
Pero quere usar moedas tan pouco canto posible.
E así, este é o lugar onde un algoritmo Greedy vén, onde
imos querer usar a cantidade mínima de moedas posible
facer esa cantidade de cambio.
>> Okay.
Entón, un exemplo diso na súa solución pode parecer
algo así.
Executa. / Ganancioso.
Lle será solicitada a dicir ben, ben o que o cambio é debido?
Ese valor será un valor en dólares.
Así que vai ser un float.
O seu programa ha calcular a cantidade mínima
de moedas necesarias para facer, neste caso, US $ 0,32.
E así, o número mínimo é de catro.
Entón, antes de descubrir o que facer, imos especie de sendeirismo
a través do proceso de que pode ir sobre.
Entón, se a entrada é 32, entón esencialmente eu vou usar
a menor cantidade de moedas, se eu usar como moitos
moedas de maior posible.
Non?
Entón é moito máis fácil de usar un cuarto como
oposición a cinco moedas.
Entón, imos dicir, ten que devolver US $ 0,32.
Ben, eu podo usar un cuarto no presente?
Si, pode.
E entón sería reducido a US $ 0,07.
Imos ver se podo usar outro trimestre de pagar de volta.
Ben, non.
Eu non podo poñer un cuarto en que.
Entón, eu estou indo a ir a moeda maior seguinte.
Podo usar un centavo?
$ 0,07, non, non pode usar un centavo para pagar R $ 0,07.
Entón dicir que non.
Mover-se para a próxima, que é un níquel.
Pódese usar un níquel?
Si
Sete é maior que US $ 0,05, para que poidamos utilizar un níquel.
E despois temos dous centavos que sobran.
Podemos usar un centavo?
Si, podemos.
Podemos usar un centavo?
Si
Podemos usar un centavo?
Non, porque agora temos con éxito
pagou a parte de atrás do usuario.
E para que totalizar catro moedas utilizadas.
>> Entón, a pensar sobre ese proceso, nós todos
momento, decidir ben,
Cal é a moeda que pode usar?
Unha vez que usamos, nós medio que manter unha nota mental de como
máis diñeiro que necesitamos para voltar ao usuario, así como o número de
moedas que teñen benvida a utilizar.
Okay.
Entón, pero, de novo, o primeiro paso - como Mario - é solicitar
o usuario por un importe monetario.
E así, ese importe será -
que vai ter un valor decimal porque nós imos
lles pedir dólares.
Entón, que tipo de datos non vai ser un número enteiro.
Pero vai ser un -
si, un flotador.
Pero, así como a mazá, coches alegóricos pode ser positivo ou negativo.
Entón cando comprobar valores, vai querer
para garantir que o flotador -
a entrada do usuario - é non-negativo.
Okay.
Nós poderiamos tratar con coches alegóricos no noso programa conxunto, representan
cuartos por 0,25, moedas de 0,1, etcétera.
Pero creo que é moito máis fácil de manexar en só centavos puros.
Tamén -
e nós imos falar sobre iso un pouco máis tarde -
C, puntos flotantes teñen algo chamado imprecisión.
Entón, cando entra en 0,12, por exemplo, o ordenador
De feito, tendas como como 0.1111119 ou
algo así.
>> Entón é moito máis doado de converterse ao centavos.
Entón, como imos converter un valor en dólares para os centavos?
Speaker 5: Equipos-por 100?
ZAMYLA Chan: Yeah.
Si
Entón teriamos veces por 100.
Pero unha cousa complicada sobre puntos flotantes é que hai
é certa imprecisión.
Entón imos ver un exemplo diso.
Entón, eu vou abrir imprecision.c.
Okay.
Este é un programa moi sinxelo.
El pide unha boia, e imprime o de volta.
Unha información legal no terminal é que pode simplemente escribir clara e
entón tes unha pantalla transparente.
E para que non precisa ollar para calquera saída anterior ou calquera
erros ou informes de erro, algo así.
Okay.
Entón, imos facer imprecisión.
Imos executalo.
Entón eu haven't -
no meu código, eu non imprimir calquera solicitude ou algo así.
Entón, el só ten un cursor intermitente.
Entón, é só me esperando para entrada dun coche alegórico.
Entón imos -
un flotador aleatoria.
E ve que imprime-lo de volta, pero ten algúns extras
números que definitivamente non incluír.
Entón, nós queremos estar seguro de que iso non fai
acontecer no noso programa.
>> Entón o que queremos facer é estar seguro de que realmente
tipo de redondeado para o valor apropiado.
Non?
E así, por sorte, temos unha función chamada rolda incluído
no aparello.
É na biblioteca de matemáticas.
Se queres saber como usar rolda, entón realmente usar
o guía.
Podes premer rolda home.
Entón aquí abre -
pode ser un pouco difícil de descifrar, mais acabou
vai pegar o xeito del.
É o tipo de mostra que a función fai e máis un pouco
usos posibles desa.
Entón, cando finalmente conseguir unha entrada, axeitado válido a partir da
usuario, entón quere convertela-lo para os centavos.
Asegúrese de que redondear o valor para que evite este
flotando imprecisión punto.
>> Okay.
Entón, nós temos solicitado ao usuario unha cantidade monetaria.
Agora, o que queremos facer é esencialmente comprobar, non?
Ok, entón eu podo usar a maior moeda posible?
Se pode, a continuación, usalo.
Manter o control de tantas moedas usou ata agora e
tamén a cantidade descenso.
Non?
E entón, vai comprobar.
Unha vez que especie de esgotados os trimestres, quere ir
para a próxima cousa é posible.
>> Entón, que tipo de estrutura ou tipo de lazo que poderiamos
desexa usar para comprobar continuamente aínda podemos utilizar
cuarto, por exemplo?
Speaker 6: Aínda que o valor maior que?
ZAMYLA Chan: Si, perfecto.
Exactamente.
Así, mentres que o valor é maior que.
Así, mentres que o valor que temos que dar a volta aínda é
maior que un cuarto, mentres aínda podemos usar un trimestre,
usar trimestres.
Manteña o control diso.
E entón seguir adiante.
Perfecto.
Okay.
Ah, aquí eu só incluíu só algúns consellos para imprimir
valores fóra.
Así, na súa función printf, temos sido xeralmente só
tratar con cordas.
Pero cando quere imprimir un int ou só calquera tipo de
díxitos, ten que tipo de escribir unha especie de soporte do lugar.
Entón, que é representado pola porcentaxe,% d para enteiros.
Vai escribir que, a continuación, despois que realmente -
despois dunha vírgula -
poñer o valor que realmente vai alí.
Dereito.
>> Okay.
Así, determinamos que queremos comprobar -
unha forma de facelo sería a de comprobar continuamente
aínda podemos usar trimestres, e despois usar os trimestres, manter
seguir, e despois pasar ao maior valor seguinte.
Agora, outro tipo de forma elegante que podería facelo é
usando o operador módulo.
Entón, xa temos de máis, menos, multiplicar, dividir e
dispoñible para nós.
Pero o operador módulo tipo de limpo.
O que fai é, en realidade, devolve o resto da
división de dous números.
Entón, se lembrar de división longa cando faría, por exemplo,
facer 74 dividido por 3, podería gravala-lo, transitar,
restar, e despois ao final o número no fondo é
o resto.
Ben, o módulo fai iso, en realidade, só lle dá iso.
Entón, 74 módulo 3 lle daría 2.
Do mesmo xeito, 10 MÓDULO 2 dálle 0, pois non hai ningunha
resto cando dividir 10 por 2.
6 módulo 5, así 5 6 vai para un tempo e despois
ten unha sobra.
Entón, se ten 7 módulo 9, 9 así é maior que 7.
Por iso, non pode ir outras veces.
Polo tanto, ten sentido que o valor de retorno é 7.
Entón, se pensar en módulo, como dá a vostede o resto
despois de dividir algo, pode tipo de ver como
Pode ser capaz de usalo en Greedy, non?
Entón, se combinar o tipo de módulo, se cadra, coa división
operador, algo así, entón vostede pode ter un fresco
tipo de forma mathy abordar o conxunto de problemas.
>> Polo tanto, agora que sabemos que hai un par de diferentes
formas que poderiamos facelo - Hai definitivamente unha morea de
diferentes formas de escribir ata os lazos tempo.
Entón, eu escribín un pseudocódigo aquí.
Pode non ser o mesmo que o do tipo de esqueleto da súa
código que escribe.
Pero, esencialmente, o proceso é o modo de pensar e
así como nós discutido.
Entón, primeiro, a primeira liña está dicindo para obter unha certa cantidade
en dólares.
E, a continuación, implícito que é convertelo en centavos.
A continuación, mentres cuadrantes pode ser usado, queremos
aumentar a conta.
E entón queremos diminuír a cantidade, o valor que
estamos volvendo para atrás.
Como podes ver aquí, non é moi C. Pero eu tamén
recuado cousas, eu coloque miñas condicións dentro
parénteses.
>> Entón que tipo de me pega comezou.
E máis tarde, eu só podo mirar para arriba a sintaxe.
Moitas veces a parte máis difícil realmente un problema é
comprender exactamente o que cómpre facer.
Entón, cando escribir isto, entón é moito máis fácil de continuación
traducir en pseudocódigo.
E despois de pseudocódigo, sintaxe vén moi doado.
Así, vemos mentres direccións, poden ser utilizados, aumentar a conta,
diminuír a cantidade.
Mentres moedas pode ser usado, entón dirixir-la así por diante e así
por diante, ata que teña esgotado todas as súas tostões.
Imprime o número de moedas usado, que será o
cantidade mínima para que o usuario introduciu valor.
E aí ten o seu algoritmo Greedy.
E entón, unha vez que termine, tamén rematou pset 0.
>> Alguén ten algunha dúbida sobre algo?
Todo ben.
Ben, eu vou ir por un pouco despois de ter
calquera dúbida.
Este foi detonado 1.
Grazas por vir.