[Powered by Google Translate] [♪ ♪ Buzzing]
Entón, para presentar-lle o que eu teño na pantalla;
é unha das ferramentas que realizamos durante o verán;
é chamado CS50 Spaces,
e é a nosa aplicación colaborativa de codificación
que nós estamos indo para usar en seccións.
É moi legal.
Algún de vós xa viu CS50 carreira aínda?
Déixame sacar a que noutra pestana.
Run.cs50.net
Así
se vai para run.cs50.net,
podes ver este é un navegador no seu camiño para
En realidade, o código - escribir código C,
e despois executa-lo,
por iso tanto o compila, executa-lo, a continuación, retorna a saída para vostede,
por iso este é un tipo de unha forma legal para probar
con parte do código que David vai máis en conferencias
e nós damos a en ti en conxuntos de problemas
sen realmente ter que dimitir do aparello.
>> Entón, o que fai espazos que é diferente do que
se eu volver a esta guía,
Espazos é CS50 carreira, como ve aquí,
mais, se cambiar sobre e mirar para o outro lado da ventá,
ve á dereita Eu son a única persoa neste espazo,
pero o que eu vou facer é pedir vostedes para unirse a este espazo comigo
e todos nós imos chegar ao código na mesma xanela pequena,
partes de código co outro,
e falar sobre as diferenzas entre o noso código.
Entón, é un tipo de cousa legal -
para unirse, se visitar este enlace aquí arriba
que eu destaque,
pode só escribir apps.cs50.net/spaces/vqcspSnO.
>> Todo ben, entón, para comezar,
Vou dar-lle un pouco de unha visita a este.
Nós imos facer algunha codificación idiotas con el en primeiro lugar,
só para que todo o mundo medio que queda unha sensación de que é como,
pero o que eu fixen -
ou o que eu vou facer aquí é -
Vou incorporarse o código que eu teño escrito aquí,
que, como se ve agora é baleiro;
el non fai nada.
É só o código tarxeta de caldeira, imos chamalo.
Con un pouco de cousas a facer comentario.
Vou gardalo por bater este botón Gardar.
E o que iso fai é
destacouse aquí brevemente - que a revisión caixa gardar verde,
e agora, se buscar por min no espazo,
premer no meu nome,
podes ver que eu teño esta revisión aquí,
e fai clic sobre a revisión,
vai subir este código no seu espazo, tamén.
>> Entón todo o mundo ten cargado este código no seu espazo?
Todo ben, se non ten, vai adiante e facelo,
e entón o que quero que vostedes fan neste pouco a formar parte
é escribir un pouco sobre si mesmo usando printf,
así, por exemplo, eu ía escribir
printf ("O meu nome é Nate");
e entón eu ía escribir
"Eu me forma en 2009
de Stanford "
e gustaríame escoitar sobre
en que ano está na escola,
se está na facultade ou a escola de negocios
ou outra escola de Harvard,
o que está estudando se se coñece aínda,
se non é coñecido, que é totalmente legal.
Eu non decidir ata que eu estaba atrasado no meu segundo ano.
e entón eu tamén quere saber
ningunha tolemia que quere me dicir ou
algo sobre a clase ou simplemente calquera outra cousa.
Cando termine de escribir que, co seu printf pouco,
se vai gardar a revisión ou mellor
primeiro asegúrese de que pode executa-lo
e que mostra exactamente o que quere imprimir,
e entón ir adiante e salva esa revisión
Revisión usando o botón Gardar, este cara primeiro pouco máis aquí,
e nós medio que pasar e facer unha pequena introdución desa maneira.
Polo tanto, ten que só ten que apertar o botón Play,
que está aquí enriba na esquina superior esquerda,
por iso este botón Play no ángulo superior esquerdo vontade
envíe o seu código fóra para o noso servidor onde está feita e despois executado.
Entón, o que é medio tolo por iso é
este código realmente non está sendo executado no seu ordenador;
está realmente a ser enviados a través de Internet.
>> Como vai iso, Charlotte?
>> I - ben. Eu - Eu creo que eu son
tendo dificultades de garda-lo
no servidor de tal forma que podo - eu podo executar o programa.
E entón, cando intento executar, el di que hai un erro.
Declarado como un virus, o que non está aí máis.
Oh, imos ver, pode bater Gardar de novo?
Eu vexo iso na pantalla.
Dereito >>, todo ben, entón iso é o que eu teño.
E eu non sei por que non me deixa executalo.
Ah, ok, desculpe.
Podes explicar por que - o que estaba mal - o que non foi traballar con el?
>> Si, porque eu non vin que había unha última liña, onde aínda hai unha variable
que non declarara que eu non tiña intención de estar alí.
Si, perfecto!
>> Agora, se eu garda-lo, eu creo que debe funcionar.
Agora que xa salvou, funciona; impresionante.
>> Entón, si, coma nós atravesamos -
Entón, o que estaba acontecendo,
Eu só vou repetir isto para a cámara.
O que estaba acontecendo era que esta variable s
foi deixado en post - Eu suponho que eliminar algunhas outras cousas
onde declarou como,
e por iso esta foi xogar cousas fóra e non estaba permitindo que executa-o.
Polo tanto, este é exactamente o que queremos facer na sección
é que as persoas tentan escribir pezas diferentes do código,
recompila-lo, ver o que funciona, ver o que non fai,
e despois medio que falar sobre estas cousas, porque son puntos de disparo que
Eu aínda atopar,
Eu aínda - Fago moitas cousas bobas todo o tempo,
e eu non sei por que non funciona,
entón imos tirar revisión Charlotte 3,
e imos executalo.
>> Entón, cando executar, agora que eu teño o código dela aquí,
Podo aumentar o zoom, prema Executar,
envios iso, constrúe, executa,
di que foi con éxito, e eu rolar para abaixo,
ver Charlotte é un Júnior na Adams House,
psicoloxía, secundario na economía; impresionante.
Gran para coñece-lo!
Impresionante.
Ok, seguindo adiante, imos para Daniel,
ir revisión 3,
compilar, executar;
por que non conte-nos un pouco sobre ti, Daniel?
Chama-me Dan >>.
Eu estou indo para a escola de negocios a través de vostedes,
e eu estaba na Mariña antes aquí,
e iso é todo novo para min, entón si.
Non se sinta mal, eu son 30 e eu non sei nada destas cousas.
Awesome; grazas, Dan!
Todo ben, temos outro Daniel.
Vai por Daniel - vai presentar, Daniel?
>> >> Claro, eu son o Daniel.
Eu son un estudante do segundo ano Mather agora.
Estou me concentrando sobre o goberno,
pero eu quería levar CS50 porque xa oín excelente críticas sobre a clase
e eu nunca tente CS antes.
Desc ata aquí e amosar iso - cool.
Seguindo adiante, Jared.
Como vai iso?
>> Bo, como está?
Como podes ver, eu son un concentrador de filosofía júnior en Eliot,
orixinalmente do sur de California,
e eu estou interesado en tomar CS50 porque me gusta da lóxica de que,
e parece moi legal de facer as cousas no ordenador, entón.
Awesome; no sur de California, onde está vostede?
>> Aproximadamente unha hora de [inaudível], unha pequena cidade [inaudível].
Ah, si, meu pai é de Redlands.
Cousas legais.
>> Todo ben, Jimmy, como vai, Jimmy?
>> Bo, como está?
Indo moi ben!
Conta-nos sobre si mesmo.
>> Eu son un calouro, e eu non estou totalmente seguro de que estou formando en
pero eu estou medio inclinado para a economía.
Como Daniel antes de min, eu nunca tiña feito calquera CS, pero soa moi legal.
Son orixinalmente de Chicago.
Impresionante. Entón confía a súa impresión aquí.
Eu quería preguntar, fixo iso de impresión como esperaba?
>> Non, eu esquezo de imprimir unha nova liña.
En realidade, eu esquezo que, cando estaba escribindo a miña cousa
, Por primeira vez, tamén.
É un tipo de dor que lembrar de poñer os manualmente.
Sería bo se só sei que é o que quería.
>> Ok, Kelly.
Guau, temos 2 Kellys, 2 Daniels, 2 Kellys.
Entón Kelly - vai por Kelly Ren?
Ok, impresionante.
Ou Kelly, quero dicir.
>> Entón, si, por iso estou Kelly.
Eu son un estudante de segundo ano en Pfoho.
Recibín un correo-e hoxe, que eu aínda teño sete semanas para declarar a miña concentración,
entón eu estou tentando non pensar sobre iso,
e eu gusto de levadura, carreira e craisins.
Eu non teño experiencia con máis de CS;
Aprende a construír sitios cando eu era moi novo,
pero eu creo que eu probablemente me ensinou mal unha morea de veces.
Espero aprender un pouco máis
e - si.
>> Awesome; ben, grazas.
Imos a outro Kelly;
Eu non teño nada - dixo algo aquí?
>> [Inaudível]
Aí está!
Sweet!
>> Todo ben, entón eu son Kelly.
Eu son un estudante de graduación do primeiro ano.
Estou formando en mente, cerebro Educación e.
Eu me forma en Franklin & Marshall College en 2008
con especialización en psicoloxía e socioloxía
e un menor en francés.
Estou levando CS50
porque eu estou interesado en obter un doutorado en neurociencia
e eu sinto que iso irá me axudar a entender as tecnoloxías que están sendo usadas.
Impresionante.
Seguindo adiante, Mikaela.
É que a pronuncia correcta?
Ok, impresionante.
>> >> Son Mikhaila.
Eu son un estudante de segundo ano en Kirkland House,
e estou me concentrando en Enxeñaría mecánica.
Eu realmente me gusta de ciclismo, construíu unha bicicleta este verán.
Estou levando CS, en realidade,
como un requisito de concentración,
pero xa sabe, eu creo que aínda é tipo legal de clase de enxeñaría.
Awesome - construíu unha bicicleta este verán?
Si >>.
Guau, como o marco e todo isto?
>> Uh-hunh (afirmativa).
Guau, iso é moi legal.
>> [Chat fóra da cámara inaudível]
[Risas]
Si, foi así por moito tempo.
Vostede non sabe, non?
Ben, legal así grazas, Mikhaila.
>> Todo ben, Missy.
Missy >> meu nome, eu son un calouro,
o que significa que eu non sei de nada!
Eu quero me concentrar en astrofísica.
En CS50,
Eu sinto que vai certamente axudar con iso.
Un feito estraño sobre min é que eu son un bombeiro nacional certificada.
Wow!
Como isto aconteceu?
>> Eu participei unha academia
e pasou por un inferno para unha morea de semana
e teño a miña certificación.
Guau, parabéns!
Isto non é pouca cousa, con certeza.
Ok, entón agora imos facer de min.
Eu son o seguinte na liña.
Eu - executalo.
>> Entón, meu nome é Nate.
Eu era clase de 2009 en Stanford.
Eu era un Sistemas Simbólicos principais,
que é semellante ao do, a concentración de Cerebro Mente Comportamento, aquí,
pero é unha especie de mestura de
ciencia da computación, lingüística, psicoloxía e filosofía.
Tipo de - si, unha morea de cousas estrañas, pero foi óptimo,
e entón eu fixen o meu máster en Ciencia da Computación alí, tamén.
Entón, eu son novo para Harvard este ano.
Eu realmente quería entrar no ensino.
Eu pasei os últimos catro anos na Universidade de Stanford TA-ing aulas de informática
e así por David me veña,
e eu vou estar axudando con CS50,
entón eu fago iso a tempo completo, eu non estou na escola de posgrao.
Foi divertido.
Esperamos que vai continuar a ser divertido, eu estou seguro que vai.
>> Todo ben, Sam.
>> O meu nome é Sam, eu son un estudante do segundo ano da facultade, de dereito, especificamente.
O meu maior será a historia da ciencia, probablemente, e ves secundario,
e miña cor favorita é o amarelo.
Non hai necesidade de xulgar nin nada, pero é unha boa cor!
E Stella.
>> Ola, eu son Stella, eu son un calouro na Grays.
Eu non teño idea o que eu concentrada no entanto,
así CS50 era só unha especie de forma aleatoria,
o que é interesante.
Curiosidade, Jimmy foi o primeiro amigo de Harvard meu,
porque dous somos de Chicago.
Cool, Graza e - que é suposta ser o único realmente bo, non?
>> Eu penso que [inaudível].
Ah, si.
[Inaudível / chat cámara-]
Ok, eu aínda estou aprendendo, aínda está aprendendo.
>> Entón temos outra cousa que é ben interesante aquí.
Si, eu estou pensando, vostede ten unha idea que está a suceder aquí?
Vostede sabe como interpretar isto?
>> Eu debería ser posto a punto e coma despois de cada liña.
Isto é un tipo de dor.
Ás veces, esas comas pode ser unha verdadeira dor de rastrexar.
Así, verifícase que
o programa especial que estamos usando este ano para
compilar noso código C é chamado Clang,
eo motivo que comezaron a usar Clang este ano -
porque non usar ese programa no pasado;
usamos outro chamado GCC que é realmente popular -
Clang realmente lle dá mensaxes de erro que ten sentido.
Este di "esperar", "tras a expresión",
e aínda di que a expresión despois de que necesitaba un punto e coma.
Entón resolve-lo?
>> Si, agora.
Impresionante, deixe-me saber e nós imos arrancala, e nós imos executalo.
Pero, si, poñer esas comas in é un tipo de dor.
>> Eu fixa-lo, entón eu creo que debe funcionar.
Awesome - revisión 3.
Que se parece con el.
Todo ben, entón agora executalo,
alí vai.
Cousas legais.
>> Todo ben.
Entón, grazas por facelo.
É moi bo saber vostedes.
O que imos facer agora é pasar ao seguinte bit pouco
medio de mergullo nos problemas de sección
que veñen do conxunto de problemas a partir desta semana
e nós faremos o que para a maioría das seccións
para o resto do período,
e entón imos gardar os últimos 15, 20 minutos ou máis
para falar sobre o problema a si mesma
e despois só calquera outras preguntas que ten, en xeral, sobre a clase.
Dito isto, o que realmente quero facer
é que todos os que participan
usando o material Spaces,
xogando en código, xogando en suxestións,
e falando cando cousas como esa ruptura
ou non funcionan, só porque estas son cousas que
Sei que me deparei
cando comece a codificación,
e foron realmente un pouco frustrante ás veces
porque se é como dúas horas antes do seu conxunto de problemas é debido,
así - só para divulgación,
Eu non iniciar a programación ata que eu estaba no segundo ano na facultade.
Era unha especie de esta cousa estraña, descoñecida
que eu oín foi kind cool
e eu tamén oín que isto podería ser unha verdadeira dor na bunda
se perder un punto e coma e que é o único erro manter o seu programa de traballo
e mantendo-o ir durmir,
de forma definitiva,
se ten preguntas como esta,
se ten problemas así, deixe-me saber,
porque quero facelo unha boa experiencia para vós.
>> Así que todos a descarga do conxunto de problemas aínda?
Medio que sabe onde está? Okay.
Entón imos para cs50.net, porque eu non telo nesta conta,
puxar arriba os conxuntos de problemas,
tire conxunto de problemas 2, e imos ollar para a edición estándar hoxe.
Imos tirar cara arriba a especificación aquí.
Rolar para abaixo.
Entón, imos comezar a ollar para esta sección de preguntas.
Vós xa asistiron estes shorts aínda?
Okay.
Polo tanto, hai shorts en loops,
que está feito por Tommy, un dos compañeiros de ensino cabeza.
Hai un en ámbito,
Eu creo feito por outro compañeiro de ensino chamado David
e despois nunha cifra de Caesar tamén feito por David.
Son moi legal.
Vós xa foron asistir os seus calzóns ata agora?
Como foi eles?
Útil? Ok, bo saber.
Se eles non están, pode dicir iso.
Pero antes de que ti,
Vós xa miraron para estas preguntas
en todo?
>> Imos falar sobre iso un pouco.
Entón, nós introducimos ao longo das dúas últimas semanas
en charla
un certo número de ciclos diferentes.
Hai o lazo é,
do loop while, e entón o loop do-while,
e na clase, temos falado moito sobre
como eses lazos son todos
bastante similar en moitos aspectos,
e pode facer moito das mesmas cousas con un loop while
que pode facer un loop para.
Vostede só ten que tipo de empregar as combinacións certas variables e tal.
e así mesmo
a distinción real entre todas as laçadas que
ás veces son máis útiles
para usalos dunha soa vez do que noutro momento.
>> Así, por exemplo,
o loop while diferindo dun loop do-while.
Será que todo o mundo senten que teñen un bo control sobre cando
un do-while é máis
útil ou cal é a diferencia?
>> Creo que a diferenza é un loop do-while
corre - Eu non sei ben o que é a terminoloxía,
pero a serie de funcións dentro do loop.
Eles automaticamente - que fai as súas carreiras polo menos
antes de que verifica a condición ou o loop while será executado só cando
continuamente executado - ou non a condición está satisfeita.
Si, iso ten sentido?
>> Imos dar un ollo a un pouco de código.
Entón, só para repetir a pregunta,
ou a resposta, en vez;
a resposta foi que
un loop while pode comprobar a ver se a condición
que se especifica se responde
antes de ser executado o corpo do lazo, por primeira vez,
mentres que o do-while será executado automaticamente o corpo do loop,
é o que chamamos - é estraño terminoloxía,
pero se eu dicir calquera cousa que non ten sentido, deixe-me saber -
o corpo do lazo é que o material que se pon entre as chaves.
E en un loop do-while,
que o corpo se executar polo menos unha vez,
e entón a condición é comprobado antes de ser executado cada vez consecutiva.
>> Entón, en realidade, Sam,
lle importa escribir un simple loop while
en espazos?
>> Como clasifica como de
facer un novo ...?
Eu simplemente borrar todo o que ten aí.
Si, só limpa-lo.
>> Ben, eu creo que eu estou tendo esa -
que quere, dun tempo ou quere ...?
Si, só que un pouco verdade, imprimir algo.
E imos ver.
Alexander, podo entender que non presentei.
>> Oh, iso é bo.
Ti - pode codificar un loop do-while para nós?
>> Si, eu vou tentar.
Todo ben, imos retirar estes na pantalla,
de modo que medio que ten unha alza sobre cales son as diferenzas.
>> Entón, aquí está o que Sam fixo.
El ten un número enteiro chamado i
que é inicializar a 17.
A continuación, el di que mentres (int i = 17)
printf ("O meu nome é Sam.");
Entón o que ocorre cando executamos este código?
Hai un erro, que é o que o erro dicir?
Imos tirar-lo e falar sobre iso.
Houbo un erro, que di.
Imos rolar para abaixo.
Entón, iso nos deu ese erro, e el dixo,
"Ei, eu esperaba unha expresión."
Isto é medio misteriosa.
Si, entón exactamente - e, de novo,
haberá un outro pequeno erro que vai coller só un segundo.
Pero este é un destes tipo de cousas estrañas terminoloxía,
así que esta int i = 17
non é unha expresión.
O que parece que está facendo é que é
declarar un enteiro chamado i
e definíndose a igual a 17
ou mellor, poñendo 17 en que int chamado i.
E iso non ten sentido
no contexto da presente circular.
Ten sentido, como veremos,
no contexto dun loop for, porque declaracións de loop que comezar
que, por int i é igual a algo
e segue.
>> E tamén -
corrixir algunha cousa, todo ben.
Aquí vai; impresionante.
Entón, agora as cousas parecen un pouco diferente.
Un par de cousas cambiaron.
Pode dicir o que as cousas cambiaron?
>> Tirei o int, entón non hai ningunha declaración [inaudível] en vez de unha asignación.
O sinal dunha igual, eu coloque dous sinais igual, o que significa un igual.
Impresionante.
Si, entón o que Sam fixo foi que tirou o int
que estaba aquí antes,
por iso, se eu só ollar para iso - que é o que era antes, dixo int,
que estaba declarando-lo - por tanto, levou tipo.
Hai int, cadea, char, short,
Estes son chamados tipos.
Entón colleu o tipo
e, a continuación, previamente,
el tiña só o único signo igual
eo que dixo foi problemático sobre este foi
cando ten un sinal de igual,
que é un operador de asignación.
Isto non está probando ou non 2 cousas son iguais.
Isto é realmente definir algo igual a algunha cousa.
Estamos poñendo o número 17 na variable i.
Entón, para facer este tipo de comparación,
tes que usar o dobre igual,
que é un tipo de cousa estraña
pero é un erro bastante común.
Entón, outra cousa que eu vou apuntar, se non lle importa,
é que, en
nosa función aquí na principal int,
vostede ve que o corpo da nosa función
é desprazado a partir do lado esquerdo
por 4 espazos ou unha guía.
A razón pola que iso
é só para facilitar a lectura.
Como podes ver na alza de Sam mentres aquí,
non guión en todo,
e que non afecta a función do código.
Esta será executado exactamente o mesmo.
>> Así, por exemplo, se chegamos ata o cumio aquí
e preme o noso botón Play, que vai construír,
que vai executa-lo,
eo que vai ocorrer?
Por que aínda din que correr?
>> Porque vai estar repetindo ola.
Exactamente, e por que estar repetindo unha ola?
>> Porque o enteiros nunca cambia, por iso é sempre 17.
Si, exactamente, así que
imos ver, despois - me lembrar do seu nome?
Jimmy. Entón Jimmy dixo que
a razón que esta segue a repetir ola unha e outra vez
é porque esa condición é sempre verdadeira.
Nós nunca cambiamos o valor de i.
Nós nunca cambiar o contido do que está almacenado nesta variable.
Polo tanto, neste punto temos este erro
seu programa de saída xerado moito,
e desprácese cara abaixo e tipo de ollar para o que está a suceder aquí,
podes ver que é Ola, ola, ola, ola, ola, ola, ola todo o camiño.
Impresionante.
>> Entón tipo de volta ao punto orixinal
que ter o repregamento aquí
no corpo do lazo mentres non afectou nada.
O programa aínda correu moi ben.
Normalmente, para un bo estilo -
e iso é algo que buscamos nos seus conxuntos de problemas -
pedimos-lle que este guión por catro espazos, que se pode facer
só premendo a tecla tab
ou manualmente, poñendo en catro espazos si mesmo.
Cool, ok entón imos volver e mirar para
Alexandre facer agora.
Só medio >> tendo un pequeno problema.
Ok, así, imos traballar con el.
Isto é legal?
Si >>.
>> Ok, entón aquí imos nós.
Este é o código que Alexandre escribiu.
Vai por Alex - ok.
Entón, aquí está o código que Alex ten escrito.
Entón, nós temos a nosa declaración de inicio aquí,
e despois temos esta variable enteiro chamado i
sendo declarado aquí.
Temos unha instrución do
e, a continuación, o corpo de novo con estas claves,
por iso este é o corpo do do-tempo -
deixe-me zoom e por iso é máis lexible -
e no corpo, estamos intentando imprimir "este é o corpo",
i + +,
para incrementar o contido de I e facelo
ata eu chega a ser 3,
e entón o noso programa remata.
>> Entón o que ocorre cando executamos este programa?
>> Eu esperaba un identificador.
Ok, entón construír, executar erro ocorre.
O que ocorre?
Nós rolar aquí,
temos esa cousa un tanto enigmático ollar,
espérase coma tras a declaración de nivel superior.
Isto é medio raro.
Alguén ten unha idea do que pode estar a suceder?
Medio raro, si.
>> [Inaudível] ser declarada fóra dos parénteses?
Entón, non que se aplican, entón cando usar parénteses?
Entón, el declarou este cara fóra da cal parénteses?
Ah, estes faces - as claves?
Si >>.
Si, exactamente.
Así, verifícase que
realmente non pode declarar unha variable aquí coma este.
O que podería tentar facer era -
corte-lo de alí -
pode poñelas dentro claves aquí
ou outra alternativa
e poñelas completamente fóra.
E así estes - dependendo de onde vostede realmente poñer a declaración
desa variable enteiro,
pode obter dous tipos moi diferentes de variables;
cando está fóra do principal,
é o que chamamos dunha variable global.
Que está fóra do ámbito de calquera das funcións -
non é dentro dunha función -
mentres que se nos poñelas dentro principal,
como aquí, entón é chamado de variable local,
porque é lugar para o ámbito da principal.
E imos falar un pouco máis sobre o que as diferenzas son
entre os dous tipos e por que usar diferentes tipos de variables,
pero por agora,
pode só manter todas as variables locais,
porque non temos ningunha necesidade de variables globais.
>> Ok, entón iso é unha cousa certa alí.
Imos tentar executar de novo, ver o que acontece.
Executar, obter outro erro.
Zoom un pouco, que é o que imos chegar?
Recibimos este paréntesis esperado tras o / while.
Algunha idea do que está a suceder? Dan?
É o tempo >> parénteses despois e despois -
Eu non sei se precisa redeclare int,
pero facelo mentres (i <3).
Exactamente, si.
Así, verifícase que Dan é exactamente correcto.
Nós non precisamos de poñer este tipo aquí de novo.
Podemos, en vez do tipo de matar
e só facelo.
Todo ben.
Vou saír do zoom, proba unha vez máis.
Olle para iso, roda exitoso.
Se rolar para abaixo, "este é o corpo" impreso 3 veces.
Iso é moi doce.
Ben feito, ben feito, persoal.
Ben feito.
Como é que isto vai tan lonxe?
Ritmo decente?
Ok, legal.
>> Entón, como nós especie de volta á cuestión orixinal,
nós - e agora vese a diferenza,
vostede ve que neste loop do-while,
a condición vén para rematar.
Entón, como o ordenador le o programa
desde programas en C son executados tipo de nesta orde secuencial,
onde literalmente comezar coa primeira liña de inicio,
e, a continuación, executar a liña 6, liña 7, liña 8, liña 9,
liña 10, liña 11,
todo isto na parte superior aquí
vai realizar unha vez
antes de sempre probar esta condición ver
ou non eu - ou o contido de i, si -
son menos que o número 3.
E soamente se, unha vez que comeza a liña 12,
o contido de i son menos que 3
que realmente volver-se para a liña 7
e repita o proceso,
e, entón, comprobar a condición de novo e de novo e de novo.
>> Así, podemos comparar esta
con - o zoom cara a fóra,
desprácese ata a versión de Sam,
imos ollar para iso, lixeiramente modificado para que el non é máis un loop infinito -
onde se ampliar,
vemos que, como este programa é executado,
Vai primeiro declarar int i,
definir o contido de eu ser a 0,
e, a continuación, el alcanza a condición de cando o primeiro bucle,
Polo tanto, neste caso, este corpo, este printf ("ola") e i + +
non vai mesmo facer
a menos que i é realmente menor que ou igual a 2.
Polo tanto, se i é 3, por exemplo,
definir esta aquí
igual a 4 - ou eu vou facer 3, porque eu dixen 3 -
e despois executa-lo,
vai construír, vai executar todo ben,
pero non vai realmente imprimir calquera cousa,
porque fallaron no exame para o primeiro caso.
Así, na clase, tipo de falou sobre por que estes lazos do-while
son útiles, por veces,
e por que ía usalo en vez de un loop while.
>> Están alí - vós ten algunha suxestión
por que un do-while pode ser máis útil?
>> Ben, eu creo que do-while é se quere a entrada do usuario,
porque desa forma podes deixar los
poñer algo en unha vez máis, se é correcto,
que pode pasar para o resto do programa,
pero se non está correcto, entón continuar a avisar o usuario
ata colocar a entrada á dereita.
Si, exactamente - exactamente,
así un do-while é útil
porque ao pedir a entrada do usuario
porque precisa para obter a entrada do usuario antes que poida realmente comprobar.
Así, en pset 1, en pset 2,
onde está solicitando a entrada do usuario moito,
iso é unha cousa útil para usar
en vez de só un simple loop while.
Se usar un loop while, pode facer a mesma cousa -
pode facer a mesma cousa con un loop while
como fai con un lazo do-while.
Vostede só ten que tipo de este proceso duplicado
onde comeza a primeira entrada e, a continuación, iniciar o seu loop while.
Considerando un do-while, vostede só ten que escribir unha vez
e é moito máis limpo.
>> Todo ben.
Algunha pregunta?
Ten sentido?
>> O retorno 0 - que é só unha especie de tenda ou é -?
Si, entón podemos -
así, imos cubrir este un pouco máis tarde
pero verifícase que
este 0 retorno que poñemos
ao final de todo o tempo de inicio -
pode kind só toma-lo como algo que facemos
por agora.
O que nós comezamos a falar sobre funcións
tipo de finais da semana pasada e de novo esta semana
é que unha función
ten entradas que son esas cousas dentro dos parénteses;
Estas son dúas entradas, os nosos argumentos ou parámetros,
o que eles están chamados tamén a nosa función principal,
e, a continuación, unha función produce unha saída
que chamamos un valor de retorno.
E o valor de retorno no caso da principal está presente int,
este enteiro,
e da forma que contar unha función: "Ei, iso é o que a súa saída
vai ser ", é con esa palabra" retorno ",
a palabra clave, en vez diso,
e así principal retornando 0
ou principal saída 0
é estándar en programas C
porque retornando 0 medios principais que
"Ei, todo executado co meu programa moi ben."
Se fósemos poñer algo diferente de 0,
como un, por exemplo,
que é usada para dicir quen foi este programa
que algo deu errado.
Así que temos máis implicado con cousas ao longo do semestre,
se está sempre a necesidade de dicir,
"Oops, vostede sabe, algo deu mal con este programa",
en vez de ter o meu programa falla, quero notificar
o corredor do meu programa que algo deu mal,
pode utilizar o valor de retorno,
como nós o chamamos, iso non é 0.
>> Entón, nós imos cubrir ese un pouco máis
unha vez que entrar en funcións.
Este tipo de ten sentido?
Okay.
Funcións son unha especie de estraño -
Eu creo que para as persoas que teñen lotes de fondo de matemáticas,
vén un pouco máis facilmente,
especialmente se ten un pouco máis abstracta fondo de matemáticas
e está afeito a falar de funcións
e todo este tipo de cousas.
Pero nós imos tentar cobre-los
e ir ben devagar e como eles veñen para arriba.
Do mesmo xeito, este argc int todo,
char * argv [],
por agora, tamén pode ter que tarxeta de caldeira como.
Nós comezamos a cubrir os un pouco na charla
Cando falamos sobre os argumentos que se pasan para programas en liña de comandos,
pero nos seus conxuntos de problemas e dos seus programas,
é totalmente ben só para escribir baleiro e mantelo simple.
E o que iso significa que baleiro
"Ei, principal non vai aceptar calquera entrada;
este é só un programa, nós imos só facer.
Non imos dar calquera información adicional
cada vez que inicia-lo en execución. "
Entón, por agora, pode facelo;
Tamén pode ata omitir o 0 retorno
ao final do programa e eles van correr moi ben,
pero eu recomendo que só manter dentro
En un par de semanas, imos comezar a especie de
tirar cara atrás a tapa un pouco e entender máis sobre
todos estes diferentes pequenas partes móbiles.
>> Todo ben, agora imos falar sobre a nosa segunda pregunta aquí.
Entón, o que "identificador non declarado" xeralmente indican
se producida polo Clang?
Creo que podería ver que xa hoxe.
Alguén pode dar un resumo do que significa isto?
Imos ver, Kelly - un dos Kellys.
Entón >> -
Si, o que fai -
>> Eu creo que cando, como, non declarar as variables e tentar usalo.
Si, exactamente, exactamente.
Entón, se xa viu esa saída
cando intenta e compilar o seu programa,
só como Kelly dixo:
Isto significa que usou unha variable que non declarar,
por iso, se eu atrás para o noso espazo,
e eu facer algo así
printf (
"Ola% s")
e tentar encher ese s%
s cunha variable que non declarei en calquera lugar
e eu tentar executa-lo,
vai ver o que eu baixo este fondo aquí:
"Utilización de identificador non declarado 's'";
iso só significa que non declarar a súa variable.
A mesma cousa sucede se
ten X e intenta almacenar 7 nel
e eu non declarar X.
Eu recibín o mesmo erro:
"Uso de 'x' identificador non declarado".
>> Todo ben,
así a cifra de César, non sendo moi seguro,
Eu vou deixar vostedes asistir a este tipo, lonxe de entender o porqué,
e espero que despois de facer o problema desta semana definir
onde realmente escribir unha cifra de César, vai entender un pouco máis
sobre o que significa ser un seguro e inseguro -
ou non seguro, eu creo - inseguro é un pouco diferente.
A outra cousa é que temos esas outras cuestións aquí
sobre as funcións
e que unha función é,
e nós medio que falamos sobre isto, brevemente, cando falamos sobre valores de retorno;
para alguén que estivo na charla,
pode recapitular que foi a charla de hoxe?
Todo ben.
Imos ver, imos ter - alguén pode dicir o que é unha función?
Kelly?
>> Basicamente >> algo que deseñar enriba de algo que está escrito na biblioteca que é
máis complicado por alí, e entón acaba de escribir un pequeno formulario da mesma,
así como se está referindo a esa biblioteca, usando
todo o código que longa e [inaudível].
Si, exactamente, e entón quere engadir algo a que?
>> Si, eu penso niso como semellante ao concepto de fórmula matemática
onde acaba de escribir unha fórmula e, a continuación, pode conectar as variables en
e iso é o que unha función é [inaudível].
>> Si, por iso temos un par de respostas aquí
que son ambos moi bos e en Dereito.
Non está referíndose ao código que foi escrito nalgún lugar biblioteca
que é máis complicado
e entón pode recorrer a este código
e realmente usalo por só escribir o formulario curto que -
ou mellor, o seu nome -
e despois hai tamén a comparación cunha fórmula matemática
ou física, todo ese tipo de cousas
onde ten unha fórmula
e entón pode conectar
as variables para a fórmula
para, a continuación, obter o resultado da fórmula,
así que pensa sobre iso como como a ecuación cuadrática.
Imaxina se, en vez de ter que aprender sobre
o que a fórmula cuadrática é na aula de matemáticas,
só tiña un programa de calculadora pouco que fixo iso por ti.
Alguén usar programas de calculadora nas clases de matemáticas na escola?
Si, as clases de física?
Onde pode simplemente dicir: "Ei, fórmula cuadrática.
Estas son as variables que quero de entrada.
Agora me dea a resposta. "
Ese é o tipo que unha función é.
É un xeito de nos
tipo de gravación, como un pequeno programa pequena sub
dentro do noso programa máis
e usalo unha e outra vez
de modo que non hai que copiar e pegar o código,
podemos darlle entradas diferentes e obter resultados distintos,
é super accesible
cando está tentando escribir programas diferentes en momentos diferentes.
>> Así, por exemplo, unha función que estamos usando máis e máis e máis unha vez
ao longo do curso é printf.
Printf é ela propia unha función
e verifícase que el é realmente un moi longo e complicado,
desagradable, funciona a escribir.
Tan sinxelo como parece-nos
para imprimir material para fóra da pantalla,
porque todos nós acabamos de facer que, a comezos de hoxe sección,
verifícase que é, en realidade, vostede sabe,
un bo par de centos de liñas de código.
Non é algo que eu xamais vai querer escribir, con certeza,
pero temos que usalo todos os días, que é legal,
entón temos para compartir cos outros,
con programas diferentes,
por iso imos estar mergullado máis funcións;
polo de agora, non estamos -
a única función que imos estar escribindo e principal.
Inicio propio é tamén unha función,
e podes ver que ten a súa saída,
súas entradas, como falamos,
e entón o seu nome, que é principal.
Principal é unha especie de - é unha función especial alí.
No seu programa de C, ten que haber unha función principal,
e así, por agora, nós medio da escritura omitido
o prototipo, ou a declaración de inicio.
Xa que para ti,
e tivemos que encher tipo de espazos en branco.
>> >> Así, para o conxunto segundo problema, que non precisa
gravala-lo en función de segundo?
Eu non creo.
Eu creo que é todo aquí.
Si, entón cifra de Caesar,
non ten que, non parece,
e Vigenère, non quere,
así - e non é que nunca realmente ten que escribir
unha función, non?
Vostede chama sempre poñer todo o seu código dentro principal,
e moitos programadores facelo.
A medida que avanzar,
comezamos introducindo funcións como forma
para limpar o seu código,
para facela máis elegante,
no caso de ter tarefas - tipo como cando falamos sobre loops,
como ás veces hai cousas que quere facer de novo e de novo e de novo,
e ten o tipo de forma inxenua -
ou o que, moitas veces, chaman "espantalho" solución,
é só copiar e pegar unha e outra vez -
pode facer a mesma cousa con funcións que simplemente copiar e pegar
o mesmo código e outra vez,
pero que incha o seu código -
acaba facendo o código moi longo -
e tamén está un pouco confuso,
e, entón iso significa que non é capaz de gustar -
Se quere usar o código de novo en outro programa,
Tamén está preso copiando e colando-o de novo,
entón unha das cousas que imos falar é
tipo de deseño e estilo dos seus programas,
e así, cando ten sentido para o tipo de
paquete de algo e poñelas como unha función separada,
Nós encouraged vostede a facelo,
e iso é algo que, de novo,
non hai ningunha regra dura e rápida.
Nós raramente dicir que ten que escribir unha función chamada iso,
pero é unha desas cousas que acaba de desenvolver ao longo do tempo
como escribe máis e máis programas.
>> Algunha pregunta?
Ok, entón imos agora
volva ata este cara aquí,
entón eu estou aínda nesta sección de preguntas.
Nós conversas sobre todos estes diferentes,
o que é unha función, por que escribir funcións,
cando pode simplemente copiar e pegar?
Espero que teña convencido de que escribir funcións é unha cousa boa.
Entón agora imos pasar este programa MySpace,
e nós imos gastar un pouco de tempo facendo isto.
>> Entón, imos ver,
podo ter alguén ler isto para min?
Imos ter Mikhaila - vai ler isto por nós?
>> Quere dicir cando volve MySpace -
Backup cando o MySpace foi legal.
>> "Volver MySpace foi legal,
era toda a rabia de tipo coma este.
Quizais aínda é? Eu non estou seguro.
En calquera caso, utilizar o dispositivo CS50,
CS50 Run, ou CS50 Spaces,
escribir un programa que solicita ao usuario unha mensaxe
e logo, xera a mensaxe coa súa primeira letra maiúscula,
con todas as outras letras en caso de alternancia,
de acordo coa saída de mostra a continuación,
onde o texto en negra representa a entrada dalgún usuario.
Para simplificar, pode asumir que o usuario
vai só letras minúsculas de entrada e espazos.
Considero este problema unha oportunidade de practicar;
non vai ser invitado a presentar este programa. "
>> Awesome, grazas.
Así como Mikhaila dixo,
imos escribir un programa que myspaces seu código.
Entón, se algún de vós usan MySpace?
Algún de vós ten contas de MySpace?
Oh, yeah, yeah!
Foi moi legal.
[Risas]
Sei.
Encontros min.
Entón o que estamos intentando facer é escribir un programa
que atravesa
e capitaliza a primeira letra
e entón cada letra despois -
ou todas as outras letras despois, eu sinto moito.
>> Así - e podes ver neste exemplo,
é así que funciona o programa,
e por iso este é só dicir: "Estamos executando un programa chamado a.out.
A entrada que nós imos dar-lle
vai ser solicitado.
Non imos facilitar a entrada na liña de comandos. "
Se seguindo todas as conferencias
e escoitar os argumentos de liña de comandos,
ese é o tipo de onde os - que a sintaxe funk
na principal vén coa argc int, todo isto,
entón aquí non estamos a usar iso, non estamos lidando con nada diso.
Só imos conseguir este tecleados polo usuario,
e despois a liña esta segunda coa capitalización funk
é o que queremos que o noso programa para a saída.
>> Entón, en vez de usar o aparello ou executar, imos empregar os espazos,
porque temos espazos,
e así se vostedes faría
obter o seu código para algo coma isto,
entón eu estou indo para salvar esta revisión
só así ten a tarxeta de caldeira aquí
parecida con esta, int main (void), nada nel.
En realidade, o que imos facer é que imos simplemente borrar todo xunto.
Queremos unha lousa en branco,
porque non imos comezar a escribir código;
en vez diso, imos tentar escribir un pseudocódigo
o que realmente significa só que vai escribir algo que non é de código
que tipo de describe o que queremos facer,
medio como David fixo no primeiro día de clase,
ou eu creo que foi o segundo día de clase, cando fixo a demostración medias todo.
Vostedes lembran que - vendo as medias?
Joseph estaba alí tipo de escribir en inglés?
Entón, imos facer o mesmo.
>> Entón, cando comezar a escribir pseudocódigo,
Gustaríame comezar por ollar para o que a entrada será.
E eu doume un caso de exemplo,
así como "grazas polo add!"
E tamén eu escribir o que eu quero que a saída sexa,
que neste caso é algo parecido con iso.
E este tipo de dáme un bo lugar, como, comezando a pensar,
"Ok, quero tomar a liña 1
e quero transformalo en liña 2 ",
e que tipo de axuda a guiar o meu pensamento.
Este é un bo lugar para comezar.
Outra forma de pensar sobre iso, tamén, como medio que seguir adiante
e como fai iso nos seus propios programas, e
pensar sobre o tipo de como o que son os casos de punta para iso?
Cales son os tipos de escenarios estraños?
Cales son as entradas estrañas que podemos chegar?
E o que esas saídas deben se parece?
Por exemplo, unha entrada de estraño
sería un agasallo,
creando absolutamente nada,
como o que temos saída nese caso?
Algo que queremos pensar, tamén.
>> Así como unha pregunta,
o que podemos querer de saída?
Se non temos ningún entrada en todo, o que debe ser a saída do noso programa?
Nada. >>
Nada? Parece gran.
Entón, nós queremos estar seguro de que non estamos escribindo algo fóra
Se non atopas nada dentro
Cool. Okay.
Así
Vou chamar unha parella de persoas coma nós atravesamos
e só descubrir o tipo de como o que o algoritmo xeral é
e nós imos comezar a traballar tipo por iso xuntos.
>> Entón, imos ver. Missy.
Como pensas que ía comezar?
O que sería un bo lugar para comezar
se queremos transformar, digamos, na liña 1
na liña 2?
Podes tipo de só explicar-me, en inglés, o que está a pensar?
Non te preocupes co código.
>> Primeiro que eu faría sería para
tipo de usuario directo para lles dicir o que queiras.
Ok, entón, digamos,
"Ei, usuario. Quero
unha cadea "- incribles.
Entón imos escribir isto.
Preguntar ao usuario a unha corda.
Isto soa como un bo comezo.
Todo ben.
Imos pedir Kelly Ren neste momento.
O que sería de nós, entón quero facer a continuación?
Cal é o tipo do noso lado -?
Peto >> súa entrada e almacena-lo como unha variable.
Grande.
Entón recoller a corda,
almacena-lo nunha variable.
Entón, hai algo especial que queremos facer aquí?
Queremos comprobar a súa entrada
antes -?
Si >>.
O que podemos desexar comprobar?
>> Ben, dixo que non ten que comprobar se é un número, non?
Porque el vai asumir que é minúscula?
Si
>> Así, verifícase que - si.
Entón getString é garantía para voltar-nos unha corda.
El non vai voltar un número para nós ou algo así.
Pode haber caracteres díxito dentro desa cadea, con todo.
E aqueles, podemos ignorar como fixemos a capitalización.
Pero unha cadea baleira é totalmente ben,
entón o caso aquí en liña 4 e 5,
dereita, onde non hai entrada,
e poñemos nada como a nosa saída.
Non temos que preocupar-se sobre a certeza de que hai algo na cadea
ou que a cadea é de polo menos catro caracteres;
nada está ben.
Polo tanto, este é contrastado, por exemplo, con programas como os tostões que escribiu
onde tivo a certeza de que estaban recibindo números non negativos;
tiña que ter seguro que estaba recibindo o número correcto de días nun mes.
E como é que vostedes están facendo iso?
Como faría ese exame?
O que isto esixe que utiliza?
>> Do-while.
Loops de-while; outros tipos de loops, tamén, si.
Así, verifícase que non é necesario utilizar un circuíto, neste caso,
cando estamos pedindo unha cadea, que é unha especie de bo.
>> Todo ben, seguindo adiante.
Entón, Stella.
Pode contar un pouco sobre o que temos que facer a continuación?
Entón, agora temos a cadea, temos que almacenado nunha variable;
o que necesitamos facer a corda?
Necesitamos >> -
identificar o 2 -
Si, basta dicir que en inglés, que é incrible.
Identificar as >> [inaudível] capitais - ou, en maiúsculas.
Si, así que identificar cales son maiúsculas e minúsculas.
Non podemos maiúsculas e minúsculas-los ata nós identificamos cales.
Entón, imos poñer isto aquí.
>> Entón, só de pensar sobre este proceso,
como imos facer esa identificación?
Sábese, Dan?
Tipo do que nós - que ferramenta que tería que usar a nosa caixa de ferramentas?
>> Eu poñelas algunha maneira, como unha matriz ou cada liña
é a súa propia caixa pouco,
e despois maiúsculas-lo de alí ou non.
Ok, entón unha ferramenta que podemos utilizar é unha matriz.
O que temos que mirar para na secuencia,
porén, para descubrir - que tiña de ollar para os personaxes.
>> Entón tes que mirar para a lonxitude da corda?
Si, entón parte do que está a recibir a lonxitude da corda.
Só por curiosidade, o que imos usar para obter a lonxitude dunha corda?
Strlen >>?
Si, strlen, chamamos iso de "strlen"
Todas estas funcións de cadea, así strlen é unha función,
e é super útil, porque podemos usalo só para dicir,
Ei, strlen: Aquí está unha corda, me diga canto tempo é.
Na charla de hoxe, David falou moito sobre como strlen é aplicado,
o que realmente está a suceder nos bastidores.
Pero este é un dos moi super útil.
Existen outras que tamén están na biblioteca cadea,
como strcmp, que está escrito "strcmp",
o cal é usado para comparar cadeas unhas ás outras.
Os outros que ha empregar como strstr,
o que é bo para atopar cadeas sub e así por diante.
Para a maior parte, todos eles comezan con str e despois pasar a ser outra cousa.
A razón que realmente non escribilos como corda e así por diante
é porque como os primeiros días de C,
cando as persoas estaban escribindo en primeiro lugar e todo o que,
eles tiñan limitacións no número de caracteres que pode usar
para os nomes de funcións e nomes de variables,
entón todo é como super condensado.
Pero cando ve algo que comeza con str,
que normalmente significa que iso ten algo que ver cunha corda.
>> Ok, entón ten que obter a lonxitude da corda,
e entón, o que imos facer cos personaxes?
Sabe, Sam?
>> Eu non teño idea, eu estaba tentando descubrir iso.
Eu realmente non sei - Gustaríame que houbese algunha maneira de -
É dicir, eu creo que quizais a xente puidese facer algo con probabilidades e parellas,
pero eu non sei de calquera función como esta.
Si
Pero >> iso - non necesariamente traballar,
porque entón vostede obtén os espazos a ser -
que tería que ter o espazo para obter consellos sobre como -
Okay.
>> Eu non sei - eu son tipo de perda neste momento.
Si - Non, non, non, estes son bos puntos.
Entón, o que necesitamos facer é, como dixo Sam,
necesitamos para controlar cales cartas son as letras estrañas,
e cales son as letras mesmo.
Pero queremos estar seguro de que non estamos só á procura
no par e impar
índices na secuencia,
pero mirando para as letras iguais e impares na secuencia,
por iso necesitamos un pouco teñen esa distinción entre
letras - como o que en realidade é A, B, C, D, ou así por diante,
e que as cousas non son letras, pero aínda na nosa cadea.
Por exemplo, aquí, como este punto de exclamación non é unha letra,
senón que é parte da nosa cadea, que aínda é un char.
Do mesmo xeito, todos estes espazos -
non ten sentido para aproveitar un espazo, non?
Entón, nós queremos estar seguro de que de algunha maneira ignorar os
mentres aínda posibilidades de seguimento e gradúa.
>> Entón, medio que na nosa caixa de ferramentas de programación
ata agora, se quere,
temos un número de ferramentas diferentes que nós xa conversas sobre.
Así, unha, por exemplo, son variables,
como falamos aquí.
Outra ferramenta que falamos son as funcións.
Entón, nós xa conversas sobre variables no noso pseudocódigo-aquí
como o que nós imos usar para almacenar a nosa cadea.
Nós conversas sobre funcións para a lonxitude dunha corda, como strlen.
Estamos falando de outra cousa, e xa falamos sobre iso
para moito máis cedo na sección de hoxe: loops.
>> O que vostedes pensan sobre o uso dun loop neste programa?
Jared, o que pensas?
Será que usar un loop neste programa?
>> Probablemente non, non, porque non ten que pasar por iso máis dunha vez.
Ok, non ten que pasar polo que máis de unha vez?
>> A secuencia enteira.
Certo, entón non tes que pasar por toda a cadea unha vez.
Sentímolo que fixo absolutamente ningún sentido!
Non ten que pasar por toda a cadea máis dunha vez.
Okay.
¿Que pensas?
>> Eu creo que é mellor usalos
para que poidamos facer como capitalizar mentres
a localización do seu número é [inaudível].
Grande, e así capitalizar o que?
Ok, entón nós estamos dicindo que
debemos usar un loop, porque queremos
unha letra en maiúscula, mentres non é un número.
Entón, - desculpe, quere engadir?
>> Eu ía dicir que o xeito no que trata a cadea
e [inaudível] separar o [inaudível] sobre os personaxes?
Si
>> E entón podemos asignar os números de -
ou con base na localización da fonte na secuencia?
Si
E >> identificar se é par ou impar e feito a carta en si
mentres que a ubicación da carta é [inaudível] - desculpe.
Grande.
>> Polo tanto, só unha recapitulación.
Vostede me pode lembrar do seu nome novo - Sinto moito.
>> Charlotte.
Charlotte, ok.
Entón, o que Charlotte está dicindo,
que é totalmente certo - Deus, este lle gusta de auto guión en min -
é que se miramos para unha cadea
como se atopa na parte superior -
"Grazas por engadir" -
como unha secuencia de caracteres
onde a é a posición 0,
o h está na posición 1.
Unha é a 2, entón temos 3, 4, 5;
o espazo está na posición 6.
Considerando que: - o que é a posición de f?
7!
O? 8.
R? 9.
E entón temos 10, e entón realmente non podo escribilo sen el
medio que ficar confuso na pantalla.
Pero esta é, en realidade, como podemos falar cadeas na memoria.
É unha cadea
é unha secuencia de caracteres,
e cando nos referimos a un carácter individual nunha corda,
que moitas veces o fan referíndose a posición de que o personaxe
dentro da cadea,
probablemente do mesmo xeito que falamos de setembro
sendo o noveno mes do ano
ou Segunda sendo o primeiro día da semana.
Polo tanto, este nos ofrece unha forma de
descubrir cales son estrañas mesmo contra
porque podes ver aquí,
se combina-lo con este T,
podes ver que todos os capitalizados
están en posicións aínda,
polo menos para a primeira palabra,
e entón as cousas son xogados fóra, xa que alcanzou aquel espazo,
porque non contamos este espazo como unha carta,
por iso é coma se comezou
e foi de 0, 1, 2, 3, 4, 5,
espazo, 6, 7, 8, espazo,
9, e, a continuación, 10, 11, 12, e así por diante.
>> Legal, entón definitivamente vai querer usar algún tipo de loop
pasar por riba de cada un dos personaxes, á súa vez.
Polo tanto, neste punto,
imos volver para o noso pseudocódigo vello aquí.
Como parte desta identificación de cales
son maiúsculas e cales son minúsculas,
imos querer facelo nalgún tipo de lazo.
Colon loop,.
Que tipo de lazo, dos tipos de loops que temos,
parece ser unha boa para usar neste caso?
>> Eu estaba a pensar para o lazo.
E por que está a pensar en loop?
Porque >> comeza en cero, e despois
cando alcanzamos a lonxitude da corda,
e entón cada iteração, pode [inaudível], tamén?
Si, exactamente.
Así, a partir dos diferentes opcións de loops,
que temos para loops, loops while, e do-while.
Cando un loop é particularmente útil
é cando quere saber
tipo de onde está no circuíto,
cantas veces o circuíto ten sido executada, ata agora.
Que é o que queremos saber, nesta situación,
como Kelly dixo:
baseado fóra de comentario anterior de Charlotte, que queremos saber a posición
do personaxe dentro da cadea,
e para o lazo nos dará só iso,
porque se comezar tipo de ollar cara atrás na nosa cadea,
se comezamos o noso circuíto para 0,
e subimos a través da lonxitude de toda a cadea,
entón podemos asociar a letra T
con a 0 no noso loop for,
H coa letra 1 en noso loop, e así por diante,
indo todo o camiño ata o final da cadea.
>> Entón, imos comezar a programar este un pouco
só para vós unha idea do que iso parece.
Eu estou indo para salvar este,
entón temos o noso pseudo-código aquí,
e eu vou borrar todo.
Entón, eu teño unha páxina en branco.
Vou comezar por escribir int (void) principal
{
Vou poñer o 0 retorno en
e, a continuación, o.}
Por iso, normalmente cando comezar a programar, é iso que eu comezar.
Vou gardar isto para que vostedes teñen.
Entón, unha das primeiras cousas que falamos foi
obter a entrada do usuario
e almacena-lo nunha corda.
Como chegamos a entrada dun usuario?
GetString. >>
GetString, todo ben.
Entón, se eu escribir GetString ()
e un punto e coma.
Imos tentar executar este; será este prazo, antes de todo?
E por que non esta executar?
>> Ten que declarar a variable.
Eu teño que declarar unha variable. Okay.
>> Entón, como podo facer iso?
Vostede se importa de escribir algo, compartindo-o?
E entón podemos puxa-lo cara arriba.
Imos ver, Dan, non, todo ben.
Ou Daniel. Copia que, entrada cadea = GetString ().
Impresionante.
Será que isto vai funcionar?
Imos tentar.
Hit carreira, código de subida fonte, o edificio, un erro.
Okay.
Entón o que está a suceder aquí?
Uso de 'string' identificador non declarado.
>> Temos que inclúen as bibliotecas?
Si, entón Dan dicindo que temos que incluír as bibliotecas.
É iso que ía dicir, Stella? Impresionante.
Isto é incrible, entón Stella, non é
copiar este código fóra do espazo de Daniel?
Se fai clic en Daniel Roland Ki, copia-lo,
e entón vai poñer a liña include, e despois garda-lo fóra?
Deixe-me saber cando está listo.
Polo tanto, esta sintaxe de inclusión é tamén unha especie de funk;
non hai como a suma tag,
E hai a incluír, e despois hai estes corchetes.
Vostede recorda de como funciona isto, ou eu debería poñelas neste código aquí?
>> Eu son bo.
Okay.
Eu imprimir lo >> - Eu non tiña seguro de que biblioteca, con todo.
Ah, todo ben - Si, por iso é a biblioteca CS50.
>> Ah, eu coloque biblioteca stdio.
>> Ah, entendín - si, non, iso é -
así verifícase que cadea é realmente algo que é especial para CS50.
Hai, de feito, non é un tipo de cadea certo
porque aquí, string está na posición, tipo -
estamos declarando unha variable chamada de entrada do tipo cadea -
e estamos poñendo dentro de entrada
o valor que será devolto a nós: a saída desta función GetString.
Pode dicir isto é unha chamada de función, porque ten os parénteses, como printf fai,
como strlen fai.
Pero cadea non é realmente un tipo real
na linguaxe C.
Nós fixemos todo un tipo, e nós imos levar arredor de máis o que realmente é
C, porque non hai un xeito de traballar con cordas;
Nós acabamos de facer algo para facela un pouco mellor.
>> Entón, imos alí.
Aquí está o código de Stella.
Ten o # include .
Outras persoas van chamar isto como un hash inclúen, por veces, ou unha acentuada incluír.
Agora podemos inicia-lo, executalo,
e aínda obter un erro.
Imos ver o que está a suceder.
"'Input' variable non utilizada."
Ok, entón iso é legal, iso é legal.
Quero dicir, non é moi legal,
porque estamos a recibir un erro e non está funcionando,
pero o que isto quere dicir é que
Nós non temos usado a nosa variable, o que ten sentido.
Non pretendemos facer nada con el.
Trata-se dun xeito que
Clang está intentando axudarnos a certeza de que non estamos só usando variables
e, a continuación, chamando-os inadvertidamente outra cousa máis tarde no noso código,
axudándonos a evitar erros desa forma.
>> Todo ben, entón temos de entrada de usuario,
que foi almacenada nunha variable.
O paso seguinte foi entón
comezar a ollar para todos os carácteres na cadea
e identificar cales son os que están a ser maiúscula
e cales deben ser minúsculas.
E como Kelly e Charlotte trouxo,
Facemos isto usando un loop for.
Entón, se alguén se lembrar da sintaxe dun loop
e quere tomar unha facada en só escribir
a primeira liña do loop, só para pouco?
Kelly, quere tentar?
>> Si, entón ten que arrincar primeiro,
por iso eu coloque i = 0,
e entón eu fixen i <strlen ().
Está no seu espazo - podo tirar para arriba?
>> Si, eu estraguei todo un pouco, mais si.
>> Ok, imos puxa-lo cara arriba.
Impresionante.
>> Pero entón eu non sabía se tiña que -
Si, está ben.
Entón, aquí está o que Kelly ten: imos ollar rapidamente.
Entón está incluída a biblioteca CS50 na parte superior.
Ela está incluída a biblioteca IO estándar na parte superior,
eo IO estándar ten funcións como printf,
por iso, se quere usar printf, precisas desa liña.
E entón ela incluíu a biblioteca cadea,
que vai ter,
porque a biblioteca cadea ten strlen función,
que nós imos chegar a algo.
Entón, se olharmos para o que Kelly está feito aquí,
pode andar nos o que fixo?
>> Si, entón - É dicir, eu teño erros, entón -
Si, non, é dicir -
>> Entón, eu quería chamar a secuencia que eu teño só "cadea".
Eu quería imprimir a cadea
e entón eu -
Eu quería gusta definir a secuencia como como unha matriz de cada personaxe
ser diferente [inaudível], non?
E entón eu quería comezar na posición 0
e despois cada dous espazos,
Eu estaba indo para capitalizar,
entón eu só describiu como 23, porque eu estaba mirando para a táboa ASCII.
Entón é iso que eu estaba a pensar - Eu sei que non é certo.
>> Entendín, entón este é un gran comezo.
Eu creo que unha morea de cadro está no lugar aquí.
Imos pasar por tipo de liña por liña e ver o que está a suceder.
Así, o xeito que máis me gusta de facer isto é só comezar por compilar o código
e deixar o compilador me dicir como o que hai de malo co meu código,
porque o compilador é realmente boa en dicir o que está mal co seu código.
Entón, se nós xoga-lo, construíndo, e non construír.
El di que houbo un erro,
así, se rolar para abaixo e ollar para o primeiro erro,
el dixo -
que rolar de volta ata o cumio,
podemos ver, hai 5 erros xerados aquí na parte inferior.
Uups, que está realmente cortada.
Coido que só non pode ir mellor.
>> Aquí imos nós.
Polo tanto, hai 5 erros totais xerados.
Aquí eu só podo ver os 2 primeiros,
para que eu poida pasar esta un pouco e, a continuación, tipo de rolagem para arriba.
Este é o comando que se executa para compilar o código,
e, a continuación, o primeiro erro foi file.c aquí:
"Esperábase identificar ou '('", e foi nesta liña
onde dixen cadea = GetString ().
Podes ver aquí que era na liña 8 da file.c,
e entón eu creo que este é de 12 caracteres - que é o erro.
Entón, o que está a suceder de malo na liña 8 - Kelly?
>> Só ten que chamalo, como unha carta ou algo así,
como cadea s ou algo así?
Si, entón dedúcese que estes nomes de tipos especiais,
para cadea, int, char, short,
todos eles son palabras clave especiais,
e non pode realmente usalos como nomes das súas variables,
porque o compilador mira para o e di,
"Oh, eu sei que é un tipo",
para que non pode realmente ter unha variable cadea chamada cadea,
como eu estou tentando facer aquí, e iso non vai funcionar.
Pero en vez diso, podemos chamalo algo como s ou st ou str.
Tampouco podería chamalo de int.
Non podemos ter unha cadea chamada int.
Non podemos ter unha cadea chamada char; ningún deses vai funcionar.
>> Entón imos chamalo s para o momento.
Impresionante.
Entón, o que está a suceder próximo nesta liña?
Cadea - esta liña parece moi bo?
Imos tentar unha vez máis, imos executalo.
Ok, entón aínda obter erros.
Esta vez, estamos reducidos a catro erros.
Entón temos un deles.
Imos subir.
"'Cadea' nome do tipo inesperado: expresión esperado", si?
>> Si, iso é porque eu tente citar a cadea.
Si, entón parece que agora tamén ten que ir corrección
todas estas referencias a cadea.
Podes ver que hai unha referencia a corda aquí, aquí, aquí,
para que poidamos pasar todo isto para s.
Grande. Ok, executa-lo de novo.
Edificio - outro erro.
>> Ok, agora estamos reducidos a un erro,
así int i = S e despois os corchetes.
Entón podes contar un pouco sobre o que estaba facendo aquí, Kelly?
Si >>.
Foi na liña 10.
>> Eu non sei se necesitabamos de todo,
pero eu creo que eu estaba tentando -
Vou gardar isto para que poida seguir.
>> Eu creo que foi
tentando dicir a el para comezar na posición 0
no comezo do meu loop,
entón eu creo que quizais dicindo era innecesario.
Entón, só para recapitular,
estaba dicindo que este - que estaba a tentar iniciar este na posición 0
e esta - si,
entón eu creo que máis cedo, tamén, cando estaba camiñando polo código,
estaba falando sobre como quería tratar a cadea como un array
para que poidamos acceder cada personaxe individual.
Creo matrices Dan mencionar, tamén, intentando converter cadeas en matrices.
>> Acontece que tipo de baixo o capo,
unha cadea é almacenado como unha matriz xa,
e pode acceder a ela como unha matriz;
non hai ningunha conversión que ten que facer.
A isnt cadea - así -
unha corda non é realmente unha matriz,
pero pode acceder-lo como tal, porque todos os personaxes son almacenados
unha ao lado uns dos outros na memoria,
por iso, se quere obter o primeiro carácter da cadea,
É o mesmo que incorporarse o primeiro número enteiro nunha matriz de enteiros.
Entón, moitas veces - nós
refírense a dous como
oh, como unha cadea, como unha matriz,
aínda que en realidade - son cousas moi diferentes,
pero pode trata-los moi moi mesmo.
Así, verifícase que esta liña de feito -
Non é preciso facer calquera conversión,
e, de feito,
iso en realidade non é unha expresión válida,
que é o que o noso compilador está nos dicindo.
Está dicindo: "Ei, espérase unha expresión,
e que eu teño aquí é algo que non é unha expresión. "
Para declarar unha matriz,
todo o que precisa facer é algo así como este con un punto e coma,
e despois dicir a matriz canto tempo queres que sexa,
como 5, polo que esta liña 10
ha declarar unha matriz chamada i con 5 enteiros nel.
>> Trata-se dun lado, o que non é necesario para o código,
pero este é - este é o tipo que a declaración parece.
>> Como non ía utilizar char I [strlen (s)]?
Char I [strlen (s)]?
>> Carácter i, e despois dentro do paréntesis, strlen (s).
Si, para que pudéssemos -
poderiamos facelo,
e iso sería declarar - o que iso fai?
>> Eu penso que sería declarar unha matriz
de, como - de -
oh, non do I - oh,
Si, definitivamente non precisa do i.
Vostede declara unha matriz de caracteres
s de lonxitude.
E entón o que Sam está dicindo é que
esta liña 10 - deixe-me poñer un pouco de espazo entre el eo resto para que poidamos illar-lo -
esta liña 10 sería declarar unha matriz
caracteres, strlen pena (s) deles,
pero nós realmente necesitamos do i,
ea razón necesitamos do I é porque necesitamos dar a matriz un nome;
en caso contrario, non tería unha forma de referirse á matriz a finais do código.
>> Entón, iso aquí é o nome da matriz
e no interior é a lonxitude.
Isto dará unha matriz,
pero isto é - unha vez máis, esta é unha declaración.
Non é unha tarefa, non é unha inicialización.
Declararse esta matriz coma este,
en realidade existe nada no contido da matriz.
É só lixo - o que está aí dentro.
E, como dixemos,
nós realmente non precisa aínda de facer esta conversión,
porque xa podemos tratar cadea s como unha matriz.
Sei que estamos correndo un pouco longo no tempo,
pero eu quero só realmente rápido chegar a este loop
e amosar-lle como acceder os caracteres individuais na matriz,
porque iso é fundamental para a nosa misión.
E entón imos deixalo de alí ir.
>> Entón, aquí, temos un loop
que parece case bo.
O que non é así case alí?
What 's - o que non está seguro sobre iso por lazo?
Non >> claves?
Non chaves, por exemplo.
Quero estar seguro de que temos o corpo do lazo con chaves.
Oops, non cinta praza!
E cal é a seguinte cousa que cómpre facer con este ciclo?
Se eu tentar executa-lo,
o que é este erro que eu recibín?
Eu recibín todos estes erros - Eu teño que arrincar i.
Grande.
Entón, iso vai ser un loop - iso non é moi alá,
pero está quedando moi preto.
Este código que pode correr,
construír un erro aínda ocorre.
Por que aínda está reclamando,
dicindo que a expresión non é utilizada,
e iso é porque esta liña non fai nada.
Non almacena-lo en calquera lugar, non gardar o resultado.
Onde debemos estar salvando ese resultado?
>> S ou i?
Exactamente, e sintaxe este funky,
este está cos corchetes
significa acceder ao carácter i de s.
Isto vai ser algo que é realmente importante para a asignación.
Desafortunadamente, imos ter que deixar por aquí,
para que a sección Sebastian pode entrar,
pero estou feliz de estar fóra e despois vai sacar algunha dúbida.
Por iso, gracias a vós por teren benvida.
Isto debe agora facer a carga, construír, comunicar.
Podemos introducir unha cadea como "Ola"
e imprime "QOX".
[Risas]
>> Así non chegamos alí, pero en movemento, quedando para os loops!
Grazas por ter vido, e eu vou estar fóra.