[Powered by Google Translate] [♪ ♪ Buzzing]
Então, para apresentar-lhe o que eu tenho na tela;
é uma das ferramentas que desenvolvemos durante o verão;
ele é chamado CS50 Spaces,
e é nossa aplicação colaborativa de codificação
que nós estamos indo para usar em seções.
É muito legal.
Algum de vocês já viu CS50 corrida ainda?
Deixa-me tirar-se que em outra guia.
Run.cs50.net
Assim
se você vai para run.cs50.net,
você pode ver este é um navegador em seu caminho para
na verdade, o código - escrever código C,
e depois executá-lo,
por isso tanto o compila, executa-lo, em seguida, retorna a saída para você,
por isso este é um tipo de uma forma legal para experimentar
com parte do código que David vai mais em palestras
e nós damos a em você em conjuntos de problemas
sem realmente ter que demitir-se do aparelho.
>> Então, o que faz espaços que é diferente do que
se eu voltar a este guia,
Espaços é CS50 corrida, como você vê aqui,
mas, se se deslocar sobre e olhar para o outro lado da janela,
você vê a direita Eu sou a única pessoa neste espaço,
mas o que eu vou fazer é pedir vocês para aderir a este espaço comigo
e todos nós vamos chegar ao código na mesma janela pequena,
partes de código com o outro,
e falar sobre as diferenças entre o nosso código.
Então, é um tipo de coisa legal -
de modo a se juntar, se você visitar este link aqui no topo
que eu destaque,
você pode apenas digitar apps.cs50.net/spaces/vqcspSnO.
>> Tudo bem, então, para começar,
Eu vou dar-lhe um pouco de uma visita a este.
Nós vamos fazer alguma codificação idiotas com ele em primeiro lugar,
apenas para que todo mundo meio que fica uma sensação de que é como,
mas o que eu fiz -
ou o que eu vou fazer aqui é -
Eu vou pegar o código que eu tenho escrito aqui,
que, como você vê agora é vazio;
ele não faz nada.
É apenas o código placa de caldeira, vamos chamá-lo.
Com um pouco de coisas a fazer comentário.
Vou guardá-lo por bater este botão Salvar.
E o que isso faz é
destacou-lo aqui brevemente - que a revisão caixa salvar verde,
e agora, se você procurar por mim no espaço,
clicar em meu nome,
você pode ver que eu tenho esta revisão aqui,
e se você clicar sobre a revisão,
ele vai carregar esse código no seu espaço, também.
>> Então todo mundo tem carregado esse código em seu espaço?
Tudo bem, se você ainda não tiver, vá em frente e fazer isso,
e então o que eu quero que vocês fazem neste pouco a fazer parte
é escrever um pouco sobre si mesmo usando printf,
assim, por exemplo, eu iria escrever
printf ("Meu nome é Nate");
e então eu ia escrever
"Eu me formei em 2009
de Stanford "
e eu gostaria de ouvir sobre
em que ano você está na escola,
se você está na faculdade ou a escola de negócios
ou uma outra escola de Harvard,
o que você está estudando se é conhecido ainda;
se não for conhecido, que é totalmente legal.
Eu não decidir até que eu estava atrasado em meu segundo ano.
e então eu também gostaria de saber
nenhuma loucura que você quer me dizer ou
algo sobre a classe ou simplesmente qualquer outra coisa.
Quando você terminar de escrever que, com o seu printf pouco,
se você vai salvar a revisão ou melhor
primeiro certifique-se que você pode executá-lo
e que mostra exatamente o que você quer imprimir,
e então se você ir em frente e salve essa revisão
Revisão usando o botão Salvar, esse cara primeiro pouco mais aqui,
e nós meio que passar e fazer uma pequena introdução dessa maneira.
Portanto, você deve apenas tem que apertar o botão Play,
que está aqui em cima no canto superior esquerdo,
por isso este botão Play no canto superior esquerdo vontade
envie seu código fora para o nosso servidor onde ele é compilado e depois executado.
Então, o que é meio louco por isso é
esse código realmente não está sendo executado no seu computador;
ele está realmente a ser enviados através da Internet.
>> Como vai isso, Charlotte?
>> I - bem. Eu - Eu acho que eu sou
tendo dificuldades de salvá-lo
no servidor de tal forma que posso - eu posso executar o programa.
E então, quando eu tento rodar, ele diz que há um erro.
Declarado como um vírus, o que não está lá mais.
Oh, vamos ver, você pode bater em Salvar novamente?
Eu vejo isso na tela.
Direito >>, tudo bem, então é isso que eu tenho.
E eu não sei por que não me deixa executá-lo.
Ah, ok, desculpe.
Você pode explicar por que - o que estava errado - o que não foi trabalhar com ele?
>> Sim, porque eu não vi que havia uma última linha, onde ainda há uma variável
que eu não tinha declarado, que eu não tinha a intenção de se estar lá.
Sim, perfeito!
>> Agora, se eu salvá-lo, eu acho que ele deve funcionar.
Agora que você já salvou, ele funciona; impressionante.
>> Então, sim, como nós atravessamos -
Então, o que estava acontecendo,
Eu só vou repetir isso para a câmera.
O que estava acontecendo era que esta variável s
foi deixado em pós - Eu suponho que você eliminado algumas outras coisas
onde você declarou como,
e por isso esta foi jogar coisas fora e não estava permitindo que você execute-o.
Portanto, este é exatamente o que nós queremos fazer na seção
é que as pessoas tentam escrever peças diferentes do código,
compilá-lo, ver o que funciona, ver o que não faz,
e depois meio que falar sobre essas coisas, porque são pontos de disparo que
Eu ainda encontrar,
Eu ainda - Eu faço muitas coisas bobas o tempo todo,
e eu não sei por que ele não funciona,
então vamos puxar revisão Charlotte 3,
e vamos executá-lo.
>> Então, quando eu correr, agora que eu tenho o código dela aqui,
Posso aumentar o zoom, aperte o botão Run,
envios isso, constrói, executa,
diz que correu com sucesso, e se eu rolar para baixo,
ver Charlotte é um júnior em Adams House,
psicologia, secundário na economia; impressionante.
Ótimo para conhecê-lo!
Impressionante.
Ok, seguindo em frente, vamos para Daniel,
ir para revisão 3,
compilar, executar;
por que você não conte-nos um pouco sobre você, Daniel?
Chame-me Dan >>.
Eu estou indo para a escola de negócios através de vocês,
e eu estava na Marinha antes aqui,
e isto é tudo novo para mim, então sim.
Não se sinta mal, eu sou 30 e eu não sei nada dessas coisas.
Awesome; graças, Dan!
Tudo bem, temos outro Daniel.
Você vai por Daniel - você vai se apresentar, Daniel?
>> >> Claro, eu sou o Daniel.
Eu sou um estudante do segundo ano Mather agora.
Estou me concentrando sobre o governo,
mas eu queria levar CS50 porque já ouvi ótimas críticas sobre a classe
e eu nunca tentei CS antes.
Desça até aqui e mostrar isso - cool.
Seguindo em frente, Jared.
Como vai isso?
>> Bom, como você está?
Como você pode ver, eu sou um concentrador de filosofia júnior em Eliot,
originalmente do sul da Califórnia,
e eu estou interessado em tomar CS50 porque eu gosto da lógica de que,
e parece muito legal de fazer as coisas no computador, então.
Awesome; no sul da Califórnia, onde está você?
>> Cerca de uma hora de [inaudível], uma pequena cidade [inaudível].
Ah, sim, meu pai é de Redlands.
Coisas legais.
>> Tudo bem, Jimmy, como vai, Jimmy?
>> Bom, como você está?
Indo muito bem!
Conte-nos sobre si mesmo.
>> Eu sou um calouro, e eu não estou totalmente certo do que estou formando em
mas eu estou meio inclinado para a economia.
Como Daniel antes de mim, eu nunca tinha feito qualquer CS, mas soa muito legal.
Sou originalmente de Chicago.
Impressionante. Então confira a sua impressão aqui.
Eu queria perguntar, fez isso de impressão como você esperava?
>> Não, eu esqueci de imprimir uma nova linha.
Na verdade, eu esqueci que, quando eu estava escrevendo a minha coisa
, pela primeira vez, também.
É um tipo de dor que lembrar de colocar os manualmente.
Seria bom se ele só sei que é o que você queria.
>> Ok, Kelly.
Uau, temos 2 Kellys; 2 Daniels, 2 Kellys.
Então Kelly - você vai por Kelly Ren?
Ok, impressionante.
Ou Kelly, quero dizer.
>> Então, sim, por isso estou Kelly.
Eu sou um estudante de segundo ano em Pfoho.
Recebi um e-mail hoje, que eu ainda tenho sete semanas para declarar a minha concentração,
então eu estou tentando não pensar sobre isso,
e eu gosto de fermento, corrida e craisins.
Eu não tenho experiência com mais de CS;
Aprendi a construir sites quando eu era muito jovem,
mas eu acho que eu provavelmente me ensinou errado um monte de vezes.
Espero aprender um pouco mais
e - sim.
>> Awesome; bem, obrigado.
Vamos para o outro Kelly;
Eu não tenho nada - disse alguma coisa aqui?
>> [Inaudível]
Aí está!
Sweet!
>> Tudo bem, então eu sou Kelly.
Eu sou um estudante de graduação do primeiro ano.
Estou formando em Mente, Cérebro Educação, e.
Eu me formei em Franklin & Marshall College em 2008
com especialização em psicologia e sociologia
e um menor em francês.
Estou levando CS50
porque eu estou interessado em obter um doutorado em neurociência
e eu sinto que isso irá me ajudar a entender as tecnologias que estão sendo usadas.
Impressionante.
Seguindo em frente, Mikaela.
É que a pronúncia correta?
Ok, impressionante.
>> >> Sou Mikhaila.
Eu sou um estudante de segundo ano em Kirkland House,
e estou me concentrando em Engenharia Mecânica.
Eu realmente gosto de ciclismo, construiu uma bicicleta neste verão.
Estou levando CS, na verdade,
como um requisito de concentração,
mas você sabe, eu acho que ainda é tipo legal de classe de engenharia.
Awesome - você construiu uma bicicleta neste verão?
Sim >>.
Uau, como a moldura e tudo isso?
>> Uh-hunh (afirmativa).
Uau, isso é muito legal.
>> [Bate-papo fora da câmera inaudível]
[Risos]
Sim, tem sido assim por muito tempo.
Você nunca sabe, né?
Bem, legal; bem graças, Mikhaila.
>> Tudo bem, Missy.
Missy >> meu nome, eu sou um calouro,
o que significa que eu não sei de nada!
Eu quero me concentrar em astrofísica.
Em CS50,
Eu sinto que vai certamente ajudar com isso.
Um fato estranho sobre mim é que eu sou um bombeiro nacional certificada.
Wow!
Como isso aconteceu?
>> Eu participei de uma academia
e passou por um inferno para um monte de semana
e tenho a minha certificação.
Uau, parabéns!
Isso não é pouca coisa, com certeza.
Ok, então agora vamos fazer de mim.
Eu sou o próximo na linha.
Eu - executá-lo.
>> Então, meu nome é Nate.
Eu era classe de 2009 em Stanford.
Eu era um Sistemas Simbólicos principais,
que é semelhante ao do, a concentração de Cérebro Mente Comportamento, aqui,
mas é uma espécie de mistura de
ciência da computação, lingüística, psicologia e filosofia.
Tipo de - sim, um monte de coisas estranhas, mas foi ótimo,
e então eu fiz o meu mestrado em Ciência da Computação lá, também.
Então, eu sou novo para Harvard este ano.
Eu realmente queria entrar no ensino.
Eu passei os últimos quatro anos na Universidade de Stanford TA-ing aulas de informática
e assim por David me venha,
e eu vou estar ajudando com CS50,
então eu faço isso em tempo integral, eu não estou na escola de pós-graduação.
Tem sido divertido.
Esperemos que ele vai continuar a ser divertido, eu tenho certeza que vai.
>> Tudo bem, Sam.
>> Meu nome é Sam, eu sou um estudante do segundo ano da faculdade, de direito, especificamente.
Meu maior será a história da ciência, provavelmente, e VES secundário,
e minha cor favorita é o amarelo.
Não há necessidade de julgar nem nada, mas é uma boa cor!
E Stella.
>> Oi, eu sou Stella, eu sou um calouro na Grays.
Eu não tenho idéia o que eu concentrada no entanto,
assim CS50 era apenas uma espécie de forma aleatória,
o que é interessante.
Curiosidade, Jimmy foi o primeiro amigo de Harvard meu,
porque nós dois somos de Chicago.
Cool, Graça e - que é suposto ser o único realmente bom, certo?
>> Eu pensei que [inaudível].
Ah, sim.
[Inaudível / chat câmera-]
Ok, eu ainda estou aprendendo, ainda está aprendendo.
>> Então temos outra coisa que é bem interessante aqui.
Sim, eu estou pensando, você tem uma idéia que está acontecendo aqui?
Você sabe como interpretar isso?
>> Eu deveria ser colocado o ponto e vírgula após cada linha.
Isso é um tipo de dor.
Às vezes, essas vírgulas pode ser uma verdadeira dor de rastrear.
Assim, verifica-se que
o programa especial que estamos usando neste ano para
compilar nosso código C é chamado Clang,
eo motivo que começaram a usar Clang este ano -
porque não ter usado esse programa no passado;
nós usamos um outro chamado GCC que é realmente popular -
Clang realmente lhe dá mensagens de erro que faz sentido.
Este diz "esperar", "após a expressão",
e ele ainda diz que a expressão depois que você precisava de um ponto e vírgula.
Então você corrigi-lo?
>> Sim, agora.
Impressionante, deixe-me saber e nós vamos arrancá-la, e nós vamos executá-lo.
Mas, sim, colocar essas vírgulas in é um tipo de dor.
>> Eu fixa-lo, então eu acho que ele deve funcionar.
Awesome - revisão 3.
Que se parece com ele.
Tudo bem, então agora se executá-lo,
lá vai.
Coisas legais.
>> Tudo bem.
Então, obrigado por fazer isso.
É muito bom conhecer vocês.
O que vamos fazer agora é passar o próximo bit pouco
meio de mergulhar nos problemas de seção
que vêm do conjunto de problemas a partir desta semana
e nós faremos o que para a maioria das seções
para o resto do período,
e então vamos salvar os últimos 15, 20 minutos ou mais
para falar sobre o problema a si própria
e depois apenas quaisquer outras perguntas que você tem, em geral, sobre a classe.
Dito isso, o que realmente quero fazer
é que todos os que participam
usando o material Spaces,
jogando em código, jogando em sugestões,
e falando quando coisas como essa ruptura
ou não funcionam, só porque estas são coisas que
Eu sei que me deparei
quando eu comecei a codificação,
e foram realmente um bocado frustrante às vezes
porque se é como duas horas antes de seu conjunto de problemas é devido,
assim - apenas para divulgação,
Eu não iniciar a programação até que eu estava no segundo ano na faculdade.
Era uma espécie de esta coisa estranha, desconhecida
que eu ouvi foi kinda cool
e eu também ouvi que isso poderia ser uma verdadeira dor na bunda
se você perder um ponto e vírgula e que é o único erro manter o seu programa de trabalho
e mantendo-o de ir dormir,
de forma definitiva,
se você tem perguntas como essa,
se você tem preocupações assim, deixe-me saber,
porque eu quero fazer isso uma boa experiência para vocês.
>> Assim que vocês todos o download do conjunto de problemas ainda?
Meio que sabe onde é? Okay.
Então vamos para cs50.net, porque eu não tê-lo nessa conta,
puxar para cima os conjuntos de problemas,
puxe conjunto de problemas 2, e vamos olhar para a edição padrão hoje.
Vamos puxar para cima a especificação aqui.
Rolar para baixo.
Então, vamos começar a olhar para esta seção de perguntas.
Vocês já assistiram esses shorts ainda?
Okay.
Portanto, há shorts em loops,
que é feito por Tommy, um dos companheiros de ensino cabeça.
Há um em escopo,
Eu acredito feito por outro companheiro de ensino chamado David
e depois em uma cifra de Caesar também feito por David.
Eles são muito legal.
Vocês já foram assistir seus calções até agora?
Como tem sido eles?
Útil? Ok, bom saber.
Se eles não estiverem, você pode dizer isso.
Mas antes que você,
Vocês já olharam para estas perguntas
em tudo?
>> Vamos falar sobre isso um pouco.
Então, nós introduzimos ao longo das duas últimas semanas
em palestra
um certo número de ciclos diferentes.
Há o laço for,
do loop while, e então o loop do-while,
e na aula, nós temos falado muito sobre
como esses laços são todos
bastante similar em muitas maneiras,
e você pode fazer muito das mesmas coisas com um loop while
que você pode fazer com um loop para.
Você apenas tem que tipo de usar as combinações certas de variáveis ​​e tal.
e assim mesmo
a distinção real entre todas as laçadas é que
às vezes eles são mais úteis
para usá-los de uma só vez do que em outro momento.
>> Assim, por exemplo,
o loop while diferindo de um loop do-while.
Será que todo mundo sentem que têm um bom controle sobre quando
um do-while é mais
útil ou qual é a diferença?
>> Acho que a diferença é um loop do-while
corre - Eu não sei bem o que é a terminologia,
mas a série de funções dentro do loop.
Eles automaticamente - ele faz suas corridas pelo menos
antes que verifica a condição, ou o loop while será executado apenas quando
continuamente executado - ou não a condição está sendo satisfeita.
Sim, isso faz sentido?
>> Vamos dar uma olhada em um pouco de código.
Então, só para repetir a pergunta,
ou a resposta, em vez;
a resposta foi que
um loop while irá verificar para ver se a condição
que você especificar for atendida
antes de ser executado o corpo do laço, pela primeira vez,
enquanto que o do-while será executado automaticamente o corpo do loop,
é o que chamamos - é estranho terminologia,
mas se eu dizer qualquer coisa que não faz sentido, deixe-me saber -
o corpo do laço é que o material que você coloca entre as chaves.
E em um loop do-while,
que o corpo se executar pelo menos uma vez,
e então a condição é verificado antes de ser executado a cada vez consecutiva.
>> Então, na verdade, Sam,
você se importa de escrever um simples loop while
em espaços?
>> Como você classifica como de
fazer um novo ...?
Eu simplesmente apagar tudo o que você tem aí.
Sim, apenas limpá-lo.
>> Bem, eu acredito que eu estou tendo essa -
qual você quer, de um tempo, ou você quer ...?
Sim, só que um pouco verdade, imprimir algo.
E vamos ver.
Alexander, eu percebi que nunca apresentei.
>> Oh, isso é bom.
Você - você pode codificar um loop do-while para nós?
>> Sim, eu vou tentar.
Tudo bem, nós vamos retirar estes na tela,
de modo que você meio que tem uma alça sobre quais são as diferenças.
>> Então, aqui está o que Sam fez.
Ele tem um número inteiro chamado de i
que ele é inicializado a 17.
Em seguida, ele diz que enquanto (int i = 17)
printf ("Meu nome é Sam.");
Então o que acontece quando executamos esse código?
Há um erro, o que é que o erro dizer?
Vamos puxar-lo e falar sobre isso.
Ocorreu um erro, que diz.
Vamos rolar para baixo.
Então, isso nos deu esse erro, e ele disse,
"Ei, eu esperava uma expressão."
Isso é meio misteriosa.
Sim, então exatamente - e, novamente,
haverá um outro pequeno bug que vai pegar em apenas um segundo.
Mas este é mais um daqueles tipo de coisas estranhas terminologia,
assim que esta int i = 17
não é uma expressão.
O que parece que ele está fazendo é que é
declarar um inteiro chamado i
e definindo-a igual a 17
ou melhor, colocando 17 em que int chamado i.
E isso não faz sentido
no contexto da presente loop.
Faz sentido, como veremos,
no contexto de um loop for, porque para declarações de loop que começar
com que, por int i é igual a algo
e continua.
>> E você também -
corrigir alguma coisa, tudo bem.
Aqui vai; impressionante.
Então, agora as coisas parecem um pouco diferente.
Um par de coisas mudaram.
Você pode nos dizer o que as coisas mudaram?
>> Tirei o int, então não há nenhuma declaração [inaudível] em vez de uma atribuição.
O sinal de uma igual, eu coloquei dois sinais de igual, o que significa um igual.
Impressionante.
Sim, então o que Sam fez foi que ele tirou o int
que estava aqui antes,
por isso, se eu só olhar para isso - isso é o que era antes, disse int,
que estava declarando-lo - portanto, levou o tipo.
Há int, string, char, short,
estes são chamados tipos.
Então você pegou o tipo
e, em seguida, previamente,
ele tinha apenas o único sinal de igual
eo que ele disse foi problemático sobre este foi
quando você tem um sinal de igual,
que é um operador de atribuição.
Isso não está testando ou não 2 coisas são iguais.
Isso é realmente definir algo igual a alguma coisa.
Estamos colocando o número 17 na variável i.
Então, para fazer esse tipo de comparação,
você tem que usar o duplo igual,
que é um tipo de coisa estranha
mas é um erro bastante comum.
Então, uma outra coisa que eu vou apontar, se você não se importa,
é que, em
nossa função aqui na principal int,
você vê que o corpo de nossa função
é deslocado a partir do lado esquerdo
por 4 espaços ou uma guia.
A razão por que fazer isso
é apenas para facilitar a leitura.
Como você pode ver na alça de Sam enquanto aqui,
ele não travessão em tudo,
e que não afeta a funcionalidade do código.
Ele será executado exatamente o mesmo.
>> Assim, por exemplo, se chegamos até o topo aqui
e pressione o nosso botão Play, que vai construir,
que vai executá-lo,
eo que vai acontecer?
Por que ainda dizem que correr?
>> Porque vai ficar repetindo oi.
Exatamente, e por que ficar repetindo um oi?
>> Porque o inteiros nunca muda, por isso é sempre 17.
Sim, exatamente, por isso
vamos ver, depois - me lembrar do seu nome?
Jimmy. Então Jimmy disse que
a razão que esta continua a repetir oi uma e outra vez
é porque essa condição é sempre verdadeira.
Nós nunca mudamos o valor de i.
Nós nunca alterar o conteúdo do que está armazenado nessa variável.
Portanto, neste ponto temos este erro
seu programa de saída gerado muito,
e se desloque para baixo e tipo de olhar para o que está acontecendo aqui,
você pode ver que é oi, oi, oi, oi, oi, oi, oi todo o caminho.
Impressionante.
>> Então tipo de volta ao ponto original
que ter o recuo aqui
no corpo do laço enquanto não afectou nada.
O programa ainda correu muito bem.
Normalmente, para um bom estilo -
e isso é algo que nós procuramos em seus conjuntos de problemas -
pedimos-lhe que este travessão por quatro espaços, que você pode fazer
apenas pressionando a tecla tab
ou manualmente, colocando em quatro espaços si mesmo.
Cool, ok então vamos voltar e olhar para
Alexandre fazer enquanto.
Apenas meio >> tendo um pequeno problema.
Ok, bem, vamos trabalhar com ele.
Isso é legal?
Sim >>.
>> Ok, então aqui vamos nós.
Este é o código que Alexandre escreveu.
Você vai por Alex - ok.
Então, aqui está o código que Alex tem escrito.
Então, nós temos a nossa declaração de principal aqui,
e depois temos esta variável inteiro chamado i
sendo declarado aqui.
Temos uma instrução do
e, em seguida, o corpo de novo com estas chaves,
por isso este é o corpo do do-tempo -
deixe-me zoom e por isso é mais legível -
e no corpo, estamos tentando imprimir "este é o corpo",
i + +,
para incrementar o conteúdo de i e fazer isso
até eu chega a ser 3,
e então o nosso programa termina.
>> Então o que acontece quando executamos esse programa?
>> Eu esperava um identificador.
Ok, então construir, executar erro ocorre.
O que acontece?
Nós rolar aqui,
temos essa coisa um tanto enigmático olhar,
espera-vírgula após a declaração de nível superior.
Isso é meio estranho.
Alguém tem uma idéia do que pode estar acontecendo?
Meio estranho, sim.
>> [Inaudível] ser declarada fora dos parênteses?
Então, não que se aplicam, então quando você usar parênteses?
Então, ele declarou esse cara fora da qual parênteses?
Ah, esses caras - as chaves?
Sim >>.
Sim, exatamente.
Assim, verifica-se que
você realmente não pode declarar uma variável aqui como este.
O que você poderia ter tentado fazer era -
cortá-lo de lá -
você pode colocá-lo dentro de chaves aqui
ou outra alternativa
é colocá-lo completamente fora.
E assim estes - dependendo de onde você realmente colocar a declaração
dessa variável inteiro,
você pode obter dois tipos muito diferentes de variáveis;
quando está fora do principal,
é o que chamamos de uma variável global.
Que está fora do âmbito de qualquer uma das funções -
não é dentro de uma função -
enquanto que se nós colocá-lo dentro de principal,
como aqui, então ele é chamado de variável local,
porque é local para o âmbito da principal.
E vamos falar um pouco mais sobre o que as diferenças são
entre os dois tipos e por que você usar diferentes tipos de variáveis,
mas por agora,
você pode apenas manter todas as variáveis ​​locais,
porque não temos qualquer necessidade de variáveis ​​globais.
>> Ok, então isso é uma coisa certa lá.
Vamos tentar correr de novo, ver o que acontece.
Executar, obter outro erro.
Zoom em um pouco, o que é que vamos chegar?
Recebemos este parêntese esperado depois do / while.
Alguma idéia do que está acontecendo? Dan?
É o tempo >> parênteses depois e depois -
Eu não sei se você precisa redeclare int,
mas o fazer enquanto (i <3).
Exatamente, sim.
Assim, verifica-se que Dan é exatamente certo.
Nós não precisamos de colocar este tipo aqui novamente.
Podemos, em vez do tipo de matar
e apenas fazer isso.
Tudo bem.
Eu vou sair do zoom, tente mais uma vez.
Olhe para isso, ele roda bem-sucedido.
Se rolar para baixo, "este é o corpo" impresso 3 vezes.
Isso é muito doce.
Bem feito, bem feito, pessoal.
Bem feito.
Como é que isto vai tão longe?
Ritmo decente?
Ok, legal.
>> Então, como nós espécie de volta à questão original,
nós - e agora se vê a diferença,
você vê que neste loop do-while,
a condição vem por último.
Então, como o computador lê o programa
desde programas em C são executados tipo de nesta ordem seqüencial,
onde literalmente começar com a primeira linha de principal,
e, em seguida, executar a linha 6, linha 7, linha 8, linha 9,
linha 10, linha 11,
tudo isso no topo aqui
vai executar uma vez
antes de nós sempre testar esta condição de ver
ou não eu - ou o conteúdo de i, sim -
são menos do que o número 3.
E somente se, uma vez que começa a linha 12,
o conteúdo de i são menos do que 3
que nós realmente voltar-se para a linha 7
e repita o processo,
e, então, testar a condição de novo e de novo e de novo.
>> Assim, podemos comparar esta
com - o zoom para fora,
desloque-se para a versão de Sam,
vamos olhar para isso, ligeiramente alterado para que ele não é mais um loop infinito -
onde se ampliar,
vemos que, como este programa é executado,
vai primeiro declarar int i,
definir o conteúdo de eu ser a 0,
e, em seguida, ele atinge a condição de quando o primeiro loop,
Portanto, neste caso, este corpo, esta printf ("oi") e i + +
não vai mesmo executar
a menos que i é realmente menor que ou igual a 2.
Portanto, se i é 3, por exemplo,
se definir esta aqui
igual a 4 - ou eu vou fazer 3, porque eu disse 3 -
e depois executá-lo,
vai construir, vai correr tudo bem,
mas não vai realmente imprimir qualquer coisa,
porque falharam no teste para o primeiro caso.
Assim, na classe, tipo de falou sobre por que esses laços do-while
são úteis, por vezes,
e por que iria utilizá-lo ao invés de um loop while.
>> Estão lá - vocês tem alguma sugestão
por que um do-while pode ser mais útil?
>> Bem, eu acho que do-while é se você quer a entrada do usuário,
porque dessa forma você pode deixá-los
colocar algo em uma vez, se é correto,
que pode passar para o restante do programa,
mas se não estiver correto, então você continuar a avisar o usuário
até colocar a entrada à direita.
Sim, exatamente - exatamente,
assim um do-while é útil
porque ao pedir a entrada do usuário
porque você precisa para obter a entrada do usuário antes que você possa realmente verificar.
Assim, em pset 1, em pset 2,
onde você está solicitando a entrada do usuário muito,
isso é uma coisa útil para usar
ao invés de apenas um simples loop while.
Se você usar um loop while, você pode fazer a mesma coisa -
você pode fazer a mesma coisa com um loop while
como você faz com um laço do-while.
Você apenas tem que tipo de ter este processo duplicado
onde você começa a primeira entrada e, em seguida, iniciar o seu loop while.
Considerando um do-while, você apenas tem que escrever uma vez
e é muito mais limpo.
>> Tudo bem.
Alguma pergunta?
Faz sentido?
>> O retorno 0 - que é apenas uma espécie de tenda ou é -?
Sim, então nós podemos -
bem, nós vamos cobrir este um pouco mais tarde
mas verifica-se que
este 0 retorno que nós colocamos
no final de todo o tempo principal -
você pode kinda apenas tomá-lo como algo que fazemos
por enquanto.
O que nós começamos a falar sobre com funções
tipo de no final da semana passada e novamente esta semana
é a de que uma função
tem entradas que são essas coisas dentro dos parênteses;
estas são duas entradas, nossos argumentos ou parâmetros,
o que eles estão chamados também a nossa função principal,
e, em seguida, uma função produz uma saída
que chamamos de um valor de retorno.
E o valor de retorno no caso da principal está presente int,
este inteiro,
e da maneira que você contar uma função: "Ei, isso é o que a sua saída
vai ser ", é com essa palavra" retorno ",
a palavra-chave, em vez disso,
e assim principal retornando 0
ou principal saída 0
é padrão em programas C
porque retornando 0 de meios principais que
"Ei, tudo executado com meu programa muito bem."
Se fôssemos colocar algo diferente de 0,
como um, por exemplo,
que é usada para dizer quem correu este programa
que algo deu errado.
Assim que tivermos mais envolvido com coisas ao longo do semestre,
se você está sempre a necessidade de dizer,
"Opa, você sabe, algo deu errado com este programa",
em vez de ter o meu programa falhar, eu quero notificar
o corredor do meu programa que algo deu errado,
você pode usar o valor de retorno,
como nós o chamamos, isso não é 0.
>> Então, nós vamos cobrir esse um pouco mais
uma vez que entrar em funções.
Esse tipo de faz sentido?
Okay.
Funções são uma espécie de bizarro -
Eu acho que para as pessoas que têm lotes de fundo de matemática,
ele vem um pouco mais facilmente,
especialmente se você tiver um pouco mais abstrata fundo de matemática
e você está acostumado a falar de funções
e todo esse tipo de coisa.
Mas nós vamos tentar cobri-los
e ir bem devagar e como eles vêm para cima.
Da mesma forma, este argc int todo,
char * argv [],
por agora, você também pode ter que placa de caldeira como.
Nós começamos a cobrir aqueles um pouco na palestra
quando falamos sobre os argumentos que são passados ​​para programas na linha de comando,
mas em seus conjuntos de problemas e de seus programas,
é totalmente bem apenas para escrever vazio e mantê-lo simples.
E o que isso significa é que vazio
"Ei, principal não vai aceitar qualquer entrada;
este é apenas um programa, nós vamos apenas executar.
Nós não vamos dar qualquer informação extra
cada vez que iniciá-lo em execução. "
Então, por enquanto, você pode fazer isso;
você também pode até omitir o 0 retorno
no final dos seus programas e eles vão correr muito bem,
mas eu recomendo que apenas manter dentro
Em um par de semanas, nós vamos começar a espécie de
puxar para trás a tampa um pouco e entender mais sobre
todos esses diferentes pequenas partes móveis.
>> Tudo bem, agora vamos falar sobre a nossa segunda pergunta aqui.
Então, o que "identificador não declarado" geralmente indicam
se produzida pelo Clang?
Acho que poderia ter visto que já hoje.
Alguém pode dar um resumo do que isso significa?
Vamos ver, Kelly - um dos Kellys.
Então >> -
Sim, o que faz -
>> Eu acho que quando você, como, não declarar as variáveis ​​e tentar usá-lo.
Sim, exatamente, exatamente.
Então, se você já viu essa saída
quando você tenta e compilar seu programa,
apenas como Kelly disse:
isso significa que você usou uma variável que você não declarar,
por isso, se eu voltar para o nosso espaço,
e eu fazer algo assim
printf (
"Olá% s")
e tentar preencher esse s%
s com uma variável que eu não declarei em qualquer lugar
e eu tentar executá-lo,
você vai ver o que eu baixo neste fundo aqui:
"Utilização de identificador não declarado 's'";
isso apenas significa que você não declarar sua variável.
A mesma coisa acontece se
você tem x e tenta armazenar 7 nele
e eu não declarar X.
Eu recebo o mesmo erro:
"Uso de 'x' identificador não declarado".
>> Tudo bem,
assim a cifra de César, não sendo muito seguro,
Eu vou deixar vocês assistir a este tipo, longe de entender o porquê,
e espero que depois de fazer o problema desta semana definir
onde você realmente escrever uma cifra de César, você vai entender um pouco mais
sobre o que significa ser um seguro e inseguro -
ou não seguro, eu acho - inseguro é um pouco diferente.
A outra coisa foi que temos essas outras questões aqui
sobre as funções
e que uma função é,
e nós meio que falamos sobre isso, brevemente, quando falamos sobre valores de retorno;
para alguém que esteve na palestra,
você pode recapitular que tem sido a palestra de hoje?
Tudo bem.
Vamos ver, vamos ter - alguém pode nos dizer o que é uma função?
Kelly?
>> Basicamente >> algo que você desenhar em cima de algo que está escrito na biblioteca que é
mais complicado por lá, e então você acabou de escrever um pequeno formulário da mesma,
assim como você está se referindo a essa biblioteca, usando
todo o código que longa e [inaudível].
Sim, exatamente, e então você quer adicionar algo a que?
>> Sim, eu penso nisso como semelhante ao conceito de uma fórmula em matemática
onde você acabou de escrever uma fórmula e, em seguida, você pode ligar as variáveis ​​em
e é isso que uma função é [inaudível].
>> Sim, por isso temos um par de respostas aqui
que são ambos muito bons e em direito.
Não está se referindo ao código que foi escrito em algum lugar a biblioteca
que é mais complicado
e então você pode recorrer a esse código
e realmente utilizá-lo por apenas escrever o formulário curto do que -
ou melhor, o seu nome -
e depois há também a comparação com uma fórmula de matemática
ou física, todo esse tipo de coisa
onde você tem uma fórmula
e então você pode ligar
as variáveis ​​para a fórmula
para, em seguida, obter o resultado da fórmula,
assim que você pensa sobre isso como como a equação quadrática.
Imagine se, em vez de ter que aprender sobre
o que a fórmula quadrática é na aula de matemática,
você só tinha um programa de calculadora pouco que fez isso por você.
Alguém usar programas de calculadora nas aulas de matemática na escola?
Sim, as aulas de física?
Onde você pode simplesmente dizer: "Ei, fórmula quadrática.
Estas são as variáveis ​​que eu quero de entrada.
Agora me dê a resposta. "
Esse é o tipo do que uma função é.
É uma maneira de nos
tipo de gravação, como um pequeno programa pequena sub
dentro do nosso programa maior
e usá-lo uma e outra vez
de modo que não temos que copiar e colar o código,
podemos dar-lhe entradas diferentes e obter resultados diferentes,
é super acessível
quando você está tentando escrever programas diferentes em momentos diferentes.
>> Assim, por exemplo, uma função que estamos usando mais e mais e mais uma vez
ao longo do curso é printf.
Printf é ela própria uma função
e verifica-se que ele é realmente um muito longo e complicado,
desagradável, funcionar a escrever.
Assim tão simples como parece-nos
para imprimir material para fora da tela,
porque todos nós acabamos de fazer que, no início de hoje seção,
verifica-se que é, na verdade, você sabe,
um bom par de centenas de linhas de código.
Não é algo que eu jamais iria querer escrever, com certeza,
mas temos de usá-lo todos os dias, que é legal,
então temos para compartilhar com os outros,
com programas diferentes,
por isso vamos estar mergulhando mais em funções;
por enquanto, não estamos -
a única função que vamos estar escrevendo é principal.
Principal próprio é também uma função,
e você pode ver ele tem sua saída,
suas entradas, como falamos,
e então seu nome, que é principal.
Principal é uma espécie de - é uma função especial lá.
Em seu programa de C, tem que haver uma função principal,
e assim, por agora, nós meio da escrita omitido
o protótipo, ou a declaração principal.
Nós já que para você,
e nós tivemos que preencher tipo de espaços em branco.
>> >> Assim, para o conjunto segundo problema, que não precisa
escrevê-lo na função de segundo?
Eu não acredito.
Eu acredito que é tudo aqui.
Sim, então cifra de Caesar,
você não tem que, não parece,
e Vigenère, você não quer,
assim - e não é que você nunca realmente tem que escrever
uma função, certo?
Você chama sempre colocar todo o seu código dentro de principal,
e muitos programadores fazer isso.
À medida que avançar,
começamos introduzindo funções como forma
para limpar o seu código,
para torná-la mais elegante,
no caso de ter tarefas - tipo como quando falamos sobre loops,
como às vezes há coisas que você quer fazer de novo e de novo e de novo,
e você tem o tipo de forma ingênua -
ou o que, muitas vezes, chamam de "espantalho" solução,
é só copiar e colar uma e outra vez -
você pode fazer a mesma coisa com funções em que você simplesmente copiar e colar
o mesmo código e outra vez,
mas que incha o seu código -
acaba tornando o código muito longo -
e também fica um pouco confuso,
e, então isso significa que você não é capaz de gostar -
se você quiser usar o código novamente em outro programa,
você também está preso copiando e colando-o novamente,
então uma das coisas que vamos falar é
tipo de design e estilo de seus programas,
e assim, quando faz sentido para o tipo de
pacote de algo e colocá-lo como uma função separada,
nós encorajamos você a fazer isso,
e isso é algo que, novamente,
não há nenhuma regra dura e rápida.
Nós raramente dizer que você deve escrever uma função chamada isso,
mas é mais uma daquelas coisas que você acabou de desenvolver ao longo do tempo
como você escreve mais e mais programas.
>> Mais alguma pergunta?
Ok, então vamos agora
volte até esse cara aqui,
então eu estou ainda nesta seção de perguntas.
Nós conversamos sobre todos esses diferentes,
o que é uma função, por que escrever funções,
quando você pode simplesmente copiar e colar?
Espero que tenha convencido de que escrever funções é uma coisa boa.
Então agora vamos passar para este programa MySpace,
e nós vamos gastar um pouco de tempo fazendo isso.
>> Então, vamos ver,
posso ter alguém ler isso para mim?
Vamos ter Mikhaila - você vai ler isso por nós?
>> Você quer dizer quando volta MySpace -
Backup quando o MySpace foi legal.
>> "Voltar ao MySpace foi legal,
era toda a raiva de tipo como este.
Talvez ele ainda é? Eu não tenho certeza.
Em qualquer caso, de utilizar o aparelho CS50,
CS50 Run, ou CS50 Spaces,
escrever um programa que solicita ao usuário uma mensagem
e em seguida, gera a mensagem com sua primeira letra maiúscula,
com todas as outras letras em caso de alternância,
de acordo com a saída de amostra abaixo,
onde o texto em negrito representa a entrada de algum usuário.
Para simplificar, você pode assumir que o usuário
vai apenas letras minúsculas de entrada e espaços.
Considere este problema uma oportunidade de praticar;
você não vai ser convidado para apresentar este programa. "
>> Awesome, obrigado.
Assim como Mikhaila disse,
vamos escrever um programa que myspaces seu código.
Então, se algum de vocês usam o MySpace?
Algum de vocês tem contas do MySpace?
Oh, yeah, yeah!
Foi muito legal.
[Risos]
Eu sei.
Encontros mim.
Então o que estamos tentando fazer é escrever um programa
que atravessa
e capitaliza a primeira letra
e então cada letra depois -
ou todas as outras letras depois, eu sinto muito.
>> Assim - e você pode ver neste exemplo,
é assim que funciona o programa,
e por isso este é apenas dizer: "Nós estamos executando um programa chamado a.out.
A entrada que nós vamos dar-lhe
vai ser solicitado.
Nós não vamos fornecer a entrada na linha de comando. "
Se você estiver seguindo todas as palestras
e ouvir os argumentos de linha de comando,
esse é o tipo de onde aqueles - que a sintaxe funk
na principal vem com a argc int, tudo isso,
então aqui nós não estamos usando isso, não estamos lidando com nada disso.
Só vamos conseguir este digitados pelo usuário,
e depois a linha esta segunda com a capitalização funk
é o que queremos que o nosso programa para a saída.
>> Então, ao invés de utilizar o aparelho ou Executar, vamos usar os espaços,
porque temos espaços,
e assim se vocês faria
obter o seu código para algo parecido com isso,
então eu estou indo para salvar esta revisão
só assim você tem a placa de caldeira aqui
parecida com esta, int main (void), nada nele.
Na verdade, o que nós vamos fazer é que vamos simplesmente apagar tudo junto.
Queremos uma lousa em branco,
porque nós não vamos começar a escrever código;
em vez disso, vamos tentar escrever um pseudocódigo
o que realmente significa apenas que vai escrever algo que não é de código
que tipo de descreve o que nós queremos fazer,
meio como Davi fez no primeiro dia de aula,
ou eu acho que foi o segundo dia de aula, quando ele fez a demonstração meias todo.
Vocês se lembram que - vendo as meias?
Joseph estava lá tipo de digitar em Inglês?
Então, vamos fazer a mesma coisa.
>> Então, quando eu começar a escrever pseudocódigo,
Eu gostaria de começar por olhar para o que a entrada vai ser.
E eu dou-me um caso de exemplo,
assim como "obrigado pelo add!"
E também eu escrever o que eu quero que a saída seja,
que neste caso é algo parecido com isso.
E esse tipo de dá-me um bom lugar, como, começando a pensar,
"Ok, eu quero tomar a linha 1
e quero transformá-lo em linha 2 ",
e que tipo de ajuda a guiar o meu pensamento.
Este é um bom lugar para começar.
Outra maneira de pensar sobre isso, também, como meio que seguir em frente
e como você faz isso em seus próprios programas, é
pensar sobre o tipo de como o que são os casos de ponta para isso?
Quais são os tipos de cenários estranhos?
Quais são as entradas estranhas que podemos chegar?
E o que essas saídas devem se parece?
Por exemplo, uma entrada de estranho
seria um presente,
criando absolutamente nada,
como o que devemos saída nesse caso?
Algo que queremos pensar, também.
>> Assim como uma pergunta,
o que podemos querer de saída?
Se nós não temos qualquer entrada em tudo, o que deve ser a saída do nosso programa?
Nada. >>
Nada? Parece ótimo.
Então, nós queremos ter certeza de que não estamos escrevendo qualquer coisa fora
se não conseguir nada dentro
Cool. Okay.
Assim
Eu vou chamar um casal de pessoas como nós atravessamos
e apenas descobrir o tipo de como o que o algoritmo geral é
e nós vamos começar a trabalhar tipo por isso juntos.
>> Então, vamos ver. Missy.
Como você acha que ia começar?
O que seria um bom lugar para começar aqui
se queremos transformar, digamos, na linha 1
na linha 2?
Você pode tipo de apenas explicar-me, em Inglês, o que você está pensando?
Não se preocupe com o código.
>> Primeira coisa que eu faria seria para
tipo de usuário direto para lhes dizer o que quiser.
Ok, então, digamos,
"Ei, usuário. Quero
uma string "- incríveis.
Então vamos escrever isso.
Perguntar ao utilizador a uma corda.
Isso soa como um bom começo.
Tudo bem.
Vamos pedir Kelly Ren neste momento.
O que seria de nós, então quero fazer a seguir?
Qual é o tipo do nosso lado -?
Colete >> sua entrada e armazená-lo como uma variável.
Grande.
Então recolher a corda,
armazená-lo em uma variável.
Então, há algo especial que queremos fazer aqui?
Queremos verificar a sua entrada
antes -?
Sim >>.
O que podemos desejar verificar?
>> Bem, você disse que não tem que verificar se é um número, certo?
Porque ele vai assumir que é minúscula?
Sim.
>> Assim, verifica-se que - sim.
Então getString é garantida para retornar-nos uma corda.
Ele não vai retornar um número para nós ou qualquer coisa assim.
Pode haver caracteres dígito dentro dessa cadeia, no entanto.
E aqueles, podemos ignorar como fizemos a capitalização.
Mas uma cadeia vazia é totalmente bem,
então o caso aqui na linha 4 e 5,
direita, onde não há entrada,
e nós colocamos nada como a nossa saída.
Não temos que preocupar-se sobre a certeza de que há algo na cadeia
ou que a cadeia é de pelo menos quatro caracteres;
nada está bem.
Portanto, este é contrastado, por exemplo, com programas como os tostões que você escreveu
onde você teve a certeza que estavam recebendo números não negativos;
você tinha que ter certeza que você estava recebendo o número correto de dias em um mês.
E como é que vocês estão fazendo isso?
Como você faria esse teste?
O que isso exige que você usa?
>> Do-while.
Loops do-while; outros tipos de loops, também, sim.
Assim, verifica-se que não é necessário utilizar um circuito, neste caso,
quando estamos solicitando uma string, que é uma espécie de bom.
>> Tudo bem, seguindo em frente.
Então, Stella.
Você pode nos contar um pouco sobre o que devemos fazer em seguida?
Então, agora temos a cadeia, temos que armazenado em uma variável;
o que nós precisamos fazer com a corda?
Precisamos >> -
identificar o 2 -
Sim, basta dizer que em Inglês, que é incrível.
Identificar as >> [inaudível] capitais - ou, em maiúsculas.
Sim, assim que você identificar quais são maiúsculas e minúsculas.
Não podemos maiúsculas ou minúsculas-los até nós identificamos quais.
Então, vamos colocar isso aqui.
>> Então, só de pensar sobre este processo,
como vamos fazer essa identificação?
Sabe, Dan?
Tipo do que nós - que ferramenta que teria que usar de nossa caixa de ferramentas?
>> Eu colocá-lo em alguma forma, como uma matriz ou cada linha
é a sua própria caixa pouco,
e depois maiúsculas-lo de lá ou não.
Ok, então uma ferramenta que podemos usar é uma matriz.
O que temos de olhar para na seqüência,
porém, para descobrir - que tinha de olhar para os personagens.
>> Então você tem de olhar para o comprimento da corda?
Sim, então parte do que está recebendo o comprimento da corda.
Só por curiosidade, o que vamos usar para obter o comprimento de uma corda?
Strlen >>?
Sim, strlen, nós chamamos isso de "strlen"
Todas estas funções de cadeia, assim strlen é uma função,
e é super útil, porque podemos usá-lo apenas para dizer,
Ei, strlen: Aqui está uma corda, me diga quanto tempo é.
Na palestra de hoje, David falou muito sobre como strlen é implementado,
o que realmente está acontecendo nos bastidores.
Mas este é um dos muito super útil.
Existem outras que também estão na biblioteca string,
como strcmp, que está escrito "strcmp",
o qual é usado para comparar strings umas às outras.
Os outros que você irá usar como strstr,
o que é bom para encontrar cadeias sub e assim por diante.
Para a maior parte, todos eles começam com str e depois passar a ser outra coisa.
A razão que eles realmente não escrevê-los como corda e assim por diante
é porque em como os primeiros dias de C,
quando as pessoas estavam escrevendo em primeiro lugar e tudo o que,
eles tinham limitações no número de caracteres que você pode usar
para nomes de funções e nomes de variáveis,
então tudo é como super condensado.
Mas quando você vê algo que começa com str,
que normalmente significa que isso tem algo a ver com uma corda.
>> Ok, então você tem que obter o comprimento da corda,
e então, o que vamos fazer com os personagens?
Sabe, Sam?
>> Eu não tenho idéia, eu estava tentando descobrir isso.
Eu realmente não sei - Eu gostaria que houvesse alguma maneira de -
Quer dizer, eu acho que talvez a gente pudesse fazer algo com probabilidades e pares,
mas eu não sei de qualquer função como essa.
Sim.
Mas >> isso - não necessariamente trabalhar,
porque então você obtém os espaços a ser -
você teria que ter o espaço para obter dicas sobre como -
Okay.
>> Eu não sei - eu sou tipo de perda neste momento.
Sim - não, não, não, estes são bons pontos.
Então, o que nós precisamos fazer é, como disse Sam,
precisamos para controlar quais cartas são as letras estranhas,
e quais são as letras mesmo.
Mas nós queremos ter certeza de que não estamos apenas à procura
no par e ímpar
índices na seqüência,
mas olhando para as letras pares e ímpares na seqüência,
por isso precisamos de um bocado têm essa distinção entre
letras - como o que na verdade é A, B, C, D, ou assim por diante,
e que as coisas não são letras, mas ainda em nossa string.
Por exemplo, aqui, como este ponto de exclamação não é uma letra,
mas ainda é parte da nossa cadeia, que ainda é um char.
Do mesmo modo, todos estes espaços -
não faz sentido para aproveitar um espaço, certo?
Então, nós queremos ter certeza de que nós de alguma forma ignorar os
enquanto ainda chances de rastreamento e nivela.
>> Então, meio que em nossa caixa de ferramentas de programação
até agora, se quiser,
temos um número de ferramentas diferentes que nós já conversamos sobre.
Assim, uma, por exemplo, são variáveis,
como falamos aqui.
Outra ferramenta que falamos são as funções.
Então, nós já conversamos sobre variáveis ​​em nosso pseudocódigo-se aqui
como o que nós vamos usar para armazenar nossa string.
Nós conversamos sobre funções para obter o comprimento de uma corda, como strlen.
Nós estamos falando de outra coisa, e nós já conversamos sobre isso
para muito mais cedo na seção de hoje: loops.
>> O que vocês pensam sobre o uso de um loop neste programa?
Jared, o que você acha?
Será que usar um loop neste programa?
>> Provavelmente não, não, porque você não tem que passar por isso mais de uma vez.
Ok, você não tem que passar pelo que mais de uma vez?
>> A seqüência inteira.
Certo, então você não tem que passar por toda a cadeia uma vez.
Desculpe que fez absolutamente nenhum sentido!
Você não tem que passar por toda a cadeia mais de uma vez.
Okay.
O que você acha?
>> Eu acho que é melhor usá-los
para que possamos fazer como capitalizar enquanto
a localização do seu número é [inaudível].
Grande, e assim capitalizar o que?
Ok, então nós estamos dizendo que
devemos usar um loop, porque queremos
uma letra em maiúscula, enquanto não é um número.
Então, - desculpe, você quer adicionar?
>> Eu ia dizer que a maneira como você trata a string
e [inaudível] separar o [inaudível] sobre os personagens?
Sim.
>> E então podemos atribuir os números de -
ou com base na localização das letras na seqüência?
Sim.
E >> identificar se é par ou ímpar e capitalizar a carta em si
enquanto a localização da carta é [inaudível] - desculpe.
Grande.
>> Portanto, apenas uma recapitulação.
Você pode me lembrar do seu nome novamente - Sinto muito.
>> Charlotte.
Charlotte, ok.
Então, o que Charlotte está dizendo,
que é totalmente certo - Deus, este gosta de auto travessão em mim -
é que se olharmos para uma string
tal como este se encontra no topo -
"Obrigado por adicionar" -
como uma seqüência de caracteres
onde a é a posição 0,
o h está na posição 1.
Uma é a 2, então temos 3, 4, 5;
o espaço está na posição 6.
Considerando que: - o que é a posição de f?
7!
O? 8.
R? 9.
E então nós temos 10, e então eu realmente não posso escrevê-lo sem ele
meio que ficar confuso na tela.
Mas esta é, na verdade, como podemos falar sobre strings na memória.
É uma string
é uma seqüência de caracteres,
e quando nos referimos a um caráter individual em uma corda,
que muitas vezes o fazem referindo-se a posição de que a personagem
dentro da cadeia,
provavelmente da mesma forma que falamos de setembro
sendo o nono mês do ano
ou Segunda sendo o primeiro dia da semana.
Portanto, este nos fornece uma maneira de
descobrir quais são estranhas mesmo contra
porque você pode ver aqui,
se combiná-lo com este T,
você pode ver que todos os capitalizados
estão em posições ainda,
pelo menos para a primeira palavra,
e então as coisas são jogados fora, uma vez que atingiu aquele espaço,
porque não contamos este espaço como uma carta,
por isso é como se começou
e foi de 0, 1, 2, 3, 4, 5,
espaço, 6, 7, 8, espaço,
9, e, em seguida, 10, 11, 12, e assim por diante.
>> Legal, então nós definitivamente vai querer usar algum tipo de loop
passar por cima de cada um dos personagens, por sua vez.
Portanto, neste ponto,
vamos voltar para o nosso pseudocódigo velho aqui.
Como parte desta identificação de quais
são maiúsculas e quais são minúsculas,
vamos querer fazer isso em algum tipo de laço.
Cólon Loop,.
Que tipo de laço, dos tipos de loops que temos,
parece ser uma boa para usar neste caso?
>> Eu estava pensando para o laço.
E por que você está pensando em loop?
Porque ele >> começa em zero, e depois
quando alcançamos o comprimento da corda,
e então cada iteração, você pode [inaudível], também?
Sim, exatamente.
Assim, a partir dos diferentes escolhas de loops,
que temos para loops, loops while, e do-while.
Quando um loop é particularmente útil
é quando você quer saber
tipo de onde você está no circuito,
quantas vezes o circuito tiver sido executada, até agora.
Que é exatamente o que queremos saber, nesta situação,
como Kelly disse:
baseado fora de comentário anterior de Charlotte, que queremos saber a posição
do personagem dentro da cadeia,
e para o laço nos dará apenas isso,
porque se começarmos tipo de olhar para trás em nossa string,
se começamos o nosso circuito para 0,
e subimos através do comprimento de toda a cadeia,
então podemos associar a letra T
com a 0 em nosso loop for,
H com a letra 1 em nosso loop, e assim por diante,
indo todo o caminho até o final da cadeia.
>> Então, vamos começar a programar este um pouco
só para vocês ter uma idéia de o que isso parece.
Eu estou indo para salvar este,
então temos o nosso pseudo-código aqui,
e eu vou apagar tudo.
Então, eu tenho uma página em branco.
Vou começar por escrever int (void) principal
{
Eu vou colocar o 0 retorno em
e, em seguida, o.}
Por isso, normalmente quando eu começar a programar, é isso que eu começar.
Eu vou guardar isso para que vocês têm.
Então, uma das primeiras coisas que falamos foi
obter a entrada do usuário
e armazená-lo em uma corda.
Como chegamos a entrada de um usuário?
GetString. >>
GetString, tudo bem.
Então, se eu digitar GetString ()
e um ponto e vírgula.
Vamos tentar executar este; será este prazo, antes de tudo?
E por que não esta correr?
>> Você tem que declarar a variável.
Eu tenho que declarar uma variável. Okay.
>> Então, como posso fazer isso?
Você se importa de escrever algo, compartilhando-o?
E então nós podemos puxá-lo para cima.
Vamos ver, Dan, certo, tudo bem.
Ou Daniel. Copie que em, entrada string = GetString ().
Impressionante.
Será que isto vai funcionar?
Vamos tentar.
Hit corrida, código de upload fonte, o edifício, um erro ocorreu.
Okay.
Então o que está acontecendo aqui?
Uso de 'string' identificador não declarado.
>> Temos que incluem as bibliotecas?
Sim, então Dan dizendo que temos de incluir as bibliotecas.
É isso que você ia dizer, Stella? Impressionante.
Isso é incrível, então Stella, não é
copiar este código fora do espaço de Daniel?
Se você clicar em Daniel Roland Ki, copiá-lo,
e então você vai colocar a linha include, e depois salvá-lo fora?
Deixe-me saber quando você estiver pronto.
Portanto, esta sintaxe de inclusão é também uma espécie de funk;
não há como a hash tag,
E há a incluir, e depois há estes colchetes.
Você se lembra de como isso funciona, ou eu deveria colocá-lo neste código aqui?
>> Eu sou bom.
Okay.
Eu imprimi-lo >> - Eu não tinha certeza de qual biblioteca, no entanto.
Ah, tudo bem - sim, por isso é a biblioteca CS50.
>> Ah, eu coloquei biblioteca stdio.
>> Ah, entendi - sim, não, isso é -
assim verifica-se que cadeia é realmente algo que é especial para CS50.
Há, na verdade, não é um tipo de cadeia verdadeiro
porque aqui, string está na posição, tipo -
estamos declarando uma variável chamada de entrada do tipo string -
e estamos colocando dentro de entrada
o valor que será devolvido a nós: a saída desta função GetString.
Você pode dizer isso é uma chamada de função, porque ele tem os parênteses, como printf faz,
como strlen faz.
Mas cadeia não é realmente um tipo real
na linguagem C.
Nós fizemos tudo em um tipo, e nós vamos levar cerca de mais o que realmente é
em C, porque não há uma maneira de trabalhar com cordas;
nós acabamos de fazer algo para torná-la um pouco melhor.
>> Então, vamos lá.
Aqui está o código de Stella.
Tem o # include .
Outras pessoas vão chamar isso como um hash incluem, por vezes, ou uma acentuada incluir.
Agora podemos iniciá-lo, executá-lo,
e ainda obter um erro.
Vamos ver o que está acontecendo.
"'Input' variável não utilizada."
Ok, então isso é legal, isso é legal.
Quero dizer, não é muito legal,
porque nós estamos recebendo um erro e ele não está funcionando,
mas o que isto quer dizer é que
nós não temos usado a nossa variável, o que faz sentido.
Nós não tentamos fazer nada com ele.
Trata-se de uma maneira que
Clang está tentando ajudar-nos a certeza de que não estamos apenas usando variáveis
e, em seguida, chamando-os inadvertidamente outra coisa mais tarde em nosso código,
ajudando-nos a evitar erros dessa forma.
>> Tudo bem, então nós temos de entrada de usuário,
que foi armazenada em uma variável.
O passo seguinte foi então
começar a olhar para todos os caracteres na cadeia
e identificar quais os que estão a ser maiúscula
e quais devem ser minúsculas.
E como Kelly e Charlotte trouxe,
Fazemos isso usando um loop for.
Então, se alguém se lembrar da sintaxe de um loop
e gostaria de tomar uma facada em apenas escrever
a primeira linha do loop, apenas o para pouco?
Kelly, você quer tentar?
>> Sim, então você tem que inicializar primeiro,
por isso eu coloquei i = 0,
e então eu fiz i <strlen ().
Está no seu espaço - eu posso puxar para cima?
>> Sim, eu estraguei tudo um pouco, mas sim.
>> Ok, vamos puxá-lo para cima.
Impressionante.
>> Mas então eu não sabia se você tinha que -
Sim, está bem.
Então, aqui está o que Kelly tem: vamos olhar rapidamente.
Então ela está incluída a biblioteca CS50 no topo.
Ela está incluída a biblioteca IO padrão no topo,
eo IO padrão tem funções como printf,
por isso, se você quiser usar printf, você precisa dessa linha.
E então ela incluiu a biblioteca string,
que vai precisar,
porque a biblioteca string tem strlen função,
que nós vamos chegar a um pouco.
Então, se olharmos para o que Kelly é feito aqui,
você pode andar nos o que você fez?
>> Sim, então - Quer dizer, eu tenho erros, então -
Sim, não, isto é -
>> Então, eu queria chamar a seqüência que eu tenho apenas "string".
Eu queria imprimir a string
e então eu -
Eu queria gostar definir a seqüência como como uma matriz de cada personagem
ser diferente [inaudível], certo?
E então eu queria começar na posição 0
e depois a cada dois espaços,
Eu estava indo para capitalizar,
então eu só descreveu como 23, porque eu estava olhando para a tabela ASCII.
Então é isso que eu estava pensando - Eu sei que não é certo.
>> Entendi, então este é um grande começo.
Eu acho que um monte de quadro está no lugar aqui.
Vamos passar por tipo de linha por linha e ver o que está acontecendo.
Assim, a maneira que eu gosto de fazer isso é só começar por compilar o código
e deixar o compilador me dizer como o que há de errado com o meu código,
porque o compilador é realmente boa em dizer o que está errado com o seu código.
Então, se nós jogá-lo, construindo, e não construir.
Ele diz que houve um erro,
assim, se rolar para baixo e olhar para o primeiro erro,
ele disse -
que rolar de volta até o topo,
podemos ver, existem 5 erros gerados aqui na parte inferior.
Opa, que está realmente cortada.
Eu acho que só não vai ficar melhor.
>> Aqui vamos nós.
Portanto, há 5 erros totais gerados.
Aqui eu só posso ver os 2 primeiros,
para que eu possa passar esta se um pouco e, em seguida, tipo de rolagem para cima.
Este é o comando que foi executado para compilar o código,
e, em seguida, o primeiro erro foi em file.c aqui:
"Esperado identificar ou '('", e foi nesta linha
onde disse string = GetString ().
Você pode ver aqui que era na linha 8 da file.c,
e então eu acredito que este é de 12 caracteres - que é o erro.
Então, o que está acontecendo de errado na linha 8 - Kelly?
>> Você só precisa de chamá-lo, como, uma carta ou algo assim,
como string s ou algo assim?
Sim, então verifica-se que estes nomes de tipos especiais,
para string, int, char, short,
todos eles são palavras-chave especiais,
e você não pode realmente usá-los como nomes de suas variáveis,
porque o compilador olha para aquilo e diz,
"Oh, eu sei que é um tipo",
para que você não pode realmente ter uma variável string chamada string,
como eu estou tentando fazer aqui, e isso não vai funcionar.
Mas em vez disso, podemos chamá-lo de algo como s ou st ou str.
Também não poderia chamá-lo de int.
Nós não podemos ter uma string chamada int.
Nós não podemos ter uma string chamada char; nenhum desses vai funcionar.
>> Então vamos chamá-lo s para o momento.
Impressionante.
Então, o que está acontecendo próximo nesta linha?
String - esta linha parece muito bom?
Vamos tentar mais uma vez, vamos executá-lo.
Ok, então nós ainda obter erros.
Desta vez, estamos reduzidos a quatro erros.
Então temos um deles.
Vamos subir.
"'String' nome do tipo inesperado: expressão esperado", sim?
>> Sim, isso é porque eu tentei citar a cadeia.
Sim, então parece que agora também tem que ir correção
todas estas referências a string.
Você pode ver que há uma referência a corda aqui, aqui, aqui,
para que possamos passar tudo isso para s.
Grande. Ok, executá-lo novamente.
Edifício - outro erro ocorreu.
>> Ok, agora estamos reduzidos a um erro,
assim int i = s e depois os colchetes.
Então você pode nos contar um pouco sobre o que você estava fazendo aqui, Kelly?
Sim >>.
Foi na linha 10.
>> Eu não sei se precisávamos de tudo,
mas eu acho que eu estava tentando -
Eu vou guardar isso para que você possa acompanhar.
>> Eu acho que foi
tentando dizer a ele para começar na posição 0
no começo do meu loop,
então eu acho que talvez dizendo era desnecessário.
Então, só para recapitular,
você estava dizendo que este - que estava a tentar iniciar este na posição 0
e esta - sim,
então eu acho que mais cedo, também, quando você estava andando pelo código,
você estava falando sobre como você queria tratar a string como um array
para que possamos acessar cada personagem individualmente.
Acho matrizes Dan mencionou, também, tentando converter strings em matrizes.
>> Acontece que tipo de sob o capô,
uma string é armazenado como uma matriz já,
e você pode acessá-lo como uma matriz;
não há nenhuma conversão que você tem que fazer.
A isnt string - assim -
uma corda não é realmente uma matriz,
mas você pode acessá-lo como tal, porque todos os personagens são armazenados
uma ao lado uns dos outros na memória,
por isso, se você deseja obter o primeiro caractere da string,
É o mesmo que pegar o primeiro número inteiro em uma matriz de inteiros.
Então, muitas vezes - nós
referem-se a dois como
oh, como sendo uma string, como sendo uma matriz,
embora ele realmente - eles são coisas muito diferentes,
mas você pode tratá-los muito muito mesmo.
Assim, verifica-se que esta linha de fato -
não precisa fazer qualquer conversão,
e, de facto,
isso na verdade não é uma expressão válida,
que é o que nosso compilador está nos dizendo.
Ele está dizendo: "Ei, é esperada uma expressão,
e que eu tenho aqui é algo que não é uma expressão. "
Para declarar uma matriz,
tudo que você precisa fazer é algo como este com um ponto e vírgula,
e depois dizer a matriz quanto tempo você quer que ele seja,
tal como 5, por isso esta linha 10
irá declarar uma matriz chamada i com 5 inteiros nele.
>> Trata-se de um lado, o que não é necessário para o código,
mas este é - este é o tipo do que a declaração parece.
>> Como você não iria usar char i [strlen (s)]?
Char i [strlen (s)]?
>> Caractere i, e depois dentro do parênteses, strlen (s).
Sim, para que pudéssemos -
nós poderíamos fazer isso,
e isso seria declarar - o que isso faz?
>> Eu acho que seria declarar uma matriz
de, como - de -
oh, você não precisa do i - oh,
sim, você definitivamente não precisa do i.
Você declara uma matriz de caracteres
s de comprimento.
E então o que Sam está dizendo é que
esta linha 10 - deixe-me colocar um pouco de espaço entre ele eo resto para que possamos isolar-lo -
esta linha 10 seria declarar uma matriz
de caracteres, strlen pena (s) deles,
mas nós realmente precisamos do i,
ea razão precisamos do i é porque precisamos dar a matriz um nome;
caso contrário, não teria uma maneira de se referir à matriz no final do código.
>> Então, isso aqui é o nome da matriz
e no interior é o comprimento.
Isso nos dará uma matriz,
mas isto é - mais uma vez, esta é uma declaração.
Não é uma tarefa, não é uma inicialização.
Se declarar esta matriz como este,
na verdade existe nada no conteúdo da matriz.
É apenas lixo - o que está lá dentro.
E, como dissemos,
nós realmente não precisa mesmo de fazer esta conversão,
porque já podemos tratar string s como uma matriz.
Eu sei que nós estamos correndo um pouco longo no tempo,
mas eu quero apenas realmente rapidamente chegar a este loop
e mostrar-lhe como acessar os caracteres individuais na matriz,
porque isso é fundamental para a nossa missão.
E então vamos deixá-lo de lá ir.
>> Então, aqui, nós temos um loop
que parece quase bom.
O que não é bem quase lá?
What's - o que não está certo sobre isso por laço?
Não >> chaves?
Não chaves, por exemplo.
Quero ter certeza de que temos o corpo do laço com chaves.
Oops, não cinta praça!
E qual é a próxima coisa que nós precisamos fazer com este ciclo?
Se eu tentar executá-lo,
o que é esse erro que eu recebo?
Eu recebo todos esses erros - Eu tenho que inicializar i.
Grande.
Então, isso vai ser um loop - isso não é muito lá,
mas está ficando muito perto.
Este código que pode correr,
construir, um erro ainda ocorre.
Por que ele ainda está reclamando,
dizendo que a expressão não é utilizada,
e isso é porque esta linha não faz nada.
Nós não armazená-lo em qualquer lugar, nós não salvar o resultado.
Onde devemos estar salvando esse resultado?
>> S ou i?
Exatamente, e sintaxe este funky,
este está com os colchetes
significa acessar o caractere i de s.
Isso vai ser algo que é realmente importante para a atribuição.
Infelizmente, vamos ter que parar por aqui,
para que a seção Sebastian pode entrar,
mas estou feliz de ficar fora e depois vai tirar alguma dúvida.
Por isso, agradeço a vocês por terem vindo.
Isto deve agora fazer o upload, construir, executar.
Podemos introduzir uma cadeia como "Olá"
e imprime "QOX".
[Risos]
>> Assim não chegamos lá, mas em movimento, ficando para os loops!
Obrigado por ter vindo, e eu vou estar fora.