>> [Música tocando]
>> COLUMNA 1: Este é CS50 e este é o inicio da semana dous.
Entón, imos mergullar dereita en algo que é buggy, por así dicir.
Entón, aquí é CS50 IDE e non teño levado cara arriba con antelación este screen-- maldita
lo.
Alerta de spoiler.
Todo ben.
Eu tirado ata esta pantalla aquí, que ten un programa moi sinxelo.
Se rolar para abaixo, a maioría iso é só comenta,
pero aquí en liñas 13 a través 17 temos un programa.
>> É sintaticamente válido, o que significa que Eu recompila-lo, el ha compilar e executar,
pero é buggy.
Este programa asegura nos comentarios enriba que debe imprimir 10 estrelas,
pero iso non acontece.
E en base a súa experiencia, ou logo para ser experiencia con C,
pode discernir loxicamente por que isto é, de feito, con erros?
Si?
Audiencia: El vai de cero a 10.
Isto é 11 iteracións.
COLUMNA 1: Yeah.
Entón, que vai de cero Se a través de e igual a 10,
que, por suposto, é de 11 iteracións.
Entón, que vai de impresión, de feito, 11 estrelas.
Así, a convención de ciencia da computación na maioría das linguaxes de programación
é, de feito, só para comezar a contar en cero,
pero contar ata, pero non a través do valor que realmente se preocupan.
>> Agora, iso é unha cousa que Leva un pouco para acostumar
e mesmo risco, concibido como é para os non programadores ou non ordenador
científicos e para nenos en gran parte, é proxectado para ter
comezar a contar xeralmente nun.
E iso é bo.
Pode absolutamente comezar a contar nun caso que é máis cómodo.
E contar ata ea través de 10, pero notarás particularmente esta semana
e ademais de que só así moitas cousas na programación
0 supoñer que é o primeiro díxitos con que conta,
que vai atopalo máis fácil só para chegar a este costume de partida
e conta de cero ata o valor se preocupa agora
ir buscar.
>> Entón, iso ten que.
Cambiamos o menor ou equivale a pouco menos de.
Imos dar un ollo un segundo exemplo aquí.
>> Así, este programa tamén afirma na súa comenta a superior que debe imprimir
dez estrelas, pero iso non acontece.
Cal é o erro aquí?
>> Entón, what-- e moito, imos ser claros.
10 estrelas.
Un por liña, pero iso non acontece.
Entón, en realidade, deixe-me ir adiante e compilar un regalo, porque é un pouco menos
limpar con base nesa descrición.
Déixeme ir ao noso directorio de orixe.
Fai buggy dunha barra de punto, un buggy.
OK, eu vexo 11 estrelas, que aínda é problemático,
pero tamén todo está nunha liña.
Cal é o problema aquí?
Si.
Audiencia: [inaudível].
COLUMNA 1: Yeah.
Polo tanto, esta é unha sutileza que podes lembro-me facer unha breve referencia.
Aínda que todo parece considerablemente, e é ben recuado,
e que tipo de miradas como Risco- en que a liña 16 e 17 son,
de feito, recuada baixo que para loop.
Iso é irrelevante.
O ordenador non fai coñecer ou ver o espazo en branco.
O espazo en branco é só para nós seres humanos, estilisticamente.
O ordenador non sabe cando ten claves, o que sería, de feito,
corrixir este problema.
>> Entón, se nós realmente fomos en e explicitamente poñer neses claves
que ía corrixir este problema deixando claro o compilador
que realmente quere facer dúas liñas de código novo,
e unha vez máis, e de novo.
Pero cal é a explicación fundamental?
Non?
Non estrictamente preciso rizado claves o tempo,
aínda que probablemente é mellor práctica para entrar ese costume de calquera maneira
aínda que engadir dous caracteres no seu código. por que?
>> Audiencia: [inaudível]?
COLUMNA 1: Si xeito que é outra solución completamente.
Non?
Especialmente se, a primeira vista non o fas realmente aprecio o que está pasando.
Ben, certamente poderiamos só facer dúas cousas á vez
e só evitar o problema completamente.
E iso é bo, pero agora, para fins de hoxe, o que
é a explicación para o erro?
Por que todas estas estrelas nunha liña?
Si?
>> Audiencia: Parece que se ten unha liña de código,
pode facelo sen os.
COLUMNA 1: Exactamente.
Esta é só unha convención humana.
As persoas perciben que é un pouco aburrido ou tedioso
ter que poñer claves todo do tempo, se todo o que quere facer
é realizar unha liña de código.
Así, decidiu algúns seres humanos tempo que iso é bo.
Se queres poñer todo o seu ciclo en só que nunha liña como esta,
que está moi ben co single punto e coma ao final.
Pero só se pode facer unha tal liña sen as chaves.
>> Así, cando guía de estilo CS50 como pode apuntar para,
podes ver que xeralmente é bo hábito
para chegar a este ata que estea extraviada bastante cómodo
a partir destes tipos de convencións e facer a súa propia cousa.
Mentres é auto-consistente.
E imos falar máis sobre estilo un pouco máis tarde hoxe.
>> Entón, deixe-me abrir outro programa.
Por suposto, hai que 10 fixar iso tamén.
Deixe-me ir adiante e escribir verdadeira programa rápido que chamase,
imos dicir, lazo dot C. Entón, lazo punto C. E en malla punto C vou ter,
incluír E / S estándar punto H int void main.
E agora imos facer, de feito, un loop.
Entón, 4 int i recibe cero.
I é menor que, digamos, 50.
I plus, plus.
E entón aquí imos dalle non imprimir F.
E entón eu quero imprimir I e unha nova liña, punto e coma.
>> E iso debe imprimir toda a números de cero ata 50?
Algúns cabeza aceno coa cabeza.
Algunhas Nos.
Cal é o erro xa?
Cal é o erro fácil que fixen?
Si.
>> Audiencia: [inaudível].
COLUMNA 1: Yeah.
Así, aínda que parece como este é o que eu pretendo,
Lembro que tamén é só un carácter ASCII.
>> Entón, se eu digo, print "I."
Vai literalmente imprimir I. Entón, se eu
quere plugin un espazo reservado valor realmente teño que facer iso
e, a continuación, o plugin valor de I dinamicamente.
Se non, eu estou indo só para Gañou 50 I está na pantalla.
>> Entón, deixe-me ir adiante e facer este loop, executalo,
e, de feito, temos todo o camiño ata a 49.
E se eu rolar para atrás no tempo que eu vexo o número cero no inicio.
>> Ben, e se eu medio que romper todo?
E se fago iso?
Só porque eu non estou a pensar.
¿Que é este programa.
Xa que está feita e executado, vai facer loxicamente?
>> Audiencia: Nada.
>> COLUMNA 1: Nada.
Por que é iso?
>> Audiencia: Eu está deseñado para cero.
Así, a condición é falsa.
COLUMNA 1: Si, exactamente.
Todo o código está correcto, sintaticamente.
Isto vai compilar, este código levará a cabo, pero non é
vai facer nada de útil porque eu arrincar I a cero.
A continuación, comprobar, é que máis de 50?
Obviamente, non, non é.
Así, o lazo nunca executa en todo.
>> Que se facemos algo un pouco máis imprudente?
Entón, o que se facemos como int I recibe cero.
E agora déixeme usar o tempo loop, que foi outra condición.
E mentres eu digo, mentres eu sexa maior que ou igual a cero, e, a continuación, aquí I
dalle gardar o ficheiro, facer loop.
E eu estou a piques de executalo.
Que eu vou ver iso tempo cun loop while?
Si.
>> Audiencia: un loop infinito?
>> COLUMNA 1: Un loop infinito?
Si, e por que?
Audiencia: Por sempre cero.
COLUMNA 1: Yeah.
Entón, eu é inicializar como cero.
Por suposto, é sempre maior que é igual a 0, como resultado.
Entón, eu estou indo só para ver iso infinitamente.
E agora, este xurdiu xa ou dúas veces a cabeza do curso.
Que pasa cando ten un loop infinito?
>> Audiencia: Control C.
COLUMNA 1: Yeah.
Así Control C finalmente respostar.
Desafortunadamente, temos impresa millóns e millóns de ceros xa
e para que o ordenador teña medio que teño diante miña.
Entón, que vai ignorar me para un pouco.
Pero se simplemente prema Control C algúns veces no seu teclado Mac ou PC,
finalmente, debe, de feito, rematar.
E se non, imos amosar-lle algunhas técnicas antes de tempo onde
realmente á forza matar programas, así como en Windows e Mac Os,
se é necesario.
Pero imos tratar outra cousa.
Imos realmente incrementar I. É iso aínda vai ser infinito?
Déixeme realizar este.
E agora pode tipo de mira o que está a suceder.
Isto, tamén, é un loop infinito.
Pero iso é un pouco de unha pregunta capciosa.
Será que isto vai imprimir números de sempre?
>> Audiencia: Non.
COLUMNA 1: Non.
Por que?
Escoitei algunhas NSA aquí.
Someone-- Si.
Audiencia: Non ten suficiente bits para realmente continuar.
COLUMNA 1: Todo ben.
Entón, eu non teño o suficiente bits para continuar.
Entón, o que vai pasar?
El só vai parar?
>> Audiencia: Nalgún momento vai pechar as--
COLUMNA 1: El pecharase o baixo loop, pero por que?
O que vai ocorrer no final das súas fronteiras?
Si?
Audiencia: A Ronda ao números negativos.
COLUMNA 1: Para números negativos, ou se estivésemos só tratar positivo,
cero, polo menos.
Entón, si, absolutamente.
Lembre que vimos a última vez que se incrementar os seus anacos un moitas veces,
e Alí diante estourido a capacidade do seu int
ou calquera que sexa o tipo de datos é, é vai implicar en torno a, probablemente,
dous números negativos.
Ou se se especifica que o seu intervalo só debe ser positivo,
que se pode facer, pero nós non vimos iso aínda,
pode acabar, polo menos, de volta ao cero.
Aínda que, en realidade, si.
Neste caso, negativo números, en cuxo caso
o ciclo pecharase porque non é, de feito,
maior que ou igual a cero se é negativo.
>> Así, por desgraza, como longo teriamos que esperar?
Agora estamos ata o que, 2000000-ish?
Somos como 2 millóns, nós imos ter que esperar
ata que poidamos realmente ver este síntoma.
Pero podemos velo un pouco máis rápido, maybe-- veremos se podemos deter.
Imos alí.
Mesmo os menús están aparecendo aos poucos.
Todo ben.
Entón, imos voltar a que en pouco tempo.
É un bo tempo-- droga, crías de can.
>> É un bo momento para algúns anuncios.
Entón, se pode gustar involucrarse YHack,
que é un evento sendo patrocinado polos nosos amigos en Yale.
E, de feito, algúns do curso de TFS en Yale están implicados con iso.
YHack é unha organización internacional hack a Thon aloxado e mantido por
en Yale, que reúne 1.500 como hackers ocupados e creativos todos
o mundo.
Se este é de interese, bótalle un ollo aquí.
Se é moi brevemente no pantalla, bótalle un ollo nas láminas de hoxe
para a URL para yhack.org.
Así, tamén algúns anuncios rápidos.
Entón, oficialmente seccións comezará semana aquí e New Haven.
Ten en conta que está a recibir un correo electrónico despois este fin de semana máis probable.
É preciso un longo tempo CS50 á sección,
Dadas todas as persoas na clase e todo se movendo.
E todo Fellows Ensino ' horarios tamén están solidificando aínda,
pero sexa en conta para unha mensaxe e, no seu caso ser, pode volver a sección de alí despois.
>> Study.cs50.net.
Así, mesmo se vostede é un participante constante en seccións, entender que case todos
dos recursos que utilizamos en seccións están dispoñibles ao público en CS50
Estudar neste URL aquí.
Entón, se xamais quere re avaliación material da sección, ou ler máis adiante,
ou non pode facer-lle un semana, entender que os porta-mostras,
e problemas, e definicións, e máis están todos alí tamén.
>> Horario de atención retomar hoxe, e mañá, e mércores,
e xoves comproba o curso de sitio para o axenda.
>> E tamén, lanzando agora hoxe é CS50 Discutir.
Entón, se e cando ten preguntas para o outro ou para o persoal do curso,
e están a traballar en xeral nalgún conxunto de problemas,
entender que non necesariamente ten que volver para o ser humano próxima de ti.
Se non hai ninguén alí, pode chegar ata nós e compañeiros
Discutir liña vía CS50.
Así, esta é unha discusión tarxeta do curso,
e entender que esta é quizais o mellor
lugar para comezar cando ten preguntas cando fóra do horario de oficina
en particular.
>> Comidas pre-arrinca esta semana tamén.
No Fire and Ice [Inaudível] en New Haven.
Bótalle un ollo ao campo de sitio para RSVP.
Primeiro en chegar, primeiro en servir para iso.
Se non recibir esta semana imos facer estes máis toda venres
durante o período.
>> OK, e agora unha palabra sobre clasificación.
Particularmente a medida que entramos problema definir un, que está fóra esta semana,
e conxunto de problemas e, posteriormente, de dous.
Como é que imos avaliar conxuntos P e avaliar a calidade dos mesmos?
Entón, é de catro eixes que usan en CS50, e son estes catro aquí.
>> Scope, que captura nun numérico base só como do conxunto P
que afrontar.
É corresponde aproximadamente co esforzo, e é a nosa forma de capturar
se tentar metade do P definir, de todo o conxunto P.
Este é un paso fácil de obter perfecto puntuacións en se fai, de feito,
tente todos os aspectos do conxunto P.
Polo tanto, manter isto presente.
>> A exactitude é exactamente iso.
Será que o seu traballo de código como a especificación e como solución de mostra dos funcionarios
suxiren que o seu código debe, de feito, traballar.
Consulte 50, se aínda non coñeceu lo con todo, está P definir unha especificación
e xeralmente darlle respostas si / non
canto a saber se o seu código é correcto.
Polo menos ata agora como imos para valora-lo a partir dos tests
que corremos dentro dese programa.
>> O deseño é moito máis subxectiva.
Este é o quão ben escrito é o código.
E iso é algo que vai estar mellor no tempo,
e iso é algo que imos proporcionar feedback máis cualitativa sobre.
E polo deseño podería significa antes de tempo
pode ser tentado nalgún P definido para facer algo loopingly,
pero para ter quizais tres, ou catro, ou cinco voltas dianteiras noutras citas ou mentres aninhado
lazos.
Que, xeralmente, debe facer comezar a encoller
e xeralmente sería considerada mala concepción.
E vai comezar a ver na clase e fóra da clase boas maneiras de facer as cousas,
malas formas de facer as cousas que todo pode ser correcta, pero non
necesariamente ben deseñado.
Como escribir un ensaio.
Pode ser capaz de poñer palabras nun páxina que son gramaticalmente correcta,
pero o ensaio ou a tese de que están en só
completamente incoherente ou pouco convincente.
E, polo que pode ser o análogo no mundo escrito do deseño malo ou bo.
>> E estilo, tamén, é moi subxectiva.
Pero polo menos esperamos consistencia.
Este é o quão bonito é o código.
As cousas están ben recuado?
Son as variables de ben nomeado / son todos dos seus parénteses e corchetes
aliñadas como deberían ser?
Temos unha guía de estilo como CS50 o conxunto de problema pode apuntar no.
Aqueles son máis cómodo Benvido ao desviar-se de que
sempre que auto-consistente.
E isto, tamén, é unha lección imos reforzar na sección.
Entón, se todo isto era algo rápido, entender o conxunto P e seccións
vou entrar en máis profundidade antes de tempo.
>> Pero xeralmente, temos moi poucos baldes para CS50.
Puntuacións son xeralmente nunha escala de un a tres, ou un a cinco.
Estamos literally-- e eu non podo dicir esta suficiente a primeira semana.
Tres é bo.
Así, aínda que, iso si, tres de cinco normalmente, matematicamente,
pode ser un 60 por cento ou menos como un D.
Tres é, en realidade, bo.
E, de feito, esperamos a maioría dos alumnos da clase
para comezar o prazo en torno dous, ou tres, e catro.
Probablemente non tantos fives.
Non son moitas queridos.
Pero en xeral para iniciar en ese punto doce na curva
de xeito que a medida que o tempo avanza, hai realmente espazo para,
e oportunidades para progresión superior.
Entón, por favor non igualan tres con 60%.
É moito máis abstracto que iso.
A fórmula coa que calculamos clases é a seguinte ponderación.
A exactitude vale máis.
Proxecto vale un pouco menos.
Estilo vale un pouco menos.
E esta xeralmente capta a cantidade de tempo
que se ve en cada destes eixes só dereito.
Estilo é super doado, debe ser super rápido,
pero é un hábito fácil para ir con preguiza sobre.
Corrección pode levar -lle a maior parte do tempo.
Perseguindo algún poder erro tomar esa hora extra ou máis,
e así, a puntuación en definitiva, que capta.
E así, agora, un máis grave.
Xa que ten o CS50 distinción, para mellor
ou para peor, de ser quizais mellor familiarizado
coas cuestións de académico honestidade que a maioría calquera outro curso.
E, de feito, é do meu coñecemento que nós enviar máis estudantes, por desgraza,
por razóns disciplinarias cada ano como resultado. Así,
en interese da plena divulgación, imos falar brevemente
sobre o que pasa na CS50, eo que pode facer, eo que pode estar atentos.
>> Entón, aquí desde 2007, cando Eu herdei o curso,
é o número de casos tarxeta do anuncio.
Consello Ad é disciplinar da Harvard corpo, ou agora o honor Counsel,
á que os casos son referidos cando alumnos facer algo que o curso de
Syllabus considera razoable.
Non hai ningún patrón real, aquí, eu diría.
El flota ao longo do anos, pero normalmente
este é o número de casos que se refire.
O número de alumnos que están implicados?
É tamén varía.
Normalmente, último ano para o exemplo, 29 alumnos en Harvard
Ad foron Embarcado, por así dicir.
29 deles estudantes actuais, Dous deles estudantes anteriores,
que estaban colaborando dalgún xeito perversa.
E, a continuación, en termos de porcentaxe, normalmente é de case 3%
da clase que, por desgraza, fai este tipo de decisións.
>> Entón, o ano pasado foi do 3,5% do corpo estudantil da CS50
que foi Ad Embarcado, por así dicir.
>> Entón, o que todo isto significa?
E que é o que imos realmente facer?
>> Así, para a divulgación completa, nós absolutamente, como científicos da computación,
ten ferramentas de software á nosa disposición e é moi fácil para nós, para ser xusto,
que doutros compañeiros que non son cruzar estas liñas para atravesar comparar
cada presentación deste ano contra cada presentación durante os últimos oito anos.
Software fai iso.
E, finalmente, é ollos humanos que deciden
ou non para referirse algúns importa para posterior adxudicación,
pero o software certamente axuda.
E iso, a verdade, é por iso que eu creo que temos un número tan grande en CS50.
Non é porque CS50 estudantes ou estudantes CS máis
xeralmente son menos honestos que outros estudantes,
é só temos a ferramentas e as técnicas
co cal a tomar esta primeira pasaxe.
>> Pero manter un ollo en todas estas cousas
así, unha vez máis, en interese da recoñecendo o traballo que está a ser colocado
na por un super maioría da clase.
E a política do curso na honestidade académica,
aínda que sexa un grupo de parágrafos por moito tempo con unha morea de balas
que son esperanza moi lexible, el realmente non se resumen a ser razoable.
E a mellor regra de ouro que ofrecemos no marco do programa
é iso, a esencia de todo o traballo que
someterse a este curso debe ser o seu propio.
E, de feito, en case todos os casos encamiñados a medidas disciplinarias
foi a causa dalgún alumno unha tarde noite tipicamente virou o código
sobre outright para un compañeiro de clase, que, entón, adotou-
na súa totalidade ou significativamente dos mesmos.
>> Pero realmente, iso é OK.
E, de feito, na oficina horas, os anacos de papel
te foi dado se veu de oficina horas a semana pasada anima tanto.
Está absolutamente ben benvida e fomenta
para discutir conxuntos de problemas cos compañeiros.
Para axudarnos uns a outros cando tropezo.
Pero xeralmente a regra de ouro debe ser este ", cando está pedindo por axuda,
pode amosar o seu código para outros, pero non pode ver o seu. "
Entón, noutras palabras, se eu son loitando con algún conxunto P
e eu estou sentado alí no Cea salón, ou na biblioteca,
ou na clase intentando atopar algunha falla,
Eu certamente podo amosar meu código na miña pantalla
para a persoa sentada ao lado para min, certamente o equipo,
pero tamén un compañeiro de clase.
Pero se a solución que meu compañeiro ofrece é, oh,
aquí pode dar un ollo ao que Eu fixen, que cruza a liña.
>> E eu ousaría dicir que é xeralmente unha cousa razoable para a maioría da xente
de detectar moi facilmente a liña de.
E así, ver o plan de estudos para máis detalles.
E agora un dos máis aspectos controvertidos
CS50 de programa que eu penso que eu falaría na conclusión aquí
é a chamada cláusula de arrepentimento.
Entón, aquí está toda a copia fina.
Pero en xeral, vimos nos últimos máis de 8 anos
que, de feito, case todas de CS50 casos de deshonestidade académica
ser o resultado só pobres facendo tarde de noite de decisións.
O resultado do estrés, o resultado de falta de alimentación, falta de sono,
moitas series P, moitos prazos, moitos compromisos.
Estrés construíndo nun 2:00, 03:00 AM, 4:00, cun prazo inminente.
A maioría dos estudantes nestes casos que acaba de facer malas decisións
que podería moi ben se arrepentir do mañá seguinte, se non minutos máis tarde,
pero ata o ano pasado non houbo chave de liberación que estes alumnos poderían
realmente abrir para realmente resolver o problema de fronte, sen medo a ser
inicie dende a facultade completamente.
>> E, de feito, nós introducimos esta cláusula arrepentimento o ano pasado,
que di que, se no prazo 72 horas, tres días,
de atravesar algunha liña prescrito no currículo
vén para a fronte a un do curso de cabezas e nós imos ter unha conversa sobre iso.
Hai aínda haber algún resultado, a diferenza do que é
Foi informar que o contrario.
Hai aínda un resultado que é acionável polo curso,
xeralmente Restablecer un conxunto P ou tomar algunha outra acción,
pero imos, de feito, seguro-lo nós mesmos e non
refírense a que eran máis altos resultado pode ser moito máis graves.
E, de feito, para compartir o que pasou o ano pasado, en oito anos, e agora
nove anos, de ensinar este curso e despois de xogar con varios botóns,
transformando varios mostradores sobre o pasado varios anos sobre a honestidade académica,
e vendo por datos ningunha aparentes impacto, mesmo de discursos como este,
este foi mans o mellor nós introducimos pedagoxicamente
en oito anos, xunto estas liñas en CS50.
>> 19 estudantes viñeron á fronte nos termos desta cláusula o ano pasado.
Non tomou ningunha acción para sete deses alumnos,
a determinación de que eran innecesariamente preocupado.
Eles non tiñan, de feito, atravesada unha liña, pero
foi un bo chat ter, con todo.
Nós zerado 11 dos correas que foron sometidos.
E nun caso pedimos unha estudante para facer un conxunto de problemas.
Pero máis convincente, Sinceramente, con estas 19 chats,
que era moito máis que eu Espérase que teñen, cada un deles
10 minutos para quizais unha hora de duración, tamén trouxo
á luz unha serie de cuestións sobre cuestións familiares, cuestións amigo,
problemas de saúde mental que, a continuación, contratado,
coa bendición, residente do estudante rector, ou amigos, ou calquera outro número
de recursos de soporte.
Así que este foi de lonxe un dos mellores usos do noso tempo
e un dos mellores intervencións.
>> Con iso dito, non entrada a taxa de detección
de deshonestidade académica en xeral.
E atrévome a dicir, este subconxunto de estudantes o ano pasado
era que un grupo demográfico anteriormente nunca está identificado antes
e nunca conectado antes.
E así, estes foron marabillosas historias de éxito
aínda que eles foron traídos á luz en menos de circunstancias ideais.
Polo tanto, manter isto presente como fai quizais
algún pobre decisión mesmo tarde de noite,
que hai tanto tempo recurso como o estudante nesta situación
posúe-se e chegar á fronte para que poidamos ter este tipo de chat e tratar con el
dun xeito que é educativo, e, a continuación podemos poñelas detrás de nós o día seguinte.
>> Así, sen máis delongas, asumir a borda fóra desta conversa,
a razón que os fillos están é só para romper o xeo por un momento.
E, por desgraza, son todos durmiremos, pero o que debería ocorrer aquí
era todo o mundo debería para impresionar e tipo de relaxarse
despois desa conversa moi pesado.
Pero, ao parecer, eu coloque os fillos de can para durmir.
Pero se vai a CS50 de crías web Slash,
pode ve-los durante todo o día.
Particularmente quizais 2:00, ou 03:00 ou 04:00 á noite
para ver un pouco de alivio de tensión alí.
Así que é cortar crías.
Todo ben.
Non se divertido?
Aceptar.
Entón, de volta a algún ordenador ciencia, se poida.
>> Entón, lembre que a última vez que comezou mirando non só a principal, que
era a función estándar, o cando bandeira verde premendo equivalente,
pero nós tamén comezou brevemente escribindo algunhas das nosas propias funcións.
E ata agora, ningunha destas funcións foron particularmente grande ou carne.
Vai entrar os máis funcións, probablemente, definir P 2, P axuste 3,
definitivamente P axustou 4 en diante.
Agora a maioría dos seus programas, Se non todos, por suposto, para P
conxunto 1 pode ser feito enteiramente en principal.
Se o programa só é cinco liñas, 10 liñas,
mesmo 20 liñas de longo, perfectamente razoable para gravala-lo
todo en principal e non para complicar máis seu código, pero o que estamos facendo hoxe
e de aí en diante está intentando tamén introducir algunhas boas técnicas de deseño
para que, como o seu código está máis complicada e como os problemas
quere resolver está máis difícil e máis interesante que ten, máis ou menos,
as ferramentas na súa caixa de ferramentas coas que para proxectar boas solucións para aqueles.
>> Entón, imos dar unha rápida ollo cara atrás, este programa da miña última semana, o que
foi funcións de cero punto C. E Lembre que moi simplemente,
parece que este con dous funcións, principal e nome de impresión.
E o pensamento de volta ou que enxeñería inversa de hoxe,
cal foi a motivación para a introdución de unha función na liña 28 chamados,
nome de impresión?
Ou o que era este un exemplo de en termos dun principio ou takeaway,
se o faría.
Algúns murmurios.
Que?
>> Si descomposición para funcional é unha especie de forma elegante de dicir,
descompoñer o seu programa nas súas partes constituíntes
e entón usar esas pezas para montar un todo.
Entón, iso tamén é só un tipo dun bocado xa,
pero esta é quizais ata un mellor exemplo de algo
chamado só de abstracción.
Non?
Abstracción será un dos temas recorrentes en CS50
e tamén de ciencia da computación unha vez que é xeralmente
unha técnica coa que pode resolver problemas de forma máis eficaz, porque
pode escribir solucións máis intuitivamente e de forma que muda o tamaño
e é comprensible por outras persoas.
O que quero dicir con iso?
>> Entón, sen dúbida, é moito máis lexible a ollar para un programa coma este,
Super curta que sexa.
Cando ve na liña 22 que non hai unha función chamada, nome de impresión.
Ese nome só di o que fai.
Esa función aparentemente leva entrada entre os parénteses,
e ao parecer fai algo, presuntamente imprime o nome.
E así, aínda que podería absolutamente
feito o que fixemos hai unha semana, o que foi só tomar esta liña de código real,
librar-se deste, e obter librar de todo iso xunto,
que tipo de abstraída a noción de impresión dun nome.
Eu non me importa se está a usar print def.
Eu non me importa se ten un S cento e unha barra invertida N. Estes
son detalles incrible arcanos.
O que eu me importa como programador está a imprimir un nome.
E así, que a mellor forma de facelo que por chamar unha función, o nome de impresión?
E así, esa foi unha das motivacións para facer algo así.
Facendo o código máis lexible, máis reutilizable, e tamén auto descritiva.
Agora, imos dar un ollo noutro exemplo,
que foi unha funcións, que tivemos aquí.
>> Entón, este é quizais aínda máis atractivo porque, neste caso,
Non quero comezar só un int.
Eu quero comezar un int positivo.
E verifícase se para obter un positivo int ten que facer unha chea de traballo braçal.
Non?
Non é unha simple liña chamar como nome de impresión foi,
que é recoñecidamente menos convincente.
>> Para obter un int positivo, logically-- déixeme rolar cara atrás para abaixo para ocultar iso.
O que ten que facer?
Como todas as ferramentas que temos no momento son
cousas como print def da Standard Biblioteca e tamén da biblioteca CS50
temos Obter Int, e Get Float, Obter Longo Longo, Get cadea,
pero o único, Germano, agora é Obter Int.
Así, a única ferramenta que ten na súa caixa de ferramentas é Obter Int,
como nós imos sobre a aplicación de Lo para int positivo?
>> Audiencia: Crear un rexistro e comprobe en que a entrada se deron
era positivo ou non.
>> COLUMNA 1: Perfect.
Exactamente.
Outra ferramenta que temos no noso caixa de ferramentas a partir dunha ou dúas semanas
é só a construción de loop.
E entón, si, se usamos un tempo loop, ou un loop Do While ou un fore
loop de nós podería ser comezar afastado con calquera dos de algunha maneira.
Podemos aplicar a noción de get int positivo só usando Obter Int,
e despois é só manter chamando- novo e manter importunando o usuario
ata que el ou ela realmente nos dá o que queremos.
>> E agora, esta abstracción do proceso
de conseguir un int positivo nunha función chamada
Obter positiva Int é un pouco máis convincente porque mira para isto.
Estes son como 10 máis liñas de código que
están implicados na obtención dun int positivo, e eu realmente non me importa como fai iso.
Todo o que me importa é que pode facelo, e entón eu teño
escondidas todos estes detalles detrás dun función chamada Get positiva int que,
de feito, ten ese bucle Do While.
>> E ver a semana pasada para a sintaxe alí, pero el só declara N,
e ela mostra o instrucións para o usuario.
El chama Obter Int e, a continuación, el verifica esta condición de novo, e de novo,
e de novo ata que o usuario coopera.
>> Entón, agora, algunhas verificacións de sanidade.
Para os familiarizados quizais con algunha programación,
por que é N declarou, por que eu creo N fóra do loop Do While?
Por que é na liña 29 e non en como 33, por exemplo.
>> Audiencia: Porque cando declaralo la fóra, tipo
do máis, a maior scope--
>> COLUMNA 1: Boa.
>> Audiencia: -e se declarar Lo dentro do loop, [inaudível]
porque non sabe sobre el.
COLUMNA 1: Exactamente.
Se eu puidera simplify-- é unha cuestión de ámbito de aplicación.
Eo alcance refírese ao contexto en que unha variable existe ou é utilizable.
E a regra agradable de ouro aquí é que xeralmente cando declarar ou crear
unha variable que só se pode usalo dentro dos máis próximos abrazando chaves.
Entón, o que significa isto?
Se eu, pola contra, desfacer iso e ir con algo que se sente un pouco máis simple.
Non?
>> Liña 32 só parece máis limpo para min agora.
Eu estou facendo as dúas cousas á unha vez e logo atribuíndo
a man dereita á man esquerda.
O problema agora en base a que a definición de ámbito
N que se pode empregar en liñas 31 e 32 dentro deste loop,
pero onde por esa definición Pode non ser usado?
En liña que?
Si.
>> Audiencia: 35.
>> COLUMNA 1: 35.
Definitivamente non 35.
E tamén onde máis?
Audiencia: 34.
COLUMNA 1: Mesmo 34 é problemático porque é
fóra das chaves.
E así, de feito, imos ver o que acontece.
Non?
Isto pode parecer un pouco intuitiva ou talvez non,
pero imos ver o que o compilador ten que dicir cando
nós entramos directorio de orixe de hoxe.
Fai unha función.
Meu Deus.
Ben, finalmente rematei que, por certo.
Todo ben.
E cal é o problema aquí?
Moi arcano para ollar.
Pero aquí está o que eu typed-- facer a función de un.
Aquí está o que facer inducido, que é realmente
usando o compilador clang con algunhas destas bandeiras
que veremos de novo en breve.
E, de novo, sempre mirar no primeiro erro,
porque só podería ter unha fervenza efecto sen significado noutras liñas.
>> Entón, o que isto significa que o problema é en función 1.c.
É na liña 32.
E é na columna, ou carácter, 13.
Entón, cando o seu editor de texto que pode axudar a identificar onde o problema está.
Entón, se eu vaia para arriba, o que é liña 32?
Isto é de feito un agasallo que xa está en destaque
n variable dereito aqui-- non utilizado.
Pero non é non utilizado.
Eu estou usando-o.
Pero o compilador de confuso, porque ela só existe dentro deste ámbito.
E por iso non podo usalo aquí.
Non podo usalo aquí.
E o compilador, polo tanto, non importa que eu estou tentando.
Semella non utilizado no seu ámbito actual.
>> Así, podemos ampliar o alcance facendo o que nós comezamos com-- int n.
E aínda que iso non acontece ollar tan elegante, quizais,
e estamos tomando unha liña extra aquí, agora é o ámbito en todas as partes.
Entón, imos tentar de novo.
Entón, faga unha función.
Niza.
E agora, se eu si executar a función un, imos darlle negativa de 10,
1 negativo, 0, 1, e de feito funciona.
>> Polo tanto, non hai outra solución aquí.
Sabes que?
E se realmente estou loitando con iso?
Non sei onde a n se quere ir.
Sabes que?
Eu só vou poñer todo o forma na parte superior do meu arquivo aquí.
O que isto fai, pensas?
Si?
>> Audiencia: [inaudível].
COLUMNA 1: Yeah.
Entón eu fixen iso global, por así dicir.
Se vostede ten unha variable que está fóra todas as súas funcións que se permite,
eo código debe compilar, e n agora vai ser accesible non só en get
int positivo, pero tamén no que main-- é un pouco preocupante porque non hai
xa un n no principal, de xeito máis en que en só un moment--
pero iso sería considerado un mal deseño.
Todo ben.
Se ten que recorrer a algo así como, oh, eu vou
só engada o aquí porque o código parece compilar
xeralmente non é a mellor práctica.
Pola contra quere escoller o máis estreito posible alcance
para as súas variables, o que significaría indo co noso proxecto inicial, que
está ben aquí.
>> Agora, como un aparte, se tiña unha forma idéntica nomeado variable aquí,
o camiño c ía xestionar isto-- aínda que iso non pode acontecer tamén often--
é que este aínda é perfectamente ben aquí.
Pero esta definición de n na liña de 22 vai borrar a unha global.
Polo tanto, este será un traballo dentro principal, eo global
vai realmente se aplican cando está obter int positiva Pero máis sobre iso
outra vez, pero só Para os curiosos.
>> Así, en breve, imos solucionar isto aquí.
Agora imos desmembrar dúas outras pezas antes de olharmos para unha última liña de código
neste programa.
Obter int positivo.
No lado da man esquerda de súa palabra é a palabra int.
O que significa isto que pensas?
Ata agora vimos principalmente baleiro.
Si?
>> Audiencia: É o tipo de variable que está preguntando sobre.
>> COLUMNA 1: Si, é o tipo de, déixeme non dicir variable, pero o tipo de valor
que eu estou pedindo para volver.
E, de feito, iso é intuitivo aquí, eu espero.
Non?
Se desexa obter un int positivo, o que é vostede
quere o function-- como o noso voluntarios da semana pasada
para entregarlle un anaco de volta de papel cun int sobre el?
E así temos indicado que o chamado tipo de retorno desa función
é obter int positivo.
Se non queres que voltar nada, di baleiro.
Se queres que volte unha corda, di cadea.
Se queres que volte unha boia, di float.
Pero o único que se aplica aquí loxicamente, porque eu estou usando get int,
aínda que eu estou restrinxíndose a a valores positivos, é voltar un int.
>> Así, ao contrario, o que significa que hai un baleiro entre parénteses?
O que fan os parénteses xeralmente definen?
Si?
>> Audiencia: Significa que a función de en realidade non conseguilo.
>> COLUMNA 1: significa que a función de non realmente recibir o que?
>> Audiencia: Unha entrada.
>> COLUMNA 1: Unha entrada, que sexa.
Entón, en realidade, se paréntese aquí se especifica baleiro,
iso só quere dicir que eu non quero ningún entrada.
Vou tratar co problema só.
E, de feito, non ten que obter int dicir nada de positivo.
Acaba de dicir, conseguir int positivo, e que función pode saír e facer a súa cousa.
>> Pero houbo un pequeno truco que eu teño foi xogar aquí ese tempo
para garantir que este código compila.
Teña en conta que int-- obter positivo int void-- é na liña 27.
Pero por algún motivo aparentemente estraño é tamén aquí enriba na liña 16.
E só para unha boa medida Vou repetir este polo que é perfectamente idénticos.
E eu dixen prototipo con un pequeno comentario dunha liña.
Qué acontece se eu eliminar que, E Agora executa novo facer a función 1, escriba.
Whoops.
Espera un minuto.
Onde está o meu guía?
Hein?
Espera.
Fai unha función.
Alí imos nós.
Aceptar.
Non había salva-lo correctamente.
Entón, eu creo que hai un pouco erro aquí onde eu non son
vendo o nome da guía no momento.
Entón, o que está pasando aquí?
Declaración implícita de función obter int positivo non é válida no C99.
Entón, confundindo novo.
Entón, cal é este indicativo?
Ben, resulta que C é moi estúpido.
Ben, é a programación linguaxe, ou mellor, o compilador é.
El só sabe o que ten ensinou-lo, e iso só é
saberá algo se ensinou iso antes.
Noutras palabras, en principal no momento, eu son
intentando chamar a unha función chamado obter int positivo.
Pero o compilador non vai a notar que obter int positivo
existe ata a liña 26.
E así que o compilador fai é só erros, logo que queda para a liña 17,
dicindo declaración implícita de obter int positivo, o que
é só un xeito elegante de dicir, eu non sei sabe o que é estar int positivo aínda.
>> Outras linguaxes como Java e Python e Ruby pode mirar para adiante.
C non.
E así a nosa forma de resolver esta é unha de dous xeitos.
Calquera dos dous, o problema é que comeza int positivo non foi visto antes,
Ben, deixe-me só movelo ata o cumio.
Iso sería corrixir este problema.
Pero, xeralmente, é considerado mellor técnica
para poñer a súa principal función no moi superior, de xeito que un ser humano de ler o seu código
sabe o que o programa fai, porque principal non está enterrado todo
o xeito no fondo ou no medio.
É na parte superior.
De xeito que non se sente ideal.
E realmente pode comezar en situacións onde
as chamadas funcións outro, o que chama outro,
pode poñerse en un problema onde non pode ir sobre o outro, de forma lóxica.
Non é só posible.
>> E así o camiño para o traballo de evitar isto é só tomar
sinatura da función, por así speak-- a primeira liña onde é declared--
e só copiar, pegalo no arriba, pero non con braces-- rizado
só cun punto e coma.
É como unha pequena Consello do que está por vir.
E, de feito, todo este tempo cando vin cousas como io.h estándar
e cs50.h, semellantemente, nos dot h arquivos están alí outros prototipos.
E veremos que en pouco tempo.
>> Así, en breve, cando ten un programa nun ficheiro con varias funcións
ademais de principal, case sempre quere declaralo los
só a través do seu primeiro liña, seguido por un punto e coma,
na parte superior do ficheiro.
Iso foi unha morea de unha vez.
Algunha pregunta?
Todo ben.
>> Entón, imos seguir adiante, a continuación, para algo así como tose.
Oh.
Que apropiado.
Todo ben.
Tose.
Entón aquí é un c implantación dun programa
que fixemos o outro día en Arranhão que moi simplemente só
di tose, tose, tose.
Todo ben.
E alguén dixo hai uns días que hai
unha forma de limpar este código xa.
Todo ben?
Así que está copiando e colando probablemente mal deseño.
Polo menos unha vez chegamos a catro ou cinco ou 20 toses, se sente mal práctica.
Nós só manter copia, colando.
Cal é a solución obvia a limpeza deste programa anterior?
>> Audiencia: Lazo.
>> COLUMNA 1: Yeah.
Polo tanto, usa un loop.
E podemos utilizar un lazo para un tempo ciclo, calquera número de enfoques.
E, de feito, é o que o que facemos na versión un aquí.
Xa en canto reescrito na versión dun cough.c
ser só tos no prazo dun ciclo-a.
Todo ben, pero hai unha oportunidade agora de tipo de inicio
para proxectar este un pouco máis como a lección que ensinou un momento atrás,
que é isto-- supoñer que eu quería para crear unha función chamada tose,
imos considerar por un momento o que vai mirar como.
Entón, se eu queira algo a tossir, eu só teño
usar impresión f dentro da función.
E, de feito eu son.
E, de feito, todo isto hora, en calquera tempo que está
imprimindo a algo a pantalla, un programador
chamaría tanto un efecto colateral.
Non é entregándose me volta a alguén un valor.
Me está tomando algunha acción que se pode visualmente obvia.
Pero esa tose función, el volver calquera cousa con base na súa primeira liña?
Non, porque o seu tipo de retorno é nula, o que significa só
non está me dando nada a cambio.
Podería estar facendo algo visualmente, pero non me entregando
copia de un anaco de papel como a semana pasada.
>> Será que ela ten de calquera entrada?
Non.
E por iso é baleiro aquí tamén.
Polo tanto, esta tamén é unha especie de over-enxeñaría este problema.
Non?
Eu fixen o programa máis complexas, máis liñas de código,
Eu non fixen iso calquera esta máis funcional, pero
sería un trampolín, quizais, a unha máis ampla
contexto co código de máis complicado.
Pero o que sobre iso?
O que eu done-- só mirando para este sen ollar para o comentario
na parte superior da file-- o que ten Eu fundamentalmente feito aquí coa miña tose
implantación que é diferente?
Si, na parte de atrás?
>> Audiencia: Facelo para que poida teñen un carácter desactivar.
COLUMNA 1: Yeah.
Entón, este se sente tipo de Niza.
Non?
É como a adición de un recurso para a súa ou a súa función de programa, neste caso.
Aínda non retorna nada.
Pode ter un efecto colateral visual, porque está chamando de impresión f.
Pero agora eu teño parametrizada a función, a cal
significa que teña indicado tomadas entrada de tipo int e chamalo n,
pero eu podería chamalo de calquera cousa que quero.
De feito, podería ser só veces para ser aínda máis explícito.
E entón eu só podería cambiar isto aquí.
Pero o punto é que esta é a forma na que eu crear unha función que recibe de entrada.
E se se lembra lanzando quizais por medio en liña nun
dos walk-throughs, o cuarto e último exemplo tose,
vai notar aquí que eu xeneralizada meu código tipo further-- de abstraída
la aínda máis.
Como tose e espirro, ambos son sobre como dicir algo ou facer
algún tipo de son.
Gardar o sería correspondente bloque de borrador.
E así que eu fixen nesta versión, que podemos só ollar para,
é a tose é só como dicir, [cough] tos, e, con todo, é espirros
como dicir, [Achoo].
E entón eu xeneralizada a posta en marcha dos
por agora a aplicar esta función xenérica,
dicir, o que é interesante para fins de hoxe
só porque aínda non ten un tipo de retorno.
Pero cantas entradas é que ten?
Audiencia: Dous.
COLUMNA 1: Two.
E por iso, se quere tomar en dous argumentos,
só sepáreos cunha coma.
E se queres, a continuación, chamar esa función,
entender que só chamar digamos, multimedia, pecha comiñas,
para o primeiro argumento, común n, para o segundo argumento.
Entón, de novo, só temos agora o bloques de construción para que poidamos realmente
aplicar algunhas das nosas propias funcións.
Todo ben.
Calquera preguntas sobre estes?
>> Entón agora imos pelar unha capa en caso afirmativo.
E o obxectivo, en definitiva, é conxunto de problemas da semana
será en cryptogrophy-- técnica de codificación da información.
E especialmente, a información terá que cifrar ou descifrar
será texto.
E así por este tipo de invitacións a cuestión hoxe, como ben,
o que está a suceder debaixo do capó con texto ASCII ademais da semana cero,
E como podemos realmente comezar a manipulala lo?
Entón aquí é o nome do Zamyla.
E en texto, que pode ser introducido en como a función secuencia de get.
E a partir de agora, cando ve un cadea como isto-- Z-A-M-Y-L-A--
comezar a pensar niso como cada destes personaxes está nunha caixa de súa
propia.
E, de feito, unha semana ou así é tempo, cada unha destas caixas
vai representar moi especialmente un bloque de memory-- unha mordida de memoria.
Así, cada unha desas cartas, en definitiva, representará 8 bits.
E nós imos realmente ver o que está pasando por baixo do capó no meu ordenador.
>> Pero para non basta só de ollar para Zamyla
a través desta lente, en que cada un de esas cartas é na súa propia caixa.
E ben o suficiente en C que pudermos acceso a cada unha destas caixas directamente.
Entón, se quere obter a primeira letra do seu nome, super doado no C.
Se desexa obter a última carta, super sinxelo, así
cun novo anaco de sintaxe.
>> Entón, eu estou indo a ir adiante para CS50 IDE e abrir a secuencia de cero punto C.
E aquí neste exemplo, existen un par de cousas novas a suceder.
Entón, primeiro na liña 19, temos visto esa secuencia get antes--.
Entón, así como unha comprobación de sanidade rápida, se alguén podería ofrecer-se verbalmente
explicación dun leigo de o que está a suceder na liña 19.
Como só traducir iso en Inglés que un compañeiro de cuarto en non CS50
pode entender.
Si.
>> Audiencia: Teña a entrada do usuario un corda e almacena-lo nunha variable s.
COLUMNA 1: Boa.
Ter a entrada do usuario unha cadea e almacena-lo nunha variable s.
Isto é óptimo.
Así, na parte dereita banda, que chamamos cadea get.
Que retorna un valor que non se atribuíu
da dereita á esquerda man- lado nunha variable chamada s que é
deseñado para almacenar unha cadea.
Exactamente.
>> Entón, agora a liña de 22, por o comentario na liña 21,
obviamente que imprime cadea un carácter por liña.
Pero como?
Entón, primeiro de todo, eu arrincar a 0.
E entón como é que imos chegar a a fin do nome de Zamyla?
Ben, a finais de O nome de Zamyla, eu podería
escriba manualmente a última carácter o seu nome dalgún modo, é o número do mesmo.
Non?
Se volvemos aqui-- Z-A-M-L-- Y-L-A-- para que eu puidese escribir.
Cal é o índice de A última carta de Zamyla?
Se esta é a 0-- falando como un programmer-- 0, 1, 2, 3, 4, 5,
Eu heard-- así, de feito, a última letra en nome de Zamyla é o sexto,
pero se contamos desde 0, que será o número 5.
Polo tanto, manter isto presente aquí.
>> Acontece aí é unha función en C chamada strlen, e volta o día
e até hoxe aínda, unha morea de programadores
decide sincronizar nomes para a súa funcións que soan como as palabras
eles están tentando dicir.
Entón strlen é lonxitude da corda.
E entón o que faría lonxitude da corda de S volver cando Zamyla é a entrada?
>> Audiencia: Five.
>> COLUMNA 1: Z-A-H-Y-G. Six.
Non?
Cal é a lonxitude do nome de Zamyla?
Non?
E, así, en realidade, seis letras.
Non?
E entón o que é que isto supón para o noso loop?
Estamos indo para ir de 0 ata seis, que
vai dar cinco iteracións.
Que facemos en cada iteración?
Ben, por cento C, alguén adiviñou o outro día,
significa un espazo reservado para o que?
>> Audiencia: Char.
COLUMNA 1: Só un char.
Así, un único character-- non varios personaxes, como unha cadea.
E entón aquí está a nova liña que temos que imprimir.
E entón aquí está a nova sintaxe.
Se quere imprimir o i-th carácter na secuencia S, por así dicir,
pode simplemente dicir o nome da cadea de S,
e, a continuación, abrir paréntese, e despois pechou paréntese, cun i
o medio.
E é tipo de Niza, en que que tipo de parece un cadrado
así como as prazas en que Zamyla de caracteres existir en que imaxe alí.
>> Entón, se eu realmente realizar este Agora, imos ver o que acontece.
Fai corda 0 dot barra secuencia 0, e entón eu son
vai escribir o nome de Zamyla.
Non hai ningunha liña, porque eu non fixen utilizar impresión f, pero iso é bo.
Só sei que facer.
E, de feito, el imprime O nome de Zamyla, un por liña.
>> Agora imos ser un pouco imprudente.
Supoña que eu non sabía sobre strlen e eu penso,
todo ben, ninguén vai ter un nomear como maior que 50 caracteres.
Imos adiante e recompilar este e executa-lo de novo, e logo escriba Zamyla
de novo.
Loxicamente, o que é a programa vai imprimir?
Z-A-H-Y-L-A, a continuación, como 45 descoñecidos bytes de memoria.
E, de feito, imos volver a esta idea de memoria.
Pero loxicamente, se O nome de Zamyla é este longo,
segundo a imaxe aquí, o que estamos dicindo
é manter a impresión, continuar a imprimir, manteña impresión, continuar a imprimir, manteña a impresión,
todo o camiño para o carácter 50, que quen sabe o que vai ocorrer.
Entón imos realmente dar un ollo.
Imos escribir Zamyla.
Interesante.
Tivemos moita sorte.
Só unha morea de espazo en branco.
Oh.
Hai un carácter descolados.
Parece como unha especie de pregunta estraña marcar alí, pero non é o nome do Zamyla.
Imos estar moi boa idea.
Como sobre nós imprimir 500 bloques para o descoñecido?
Imos adiante e facelo ben e, a continuación, re-run.
E a pantalla completa, porque imos necesitamos ver máis espazo.
Zamyla.
Tivo sorte de novo.
>> Ousamos máis imprudente?
Imos máis imprudente.
50.000 caracteres.
Este non é o máis certamente unha boa idea.
Todo ben.
Fai corda 0.
Esta será a nosa última demostración.
Zamyla.
Ugh.
Aceptar.
Así, a miña memoria é realmente baleiro agora, que en realidade é tipo de cómodo.
O que eu estou tratando de obter a-- todo ben.
E agora eu estou indo só para obter boa idea.
500.000.
Make-- de pantalla completa de deixalo.
Intro.
Zamyla.
Alí imos nós.
Eu non teño ningunha idea do que iso é, pero soa mal.
Todo ben.
E, de feito, en breve, se está entre os poucos afortunados en horario de oficina
e no conxunto de problemas un, pode moi ben atopar ese.
Fallo de segmentación realmente fai ten un significado ben definido.
Isto significa algún tipo de erro relativa a un segmento de memoria.
E, en termos leigos, isto significa que nós tocamos
memory-- usan RAM no meu ordenador que eu non debería ter acceso a.
E iso é o que é á vez poderoso e tamén perigoso
sobre C é que realmente teñen acceso sen restricións
para o conxunto da memoria do seu programa ou bytes de memoria RAM ou, máis especificamente.
>> Así, aínda que o nome de Zamyla é de só seis caracteres,
Eu aínda podo ir a calquera lugar na memoria que quero.
E como un aparte, se ten Xa leu algún artigo
ao longo dos anos sobre algúns servidor ou algún programa
estar rachado ou hackeado que é aproveitado algo
chamado un estourido de buffer exploit que nós imos realmente
falar en poucas semanas, que é xeralmente referíndose a algunha maneira enganar
un ordenador para ir ben alén das fronteiras da memoria
que debe ter, e atopar algo suculento
en que un memory-- contrasinal, se cadra, un xeito
de evitar algúns número de serie comprobar, ou só xeralmente capaz
para enganar o ordenador está executando código que non foi desexado.
Pero imos volver realidade para só un momento
onde este programa foi aplicado con strlen,
e introducir unha cousa aquí enriba.
O que hai de novo entre estas tres liñas principais?
>> Entón cadea dot h.
Acontece aí é esa biblioteca chamada Cadea Dot H, ou a Biblioteca cadea,
cuxo arquivo de cabeceira, por así dicir, é cadea dot h que me dá
acceso a esta función strlen.
Se eu omitir que o compilador é vai berrar comigo de algunha maneira.
Pero vostede sabe o que?
Agora imos realmente diferenciada.
Na liña 22, hai algo tipo de inefficient-- mal deseñado,
arguably-- sobre esta liña de código.
Pense de novo como for-loop son aplicadas
e cales son os pasos ocorrer de novo e e de novo novamente-- o arranque,
a condición de que o código é executada, entón o incremento
ou a modificación, a continuación, a condición, a continuación, o código, a continuación, o cambio, entón
a condición, a continuación, o código, a continuación, a cambio, e así por diante.
Entón, o que pode ser un pouco preocupante ou mal feito aquí?
Si, no azul.
Audiencia: strlen é chamado moitas, moitas veces.
COLUMNA 1: Yeah.
Así, chámase strlen moitas veces, pero o que é
a lonxitude do nome de Zamyla o primeira vez que o bucle é executado?
>> Audiencia: Six.
>> COLUMNA 1: Six.
Ben, cal é a lonxitude do seu nome a segunda vez que se executa o código?
>> Audiencia: Six.
>> COLUMNA 1: Todo ben.
Aínda é seis.
Non?
O nome de Zarla non ten cambiado, aínda que eu estou buscando
en só parte das letras no seu nome.
E así o feito de que eu son efectivamente facendo esta pregunta, o que é
a lonxitude de Zamyla, cal é a lonxitude de Zamyla, cal é a lonxitude de Zamyla,
seis veces separadas, ou sete, aínda, é simplemente estúpido,
porque iso é inmutable esa resposta.
E entón o que eu podería realmente facer é isto-- en secuencia dun
Eu teño unha versión un pouco mellor aquí.
Há-- secuencia whoops-- dous que teño unha versión lixeiramente mellor en que
Fago isto-- no canto de só i iniciar a 0, tamén cunha coma
declarar unha segunda variable chamada n-- Non teño que dicir int novo.
Non debería, en realidade.
Pero eu digo n.
E entón eu inicializar n o strlen n, de xeito que agora
cantas veces é que strlen son executados en total?
Só unha vez.
E entón é iso que queremos dicir anteriormente sobre mellor deseño.
De feito, unha vez que o seu código está correcto, indo cara atrás e pensar a través,
está a usar tan pouco memoria ou como uns segundos
ou milisegundos de tempo de ordenador como posible aplicar algún problema?
E eu estou indo a rodar se e só mencionar
que hai esa mención de null nesta versión,
pero imos volver a iso en pouco tempo.
Porque, de momento, imos dar un ollo onde iso vai levar.
Entón, un, verifícase que agora que temos a capacidade
mirar para caracteres individuais, podemos aproveitar algo
desde a semana 0 que era moi misterioso e tipo de desinteressante no momento.
Pero agora, e especialmente cando chegar á criptografía nunha semana,
que vai ser moi poderosa.
Acontece que con algún ints e carrozas de datos types--
e caracteres e cadeas e outra coisas- algúns deles
pode ser facilmente converter a outro.
>> Por exemplo, cando falamos sobre ASCII algún tempo aquí está ago--
a maiúsculas A través M, punto, punto,
dot-- dixemos que hai un mapeamento entre estas letras e números.
E, de feito, é válido para minúsculas así.
Minúsculas un é 97, o capital é de 65 un.
E hai un número en ASCII, que é só ese mapeamento
sistema para todas esas outras letras.
Entón, o que significa isto?
Ben, eu estou indo a ir adiante e aberto se verdadeira rapidamente algo chamado
ASCII 0, a maioría dos cales é comentarios.
E de novo en liña poderá ollar a través dos comentarios.
>> E vexan o que iso vai facer.
Entón, ten unha función principal.
Teño-codificado os números só para agora, porque sei o que estou facendo.
Sei o que quero ver aquí.
E eu teño inicializar I a 65.
E eu estou contando a a través de 26 cartas total.
E que é o que eu vou imprimir unha liña de cada vez
se pode interpretar esta liña destacada?
O que será impreso?
Si.
>> Audiencia: Vai para imprimir a carta que
corresponde ao mapa da valor letra e valor enteiro?
COLUMNA 1: Exactamente.
Vou imprimir letra correspondente ao valor enteiro,
e viceversa, deste xeito.
Ben, este, alguén dixo anteriormente, é só un espazo reservado para un char.
Aínda é.
Isto, por suposto, é un marcador de posición para un non int-- unha nova liña.
E agora observe, o meu primeiro valor que Estou chamando este espazo reservado
non é só I. digo, en parénteses, char I,
que o carácter é parenthetical dicindo o compilador, tratar I
non como o que é, o que é un número.
Trata-lo como un personaxe real.
Tendo en conta que o segundo valor que estou conectando em-- I-- debe ser só un número.
>> Entón, se eu compilar este program-- polo que este é facer ASCII 0,
dot ASCII barra 0-- acaba de recibir esta pequena carta accesible que
apréndeme todo o posible mapeamento sen ter que pensar que
ou a través de descubrir iso por conta propia.
E eu tamén estou imprimindo, observe as letras minúsculas,
porque algunhas liñas despois, eu tamén imprimir este mapa
ben, que é só para dicir que unha vez que entender
o que está pasando por baixo o capó, pode
converter automaticamente e cara atrás.
E, de feito, se algún de vós nunca fixo iso na escola primaria
ou escoitou falar de alguén miticamente tomar unha nota
e pasala ao seu ou a amiga na clase,
pero revoltos o letras de A como B tórnase,
B e C convértese, ou algo así máis complicado do que iso, ben,
como é que vai facer sobre implantación que como un neno?
Ben, só tipo de saber A convértese en B, B pasa a ser C,
pero matematicamente, o que foi que o mozo está facendo?
O que estaba engadindo cada letra?
Efectivamente, 1.
>> Entón, cando cambiar de A para B, que é tipo de como o cambio de 65-66,
que matematicamente significa só engadir 1.
E por iso, se fose para aplicar que pouca técnica fraudulenta
para o seu profesor no código, pode facer exactamente isto só
por adición dunha única letra xuntos.
Así, en pouco tempo, estamos vai ver como nós
pode sacar proveito diso para realmente disputa xenuína e desembaralhar
información.
Non obstante, sabemos que comezan a introdución de un par de outras bibliotecas
aqui-- a secuencia dun hoxe.
E un sitio moi útil Esperamos que vai atopar
chámase reference.cs50.net, que o corpo docente teñen xuntos,
de xeito que se quere mirar para arriba traballos como strlen,
pode comezar a escribir o nome da función,
prema strlen alí, e, a continuación, unha explicación menos cómodo
vai aparecer.
Ou se quere que o oficial Explicación baseada en Linux,
pode facer clic máis cómodo na parte superior dereita, e
presentará a mesma información, pero en termos máis complexos.
Isto é un recurso útil para realmente saber todo o que fai.
>> A próxima vez que imos Bótalle un ollo Ovomaltine
e máis, e introduzir- ao mundo da criptografía.
Antes diso, veremos aínda esta semana.
E agora, Colton Ogden.
Vexo vostedes o mércores.
>> [Música tocando]
>> COLUMNA 1: Que o [BLEEP] está facendo?
>> COLUMNA 1: Estou comendo a miña sobremesa?
Como come-lo?
Coas súas mans?
>> [Música tocando]