>> [REPRODUCCIÓN DE MÚSICA]
>> ALTAVOZ 1: Este es CS50 y este es el comienzo de la semana dos.
Por lo tanto, vamos a bucear a la derecha en algo es decir con errores, por así decirlo.
Por lo tanto, aquí es IDE CS50 y he detuvo con antelación este screen-- maldita
ello.
Spoiler de alerta.
Correcto.
He tirado esta pantalla aquí, que tiene un programa muy simple.
Si nos desplazamos hacia abajo, la mayoría de esto es simplemente comenta,
pero aquí en las líneas 13 a través 17 tenemos un programa.
>> Es sintácticamente válida, lo que significa que si Compilo él, se compilar y ejecutar,
pero es buggy.
Este programa pretende en los comentarios encima de la tapa que se debe imprimir 10 estrellas,
pero no lo hace.
Y en base a su experiencia, o pronto a ser experiencia con C,
Puede que lógicamente discernir por qué esto es, de hecho, con errores?
¿Sí?
AUDIENCIA: Se va de cero a 10.
Eso es 11 iteraciones.
ALTAVOZ 1: Sí.
Así, va de cero a través de e iguales a 10,
que por supuesto es de 11 iteraciones.
Por lo tanto, se va a impresión, de hecho, 11 estrellas.
Por lo tanto, la convención de la informática en la mayoría de los lenguajes de programación
es, de hecho, sólo para comenzará a contar desde cero,
pero contar hasta, pero no a través de la valor que en realidad importa.
>> Ahora, esto es una cosa que Toma un poco de tiempo para acostumbrarse
e incluso Scratch, diseñada como es para los no programadores o no equipo
científicos y para los niños en gran medida, está diseñado para tener
empezar a contar por lo general a la una.
Y eso está bien.
Puede empezar a contar absolutamente en uno si eso es más cómodo.
Y contar hasta ya través de 10, pero te darás cuenta particular esta semana
y más allá de que tan muchas cosas en la programación
suponer que 0 es el primero dígitos con el que se cuenta,
que usted va a resultar más fácil sólo para entrar en este hábito de partida
desde cero y contar hasta el valor usted se preocupa en este momento de la
conseguir ir.
>> Por lo tanto, que se ha fijado que.
Cambiamos el menor o equivale a poco menos.
Echemos un vistazo a un segundo ejemplo aquí.
>> Así, este programa también afirma en su comenta encima de la tapa que se debe imprimir
diez estrellas, pero no lo hace.
¿Cuál es el error aquí?
>> Así, qué-- y lo siento, seamos claros.
10 estrellas.
Uno por línea, pero no es así.
Así que, de hecho, me dejó ir adelante y compilar éste porque es un poco menos
despejar basado en esa descripción.
Déjame ir a nuestro directorio de origen.
Hacer cochecillo un tajo de puntos, uno buggy.
OK, veo 11 estrellas, que sigue siendo problemática,
pero también son todo en una sola línea.
¿Cuál es el problema aquí?
Sí.
AUDIENCIA: [inaudible].
ALTAVOZ 1: Sí.
Así que esta es una sutileza que puede Recuerdo haberme hecho una breve mención de.
A pesar de que todo se ve bastante, y está muy bien sangría,
y como que se ve a los arañazos como en esa línea 16 y 17 son,
de hecho, con sangría bajo ese bucle.
Eso es irrelevante.
El equipo no se conocer o ver el espacio en blanco.
El espacio en blanco es sólo para nosotros los seres humanos, estilísticamente.
El equipo no sabe cuando se tiene llaves, que sería, de hecho,
solucionar este problema.
>> Así, si en realidad fuimos y poner explícitamente en estas llaves
eso sería solucionar este problema dejando en claro que el compilador
que realmente quiero para ejecutar dos líneas de código nuevo,
y otra vez, y otra vez.
Pero ¿cuál es la explicación fundamental?
¿Correcto?
Nosotros no estrictamente necesario rizado se prepara todo el tiempo,
a pesar de que es probablemente el mejor práctica para entrar en el hábito de todos modos
aunque añade dos caracteres a su código. ¿por qué?
>> AUDIENCIA: [inaudible]?
ALTAVOZ 1: Sí, así que es otra solución en conjunto.
¿Correcto?
Sobre todo si a primera vista no lo hace realmente apreciar lo que está pasando.
Bueno, seguramente podríamos acaba de hacer dos cosas a la vez
y simplemente evitar el problema por completo.
Y eso está bien, pero ahora, para los propósitos de la actualidad, lo que
es la explicación para el error?
¿Por qué eran todas esas estrellas en una línea?
¿Sí?
>> AUDIENCIA: Parece que si usted tiene una línea de código,
usted puede hacerlo sin ellos.
ALTAVOZ 1: Exactamente.
Esto es sólo una convención humana.
La gente se da cuenta de que es un poco molesto o aburrido
a tener que poner las llaves de todo de las veces si lo que quieres hacer
es ejecutar una línea de código.
Por lo tanto, los seres humanos decidieron algunos Hace tiempo que eso está bien.
Si usted quiere poner toda su bucle en esa sola línea como esta,
eso está bien con el single punto y coma al final.
Pero sólo se puede hacer una de esas línea sin las llaves.
>> Así que, cuando la guía de estilo CS50 como le para señalar,
verás que en general, es buen hábito
para entrar en esto hasta que estés extravío bastante cómodo
de este tipo de convenciones y hacer su propia cosa.
Mientras estás auto consistente.
Y hablaremos más sobre estilo un poco más tarde hoy.
>> Por lo tanto, permítanme abro otro programa.
Por supuesto, debemos fijar que el 10 también.
Déjame ir adelante y escribo un verdadero programa rápido que voy a llamar,
digamos, lazo dot C. Así, lazo dot C. Y en bucle punto C que voy a tener,
incluir E / S estándar punto H int void main.
Y ahora vamos a hacer, de hecho, un bucle.
Así, 4 int I consigue cero.
I es menos de, digamos, 50.
I más, más.
Y entonces aquí vamos seguir adelante y no imprimir F.
Y luego quiero imprimir I y una nueva línea, punto y coma.
>> Y esto debe imprimir todo el números de cero hasta 50?
Algunos cabeza asiente.
Unos núms.
¿Cuál es el error ya?
¿Cuál es el error fácil que hice?
Sí.
>> AUDIENCIA: [inaudible].
ALTAVOZ 1: Sí.
Así que, aunque parece como esto es lo que me propongo,
Recuerdo que I es también Sólo un carácter ASCII.
>> Por lo tanto, si yo digo, imprimir "I."
Es, literalmente, va imprimir I. Por lo tanto, si yo
querer plug-in de un marcador de posición valor que en realidad necesito hacer esto
y luego plug-in de la valor de I dinámicamente.
De lo contrario, sólo voy a obtener 50 de I en la pantalla.
>> Así que, déjame ir adelante y hacer de este bucle, ejecutarlo,
y, de hecho, tenemos todo el camino a través de 49.
Y si me desplazo en el tiempo que veo el número cero al principio.
>> Bueno, ¿y si me especie de pata?
¿Qué pasa si hago esto?
El hecho de que yo no estoy pensando.
¿Cuál es este programa.
Una vez que estás compila y ejecuta, va a hacer lógicamente?
>> AUDIENCIA: Nada.
>> ALTAVOZ 1: Nada.
¿Porque es eso?
>> AUDIENCIA: I está diseñado para el cero.
Por lo tanto, la condición es falsa.
ALTAVOZ 1: Sí, exactamente.
Todo el código es correcto, sintácticamente.
Esto compilar este código se ejecutará, pero no lo es
va a hacer nada útil porque yo me inicializar a cero.
Luego comprobamos, es que más del 50?
Obviamente, no, no lo es.
Así que el bucle no se ejecuta en absoluto.
>> ¿Y si hacemos algo un poco más temerario?
Así que, ¿qué pasa si lo hacemos como int I consigue cero.
Y ahora me deja utilizar el rato bucle, que era otra condición.
Y mientras yo digo, mientras que I es mayor que o igual a cero y, a continuación, en el aquí
seguir adelante y guardar el archivo, haga bucle.
Y estoy a punto de ejecutarlo.
¿Qué voy a ver esto tiempo con un bucle while?
Sí.
>> AUDIENCIA: Un bucle infinito?
>> ALTAVOZ 1: Un bucle infinito?
¿Si y porque?
AUDIENCIA: Porque es siempre cero.
ALTAVOZ 1: Sí.
Así que se inicializa a cero.
Por supuesto que es siempre mayor que o igual a 0 como resultado.
Así que, yo sólo voy a ver esto infinitamente.
Y ahora, este ha llegado una vez o dos veces a la cabeza del curso.
¿Qué sucede cuando usted tener un bucle infinito?
>> AUDIENCIA: Control C.
ALTAVOZ 1: Sí.
Así Control C eventualmente responder.
Por desgracia, hemos imprimimos millones y millones de ceros ya
por lo que el equipo tiene tipo de tengo delante de mí.
Por lo tanto, va a ignorar me para un poco.
Pero si usted acaba de golpear Control C unos pocos veces en su teclado Mac o PC,
finalmente debe, de hecho, dar por terminado.
Y si no, le mostraremos algunos técnicas antes de tiempo en el que
en realidad puede matar a la fuerza a los programas, al igual que en Windows y Mac OS,
si es necesario.
Pero vamos a intentar algo más.
Vamos realidad Incremento I. Es esto todavía va a ser infinito?
Déjame correr esto.
Y ahora usted puede clase de ver lo que está pasando.
Esto, también, es un bucle infinito.
Pero esto es un poco de una pregunta con trampa.
¿Esto va a imprimir números de siempre?
>> AUDIENCIA: No.
ALTAVOZ 1: No.
¿Por qué?
He oído que algunos nos aquí.
Alguien-- Sí.
AUDIENCIA: Usted no tiene suficiente bits para mantener realmente está pasando.
ALTAVOZ 1: De acuerdo.
Así que no tengo suficiente bits para seguir adelante.
Entonces, ¿qué va a pasar?
Es sólo va a parar?
>> AUDIENCIA: En algún momento que cerrará el--
ALTAVOZ 1: Se cerrará el down bucle, pero ¿por qué?
¿Qué va a pasar en el final de sus fronteras?
¿Sí?
AUDIENCIA: Se hará un ciclo de nuevo a los números negativos.
ALTAVOZ 1: Para los números negativos, o si sólo estábamos tratando positivo,
cero por lo menos.
Así que sí, absolutamente.
Recordemos que vimos la última vez que si incrementar sus pedacitos demasiadas veces,
y vosotros Fore desbordamiento la capacidad de su int
o lo que sea el tipo de datos es, eres va a envolver alrededor, probablemente,
dos números negativos.
O si usted ha especificado que su este producto debe ser positiva,
que se puede hacer, pero nosotros no hemos visto eso todavía,
podría terminar al menos volver a cero.
Aunque, en realidad sí.
En este caso, negativo números, en cuyo caso
el bucle se va a terminar porque no es, de hecho,
Mayor qué o igual a cero si es negativo.
>> Así que, por desgracia, cómo larga tendríamos que esperar?
En este momento estamos hasta qué, 2000000-ish?
Somos como 2 mil millones, vamos a tener que esperar
hasta que realmente podemos ver este síntoma.
Pero podemos ver un poco más rápido, maybe-- vamos a ver si podemos interrumpir.
Vamos.
Incluso los menús están apareciendo lentamente.
Correcto.
Por lo tanto, vamos a volver a que en poco tiempo.
Es una buena tiempo-- maldita sea, los cachorros.
>> Es un buen momento para que algunos anuncios.
Así que, si te pueden gustar para participar en YHack,
que es ser un evento patrocinado por nuestros amigos de Yale.
Y, de hecho, algunos de el curso de TFS en Yale están involucrados con esto.
YHack es una organización internacional Hack-a-thon organizada por y sostuvo
en Yale, que reúne a 1.500 al igual que los hackers de mentalidad y creativos todos
sobre el mundo.
Si esto es de interés, echar un vistazo aquí.
Si esto es demasiado brevemente en la pantalla, echar un vistazo a las diapositivas de hoy
para la dirección URL para yhack.org.
Por lo tanto, también a pocos anunciar.
Así que, oficialmente secciones comenzarán la semana que viene aquí y New Haven.
Tenga en cuenta que voy a recibir una correo electrónico a finales de este fin de semana de lo más probable.
Toma mucho tiempo para CS50 a la sección,
dadas todas las personas en el clase y todo el mundo se mueve alrededor.
Y todos los becarios de enseñanza ' horarios también están todavía solidificando,
pero permanezca atento a un correo electrónico y si es necesario ser, puede volver a la sección de allí después.
>> Study.cs50.net.
Por lo tanto, incluso si usted es un participante constante en secciones, darse cuenta de que casi todos
de los recursos que usamos en secciones están a disposición del público en el CS50
Estudiar en este URL aquí.
Por lo tanto, si desea nunca para volver opinión el material de la sección, o leer por delante,
o no se puede hacer un poco de semana, darse cuenta de que las diapositivas de la muestra,
y los problemas y las definiciones, y más están todos allí también.
>> Las horas de oficina reanudan hoy, y mañana, y el miércoles,
y el jueves comprobar el supuesto de sitio web para el horario.
>> Y también, ahora el lanzamiento hoy es CS50 Discuta.
Por lo tanto, siempre y cuando usted tiene preguntas para entre sí o para el personal de la asignatura,
y generalmente están trabajando en un conjunto de problemas,
das cuenta de que no lo hace necesariamente que dar vuelta a la humana próxima usted.
Si no hay nadie allí, usted puede llegar a nosotros y compañeros de clase
en línea a través CS50 Discuta.
Por lo tanto, esta es una discusión pensión para el curso,
y darse cuenta de que este es tal vez el mejor
lugar para empezar cuando usted tiene preguntas cuando fuera de las horas de oficina
en particular.
>> Para llevar comenzarán esta semana también.
En Fuego y Hielo [Inaudible] en New Haven.
Echa un vistazo a el curso de página web con el fin de confirmar su asistencia.
En primer llegado, primer servido para eso.
Si usted no recibe en esta semana haremos éstos Viernes mayoría de todos los
durante el plazo.
>> OK, y ahora una palabra sobre la clasificación.
Especialmente al entrar en un problema establecer uno, que está fuera esta semana,
y el problema fijó dos ya partir de entonces.
¿Cómo hacemos para evaluar conjuntos P y evaluar la calidad de los mismos?
Así, es de cuatro ejes que utilizamos en CS50, y son estos cuatro aquí.
>> Ámbito de aplicación, que captura en una numérica base de lo mucho del conjunto P
Qué hacer frente a.
Se corresponde aproximadamente con esfuerzo, y es nuestra forma de capturar
¿trató la mitad de la P set, todo el conjunto P.
Esto es fácil de conseguir perfecta puntuaciones en si lo hace, de hecho,
tratar todos los aspectos del conjunto P.
Así que tenlo en mente.
>> La corrección es exactamente eso.
¿Su trabajo código como la especificación y como solución de la muestra el personal '
sugieren que su código debe, de hecho, trabajar.
Check 50, si no se ha cumplido con lo sin embargo, está en P establecer una especificación
y de la voluntad general, darle respuestas sí / no
en cuanto a si el código es correcto.
Al menos en lo que vamos Para evaluar en base a las pruebas
que se corre dentro de ese programa.
>> El diseño es mucho más subjetiva.
Esto es lo bien escrito es su código.
Y esto es algo que vas a mejorar en el transcurso del tiempo,
y es algo que vamos a proporcionar más información cualitativa sobre.
Y por diseño que podría significa antes de tiempo
podría tener la tentación de alguna P set de hacer algo loopingly,
pero para tener tal vez tres, o cuatro, o cinco bucles anidados delanteras o mientras anidado
bucles.
Eso generalmente debe empezar a hacer temblar
y sería generalmente mal diseño considerado.
Y usted comenzará a ver en la clase y De la clase que buenas maneras de hacer las cosas,
malas maneras de hacer las cosas que podrían ser todos correctos, pero no
necesariamente bien diseñado.
Al igual que escribir un ensayo.
Usted puede ser capaz de poner palabras en una página que son gramaticalmente correcto,
pero el ensayo o la tesis que están en es
completamente incoherente o poco convincente.
Y lo que podría ser el análogo en el mundo escrito de mal o buen diseño.
>> Y el estilo, también, es bastante subjetivo.
Pero por lo menos que esperamos coherencia.
Esto es lo bonito que es su código.
Son cosas muy bien sangría?
Son sus variables bien nombrados / ¿Son todos de sus paréntesis y llaves
alineado como deberían ser?
Tenemos una guía de estilo CS50 como el conjunto problema te orientará en.
Los más cómodos son la bienvenida a alejarse de ese
siempre y cuando usted trabaja por cuenta consistente.
Y esto, también, es una lección vamos a reforzar en la sección.
Así que, si todo esto era un poco , cuenta el conjunto y las secciones P rápida
voy a entrar en más profundidad en poco tiempo.
>> Pero en general, tenemos muy pocos cubos para CS50.
Las puntuaciones son generalmente en una escala de uno a tres, o de uno a cinco.
Estamos literally-- y yo no podemos decir esto lo suficiente en la primera semana.
Tres es buena.
Así, a pesar de que, sí, tres de cinco años normalmente, matemáticamente,
podría ser un 60 por ciento o menos como un D.
Tres es, de hecho, buena.
Y, de hecho, esperamos la mayoría de los estudiantes en la clase
para empezar el término alrededor dos en dos, y tres, y cuatro patas.
Probablemente no tantos cincos.
No hay muchos otros.
Pero en general para iniciar en el punto ideal de la curva
de modo que a medida que pasa el tiempo, en realidad hay espacio para,
y oportunidades para la progresión superior.
Así que, por favor no equiparar tres con 60%.
Es mucho más abstracto que eso.
La fórmula con la que se calcula grados se ponderarán del modo siguiente.
Corrección vale más.
Diseño vale un poco menos.
Estilo vale un poco menos.
Y esto generalmente captura la cantidad de tiempo
que va en conseguir cada uno de estos ejes justo.
El estilo es muy fácil, debe ser súper rápido,
pero es un hábito fácil para obtener pereza.
La corrección podría tomar que la mayor parte del tiempo.
Persiguiendo algunos podrían bug tomar esa hora extra o más,
y así, el marcador en última instancia, que capta.
Y por eso, ahora una palabra más grave.
Desde CS50 tiene la distinción, para bien
o para mal, de ser tal vez mejor informado
con los temas de la académica la honestidad de la mayoría de cualquier otro curso.
Y, en efecto, es a mi conocimiento que enviamos más estudiantes, por desgracia,
con fines disciplinarios cada año como consecuencia de ello. Por lo tanto,
en el interés de la plena divulgación, vamos a hablar brevemente
acerca de lo que sucede en CS50, y lo que puede hacer, y lo que puede tener en cuenta.
>> Así pues, aquí desde 2007, cuando Heredé el curso,
es el número de casos de mesa Ad.
Junta de anuncio es disciplinaria de Harvard cuerpo, o ahora el Consejo de Honor,
a la que se refieren los casos cuando los estudiantes hacen algo que el curso de
programa considera irrazonable.
No hay patrón verdadero aquí, diría yo.
Se fluctúa en el años, pero en general
este es el número de los casos que se conocen.
El número de estudiantes que están involucrados?
Es también varía.
Por lo general, el año pasado por ejemplo, 29 estudiantes de la Universidad de Harvard
eran Ad embarcados, por así decirlo.
29 de ellos los estudiantes actuales, Dos de ellos estudiantes anteriores,
que estaban colaborando de alguna manera desfavorable.
Y luego, en términos de la porcentaje, por lo general alrededor de 3%
de la clase que, por desgracia, hace que este tipo de decisiones.
>> Así, el año pasado fue de 3,5% del total de estudiantes de CS50
que era Ad embarcados, por así decirlo.
>> ¿Entonces, Qué significa todo esto?
Y ¿qué es lo que realmente hacemos?
>> Así, para la divulgación completa, nos absolutamente, como los informáticos,
contar con herramientas de software a nuestra disposición y es muy fácil para nosotros, para ser justos,
compañeros de clase de que otros que no son cruzar estas líneas para cruzar comparar
cada presentación este año en contra de cada presentación durante los últimos ocho años.
Software hace esto.
Y en última instancia, es los ojos humanos que deciden
si o no hacer referencia alguna la materia para su posterior adjudicación,
pero el software sin duda ayuda.
Y esto, francamente, es por eso que creo que tenemos un número tan grande de CS50.
No es porque CS50 estudiantes o estudiantes CS más
generalmente son menos honestos que cualquier otro estudiante,
es sólo tenemos la herramientas y las técnicas
con la que aprovechar esta primera pasada.
>> Pero sí mantener un ojo en todas estas cosas
así, de nuevo, en interés de la reconociendo el trabajo que se está poniendo
en por una súper mayoría de la clase.
Y la política del curso en la honestidad académica,
a pesar de que es un montón de párrafos de largo con un montón de balas
que son de esperar bastante legible, que realmente no se reducen a ser razonable.
Y la mejor regla de oro que ofrecemos dentro del plan de estudios
Es esta, la esencia de todo el trabajo que
someterse a este curso debe ser la suya.
Y de hecho, en casi todos los casos referidos para acción disciplinaria
que era a causa de algún estudiante a altas horas de noche típicamente volvió su código
más pura y simple a un compañero de clase, que luego lo adoptó
en su totalidad o significativamente de los mismos.
>> Pero en realidad, esto está bien.
Y de hecho, en la oficina horas, las tiras de papel
usted ha sido entregado si vienes por la oficina horas la semana pasada alienta tanto.
Tienes toda la bienvenidos y alentados
para discutir los boletines de problemas con los compañeros de clase.
Para ayudar a los demás cuando tropiezo.
Pero en general, la regla de oro debe ser esto, "cuando usted está pidiendo ayuda,
usted puede mostrar su código a los demás, pero usted no puede ver la suya ".
Así que, en otras palabras, si estoy luchando con algún conjunto P
y yo estoy sentado allí en el comedor salón, o en la biblioteca,
o en el aula tratando de encontrar alguna falta,
Ciertamente puedo mostrar mi código en mi pantalla
a la persona que se sienta al lado para mí, sin duda el personal,
sino también un compañero de clase.
Pero si la solución que mi compañero de clase ofrece es, oh,
aquí sólo echar un vistazo a lo que Lo hice, que cruza la línea.
>> Y me atrevería a decir que es por lo general una cosa razonable para la mayoría de la gente
de detectar muy fácilmente la línea de.
Y así, consulte el plan de estudios para más detalle.
Y ahora uno de los más aspectos controvertidos
del programa CS50 que pensé que hablaría en conclusión aquí
es la llamada cláusula de arrepentimiento.
Así que, aquí está toda la letra pequeña.
Pero, en general hemos visto en los últimos 8 años o más
que, de hecho, casi todos CS50 de casos de deshonestidad académica
han sido el resultado de simplemente pobres haciendo tarde en la noche la decisión.
El resultado de la tensión, el resultado de falta de alimentación, la falta de sueño,
demasiadas series P, demasiados plazos, demasiados compromisos.
Acumule en un 02 a.m. Estrés, 03:00 AM, 4:00 am, con un plazo inminente.
La mayoría de los estudiantes en estos casos simplemente han tomado malas decisiones
que muy bien podrían lamentar la mañana siguiente si no minutos más tarde,
pero hasta el año pasado no hubo válvula de escape que estos estudiantes podrían
realmente abrirse a abordar realmente el problema de frente y sin miedo a ser
arrancado desde la universidad en conjunto.
>> Y, de hecho, hemos introducido esta cláusula pesar del año pasado,
que dice que si dentro de 72 horas, tres días,
de cruzar alguna línea prescrito en el plan de estudios
vienes adelante a uno de el curso de cabeza y vamos a tener una charla al respecto.
Todavía hay algunos de los que resultado, al contrario de lo que es
ha informado de lo contrario.
Todavía hay algún resultado que es accionable por el curso,
en general, la reducción a cero de un conjunto P o tomar alguna otra acción,
pero lo haremos, de hecho, manejarlo nosotros mismos y no
consulte lo más alto eran el resultado podría ser mucho más graves.
Y, de hecho, para compartir lo que pasó el año pasado, en los ocho años, y ahora
nueve años, de la enseñanza de este curso y después de juguetear con varios botones,
girando varios diales en el último varios años en la honestidad académica,
y ver por los datos sin aparentes impacto, incluso de los discursos de este tipo,
Este fue sin duda lo mejor hemos introducido pedagógicamente
en ocho años a lo largo de estas líneas en CS50.
>> 19 estudiantes se presentaron bajo esta cláusula el año pasado.
Nos tomamos ninguna medida para siete de esos estudiantes,
determinar que eran innecesariamente preocupado.
Ellos no tenían, de hecho, cruzado una línea, pero
fue una buena charla para tener, no obstante.
Nos lo quitaron 11 de las puntuaciones que se presentaron.
Y en un caso, le preguntamos a un estudiante para hacer un conjunto de problemas.
Pero más convincente, sinceramente, con estos 19 charlas,
que era mucho más de lo espera que tengan, cada una de ellas
10 minutos de tal vez una una hora de duración, también trajo
a la luz una serie de cuestiones en relación con problemas familiares, problemas de amigo,
problemas de salud mental que luego contratan,
con la bendición, residente del estudiante decano, o amigos, o cualquier otro número
de los recursos de apoyo.
Así que esto era de lejos uno de los mejores usos de nuestro tiempo
y uno de los mejores intervenciones.
>> Con eso dicho, no tenía de entrada en la tasa de detección
de deshonestidad académica en general.
Y me atrevo a decir, este subconjunto de los estudiantes de último año
era un grupo demográfico que nunca antes identificado antes
y nunca había conectado antes.
Y así, se trataba de maravillosas historias de éxito
a pesar de que salieron a la luz en menos de circunstancias óptimas.
Por lo tanto, tenga esto en cuenta como usted hace, tal vez,
alguna mala decisión a ti mismo por la noche,
que se recurre tanto tiempo como el estudiante en esa situación
poseer y presentar para que podamos tener ese tipo de charla y tratar con él
de una manera que es educativo, y luego podemos dejarlo atrás al día siguiente.
>> Así que sin más preámbulos, tomar la borde fuera de esta conversación,
la razón por la que los cachorros son hasta decir sólo para romper el hielo por un momento.
Y, por desgracia, todos son el sueño, pero lo que se suponía iba a suceder aquí
era todo el mundo se suponía para asombro y tipo de relajarse
después de eso muy pesada conversación.
Pero al parecer, me puse los cachorros para dormir.
Pero si vas a CS50 de cachorros web Slash,
puedes verlos todo el día.
Particularmente tal vez 02:00, o 3:00, o 4:00 de la mañana en la noche
para ver un poco de alivio de la tensión allí.
Así que eso es slash cachorros.
Correcto.
¿No era eso divertido?
OK.
Así que, volviendo a algún equipo ciencia, si me lo permite.
>> Por lo tanto, recordar que la última vez que empezamos sin mirar justo en principal, que
fue la función por defecto, el cuándo bandera verde clic equivalente,
pero también empezamos brevemente escribir algunas de nuestras propias funciones.
Y hasta el momento ninguna de estas funciones han sido particularmente grande o carnoso.
Te metes en los más grandes funciones, probablemente, P conjunto 2, P set 3,
Definitivamente P fijó 4 en adelante.
En este momento la mayoría de sus programas, si no todos ellos, sin duda para P
conjunto 1 se puede hacer en su totalidad en principal.
Si su programa sólo cinco líneas, 10 líneas,
incluso 20 líneas de largo, perfectamente razonable para escribirlo
todo en principal y de no complicar más su código, pero lo que estamos haciendo hoy
y hacia adelante está intentando también introducir algunas buenas técnicas de diseño
de manera que por ejemplo el código se vuelve más complicado y como los problemas
quiere resolver de obtener más y más interesante que tiene, más o menos,
las herramientas en su caja de herramientas con las que para diseñar buenas soluciones a esos.
>> Por lo tanto, vamos a echar un vistazo rápido de vuelta en este programa desde mi última semana, que
fue funciones cero punto C. Y cuenta de que, sencillamente,
parece que esto con dos funciones, el principal y el nombre de impresión.
Y pensando en volver o tal vez revertir la ingeniería de hoy,
lo que fue la motivación para introducir una función en la línea 28 llama,
Nombre de impresión?
O lo que era este un ejemplo de en términos de un principio o comida para llevar,
si tú pudieras.
Algunos murmullos.
¿Qué?
>> Sí descomposición tan funcional es una especie de la manera elegante de decir,
descomponer su programa en sus partes constituyentes
y luego usar esas partes para ensamblar un conjunto.
Por lo tanto, eso también es sólo un poco de un bocado ya,
pero esto es quizás incluso una mejor ejemplo de algo
acaba de llamar la abstracción.
¿Correcto?
Abstracción va a ser uno de los temas recurrentes en CS50
y ciencias de la computación más en general, ya que es
una técnica con la que se puede resolver problemas de manera más eficaz, ya que
puede escribir soluciones más intuitivamente y de manera que las escalas
y es comprensible por otras personas.
¿Qué quiero decir con esto?
>> Así, podría decirse que es mucho más fácil de leer mirar un programa como este,
súper corto que sea.
Cuando vea en la línea 22 que hay una función llamada, el nombre de impresión.
Ese nombre solo dice lo que hace.
Esa función aparentemente toma de entrada entre sus paréntesis,
y al parecer hace algo, presumiblemente imprime el nombre.
Y así, a pesar de que absolutamente podría tener
hecho lo que hicimos hace una semana, que era acaba de tomar esta línea real de código,
deshacerse de este, y obtener deshacerse de este todos juntos,
que tipo de resumieron distancia la noción de la impresión de un nombre.
No me importa si usted está utilizando def impresión.
No me importa si tiene una ciento S y N. Estos barra invertida
son detalles muy arcanos.
Lo que me importa como programador está imprimiendo un nombre.
Y así, ¿qué mejor manera de hacerlo que por llamar a una función, el nombre de impresión?
Y así, esa fue una de las motivaciones para hacer algo como esto.
Hacer el código más legible, más reutilizable, y también se auto descriptiva.
Ahora, vamos a echar un vistazo en otro ejemplo,
que era uno funciones, que teníamos aquí.
>> Por lo tanto, éste es quizás aún más convincente porque, en este caso,
No quiero que acaba de obtener un int.
Quiero conseguir un int positivo.
Y resulta que para obtener un resultado positivo int que tiene que hacer un montón de trabajo de campo.
¿Correcto?
No es una simple línea llamar como el nombre de impresión era,
que es ciertamente menos convincente.
>> Para obtener un int positivo, logically-- déjame desplazo hacia abajo para ocultar esto.
¿Qué tienes que hacer?
Como todas las herramientas que tienen en este momento se
cosas como definición de impresión de Standard Biblioteca y también de la biblioteca CS50
tenemos Obtener Int, y obtener Float, Obtener Largo Largo, Get String,
pero el único, Germane, en este momento es conseguir Int.
Por lo tanto, si la única herramienta que tienes en su caja de herramientas es Obtén Int,
cómo hacemos para la implementación que para conseguir int positivo?
>> AUDIENCIA: Crear un registro y se les de si la entrada que dieron
fue positivo o no.
>> ALTAVOZ 1: Perfecto.
Exactamente.
Otra de las herramientas que tenemos en nuestra caja de herramientas de una o dos semanas
es sólo la construcción de bucle.
Y así, si, si usamos un tiempo lazo, o un do while, o un primer plano
bucle que probablemente podría conseguir lejos con cualquiera de los que están en alguna forma.
Podemos aplicar la noción de get int positivo sólo por el uso Obtén Int,
y luego simplemente seguir llamándolo de nuevo y mantener molestar al usuario
hasta que él o ella realmente nos da lo que queremos.
>> Y ahora, este abstracción del proceso
de conseguir un int positivo en una función llamada
Obtener Int positivo es un poco más convincente porque mira esto.
Estos son como 10 más líneas de código que
están involucrados en la obtención de un int positivo, y yo no me importa cómo lo hagas.
Lo único que importa es que usted puede hacerlo, y por eso me he
ocultos todos estos detalles detrás de un función llamada Get Positivo int que,
de hecho, tiene esta do while.
>> Y ver la semana pasada por la sintaxis allí, pero simplemente declara N,
y se imprime el instrucciones para el usuario.
Llama Obtener Int y luego comprueba esta condición de nuevo, y otra vez,
y otra vez hasta que el usuario coopera.
>> Así que ahora, a pocas comprobaciones de sanidad.
Para aquellos familiarizados quizás con un poco de programación,
¿por qué se declara N, ¿por qué creo N fuera del bucle Do While?
¿Por qué es en la línea 29 y no en como 33, por ejemplo.
>> AUDIENCIA: Porque cuando declararlo fuera, tipo
de más, la scope-- más grande
>> ALTAVOZ 1: Good.
>> AUDIENCIA: --y si se declara que dentro del bucle, [inaudible]
porque no sabe nada de él.
ALTAVOZ 1: Exactamente.
Si puedo simplify-- es un problema de alcance.
Y alcance se refiere al contexto en el que existe una variable o es utilizable.
Y la buena regla de oro aquí es que en general, cuando se declara o crear
una variable sólo se puede utilizar en el interior de los más cercanos abrazar llaves.
¿Entonces que significa eso?
Si, en cambio, deshacer esto y voy con algo que se siente un poco más simple.
¿Correcto?
>> Línea 32 sólo se ve más limpio para mí ahora.
Estoy haciendo las dos cosas a una vez y luego asignar
la mano derecha a la mano izquierda.
El problema ahora se basa en que la definición del ámbito de aplicación
N es que se puede utilizar en líneas 31 y 32 en el interior de este bucle,
pero donde por esa definición puede no ser utilizado?
De acuerdo, ¿qué?
Sí.
>> AUDIENCIA: 35.
>> ALTAVOZ 1: 35.
Definitivamente no 35.
Y también dónde si no?
AUDIENCIA: 34.
ALTAVOZ 1: Incluso 34 es problemático porque es
fuera de las llaves.
Y así, de hecho, vamos a ver qué pasa.
¿Correcto?
Esto puede parecer un poco intuitiva o no podría,
pero vamos a ver lo que el compilador tiene que decir cuando
entramos en directorio de origen de hoy.
Hacer función una.
Oh Dios mío.
Bueno, finalmente terminé que, por cierto.
Correcto.
¿Y cuál es el problema aquí?
Muy arcana a la vista.
Pero esto es lo que typed-- hacer funcionar una.
Esto es lo que induce, que es en realidad
utilizando el sonido metálico del compilador con algunas de esas banderas
que vamos a ver de nuevo en poco tiempo.
Y de nuevo, busque siempre en el primero de error,
debido a que sólo podría tener una cascada efecto de sentido en otras líneas.
>> Así que lo que esto significa es que el problema está en función 1.c.
Está en la línea 32.
Y es en la columna, o carácter, 13.
Así que cuando su editor de texto que puede ayudará a identificar dónde es el problema.
Así que si me desplazo hacia arriba, lo que es la línea 32?
Eso es de hecho éste eso ya está resaltado
derecho aquí-- no utilizada n variable.
Pero no es inusitado.
Lo estoy usando.
Pero el compilador de confundir, porque sólo existe dentro de este ámbito.
Y lo que no puedo usar aquí.
No puedo usar aquí.
Y el compilador, por lo tanto, ni siquiera importa que estoy tratando.
Parece ser inusitado dentro de su alcance real.
>> Así que podemos ampliar el alcance haciendo exactamente lo que empezamos con-- int n.
Y a pesar de que no es así mirar tan elegante, tal vez,
y estamos teniendo una línea adicional aquí, ahora es el alcance de todo el mundo.
Así que vamos a intentarlo de nuevo.
Así que la función de una.
Agradable.
Y ahora si me si yo ejecuto la función uno, vamos a darle negativo 10,
negativo 1, 0, 1, y de hecho funciona.
>> Así que no hay otra solución aquí.
¿Tu sabes que?
¿Qué pasa si yo realmente estoy luchando con esto?
Yo no sé dónde está el n supone que debe ir.
¿Tu sabes que?
Yo sólo voy a poner todo el forma en la parte superior de mi archivo aquí.
¿Cómo sería esto hacer, qué te parece?
¿Sí?
>> AUDIENCIA: [inaudible].
ALTAVOZ 1: Sí.
Así que me he hecho global, por así decirlo.
Si usted tiene una variable que está fuera todas las funciones que se le permite,
y el código debe compilar y n ahora será accesible no sólo en get
int positivo, pero también en la que main-- es un poco preocupante porque hay
ya una n en principal, por lo que más en que en tan sólo un moment--
pero esto sería considerado un mal diseño.
Correcto.
Si usted tiene que recurrir a algo así como, oh, voy a
sólo hay que poner aquí porque el código parece compilar
en general, no es la mejor práctica.
Más bien quiere elegir el más estrecho posible alcance
para las variables, lo que significaría va con nuestro diseño inicial, que
es aquí.
>> Ahora como un aparte, si tuvieras una forma idéntica con nombre de variable de aquí,
la forma c manejaría esto-- aunque esto no va a suceder demasiado often--
es que esto sigue siendo perfectamente bien aquí.
Pero esta definición de n en línea 22 habrá sombra el global.
Así que éste trabajará dentro principal, y el global
en realidad se aplican cuando usted está en conseguir int positivo pero más sobre esto
otra vez, pero sólo Para los curiosos.
>> Así que en resumen, podemos solucionar este problema aquí.
Ahora vamos a desmenuzar otras dos piezas antes de ver una última línea de código
en este programa.
Obtener int positivo.
En el lado izquierdo de su palabra es la palabra int.
¿Qué significa eso qué te parece?
Hasta ahora hemos visto mayormente vacío.
¿Sí?
>> AUDIENCIA: Es el tipo de variable que usted está preguntando acerca.
>> ALTAVOZ 1: Sí, es el tipo de, déjame No digas variable, pero el tipo de valor
que yo estoy pidiendo volver.
Y de hecho, eso es intuitiva aquí, es de esperar.
¿Correcto?
Si usted desea conseguir un int positivo, ¿qué es lo que
quiere que el function-- como nuestro voluntarios de la semana pasada
a entregar una copia de una pieza de papel con un int en él?
Y así hemos especificado que el tipo denominado de retorno de esta función
es conseguir int positivo.
Si no queremos que devolver nada, dices vacío.
Si quieres que vuelva una cadena, dices cadena.
Si quieres que vuelva un flotador, dices flotador.
Pero el único que se aplica aquí lógicamente, porque estoy usando get int,
a pesar de que me estoy limitando a valores positivos, es devolver un int.
>> Así que por el contrario, ¿qué significa que hay un vacío en paréntesis?
¿Qué hacen los paréntesis generalmente definir?
¿Sí?
>> AUDIENCIA: Significa la función de en realidad no conseguirlo.
>> ALTAVOZ 1: Significa la función de en realidad no conseguir qué?
>> AUDIENCIA: Una entrada.
>> ALTAVOZ 1: Una entrada, en absoluto.
Así que de hecho, si el paréntesis aquí se especifica vacío,
Eso sólo significa que no quiero ninguna entrada.
Yo me encargo de el problema yo mismo.
Y, de hecho, usted no tiene que decirle conseguir nada int positivo.
Usted acaba de decir, obtener int positivo, y que la función se apagará y hacer su cosa.
>> Pero ha habido un pequeño truco que he estado jugando aquí todo este tiempo
para asegurarse de que el código se compila.
Observe que int-- obtener positivo int void-- está en la línea 27.
Pero por alguna razón aparentemente raro es también aquí en la línea 16.
Y sólo por si acaso voy a repetir esto por lo que es perfectamente idénticos.
Y yo he dicho prototipo con un pequeño comentario de una sola línea.
¿Qué sucede si elimino que, Y Ahora vuelva a ejecutar hacen la función 1, introduzca.
¡Vaya.
Espera un minuto.
¿Dónde está mi ficha?
¿Eh?
Colocarse.
Realiza la función 1.
Allá vamos.
OK.
No había guardado correctamente.
Por lo tanto, creo que hay un poco de error aquí donde yo no estoy
ver el nombre de la ficha en el momento.
Entonces, ¿qué está pasando aquí?
Declaración implícita de función conseguir int positivo es válida en C99.
Así confundiendo de nuevo.
Entonces, ¿qué es esto indicativo de?
Bueno, resulta que C es bastante estúpido.
Bueno, es la programación idioma, o mejor dicho, el compilador es.
Sólo se sabe lo que tiene enseñado, y es sólo
va a saber algo si enseñado antes.
En otras palabras, en principal en este momento, estoy
tratando de llamar a una función llamada conseguir int positivo.
Pero el compilador no va darse cuenta de que conseguir int positivo
existe hasta la línea 26.
Y así, lo que hace el compilador es sólo errores tan pronto como se pone a la línea 17,
diciendo declaración implícita de conseguir int positivo, que
es sólo una forma elegante de decir, no lo sé sabe qué conseguir int positivo es todavía.
>> Otros lenguajes como Java y Python y Ruby pueden mirar hacia adelante.
C no lo hace.
Y así el camino fijamos esta es una de dos maneras.
Cualquiera de los dos, si el problema es que llegar int positivo no se ha visto antes,
así, permítanme muevo a la cima.
Eso sería solucionar este problema.
Pero en general, es mejor técnica considerada
para poner su función principal en el mismo superior para que un ser humano la lectura de su código
sabe lo que hace el programa, debido principal no se entierra todo
el camino en la parte inferior o en el medio.
Es en la parte superior.
Para que no se siente ideal.
Y usted puede conseguir realmente en situaciones en las
si las llamadas Una de las funciones otra, que llama a otro,
usted puede conseguir en un problema donde no puede ir encima de la otra, lógicamente.
Simplemente no es posible.
>> Y así, la manera de trabajar evitar esto es simplemente tomar
La firma de la función, por lo que speak-- la primera línea, donde es declared--
y acaba de copiar, pegar en el superior, pero no con braces-- rizado
sólo con un punto y coma.
Es como una pequeña pista de lo que está por venir.
Y, de hecho, todo este tiempo en el que han visto cosas como io.h estándar
y cs50.h, de manera similar, en esos puntos archivos h hay otros prototipos.
Y veremos que en poco tiempo.
>> Así que en resumen, cuando se tiene un programa en un archivo con múltiples funciones
además de principal, casi siempre quieren declararlos
simplemente por medio de su primera línea, seguido por un punto y coma,
en la parte superior del archivo.
Eso fue una gran cantidad de una sola vez.
¿Alguna pregunta?
Correcto.
>> Así que vamos a pasar a continuación, a algo así como la tos.
Oh.
Qué apropiado.
Correcto.
Tos.
Así que aquí es un c implementación de un programa
que hicimos el otro día en Rasguño que muy simplemente
dice la tos, tos, tos.
Correcto.
Y alguien dijo unas pocas Hace días que no hay
una manera de limpiar el código ya.
¿Correcto?
Tan pronto como usted está copiando y pegar probablemente mal diseño.
Por lo menos una vez que lleguemos a cuatro o cinco o 20 tos, se siente una mala práctica.
Acabamos de seguir copiar, pegar.
¿Cuál es la solución obvia a la limpieza de este programa para arriba?
>> AUDIENCIA: Loop.
>> ALTAVOZ 1: Sí.
Así que utilice un bucle.
Y podemos usar un bucle para, por un tiempo bucle, cualquier número de enfoques.
Y de hecho, eso es lo que que hacemos en la versión uno aquí.
En cambio me he reescrito en la versión uno de cough.c
siendo la tos sólo dentro de un bucle para.
Muy bien, pero hay una oportunidad ahora de tipo de inicio
para diseñar este un poco más como la lección que nos enseñó hace un momento,
que es esto-- suponer que quería para crear una función llamada tos,
Consideremos por un momento lo que va a ser similar.
Así que si quiero algo a toser, sólo necesito
utilizar la impresión f dentro de la función.
Y de hecho lo soy.
Y de hecho, todo esto tiempo, en cualquier momento que estés
algo que imprimir la pantalla, un programador
exigiría que un efecto secundario.
¡No es entregándome a alguien de vuelta un valor.
Me está tomando algún tipo de acción que podría ser visualmente evidente.
Pero esta función tos, qué volver cualquier cosa basada en su primera línea?
No, porque su tipo de retorno es nula, lo cual sólo significa
no me ha de entregar nada a cambio.
Podría estar haciendo algo visualmente, pero es que no me entrega
copias de una hoja de papel como la semana pasada.
>> ¿Necesita alguna entrada?
No.
Y lo que es nula aquí también.
Así que esto también es una especie de sobre-ingeniería de este problema.
¿Correcto?
He hecho el programa más complejos, más líneas de código,
No he hecho ninguna más funcional, pero esto
sería un trampolín, quizás, para una más amplia
contexto con código más complicado.
Pero ¿qué pasa con esto?
¿Qué he done-- simplemente echando un vistazo a esto sin mirar el comentario
en la parte superior del file-- lo tienen Yo fundamentalmente hecho aquí con mi tos
aplicación que es diferente?
Sí, en la espalda?
>> AUDIENCIA: Que sea lo que puede tiene un carácter apague.
ALTAVOZ 1: Sí.
Así que esto se siente un poco agradable.
¿Correcto?
Es como la adición de una característica a su programa o de su función, en este caso.
Todavía no devuelve nada.
Podría tener un efecto secundario visual, porque está llamando impresión f.
Pero ahora he parametrizada la función, que
significa que he tomado especificados de entrada de tipo int y llamarlo n,
pero podía llamarlo lo que quiera.
De hecho, podría ser sólo veces que sean aún más explícito.
Y entonces yo podría cambiar esto aquí.
Pero el punto es que así es como yo crear una función que toma la entrada.
Y si usted recuerda volteando quizá a través de Internet en un solo
de los paseos virtuales, la cuarto y el ejemplo la tos final,
te darás cuenta de que aquí me has generalizó mi código de tipo further-- de abstraída
aún más.
Al igual que la tos y el estornudo, ambos son sobre como decir algo o hacer
algún tipo de sonido.
Guardar sería el correspondiente bloque de Scratch.
Y así lo hice en esta versión, que podemos simplemente echar un vistazo a,
es tos es como decir, [TOS], tos, y mientras tanto, el estornudo es
como decir, [ACHOO].
Y por lo que he generalicé la aplicación de aquellos
por ahora la aplicación esta función genérica,
decir, que es interesante para los propósitos de hoy
sólo porque todavía no tiene un tipo de retorno.
Pero, ¿cuántas entradas tiene?
AUDIENCIA: Dos.
ALTAVOZ 1: Dos.
Y así, si quieres tomar en dos argumentos,
simplemente separarlos con una coma.
Y si quieres a continuación llamar a esa función,
notar que acaba llame por ejemplo, cita, fin de la cita,
para el primer argumento, común n, para el segundo argumento.
Así que de nuevo, sólo tenemos ahora la bloques de construcción para que podamos realmente
poner en práctica algunas de nuestras propias funciones.
Correcto.
Para cualquier duda sobre estas?
>> Así que ahora vamos a pelar una capa de ser así.
Y el objetivo, en última instancia, es un problema conjunto de la próxima semana
va a estar en cryptogrophy-- el arte de la codificación de la información.
Y específicamente, la información tendrá que cifrar o descifrar
va a ser de texto.
Y así, ese tipo de invitaciones la cuestión hoy como así,
lo que está pasando debajo de la campana con el texto más allá de ASCII de semana cero,
¿Y cómo podemos realmente empezar a manipularlo?
Así que aquí está el nombre de Zamyla.
Y en texto, que podrían ser introducidos a igual que la función de cadena get.
Y a partir de ahora, cuando vea una cadena como esto-- Z-A-H-Y-L-A--
empezar a pensar en ello como si cada de esos personajes es en una caja de su
propio.
Y de hecho, en una semana o así es tiempo, cada una de estas cajas
va a representar muy específica un bloque de memory-- un bocado de memoria.
Así que cada una de estas cartas, en última instancia, representará 8 bits.
Y en realidad a ver lo que está pasando de debajo de la campana en mi ordenador.
>> Sin embargo, para no basta sólo para mirar Zamyla
a través de esta lente, por el que cada uno de estas cartas es en su propia caja.
Y muy bien lo suficiente en C podemos acceder a cada una de estas cajas directamente.
Así que si usted desea conseguir el primer letra de su nombre, súper fácil en C.
Si usted desea conseguir el último carta, super fácil, así
con un trozo de nueva sintaxis.
>> Así que voy a seguir adelante en CS50 IDE y abrir la cadena de cero punto C.
Y en este ejemplo aquí, hay un par de cosas nuevas que hacer.
Así que por primera vez en la línea 19, que hemos visto esta cadena get antes--.
Así que como una prueba de cordura rápida, si alguien puede ofrecer verbalmente
La explicación de un laico de lo que está pasando en la línea 19.
Como acaba de traducir esto en Inglés que no compañero de habitación en CS50
podría entender.
Sí.
>> AUDIENCIA: Tener la entrada de un usuario cuerda y guárdelo en un s variable.
ALTAVOZ 1: Good.
Tener la entrada del usuario una cadena y almacenarlo en una variable s.
Eso es genial.
Así que en la mano derecha lado, llamamos cadena get.
Que devuelve un valor que no fueron asignados
del lado derecho al izquierdo a mano lado en una variable llamada s que es
diseñado para almacenar una cadena.
Exactamente.
>> Así que ahora la línea 22, por el comentario en la línea 21,
obviamente imprime esa cadena un carácter por línea.
¿Pero como?
Así que en primer lugar, inicializamos I 0.
Y entonces, ¿cómo se llega a al final del nombre de Zamyla?
Bueno, al final de El nombre de Zamyla, pude
escribir manualmente en el último carácter de su nombre de alguna manera, o el número de la misma.
¿Correcto?
Si nos remontamos aquí-- Z-A-M-L-- Y-L-A-- para que yo pudiera escribir.
¿Qué es el índice de La última carta de Zamyla?
Si esta es 0-- hablando como un programmer-- 0, 1, 2, 3, 4, 5,
Yo heard-- tan de hecho, la última letra en el nombre de Zamyla es el sexto,
pero si contamos desde 0, que va a ser el número 5.
Así que tenlo en cuenta aquí.
>> Resulta que hay una función en C llama strlen y vuelta en el día
y hasta la fecha sigue siendo, una gran cantidad de programadores
elegir sincronizar nombres para su funciones que suenan como las palabras
que están tratando de decir.
Así strlen es longitud de la cadena.
Y así lo haría longitud de la cadena de S volver cuando Zamyla es la entrada?
>> AUDIENCIA: Cinco.
>> ALTAVOZ 1: Z-A-H-Y-L. Seis.
¿Correcto?
¿Cuál es la longitud del nombre de Zamyla?
¿Correcto?
Y en realidad, seis letras.
¿Correcto?
Y así, ¿qué significa eso para nuestro bucle?
Vamos a ir de 0 hasta seis, que
nos va a dar cinco iteraciones.
¿Qué hacemos en cada iteración?
Bueno, ciento C, alguien adivinado el otro día,
significa un marcador de posición para qué?
>> AUDIENCIA: Char.
ALTAVOZ 1: Sólo un char.
Así que un solo character-- no múltiples personajes como una cadena.
Y entonces aquí está la nueva línea que tenemos imprimir.
Y entonces aquí está la nueva sintaxis.
Si desea imprimir el i-th carácter de la cadena S, por así decirlo,
usted puede simplemente decir lo nombre de la cadena S,
y luego abrir corchete, y luego cerró corchete, con una i
la mitad.
Y es un poco agradable en ese que tipo de parece a un cuadrado
al igual que las plazas en las que Zamyla de existen personajes en esa foto allí.
>> Así que si realmente ejecutar este Ahora, vamos a ver qué pasa.
Haga cadena 0 punto slash string 0, y entonces estoy
va a escribir el nombre de Zamyla.
No hay pronta, porque yo no lo hice utilizar la impresión f, pero eso está bien.
Sólo sé lo que hacer.
Y, en efecto, imprime El nombre de Zamyla, uno por línea.
>> Ahora vamos a ser un poco imprudente.
Supongamos que yo no sabía acerca strlen y pensé,
bien, nadie va a tener un nombre más grande que como 50 caracteres.
Vamos a seguir adelante y volver a compilar este y vuelva a ejecutar y, a continuación, escriba en Zamyla
de nuevo.
Lógicamente, lo que es el programa va a tratar de imprimir?
Z-A-H-Y-L-A continuación, al igual que 45 bytes desconocidos de memoria.
Y de hecho, volveremos a esta idea de la memoria.
Pero así, lógicamente, si El nombre de Zamyla es este largo,
como por la imagen aquí, lo que estamos diciendo
se mantendrá la impresión, tenga la impresión, mantenga impresión, tenga la impresión, tenga la impresión,
todo el camino hasta el carácter 50a, que quién sabe lo que va a suceder.
Así que vamos realmente a echar un vistazo.
Vamos escriba en Zamyla.
Interesante.
Tuvimos suerte.
Sólo un montón de espacio en blanco.
Oh.
Hay un carácter funky.
Se ve un poco como una pregunta extraña marcar allí, pero no es el nombre de Zamyla.
Vamos a llegar muy imprudente.
¿Qué tal si imprimimos 500 bloques a lo desconocido?
Vamos a seguir adelante y hacer esto así y luego volver a ejecutar.
Y la pantalla completa, porque vamos tenemos que ver más espacio.
Zamyla.
Tienes suerte de nuevo.
>> ¿Nos atrevemos a llegar más temerario?
Vamos a conseguir más temerario.
50.000 caracteres.
Esto no es, ciertamente, una buena idea.
Correcto.
Haga cadena 0.
Esta será nuestra última demostración.
Zamyla.
Ugh.
OK.
Así que mi memoria es realmente vacío en este momento, que es en realidad un poco conveniente.
Lo que estoy tratando de llegar a-- bien.
Y ahora estoy solo va a conseguir imprudente.
500.000.
Make-- de pantalla completa de dejarlo.
Intro.
Zamyla.
Allá vamos.
No tengo ni idea de lo que es, pero suena mal.
Correcto.
Y, de hecho, muy pronto, si usted está entre los pocos afortunados en horario de oficina
y en el problema de establecer uno, podría muy bien encontrarse con esto.
Fallo de segmentación hace realidad tienen un significado bien definido.
Esto significa algún tipo de error relativa a un segmento de la memoria.
Y en términos simples, que significa que tocamos
memory-- utilizamos memoria RAM en mi equipo para que yo no he tenido acceso.
Y eso es lo que a la vez potente y también peligroso
sobre C es que en realidad tener acceso sin restricciones
a la totalidad de la memoria del programa o bytes o RAM, más específicamente.
>> Así que, aunque el nombre de Zamyla es sólo seis caracteres de longitud,
Todavía puedo ir a ninguna parte en la memoria que quiero.
Y como un aparte, si tienes Has leído algún artículo
lo largo de los años sobre algunos servidor o algún programa
conseguir agrietados o hackeado eso es aprovechado algo
llamado un desbordamiento de búfer explotar que vamos a realidad
hablar en pocas semanas, eso es en general, en referencia a alguna forma de engañar
un ordenador a ir bien más allá de los límites de la memoria
que debería tener, y encontrar algo jugosa
en que un memory-- contraseña, tal vez, de una manera
de eludir algún número de serie cheque, o simplemente generalmente capaces
para engañar a la computadora está ejecutando código que no se pretendía.
Pero volvamos a la realidad por un momento
donde estaba este programa implementado con strlen,
e introducir una cosa aquí.
¿Qué hay de nuevo entre estas tres líneas superiores?
>> Así punto cadena h.
Resulta que hay esta biblioteca llamada Cadena punto H, o la Biblioteca de cuerdas,
cuyo archivo de cabecera, por así decirlo, es punto cadena h que me da
el acceso a esta función strlen.
Si omito que el compilador es va a gritar a mí de alguna forma.
¿Pero sabes que?
Ahora vamos a llegar muy matizada.
En la línea 22, hay algo tipo de inefficient-- mal diseñado,
arguably-- sobre esta línea de código.
Piense en cómo se implementan para-loop
y qué pasos suceda de nuevo y una y otra vez-- la inicialización,
la condición, el código que es ejecutado, entonces el incremento
o el cambio, entonces la condición, luego el código, entonces el cambio, entonces
la condición, entonces el código, entonces el cambio, y así sucesivamente.
Entonces, ¿qué podría ser un poco preocupante o mal hecho aquí?
Sí, en azul.
AUDIENCIA: strlen es llamado muchas, muchas veces.
ALTAVOZ 1: Sí.
Así strlen se llama muchas veces, pero lo que es
la longitud del nombre de la Zamyla primera vez que el bucle se ejecuta?
>> AUDIENCIA: Seis.
>> ALTAVOZ 1: Seis.
Bueno, ¿cuál es la longitud de su nombre la segunda vez que se ejecuta el código?
>> AUDIENCIA: Seis.
>> ALTAVOZ 1: De acuerdo.
Todavía es seis.
¿Correcto?
El nombre de Zarla no tiene cambiado, incluso si estoy buscando
a sólo una parte de las letras de su nombre.
Y así, el hecho de que soy efectivamente hacer esta pregunta, ¿cuál es
la longitud de Zamyla, ¿cuál es la longitud de Zamyla, ¿cuál es la longitud de Zamyla,
seis veces por separado, o de siete, incluso, es una estupidez,
porque eso es inmutable esa respuesta.
Y así lo que pude en realidad hacer es esto-- en cadena de un
Tengo un poco mejor versión aquí.
Allí-- cadena whoops-- dos que tengo una versión ligeramente mejor en el que
Hago esto-- en lugar de sólo inicializar i a 0, también con una coma
declarar una segunda variable llamada n-- Yo no tengo que decir int nuevo.
Que no debería, de hecho.
Pero yo os digo n.
Y entonces me inicializar n de el strlen de n, por lo que ahora
¿Cuántas veces strlen se ejecutan en total?
Solo una vez.
Y así que esto es lo que queremos decir antes sobre un mejor diseño.
En realidad una vez que su código es correcto, yendo y pensamiento a través de,
estoy usando tan poco memoria o tan pocos segundos
o milisegundos de tiempo de computadora como posible implementar algún problema?
Y yo voy a desplazarse y acaba de mencionar
que hay esta mención de null en esta versión,
pero vamos a volver a que en poco tiempo.
Porque por ahora, vamos a echar un vistazo en donde esto nos va a llevar.
Así que uno, resulta que ahora que tenemos la capacidad
mirar a caracteres individuales, podemos aprovechar algo
desde la semana 0 que era muy arcana y especie de interesante en el momento.
Pero ahora, y sobre todo cuando nos llegar a la criptografía en una semana,
que va a ser muy poderosa.
Resulta que con un poco de ints y carrozas de datos Tipos--
y caracteres y cadenas y otra cosas-- algunos de ellos
se puede muy fácilmente convertida a otro.
>> Por ejemplo, cuando hablamos acerca ASCII algún tiempo ago-- aquí está
Las letras mayúsculas A a través de M, punto, punto,
dot-- hemos dicho que hay un mapeo entre estas letras y números.
Y de hecho, es cierto para las letras minúsculas también.
Minúsculas a es 97, el capital es un 65.
Y hay un número en ASCII, que es justo este mapeo
sistema para todas esas otras letras.
¿Entonces que significa eso?
Bueno, voy a seguir adelante y abierto algo realmente rápido llamado
ASCII 0, la mayoría de los cuales son los comentarios.
Y de nuevo en línea siempre se puede vista a través de los comentarios.
>> Y miren lo que esto va a hacer.
Así que tiene una función principal.
He modificable los números sólo para ahora, porque sé lo que estoy haciendo.
Yo sé lo que quiero ver aquí.
Y yo he inicializado a 65.
Y estoy contando a través de 26 cartas en total.
¿Y qué voy a imprimir una línea a la vez
si se puede interpretar esto pone de relieve la línea?
Lo que se impresa?
Sí.
>> AUDIENCIA: ¿Vas para imprimir la carta que
corresponde al mapa de la valor carta y valor entero?
ALTAVOZ 1: Exactamente.
Voy a imprimir la carta correspondiente al valor de número entero,
y viceversa, de la siguiente manera.
Bueno, esto, alguien dijo antes, es sólo un marcador de posición para un char.
Es todavía.
Esto, por supuesto, es un marcador de posición para un no int-- una nueva línea.
Y ahora note, mi primer valor que Estoy conectando para ese marcador de posición
no es sólo I. Estoy diciendo, paréntesis, char I,
que el residuo carbonoso paréntesis es diciéndole al compilador, el tratamiento que
no como lo que es, que es un número.
Tratarlo como un personaje real.
Considerando que el segundo valor que estoy enchufando en-- yo-- debería ser sólo un número.
>> Así que si puedo compilar este program-- así que esto es hacer ASCII 0,
ASCII slash dot 0-- Acabo de llegar esta pequeña práctica tabla que
me muestra todo lo posible asignaciones sin tener que pensarlo
a través o averiguarlo por mi cuenta.
Y también estoy imprimiendo, notar las letras minúsculas,
porque unas pocas líneas más adelante, me también imprimir este mapeo
también, que es sólo para decir que una vez que entienda
lo que está pasando debajo el capó, ¿verdad
convertir automáticamente un lado a otro.
Y de hecho, si alguno de ustedes nunca hizo esto en la escuela primaria
o escuchado acerca de alguien teniendo míticamente una nota
y que pasa a su o su amiga en la clase,
pero la revueltos cartas de como A se convierte en B,
y B se convierte en C, o algo más complicado que eso, bueno,
¿cómo ir sobre la implementación que cuando era niño?
Bueno, sólo un poco sabe A se convierte en B, B se convierte en C,
pero matemáticamente, lo que estaba haciendo ese chico?
¿Qué estaba agregando a cada letra?
Efectivamente, 1.
>> Así que cuando usted cambia de A a B, eso es algo así como el cambio de 65 a 66,
que matemáticamente significa simplemente añada 1.
Y por lo que si usted fuera a poner en práctica ese pequeño técnica engañosa
para su profesor en código, podría hacer exactamente eso solo
mediante la adición de una sola letra juntos.
Así que después de poco tiempo, estamos vamos a ver cómo nos
puede tomar ventaja de eso para realmente lucha genuina y unscramble
información.
Mientras tanto, sabemos que hemos empezado introducir un par de otras bibliotecas
aquí-- la cadena uno hoy.
Y un sitio muy útil esperamos que pueda encontrar
se llama reference.cs50.net, que el profesorado han reunido,
de modo que si usted quiere ver cómo funciona strlen,
usted puede comenzar a escribir El nombre de la función,
haga clic strlen allí, y luego una explicación menos cómodo
va a aparecer.
O si desea que el oficial Explicación basada en Linux,
puede hacer clic más cómoda en la parte superior derecha, y
presentará la misma información, pero en términos más complejos.
Eso es un recurso útil para realmente sabe lo que hace todo.
>> La próxima vez que vamos a echar un vistazo a Ovaltine
y más, y presentarnos al mundo de la criptografía.
Antes de eso, ya veremos más tarde esta semana.
Y ahora, Colton Ogden.
Nos vemos el miércoles.
>> [REPRODUCCIÓN DE MÚSICA]
>> ALTAVOZ 1: Lo que el [SEÑAL] estás haciendo?
>> ALTAVOZ 1: Estoy comiendo mi postre?
¿Cómo se come eso?
Con las manos?
>> [REPRODUCCIÓN DE MÚSICA]