[Powered by Google Translate] David Malan: Este es CS50, y este es el comienzo de la Semana 1.
Lo que nosotros pensamos que lo hacen hoy en día es echar un vistazo atrás en
algo que muchos de ustedes probablemente pasó por alguna
tiempo y puede parecer un poco familiar.
Esta cosa aquí, esto por supuesto está en el -
AUDIENCIA: Ciencia.
David Malan: Science Center.
Así que esto es realmente una de las primeras computadoras
A la vuelta de la década de 1940.
Fue uno de los equipos electromecánicos de primera
que era capaz de especialmente larga,
autosostenidas cálculos, y lo que vemos en
el centro de la ciencia es sólo una pequeña parte de esta cosa.
Lo que pensamos que sería mejor hacer entonces es tomar un vistazo a un vídeo
que se hizo hace algún tiempo, la introducción de esta
cosa en el mundo.
Y verás desde la música y la voz de que, efectivamente, los
Eran tiempos muy felices.
>> [REPRODUCCIÓN DE VÍDEO]
-Un triunfo de la habilidad matemática y la mecánica es la siguiente
gran nueva calculadora automática de la Universidad de Harvard.
Un complejo entramado de problemas en matemáticas, pasar por el
máquina en forma codificada en la cinta, se precisa resolver en un
fracción de minuto el tiempo requerido para humanos
cálculo.
Diseñado para agilizar todas las formas de matemática y científica
investigación, el cerebro mecánico gigante va a trabajar para las Naciones Unidas
Marina de los Estados hasta el final de la guerra.
>> David Malan: Así que lo que quizá no sabe es que fue en
este mismo dispositivo que un término que ahora todos tomar más o menos
por sentado fue acuñado, el de un insecto.
Así que uno de los ingenieros que trabajan en este equipo
literalmente encontró una pequeña polilla en la máquina que dio como resultado
en algunos cálculos incorrectos.
Y a medida que la historia dice que la polilla se grabó en este registro
revista aquí, de vuelta del 9 de septiembre de 1940 y tantos,
y así nació para el mundo el término "bug".
Así que a partir de ahora consideramos errores a haber ningún tipo de errores en la
programas, sean de origen humano o, en este caso, los insectos.
>> Así que algunos anuncios, a medida que avancemos.
Así CS50 tiene una tradición de ofrecer comidas de todo tipo de
mayoría de los viernes durante el semestre, donde se toma de 30 a
40 estudiantes en Fire and Ice in the Square para casual
charla, hablar de la informática,
hablar sobre el futuro.
Invitamos a ex alumnos y amigos de la industria para charlar
los estudiantes también.
Realmente hacia un extremo de hacer lo que es una clase bastante grande
aún más íntimos, al menos de vez en cuando para
subgrupos de estudiantes.
Así que si usted desea unirse a nosotros este viernes, 1:15 PM, vaya a
CS50.net/lunch para confirmar su asistencia.
Y vamos a hacerlo recurrentemente, no así te preocupes si no eres
entre los primeros 30 o menos esta semana.
>> Así que toma nota de escribano.
Una palabra sobre los recursos que ahora comenzará a ser disponible
a los estudiantes en la clase.
De modo que la cabeza no tiene que ser hacia abajo durante las clases
anotando todo lo que digo y así sucesivamente, lo que hacemos
en su lugar se ofrecen desde el personal docente le
conjunto canónico de notas.
Así que tenemos una de las investigadoras nuestra enseñanza, Andrew Sellergren,
que se sienta cada semana, revisa los videos, y luego
escribe lo que creemos que es una muy
conjunto autorizado de notas.
Y amo de Andrés, también, de poner notas al pie en snarky
la parte inferior.
Así que te esperamos disfrutar de estos como un libro de referencia para
diversión, y también, llegado Quiz Time, como una oportunidad para revisar
lo que ocurrió en conferencias individuales.
Así que estos están vinculados en la página de conferencias.
>> Conjunto de problemas 0, en tanto, está fuera.
Y en términos de los recursos disponibles para usted -
el tutorial.
Milo dirigió la primera el viernes.
Fue filmado, puesto en línea el sábado.
Y así damos cuenta, si no estás muy seguro de por dónde empezar,
para esta o futuras de p sets, siempre en primer lugar el
tutorial o el mismo vídeo.
Seccionamiento está en curso y, al cs50.net/section es donde se
deberán presentar sus preferencias, si no lo ha
ya, por hoy.
Debido a que las secciones se iniciará el próximo domingo, lunes,
y el martes.
Hacemos secciones esos tres días, todas las semanas del
semestre en su mayor parte.
Y también introducir, de nuevo, las diferentes pistas.
Entonces se le pedirá en este formulario seccionamiento, si
no lo he visto, si usted está entre los menos
cómodo, más cómodo, o en algún punto intermedio.
Y si tienes suerte de la valla, por lo general en algún lugar de
entre lo que es la mayoría de los estudiantes terminan de cheques.
Horario de comenzar esta noche.
>> Así Scratch es bastante bajo llave, a pesar de que es muy natural
para funcionar en varios fallos, o ser incierto en cuanto a cómo
implementar algo.
Así damos cuenta de que vamos a empezar las horas de oficina esta semana.
Estarán en Annenberg lunes, martes, miércoles,
Jueves, de 8:00 pm a 11:00 pm durante rotura del cerebro.
Classmen superior puede entrar, y hacer si alguna vez tiene problemas
en la puerta, porque van a birlar, habla a su manera
y explican que estás con CS50.
Típicamente de 20 a 30 de nosotros en el personal estará allí para ayudar
usted uno a uno.
>> Al llegar la idea es la siguiente: usted trae su ordenador portátil,
usted tendrá su cargador, vamos a tener los cables de corriente extra,
particularmente a lo largo de la pared sur de Annenberg donde
hay un montón de enchufes eléctricos.
Y el principal punto de entrada a horarios de oficina Q & A es ir a
cs50.net/discuss y para publicar
tus dudas.
Y para etiquetar con pset 0 o conjunto de procesadores 1, cualquiera que sea la semana
quiera se encuentren.
Y entonces lo que vamos a hacer es tener una tabla de becarios de enseñanza
y los asistentes del curso, generalmente de 8 o 10 o así de nosotros,
pasando, mantener un ojo vigilante sobre el tablero, y
arrancando preguntas realmente lo más rápido que podamos,
refiriéndose a los mensajes relacionados si usted no ha encontrado los
vosotros mismos, referencias en línea, según corresponda.
Y luego, si hay problemas, ya que, inevitablemente,
será, o simplemente tiene más sentido para sentarse uno a uno,
resolver problemas con alguien.
>> O usted acaba de entrar en horas de oficina realmente
necesidad de esa mentalidad.
Usted no quiere ir a través del formulario electrónico,
realmente quiero conocer a alguien.
Comunicar que para nosotros, y lo que sucederá es cuando su
cuestión ha sido visto por un miembro del personal, y
determinar, yup, esto debe ser enviado a una de las 20 o
30 miembros del equipo aquí localmente, podrás ver en la parte superior izquierda esta
Introduzca el pequeño botón Cola comienza a parpadear en cs50.net /
discutir.
Y esto le está diciendo que ahora han sido invitados, por lo que
para hablar, para entrar en la cola.
Y al hacer clic en ese botón, su nombre aparecerá en
un iPad que el interfaz CS50, uno de los jefes del curso, se
celebrará cerca de la entrada de Annenberg, que entonces
vemos como se muestra aquí, los estudiantes que tengan preguntas sobre
la izquierda, los miembros del personal que están presentes en la derecha.
Y con un clic izquierdo y derecho, su navegador web se
comenzará a parpadear en cuanto, por ejemplo, el profesor McGonnagal
está dispuesta a verte en una tabla en particular en Annenberg.
>> Así que hicimos algo de esto el año pasado.
Hemos reiniciado las horas de oficina y
reimplementado gran parte del software.
Así que darse cuenta de que este se caliente esta semana.
Pero también se dan cuenta también, en los últimos años, como usted puede haber oído
de los amigos, las horas de oficina en efecto tenía entre 50 y
150 estudiantes a la vez.
Y no es simplemente imposible para nosotros para manejar ese
efectivamente, uno a uno, a lo largo de la noche.
Y así lo que realmente vamos a tratar de hacer este año es
aprovechar el hecho de que una gran cantidad de preguntas están
preguntas más frecuentes y, a menudo se puede responder mejor
de forma asincrónica.
Así que se puede ordenar de pensar a través de la respuesta del funcionario,
y podemos pensar a través de su código, sin la calefacción
presión de luchar necesariamente
a través de ella al lado del otro.
Por lo tanto se estima que aproximadamente un tercio o la mitad de las preguntas
será enviado en persona, y vamos a tratar de arrancar como
muchos como un medio más o electrónicamente,
durante las horas de oficina.
Y vamos a seguir utilizando Comenta
a lo largo de la semana también.
>> Y, por último, se dan cuenta que este curso puede ser tomado pasa / no pasa.
Así que si usted está en la cerca o simplemente pensar que eres realmente
no estoy seguro si este es el mundo para ti, o esto es realmente
absolutamente ajeno a ti, darse cuenta de que esta es una manera maravillosa
de ganar hasta un poco de confianza con la que dar un paso en la
clase, como lo hice yo, francamente, hace años.
Y luego tenemos cinco semanas para ordenar la figura hacia fuera para
si usted desea permanecer pasa / falla, cambie a una carta
grado, o similar.
Y por lo general lo que pasa / falla es, creo yo, para los estudiantes es
que, si se pone en esos 10 horas, 20 horas, cualquiera que
puede estar en problemas, y que está golpeando su cabeza
contra la pared,
y que realmente no puede perseguir algo abajo, y usted
tiene muchas otras cosas que hay que hacer, de verdad, lo que yo
Creo pasa / no pasa es que se necesita el borde de
situaciones como esa.
Si usted ha tomado la cosa el 90% del camino.
Ya sabes, no es del todo perfecto.
Pero usted tiene un montón de él, sin embargo.
Así que considere pasa / no pasa como que le da ese
modelo mental, tal vez.
>> Durante toda la semana derecha, por lo último que se zambulló en Scratch, y nos
habló acerca de la programación en un nivel gráfico bastante alto.
Y hoy hacemos la transición a una lengua
llamado C, un lenguaje de programación más abajo en la parte superior de
que muchas lenguas modernas se construyen ahora, incluso algunos
de los que vamos a utilizar a finales término.
Y sintácticamente, lo que parecen
es todo muy similar.
Así que vamos a empezar a hacer esta transición aquí.
Así que este era un programa de la semana pasada que era el más simple de
hola programas mundiales.
Simplemente imprime en la pantalla hola mundo, con una
bocadillo pequeño que sale del gato.
Bueno, si empezamos ahora a traducir esto a otro
idioma, se dan cuenta de que las ideas de hoy y el miércoles
son idénticas, pero la sintaxis comienza a cambiar.
Así que, la semana pasada tuvimos, cuando hace clic en la bandera verde, por ejemplo
hola mundo.
Hoy vamos a tener int, void main, printf,
A cambio, con una sintaxis otro en allí también.
Los corchetes y paréntesis y comillas, y otras cosas.
Pero darse cuenta de que el núcleo de la idea aquí es la tecnología de impresión,
y, finalmente, el hecho de que la principal es ahora va a ser
sinónimo de la partida de un programa.
Principal va a ser donde la bandera verde patea las cosas.
>> Así que ahora vamos a separar algunos de los componentes básicos aquí
Antes de profundizar en algunos ejemplos concretos.
Así que nos llamaron esta semana una última declaración, por lo que es justo
una instrucción.
Haga esto - en este caso, por ejemplo hello world.
Bueno, en C, si miramos sólo esa línea, esta es la forma en que estamos
va a empezar a expresar esa pieza del rompecabezas particular:
printf ("hola mundo");.
Y ahora vamos a fastidiar las distingue más y más con el tiempo,
pero se dan cuenta de que hay un patrón aquí.
Por lo tanto, tenemos esta cosa llamada printf, que es
esencialmente análoga a la palabra Say.
Eso es lo que va a hacer.
Printf, yf aquí significa "formateado".
Por lo tanto, sólo significa que usted puede insertar
diversos detalles estéticos.
Así que entre comillas es el comienzo de lo que vamos
para empezar a llamar a una cadena.
Una palabra, una frase, una oración.
Una cadena en un lenguaje de programación es una secuencia de cero
o más caracteres.
Así que h-e-l-l-o, coma, y ​​es así sucesivamente,
entre comillas, una cadena.
Y ahora backslash n, un poco extraño sintácticamente, pero
ya se ha definido que la semana pasada en el sentido de que?
Es sólo una nueva línea.
Es sólo una forma de transmitir a la computadora que usted desea que el
equivalente de golpear la tecla Intro allí, pero no lo hace
quieren golpear realmente Entra y por lo tanto estropear toda la
formato de su programa actual.
Ahora los paréntesis incluyen esta cadena, paren abierto y
paren cerca y dentro de eso es nuestra cadena.
Porque eso es debido a que en C, y otros programas
lenguas, cosas como printf toman argumentos, o tomar
parámetros.
>> Así que empezar a pensar ahora de este bloque Say púrpura como un
función, como un método, como un procedimiento.
¿De verdad se puede llamar lo que quieras, por ahora, pero
es una especie de un programa en miniatura que sólo hace una
cosa, en una sola línea, ni menos.
Así que printf es también lo que vamos a empezar a llamar a un
función, y las funciones de hacer algo - en este caso
imprime una cadena con formato a la pantalla -
sino que funciona también toman argumentos o parámetros.
Y por argumentos o parámetros, gracias, queremos decir
que su comportamiento puede ser influenciado por lo que se pasa en
dentro de los paréntesis.
Así que en este caso, las necesidades de printf se les diga lo que desea imprimir, y
sólo tiene que pasar en, entre comillas aquí, la cadena que nos
realmente desea imprimir.
Y el punto y coma en el final de esta línea es sólo una
molestia histórica según la cual al final de la mayoría de las líneas de código,
se pone un punto y coma para hacer súper claro para el equipo
que esta línea de código termina aquí.
Ahora bien, esto es bueno, porque como veremos como obtener más programas
complejo, el punto y coma hará súper claras para nosotros los seres humanos,
y también el ordenador, donde las líneas de código de inicio y de fin.
Darse cuenta de que algunos lenguajes no tienen algún
de estos mismos detalles.
Y de hecho, en JavaScript, que no siempre se necesita algo
como el punto y coma.
Pero más sobre esto más por venir.
>> Así bucles.
Teníamos algo así, muy intuitiva, obviamente, hacer
algo una y otra vez y otra vez.
Como ponerse los calcetines, o decir hola, en este caso.
Pues bien, a partir de hoy en C, que podríamos expresar esta arañazos
bloquear como while (true) printf ("hola mundo").
Así que notar que estamos empezando a construir literalmente en el rompecabezas
pieza de antes.
Tenemos el mismo bloque morado, pero es dentro de este
Siempre entre corchetes bloque, y la mejor manera de traducir que
para C es como sigue.
No hay ninguna palabra clave para siempre.
No se puede escribir f-o-r-e-e-v-r en C.
Así que el análogo más cercano es tiempo.
>> Ahora bien, mientras que (verdad) parece un poco estúpido porque tiene el valor
de cambio nunca es verdad?
Presumiblemente no.
Es como decir que mientras uno, mientras que en adelante, mientras que cierto.
Todo es lo mismo, verdadero es siempre el caso.
Así que este circuito es en realidad la inducción de qué tipo de bucle?
Sólo un bucle infinito, claro.
Un bucle infinito o como lo llamó la semana pasada,
sólo un bucle infinito.
Así que a veces eso es malo.
A veces eso es un error, a veces es por eso que te dan
la pelota de playa girando o reloj de arena o similar.
Pero en este caso, de manera deliberada, para lo
razón, quería imprimir la misma cosa otra vez
y una y otra vez.
O en el caso de un reloj, que quiere hacer
algo una y otra vez y otra vez.
Así bucles infinitos podría tener sentido.
Y es así como en C que podríamos traducir por siempre con el código.
>> Así que ahora éste es un poco más específico.
Habíamos repetir 10 veces la siguiente declaración.
Así, mientras que (verdad) no acaba de funcionar allí, porque es la verdadera
siempre es cierto.
Así que si en lugar de mirar a la versión C, ahora la sintaxis obtiene una
poco más críptico.
Pero para ser honesto, una vez que empiezas a ver esto, todo se vuelve
bastante familiarizado con rapidez.
Así que esto es lo que se llama un bucle for.
Un bucle que va a decirle a la computadora que haga algo
una y otra vez y otra vez durante el tiempo que
estas cosas son verdaderas.
Ahora, ¿qué queremos decir con eso?
Bueno, hay tres partes para un bucle for, y vamos a
volver a ello en el contexto de la actual
ejemplos en un momento.
Así que no te preocupes si no acaba de hundirse en una sola vez.
Pero int i = 0 es, cuento largo, diciendo dame un
variable que es de tipo entero, así que dame un número
llamado i, y se inicializa a 0.
Eso es darme como una variable x algebraica y
inicializar a 0.
Pero en este caso lo llamamos i.
Entonces en el medio, se dice i es menor que 10.
Eso dice la computadora es el material siguiente, siempre
como i es menor que 10.
Y, obviamente, que se inicia a menos de 10, porque
que comienza en 0.
Entonces, por último, quizás puedas adivinar lo que significa + +.
Es un poco de sintaxis que sólo significa incrementar i.
Así que añadir 1 a i, una y otra vez y otra vez.
>> Y así, como veremos este bucle, esta sintaxis, más bien, pone en práctica
precisamente la misma cosa que, francamente, en Scratch era tan
mucho más fácil de expresar.
Repita 10, y ya está.
En C, y en la mayoría de los lenguajes de programación, que tiene que ser un
poco más instructivo para el equipo y en realidad
especificar algo como esto.
Pero vamos a volver a esta y otras sintaxis.
>> ¿Qué variables?
En Scratch teníamos algo así como esos bloques de color naranja,
donde podría declarar una variable.
Vamos a llamar arbitrariamente en sentido contrario.
Vamos a inicializar a 0 y, a continuación,
siempre vamos a hacer algo.
En este caso en Scratch que estoy diciendo el mostrador, por lo que el
gato va a tener un bocadillo pequeño que está hablando
el número que hay en esta variable.
Y luego tenemos contador de cambio en 1.
Así que todo esto está envuelto dentro de una cerradura Forever.
Así que ahora ya tenemos los elementos básicos en C con
que para traducir esta.
>> Una forma en que podría hacerlo es la siguiente.
Dame un número entero, lo llaman mostrador.
Inicializar a 0
en la primera línea allí.
Mientras que (verdad), así que estoy robando la idea de un momento
hace, seguir adelante y hacer lo siguiente.
Imprimir el contador, y luego incrementar el contador,
de nuevo, y de nuevo, y de nuevo.
O, de nuevo, + + sólo significa añadir 1 a algo.
Pero hay una nueva pieza de sintaxis aquí.
¿Qué está saltando como no se encuentra entre los ejemplos anteriores?
Sí,% d.
Así que tal vez puede inferir qué está haciendo esto, francamente, basado
en lo que el bloque Scratch está haciendo.
Pero, de nuevo en C, sólo tenemos que ser un poco más concreto
a la hora de expresarnos.
>> Así printf ("% d \ n").
Bueno, la mayor parte de que podemos tirar tan familiar.
Las comillas sólo significa que es una cadena, la barra invertida n
es sólo una nueva línea.
Así que lo único nuevo aquí es% d.
Y todo lo que es, es un marcador de posición.
D% va a denotar un número decimal.
Y equipo% medio d, poner un número decimal aquí.
Bueno, ¿qué número quieres puso allí?
Bueno, como usted tal vez pueda deducir, después de la coma se dice
contador, que es el nombre de una variable que se declara o
creado un par de líneas antes.
Así que esto es sólo la forma de C de conectar una variable en una
cadena dinámicamente.
Debido a que por el contrario, si yo hubiera hecho en su lugar algo así como
esto, printf ("contra"), lo que haría este
programa en lugar hacerlo, presumiblemente?
Es, literalmente, va a imprimir "contador".
Lo cual no es el efecto que quiero.
Tengo que sustituir en un valor numérico.
Así que veremos que las funciones de entonces, como printf, no puede tomar
apenas argumentos individuales, como
"Hola mundo".
Ellos pueden tomar coma cita fin de la cita y, a continuación algunas variables
que recibirá conectado a, como veremos la cadena anterior
a través de estas variables% de signos.
>> Bueno, ¿qué pasa con las expresiones booleanas?
Las expresiones booleanas son estos valores, verdadero o falso.
Sí o no.
1 o 0.
Encendido o apagado.
Así que en Scratch se ven así, y note que la
bloque de fondo aquí es en realidad la conjunción
de dos bloques más pequeños.
Así que tipo de arrastrar y soltar las piezas del rompecabezas tres
juntos para hacer que la pieza del rompecabezas que está allí para que yo
podría transmitir la idea que quiero que x sea menor que y y
y para que sea menor que z.
Y por lo que puedo traducir estas dos líneas separadas de la siguiente manera.
La de arriba puede ser muy trivial traducido a C,
con apenas x <y.
Tal vez con algunos paréntesis para una buena medida.
Y luego, en C, no se escribe y denotan la
conjunción de algo.
En su lugar, escriba &&.
Y a medida que el tiempo lo verás, un solo carácter & le sucede a
significa algo diferente.
Así && sólo denota la idea de AND.
>> Así que de nuevo, aunque esto empieza a parecer bastante complejo,
uno de los propósitos de la introducción de Scratch, además
sólo tener una especie de diversión de la rampa donde se puede hacer
algo que es muy gráfico y animación, y
compartible y similares, es también de transmitir la idea de que los
todas las ideas que empezar a bucear en la actualidad y en adelante
han sido incorporados en incluso de simple
interfaz desde el primer día.
¿Y este de aquí?
>> Así condiciones.
De modo que el bloque de arañazos en el lado izquierdo se ve allí
un poco más complejo.
Pero es sólo un poco de arrastre y
dejar caer de piezas conocidas.
Si x es menor que y, dígalo.
Porque si x es mayor que y, dígalo.
Si no, lógicamente podemos asumir que es inferir que
deben ser iguales.
Así que decir que son iguales.
Ahora en C en lo correcto, exactamente el mismo.
Y note que las llaves se va a ser un
característica de C y otros lenguajes que hacen este tipo
de encapsulación.
Al igual que el bloque es si esta cosa amarilla que es una especie de
agarrar el bloque morado dentro de ella.
Del mismo modo son estas llaves -
estas llaves -
destinado a evocar la idea misma de abrazar uno o más
líneas de código que se sangría dentro de ellos.
Así que en el lado derecho aquí, si x menor que y, printf
("X es menor que y").
Else si x es mayor que y, imprimir el mismo.
Otras ventas imprimir que son iguales.
>> Así que en resumen, no hay una correlación bastante directa o traducción
del lenguaje que hemos visto hasta ahora, incluso para algunos
de las características más sofisticadas.
Así que no podría estar usando esto para su proyecto, o tal vez no
utilizar esto para su proyecto esta semana.
Pero hemos esas cosas llamadas matrices en C. En Scratch,
se llaman listas.
Y vimos esto con el RPG Fruitcraft la semana pasada.
El pequeño azul que estaba caminando, recogiendo
cerezas y naranjas y similares.
Bueno, en Scratch, que se llevó a cabo con esta naranja
bloque que contiene palabras, en este caso, estamos literalmente
y agregó que "naranja" a un
variable llamada inventario.
Así que en C, esta sintaxis se va a poner un poco más críptico.
Y vamos a volver a la semana siguiente y hacer más
cosas interesantes en el mundo de la criptografía con él.
Pero en el fondo aquí, estas dos líneas esencialmente
se traducen en lo que estamos haciendo en un rasguño bloquear hasta allí.
Pero más sobre esto más por venir.
>> Por lo tanto, poner juntos, aquí hay un programa en C. Así que vamos a
rápidamente separar algunas de las piezas de la sintaxis aquí, pero
entonces vamos a realmente comenzar a escribir algo de código, familiarizarse
con algunas de las herramientas que va a utilizar, y ver si podemos
puede aprovechar ahora algunos de estos bloques de construcción básicos de
la semana pasada, ahora sintácticamente en C. Por lo tanto en la parte superior aquí, esta
es quizás uno de los programas más aburridos que podría
escribir en casi cualquier lenguaje de programación.
Pero es una especie de tiene un significado especial porque es la
programa canónico que cualquier científico de la computación cuando escribe
enseñar a alguien un lenguaje de programación -
un programa hello world.
>> Así que en la parte superior, vemos que esta noción de # include
y, a continuación, entre paréntesis angulares, stdio.h.
Nos vamos a volver a eso, pero lo que realmente
significa es que no es un archivo en este mundo llamado estándar
I / O, stdio punto h, y eso es sólo un archivo de texto que
alguien escribió hace años.
Y dentro de ese archivo de texto son un montón de
funciones o métodos o procedimientos, que alguien más
escribió que nosotros somos los beneficiarios de porque
Ahora puede utilizar el código de esa persona.
Las funciones que él o ella escribió.
En este caso, printf no es algo que yo escribí, es
no es algo que escribió CS50.
Es algo que alguien escribió hace años y poner en un
archivo llamado stdio.h y luego, en un aparte, poner
otra parte de la función en otro archivo.
Pero vamos a llegar allí.
>> Así que # include es sólo nuestra forma de decir, en
C, dame acceso a las funciones que otra persona escribió.
Y en este caso me importa porque quiero printf.
Ahora tenemos int main (void).
Así que esta es una de esas cosas que, francamente, que en el día 0,
más o menos he de tipo de fuera de zona, porque es sólo
No es interesante
intelectual, algunos de la sintaxis.
Pero por ahora sabemos que las funciones, también conocido como
procedimientos o métodos, generalmente producen un cierto valor.
Hacen algo.
Ellos vienen con una respuesta.
Producen salida.
Así int junto al principal es sólo nuestra forma abreviada de decir
que esta función, este procedimiento, finalmente se va
para darle de nuevo un número.
¿Y por qué esto es, vamos a volver.
Principal es el estándar mundial para el valor predeterminado por defecto
función que va a se ejecutan en un programa de C cuando
que lo ejecute.
Void sólo significa esta cosa, principal, no se hace
argumentos, en este caso.
Así que estoy siendo súper explícito.
No hay cadenas en allí, no hay comas.
Vacío significa que no hay argumentos para principal.
>> Ahora, por último, por suerte, las dos últimas líneas están familiarizados.
Dentro de las llaves tenemos un printf
y tenemos un cambio.
Y el regreso es un poco lamentable que tengamos que
lo puso allí, porque en este caso no está haciendo todo lo que
mucho de interés.
Pero en un programa de ordenador, cuando una función devuelve 0,
eso significa que todo está bien.
Nada de lo que salió mal.
Por el contrario, si una función devuelve 1, 1 o negativo, o
1.337 negativos, o algunos números al azar por el estilo, que
generalmente significa que un error ha ocurrido realmente.
Así que si usted está en su Mac o su PC, si alguna vez has visto
algún mensaje molesto porque el equipo se ha estrellado o
congelado, y hay un mensaje de error críptico,
y luego algo de código, como sistema de código
1,2,3,4, algún número,
que generalmente es un detalle innecesario decir
la mayoría de nosotros los seres humanos, pero eso es lo que alguna función o algún
programa en realidad ha vuelto, un valor distinto de cero.
Y el beneficio de esto es que 0 significa todo también, y
entonces usted esencialmente tiene un número infinito de cosas que
puede salir mal.
Es por eso que eligieron 0 para el bien y un valor distinto de cero para
malo, como pronto veremos.
>> Así que vamos a seguir adelante y escribir esto.
Así que recordar que el otro día utilicé mi Mac para abrir un
ventana de terminal, y luego abrí programa de texto, como
TextEdit, y empecé a escribir algo de código.
Bueno, eso está bien.
Sin embargo, su experiencia va a ser diferente en un Mac, o
en un equipo Solaris, un equipo con Linux, lo que sea operativo
sistema que se esté utilizando.
Y así, en el curso, lo que en lugar de usar es algo
llamado Appliance CS50.
De modo que el aparato CS50 es una pieza de software descargable
que le permite ejecutar un sistema operativo llamado Linux,
específicamente Fedora Linux, en su propio Mac o PC.
Y lo hace mediante la descarga de algo que se llama un hipervisor.
Así que todo esto se documenta en el boletín de problemas 1.
Y usted será guiado hacia lo que usted necesita para descargar.
Pero el resultado final, si tienes un Mac o un PC, es
descargar algún software libre.
A continuación, descargue el aparato CS50, y decirles que
software libre - el hipervisor -
para ejecutar el CS50 Appliance en una ventana en su computadora.
Y lo que sucede es lo siguiente.
>> He Ahora, fíjense aquí, lo que parece ser una computadora de escritorio
ambiente.
Y déjenme realmente reducir esta ventana.
Así que esta es mi Mac, con un tiempo muy limitado, y en el interior
de esta ventana pasa a ser un completamente
sistema operativo diferente.
De hecho hay este menú de inicio aquí abajo, que recuerda
Windows, que tiene un montón de sub-menús, incluyendo
un enlace al manual CS50, Dropbox, y similares.
Y lo que este entorno es un entorno estándar
que todos nosotros podemos usar, por lo que no importa cuál sea su
computadora es, lo que usted ha instalado, la versión
de Mac OS o Windows que está ejecutando, ahora todos tienen la
mismo entorno.
Y ahora, en este ambiente podemos empezar a escribir algo de código.
>> Así que voy a seguir adelante y abrir un programa llamado gedit.
Esto es comparable a notepad.exe, o
TextEdit en Mac.
Y esto es sólo un super sencillo programa de edición de texto
que tiene este aspecto a primera vista.
Ahora en la parte superior, tengo una paleta de color blanco, en la parte inferior que
tener esta ventana en negro que dice jharvard aparato @.
Y eso es porque la cuenta de usuario que previamente creado
para todo el mundo que se llama John Harvard.
Él tiene una carpeta en la que todos sus archivos se van a ir, y
aquí es donde podemos empezar a escribir algo de código.
Así que déjame ir delante aquí y acercar un poco, y estoy
vamos a hacer # include, int main (void), y
entonces yo voy a hacer printf ("hola mundo")
, Devuelve 0.
Ahora todo esto es bastante blanco y negro.
>> Déjenme seguir adelante y hacer una cosa para enseñar gedit lo que soy
haciendo en realidad.
Déjame ir a Guardar como.
Voy a elegir a la izquierda aquí jharvard.
Así que de nuevo, incluso si usted nunca ha usado Linux antes, francamente
estos días, todos ellos están delegando en esencialmente la
mismo tipo de interfaz -
Mac OS, Windows y Linux.
Así que elegí la carpeta jharvard casa.
Y voy a guardar este archivo como hello.c.
Así que en la parte superior, escribí hello.c; nombrar un C
programa con la extensión. c es
lo que es una práctica común.
Y me golpeó en Guardar.
Y ahora lo bueno es que he enseñado efectivamente gedit,
que este es un programa C.
Tenga en cuenta que mi texto en blanco y negro es ahora un código de colores, o
sintaxis resaltada, que sólo me llama la atención sobre la
diferentes partes semánticas del programa.
En la parte superior izquierda hay, ya que mis programas se vuelven más complejos, estoy
va a tener un resumen de todas las cosas que he escrito.
Así que es eso allá arriba.
Ahora permítanme hacer un zoom hacia fuera e ir a esta ventana de terminal.
>> Así que esta es quizás nuevo para muchas personas.
Si usted nunca ha usado un entorno de línea de comandos, usted nunca ha
utiliza DOS, o nunca ha usado Linux, o nunca has abierto
Mac OS ventana de terminal, hay un montón de cosas que
se podía hacer con la interfaz gráfica de usuario, tales como señalar y hacer clic, y
arrastrando y soltando, y similares, pero en general -
ciertamente en el mundo de la informática -
utilizando una línea de comandos, donde usted no tiene el puntero del ratón
en general, es suficiente con el teclado, es en realidad mucho
más poderosa que la interfaz, una vez que se aclimate a la
varios comandos.
Y que tipo de liberarse de la necesidad de apuntar y hacer clic
en todo.
Así que en gedit vamos a resolver de tener lo mejor de ambos mundos.
Podemos arrastrar y soltar texto, podemos ver
bonito y con colores.
Pero cuando llega el momento de ejecutar nuestro programa, a veces voy a
sólo tiene que utilizar esta pequeña ventana aquí.
>> Así que voy a seguir adelante y hacerlo.
En la ventana de fondo en blanco y negro, voy a seguir adelante
y escribir clang.
Y clang es el nombre de un compilador.
Es un programa que convierte el código fuente
en, por lo que, de código objeto.
0s y 1s, que vimos brevemente la semana pasada.
Recordemos que la semana pasada, nos prometieron que nos iban a
pasar de algo como esto - que necesitábamos estar
algo como esto -
y esto ciertamente no es algo que un ser humano va
para hacerlo manualmente.
Así que en vez que vamos a usar un programa, y ​​ese programa en
este caso se denomina Clang.
Y el nombre de mi programa es hello.c.
Así que para compilar hello.c de código fuente en
código objeto o 0s y 1s, debería bastar con sólo hacer
esto y pulse Enter.
>> Bueno, nada parece haber sucedido.
Pero sé que ahora, o desde la semana pasada, que el nombre predeterminado de
un programa, cuando está escrito en C, se tontamente llamado a.out.
Nombre menos interesante que podría ocurrir.
A es la primera letra del alfabeto, la salida es lo que era
emitida, pero que así sea.
Este es mi programa, y ​​ahora punto barra inclinada, como vamos a ver es,
en realidad una especie de función de seguridad, ya que
a.out es un programa que escribí.
No vino con mi computadora, es
no en Archivos de programa.
No está en la carpeta Mac OS Aplicaciones.
Tengo que ser súper explícito con el ordenador, y decir
este programa, a.out, se encuentra en la carpeta actual, la
directorio actual.
Y la manera de representar esto en un ambiente como este
es punto representa cualquier carpeta que está actualmente pulg
Y así. / A.out sólo significa correr
en la carpeta actual.
Y me quedo con este Enter, y listo, mi programa por primera vez.
>> Ahora voy a dar un paso atrás.
Esta ventana es un poco pequeña, y darse cuenta de que la parte inferior
izquierda del aparato aquí es otro icono.
Uno de ellos es Chrome, que debe ser muy familiar, sólo una web
navegador en el interior del aparato.
Y este icono en blanco y negro es sólo un
terminal de ventana más grande.
Así que si se pone un poco molesto para ordenar de tener sólo
esta pequeña porción pequeña de una ventana con la que interactúan
con programas, en su lugar puede hacer esto.
Y ahora vamos a empezar a escribir un poco pronto
para ser comandos conocidos.
ls.
Así es el comando ls para el listado.
Así que en un sistema operativo Mac o Windows, generalmente doble clic en un
carpeta y, voila, usted ve todos los archivos de varias
y carpetas.
En un entorno de línea de comandos, donde sólo se puede escribir
comandos o texto, ls es el equivalente.
Así que me muestran lo que hay en este directorio.
>> Ahora hay un montón de cosas aquí que a la vez un poco
familiar y un poco extraño.
Pero nótese que al igual que Windows y Mac OS, jharvard
tiene una carpeta del escritorio.
Así que los iconos que se encuentran en el escritorio de suceder
estar en esa carpeta.
Hay una carpeta de descargas, cosas que
Chrome podría poner allí.
Dropbox.
De modo que el aparato viene con soporte integrado para Dropbox
por lo que a lo largo del semestre, puedes sincronizar con tu Dropbox
cuenta para que todos los programas están respaldados.
Son accesibles en el otro ordenador.
Si algo le sale mal con el aparato, puede
muy fácilmente recuperarse de Dropbox.
Así que esa carpeta está ahí para eso.
Hay dos archivos que he hecho - hello.c
y a.out.
Y luego, a la derecha hay algunas otras carpetas que vamos a
llegar a al final del semestre, con web
programación.
Así que cuando lo hago. /, A.out, Enter, que ya es decir ir
en el directorio que esté en el directorio actual, y ejecutar el
programa llamado a.out ahí.
>> Muy bien, así que es agradable y bueno, pero no es todo lo que
de peso para escribir un programa llamado a.out ayudar.
Así que en realidad se puede hacer esto un poco diferente.
Así que en lugar de sólo sonido metálico en ejecución, hello.c, vamos a añadir
lo que se llama un argumento de línea de comandos.
Así que un argumento de línea de comandos, o un interruptor en este caso, es sólo
otra palabra o frase que se escribe en el indicador después de
el programa que desea ejecutar.
Así que en este caso, clang es el programa que desea ejecutar,-o
salida mediante un archivo que ya no se llama a.out.
Imprime un archivo llamado hello, y lo hacen mediante la compilación de la
última palabra en la línea, hello.c.
Así que en resumen, se trata de una mejora muy marginal, por lo que
en lugar de tener este archivo a.out estúpidamente nombrado,
Ahora puedo hacer ruido metálico-o hola, entonces hello.c, y
a continuación, pulse la tecla Enter.
Nada parece suceder, pero de nuevo muy parecido con 0 - cuando
parece que nada sucede que no significa nada malo sucedió -
así que vamos a hacer ls ahora, Aceptar, y de hecho yo ahora
tener un programa de hola.
Así que si escribo hola ahora, no se ha encontrado comando.
OK,. /.
Así que la razón.
Así pues este programa que he escrito, y no vino con
el ordenador,. / hola, Enter, significa
Ahora estoy corriendo hola.
>> Así que ahí está.
Ahora lo que finalmente va a llegar a la línea de comandos cada vez más
argumentos que nos permiten hacer más, pero sólo para los de
los cuales esto podría ser algo viejo, quiero realmente ir a un
directorio aquí y sólo le dan un teaser de lo demás que
podría ir sobre la aplicación Hello World.
Déjame entrar aquí, y voy a abrir.
Así que en realidad, voy a explicar lo que estoy haciendo, así
esto es útil.
Permítanme volver.
>> Así que he estado haciendo esto desde hace mucho tiempo.
Así notar más a la derecha, hay un par de
directorios que son extrañamente llamado source1m y source1w.
Esto es sólo convención tonto que utilizamos.
Fuente sólo significa código fuente, 1 significa que se trata de una semana, y
m significa que es lunes, y w significa que es miércoles.
Así que nada críptico allí.
Es sólo notación abreviada.
Estas cosas son las carpetas azules, también conocida como
directorios.
Yo quiero ir a esa carpeta ahora, y en un ordenador normal
Sólo puede hacer doble clic en un icono de carpeta y
hay todos mis archivos.
Sin embargo, en un entorno de línea de comandos, yo no puedo hacer
que, por lo que en su lugar, tengo que cambiar de directorio manualmente.
Así que si yo escriba cd y luego source1m, Enter, observe que
mi sistema, la cosa en blanco a la izquierda, acaba de cambiar.
Y así, en efecto, cuando se acaba de decir paréntesis y luego los
garabato poco, el símbolo de tilde, eso significaba que era
en el directorio principal John Harvard, sus Mis documentos,
sus archivos personales.
Pero ahora entre paréntesis que dice ~ / source1m.
Esto sólo significa que estoy en una carpeta llamada source1m
eso es en el directorio principal John Harvard.
Así que si ahora queremos listar los archivos en esta carpeta, fácil
pregunta, escribo sólo ls.
Y ahora veo todos los archivos que he creado previamente para hoy
conferencia, todos los cuales, o la mayor parte de los cuales, se producen
para terminar en. c.
>> Así que déjame ir adelante ahora y ejecutar gedit de un programa llamado
holloway.c, que está escrito por algún hacker azar
en Internet, que se parece un poco a esto.
Y no vamos a ir a través de éste, en cualquier
detalle, pero para aquellos más cómodo, en particular, si
usted quiere tomar una conjetura en cuanto a lo que hace el programa aquí.
Tenga la seguridad, ya que es menos o más cómoda,
no estamos siquiera llegar a este tipo de cosas antes de finales de
este semestre.
Esto es lo que es un ejemplo de un concurso ofuscado C, que
significa escribir el programa más críptico buscando posiblemente
puede superar a otras personas inteligentes, que son igualmente
tratando de escribir las cosas y mostrar que pueden escribir
las cosas más secretas que tú.
Así que esto no es un ejemplo de un programa bien escrito de la
punto de vista de estilo, este es un ejemplo de un programa que
gana un concurso, para la gente tratando de
ser vago y abstracto.
>> Así que si corremos esto, déjame entrar en mi ventana de terminal,
por así decirlo.
Así que este medio ambiente en blanco y negro se denomina
ventana de terminal en general.
Déjame ir por delante y compilarlo.
Yo no voy a usar sonido metálico, ya que este programa es un
poco críptico y necesita una diferente
compilador, uno llamado GCC.
Pero hace lo mismo.
Se necesita código fuente a código objeto.
Y ahora si me quedo a.out, ese programa que
acabo de ver hace esto.
Así que ese año ganó compañero ese concurso.
De todos modos, no vamos en esa dirección, per se.
>> Así que en realidad tratan de burlarse de ahora, aparte lo que podemos hacer
con estos bloques de construcción básicos para hacer más y más
programas interesantes.
Para ello hemos escrito un programa, hemos ejecutar un programa.
Ahora realmente podemos simplificar y ya no tienen que escribir
el sonido metálico palabra en el indicador.
Resulta que nuestros programas se hacen más críptico, podemos, o
más complejo y no, en realidad podemos ejecutar este comando.
Así que permítanme volver a mi directorio personal, por decirlo así, permítanme
quitar - rm es el comando remove - Voy a quitar
el archivo llamado a.out y un saludo.
Y ahora noten en un entorno de línea de comandos, al igual que en
una interfaz gráfica de usuario, se obtiene se le solicite. No puede hacer clic en un botón, aunque, yo
tiene que escribir y para sí, y para sí.
Y ahora si me escriba ls de nuevo, observe que los verdes
- programas a.out y hola -
se han ido.
Tenga cuidado con rm.
Se pueden hacer cosas malas, al igual que usted puede arrastrar
cosas a la basura.
>> Así que ahora vamos a seguir adelante - y no pude hacer esto - sonido metálico-o
hola, hola -
Ya estoy aburrido escribir ese comando.
A pesar de que ha escrito un poco rápido.
Así que en su lugar puede hacer hacer hello.
Así que no es un compilador.
Es sólo un programa amigable que viene con Linux, en este
caso - el sistema operativo -
que automatiza el proceso de compilación de programas.
Así que en lugar de recordar clang-o nombre de archivo y
entonces así sucesivamente, especialmente una vez que esas líneas se hacen más largos y
más tiempo, puedo escribir hacer.
Y esto va a escupir un montón de cosas que
que finalmente va a ver este semestre.
Pero note ahora si ls tipo, hola está de vuelta en mi directorio.
Y de hecho lo puedo ejecutar con. / Hello.
Así que simplemente automatiza el proceso de ejecución de lo que fue,
en este caso, una mucho más larga, más complejo de comandos.
Así que vamos a empezar a utilizar la marca, sólo porque es mucho
más fácil de usar.
>> Pero ahora vamos a hacer un programa más interesante
que acaba de decir hola.
Así que en los programas que hemos escrito hasta ahora no hay principal.
Eso es justo lo que se inicia por defecto todo lo que fuera.
Pero hay funciones que hay por ahí también, y
stdio.h es lo que vimos en la parte superior de nuestra
archivos, y eso es lo que se conoce como la biblioteca estándar.
En el interior de la biblioteca estándar es un montón de funciones
que alguien más escribió, y podemos empezar a utilizar estos
funciones para escribir más
programas interesantes para nosotros mismos.
>> Así que permítanme volver al equipo.
Voy a cerrar esta ventana de terminal.
Voy a cerrar las cosas que escribimos antes, y sólo ir
en hello.c, y note que ahora puedo hacer lo siguiente.
Hola mundo no es tan interesante, me gustaría
personalizar este programa para mí.
Así que en vez de decir el mundo, voy a
seguir adelante y decir -
Yo podría escribir David - pero esto realmente es una especie de
fundamentalmente los mismos.
Pero vamos a probar esta idea marcador de posición.
Recordemos que en C, en lugar de printf, hemos tenido estos
marcadores de posición, y hay más de% d justa.
Así fue% d, comprobación de validez rápido.
Bueno, el número decimal, eso es todo.
Dígitos decimales, eso es todo.
Así que c%, ya que se encontrará, va a ser un personaje.
Ponga un personaje aquí, una carta de la aa la z,
o puntuacion símbolo.
Un personaje único,% f, alguien sabe de otros idiomas?
Así un valor de punto flotante.
Un número real.
Así que no es un número decimal - esto es realmente un número real con
un punto decimal y un número de dígitos a la izquierda
y derecho de la misma.
% S, String.
Aquel que vamos a ver muy a menudo.
Una cadena, de nuevo, es sólo una palabra, una frase, una secuencia de
caracteres individuales.
Y, por último, LLD?
Así que esto es más bien un caso de la esquina.
Largo, largo decimal.
Así que si no quieren sólo un número que es tan grande, que
quiere un número más grande, vas a tener que especificar a
el equipo que es de un tamaño particular.
>> Así que vamos a ajustar esto un poco.
En lugar de codificar en David, déjame un poco
dinámicamente dicen% s.
Así que ponte% s aquí, que es un marcador de posición para una cadena.
Entonces déjame hacer coma, y ​​luego "David" por aquí.
Ahora bien, esto no es todo lo que intelectualmente interesante,
porque todo lo que he hecho ahora es realmente crear más trabajo para
el ordenador.
En lugar de decirle a la computadora qué todo esto a la vez, estoy ahora
diciendo esto y insertar una cadena de aquí al final, coma,
aquí es la cadena.
Así que esto no es una mejora mejor, pero es por lo menos
un paso hacia un programa más interesante.
Porque ahora, déjame seguir adelante y hacer un poco esta ventana
más grande, déjame seguir adelante y ejecutar make hello.
Y ahora,. / A.out no funciona, ¿por qué?
Muy bien, ahora se llama hello.
Así que de nuevo hacen, y también con un sonido metálico o-, cambió el nombre del
programa que haber algo más interesante.
Y voilá: ahora dice hola David.
>> Muy bien, sigue siendo un programa estúpido.
Así que ahora vamos a volver aquí en realidad e introducir la noción
de una variable.
¿No sería bueno si pudiera declarar una variable
cuyo tipo es una cadena?
Y el valor de la variable en realidad proviene del usuario
él o ella.
Por lo tanto arbitrariamente, voy a llamar a mi variable s, que es
sólo una convención común cuando se tiene una variable llamada
la cadena.
Voy a hacer signo igual, y luego voy a llamar a un
función llamada GetString.
Así GetString no es algo que viene incorporado en C. Es
una función que el personal CS50 escribió, en realidad sólo para
estas dos primeras semanas, para simplificar el proceso de
recibiendo la entrada del usuario y la obtención de la entrada del usuario en el formulario
de cadenas o números, y tal.
Así es como GetString printf, pero, obviamente, en lugar de
imprimir que va a hacer lo que dice su nombre, obtener una cadena.
Pero para usar GetString, vamos a tener que hacer un cambio
aquí, más allá de esto.
Así intuitiva, este programa, con suerte, de alguna manera va a
obtener una cadena del usuario y, a continuación, ¿qué va a hacer
con esa cadena, llamada s?
Es sólo va a imprimir, ¿verdad?
Todavía no es un programa estimulante porque todo lo que está pasando
que hacer es conectar ese valor en donde% s
dice que debería ir.
>> Así que vamos a por lo menos ver esto en acción.
Déjame guardar y alejar la imagen.
Ahora, en mi ventana de terminal aquí, la pequeña porción de uno,
permítanme volver a hacer hacer hello.
Muy bien, y ah, caray, yo tengo un montón de errores.
Permítanme desplazarse hacia arriba, y vemos nuestra primera -
así que vamos a hacerlo realidad en una ventana aún mayor por lo que
puede ver lo mal que metí la pata -
así que hola.
Bueno, eso es un desastre, ¿no?
He escrito tres líneas de código, y
que me ha dado 12 errores.
¿Por qué es esto?
Entonces, afortunadamente, muchas veces cuando usted ve muchos errores, muchos
escupiendo a la vez, no deja de ser porque se ha
confundió el ordenador hasta aquí.
Y sigue siendo confuso para el momento en que llegue hasta aquí.
Y por lo que sólo se inicia el disparo, y tropezando, y
escupiendo más cosas de miedo que se aplica realmente.
Así que en general, siempre comienzan con el superior.
>> Así que el ejemplo más parte superior de color rojo, el
mensaje de error es este.
El uso de cadena de identificador no declarado, lo que
significar estándar en?
No lo hice.
I significa cadena, pero esto es debido a que, también, la cadena de palabras
que sigo usando verbalmente en realidad
no existe en C tampoco.
Es algo que vamos a utilizar sólo para la primera semana o dos
aquí, pero existe en un archivo llamado cs50.h.
Así que por ahora, sepan que existe esta otra biblioteca que el
personal escribió, por lo que se ha escrito más recientemente que
stdio.h.
Pero dentro de cs50.h es una definición, un sinónimo de
tipo, que crea esta cadena de palabras.
>> Así que ahora quiero volver a mi ventana de terminal.
Voy a aclarar todo este lío con Ctrl-L. Vamos a
Limpie todo limpio, y yo voy a seguir adelante y hacer
hola de nuevo, Aceptar.
¿Qué ha ocurrido ahora?
Ahora todos esos errores fue.
Entonces, ¿qué he hecho realmente?
Acabo enseñó el equipo que existe este tipo, y es que
en ese archivo llamado cs50.h.
Así que deje de quejarse, porque ahora usted sabe dónde encontrar
declaración de tal función por así decirlo.
Cuando existe en el mundo.
>> Así que ahora voy a seguir adelante y ejecutar hola.
Parece que tengo un bucle infinito, no pasa nada.
Así que tengo que escribir algo aquí, claro.
La primera línea de código en mi programa fue getString.
Así que, literalmente, me espera para obtener una cadena.
Así que en ese sentido sí, es un bucle infinito.
Al parecer, en GetString es el comportamiento por defecto que
escribió - el personal -
sólo dice que esperar y esperar y esperar y esperar y esperar,
hasta que el usuario le da una cadena escribiendo algo pulg
Así que déjame ir delante y escriba D-a-v - i-d, Intro.
Y ahí está, hola David.
>> Ahora bien, ¿Te parece que es sólo una actuación?
Déjenme seguir adelante y escribir Tommy.
Ingrese, bien, parece estar funcionando.
Obras para Rob, obras para Zamyla, trabaja para - bien.
Así que va a trabajar, lo más probable.
Por lo tanto, debe imprimir cualquier cosa que realmente le dan,
y que puede ser un poco difícil aquí.
Vamos a ver si podemos hacer algo como hola.
Se puede ir por aquí, vamos a ver, copiar, pegar.
Yo no voy a ser capaz de pegar que muchas veces aquí.
Pegar, bien, Shift + Ctrl + V. Entonces, ¿qué podría
suceder eso es malo aquí?
>> Bien, entonces, segfaults.
Así que algunos de ustedes con antecedentes anteriores sabrán que
en general, dando un montón de ordenadores entradas cuando estén
Probablemente no pretende recibir nombres largos como este - malas
las cosas sucedan.
De hecho, en el mundo de la web, también, esto sucede bastante,
por lo que cuando usted está diseñando un sitio web, cuando estás
diseño de Facebook, usted tiene que tomar decisiones arbitrarias hasta
frente, al igual que el tiempo que se trata de alguien
Facebook nombre de usuario será?
¿O cuánto tiempo va a nombre de alguien ser?
¿Cuánto tiempo durará el número de teléfono de alguien ser y similares.
Y si los programadores hacer suposiciones incorrectas, los programas de romper
porque intenta darles una mayor producción, más entrada
más bien, que tienen memoria.
O RAM asignada para ello, por lo que si ahora pulsa Intro,
que el programa de trabajo efectivo, ya que estábamos en la biblioteca
y que en realidad prevé este caso particular.
Pero, sin duda, en este semestre, va a escribir por lo menos un
programa que se dirán estas palabras.
Recordar esta semana a partir de ahora, tal vez dentro de dos días.
Fallo de segmentación es una mala cosa.
Se hará referencia a su haciendo algo que la computadora
no anticipar.
Y en ese caso, usted, el programador, no anticipó.
Al igual que este montón de calcetines, había varios
casos extremos podríamos haber encontrado.
Asimismo, en los programas si no anticipar cuánto tiempo puede
el nombre de alguien va a ser.
¿Y si tengo un usuario malicioso, y es su nombre
realidad es bastante corto, pero se están tratando
meterse conmigo?
¿Qué va a ser el comportamiento de mi programa?
Bueno, en ese caso, algo que en realidad se puede bloquear.
>> Así que vamos a hacer esto.
En 90 minutos, se trata de un largo tiempo horrible
para hacer la informática.
¿Por qué no nos metemos en el hábito de tomar cinco minutos
romper aquí, y cuando regresemos, vamos a bucear en algunos
programas más complejos y apremiantes?
A cinco minutos.
>> Está bien.
Así que un rápido comentario.
Me han dicho que aunque esto fue en la pantalla antes, lo que
salió de mi boca fue cs50.net/rsvp.
Esto es correcto. cs50.net/lunch.
Así que ahora usted puede intentar RSVPing para esta en / almuerzo.
Pero vamos a hacer esto ahora.
Así que esto ha sido muy rápida, súper nuevo para mucha gente.
Sombrero viejo para algunas personas.
Así que vamos a retroceder por un momento, y ver cómo hemos llegado a
esta salida hola mundo hace un momento.
>> Así que primero, hay un aparato CS50.
Una vez más, una pieza de software, el problema de establecer una va a contar
cómo descargarlo, donde descargarlo, lo que debe hacer clic
y así sucesivamente.
Y luego una vez que seguir esas instrucciones, usted será capaz de
para maximizar la ventana, y tu Mac o PC se verá un
poco algo como esto.
Un fondo negro, una carpeta de inicio en la parte superior donde todos
los archivos de ir, un bote de basura en la parte superior izquierda,
un menú en la parte inferior.
Así que de nuevo, bastante similares en espíritu a Mac OS o Windows,
a pesar de que pasa a ser Linux.
Entonces, ¿qué podemos hacer al lado?
Bueno, empezamos a escribir programas.
Y recordar que la semana pasada que todo lo que se necesita para escribir un
programa es un editor de texto simple,
como el Bloc de notas o TextEdit.
Francamente, usted puede incluso utilizar Microsoft Word.
Pero las cosas malas con el tiempo va a pasar, porque eso es una muy
mano dura solución para escribir un programa, más se lo
guardarlo en el formato de archivo incorrecto.
Pero es sólo un editor de texto, un procesador de textos, es todo lo que
necesario para escribir un programa.
>> Así que en el aparato CS50, podemos hacerlo de una manera sencilla.
Acabamos de hacer clic en este icono en la parte inferior izquierda.
Y de nuevo, el problema de establecer una le informará de ello y voila -
recibe este interfaz en blanco y negro en el que podemos empezar a
escribir código.
Así que vamos a empezar a escribir un programa simple súper nuevo.
Voy a subir a Archivo, Guardar, y yo voy a llamar
esta, digamos, hello2.c.
Y yo sólo lo estoy diciendo, haga clic en jharvard, lo puso
en su directorio personal, realmente no me importa
donde éste va.
Y luego en Guardar.
Y ahora puedo empezar a escribir mi programa.
Y recuerdo de antes de que tengo que escribir int
main (void).
Zoom en la parte superior izquierda.
Y luego quiero decir printf, toma dos.
Y ahora una cita nueva línea, cerrar, cerrar
paréntesis, punto y coma.
Y luego voy aquí a mi ventana de terminal que es
incrustado en gedit, sólo por conveniencia.
Y voy a seguir adelante y hacer escribir hola, pero no
hola solo, hello2.
>> Así que mi archivo se llama hello2.c. Mi archivo por lo tanto
debe ser llamado hello2, en este caso.
Maldita sea, ¿qué hice mal?
Muy bien, así que claramente se omite una línea, si usted recuerda lo que
programas anteriores parecen.
Pero vamos a ver si no podemos molestar a este aparte.
Desafortunadamente, la mayoría de las personas que escriben los programas con los que
escribimos programas no simplificar las cosas del todo bien.
Así que tenemos que tipo de deslizarse sobre lo que no acaba de hacer
sentir aquí y ver si podemos averiguar lo que está mal.
La primera línea se dice implícitamente declara C
biblioteca printf con int tipo de función.
OK, entendí parte de eso.
Pero parece estar aludiendo al hecho de que he usado printf
mal, de alguna manera.
¿Y qué sentido tiene de malo?
Yo sólo no enseñó el equipo que se encuentra en un archivo
llamado stdio.h.
Ahora sólo tengo que memorizar un momento que printf es
en stdio.h, y de hecho habrá otro
funciones en ese mismo archivo que vamos a acostumbrarnos.
>> Así que ahora vamos a seguir adelante y presiona Ctrl-L para borrar sólo que
de distancia, vuelva a hacer hello2, y listo.
Y este comando de nuevo, más complejo de lo que vamos a explicar por
actuales propósitos.
Sin embargo, se ha ejecutado clang, clang y toma el código fuente y
escupe 0s y 1s.
Y los 0s y 1s en este caso se llaman qué?
Bien, código objeto.
Y el archivo que está en llama, así,
hello2, en este caso.
Debido a que mi archivo de texto fue hello2.c, Enter.
Y ahora he tomar dos signos de exclamación, signo de exclamación
punto, signo de exclamación.
Muy bien, así que ahora tenemos la capacidad de obtener cadenas,
al parecer.
Bueno, ¿qué más podemos obtener de los usuarios?
>> Bueno, en la biblioteca CS50, hay otras funciones que
Vamos a simplificar nuestras vidas en estos primeros días.
GetChar, GetDouble GetFloat, getInt,
GetLongLong, GetString.
Bueno, vamos a arrancar la más fácil de estos primeros.
GetString literalmente hace eso.
Simplemente se sienta allí, esperando a que el usuario escriba algo,
y tan pronto como me escriba algo y pulsa Intro, se
hace algo con ese valor.
Así que vamos a volver a ese ejemplo para ver exactamente lo que
GetString estaba haciendo.
Déjenme seguir adelante y abrir en gedit, hello.c, y recordar
que justo antes del descanso, aquí es donde lo dejamos.
>> Así que ahora se burlan de esta separación, en un poco más de detalle.
Así que en la línea 6, hay dos cosas
sucediendo en el momento.
El signo igual es separar la primera mitad y la segunda mitad.
Así que en el lado izquierdo del signo igual, estamos
diciendo cadena s.
Y entonces, justo términos sencillos, ¿cuál es la cadena s
haciendo, qué te parece?
Se trata de crear un qué?
Así que es la creación de una cadena llamada s.
Ahora, ¿qué significa eso realmente?
Bueno, se reserva espacio para una cadena llamada s.
Eso no es del todo correcto.
¿Qué hace esto?
Computadoras Bueno, como ustedes saben, tienen unidades de disco duro, que es donde
sus archivos se almacenan.
Las computadoras tienen memoria RAM, y ahí es donde los programas se cargan
mientras se están ejecutando.
Así que cuando se hace doble clic en un icono de Microsoft Word y abre
arriba, Microsoft Word se está ejecutando, por así decirlo, en la memoria RAM, que es
la parte electrónica de su equipo.
No es la parte física, mecánica que está girando, donde
los datos se almacenan generalmente a largo plazo.
Así que la cadena s es más o menos decía la computadora me da
RAM suficiente para adaptarse a una cadena.
Eso sí que es un poco de una simplificación excesiva, ya que
¿Cuán grande es la cadena va a ser?
Bueno, en realidad no lo sé todavía, por lo que en las próximas semanas
que en realidad va a retirar la capa que es una cadena y
que voy a decir lo que realmente es.
String, por ahora, es sólo una simplificación bonito de nuestro mundo.
Pero la cadena s declara una cadena llamada s, por ahora.
Declara una cadena.
Se reserva un poco de espacio en la memoria RAM de la cadena que el usuario es
a punto de escribir.
>> Ahora echemos un vistazo a la derecha del signo igual.
Así lo dice GetString ().
Y un poco de cordura comprobar.
El hecho de que no hay nada dentro de los paréntesis
implica que aproximadamente GetString?
Esto no tiene argumentos.
Es decir, no se puede influir en su comportamiento de ninguna manera.
Cada vez que lo utilice, obtendrá una cadena y eso es todo.
Por el contrario, printf, esperemos que su comportamiento hace
cambiar todo el tiempo.
De lo contrario, se trata de una función de impresión bastante inútil si
hace lo mismo.
Si siempre imprime David o algo
arbitraria todo el tiempo.
Así printf tiene sentido tener un argumento.
GetString realmente no necesita un argumento, porque quería
para obtener una cadena del usuario y es el usuario quien va
para abastecer el dinamismo escribiendo con letras diferentes
cada vez en el teclado.
>> Entonces, ¿qué GetString es en última instancia?
Piense en ello como este cuadro negro.
Y este recuadro negro no tiene entrada, pero cuando justo en
pronunciación, escupe una cadena que el usuario ha escrito pulg
Y el hecho de que hay un signo igual no significa tomar
lo que se escupen a la derecha y guárdelo dentro
lo que está en la izquierda.
Así signo igual aquí, que en realidad no significa
igualdad, más bien técnicamente significa asignación.
Toma el valor de la derecha, y la puso en el
variable de la izquierda.
Así que eso es todo lo que está pasando allí.
>> Ahora bien, en la línea 7, que llamamos printf.
Así que espero que printf es cada vez un poco aburrido por ahora.
Así que imprimir una cadena con formato.
¿Qué cadena?
Imprima, "h-e-l-l-o,% s
\ N ".
Muy bien, ¿y qué es lo que quiero plug-in para% s?
Literalmente, todo lo que se almacena en s.
Así que en este caso, compruebe la poca cordura, ¿cuántos argumentos tiene
printf tomar?
Bueno, he oído uno.
Oí una vez.
Dos, oí dos.
¿Y qué hay tres?
Bueno, tres?
Excelente.
Tres respuestas posibles, sólo una de ellas es correcta.
Así argumentos de nuevo influir en el comportamiento de una función.
En el pasado, tenía printf sólo tienen un argumento.
"Hola mundo" era un solo argumento.
Sin embargo, ahora, note que esto es una coma.
Esta coma está fuera del presupuesto / fin de la cita, lo que significa
printf hey, aquí viene un segundo argumento.
>> Así que comas en la mayoría de lenguajes de programación
separados múltiples argumentos.
Así que la respuesta es definitivamente no es uno, porque
existe esta coma.
Así mínimamente, printf es aparentemente tomando dos
argumentos en esta ocasión.
Pero la oportunidad de una pregunta con truco aquí es lo que
sobre esta coma?
¿Significa esto que no hay realmente tres argumentos?
Esto, esto y esto.
Así que no, porque esa coma está dentro de las comillas, que
significa que es en realidad sólo una estética de Inglés.
No tiene nada que ver con el número de
argumentos a este programa.
Así que esta es una coma fuera de las comillas dobles.
Y entonces devuelve 0.
Por ahora vamos a tomar este tipo de uno en la fe para
hoy en día, y sólo sé que cuando las funciones se llevan a cabo la ejecución de
líneas de código, por lo general, debe devolver algún valor.
En este caso, el hecho principal debe devolver un int,
eso es sólo la forma en que el lenguaje C funciona.
>> Entonces, porque nada salió mal, se siente como este programa de
bien, sólo a cambio de codificación fija 0.
Pero en contraste, y yo voy a escribir esto en pseudo código
Ahora, al igual que lo hizo José cuando hicimos el calcetín
ejemplo la semana pasada.
Si algo salió mal - no es código real - fue
mal, y luego volver, digamos, 1.
Else return 0.
Así que aquí es donde vamos con esto.
Esto no es real código C, sólo pseudocódigo.
Pero así es como se podría volver
diferentes valores posibles.
Pero por ahora sólo voy a seguir adelante y devolver 0.
Muy bien, cualquier pregunta hasta el momento sobre la sintaxis, la funcionalidad,
o similares?
Sí, en la parte trasera.
>> AUDIENCIA: [inaudible]
David Malan: ¿Puedes hablar un poco más alto?
¿Por qué este programa de retorno 0, y?
AUDIENCIA: [inaudible]
David Malan: Oh, eso es porque tengo pereza, lo siento.
No hay respuesta académica bien, devuelve 0.
Puedo salvar esta especie de, al decir técnicamente C, si principal
no explícitamente devuelve un valor, se devolverá 0
automáticamente para usted.
Lo cual es cierto, yo no estoy encubriendo.
Pero, yo debería haberlo hecho de esta manera.
No llevar interesante que eso no sea mi error.
¿Sí?
>> AUDIENCIA: Por lo general, cuando se escribe en el vacío, que significa
No devuelva algo.
David Malan: Correcto.
Si por el contrario, se debe especificar antes del nombre de una función, por
ejemplo aquí, el vacío, la función
no devuelve nada.
Y por lo tanto yo diría, la devolución o nada en absoluto,
y que sería coherente.
Y vamos a volver a eso.
Y sólo para tu información, una de las capturas con el aprendizaje
programación en un mundo que cuenta con cientos de libros y
centenares de sitios web por ahí es que invariablemente se
ver sintaxis diferente en diferentes libros
por diferentes personas.
Darse cuenta de que haremos nuestro mejor esfuerzo en las secciones y conferencias para ser
consistente.
Pero a veces usted verá sintaxis conflicto.
Así que cada vez tiene dudas, pregunte.
Y en general, nosotros nos encargaremos de conferencias y secciones a
casi siempre se presentan en el camino correcto.
Y digo casi siempre, porque ejemplo de ello.
Otras preguntas?
>> AUDIENCIA: ¿Tiene% s existe fuera del aparato?
David Malan: ¿Tiene% s existe fuera del aparato?
Sí.
Así que% s tiene que ver con C. El hecho de que se esté utilizando,
fundamentalmente el aparato no tiene nada que ver con la
características del lenguaje que estamos utilizando.
De hecho, la semana pasada, cuando se utilizó mi Mac, me escribió
C código en mi mac.
Podría haber usado% s en mi Mac, y se podía utilizar en
el ordenador con Windows si instala un compilador, como
Visual Studio de Microsoft.
Así que% s.
Todo lo que estamos haciendo dentro de esta ventana hoy tiene que
nada que ver con C. Y fundamentalmente que ver con la
sistema operativo en cuestión.
Por el contrario, el terminal blanco y negro ventana - cuando
Estoy escribiendo cosas como ls y cd rm, y -
que tiene que ver con el sistema operativo y
navegar alrededor.
Si.
AUDIENCIA: Me refería a la biblioteca, la biblioteca CS50.
David Malan: Está bien, así que si te refieres a la cadena de palabras clave, que
sólo existe en la biblioteca CS50, correcto.
Que no existe en sí misma C, y de hecho en un par
de semanas vamos a tirar la biblioteca CS50 y empezar
hacer las cosas de la nada a nosotros mismos, por así decirlo.
Otras preguntas?
Si.
>> AUDIENCIA: [inaudible]
David Malan: Buena pregunta.
Es el caso de los comandos sensible?
Y permítanme hacer una distinción.
Así que los comandos son generalmente las cosas que voy a escribir en el
parte inferior de la ventana, en la ventana de terminal.
Todo lo hasta aquí sería las declaraciones o códigos C.
Pero en ambos casos, la respuesta es la misma, sí.
Ambos de estos entornos, el código C en la parte superior y el
sistema operativo de línea de comandos en el
inferior, se distingue entre mayúsculas y minúsculas.
Por lo que debe capitalizar GetString con un capital G,
capital de S. Debe escribir printf en minúsculas.
Debe escribir ls en minúsculas.
Así, en casi todas las situaciones de este semestre, el caso será, en
hecho, la materia.
Sí.
>> AUDIENCIA: [inaudible]
David Malan: Ah, entonces está bien, ¿qué pasaría si tuviéramos un archivo
llamado hello.d.
Así que resulta que D es un lenguaje de programación.
Y así, en algunos casos, en realidad podríamos escribir un programa en
ese archivo y lo han compilado de esa manera.
Podemos, y en realidad, la respuesta corta es, no lo sé.
Así que vamos a hacer esto.
Déjame ir adelante y crear un nuevo archivo.
Y la vuelta aquí, de verdad, en general, es cuando cualquier duda
este semestre, y que tenga su aparato o equipo
abrir, seguir adelante e intentar algo.
Así que voy a guardar un archivo llamado hello.d.
Guardar este.
Y voy a hacer correr hola Intro.
Parecía inferir que c es más probable
que d, en este caso.
Otras cuestiones.
Si.
>> AUDIENCIA: [inaudible]
David Malan: Bueno, decir que una vez más.
AUDIENCIA: [inaudible]
David Malan: ¿Cómo haría usted para diagnosticar o que
solución de problemas que?
Así que lo más probable, porque son lenguas diferentes,
más probable que se obtendría un completo
programa diferente emitida.
Usted recibirá los mensajes de error totalmente diferentes.
Y también sólo en términos de diseño, sin duda sería un
decisión de diseño pobre a escribir dos diferentes
idiomas con archivos casi el mismo nombre, en
el directorio de exactamente la misma, utilizando un
herramienta automática como hacerlo.
Así que también puede empujar hacia atrás y decir en 15 años de hacer esto,
nunca cometí ese error.
Podría suceder.
Pero no sólo diferentes, creo,
defensas logísticas existentes.
Además, los mensajes de error que se derivarían, que haría
finalmente revelar cuál es el problema.
Sin embargo, un caso extremo posible.
>> Muy bien, así que vamos a introducir un par de otras
características aquí ahora, para que podamos empezar a construir en más
y más complejo programa.
Así que primero de todo, las matemáticas.
Así Ejemplos de matemáticas son sólo un poco fácil en la primera semana.
Esto no quiere decir que toda la programación es de aproximadamente
las matemáticas.
Ciertamente, la comprensión de las diversas características de
matemáticas, álgebra en particular, es
muy relevante aquí.
En las clases de nivel superior CS, álgebra lineal,
cálculo, y similares.
Pero se dan cuenta de la mayor parte de lo que vamos a hacer en este semestre no se reduce
a las matemáticas, y ciertamente no a la aritmética, per se, pero realmente
a poco la lógica y el pensamiento cuidadoso.
Y así, este vínculo que la informática ha tenido durante mucho tiempo,
especialmente a nivel de la escuela secundaria, con las matemáticas, es una
poco engañoso.
Dado que la mayoría de los programas que vamos a escribir, en realidad, son
especie de mayor nivel y se centran en la solución de problemas que,
Seguro, podría utilizar un poco de sumas, restas, y varios
fórmulas matemáticas o similares,
pero al fin y al cabo, se trata de pensar y no
sólo la aplicación de lo que podría haber hecho en TI como un
calculadora en la escuela secundaria.
>> Así que dicho esto, ahora vamos a hacer algo con estos
operadores matemáticos que existen para que podamos viaje
sobre algunos de los aspectos subyacentes de la programación, o en
este caso C. Así que ahí están, como la biblioteca CS50 sugerido,
y hoy sólo estamos utilizando GetString - y en un momento
tal vez otra función -
pero hay diferentes tipos de datos en un ordenador.
Al final del día, las computadoras sólo saben 0s y 1s.
Pero recordemos que la semana pasada hablamos sobre el sistema binario
en la representación de los números, como el número 0 y 1, y 2,
todo el camino en un máximo de 8, como en el vídeo de Nate.
Y entonces podemos contar mucho mayor, ya que
hizo en el escenario aquí.
Pero si usted quiere representar no sólo números sino letras,
nosotros, los humanos, tenemos que llegar a algún arbitrario
convenciones, por lo que si al final del día, todo mi equipo
tiene es la capacidad de expresar 0s y 1s, así que será mejor que
empezar a normalizar los patrones de 0s y 1s que representan
cosas diferentes.
Un patrón de 0 y 1 que representa la letra a.
Los patrones de 0s y 1s que representan la letra z.
Los patrones de 0s y 1s, que representan el color azul, o
rojo, o similares.
Tenemos que utilizar todos estos 0s y 1s para expresarnos en
contextos diferentes, de diferentes maneras que no son
necesariamente numéricas.
>> Así que en términos de representación, C cuenta con diferentes tipos de datos,
y hemos visto a uno de ellos hasta ahora.
Vimos int y observe lo que no está en la pantalla
en estos momentos es una cadena.
La cadena no, de hecho, existen en C. De nuevo, es una
simplificación que presentamos para la primera
par de semanas.
Un char es un carácter individual.
Un flotador es un número real, con un punto decimal y los números a
la izquierda y la derecha de la misma.
Un doble es lo que, para los que tienen antecedentes de vuelta antes?
Así, un doble es dos veces algo.
Añade el doble de mucha precisión.
Entonces, ¿qué significa esto?
Así, en cada uno de estos casos, el mundo tiene una especie de estándar
cuántos bits se utilizan para representar
cada una de estas cosas.
Así que si usted ha mirado vídeo ASCII Nate ya por parte
del conjunto de procesadores 0 o más tarde esta semana usted, probablemente sabrá por
que ASCII -
representaciones de caracteres -
utilizar la cantidad de bits?
E incluso se puede recordar de nuestra demostración de cómo la semana pasada
muchas personas estaban en el escenario.
Así 7 o 8, típicamente.
Así que en general, 8, y hay algo que se llama prorrogado
ASCII que utiliza todos los 8 bits, en lugar de 7.
Pero, en general, se habla en potencias de 2, así que en este caso, 8.
Así que un char en un lenguaje de programación suele ser de 8 bits.
Así que un int es generalmente de 32 bits.
Un flotador es generalmente 32 bits.
Un doble es generalmente de 64 bits.
¿Y qué significa eso?
Esto significa que puede representar grandes números, o en el caso
de los números reales, puede tener un número mucho más después de la
decimal.
Precisión mucho más, en ese caso.
Ahora un largo tiempo es desafortunadamente nombre.
Así que hay un int que es de 32 bits.
Hay una larga que es, nope, 32 bits.
Y un largo tiempo, que es 64 bits.
Sin embargo, algunos de los que son sensibles al contexto, sino que depende
¿qué tipo de equipo que tiene.
Así que en general, se deberá especificar en una tarea o en un concurso cuando
lo que realmente importa.
Pero el punto es que hay todos estos diferentes
representaciones aquí.
>> Así que vamos a bucear en realidad en un programa.
En lugar de escribir esta uno desde cero, déjame ir por delante
y abrir a partir del código fuente de hoy - todo lo cual es
en línea - si quieres improvisar una solución en línea o retorno de la
Miércoles con el aparato en su ordenador, las instrucciones
para que unirá en la página principal del curso.
He aquí un programa super simple.
Pero tiene un poco de algo nuevo en la parte superior que
que no teníamos antes.
Un montón de líneas azules del texto.
Así pues, estas líneas azules representan observaciones.
Así que es muy útil en un programa para poder escribir
algunos comentarios a ti mismo, o con colegas o amigos, o
Teaching Fellows, ese tipo de describir lo que está pasando en
este archivo, pero no tienen nada que ver con el código C en sí.
Nada que ver con el programa funcional, es sólo
estética.
Así que la manera de hacer esto en C es por lo general comienzan su
comentarios con / * y termina con sus comentarios
* /.
Y si usted es realmente anal y me gusta dibujar tipo de imágenes,
entonces se había puesto un montón de estrellas, que serías una
pequeña caja como esta.
Pero nada de eso importa.
Lo único que importa es el primer
y el. último
Esto es lo que se llama un comentario de varias líneas.
Y es sólo convención humana a menudo lo hacen las estrellas y la caja
cosas como esto si usted tiene un montón de tiempo libre.
>> Así que después de que usted ha escrito en algunos comentarios, por lo general, vienen
las agallas reales del programa.
Aquí está nuestra familiarizado # include.
Y sólo rápido, esto es necesario o no es necesario?
AUDIENCIA: Necesario.
David Malan: Así que no es realmente necesario.
¿Por qué, sin embargo, no es necesario?
Así que no hay printf.
En efecto.
Todo lo que estamos haciendo en este programa son las matemáticas.
Así que en realidad se puede borrar eso.
Así que no siempre tienen que incluir nada en
la parte superior de un programa.
>> Así que vamos a simplificar esto un poco.
Y ahora darse cuenta de lo que hace el programa.
No hay mucho de interés.
int x = 1.
Bueno, lo que se esta haciendo?
Bueno, piense en el modelo mental de antes.
El lado izquierdo de esta expresión hace qué?
Crear un espacio para un entero.
Entonces, ¿cómo mucho espacio?
Bueno, sucede que ahora sabemos que es de 32 bits.
Anteriormente, una cadena era técnicamente 32 bits, pero más
en que en el futuro.
Pero un int es de 32 bits.
Así que esta expresión de la izquierda aquí, int x sólo dice hey
sistema operativo, dame 32 bits de RAM -
también conocida como 4 bytes de RAM -
para que yo pueda poner un entero en ese espacio.
¿Qué entero te quieres poner?
Bueno, sólo el número 1.
int y recibe 2, hace exactamente lo mismo, aunque el
número es más grande, en términos de su magnitud.
El número en sí es todavía tan sólo 32 bits.
Es solo el patrón de bits es diferente a
representan el 1 versus 2.
int z dice ahora dame otros 32 bits, lo llaman z, y poner el
la suma de 1 y 2 en allí.
Así que ahora z es de suponer almacenar el valor 3,
y entonces devuelve 0.
>> Ahora este programa, es lo que hace algo de interés?
Así que en realidad no hace nada interesante, en cualquier
sentido, porque ¿por qué? Es hacer un poco de matemáticas.
Pero no es regresar la respuesta correcta.
Se devuelve 0.
No es la impresión de la respuesta.
Así que este programa es fundamentalmente inútil, ya que
está ahora.
Es hacer algo de trabajo.
Va a tomar algún número de segundos o microsegundos, a
correr, pero no está haciendo nada
útil para el humano.
>> Así que en realidad ahora abrir math2, donde ahora estoy realmente
imprimir el resultado.
Así que esto también se puede deducir de los ejemplos anteriores.
Si quiero hacer algo de matemáticas simples, int x = 1, y
= 2. z es 1 más 2 ahora.
¿Qué es esto va a imprimir obviamente?
Sólo 3.
Así cordura registro rápido.
Déjame entrar en este directorio.
Así cd source1m.
Déjenme seguir adelante y escribir make math2.
No hay mensajes de error salió, así que voy a correr -
a.out--no me deja correr math2. Intro.
Y, en efecto, se imprimen 3.
Bueno, vamos a echar un vistazo a una variante de esto.
En math3.c, ahora tenemos este ejemplo aquí.
>> Así que esta es una especie de interesante.
Así que en esta de aquí, la respuesta se va a poner 1 dividido por 10,
y nota que he declarado como un flotador.
¿Por qué queremos que sea un flotador?
Bueno, es una fracción.
Va a ser un número real.
Así que va a ser de 0,1, es de esperar - 10%, en este caso.
Y ¿qué es lo que entonces quiero imprimir?
Bueno, esta respuesta.
Bueno, vamos a molestar las distingue en primer lugar.
Así que en el lado izquierdo, declarar una
flotar, llame a responderla.
En el lado derecho, no 1 dividido por 10 y poner ese
responder dentro de la variable.
Ahora, esta línea se ve un poco más críptico.
Pero note algunas de las características familiares. % Significa aquí viene un
marcador de posición.
f significa aquí hay un valor de punto flotante, un verdadero
número, algo con un punto decimal.
0.2 ¿qué significa?
Alguien sabe por experiencia previa?
Dos decimales.
Así que no he visto esto antes, pero es sólo una forma de
el ejercicio de un poco más de control sobre printf y
dicho no me dan 30 puntos después del punto decimal,
en cambio me dan sólo 2.
>> Y luego vamos a seguir adelante y ejecutar este.
Así que las matemáticas 3, y ahora me deja correr matemáticas 3, Enter.
Y eso no está bien.
Parece que hemos encontrado nuestro error genuino primero.
Bueno, tal vez no estoy buscando lo suficientemente cerca.
Así que déjame ir hasta aquí, y me deja poner 20 decimal
lugares puntuales allí.
Y déjame recopilar la información, hacer math3, corre.
Bastante seguro de 1 dividido por 10 no es 0.
Entonces, ¿qué está pasando?
Pues bien, así que en realidad no tiene nada que ver con esto.
Eso es un buen pensamiento.
Esto es realmente sólo una coincidencia
que estamos haciendo esto.
Pero sólo para demostrar que esto no lo es, voy a
devolver algo al azar.
No hagas esto en casa, porque es simplemente incorrecto.
Pero que math3, déjame correr.
Así que no tiene nada que ver con lo que estoy regresando, sólo tiene que hacer
con lo que estoy imprimiendo.
Pero lo escuché aquí abajo.
¿Qué?
AUDIENCIA: Así que tenemos que escribir los números en
la división como -
>> David Malan: Bueno bueno.
Así que tenemos que escribir los números que participan en el
división de punto flotante como aquí se valora.
Entonces, el problema aquí es que antes: C, como con una gran cantidad de
idiomas, cuenta con diferentes tipos de datos.
Y esos tipos de datos, por ejemplo, son estas aquí.
Y los tipos de datos de que se trata aquí, cuando yo escriba 1 y luego
tipo 10, son probablemente lo que los tipos de datos?
Así que es probable que un int, ¿verdad?
Definitivamente no es un flotador porque no hay decimal
punto o algo así.
Así que en realidad, tengo un entero dividido por un entero.
>> Así que lo interesante de las matemáticas y un ordenador es que
si usted está haciendo uso de la división de números enteros -
1 dividido por 10, si es de 0,1.
Sin embargo, cuando se está dividiendo un número entero por un número entero, el
respuesta tiene que ser también un número entero sólo porque, por ahora.
¿Y cuál es la implicación, entonces?
Bueno, si la respuesta es 1 dividido por 10 es igual a 0,1, lo que
el equipo se va a hacer es que no tengo idea de cómo
representan 0,1, porque eso es un valor de punto flotante, no un
entero, sino que va a cortar todo después de la
punto decimal y sólo le mostrará el 0 al principio.
Y el hecho de que se está imprimiendo, como un punto flotante
valor, es sólo algo estético.
Esto se debe a que estoy forzando al ordenador para imprimir esto como un
flotando valor en puntos.
Y de hecho lo he declarado como un flotador, pero la matemática
pasando por aquí.
>> Así que me realmente solucionar esto de una manera muy fácil.
¿Por qué no acaba de hacer 10,0 y 1,0, aunque
técnicamente podría salirse con la suya haciendo uno de esos.
Ahora voy a seguir adelante y hacer math3.
Déjenme seguir adelante y ahora se ejecutan math3, Enter.
Y ahora, oh chico.
Ahora tenemos un nuevo problema por completo.
Así que mejor, ¿verdad, estamos más cerca de 0,1, pero lo que es claramente
mal aquí?
A menos que haya estado mintiendo durante años, ¿no?
1 dividido por 10 es realmente no exactamente 0,1, ¿cuál es
realmente está pasando aquí?
Así que usted puede tipo de razón a través de esta lógica.
Si un equipo sólo tiene una cantidad limitada de memoria RAM para empezar
con, y de hecho un único ordenador utiliza 32 bits para una
flotando valor en puntos, es lógico pensar que con un
número finito de bits, 32 en este caso, sí, se puede
representan un montón de cosas.
En realidad, es cuatro mil millones valores diferentes pueden ser
representado con 32 bits, 2 a la 32, pero es todavía limitada.
Así que el problema es que hay un número infinito de raíces
números, claro.
Si me da un número real, siempre se puede encontrar una
un poco más grande, un poco menos, con sólo ajustar la
números que están después del punto decimal.
Así que si usted no tiene un número infinito de bits,
no es posible que represente un infinito
número de números reales.
>> Así que esta imprecisión inherente a las computadoras, y
esto se tropezó con todo el tiempo, incluso en el más simple de
programas como este.
Pero también en algunos problemas del mundo muy real también.
De hecho, vamos a tomar un momento para echar un vistazo a
algo que realmente sucedió en la realidad.
Vamos a ver sólo el primer par de minutos, y luego
vamos a publicar la línea de enlace.
Pero esto es una prueba de lo que sólo puede salir mal, bastante
honestamente, de una manera muy trágica cuando estas cosas no son
apreciado o sólo los seres humanos cometen errores a la hora de
este tipo de detalles de implementación de las computadoras modernas.
>> [JUEGO VIDEO]
-Volvemos ahora a los desastres de ingeniería en Maravillas Modernas.
Ordenadores.
Todos hemos llegado a aceptar los problemas a menudo frustrantes
que ir con ellos.
Errores, virus y fallos de software son un pequeño precio a
pagar por la comodidad.
Pero militar de alta tecnología y de alta velocidad y el espacio
aplicaciones de programa, el problema más pequeño puede ser
ampliada hacia el desastre.
El 4 de junio de 1996, los científicos prepararon para lanzar una plataforma no tripulada
Cohete Ariane 5.
Llevaba satélites científicos diseñados para
establecer con precisión cómo el campo magnético de la Tierra
interactúa con los vientos solares.
El cohete fue construido por la Agencia Espacial Europea y
despegó de sus instalaciones en la costa de la Guayana Francesa.
>> -Alrededor de unos 37 segundos de vuelo, primero
algo di cuenta que iba mal, que las boquillas se
giro de una manera que realmente no debería.
Alrededor de 40 segundos de vuelo, es evidente que el vehículo
estaba en problemas, y es entonces cuando se tomó la decisión de
destruirlo.
Un funcionario de seguridad de gama con agallas tremendas pulsado el
botón, estalló el cohete antes de que pudiera convertirse en un
un peligro para la seguridad pública.
>> -Este fue el viaje inaugural del Ariane 5, y su
destrucción se llevó a cabo debido a un defecto incorporado en el
software cohete.
>> -El problema en el Ariane fue que había un número que
requiere 64 bits para expresar y querían convertirla
a un número de bit 16.
Se supone que el número nunca fue
Va a ser muy grande,
que la mayoría de los dígitos en el número de 64 bits fueron 0s.
Estaban equivocados.
>> -La incapacidad de un programa de software para aceptar la
tipo de número generado por otro estaba en la raíz de
el fracaso.
El desarrollo de software se había convertido en una parte muy costosa de
nueva tecnología.
El cohete Ariane 4 ha sido muy exitosa.
Gran parte del software creado para él también fue utilizado
en el Ariane 5.
>> -El problema básico era que el Ariane 5 fue más rápido,
acelerado más rápido.
Y el software no habían tenido en cuenta que.
>> -La destrucción del cohete era un enorme financiero
desastre, todo se debe a un error de software minuto.
Pero esta no fue la primera vez que tenía problemas de conversión de datos
plagado de tecnología de cohetes modernos.
>> David Malan: Vamos a dejar las cosas así.
Pero esto es una prueba de cuán aplicable incluso algunos de
más estos detalles de nivel que hemos empezado a
explorar hoy son.
Así que, como te dan un poco distraído quizás por algunos de
la sintaxis y arcaneness aquí, se dan cuenta que más de la
plazo vamos a estar centrado sólo en cómo esto es aplicable
mundos más allá de CS.
Nos vemos el miércoles.