[Powered by Google Translate] DAVID J. MALAN: Muy bien, este es CS50 y es esta la
final de la semana 1, así que las tarjetas están en estudio y el número total de
compañeros de clase que tiene este año es de 745.
Y estamos muy contentos de tener a muchos de ustedes en el curso
este semestre, pero a pesar de este curso es tan grande,
darse cuenta de que se trata de estas cosas como almuerzos viernes, como
las horas de oficina, secciones 15-persona, y que así sucesivamente
son realmente la intención de crear este más íntimo
ambiente.
Así que, aunque es posible que se reúnen una o dos veces por semana, aquí en
Sanders, sabemos que gran parte de su experiencia en este curso
será mucho estar en manos de al lado de sus compañeros de clase
y el personal docente.
>> Así que aquí vamos, Fall 2012.
Así que recordar que la última vez que terminó con una nota de
imprecisión, hablando de la representación de los números.
Y nos fijamos en uno de los fracasos que ocurrieron en el
mundo real, cuando se trataba de malentendidos
cómo funcionan las computadoras.
Bueno, hoy vamos a revisar otra de esas ideas
así como continuar con nuestra discusión del cliente CS50
y C, y lo que significa realmente para programar.
Pero en primer lugar, a sólo un par de anuncios torbellino.
>> Secciones comenzará este domingo, y la primera semana es siempre un
poco de un comienzo rápido, ya que sólo se puso en
los formularios de la sección.
Estamos haciendo lo mismo, ahora, con los compañeros docentes, ahora
que conozcan sus horarios, por lo que estamos apuntando, por
Sábado por la mañana, hacer un seguimiento con usted con su sección
asignación y TF.
Darse cuenta de que van a empezar al día siguiente, domingo
o el lunes o el martes.
Y luego vamos a acomodar cambios de sección a medida que surjan
en los días por venir.
Las horas de oficina, por su parte, son, de nuevo, esta noche, 8 PM a 11, en
Annenberg, así como mañana por la noche.
A pesar de que los conjuntos de problemas se deben generalmente los jueves
al mediodía, se da cuenta que tiene un máximo de cinco días de retraso para gastar,
por lo tanto, la disponibilidad de horas de oficina el jueves si
dinero en efectivo en uno de esos días de retraso y, por lo tanto presentar,
algo el viernes.
Permítanme sugerir que Scratch es una de las más divertidas, entre los
el juego de llaves más bajas problema.
Y me gustaría colgar en esos días finales, estratégicamente, sólo
para más tarde en el semestre en que la vida empieza a ponerse en el camino
con exámenes parciales y otras clases.
Serie de problemas 1, por su parte, se publicarán en el curso de
sitio web de este viernes, como se verá en la caminata del curso
a través de video, que será filmado a las 2:30 PM el viernes
y luego publicado en línea por el día siguiente.
>> Así que terminamos el lunes.
Quiero - en realidad, una nota aquí.
Debido a que las clases - porque Sanders no es exactamente prestan
sí a lo casual Q & A de vuelta y vuelta terriblemente bueno, estamos
va a intentar algo un poco nuevo este año, en el que
si usted no se siente cómodo levantar la mano o simplemente
prefieren no levantar la mano en una habitación como esta,
vamos a tener algunos de los compañeros docentes y las entidades emisoras
dotación cs50.net/discuss durante la conferencia.
Así que si usted tiene una pregunta, porque yo estaba completamente
claro acerca de algo o tienes curiosidad sobre algunos
tema, trate de publicar allí.
Marque con una etiqueta de Clase, y vamos a hacer todo lo posible
hoy y la próxima semana - nos volveremos probar esto - para alinear
ya sea por medios electrónicos, en línea, o si se siente como que debería
realmente se traten de forma masiva, uno de los compañeros docentes o de
CAs levantar la mano y pedir
anónimamente en su nombre.
Así que vamos a darle una oportunidad y ver lo bien que funciona.
Pero, por supuesto, continuar elevando las manos como usted quisiera.
>> Así última vez que reveló que el 10% o un décimo-no es, en
hecho, 0,1, como se les enseñó hace muchos años.
Es de hecho, un valor como este.
Pero eso no es totalmente cierto, ¿no?
Sólo tenemos esta restricción en los ordenadores por lo que, si
sólo tiene una cantidad finita de memoria, RAM, o más
específicamente bits, bueno, hay sólo un número finito
de cosas que puede representar.
Por ejemplo, si tenemos el número cero, y queremos
representan en binario, utilizando ocho bits, donde un bit,
de nuevo, es un cero o un uno, podríamos
representarlo como 00000000.
Y eso es un poco innecesariamente prolija.
Al igual que en el sistema decimal en el mundo real,
en general, si desea escribir el número 123, se
humanos probablemente no escribo 00000123 pesar de que,
funcionalmente, que es el mismo número exacto.
Acabamos de caer ceros a la izquierda, por así decirlo.
>> En binario, podemos hacer lo mismo.
Binario y cero, cero y binario es igual a cero.
Usted sólo necesita un único bit.
Pero, de nuevo, la unidad de medida más común en el mundo
de la informática es bytes, ocho bits.
El hecho de que un poco, bastante inútil.
Ocho bits, no terriblemente útiles, pero por lo menos es más
útil que una única unidad de medida.
Así que con ocho bits, por lo general va a representar binario.
Así que aquí tenemos a los números cero, uno, dos, y luego, como
Nate hizo en el video el miércoles pasado, podemos seguir
contando hasta siete, ocho.
Y si usamos más y más bits, se
puede contar hasta el infinito.
Pero si sólo tiene un número finito de estos bits, al igual que
en el caso de cualquier sistema informático, o incluso misiles
sistema, bueno, en realidad sólo tiene un
cantidad finita de precisión.
Así que si quieres para representar el número como 0,1, también, la
equipo tiene que escoger y elegir.
Y si sólo tiene un número finito de números que puede
representan, puede acercarse hasta 0,1 por ti, pero no puede
necesariamente le da exactamente el valor que desee.
Y este es sólo uno de los retos de las computadoras,
debajo de la capucha, por suerte.
>> A medida que avanzamos más en el semestre, éstos nivel inferior
detalles se vuelven mucho menos interesante, pero la duda
aplicación de estas ideas pueden tener un mundo muy real
ramificaciones.
Uno de ellos es una diversión poco.
¿Cuántos de ustedes han visto la película Space Oficina asombroso?
Si usted no tiene, que es su no oficial
tarea para la semana.
Pero en el espacio de oficina, los becarios en esa película toma
ventaja de precisamente esta idea, pero en realidad robó
desde otra película que podría tener
visto, incluso años antes.
Así que te voy a dar unos segundos de este trailer de
esta película increíble y este es en gran medida
académicamente relevante.
>> [JUEGOS DE VÍDEO]
La verdad es que estoy siendo promovidos.
Puedo programar un virus que rasgará que
colocar a lo grande.
Bueno, ¿cómo funciona?
Cada vez que hay una transacción bancaria donde el interés es
computarizada, hay miles al día, el equipo termina
con estas fracciones de un centavo.
Pero yo no voy a hacer nada ilegal.
Ilegal? Samir, esto es América.
Usted tiene que juro por Dios.
Si nadie sabe sobre esto, pero nosotros, ¿de acuerdo? No hay miembros de la familia, sin
novias, nadie.
[Inaudible].
No te preocupes, hombre, no se lo diré a nadie.
[Película termina]
>> Muy bien, así que tal vez encontraron esta película mejor que la mayoría
personas aquí, pero, en cualquier caso, el virus que eran
tratando de crear -
y en las películas, en cualquier momento que lo llamaría algo un virus,
que generalmente no es realmente un virus.
Es simplemente un programa que alguien escribió que hacer algo.
Y en este caso, los chicos estaban tratando de escribir un programa
que se aprovecharon de su empresa llamada Innotech de
sistema informático, mediante el cual las computadoras, también, incluso cuando
En relación al dinero, no puede necesariamente
representan el dinero exacto.
Así que, aunque es posible que tenga $ 0.10 en su cuenta bancaria,
0,10, bueno, el equipo realmente puede pensar que usted tiene
esta centavos muchos en su cuenta bancaria.
Y así, lo que estos chicos estaban aspirando a hacer - y
robó la idea, resulta de Superman III, donde
Richard Pryor hizo lo mismo - que eran esencialmente
escribir programas que aspiran a tomar todo el final
números, todas las diminutas fracciones pequeñas, diminutas de
monedas de un centavo, y drenando los fuera a fin de que los seres humanos sólo
pensamiento, oh, es sólo 0,10 dólares allí, pero todos los que
números finales eventualmente se suman.
Así que una idea maravillosa y divertida en la que salió por la culata
película en particular.
>> Pero en el mundo real, también, hay mucho más en relación
implicaciones de este tipo de cosas.
Y una de las razones para sumergirse en el campo de la informática
ciencia es, de nuevo, su aplicabilidad no a la
ciencias de ingeniería solo, pero a sólo
otros campos también.
Así que esta es una mirada menos optimista de lo que puede salir mal, pero
también es bastante abrir los ojos, me parece, cuando se trata de
entender exactamente cómo las tecnologías omnipresentes como
computadoras y la programación o en estos días,
en forma de software.
Así que este próximo clip se trata sólo de seis minutos, sigue
donde lo dejamos la última vez, pero nos permite mirar un poco
más en profundidad a tales de estos temas uno.
Déjame pasar directamente a donde lo dejamos,
que estaba aquí.
Y tenemos la segunda parte de dos, durante unos seis minutos aquí.
>> [PLAY MOVIE]
Plagado tecnología de cohetes modernos.
En 1991, con el inicio de la primera guerra del Golfo, el Patriot
misil experimentado el mismo tipo de
el problema número de conversiones.
Y como resultado, 20 personas, 20 soldados estadounidenses, murieron
y cerca de 100 resultaron heridas, cuando el Patriot, que se suponía
para proteger contra los Scuds entrantes,
no pudo disparar un misil.
>> Cuando Irak invadió Kuwait y Estados Unidos puso en marcha un desierto
Storm a principios de 1991, baterías de misiles Patriot fueron
desplegados para proteger a Arabia Saudí e Israel desde Irak
Ataques con misiles Scud.
El Patriot es un EE.UU. mediano alcance superficie-aire del sistema,
fabricado por la empresa Raytheon.
El tamaño de los interceptores Patriot sí mismo, se trata
aproximadamente 20 pies de largo y pesa alrededor de 2.000 libras.
Y lleva una ojiva de alrededor de - Creo que es más o menos
150 libras.
Y la propia cabeza es un explosivo de alta potencia que tiene
fragmentos a su alrededor.
La carcasa de la cabeza de combate está diseñado para actuar como perdigones.
Los misiles se llevan cuatro por contenedor y son
transportado por un semi-remolque.
>> El Patriot antimisiles sistema se remonta al menos a
20 años.
Originalmente fue diseñado como un misil de defensa aérea para
derribar aviones enemigos, en la primera Guerra del Golfo.
Cuando la guerra llegó, el ejército quería usarlo para disparar
por Scud, no aviones.
La fuerza aérea iraquí no es tanto de un problema, pero el Ejército
Estaba preocupado por misiles Scud.
Y así trataron de actualizar el Patriot.
Interceptar un misil enemigo que viaja a Mach 5 se va
a ser un reto suficiente.
Pero cuando el Patriot fue trasladado de urgencia en servicio, el Ejército
no era consciente de una modificación iraquí que hicieron su
Scuds casi imposible de alcanzar.
>> Lo que pasa es que los Scud fueron
llegando eran inestables.
Se tambalea.
La razón de esto era que los iraquíes, con el fin de obtener 600
kilómetros fuera de un misil de alcance de 300 kilómetros, se
peso de la ojiva delantera y
hizo la ojiva más ligero.
Así que ahora la Patriot está tratando de llegar a la Scud, y la mayoría de
el tiempo, la abrumadora mayoría de las veces, lo haría
sólo volar por el Scud.
Una vez que los operadores del sistema Patriot Patriot dio cuenta de la
no alcanzó su objetivo, que detonó la carga explosiva Patriot.
Para evitar posibles víctimas, se permitió
a caer al suelo.
Eso fue lo que mucha gente vio, como grandes bolas de fuego en el cielo,
e incomprendido como intersecciones de ojivas Scud.
>> Si bien, en el cielo de la noche, Patriotas parecía ser
Scud destruyó con éxito, en Dhahran, no podía haber
error sobre su desempeño.
Allí, el sistema Patriot radar perdió la pista de un
Scud entrante y nunca puso en marcha debido
a un defecto de software.
Fue a los israelíes que descubrieron por primera vez que cuanto más tiempo
el sistema estaba en, mayor es el tiempo de discrepancia se convirtió,
debido a un reloj incorporado en el ordenador del sistema.
Unas dos semanas antes de la tragedia en Dhahran, el
Israelíes informaron al Departamento de Defensa que el
sistema estaba perdiendo el tiempo.
Después de ocho horas de funcionamiento, se dieron cuenta de que el
sistema fue que se vea con menos precisa.
El Departamento de Defensa respondió diciendo a todos
las baterías Patriot no abandonar los sistemas
durante un largo tiempo.
Nunca dijeron lo que un tiempo fue - 8 horas, 10
horas, 1.000 horas.
Nadie lo sabía.
>> La batería Patriot destinado en el cuartel de Dhahran
y su reloj interno defectuoso había estado en más de 100 horas en
La noche del 25 de febrero.
Es seguido el tiempo con una precisión de una décima parte de un segundo.
Ahora décimo de la segunda es un número interesante porque
que no puede ser expresado en binario, exactamente, lo que significa
no se puede expresar exactamente en cualquier
computadora digital moderna.
Es difícil de creer.
Pero usar esto como un ejemplo.
>> Tomemos el número de un tercio.
Una tercera no puede ser expresado en decimal, exactamente.
Una tercera parte se va en 0,333 para el infinito.
No hay manera de hacer eso con una precisión absoluta en decimal.
Ese es exactamente el mismo tipo de problema que ocurrió en
el Patriot.
Cuanto más tiempo el sistema funcionó, peor es el error de tiempo llegó a ser.
Después de 100 horas de funcionamiento, el error en el tiempo era sólo
aproximadamente un tercio de un segundo.
Pero en términos de focalización de un misil que viaja a Mach 5,
que dio lugar a un error de seguimiento de más de 600 metros.
Sería un error fatal para los soldados en Dhahran.
>> Lo que pasó es un lanzamiento de Scud fue detectado por la alerta temprana
satélites y sabían que el Scud venía en su
dirección general.
No sabía de dónde venía.
Corresponde ahora al componente de radar de la Patriot
sistema, la defensa de Dhahran, para localizar y hacer un seguimiento de la
misil enemigo entrante.
El radar era muy inteligente.
En realidad se podría seguir la posición de la Scud y luego
predecir dónde sería probablemente la próxima vez que el
radar envía un pulso de salida.
Eso se llama la puerta de distancia.
Luego, una vez que el Patriot decide ha pasado suficiente tiempo para ir
atrás y comprobar la ubicación para la próxima detectada
objeto, vuelve.
Así que cuando volví al lugar equivocado, entonces no ve
objeto, y decide que no había ningún objeto.
Era una falsa detección y baja de la pista.
>> El Scud entrante desapareció de la pantalla del radar.
Y segundos después, se estrelló contra el cuartel. El Scud
mató a 28 y fue el último despedido durante
la primera Guerra del Golfo.
Trágicamente, el software actualizado llegó a Dhahran
el día siguiente.
Y la falla de software había fijado, cerrando un capítulo en
la turbulenta historia de los misiles Patriot.
PATRIOT es en realidad un acrónimo de "Tracking Phased Array
Intercepción de destino. "
>> De acuerdo, por lo que un resultado mucho más doloroso de no muy
la comprensión de este mundo.
Y la comida para llevar, de verdad, de la película es que la solución
no se reinicie el sistema de defensa antimisiles
de vez en cuando.
Y así, una vez más, uno de los objetivos de este curso, sin duda
en una escala más humilde que estas aplicaciones, es
Todo el mundo realmente abierto los ojos a exactamente cómo usted va sobre la
máquinas de hacer lo que usted quiere que hagan y cómo se van
hacer eso correctamente, mientras que en el camino haciendo
bien, con elegancia, y así sucesivamente.
Y así, hoy, vamos a sumergirnos en un poco más de esto, pero
por lo que no vamos demasiado rápido, especialmente para los menos
cómoda, sino también para poder mantener el interés de los
los más cómodos, vamos a comenzar rápidamente con un poco
de resumen de algunas de estas ideas.
Y de nuevo, pregunte a distancia, tanto en persona o en línea, si usted tiene
preguntas para que podamos mantener a todos en la misma página.
>> De modo que el aparato CS50, paso hacia atrás, es
lo que, en sus propias palabras?
Está bien si no tienes idea de lo que esas palabras pueden ser todavía.
[Inaudible]
Bueno, por lo que una interfaz universal para -
que todos podemos compartir.
Por supuesto.
Así, se podría, por ejemplo, te dirá que vayas a algún
sitio web, descargar este software para Mac OS.
Descargue este software para Windows, configurar en
un lado a otro.
Pero la realidad es que luego nos encontramos con innumerables técnicas
apoyar temas.
Y también en estos días, gran parte de lo que se hace del lado del servidor,
en el mundo de la informática, especialmente cuando se trata
desarrollo web y aplicaciones basadas en web, es en realidad
muy a menudo se realiza en equipos UNIX o Linux, a diferencia de
Mac o PC con Windows.
>> Así que entre los upsides, entonces, de la utilización de esta cosa llamada el
CS50 Appliance es que todos tendremos el mismo entorno.
Así que todo el mundo está en la misma página sin importar el hardware que
llegó a la escuela con pero también se incursionando en exactamente
el mismo entorno que usted va a utilizar hacia
semestre final, así como para el desarrollo web, así como en la
futuro para aplicaciones reales de los mismos.
Entonces, más concretamente, el aparato CS50 es una pieza libre de
software que permite ejecutar otro sistema operativo,
Linux, en este caso, en su propio ordenador, en una ventana.
Ahora no sólo puedes descargar el aparato.
Usted necesita un programa con el que jugar o correr el aparato.
Y ese pedazo de software se conoce generalmente como un
hipervisor.
Los hipervisores se presentan en forma de productos como VMware,
Virtual Box, Parallels.
Todo tipo de empresas hacen software libre y
comercial, por igual.
Lo que vas a ver en el problema Set 1 son las instrucciones sobre cómo
obtener software gratuito con el que
funcionar el aparato CS50.
Y una vez que usted lo hace, usted tendrá, en una ventana de tu Mac o PC,
un entorno de escritorio que se ve bastante como este, donde
tiene un menú de inicio-como cosa en el
inferior izquierda esquina.
Tiene una carpeta de inicio, o el directorio de inicio, en la parte superior izquierda
allí, un bote de basura, y así sucesivamente.
Así que vamos a desmenuzar los detalles necesarios sobre la marcha.
>> Pero ahora vamos a empezar a bucear en C.
Así C es este lenguaje de programación, similar en espíritu a
Scratch, pero mucho menos gráfica, pero, irónicamente, mucho
más potente una vez que llegue conocedores de la misma.
Así que en C, escribimos programas de escritura de código fuente, que es
esta sintaxis similar al Inglés, similar a los calcetines
demostración de que hicimos la última vez que le permite
expresarse con bastante precisión, si
arcanely, a la computadora.
>> Entonces, ¿qué tipo de producto de software es lo que realmente necesita
para escribir programas en un lenguaje como C, basándonos en nuestra
conversación el lunes?
[Inaudible]
OK, sólo necesitas un editor de texto.
Usted no necesita ningún software especial
per se para escribir programas.
Sólo se necesita un editor de texto como el Bloc de notas de Windows,
TextEdit en Mac, o algo que se llama gedit, en el mundo de la
Linux, que vamos a utilizar aquí.
Y eso es todo, para escribir los programas.
>> Pero la escritura es sólo la mitad de la ecuación.
A continuación, deberá ejecutarlas.
Pero para ejecutar programas -
no se puede ejecutar el código fuente.
En su lugar, tiene que hacer lo que a él primero?
Si.
DAVID J. MALAN: Es necesario
compilarlo.
Y, por otro, compilar el código fuente significa -
[Inaudible]
DAVID J. MALAN: Exactamente.
Traduciendo esto a ceros y unos.
Porque todos nosotros, en estos días, tienen equipos que tienen CPUs,
casi todos los cuales están hechos por una compañía llamada Intel, y
Intel Inside, significa que no esta dentro de su cerebro
ordenador, conocido como la CPU.
Y una de las cosas que hace que el cerebro es, sabe
cómo entender los patrones de ceros y unos.
Sabe lo que representa el patrón de bits Además, lo que
patrón representa restas, ¿qué modelo de
bits representan la impresión, y la creación de un sonido audible.
>> Así que en resumen, la CPU, junto con el sistema operativo,
que es una pieza de software que se ejecuta en la parte superior de la CPU,
por así decirlo.
Juntas, esas dos piezas saber cómo ejecutar programas que
nosotros los humanos escribir.
>> Así que si entro en el Appliance CS50 aquí, tengo que abrir
un editor de texto y puedo acceder a este
en un par de maneras.
Me puede ir a Menú, Programación,
y entonces puedo seleccionar -
No, no ese menú.
Puedo ir a Accesorios / gedit aquí para abrir
mi editor de texto pequeño.
O más simplemente, puedo hacer clic en este icono pequeño en la parte inferior
esquina izquierda.
Y ahora me sale este ambiente aquí.
Es muy evocador de un editor de texto simple, con sólo
una o dos diferencias.
En la parte superior, donde está el cursor parpadeante, aquí es donde
Puedo empezar a escribir el código.
En el fondo es esta cosa llamada la ventana de terminal.
¿Y qué tipo de cosas que puedo hacer en este
la llamada ventana de terminal?
[Inaudible]
>> Está bien, así que voy a ejecutar órdenes.
Y algunos de los comandos que corrió el lunes eran un poco
crípticos al principio, pero para ls lista, cd cambio de directorio, para
rm, para eliminarlo.
Así que es una especie de camino de la vieja escuela de navegación de su
computadora, usando sólo el teclado y los comandos textuales,
y no, en general, con el ratón.
Pero vamos a ver, en poco tiempo, este hecho nos da una
poco más de potencia y un poco más precisión con la cual
expresarnos.
Y luego aquí a la izquierda, sólo vamos a ver,
a medida que comenzamos software de escritura, un pequeño resumen de la
programa que hemos escrito en la parte superior izquierda.
Pero vamos a ver que de nuevo en poco tiempo.
>> Así que vamos a hacer algo muy simple aquí.
Permitidme que seguir adelante e ir a Archivo, Guardar, y estoy
va a hacer clic en jharvard aquí, más a la izquierda, y
jharvard es, de nuevo, el nombre de mi carpeta de inicio, mi
archivos personales, yo, ahora es John Harvard, como todos ustedes
pronto será John Harvard en este entorno.
Él tiene este directorio Inicio, Mis documentos y demás,
que desea guardar y, ahora, este archivo pulg
Así que voy a llamarlo hello.c. Entonces me voy a ir
a continuación y haga clic en Guardar, y ahora lo que tenemos aquí es una ficha
llamado hello.c, tanto como otro tipo de editor.
>> Así que ahora vamos a seguir adelante y empezar a escribir un programa.
int main (void).
Y luego me hice la última vez, printf, para la impresión formateada,
("Hola, mundo!"
).
Casi completa.
Pero me falta un par de detalles.
Lo que falta en este programa que realmente necesito para
que se compile en realidad?
Si.
[Inaudible]?
>> DAVID J. MALAN: Sí, así que tengo que incluirá la norma
I / O biblioteca.
Así que esto tiene que ir por encima de principal, así que sólo voy a
hacer un poco de espacio para ella allí.
Y yo voy a hacer # include.
Y noten los paréntesis angulares allí.
Y en un aparte, gedit es un usuario poco amigable, si
a veces un poco confuso, ya que trata de ayudar a su
ojos cuenta de lo que se alinea con qué.
Así que el hecho de que mi cursor está al lado de este ángulo
soporte, observe cómo se destaca el otro ángulo
soporte más uno esto.
Y eso es sólo para llamar mi atención sobre el hecho de que yo
tienen simetría.
Y la simetría en la programación es generalmente una buena cosa.
Del mismo modo, si muevo el cursor hasta el final, observe cómo el
llaves se alinean para mostrar que, sí, tengo una abierta
y uno cerrado, por así decirlo.
>> Muy bien, y no puedo hacer otra cosa.
No es estrictamente necesario, pero una buena práctica, por no decir
devuelve 0.
Y 0 retorno hace lo que para nosotros aquí?
¿O significa que?
[Inaudible]
DAVID J. MALAN: Pero no pasa nada.
Y, francamente, es difícil para gran parte a ir mal en un
programar este corto.
Así que sólo estoy siendo súper explícito de que todo está bien.
Yo, el ser humano, cuando ejecuto este programa, probablemente nunca lo hará
ver que 0.
En general, estos números que están siendo devueltos a partir de principal
sólo educar a sus jefes a los seres humanos cuando
algo va mal.
Y te dan un poco de pop up de error del sistema diciendo: uno,
dos, tres, o cualquiera que sea el número que fue
fue realmente devuelto.
Así que nada malo en esto?
[Inaudible]
>> DAVID J. MALAN: Así que esto no es tanto un error funcional
pero una estética.
Probablemente debería poner en un carácter de nueva línea allí en el
final de esta cadena para que realmente mover el cursor a
la siguiente línea, y el programa sólo se ve un poco más bonito.
>> Así que ahora me dejes ir a mi ventana de terminal
y amplía la
Y esto de aquí, se llama el sistema.
Se me acaba de recordar quién soy, jharvard @ aparato, donde
aparato es el nombre del equipo que estoy.
Entre paréntesis figura la tilde, el símbolo garabato, que
representa qué?
AUDIENCIA: directorio de inicio.
DAVID J. MALAN: directorio de inicio.
Así que eso es sólo una notación abreviada para decir que están en
su carpeta personal donde todos sus archivos de ir de forma predeterminada.
Así que ahora, aquí, puedo escribir ls para ver la lista.
Y lo único que veo aquí en este momento es hello.c.
Y eso es bueno, porque yo acabo de escribir esto.
>> Así que vamos a seguir adelante y me hacen hello.
Y noten que no estoy escribiendo hacer hello.c.
En su lugar, sólo estoy escribiendo el nombre base del archivo, hola.
Y que, como vimos el lunes, sólo se infiere que quiero
el. c archivo.
Así que ahora que he escrito hacer hello.
Ahora veo este comando bastante largo y continuará
viendo esto una y otra vez.
Pero para ser tañido claro, la palabra que acaba de aparecer,
ese es el compilador real.
Hacer es una utilidad de generación.
Es sólo un programa más fácil de usar que me salva, en la
largo plazo, de tener que escribir increíblemente tedioso largo
comandos como esa.
Así que se podría ejecutar Clang manualmente.
Se podría escribir todo eso manualmente.
Sólo se pone muy aburrido.
Y así que es sólo un programa que simplifica nuestras vidas y
ejecuta comandos más complejos para nosotros.
>> Muy bien, ¿y ahora qué archivo debo tener
en mi directorio actual?
No sólo hello.c, pero también saludar.
Así que si quiero correr hola, recordemos que digo dot slash,
donde los medios de punto entrar en la carpeta actual, donde quiera que
son, a continuación, ejecute el programa llamado hola, y, de hecho, ahora,
Tengo hello world.
De acuerdo, cualquier pregunta sobre el flujo de trabajo o la sintaxis de
lo que acabas de hacer?
>> Muy bien, así que vamos a tomar las cosas a un nivel superior de nuevo.
Así que esto fue decepcionante para escribir un programa que sólo
nunca dice hola, mundo.
Así que lo cambiamos, el lunes, decir hola, David.
Es un poco más personal, pero igual de duro codificado como el
primera versión.
Así que no es tan convincente.
Pero existe, en C, además de las funciones duda
impresión, funciones que permiten obtener información del usuario.
Y la forma en que lo hizo, el otro día, fue como sigue.
Antes de imprimir algo, llegué por primera vez
algo del usuario.
Así que vamos a hacer esto otra vez.
>> Cadena s, donde s es sólo un nombre arbitrario, aquí, por un
cadena, es igual a GetString.
Entonces, ¿qué fue GetString?
Obviamente obtiene una cadena que, basándose en su nombre.
Pero lo que es, más técnicamente?
Es una función.
Así que es una función que no viene con C per se.
CS50 personal escribió esto.
Y así, para usar esto, no se puede simplemente incluir stdio.h,
También debe incluir qué?
Si.
Así cs50.h, que es simplemente un archivo que escribió hace algunos años.
Lo instalamos en el aparato para que usted junto a
todos los archivos estándar.
Y así, en estas primeras semanas de la clase, vamos a utilizar
esto sólo para simplificar el proceso de hacer muy básico
cosas como conseguir entrada del usuario.
Porque, como veremos en un par de semanas, el usuario conseguir la entrada en una
lenguaje como C es en realidad sorprendentemente compleja,
sobre todo porque no se sabe de antemano, por lo general, ¿cómo
cantidad de cosas que el usuario va a escribir pulg
Y cuando usted no sabe la cantidad de datos que puede esperar, no
saber la cantidad de memoria para asignar.
Y si usted realmente tiene un usuario de confrontación que está tratando de
para introducirse en el sistema, bloquear el equipo, bueno,
generalmente el primer método de ataque es, tal como lo hice en
Lunes, escriba toda una secuencia larga de caracteres al azar,
pulse Enter y vea lo rompe.
Por lo general, si se rompe un programa, que alude a
una falla de seguridad, potencialmente.
Sin duda alude a usted, el programador, después de haber hecho una
error, pero más peligroso, que podría haber hecho una
error relacionado con la seguridad y, en general veremos que
así es como máquinas están comprometidos hasta la fecha, tanto
en el mundo de la web y de los programas en la
línea de comandos, así.
>> Está bien.
Así que la cadena s es igual a getString.
Así que ahora más concretamente, ¿qué significa la línea 6 aquí?
Así, la función de la derecha se pone cadena,
toma cuántos argumentos?
Bien.
Así que nada.
Un poco de cordura comprobar.
Un argumento, de nuevo, es sólo una entrada a una función para alterar
su comportamiento por defecto de alguna manera.
Pero en este caso, yo no quiero alterar
el comportamiento de GetString.
Yo sólo quería llegar a una cadena.
Así que puse nada en los paréntesis y luego puse un
punto y coma demarcación de la final de la línea de código.
Ahora, el signo de igualdad no significa igual, per se.
Significa asignación, lo que significa poner lo consigue
emitida en el interior de lo que es justo a la izquierda.
>> Así que en la izquierda, decimos que hemos declarado una
cadena llamado s.
Y más específicamente, hemos asignado la memoria interna de
que vamos a poner los bits que representan una secuencia de
personajes.
Pero por hoy, hemos asignado
o se declara una cadena.
Está bien.
Así que ahora, una vez que hayas hecho esto, quiero conectar el valor de
s, no el valor de David.
Así que esto está mal ¿por qué?
Así que esto es sólo, literalmente, la s no modificable.
Es decir "hola, s", que no es lo que quiero.
Así que puedo hacer esto.
El signo de porcentaje es un marcador de posición, pero ahora tengo que
pasar a imprimir un segundo argumento.
Recordemos que los argumentos a funciones están separadas por
comas, por lo que el próximo coma aquí pongo después de esto la letra s.
Y en este contexto actual, s es la variable, y printf,
al recibir las dos entradas -
la cadena en el lado izquierdo y el nombre de la variable s a la derecha -
se podrá conectar a este último en la primera para nosotros, y
sólo imprimir una cadena bien precioso que contiene
lo que sea que hemos escrito pulg
>> Así que vamos a probar esto.
Va a seguir adelante y alejar la imagen, de nuevo
a mi ventana de terminal.
Acercar al final aquí.
Vuelva a hacer hello.
Clang parece haber sido repetición.
Voy a escribir. / Hello Intro.
Nada parece estar ocurriendo todavía, pero es en esta pantalla
que puedo escribir algo como Nate, Enter, y ahora tenemos
Hola, Nate.
Y puedo hacerlo de nuevo con Rob, y así sucesivamente.
Así que espero que ahora este programa se comporta como pienso.
>> Ahora, no toda amigable para el usuario.
No tengo ni idea de lo que se esperaba de mí.
Así que sin duda podemos limpiar esto un poco.
Déjame volver aquí, y en lugar de buceo y
preguntar al usuario para una cadena, permítanme decirles explícitamente la
usuario lo que estoy esperando.
Así printf ("Introduzca una cadena:"
);
Así que no hay variables aquí.
No hay signos de porcentaje.
Sólo la frase en Inglés simple.
Permítanme ahora pasar a la final aquí y volver a ejecutar mi programa.
Pero nada parece haber cambiado.
¿Por qué?
Tengo que volver a compilar.
Así error fácil de cometer.
Pero usted tiene que no sólo guarda el archivo pero
volver a compilar el programa.
Y así, si puedo volver a hacer funcionar hola, ahora Clang ejecuta.
Ahora se puede ejecutar. / Hello. Y ahora veo "Introduzca una cadena:".
Bien.
Ahora es un poco más fácil de usar.
Nate, Enter, hola, Nate.
>> Bueno, vamos a intentarlo de nuevo y empezar a pensar
sobre los casos de esquina.
Así como en scratch, es recomendable o se están
alentado en la especificación de pensar tipo de lo que podría pasar
mal si usted no anticipa todo lo que el usuario puede hacer.
Bugs, por lo tanto, podría resultar.
Así que introduzca una cadena -
¿qué es un caso extremo en esta lista?
¿Qué es un escenario que yo, el programador, que no tenga
previsto?
Si.
Bien.
¿Y qué si escribo en una serie como esta?
Está bien.
Por lo tanto, todavía funciona.
Gramaticalmente no tiene sentido.
Pero por lo menos funciona el programa.
>> ¿Cuál es otro caso de la esquina?
Algo que no esperaba.
¿Sí?
Bien.
Así que podríamos hacer algo así como un número muy, muy grande.
Así que vamos a hacer esto aquí.
Permítanme alejar por un segundo, quisiera destacar.
No se puede copiar y pegar aquí.
Está bien.
Así que no se puede copiar y pegar en la ventana de terminal, así que vamos a
simplemente simularlo.
Permítanme alejar la imagen, va a envolver.
No voy a hacer esto por mucho tiempo, porque no lo hará
en realidad romper en este programa.
Pero podría.
Intro.
Pero no fue así.
Está bien.
Pero es un caso genuino rincón.
Y la única razón por la que se comportaron correctamente, por lo que
hablar, se debe a que la función GetString CS50 es en realidad
diseñado bajo el capó, como veremos en un par de semanas,
para asignar automáticamente RAM más y más, más y más
de memoria del sistema operativo, cuando se da cuenta, wow,
realmente has escrito en algo bastante largo.
Ahora, esto es un poco de una mentira piadosa.
Si realmente hizo una pausa durante un buen rato y me escribió en
algo así como 5 mil millones de caracteres en el teclado
aquí, o realmente dio copiar y pegar un poco, que muy posiblemente
podría hacer que el programa se bloquee.
Sólo un poco más difícil de simular que con una finita
cantidad de tiempo.
>> ¿Cuál es otro caso de la esquina que pudimos probar?
¿Sí?
Si.
Así que ¿por qué no respondes nada?
Así que en realidad tiene que tomar alguna acción, porque de lo contrario
el programa va a sentarse allí parpadeando todo el día.
Pero si simplemente pulse Enter -
Bien, ahora, todavía se ve mal.
¿Acaso no chocar, pero tal vez ahora hay una oportunidad para
empezar a aplicar un programa más riguroso
que comprueba efectivamente.
Y si la cadena, la oración, la palabra que yo
escribió en tiene longitud 0, bueno, tal vez debería gritar a la
usuario, o le digo o le permite introducir una cadena de nuevo, de modo que
conseguimos realmente lo que parece ser un comportamiento correcto y no
sólo la supervisión completa de mi parte.
>> Pregunta en la espalda?
Número decimal.
Así que podríamos intentar eso.
1,10000005.
Parece que va a funcionar realmente bien.
Y que en realidad se espera.
A pesar de que podría haber escrito ese número hay, o un
mayor número anterior, se dan cuenta de que cuando estás escribiendo usuario
entrada y estamos usando la función GetString, no
importa si lo que estoy escribiendo se ve como un número.
Recordemos que de acuerdo con ASCII, todo en su
teclado tiene un valor numérico que se puede asignar a un
carácter, un char.
Así que en este caso, a pesar de que podría escribir un número, el
equipo va a pensar que es, por así decirlo, como una cadena -
algo que se ve como un número, pero es
realidad no es un número.
Pero eso es en realidad una transición perfecta, porque ahora podemos
de hecho la transición a programas de escritura que
utilizar otros tipos de datos.
>> Así que además de usar caracteres, o más bien, además de utilizar cuerdas,
cuenta de que tenemos otros tipos de datos en C así como en
otros idiomas.
Un char, como su nombre indica, es un personaje único.
Un flotador es un valor de punto flotante, y eso es sólo una fantasía
manera de decir un número real - algo que tiene un decimal
punto en que con algunos números a la izquierda y / o derecha.
Un valor int es un entero, que es sólo un número como 123.
Y ahora lo más interesante son cosas como doble.
¿Qué dijimos una habitación doble era la última vez?
Es 64, derecha.
Así que, por lo general un float es de 32-bit -
por lo que es todo este tiempo en la memoria, utiliza 32 ceros y unos a
representan valores - un doble es literalmente el doble, el cual
significa que usted puede representar grandes números, o
puede representar números más precisos.
Así que usted puede tener más números después del punto decimal, pero
como el hombre dijo en el video, incluso algo tan simple
conceptualmente como 1/3 no puede representarse con precisión por un
equipo, porque con el tiempo se le acaba de bits, y
por lo tanto, sólo se puede hacer .33333333 tantas veces, en
el que usted acaba de decir que me he quedado sin representación
espacio, tengo que llamar a sólo un día y representarla
un tanto imprecisa así.
Y un largo tiempo -
nombre estúpido, pero es porque hay un tipo de datos conocida como
long en C que casualmente es a menudo 32 bits, al igual que un
int es de 32 bits, pero es un tiempo largo
general 64 bits.
Por lo tanto, sólo significa que usted puede representar más
números que esto.
>> Está bien.
Así que si realmente quieres empezar representando las cosas,
puede ser que necesite más tipos sofisticados, y
es por eso que contamos con cadena.
Así, en la biblioteca CS50, ese archivo llamado cs50.h, hemos
en realidad declaró un tipo de datos, por así decirlo, llamada cadena,
pero string en realidad no existe.
Esto es, una vez más, una de estas capas que vamos a pelar
de nuevo en una semana o dos y tirar a la basura, y de hecho
mirar debajo del capó a lo que en realidad es una cadena, y
cómo está representada.
También vamos a ver valores booleanos.
>> Entonces, ¿qué era un bool en el contexto de Scratch?
Es cierto o falso.
Así que es un valor que es verdadero o falso, encendido o apagado, 1 o
0, sin embargo quiere ver el mundo.
Así que en C, gracias a la biblioteca CS50, que a su vez
incluye otra biblioteca debajo de la capucha, tenemos
el acceso a un tipo de datos que se llama bool, que se
literalmente nos permite asignar los valores true o false para
las cosas en un programa.
>> Así que vamos a seguir adelante aquí y escribir un pequeño programa que
hace algo relacionado con números.
Así que permítanme volver al Dispositivo CS50, déjame seguir adelante y
crear un nuevo archivo llamado aquí -
vamos a decir algo simple, como math.c.
Está bien.
Y ahora sube a la parte superior de mi programa, estoy
va a hacer el habitual -
# Include, así que puedo usar
printf, int main (void) -
vamos a volver, con el tiempo, lo que significa int
aquí, lo que significa vacío aquí, pero por ahora, sólo sé que
usted tiene que comenzar programas como este.
Ahora voy a seguir adelante y decir algo un poco
diferente - printf ("Dame un número:"
).
Entonces me voy a hacer int n = getInt, porque
Resulta getInt es otra función en la biblioteca CS50
además GetString.
Y ahora me voy a hacer algo estúpido, como "gracias
para el% d ", para el número entero decimal, y luego coma n, y
a continuación, devuelve 0.
Así que de nuevo, devuelve 0 no tiene nada que ver con el número que estoy
preguntar al usuario.
Sólo significa que al final de todo, presumiblemente, es así.
>> Así que déjame ir a mi ventana de terminal aquí.
Déjame escribir make matemáticas, introduzca.
Y algo está mal.
Hacer las matemáticas no funcionó.
Este es el primero de nuestros mensajes de error.
¿Por qué?
Un críptico poco, pero -
Si.
Así cs50.h.
Así que de nuevo, especialmente al principio, podrás escribir tu primer
programa conjunto de procesadores 1 en secciones, en horas de oficina, y
francamente, va a ser abrumador a veces lo que estas cosas
en realidad están diciendo.
Pero te darás cuenta muy pronto empiezan a caer
en los cubos mediante el cual éste significa que usted ha dejado una
de la # incluye en la parte superior del archivo.
Y Clang, el compilador, se le informa de ello por
decir, en lugar imaginario, la declaración implícita de
getint función no es válido.
>> Está bien.
Entonces, ¿qué significa eso?
Sólo significa que usted ha declarado implícitamente en getInt
el sentido de que no se ha declarado explícitamente.
Para declarar explícitamente int, hay que enseñar
Clang que existe.
Y la solución muy simple para esto es para enseñarlo por
incluyendo este otro archivo, cs50.h, en
la parte superior de su archivo.
Porque literalmente, lo que hace es # include le dice Clang
más o menos para ir a buscar el archivo llamado cs50.h, copiar,
pegarlo automáticamente en la parte superior de mi programa por mí,
y luego convertir el código fuente en ceros y unos.
Pero eso, obviamente, sería muy aburrido si nosotros, los humanos tenían
para ir copiando y pegando estos archivos grandes todo el tiempo,
# include tan sólo hace todo de forma automática sin
enturbiar mi código con otra persona biblioteca.
Y una biblioteca es más que otro archivo que contiene las funciones y
otras cosas que alguien ha escrito, de que somos
aprovechar para nuestro propio bien.
>> Está bien.
Vamos a intentarlo de nuevo.
Hacer matemáticas.
Intro.
Bueno.
Así que parece haber funcionado.
Así que permítanme ahora funcionan las matemáticas;. / Matemáticas.
Ingrese me da un número, 123.
Gracias por el 123.
Ahora vamos a probar con otro caso de la esquina.
Una cadena es bastante generoso, ya que un
cadena puede ser cualquier cosa.
Puede parecer que los números, parece
personajes, se parecen a las palabras.
Pero un int es un entero.
Así que ahora si soy el usuario difícil, y está diciendo "Dame
un número ", lo que si trato de hacer algo como 0,1?
Bueno, eso es un número, y es consistente con la
gramática que se utiliza aquí, pero por debajo de la capucha, estoy de
curso usando el getInt función.
>> Así que vamos a ver qué pasa.
Intro, vuelva a intentarlo.
Está bien.
Voy a ser difícil y simplemente pulse Enter de nuevo.
Enter, Intro.
Así que ahora parece que getInt es un poco más
poderoso que GetString.
Nosotros, el personal, implementado de tal manera que si se observa
no nos ha dado un entero - y un int es un número decimal
contienen ceros, unos, dos, tres, cuatro, cinco, seises,
sietes, ochos, o nueves.
Y eso es todo.
No hay puntos decimales, ni personajes, ni signos de puntuación.
Parece que tenemos que cooperar.
Así que voy a tratar de cuatro, cinco, seis, y eso me ayuda a pasar.
Así que en realidad, para ser anal aquí, probablemente debería decir "Dame
un número entero "con el fin de transmitir al usuario
exactamente lo que pretendo.
>> Ahora vamos a pensar bajo la campana.
No vamos a ver cómo se implementa cs50.h hoy,
que biblioteca.
Pero si se sigue diciendo reintentar, reintentar, reintentar, lo que la programación
construir estoy usando presumiblemente por debajo de la campana
implementar eso?
Así que sólo un bucle, ¿verdad?
Una de las ideas más sencillas que hemos visto en Scratch.
The Forever construir, construir la repetición.
Es de suponer que, en este programa, por debajo de la campana, incluso
a pesar de que está escrito en C y no cero, que está haciendo
algo que se llama equivalente a siempre si el usuario no tiene
escribió en un número entero, por ejemplo reintentar, reintentar, reintentar, reintentar, por lo que
finalmente, cuando lo hacemos llegar un entero, entonces
salir de ese bucle.
>> Entonces, ¿qué otras funciones pueden usamos aquí en la biblioteca del CS50?
Bueno, un poco de las obvias, por lo menos sobre la base de la
Tipos de datos que ahora sabemos que existen.
Implementamos GetString, getInt, sino en todo el
primeras semanas del término, también se puede utilizar GetFloat y
GetDouble y GetLongLong con el fin de obtener exactamente los
Tipos de datos que desee.
Debido a que el detalle clave aquí es que a diferencia de otros idiomas,
como Python y Ruby, en el que no necesariamente tienen que
declarar el tipo de datos de una variable -
usted no tiene que decirle a la computadora qué tipo de cosas
te vas a poner en la variable -
en C, usted tiene que ser siempre tan precisa.
Así que si quieres una variable llamada n, un trozo de almacenamiento
que en este caso pasa a ser de 32 bits por convención,
tiene que decirle a la computadora que estos bits son
va a almacenar un número -
No es un personaje, no una cadena, no un flotador.
Y esto se refiere a la cuestión que efectivamente
encontré la semana pasada.
Si estamos usando ceros y números de seres para representar no sólo
números, pero A y B y C, como en el mundo es un
equipo va a saber que este patrón de bits en realidad
representa el número 65, en lugar de representar el
letra A, que casualmente, según
ASCII, recuerdo, era equivalente a 65?
>> Así que estos tipos de datos proporcionan un contexto para el equipo, por lo
que se sabe si estos bits se debe interpretar como una
int o como una cadena.
Cualquier pregunta, entonces, a este respecto?
¿Sí?
DAVID J. MALAN: Buena pregunta.
Si sacamos stdio.h, guardamos el archivo -
déjame ir a la ventana de terminal y ejecute make matemáticas, zoom
y entrar -
ahora me sale un error diferente, porque soy implícitamente
declarando cuál es la función ahora?
Printf.
Así que ahora he creado un nuevo problema, cuya solución es
esencialmente el mismo.
Tengo que poner eso de vuelta.
AUDIENCIA: [inaudible]
DAVID J. MALAN: Oh.
Así que si saco -
Bueno, sí.
Así que si me quito la inclusión de la E / S de la biblioteca hasta
aquí, y entonces estás diciendo que si me deshago de printf, obtener
deshacerse de printf?
Sí.
Esto debería funcionar, porque ya no estoy usando cualquiera - gritos.
¿Acabo de mentir?
Oh, está bien.
Esto no funcionará debido a un nuevo error que acaba de presentar.
Y éste es un poco más fáciles de entender.
>> ¿Cuál es el problema?
Sin usar la variable n.
Así que este error es el resultado de haber configurado el
aparato a ser particularmente pedante, gritar realmente en
por todos los errores posibles, incluso si es una especie de
un error no fatal como esto - ¿es realmente tan grande
tratar de que me asignaron un int, poner un número en él, y luego
acabo de hacer nada con él?
Así que funcionalmente, no.
Eso no va a romper el programa.
Es sólo un poco estúpido, ¿verdad?
No hay valor para haber pedido ese número, almacenados
en una variable, si nunca vamos a hacer nada
con ella, ya sea imprimir o guardar.
Así pues, en este caso, Clang está reconociendo como mucho, y
que está diciendo sin usar la variable n.
>> Así que podemos arreglar esto, si realmente queremos.
Pero de nuevo, esto no es una buena programación ahora.
Así que sólo podía hacer esto -
bajar aquí, déjame limpiar la pantalla, hacer matemáticas.
Eso funciona.
Ahora puedo ejecutar mi programa de matemáticas, toma de entrada -
bueno, eso era malo.
Toma de entrada, y que es todo lo que hace, en este caso.
>> Así que en realidad, vamos a probar un caso, otra esquina que
no pensó antes.
En este caso - aquí, vamos a volver a la que es una
poco más fácil de usar.
Déjame volver aquí y hacer funcionar de nuevo las matemáticas.
¡Vaya, qué hice mal?
Tengo que hacer retroceder aún más.
Bien.
Ahora estamos de vuelta en el estado original, donde todos
es de esperar también.
Y ahora si me quedo matemáticas, 123 parece funcionar.
Pero esto no es realmente una prueba eficaz, por decir sólo
bien, eso funciona.
789, que funciona.
Es hora de presentar.
Porque hay otros casos de esquina aquí.
Una cadena que realmente no nos dan muchos problemas al escribir un
gran cantidad de personajes.
Pero ¿y si escribo en esto?
Dar en el número 1 de mucho, mucho aquí -
bien, se está haciendo un poco aburrido, así que voy a
parar aquí, y voy a presionar Enter.
>> ¿Qué demonios ha pasado?
Así que en realidad esto puede ser explicado.
Así que se lo toma como binario?
Un buen pensamiento, pero no, no es el hecho de que se tomó
como binario, porque en realidad, eso era sólo una especie de
coincidencia.
Podemos hacer esto otra vez.
Así que no hay 2 en el sistema binario, que es
probablemente suficiente de todos modos.
Intro.
Así que ese no era el problema.
¿Qué más?
Exactamente.
>> Así que pensar en volver a lo que realmente es un int.
Es 32 bits que colectivamente se interpretan
como un número.
Si tiene 32 bits, que significa que cada uno de los bits puede ser
un 0 o un 1, 0 o un 1.
Así que eso significa que hay dos posibilidades para este bit,
dos posibilidades para esto, dos posibilidades para esta
bit - por lo que es 2 veces 2 veces -
de manera que es 2 a la potencia 32 es el número total de
permutaciones de ceros y unos, si usted tiene 32
marcadores de posición, ceros o unos, en frente de usted.
Así que si tengo 2 a la 32, matemáticamente, que es lo que?
Así que es mucho.
Son las 4 millones de dólares, más o menos.
Y 4 mil millones no parece ser lo que fue impreso aquí.
De hecho, esto se ve más cerca de 2 millones de dólares.
Pero esto no es una coincidencia.
El hecho de que el ordenador se ha malinterpretado mi número enorme,
mi enorme secuencia de unos y entonces mi gran secuencia de dos en dos,
ya que alrededor de 2 mil millones, se explica cómo?
Hay un límite en el int.
Hay un sin duda un valor máximo que se puede representar.
Pero por lo general es 4 mil millones, ¿no?
Si 2 a la 32 es aproximadamente 4 mil millones, que parece
que es el mayor número.
Así que no es un residuo, sino un buen pensamiento.
Los números negativos.
Así que si usted tiene 4000 millones las cosas posibles que puede
representar con estas diversas permutaciones de 32 0 y
1s, bueno, es lógico pensar que los seres humanos puede ser que desee
representar no sólo números enteros positivos
pero enteros negativos.
Y de hecho, esa es la suposición de que C hace.
Así que con 32 bits, puede representar aproximadamente 2 negativo
millones de todo el camino hasta positivo 2 mil millones.
Y así, en este caso, lo que realmente estamos viendo es sólo
al margen de la capacidad de nuestro entero, y tenemos, por lo que
para hablar, se desbordó un número entero.
Hemos tratado de meter más bits en lo que realmente puede encajar.
Así, el resultado final es que tienen esencialmente las 1 bits.
Hemos volteado todas nuestras bits en, hemos tratado de representar
el mayor número posible, pero es evidente que no es casi
lo suficientemente grande como para representar las dos cosas que acabo escrito pulg
¿Sí?
AUDIENCIA: [inaudible]
>> DAVID J. MALAN: Buena pregunta.
¿Por qué no podemos simplemente representa que negativo
como se acaba de firmar un personaje?
Así que es absolutamente posible, y entonces podríamos ahorrar
un bit adicional.
Sin embargo, usted todavía va a tener que representar ese guión, y
que te va a costar por lo menos algo,
presumiblemente un poco.
Así que sí, podríamos tener 32 bits que se utilizan para obtener el número, pero ahora
necesitamos otro poco utilizado para nuestro guión
símbolo, el signo menos.
Así que ahora tenemos 33 valores de bit, lo que podemos hacer, pero es
No de la manera que se hace.
Hicimos una sentencia de llamada hace años, 32 bits es una especie de
unidad de medida aquí.
Así que vamos a usar uno de estos bits con eficacia a
representa la negatividad, y 31 bits para representar el número.
Otras preguntas?
Está bien.
Eso es mucho.
¿Por qué no seguir adelante y tomar nuestros cinco minutos de descanso aquí?
>> Está bien.
Así que de nuevo, no poner demasiado énfasis en las aplicaciones matemáticas
de la programación, vamos a arrancar este ejemplo
antes de pasar a otras construcciones, sólo porque
se ilustran algunos puntos de tropiezo comunes en algunos de
los conceptos básicos a la hora de escribir programas.
En este caso, haciendo expresiones aritméticas que tienen algún
relevancia interesante a la sintaxis.
>> Así que esto es sólo una fórmula con la que podemos convertir
temperatura de Fahrenheit a Celsius.
Si usted no recuerda, esto es sólo la fórmula.
Así que si lo conectamos en Fahrenheit valor de 32 grados, que es
congelación, que va a ser 32 menos 32 es 0, y de hecho,
0 en grados Celsius es también la congelación.
Así cordura registro rápido allí - esa es la fórmula familiar.
Permítanme pasar al aparato, sin embargo, y comenzar
escribir un programa que se llama, como, f2c, "Fahrenheit a
Celsius punto c ".
Y en la parte superior aquí, voy a empezar con # include
stdio.h, y yo voy a hacer int main (void), y
otra vez, volveremos en el futuro en cuanto a qué significa int
allí y lo vacío significa que hay.
Y ahora déjame seguir adelante y poner en práctica un programa que
básicamente hace esta conversión para nosotros.
>> Así printf, digamos, la temperatura en grados Fahrenheit.
Y luego me deja seguir adelante y obtener el valor para el usuario.
¿Qué tipo de valor debería obtener de los usuarios, si quiero
que me dieran una temperatura en Fahrenheit?
¿Sí?
¿Qué te propones?
Si.
Así flotador se siente bastante razonable.
Tenemos, de nuevo, sólo algunas opciones que
que hemos visto hasta el momento.
Tenemos cosas como char, float doble, int, long long,
bool, string.
Así que de estos, el flotador se siente bastante razonable.
Nos vendría bien un derecho doble, porque, si de verdad queremos
representan la temperatura de un ser humano -
98,60000 -
podríamos utilizar 64 bits para hacer eso, pero se siente como
exageración para la temperatura.
Así que vamos a ir con flotador.
Ahora necesito una variable.
Sólo para no complicar las cosas, voy a llamarlo f, pero
bien podría llamarlo correctamente la temperatura,
pero tampoco está bien.
Así float f = GetFloat.
Tan pronto como ahora ha decidido utilizar GetFloat, sin embargo, me
necesita hacer una corrección.
Si.
Así que tenemos que incluir # , de lo contrario el compilador
va a gritar a nosotros.
Ahora que tengo un flotador, déjame ir adelante y hacer el
conversión.
>> Así que primero, permítanme entrar en el hábito de aquí
comentando mi código.
Así que de nuevo, un comentario es sólo una notación para el ser humano que es
no forman parte del programa en sí, pero uno, que ayuda
entender lo que hizo al día siguiente, ni el siguiente
meses, ayuda a su compañero de enseñanza entender lo que hiciste
o lo que pretendía hacer, por lo que es
práctica general muy bueno.
Cada pocas líneas de código, escribe un comentario a
usted o su compañero.
Así que aquí, voy a decir: "Preguntar al usuario para la temperatura."
No tiene que ser una frase completa, sólo una frase corta.
Pero la idea detrás comentando en C es que cada uno de sus
observaciones en caso de que la autonomía - o, digamos, un TF o un colega -
a rozar su programa y saber exactamente lo que hace, no por
tanto la lectura del código, pero al leer los comentarios que,
debe ser breve y claro.
Muy bien, así que ahora quiero seguir adelante y decir, "Convert
Fahrenheit a Celsius. "Así que voy a seguir adelante y hacerlo,
digamos, flotar c.
Vamos a seguir Celsius como un valor de punto flotante.
>> Y déjame tomar una puñalada en esto.
La fórmula es, de nuevo, hasta aquí.
Como 5.9 veces menos F 32.
Así que vamos a hacer esto.
Así que 5 dividido por 9, menos -
¡Vaya, me lo arruinó todo ya.
Times.
Así que 5.9 veces menos F 32.
Así F menos 32, punto y coma.
Y ahora, aquí, voy a seguir adelante
y decir, imprimir resultado.
Y esta parte es fácil. Printf.
¿Cómo hago para imprimir esto?
Bueno, podría decir: "Ese número en grados Celsius es% f \ n",
sólo para algunos estética.
Y entonces, ¿qué valor es lo que quiero conectar aquí como de printf
El segundo argumento?
Bien.
Así que c.
Así que vamos a empezar con esto y luego simplemente devolver 0.
Una vez más, no tiene nada que ver con las matemáticas.
Sólo significa que todo está bien.
>> Ahora, ¿es esto correcto, este programa?
Está bien.
Así que he cometido algunos errores.
Incluso si usted no tiene idea de lo que es la programación, puede ordenar
de vuelta a la escuela primaria inferir lo que la
errores aquí podría ser.
¿Cuál es uno de los primeros?
AUDIENCIA: [inaudible]
DAVID J. MALAN: Si.
Así que nos falta paréntesis.
Fue deliberado que hice paréntesis en la keynote
deslice aquí, porque no hay en realidad esta noción de orden
de las operaciones, o precedencia, en el que ciertas operaciones -
multiplicación -
tienen una mayor unión, tienen mayor prioridad, que las cosas
como suma o resta.
Para ello hemos hecho esto durante años sólo para dejar en claro exactamente
qué operación matemática se debe hacer primero.
Así que probablemente debería imitar exactamente esto.
De lo contrario, el equipo está probablemente va a tratar de hacer
algo así como dividir 5 por 9, y luego multiplicar F, luego restar
32 de todo el asunto.
Lo cual no es, de hecho, lo que queremos hacer.
Así que vamos a poner entre paréntesis.
Vamos a añadir mis paréntesis aquí, paréntesis aquí.
Vamos a poner esto aquí.
Aquí, me di cuenta de otro error que cometí en el camino.
¿Sí?
AUDIENCIA: [inaudible]
>> DAVID J. MALAN: Ah.
Bueno.
Así que en realidad tienen el mismo número entero
división cuestión de antes.
Puedo corregir eso, vamos a ver lo que el síntoma es.
Pero vamos a tener que corregir una
otro error aquí.
¿Sí?
AUDIENCIA: [inaudible]
DAVID J. MALAN: Si.
Por lo tanto, el error estúpido que hice, pero increíblemente importante.
El equipo no se va a convertir sólo la vista gorda y dejar que
usarme F capital, cuando en realidad declarado la variable
como una f minúscula aquí, en la línea 8.
Así que tengo que corregir en mi línea 11 capitalización, que un
momentos antes era una F mayúscula por error.
¿Qué pasa aquí?
Si esto no fuera así en minúsculas?
Debe ser, sino que es una coincidencia.
Eso% f no tiene nada que ver con la variable.
Así que para ser super claro aquí, déjame seguir adelante y
cambiar el nombre de este, en pocas palabras, "temperatura". Déjame cambiar el nombre de
esta "temperatura". No dejes que me cambie el nombre de esta.
Porque, de nuevo, f% a nivel mundial significa, "flotando valor en puntos."
No tiene nada que ver con mi variable.
Sin embargo, "temperatura" por todo el lugar es un poco prolijo,
así que voy a volver a mi minúscula "f" s.
>> Ahora, déjame ir por delante hasta mi ventana aquí.
Hacer f2c -
que fue, de nuevo, el nombre arbitrario I
dio a este archivo.
Parece que ha compilado.
Déjame correr f2c.
Intro.
La temperatura en Fahrenheit - vamos a hacer fácil.
32.
OK, corregirlos.
Pero, si ahora hago 212 para hervir -
maldito.
Está bien.
Por lo tanto, claramente no corregir, si el TF intenta
al menos dos valores.
Entonces, ¿cuál es el problema aquí?
Bueno, ya poner el dedo en cuál es el problema.
Pero ¿por qué es así?
Hasta aquí, cuando estoy haciendo la matemáticas de 5 dividido por 9.
Entonces, conceptualmente, es perfectamente correcto.
Totalmente coherente con la fórmula.
Pero los ordenadores sólo hacen precisamente lo que
les dicen que hagan.
Y lo que estamos diciendo la computadora efectivamente aquí es
dividir el entero de 5 por el número entero 9
y me da el resultado.
El problema es, sin embargo, cuando se utiliza la división de datos
tipos, la salida es el mismo tipo de datos que las entradas.
Y así, si las dos entradas son a la vez ints, la salida se va
a ser un int.
Y así que 5 dividido por 9 es algo punto.
Pero ¿cuál es el número entero más cercano al punto algo?
Por lo tanto, en realidad es 0.
Así como discutimos el lunes, después de todo el decimal
punto queda truncada.
Sólo se tira.
Así que esto es un completo error, porque puede ser que también acaba de
multiplicamos todo por 0 aquí.
>> Ahora, puedo arreglar esto en un par de maneras.
Yo podría hacer esto.
5,0 dividido por 9,0.
Técnicamente, no tienes necesidad de hacer eso.
Esto es suficiente para que sólo uno de los números de un flotador -
o doble - al poner el punto decimal aquí.
Porque lo que sucede ahora es cuando se divide un entero
un flotador, o un doble, el equipo va a dar cuenta
oh, uno de ellos es más preciso.
Permítanme errar por el lado de darle más precisión que
usted pretende.
Así que convertirá el resultado -
devolverá el resultado como un valor de coma flotante también.
Así que iba a funcionar.
Esto funcionaría.
Y no hay un mecanismo distinto que vamos a ver en
mayor detalle la próxima semana.
En realidad se puede, ya que el programador, decirle a la computadora
para tratar realmente un tipo de datos como
si fuera otro.
>> Así que yo podía hacer esto.
Entre paréntesis, puedo decir algo como (float), abierto
Paren, paren cerca.
Y esto es lo que se llama "casting". Una vez más, más
en esta próxima semana.
Pero esto es sólo la forma programática de contar
la computadora, sí sé 9 es un número entero o una larga.
Yo sé que no es un valor de coma flotante.
Pero tratarla como tal de todos modos.
Así que para convertir un tipo de datos significa convertir
de una a la otra.
Francamente, esto es sólo un poco feo, así que me propongo ir
respaldar a la sugerencia original de sólo convertir
estas cosas a valores de punto flotante de forma manual.
Por ahora es sólo súper claro lo que está pasando, y
no es todo lo que distrae.
>> Así que ahora vamos a ir de nuevo en mi ventana de terminal.
Hacer f2c.
Déjenme seguir adelante y ejecutar este.
Y, en un aparte, te aburres escribiendo estos comandos
una y otra vez, se dan cuenta que las computadoras, como Linux aquí,
tienden a ser bastante inteligente.
Y si golpeo para arriba, podemos ir a través de mi historia entera de
comandos, arriba y abajo.
Así que en este caso aquí, puedo ir hasta ejecutar make f2c.
Estoy siendo gritado, porque yo sólo hice hace un segundo.
Ya está actualizado.
Así que ahora puedo correr f2c nuevo.
Vamos a tratar de 32 grados Fahrenheit.
Ahora vamos a tratar de 212 grados Fahrenheit.
>> Phew.
Parece que funciona.
Ahora, esto es bueno, pero se siente un poco arbitrario que
Estoy mostrando seis números después de los puntos decimales.
¿Cierto?
Si usted es la persona el tiempo en TV, eres una especie de doofus
si estás leyendo la temperatura a
este grado de precisión.
Así que vamos a simplificar esto.
Así que en realidad van por aquí, a mi printf.
Y sí, quiero flotar.
Pero quiero precisar ahora la precisión.
Y yo voy a ser un poco breve.
Yo voy a decir, dame un punto después del punto decimal.
Así que en lugar de decir f%, yo voy a decir% .1 f.
Y esto sólo significa dame una posición
después del punto decimal.
Está bien.
Vamos a intentarlo de nuevo.
Permítanme volver a ejecutarlo después de compilar.
Y ahora escribo en 32 años, y que vuelva a
más sucinta valor.
Y puedo escribir, ahora, 212, y volver a una más sucinta
valor también.
Y hay otras cosas que puedes hacer con printf.
En realidad se puede especificar el ancho de la cantidad que debería ser.
Si usted quiere tener acolchado en él, para que pueda alinear a la derecha o
izquierda alinear todos los números o
tratar de centrar las cosas.
Así que darse cuenta de que hay pequeños trucos que se pueden hacer allí.
Pero sólo se reducen a los códigos de formato,
como el que tenemos allí.
>> Así que en términos de esta cuestión de precedencia.
Esta es una tabla muy aburrido ir a través metódicamente.
Pero darse cuenta de que los autores de C han llegado a la
reglas que especifican que los operadores tienen una mayor
prioridad, más poder vinculante, que otros.
Así, mientras que en la escuela primaria, por lo general sabía que era
multiplicación y división, luego suma y resta,
entonces algunas otras cosas.
En un mundo de la programación, hay un gran
ya lista de las cosas.
Y esto no es algo que vale la pena memorizar ahora.
Vas a aclimatarse a ella antes de tiempo.
Pero al igual que en la escuela primaria, generalmente entre paréntesis resolver
las cuestiones de prioridad, haciendo la súper clara a la
computadora y humanos por igual lo que se pretende.
Así que considere esto un poco chuleta allí.
Pero la mayoría de esos detalles que no se llega a un tiempo.
>> Está bien.
Ahora, vamos a construir y alejarse de estos poco tonto
ejemplos matemáticos.
Siga utilizando los mismos fundamentos, pero el comienzo
expresarnos un poco más como Scratch.
Así que en Scratch, teníamos estas expresiones booleanas.
Y en Inglés, una expresión booleana es lo que?
Verdadero o falso.
Es algo que se evalúa como verdadera o falsa.
1 o 0.
Encendido o apagado.
Lo que sea que quieras llamarlo.
Ahora en Scratch, las piezas del rompecabezas se veía así.
Y esa es la combinación, en la parte inferior hay, de tres
piezas de un rompecabezas.
Una conjunción -
algo que tiene en blanco y en blanco.
Y luego dos expresiones booleanas dentro de ella.
Así que usted puede anidar expresiones booleanas para obtener más
complicadas expresiones booleanas.
Por ejemplo, si es sábado, y es agradable
tiempo, y luego salir a la calle.
O algo arbitrario así.
Así que usted puede unirse a expresiones booleanas para llegar a un
mayor valor de la verdad, cuya respuesta se basa
en los más pequeños.
>> Ahora, en C, por suerte, esta asignación es
en realidad bastante simple.
Los paréntesis ayudar a aclarar las cosas aquí.
&& Es lo que significa "y". Así es como
vamos a convertir esos bloques de Scratch para C.
Y para las condiciones que vimos en Scratch, en la mano izquierda
lado allí, se pueden apilar de manera similar en C. Si x es menor
que y, a continuación, hacer esto.
Porque si x es mayor que y, a continuación, hacer esto.
Otras ventas lógicamente deben ser iguales, por lo que dicen
que son iguales.
Así que ahora podemos comenzar a construir estas cosas.
>> Así que vamos a hacer un ejemplo.
Permítanme abrir un archivo que está en la página web de la asignatura que
Yo escribí con antelación.
Eso se llama nonswitch.c.
Y vamos a ver por qué en un momento.
Así que en este archivo - nonswitch.c--
cuenta por primera vez que hay un montón de
comentarios en la parte superior.
Eso es sólo explicar el nombre del archivo, lo que
hace, y así sucesivamente.
Y, al parecer, se muestra el uso de los operadores booleanos AND-ing -
conjugar dos expresiones.
>> Así que vamos a ver cómo funciona este programa.
Incluyo mis dos archivos, cs50.h y stdio.h.
Si desplácese hacia abajo, ahora, para el programa, que es un poco más largo
de lo que hemos escrito antes, pero bastante legible.
Así que primero imprime al usuario, en la línea 18,
"Dame un número entero entre 1 y 10." Tan
que está justo ahí.
Ahora tengo el entero.
Pero darse cuenta de que getInt - bastante simple.
Es sólo va a conseguir un int.
Esto va a asegurarse de que recibe un int y no un
cadena o un flotador.
Pero no va a hacer ningún tipo de comprobación de límites.
No va a filtrar los números a ser entre un
cierto rango.
Así que tenemos que poner en práctica que nosotros mismos.
Así como en Scratch, donde podría hacer una conjunción de
dos expresiones, puedo hacer eso en C como sigue.
Si n es mayor que o igual a 1, y n es menor que y
o igual a 3, voy a muy arbitrariamente decreto que
número a ser un número pequeño.
Sólo por el bien de un comunicado.
Porque si n es entre 4 y 6, print "Usted escogió un medio
número. "De otro modo, si n es entre 7 y 10, escriba" escogido usted un
número grande. "Else print" Usted escoge un número no válido ".
Porque, lógicamente, que sigue si hemos
agotado nuestra gama.
>> Así que darse cuenta de esto no es del todo cómo escribimos mayor o
igual en una clase de matemáticas.
¿Cierto?
Por lo general, dibujarlo así, con la línea debajo de ella.
Pero no hay tal clave en mi teclado.
Por lo tanto el símbolo en C para expresar mayor o
es igual a dos personajes, y el símbolo de menos de
o es igual a dos personajes también.
Está bien.
Así que si ejecuta este programa, que es fácil adivinar lo que es
vamos a hacer.
Si vuelvo a ir adelante y hacer nonswitch, Enter.
Y a continuación, ejecute nonswitch.
Dame un número entre 1 y 10.
Yo voy a dar 11.
Elegí un número no válido.
Voy a tratar el número 3.
Elegí un número pequeño.
Así que hay bastante sencillo.
>> ¿Qué pasa si quiero cambiar el comportamiento de este programa y
hacer algo un poco diferente en su lugar?
Déjenme seguir adelante y decir esto.
Déjame deshacerme de todo esto.
Y permítanme decir if (n == 42).
Y luego voy a seguir adelante y decir print "Usted tomó la
respuesta correcta. "De otro modo vamos a seguir adelante y decir,
printf ("Elegiste la
respuesta incorrecta ");. Okay.
El hecho de que.
>> Ahora, algunos puntos que podemos hacer aquí.
Uno, que no escriba el símbolo que se podría pensar es el
más razonable.
Cuando desee comprobar la igualdad, resulta que usted no utilice el
signo igual.
En su lugar, use el signo de igual a igual.
¿Y por qué podría ser eso, sólo intuitivamente?
Si.
AUDIENCIA: [inaudible]
DAVID J. MALAN: Correcto.
El signo igual se utiliza ya para la asignación.
Alguien realmente no pensar en esto.
Y ahora, cuando se trata de pruebas de igualdad, tenemos que
ser más explícito, y decir igual a igual.
Un error muy común es hacer esto.
Y, si en horario de oficina o una semana en algún lado o en el
próximas dos semanas se hace algo como esto y luego
luchar con él durante 10 a 20 minutos tratando de averiguar
lo que el bicho maldito es, darse cuenta de que usted es uno de los
personas que hicieron este error.
Por lo tanto, muy fácil de hacer.
Pero el objetivo ahora es evitar este error.
Esto podría evaluar, porque lo que se esta diciendo en realidad?
Si n se hace 42.
Así que la gente verbo usar, verbalmente, para expresar el
concepto de asignación es "consigue". Así que si n se hace 42.
Así que eso significa asignar 42 a n.
Ahora tengo una expresión booleana entre paréntesis,
dentro de esta condición, el valor del cual es 42.
¿Cierto?
Porque si lo evaluará de adentro hacia afuera, el total
respuesta, ahora, es de 42.
>> Así que si usted hizo la pregunta, "si (42)," lo que es
que realmente está diciendo?
Pues bien, las expresiones booleanas sólo pueden ser verdaderas o falsas.
1 o 0.
Encendido o apagado.
Así que parece que tenemos aquí un caso de esquina, en el que todos de una
repentino, estoy diciendo "si (42)". Eso no es un valor booleano.
Entonces, ¿qué hacen las computadoras, sin embargo, es que esencialmente equivale
nada que no sea 0 se interpreta para ser verdad.
1.
On.
Todos son funcionalmente equivalentes.
Sólo el valor 0, la palabra clave o falso, como veremos
finalmente ver, en realidad es falsa.
Así que "si (42)" en realidad sería verdad, porque es distinto de cero.
Así que para ser más precisos aquí, un valor booleano no es realmente tan
Cierto o falso, pero para este
caso, si es 0 o distinto de cero.
Así falsa o no falsa.
Y eso nos permite abarcar tanto más
posibilidades en la expresión entre paréntesis.
Así tenemos que, con tanta precaución, decir esto -
si (n == 42).
Simplemente porque tenemos que especificar una prueba de la igualdad,
no una asignación de un valor.
>> ¿Qué otra cosa es la pena señalar aquí?
Estas llaves no son realmente necesarios.
He estado haciendo sólo para ser quisiera hilar fino quisquilloso aquí.
Pero cuando usted tiene una condición que sólo tiene una línea de
código, para su conveniencia, los programadores no es necesario utilizar
las llaves.
Basta simplemente guión, por razones estéticas, y
a continuación, escribir la línea de código.
Sólo cuando se desea escribir dos líneas de código - para
ejemplo, else printf ("¡Adiós!"). Si usted quiere hacer
que, no funciona.
Puede sangrar todo lo que quieras, pero el hecho de que tiene
escribir dos líneas de código sin necesidad de utilizar llaves
significa que este programa no se ejecuta correctamente o podría
Ni siquiera compilar correctamente.
Así que por ahora, para ser honesto, creo que el mejor hábito es sólo
utilizar las llaves, y te darás cuenta de que hacen
súper claro lo que está pasando.
>> También, como un aparte - especialmente si usted está entre aquellos que utilizan
los libros recomendados o recursos en línea -
darse cuenta de que existe esta noción de estilo en
programación.
Y algunas personas prefieren poner la llave de cierre
aquí en una línea.
Algunas personas prefieren hacer cosas ridículas,
como poner aquí.
No hay una respuesta equivocada a la hora de
estilo, pero esto es incorrecto.
Sin embargo, algunas personas lo hacen.
[Risas]
DAVID J. MALAN: Así que hablar de esto ahora, simplemente porque como
leer sobre cosas en los libros o en línea, usted va a obtener
diferentes mensajes de diferentes maestros y
diferentes autores.
Y sólo se dan cuenta de que, funcionalmente, son
generalmente equivalente, pero sea constante.
Así que en este caso, vamos a normalizar el rizado
llaves alineando aquí a la izquierda.
>> Está bien.
Así que vamos a seguir adelante ahora y ejecutarlo, y ver qué pasa
con este programa.
Hacer nonswitch.
A continuación, ejecute nonswitch.
Dame un número entero entre 0 y - por lo que no es relevante
más, pero yo sólo voy a decir arbitrariamente 42.
Y he elegido la respuesta correcta.
Bueno, en realidad vamos a tomar esto en una dirección diferente.
Resulta que hay un poco de otra sintaxis que
puede utilizar en un programa.
He aquí una nueva pieza de sintaxis que es funcionalmente el mismo,
pero sólo introduce otra manera de expresarnos.
Así que esto es lo que se llama una "declaración de cambio". Y un
declaración interruptor funciona como sigue.
Se requiere, entre paréntesis, el valor que desea
"Interruptor" on.
Usted quiere comportarse de manera diferente en función de su valor.
Por lo tanto esto significa que el interruptor en el valor de n.
¿Y qué significa esto?
Bueno, si n es 1 ó 2 ó 3, adelante e imprimir "Usted
elegido un número grande "y luego romper.
La razón de la ruptura es que la forma C es como funciona
pronto como se encuentra un caso que coincide, comienza la ejecución
todo el código debajo de ella.
Así que si tengo una línea de código, como lo hago aquí en la línea 27, se
es ejecutado.
Si añado otra línea aquí, el fichero es ejecutado.
Otra línea aquí, el fichero es ejecutado.
El programa sólo deja de ejecutar lo que está por debajo de la
declaración de caso aplicable cuando explícitamente
decir "romper". Tan mal.
Derecha, en este caso, como consecuencia de ello.
4 Caso o 5 o 6, de manera similar, va
para imprimir un mensaje.
En este caso, el número medio.
Salto.
Caso 7, 8, 9, 10, que va a imprimir "Elegiste un gran
número. "Break.
Y luego está, literalmente, una palabra clave denominada "default"
que es eficaz como el "otro" constructo.
Así nueva sintaxis, pero intelectualmente,
nada nuevo aquí.
Es como el Scratch.
Si, de lo contrario si, de lo contrario si, tipo de bloque.
>> Así que esa es la versión conmutada de este programa.
Pero note que lo hicimos con números aquí.
Permítanme abrir una segunda versión, sólo para mostrar
algo un poco más concreto.
Así que aquí tenemos grados en su lugar.
Resulta que se puede utilizar switches no sólo en números enteros, pero en
personajes.
No en todos los tipos de datos, pero al menos en caracteres.
Así que aquí, podríamos hacer algo como si el valor de C que
el usuario escribió, en la línea 19, con la función GetChar,
es mayúscula o minúscula a, vamos a interpretar como una calificación,
y dicen que recogió una calificación excelente.
Y abajo a lo largo de la instrucción switch, tenemos otro
casos de "B" s y "C" s, y así sucesivamente.
Pero ahora vamos a completar otra cosa.
Y de nuevo, una especie de volar a través de
algunos de estos ejemplos.
Pero en realidad es para que podamos aplicarlas, ahora -
o en realidad, sólo tiene que traducir ahora -
a C.
>> Así que déjame ir adelante y hacerlo.
Voy a abrir un nuevo archivo.
Y yo voy a hacer include.
Y luego me voy a hacer int main (void).
Déjame guardar este archivo como una loop.c.
Sólo como un ejemplo.
Y voy a seguir adelante y hacer lo siguiente.
Quiero escribir un programa muy tedioso.
Así 10.
Vamos a hacer esto.
9.
Está bien.
Tan pronto como usted comience a hacer esto en la programación, usted es
probablemente haciendo algo mal.
Pero vamos a empezar por ahí de todos modos.
Oops.
Eso es realmente malo.
7.
6.
5.
4.
Nada de lo que va a pasar cuando lleguemos a 0.
3.
2.
1.
Bien.
0.
Eliminar.
>> Está bien.
Así que devolverá 0.
Así que este programa es, obviamente, va a hacer lo mismo
tediosamente dice que va a hacer.
Se va a imprimir todos los
valores, de arriba a abajo.
Así que me hacen bucle.
Y entonces - gritos.
Hacer circular.
Yo estaba en el directorio equivocado.
Y ahora déjame correr bucle.
Intro.
Woohoo.
Muy bonito.
Programa Niza, mucho tiempo.
>> Está bien, pero ahora vamos a hacer esto mejor.
Al igual que en Scratch, cuando comenzó a utilizar un bucle
construir, en lugar de simplemente copiar y pegar toda la
piezas de un rompecabezas, permítanme presentarles a esta cosa.
Así que en C, hay varias construcciones de bucles,
uno de los cuales tiene este aspecto.
Un bucle "for" tiene tres cosas, separados por dos puntos y comas.
Y, a continuación, en el interior del cuerpo del bucle, por así decirlo - la
cosas dentro de las llaves -
podemos hacer algo una y otra vez.
Así que lo que tenemos aquí en la pantalla, esto es
literalmente, sólo un comentario.
El / / significa aquí viene un comentario.
Este no es el código.
Esto es sólo descripción de Inglés, para mí, el ser humano.
>> Así inicializaciones, condiciones y actualizaciones.
Bueno, vamos a ver cómo funciona esto.
Esto me permite reescribir el programa de la siguiente manera.
For -
así que aquí viene mi loop -
int i -
aquí viene una variable llamada "i" -
se inicializa a 10.
Así que ahí está mi inicialización.
Quiero hacer este circuito tan largo como "i" es mayor o
igual a 0.
Y en cada iteración de este bucle, quiero
hay que hacer? -.
Así que vimos + + el lunes.
- Es el opuesto.
Se reduce el valor de 1.
Dentro de este ciclo, lo que quiero hacer realmente algo.
Así que voy a decir algo como printf.
No quiero decir que 10 ahora, porque esto obviamente es
va a imprimir el mismo valor.
¿Qué es lo que quiero imprimir en cambio, probablemente?
Si.
Así que "i". Así que% d, i.
>> Así que me voy a robar una de esas ideas de antes -
esta sustitución de códigos de formato -
y aquí abajo, en el fondo, voy a devolver 0, sólo
por si acaso.
Pero ahora, tengo un programa más sucinta.
No es más que unas pocas líneas, y algunas líneas no 10 o 11.
Déjame ir a mi mensaje aquí.
Remake bucle.
Vuelva a ejecutar el bucle.
Y lo que parece ser la misma.
Ahora, el programa no es más interesante.
Pero ahora puedo escribir algo como esto.
Yo puedo cambiar esto a 100.
Luego puede volver a compilar mi programa.
Y entonces puedo volver a ejecutar mi programa.
Y ahora va super rápido en los ordenadores de hoy en día.
Pero no tengo -
y, de hecho, mi memoria de retroceso no
incluso ir tan lejos.
Ahí vamos.
Así que ahí tenemos todo 100.
Pero es fácil cometer errores aquí.
¿Cuál va a ser el comportamiento esperado si
accidentalmente hacer eso?
Así que se siente como infinito.
Así que vamos a ver si el equipo se comporta.
>> Así que déjame ir adelante y hacer bucle.
Y déjame correr bucle.
Así que vamos a volver a eso en un momento.
Vamos a dejar que esa ejecución.
Porque lo que debemos contar hasta, como mínimo?
Es probable que al menos 2 millones de dólares, si tenemos que muchos bits, y
estamos usando valores positivos.
Así que vamos a volver aquí.
Frente a este tipo de bucles, tenemos lo que se llama tiempo
bucles. Por lo tanto, al igual que en Scratch, usted tenía siempre
bloques, bloques y tenías que repetir.
Del mismo modo, en C, sólo hay otras maneras
de expresarse.
Por lo que tiene esta noción de un bucle while que le permite
expresarse de manera diferente.
Y luego hay algo que se llama un bucle do-while,
que funciona ligeramente diferente también.
Y vamos a molestar estos aparte con el tiempo.
>> Pero echemos un vistazo a este último aquí.
Si entramos en -
sigue funcionando.
Es bastante infinita.
Así que déjame ir en positivo, y mostrar cómo podemos realmente
gobiernan la entrada del usuario un poco más eficaz.
Es un programa bastante corto.
Y aquí tenemos, en principal, una declaración int n.
Así que dame una variable llamada n. Ahora, yo digo literalmente
"Hacer". Y luego tengo abierto rizado
abrazadera, llave de cierre cerca.
Y después se da cuenta, después de eso, se dice que aunque n
es menor que 1.
Así que notar que estas líneas -
19 a 24 -
redactar colectivamente un bucle do-while.
Y de nuevo, la sintaxis nueva, no es una idea nueva.
Es sólo otra forma de bucle, sintácticamente.
Entonces, ¿qué hace esto?
Hacer lo siguiente mientras que n es menor que 1.
Entonces, ¿qué es lo que quiero hacer?
Exijo que me des un entero positivo.
Entonces yo realmente tratar de obtener un número entero de parte del usuario.
Pero en términos de la orden de las operaciones aquí, debido a que el
mientras condición es aquí, entonces me va a comprobar, es n
menos de 1?
Así que supongamos que el usuario -
después de ser exigido de esta manera -
tipos en el valor 0.
Esta condición va a ser verdadera o falsa?
Bueno, en realidad va a ser verdad.
Dado que n es 0, y 0 es menor que 1.
Entonces, ¿qué implica eso?
Hazlo de nuevo.
Sólo una vez que la condición se evalúa como false.
Si escribo en 42.
Pues no, 42 no es menor que 1.
Por lo tanto, este bucle se realiza ejecutando.
Y así, en ese momento, el programa va a decir, gracias por
el 42, en este caso.
Ahora que tiene esta forma de expresarse -
No debemos esperar a que esto termine.
Va a tomar algún tiempo.
Continuará la próxima vez, tal vez.
>> Pero ahora, usted tiene la capacidad de entender una suerte
poco de humor geek.
Disculpas.
Esto no es representativo de humor en la ciencia de la computación
mundo, pero es lindo.
Final [risas] Vamos en esa nota.
Y nos vemos el lunes.
[Aplausos]