[Powered by Google Translate] [♪ ♪ Buzzing] Así que para introducirte a lo que tengo en la pantalla; es una de las herramientas que hemos desarrollado durante el verano; se llama CS50 Spaces, y es nuestra aplicación de colaboración codificación que vamos a utilizar en las secciones. Es muy bueno. ¿Alguno de ustedes ha visto CS50 carrera todavía? Déjame sacar eso en otra pestaña. Run.cs50.net Tan si vas a run.cs50.net, se puede ver este es un navegador en su camino a en realidad código - escribir código C, y luego ejecutarlo, por lo tanto compila, ejecuta, devuelve los datos resultantes a usted, así que esto es una especie de una manera fresca de experimentar con una parte del código que David se acerca en conferencias y le damos a usted en el conjunto de problemas sin tener que encender el aparato. Entonces, ¿qué hace que los espacios es diferente de la si vuelvo a esta ficha, Spaces es CS50 de ejecución, como se ve aquí, pero si se desplaza sobre y mirar en el otro lado de la ventana, que vea la razón que soy la única persona en este espacio, pero lo que voy a hacer es preguntar ustedes a sumarse a este espacio conmigo y todos vamos a llegar al código en la ventana pequeña mismo, compartir código entre sí, y hablar sobre las diferencias entre nuestro código. Así que es una especie de cosa cool - a que se sumen, si usted visita este enlace aquí mismo, en la parte superior que he resaltado, usted puede simplemente escribir en apps.cs50.net/spaces/vqcspSnO. Muy bien, así que para empezar, Yo te voy a dar un poco de un viaje de este. Vamos a hacer unos tontos codificación poco con él al principio, sólo para que todo el mundo tiene un poco una idea de lo que es, pero lo que he hecho - o lo que voy a hacer aquí es - Voy a tomar el código que he escrito aquí, así que usted ve en este momento está vacía; no hace nada. Es solo código de la caldera placa, vamos a llamarlo. Con un poco de cosas para hacer comentarios. Voy a guardarlo pulsando este botón Guardar. Y lo que hace es destacado hasta aquí brevemente - la caja de revisión save verde, y ahora, si usted busca para mí en el espacio, hace clic en mi nombre, se puede ver que tengo esta revisión aquí, y si hace clic en esa revisión, que va a cargar ese código en el espacio, también. Así que todo el mundo se ha cargado el código en su espacio? Muy bien, si no lo ha hecho todavía, seguir adelante y hacer eso, y entonces lo que yo quiero que ustedes hacen en esta pequeña sección de tareas es escribir un poco sobre ti mismo usando printf, Así, por ejemplo, me gustaría escribir printf ("Mi nombre es Nate"); y luego me gustaría escribir "Me gradué en 2009 de Stanford " y me gustaría conocer su opinión sobre qué año estás en la escuela, si estás en la universidad o la escuela de negocios u otra escuela de Harvard, lo que está estudiando si se sabe todavía; si no se sabe, eso es totalmente fresco. Yo no decidí hasta que llegué tarde en mi segundo año. y entonces también me gustaría saber ninguna locura que deseas decirme o algo sobre la clase o simplemente cualquier otra cosa. Cuando haya terminado de escribir que con su pequeño printf, si usted se ahorrará la revisión o bien primero asegúrese de que se puede ejecutar y que se imprime exactamente lo que quiere que la impriman, y entonces si seguir adelante y salvar esa revisión utilizando el botón Guardar de revisión, este primer chico poco por aquí, y que poco va a ir a través y hacer una pequeña introducción de esa manera. Por lo que sólo debería tener que pulsar el botón Play, que es aquí en la parte superior izquierda, por lo que este botón Reproducir en la parte superior izquierda se enviar el código de descuento a nuestro servidor donde se compila y ejecuta entonces. Entonces, ¿qué es un poco loco por esto se Este código en realidad no se está ejecutando en el equipo; en realidad está siendo enviado a través de Internet. ¿Cómo va todo, Charlotte? >> I - está bien. Yo - yo creo que soy habiendo dificultades que salvar en el servidor de forma que pueda - I puede ejecutar el programa. Y luego cuando intento ejecutarlo, se dice que hay un error. Declarado como un virus, lo que no está ahí ya. Oh, vamos a ver, ¿puedes golpear de nuevo en Guardar? Lo veo en la pantalla. Derecho >>, está bien, así que eso es lo que tengo. Y yo no sé por qué no me deja correrlo. Oh, está bien, lo siento. ¿Puede explicar por qué - lo que estaba mal - lo que no estaba trabajando con él? >> Sí, porque yo no vi que había una última línea donde todavía hay una variable que no había declarado, que no tenía la intención de que esté allí. Sí, perfecto! >> Ahora, si lo guarda, yo creo que debería funcionar. Ahora que lo has salvado, funciona; impresionante. Así que sí, a medida que avanzamos a través de - así que lo que estaba pasando, Sólo voy a repetir esto para la cámara. Lo que estaba ocurriendo era que esta variable s fue dejado en post - Supongo que eliminó algunas otras cosas en la que declaró como, por lo que este estaba tirando cosas y no dejar que se lo ejecuta. Así que esto es exactamente lo que quieres hacer en la sección Se han escrito personas intentan diferentes piezas de código, la compilación, vea lo que funciona, ver lo que no, y luego un poco hablar de estas cosas, porque estos son los puntos de disparo que Todavía me encuentro, Todavía - hago muchas tonterías todo el tiempo, y yo no sé por qué no funciona, así que vamos a levantar revisión de Charlotte 3, y vamos a correr. Así que cuando corro, ahora que tengo su código aquí, Puedo hacer un zoom, pulse el botón Run, lo sube, lo construye, ejecuta, dice que se ha ejecutado correctamente y, si me desplazo hacia abajo ver Charlotte es un junior en Adams House, la psicología, la secundaria en la economía; impresionante. Encantado de conocerte! Awesome. Está bien, de seguir adelante, vamos a ir a Daniel, ir a la revisión 3, compilar, ejecutar; ¿por qué no nos cuentas un poco sobre usted, Daniel? Llámame >> Dan. Voy a la escuela de negocios a través de ustedes, y yo estaba en la Infantería de Marina antes de que aquí, y todo esto es nuevo para mí, así que sí. No te sientas mal, tengo 30 años y no sé nada de esto. Impresionante, gracias, Dan! Muy bien, tenemos otro Daniel. Uno va por Daniel - le presentarse, Daniel? >> Claro, soy Daniel. Soy un estudiante de segundo año en Mather en estos momentos. Me estoy concentrando en el gobierno, pero yo quería tomar CS50 porque he oído muy buenas críticas acerca de la clase y nunca he probado antes de CS. Desplácese hacia abajo y aquí se repite el mensaje - cool. Cambiando de tema, Jared. ¿Cómo va todo? >> Bueno, ¿cómo estás? Como puede ver, soy un concentrador filosofía junior en Eliot, originalmente desde el sur de California, y estoy interesado en tomar CS50 porque me gusta la lógica de la misma, y parece realmente bueno para hacer cosas en el ordenador, así que. Impresionante, donde en el sur de California es usted? >> Alrededor de una hora a partir de [inaudible], una pequeña ciudad [inaudible]. Oh, sí, mi papá es de Redlands. Cool stuff. Bueno, Jimmy, ¿cómo te va, Jimmy? >> Bueno, ¿cómo estás? Si lo hace bastante bien! Cuéntanos acerca de ti. >> Soy un estudiante de primer año, y no estoy del todo seguro de lo que estoy especializando en pero estoy un poco inclinado hacia la economía. Como Daniel delante de mí, nunca he hecho nada CS, pero suena un poco frío. Soy originario de Chicago. Awesome. Así que echa un vistazo a su listado aquí. Yo quería preguntar, hizo esta impresión hacia fuera como usted esperaba? >> No, me olvidé de imprimir una nueva línea. De hecho, me olvidaba que cuando estaba escribiendo mi cosa por primera vez, también. Es un tipo de dolor que acordarse de los coloque en forma manual. Sería bueno si sólo sé que es lo que quería. Bueno, Kelly. Wow, tenemos 2 Kellys, 2, 2 Kellys Daniels. Así que Kelly - vas por Kelly Ren? Bueno, impresionante. O Kelly, quiero decir. >> Así que sí, así que estoy Kelly. Soy un estudiante de segundo año en Pfoho. Recibí un correo electrónico hoy que todavía tengo 7 semanas para declarar mi concentración, así que estoy tratando de no pensar en ello, y me gusta hornear, correr y Craisins. No tengo experiencia con la mayoría de CS; Me enseñó a construir sitios Web cuando yo era muy joven, pero creo que probablemente me enseñaron mal un montón de veces. Esperemos que voy a aprender un poco más y - sí. Impresionante, bien, gracias. Vamos a ir a la otra Kelly; Yo no tengo nada - dijo usted algo aquí? >> [Inaudible] ¡Ahí está! Sweet! >> Muy bien, así que estoy Kelly. Soy un estudiante graduado de primer año. Estoy especializando en la Mente, Cerebro y Educación. Me gradué en el Franklin & Marshall College en 2008 con especialización en psicología y sociología y un menor en francés. Estoy tomando CS50 porque estoy interesado en obtener un doctorado en Neurociencias y siento que esto me ayudará a entender las tecnologías que se utilizan. Awesome. Cambiando de tema, Mikaela. ¿Es que la pronunciación correcta? Bueno, impresionante. >> Soy Mikhaila. Soy un estudiante de segundo año en Kirkland House, y me estoy concentrando en Ingeniería Mecánica. Realmente me gusta el ciclismo, construyó una bicicleta este verano. Estoy tomando CS, en realidad, como un requisito de concentración, pero ya sabes, creo que es todavía fresco especie de clase de ingeniería. Impresionante - que construyó una bicicleta este verano? Sí >>. Wow, como el marco y todo eso? >> Uh-eh (afirmativa). Wow, eso es genial. >> [Inaudible fuera de cámara chat] [Risas] Sí, ha pasado tanto tiempo. Nunca se sabe, ¿no? Bueno, fresco, bien gracias, Mikhaila. Muy bien, señorita. >> Mi nombre es Missy, soy un estudiante de primer año, lo que significa que no sé nada! Quiero concentrarme en astrofísica. En CS50, Siento que definitivamente le ayudará con eso. Un dato curioso sobre mí es que soy un bombero certificado a nivel nacional. Wow! ¿Cómo sucedió eso? >> Asistí a una academia y pasó por el infierno de un montón de semana y obtuve mi certificación. Wow, ¡felicidades! Eso no es poca cosa, seguro. Está bien, así que ahora me va a hacer. Yo soy el siguiente en la fila. Yo - lo ejecute. Así que mi nombre es Nate. Yo era la clase de 2009 en Stanford. Yo estaba a los principales sistemas simbólicos, que es similar a la mente, la concentración Brain Behavior, aquí, pero es una especie de mezcla de ciencias de la computación, la lingüística, la psicología y la filosofía. Algo así - sí, un montón de cosas raras, pero fue genial, y luego hice mi maestría en Ciencias de la Computación allí, también. Así que yo soy nuevo en Harvard este año. Tenía muchas ganas de entrar en la enseñanza. He pasado los últimos 4 años en Stanford TA-ción clases de Ciencias de la Computación por lo que David me deja vamos, y yo voy a estar ayudando con CS50, así que hacer esto todo el tiempo, yo no estoy en la escuela de posgrado. Ha sido divertido. Esperemos que va a seguir siendo divertido, estoy seguro de que lo hará. Está bien, Sam. >> Mi nombre es Sam, soy un estudiante de segundo año en la universidad, en la legislación específica. Mi mayor será la historia de la ciencia, probablemente, y VES secundaria, y mi color favorito es el amarillo. No hay necesidad de emitir un juicio ni nada, pero es un buen color! Y Stella. >> Hola, soy Stella, soy un estudiante de primer año en Grays. No tengo ni idea de lo que me he concentrado en, sin embargo, así CS50 era sólo un poco al azar, que es interesante. Dato curioso, Jimmy fue el primer amigo de Harvard de la mina, porque los dos somos de Chicago. Cool, y Grace - que se supone que es la realmente bonito, ¿verdad? Pensé >> [inaudible]. Oh, sí. [Inaudible / off-camera chat] Bueno, yo todavía estoy aprendiendo, todavía está aprendiendo. Así que tenemos algo más que es algo interesante aquí. Sí, me pregunto, ¿tiene usted una idea que está pasando aquí? Usted sabe cómo interpretar esto? >> Se suponía que debía ser puesto el punto y coma después de cada línea. Eso es un poco de un rollo. A veces esos puntos y comas pueden ser un verdadero dolor de localizar. Así que resulta que el programa especial que estamos usando este año para compilar nuestro código C se llama Clang, y la razón por la que han comenzado a utilizar Clang este año - porque no hemos utilizado ese programa en el pasado; hemos utilizado otro llamado GCC que es muy popular - Clang en realidad le da mensajes de error que tiene sentido. Éste dice "espera", "después de la expresión" e incluso te dice la expresión después de que se necesitaba un punto y coma. Así que estás arreglando? >> Sí, ahora mismo. Impresionante, hágamelo saber y vamos a tirar para arriba, y lo vamos a ejecutar. Pero sí, poniendo estos puntos y comas es una especie de dolor. >> Me lo arreglaron, así que creo que debería funcionar. Impresionante - revisión 3. Eso parece. Muy bien, así que ahora si lo ejecutamos, ahí va. Cool stuff. Está bien. Así que gracias por hacer eso. Es muy bueno para cumplir con ustedes. ¿Qué vamos a hacer ahora es gastar el poco próximo un poco de entrar en los problemas de la sección que provienen del conjunto de problemas de esta semana y haremos todo lo que para la mayoría de las secciones para el resto del término, y luego vamos a salvar los últimos 15, 20 minutos o menos para hablar sobre el problema fijado y luego simplemente cualquier otra pregunta que usted tiene en general acerca de la clase. Dicho esto, lo que realmente quiero hacer Se han participando todos utilizando el material Spaces, tirar en el código, lanzando en sugerencias, y hablando cuando cosas como esta ruptura o no funcionan, porque son cosas que Sé que me encontré cuando empecé codificación, y eran muy poco frustrante a veces porque si es como 2 am antes de su conjunto de problemas se debe, así - sólo para la divulgación, Yo no empecé programación hasta que yo era un estudiante de segundo año en la universidad. Fue un poco de esta cosa extraña, desconocida que oí fue un poco frío y también he oído que podría ser un verdadero dolor en el trasero si no cumple con un punto y coma y ese es el error sólo mantener su programa de trabajo y le impide ir a dormir, así que sin duda, Si tiene preguntas por el estilo, si usted tiene preocupaciones por el estilo, que me haga saber, porque quiero hacer de esto una buena experiencia para ustedes. Así que ustedes han descargado todo el conjunto de problemas todavía? Kinda saber dónde está? Bien. Así que vamos a ir a cs50.net, porque yo no lo tengo en esta cuenta, levantar los boletines de problemas, levantar conjunto de problemas 2, y vamos a ver la edición estándar de hoy. Vamos a levantar la especificación aquí. Desplácese hacia abajo. Así que vamos a empezar a buscar en esta sección de preguntas. ¿Han visto estos cortos todavía? Bien. Así que hay cortocircuitos en los bucles, que se realiza por Tommy, uno de los hombres de cabeza de enseñanza. Hay uno en el alcance, Creo hecho por otro compañero de enseñanza llamado David y luego en una cifra de César también se hace por David. Están muy bien. ¿Han estado viendo sus pantalones cortos hasta la fecha? How've sido? ¿Interesante? Bien, es bueno saberlo. Si no lo son, se puede decir así. Pero antes de hacerlo, ¿Han mirado a estas preguntas después de todo? Vamos a hablar de esto un poco. Así que hemos introducido en el último par de semanas en conferencia un número de bucles diferentes. Ahí está el bucle for, el bucle de tiempo, y luego el bucle do-while, y en la conferencia, hemos estado hablando mucho acerca de cómo esos lazos son todos bastante similar en muchos aspectos, y usted puede hacer muchas de las mismas cosas con un bucle while que se puede con un bucle para. Sólo tienes que tipo de uso de las combinaciones adecuadas de las variables y tal. por lo que realmente la distinción real entre todos los bucles es que a veces son más útiles para utilizarlos en un momento que en otro momento. Así, por ejemplo, el bucle while que difiere de un bucle do-while. ¿Todos sienten que tienen un buen control sobre cuando un do-while es más útil o cuál es la diferencia? >> Creo que la diferencia es un bucle do-while corre - No sé muy bien qué es la terminología, pero la serie de funciones dentro del bucle. Automáticamente - que hace sus carreras por lo menos antes de comprobar la condición, o el bucle mientras que sólo va a funcionar cuando se ejecuta continuamente - si o no la condición es satisfecha. Sí, ¿eso tiene sentido? Echemos un vistazo a un poco de código. Así que para repetir la pregunta, o la respuesta, en lugar; la respuesta fue que un bucle while comprobar para ver si la condición que especifique se cumple antes de que se ejecuta el cuerpo del bucle, por primera vez, mientras que el do bucle while se ejecutará automáticamente el cuerpo del bucle, es lo que llamamos - es extraño terminología, pero si alguna vez decir algo que no tiene sentido, hágamelo saber - el cuerpo del bucle es esa cosa que se pone en medio de las llaves. Y en un bucle do-while, que el cuerpo se ejecuta al menos una vez, y entonces la condición se comprueba antes de ejecutar cada tiempo sucesivo. Así que en realidad, Sam, ¿Te importaría escribir un sencillo bucle while en los espacios? >> ¿Cómo algo así como hacer una nueva ...? Acabo de borrar todo lo que tienes ahí. Sí, sólo que limpiar. >> Bueno, creo que estoy teniendo este - que uno quiere, cuando, o ¿quieres ...? Sí, sólo es un tiempo real, imprimir algo. Y vamos a ver. Alexander, me di cuenta de que nunca te presentó. >> Oh, eso está bien. ¿Usted - puede codificar un bucle do-while para nosotros? >> Sí, lo intentaré. Muy bien, sólo tendremos que tirar de ellos hacia arriba en la pantalla, para que tipo de tener una idea de lo son las diferencias. Así que aquí está lo que Sam ha hecho. Tiene un entero llamado i que ha inicializado a 17. Entonces dice: while (int i = 17) printf ("Mi nombre es Sam."); Entonces, ¿qué sucede cuando ejecute este código? Hay un error, ¿qué quiere decir el error? Vamos a tirar de él hacia arriba y hablar de ello. Ha ocurrido un error, dice. Vamos a desplazarse hacia abajo. Así que nos dio este error, y dijo que, "Hey, yo esperaba una expresión." Eso es un poco críptico. Sí, exactamente así - y de nuevo, habrá otro pequeño insecto que nos pondremos al día en tan sólo un segundo. Pero este es otro de ese tipo de cosas extrañas terminología, por lo que este int i = 17 no es una expresión. Lo que parece que está haciendo es que es declarar un entero llamado i y se establece para ser igual a 17 o, más bien, poner 17 en que int i llamado. Y eso no tiene sentido en el contexto de este bucle while. Esto tiene sentido, como veremos, en el contexto de un bucle for, porque las declaraciones bucle Do empezar con que para int i es igual a algo y continúa. Así que hice - arreglar algo, está bien. Aquí va, impresionante. Así que ahora las cosas se ven un poco diferente. Un par de cosas han cambiado. ¿Nos puede decir qué cosas han cambiado? >> Saqué el int, así que no hay declaración [inaudible] en lugar de una tarea. El signo de un igual, puse dos signos de igual, lo que significa un pie de igualdad. Awesome. Sí, ¿y qué hizo Sam se sacó la int que estaba aquí antes, así que si me basta con ver esto - esto es lo que era antes, dijo int, que se declare que - por lo que sacó el tipo. Hay int, string char, corta, los que son llamados tipos. Así que saqué el tipo y luego anteriormente, acababa el único signo de igualdad y lo que dijo era problemática sobre esto se cuando se tiene un signo igual, que es un operador de asignación. Eso no es probar si dos cosas son iguales. Eso es realmente poner algo igual a algo. Estamos poniendo el número 17 en la variable i. Así que para hacer ese tipo de comparación, usted tiene que utilizar el doble iguales, que es una especie de cosa rara pero es un error bastante común. Así que una cosa sí voy a señalar, si no te importa, es que, en nuestra función aquí en int main, se ve que el cuerpo de nuestra función se desplaza desde el lado izquierdo por 4 espacios o un tabulador. La razón por la que hacemos esto es sólo para facilitar su lectura. Como se puede ver en el bucle mientras que Sam está aquí, no guión en absoluto, y que no afecta a la funcionalidad del código. Se ejecuta exactamente el mismo. Así, por ejemplo, si llegamos a la cima aquí y pulse el botón Reproducir nuestro, se lo construye, que va a ejecutarlo, y lo que va a pasar? ¿Por qué dicen que todavía funcionando? >> Porque voy a seguir repitiendo hi. Exactamente, y ¿por qué seguir repitiendo hi? Debido a que el número entero >> nunca cambia, por lo que es siempre 17. Sí, exactamente, así vamos a ver, después - me recuerdan tu nombre? Jimmy. Así que Jimmy dijo que la razón de que esto no deja de repetir alta una y otra vez se debe a que esta condición se cumple siempre. Nunca cambie el valor de i. Nunca cambiar el contenido de lo que está almacenado en esa variable. Así que en este punto tenemos este error que el programa genera una salida muy alta, y si desplácese hacia abajo y tipo de mirada a lo que está pasando aquí, se puede ver que es hi, hi, hi, hi, hi, hi, hi todo el camino a través. Awesome. Así especie de vuelta al punto original que tenga la sangría aquí en el cuerpo del bucle, mientras que no afecta a nada. El programa sigue corriendo bien. Típicamente, para un buen estilo - y esto es algo que buscamos en los conjuntos de problemas - le pedimos que este guión por 4 espacios, que se puede hacer con sólo pulsar la tecla de tabulación o manualmente poniendo en 4 espacios a ti mismo. Cool, bien así que vamos a volver atrás y mirar Alejandro do-while. >> Just algo que tiene un poco de dificultad. Bueno, bueno, vamos a trabajar a través de él. ¿Eso es bueno? Sí >>. Bien, aquí vamos. Este es el código que escribió Alexander. ¿Usted va por Alex - está bien. Así que aquí está el código que Alex ha escrito. Por lo tanto, tenemos nuestra declaración de principal aquí, y luego tenemos esta variable entera llamada i de ser declarado justo aquí. Tenemos una instrucción do y luego el cuerpo de nuevo con estos aparatos, por lo que este es el cuerpo de la do-while - permítanme hacer un zoom en este modo es más fácil de leer - y en el cuerpo, estamos tratando de imprimir "este es el cuerpo", i + +, así incrementar el contenido de i y hacer esto hasta que llega a ser 3, y luego nuestro programa termina. Entonces, ¿qué sucede cuando ejecute este programa? >> Me esperaba un identificador. Bien, construir, ejecutar, error. ¿Qué sucede? Nosotros nos desplazamos hasta aquí, tenemos esta cosa un tanto críptico mirar, esperado punto y coma después de la declaración de alto nivel. Eso es un poco raro. ¿Alguien tiene una idea de lo que podría estar pasando? Un poco raro, sí. >> [Inaudible] se declara fuera de los paréntesis? Así que no se aplican a continuación, cuando se utilizan paréntesis? Así, declaró que este tipo fuera de las cuales paréntesis? Oh, estos chicos - las llaves? Sí >>. Sí, exactamente. Así que resulta que en realidad no se puede declarar una variable aquí así. Lo que podría haber estado tratando de hacer era - recórtelo de allí - usted puede ponerlo dentro de las llaves aquí u otra alternativa es poner completamente fuera. Y así estos - dependiendo de donde usted realmente poner la declaración de esa variable entera, usted puede obtener 2 tipos muy diferentes de variables; cuando está fuera de la principal, es lo que llamamos una variable global. Está fuera del alcance de cualquiera de las funciones - no es dentro de una función - mientras que si lo ponemos dentro de la principal, como aquí, entonces se llama una variable local, porque es local para el ámbito de aplicación de principal. Y vamos a hablar un poco más acerca de cuáles son las diferencias entre los 2 tipos y por qué se utilizan diferentes tipos de variables, pero por ahora, usted puede mantener todas las variables locales, porque nosotros no tenemos ninguna necesidad de que las variables globales. Está bien, así que eso es una cosa ahí. Vamos a intentar ejecutar de nuevo, a ver qué pasa. Ejecutar, conseguir otro error. Acercar un poco, ¿qué obtenemos? Nos esperaba después de este paréntesis do / while. ¿Alguna idea de lo que está pasando? Dan? >> ¿El tiempo y luego paréntesis y luego - No sé si tiene que redeclare int, pero el hacer mientras (i <3). Exactamente, sí. Así que resulta que Dan es exactamente correcto. No necesitamos poner este tipo aquí de nuevo. En su lugar, puede matar al tipo y acaba de hacer eso. Está bien. Voy a alejarse con el zoom, probarlo una vez más. Mira eso, sino que se ejecuta con éxito. Si se desplaza hacia abajo, "éste es el cuerpo" imprime 3 veces. Eso es muy dulce. Bien hecho, bien hecho, chicos. Bien hecho. ¿Cómo va hasta ahora? Ritmo decente? De acuerdo, genial. Así que, como especie de vuelta a la pregunta original, nosotros - y ahora si vemos la diferencia, se ve que en este bucle do-while, el estado ocupa el último lugar. Así como el ordenador lee el programa desde programas en C se ejecutan en este tipo de orden secuencial, donde, literalmente, comenzar con la primera línea de principal, y luego ejecutar la línea 6, línea 7, línea 8, línea 9, línea 10, línea 11, todo esto en la parte superior derecha aquí se va a ejecutar una vez antes de que alguna vez probar esta condición de ver si i - o el contenido de i, más bien - son menores que el número 3. Y sólo si una vez que lleguemos a la línea 12, el contenido de i son menos de 3 es lo que realmente volver atrás a la línea 7 y luego repetir el proceso, y luego se prueba la condición de nuevo y de nuevo y de nuevo. Así que podemos contrastar esta con - zoom de vuelta, desplácese hacia abajo a la versión de Sam, vamos a ver esto, un poco cambiado para que ya no es un bucle infinito - donde si el zoom, vemos que a medida que el programa se ejecuta, que va a declarar primero int i, establecer el contenido del i be a 0, y entonces se realiza la condición del primer bucle mientras que, por lo que en este caso, este cuerpo, esta printf ("hola") y + + i ni siquiera ejecutar a menos que en realidad es menor o igual a 2. Así que si i es 3, por ejemplo, si ponemos esto aquí igual a 4 - o voy a hacer 3, porque he dicho 3 - y luego ejecutarlo, que va a construir, que va a ejecutar totalmente bien, pero en realidad no se imprimirá nada, porque no prueba que para el primer caso. Así que en clase, que tipo de habló de por qué estos bucles do-while son útiles a veces y por que se utilizan en lugar de un bucle while. ¿Hay - ¿Ustedes tienen alguna sugerencia por qué un do-while puede ser más útil? >> Bueno, creo que do-while es que si quieres entrada del usuario, porque de esa manera usted puede dejar poner algo en una vez, si es correcto, podemos pasar al resto del programa, pero si no es correcto, entonces sigues preguntando al usuario hasta que coloque la entrada derecha. Sí, exactamente - exactamente, por lo que un do-while es útil porque cuando se pida confirmación de la entrada del usuario porque es necesario para obtener la entrada del usuario antes de que puedas comprobarlo. Así que en un conjunto de procesadores, en pset 2, donde usted está incitando a que el usuario mucho, eso es práctico el uso de en lugar de sólo un bucle while simple. Si utiliza un bucle while, se puede hacer la misma cosa - usted puede hacer lo mismo con un bucle while como lo hace con un bucle do-while. Sólo tienes que tipo de tener este proceso duplicado donde se obtiene la primera entrada y luego iniciar el bucle while. Mientras que un do-while, sólo tienes que escribir una vez y es mucho más limpio. Está bien. ¿Alguna pregunta? Tiene sentido? >> The return 0 - eso es sólo una especie de puesto o es -? Sí, por lo que puede - Bueno, vamos a cubrir esto un poco más tarde pero resulta que 0 este retorno que ponemos al final del principal todo el tiempo - que poco se puede simplemente tomarlo como algo que hacemos por el momento. Lo que hemos empezado a hablar con funciones tipo de al final de la semana pasada y de nuevo esta semana es que una función toma las entradas que son estas cosas dentro de los paréntesis; estos son 2 entradas, nuestros argumentos o parámetros, lo que están llamados también a nuestra función principal, y entonces una función produce una salida que llamamos un valor de retorno. Y el valor de retorno en el caso de los principal es este tipo int este entero, y la manera de contar una función, "Hey, esto es lo que su salida va a ser ", es con la palabra" retorno ", esa palabra clave, más bien, y principal para devolver 0 o principal salida 0 es estándar en los programas en C porque devolviendo 0 de los principales medios que "Hey, todo ejecutado con mi programa muy bien." Si tuviéramos que poner algo distinto de 0, 1 como, por ejemplo, que se usa para decirle a quien corrió este programa que algo salió mal. Así que a medida que más involucrados con la materia durante el semestre, si alguna vez necesidad de decir, "Oops, ya sabes, algo salió mal con este programa" en lugar de tener mi caída del programa, quiero notificar el corredor de mi programa de que algo iba mal, se puede utilizar el valor de retorno, como lo llamamos nosotros, eso no es 0. Así que vamos a cubrir un poco más una vez que entremos en funciones. Ese tipo de sentido? Bien. Las funciones son un poco extraño - Creo que para la gente que tiene un montón de fondo matemáticas, se trata de un poco más fácilmente, especialmente si usted tiene un poco de fondo matemáticas más abstractas y que está acostumbrado a hablar acerca de las funciones y todo ese tipo de cosas. Pero vamos a tratar de cubrir las e ir bien y despacio a medida que surgen. Del mismo modo, este argc int conjunto, char * argv [], por ahora, también puede tomar eso como placa de la caldera. Hemos empezado a cubrir los poco un poco en la conferencia cuando hablamos acerca de los argumentos que se pasan a los programas en la línea de comandos, pero en sus boletines de problemas y sus programas, es totalmente bien sólo para escribir vacío y que sea sencillo. Y lo que esto significa es que el vacío "Hey, principal no va a aceptar o no insumos; este es sólo un programa que vamos a ejecutar justo. No vamos a entregar cualquier información adicional cada vez que la puesta en marcha corriendo. " Así que por ahora, usted puede hacer esto; también se puede incluso omitir el 0 regreso al final de sus programas y van a correr muy bien, pero te recomiendo que simplemente mantener pulg En un par de semanas, vamos a empezar a tipo de retirar la tapa un poco y entender más acerca de todas esas diferentes partes móviles pequeños. Muy bien, ahora vamos a hablar de nuestra segunda pregunta aquí. Entonces, ¿qué significa "identificador no declarado" suelen indicar si enviada por Clang? Creo que podría haber visto que ya hoy en día. ¿Puede alguien dar un resumen de lo que eso significa? Vamos a ver, Kelly - uno de los Kelly. >> So - Sí, lo hace - >> Creo que cuando, como, no declarar las variables y se intenta usarlo. Sí, exactamente, exactamente. Así que si alguna vez ver esta salida al tratar de compilar el programa, al igual que Kelly dijo: significa que ha utilizado una variable que no declaró, así que si vuelvo a ir a nuestro espacio, y hago algo como printf ( "Hola% s") y tratar de llenar ese% s s con una variable que no he declarado en cualquier lugar y trato de ejecutarlo, verás lo que me pongo en esta parte inferior derecha aquí: "El uso de identificador no declarado 's'"; que simplemente significa que usted no declaró su variable. Lo mismo sucede si tiene x e intenta almacenar y 7 en lo y yo no declaró X. Lo entiendo mismo error: "El uso de 'x' identificador no declarado". De acuerdo, por lo que el cifrado César, no es muy seguro, Voy a dejar que ustedes ver este tipo corto, de entender por qué, y espero que después de hacer un problema de esta semana establece donde realmente escribir un cifrado César, vas a entender un poco más acerca de lo que significa ser un lugar seguro e inseguro - o no seguro, supongo - inseguro es ligeramente diferente. La otra cosa es que tenemos estas otras preguntas aquí acerca de las funciones y lo que es una función, y que tipo de habla brevemente que cuando hablamos de valores de retorno; para alguien que haya estado en una conferencia, puede resumir que ha estado a la conferencia de hoy? Está bien. Vamos a ver, vamos a tener - ¿Puede alguien decirnos qué es una función? Kelly? Básicamente >> algo que recurrir a algo que está escrito en la biblioteca que es más complicado allí, y entonces usted acaba de escribir un breve formulario de ella, así como la que usted se refiere de nuevo a la biblioteca, utilizando todo ese código largo y [inaudible]. Sí, exacto, y luego quieres añadir algo a esto? >> Sí, pienso en ello como algo similar al concepto de una fórmula matemática en en el que acaba de escribir una fórmula y entonces se puede conectar variables en y eso es lo que una función es [inaudible]. Sí, así que tenemos un par de respuestas aquí que son a la vez muy bueno y justo. No se está refiriendo al código que se ha escrito en alguna parte en la biblioteca que es más complicado y entonces usted puede aprovechar ese código y realmente se utilicen con sólo escribir la forma corta de la misma - o, mejor dicho, su nombre - y entonces también existe esta comparación a una fórmula en matemáticas o la física, todo ese tipo de cosas donde se tiene una fórmula y que pueden conectarse al ordenador las variables a que la fórmula para obtener el resultado de la fórmula, por lo que pensar en ello como como la ecuación de segundo grado. Imagínese si en vez de tener que aprender acerca de lo que la fórmula cuadrática se encuentra en la clase de matemáticas, usted acaba de tener un programa de calculadora poco que hice por ti. ¿Alguien utiliza programas de calculadora en las clases de matemáticas en la escuela secundaria? Sí, las clases de física? Donde usted puede decir, "Hey, fórmula cuadrática. Estas son las variables que desea ingresar. Ahora dame la respuesta ". Eso es algo de lo que es una función. Es una manera para nosotros para tipo de escritura como un pequeño subprograma poco dentro de nuestro programa más amplio y lo utilizan una y otra vez de modo que no tenemos que copiar y pegar el código, podemos darle diferentes entradas y obtener resultados diferentes, es súper práctico cuando usted está tratando de escribir programas diferentes en momentos diferentes. Así, por ejemplo, una función que hemos estado usando una y otra y otra vez durante todo el curso es printf. Printf es en sí misma una función y resulta que en realidad es un bastante largo y complicado, desagradable aspecto, funcionan para escribir. Así tan simple como parece a nosotros para imprimir materia hacia fuera a la pantalla, porque todos nos hicimos al principio de la sección de hoy, resulta que en realidad es, ya sabes, un buen par de cientos de líneas de código. No es algo que yo nunca querría escribir, sin duda, pero nosotros la usamos todos los días, eso es una especie de fresco, por lo que tenemos que compartir con los demás, con diferentes programas, por lo que vamos a bucear más en funciones; por el momento, no estamos - la única función que vamos a estar escribiendo es principal. Principal en sí es también una función, y se puede ver que tiene su salida, sus insumos, como los que hemos hablado, y luego su nombre, que es el principal. Principal es una especie de - es una función especial allí. En el programa de C, tiene que haber una función principal, y así por el momento, hemos omitido tipo de escritura el prototipo, o la declaración de, principal. Le hemos dado a ti, y hemos acababa de llenar los espacios en blanco de clase. >> Por lo tanto para el conjunto de segundo problema, no es necesario escribir en la segunda función? Yo no lo creo. Yo creo que es todo aquí. Sí, ¿y cifrado de César, usted no tiene que hacerlo, no lo parece, y Vigenère, usted tampoco, Por lo tanto - y resulta que no siempre realmente tiene que escribir una función, ¿no? Usted llama siempre poner todo el código dentro de principal, y muchos programadores hacer eso. A medida que avanzamos, comenzamos la introducción de funciones como una forma de para limpiar el código, para que sea más elegante, en caso de tener tareas - algo así como cuando hablamos de bucles, cómo a veces hay cosas que usted quiere hacer una y otra vez y otra vez, y que tiene una especie de la manera ingenua - o lo que a menudo llamamos el "hombre de paja" solución, es simplemente copiar y pegar una y otra vez - usted puede hacer lo mismo con las funciones donde sólo tienes que copiar y pegar el mismo código una y otra vez, pero que hincha el código - acaba de hacer su código muy largo - y también pone un poco confuso, y entonces significa que usted no es capaz de como - si alguna vez quieres usar ese código de nuevo en otro programa, usted también está atrapado copiar y pegar de nuevo, así que una de las cosas que vamos a hablar es de tipo de diseño y el estilo de sus programas, y así, cuando tiene sentido especie de paquete de algo y ponerlo como una función separada, te animamos a hacerlo, y eso es algo que, de nuevo, no hay regla dura y rápida. Rara vez nos dicen que usted debe escribir una función llamada esta, sino que es más bien una de esas cosas que sólo se desarrollan con el tiempo como se escribe más y más programas. Algo más preguntas? Está bien, así que vamos ahora volver a subir a este chico aquí, así que estoy todavía en esta sección de preguntas. Hemos hablado de todos estos seres diferentes, lo que es una función, ¿por qué escribir funciones, cuando se puede copiar y pegar? Esperamos que te hemos convencido de que la escritura de funciones es una buena cosa. Así que ahora vamos a pasar a este programa MySpace, y vamos a pasar un poco de tiempo haciendo esto. Por lo tanto, vamos a ver, puedo tener a alguien que lea esto para mí? Vamos a tener Mikhaila - voy a leer esto para nosotros? >> ¿Te refieres a volver cuando MySpace - Antes, cuando MySpace era fresco. >> "Antes, cuando MySpace era fresco, que era el último grito de tipo como este. Tal vez aún lo es? Yo no estoy muy seguro. En cualquier caso, de utilizar el aparato CS50, CS50 Run, o espacios CS50, escribir un programa que solicita al usuario un mensaje y luego muestra el mensaje con su primera letra en mayúscula, con todas las demás letras en el caso de alternancia, como por la salida de ejemplo siguiente, texto en negrita representa la entrada en la que algunos usuarios. Para simplificar, se puede suponer que el usuario voluntad sólo letras minúsculas y los espacios de entrada. Considere este problema una oportunidad de practicar; no se le pidió que presentara este programa ". Awesome, gracias. Así como Mikhaila dijo, vamos a escribir un programa que myspaces su código. Así que, ¿alguno de ustedes usan MySpace? Cualquiera de ustedes tienen cuentas de MySpace? Oh, sí, sí! Fue muy cool. [Risas] Lo sé. Citas mí mismo. Así que lo que estamos tratando de hacer es escribir un programa que pasa a través y en mayúscula la primera letra y luego cada letra después - o cualquier otra letra después de eso, lo siento. Por lo tanto - y se puede ver en este ejemplo, así es como se ejecuta el programa, por lo que este es sólo decir: "Estamos ejecutando un programa llamado a.out. La entrada que vamos a darle va que se le pregunte. No vamos a proporcionar la entrada en la línea de comandos. " Si usted ha estado siguiendo todas las conferencias y oyendo acerca de los argumentos de línea de comandos, eso es algo que aquellos - que la sintaxis cobarde a principal viene con el int argc, todas esas cosas, por lo que aquí no se está usando eso, no estamos tratando con nada de eso. Sólo vamos a obtener este tipo en el usuario, y entonces esta segunda línea con la capitalización cobarde es lo que queremos que nuestro programa de salida. Así que en lugar de utilizar el aparato o Ejecutar, vamos a utilizar los espacios, porque tenemos espacios, y por lo tanto si ustedes lo haría obtener su código para buscar algo como esto, así que voy a guardar esta revisión sólo por lo que tiene la placa de la caldera aquí que se parece a esto, int main (void), nada en él. En realidad, lo que vamos a hacer es que sólo tendremos que borrar todo junto. Queremos una pizarra en blanco, porque no vamos a empezar a escribir código; más bien, vamos a tratar de escribir algo de pseudocódigo que en realidad sólo significa que vamos a escribir algo que no es código ese tipo de describe lo que queremos hacer, un poco como David lo hizo en el primer día de la conferencia, o supongo que fue el segundo día de la conferencia cuando lo hizo la demostración calcetines conjunto. Ustedes recuerdan que - de ver los calcetines? Joseph estaba allí especie de escribir en Inglés? Así que vamos a hacer lo mismo. Así que cuando empiezo a escribir pseudocódigo, Me gusta empezar por mirar lo que la entrada se va a ser. Y me doy un caso de ejemplo, así como "gracias por el add!" Y entonces yo también escribo lo que quiero que la salida sea, que en este caso es algo similar. Y ese tipo de me da un buen lugar, al igual que, empezando a pensar, "Está bien, quiero tomar la línea 1 y quiero convertirla en la línea 2, " y ese tipo de ayuda a guiar mi pensamiento. Este es un buen lugar para comenzar. Otra forma de pensar en ello, también, a medida que se mueven en kinda y como lo hace en sus propios programas, es pensar en algo así como lo son los casos límite a esto? ¿Cuáles son los escenarios de tipo de extraños? ¿Cuáles son las entradas extrañas que podríamos obtener? ¿Y qué si esas salidas parece? Por ejemplo, una entrada extraño sería éste, crear absolutamente nada, parecido a lo que debemos emitir en ese caso? Algo que quiero pensar, también. Así que como una pregunta, lo que queremos de salida? Si no recibe ninguna entrada en absoluto, lo que debería ser la salida de nuestro programa? >> Nada. Nada? Suena muy bien. Así que queremos asegurarnos de que no estamos escribiendo nada si no se consigue nada pulg Cool. Bien. Tan Voy a llamar a un par de personas a medida que avanzamos a través de y sólo imaginar algo así como lo que el algoritmo general es y que tipo va a empezar a trabajar por esto juntos. Por lo tanto, vamos a ver. Missy. ¿Cómo crees que nos gustaría empezar? ¿Cuál sería un buen lugar para comenzar aquí si queremos transformar, por ejemplo, la línea 1 en la línea 2? ¿Puede usted sólo tipo de explicarme, en Inglés, lo que estás pensando? No te preocupes por el código. Lo >> primero que haría sería clase de dirigir al usuario a decirles lo que quieres. Muy bien, así, por ejemplo, "Hey, usuario. Quiero una cadena "- impresionante. Así que vamos a escribir esto. Preguntar al usuario en una cadena. Eso suena como un buen comienzo. Está bien. Vamos a preguntarle a Kelly Ren este momento. ¿Qué haríamos entonces quieres hacer ahora? ¿Qué clase de nuestro lado -? >> Recoger su entrada y guardarla como una variable. Grande. Así recoger la cadena, almacenarlo en una variable. Entonces, ¿hay algo en especial que queremos hacer aquí? ¿Queremos comprobar su entrada antes de -? Sí >>. ¿Qué podríamos desea buscar? >> Bueno, usted ha dicho que no tiene que comprobar si es un número, ¿no? Porque a suponer que se trata de minúsculas? Si. Así que resulta que - sí. Así getString está garantizado para nosotros devolver una cadena. No va a devolver un número a nosotros o algo así. Es posible que haya caracteres dígitos dentro de esa cadena, sin embargo. Y aquellos, podemos ignorar como se hizo la capitalización. Pero una cadena vacía es totalmente bien, por lo que el caso aquí, en la línea 4 y 5, derecha, donde no hay ninguna entrada, y hemos puesto nada como nuestra salida. No tiene que preocuparse por asegurarse de que hay algo en la cadena de o que la cadena es de al menos 4 caracteres de longitud; todo está bien. Así que esto se contrasta, por ejemplo, con programas como los centavos que anotó donde había que asegurarse de que estaban recibiendo números no negativos; había que asegurarse de que usted estaba recibiendo el número correcto de días en un mes. ¿Y qué están haciendo eso? ¿Cómo hacer la prueba? ¿Qué es lo que le obliguen a usar? >> Do-while. Do-while; otros tipos de bucles, también, sí. Por lo tanto, resulta que no es necesario utilizar un bucle en este caso, cuando nos pida la cadena, que es bastante agradable. Muy bien, sigamos. Por lo tanto, Stella. ¿Puedes contarnos un poco acerca de lo que debemos hacer ahora? Así que ahora tenemos la cadena, lo tenemos almacenado en una variable; ¿qué es lo que tenemos que hacer con la cadena? Necesitamos >> - identificar el 2 - Sí, sólo lo dice en Inglés, que es impresionante. Identificar los >> [inaudible] capitales - o, en mayúsculas. Sí, por lo que tendría identificar cuáles son las letras mayúsculas y minúsculas. No podemos mayúsculas o minúsculas hasta que hemos identificado cuáles. Así que vamos a poner eso aquí. Por lo tanto, sólo de pensar en este proceso, ¿cómo hacer esta identificación? ¿Sabe usted, Dan? Un poco lo que nosotros - ¿qué herramienta que tendríamos que usar fuera de nuestra caja de herramientas? >> Lo pondría en alguna manera en como una matriz o una línea cada es su propia cajita, y luego desde allí mayúsculas o no. Bien, una herramienta que podemos utilizar es una matriz. ¿Qué tenemos que ver en la cadena, sin embargo, para entender - que tuvimos que buscar a los personajes. >> Así que tienes que mirar la longitud de la cuerda? Sí, por lo que parte de que está recibiendo la longitud de la cadena. Sólo por curiosidad, ¿qué es lo que utilizamos para obtener la longitud de una cadena? >> Strlen? Sí, strlen, llamamos a esto "strlen" Todas estas funciones de cadena, por lo que es una función strlen, y es súper útil, porque podemos usarlo para decir simplemente, Hey, strlen: Esto es una cadena, dime cuánto tiempo es. En la conferencia de hoy, David habló mucho acerca de cómo se implementa strlen, lo que realmente está sucediendo detrás de las escenas. Pero este es uno de los más prácticos muy super. Hay otros que también están en la biblioteca de cadenas, como strcmp, que se escribe "strcmp" que se utiliza para comparar cadenas entre sí. Los demás que va a utilizar como strstr, que es bueno para encontrar secuencias sub y así sucesivamente. En su mayor parte, todos comienzan con la cadena y luego pasar a ser otra cosa. La razón por la que en realidad no les escribe como cadena y así sucesivamente es porque en como los primeros días de C, cuando la gente era la primera escritura y todo eso, tenían limitaciones en el número de caracteres que puede utilizar para los nombres de funciones y nombres de variables, así que todo es como súper condensada. Pero cada vez que veo algo que empieza con str, que normalmente significa que esto tiene algo que ver con una cadena. Muy bien, así que tienes que obtener la longitud de la cadena, y entonces, ¿qué hacemos con los personajes? ¿Sabes, Sam? >> No tengo ni idea, yo estaba tratando de averiguarlo. Realmente no lo sé - Me gustaría que hubiera alguna manera de - Quiero decir, yo creo que tal vez podríamos hacer algo con pares e impares, pero yo no conozco ninguna función así. Si. >> Pero eso - no necesariamente funcionaría, porque entonces usted conseguiría los espacios a ser - usted tendría que tener el espacio para obtener consejos sobre cómo - Bien. >> No sé - soy de clase perdido en este punto. Sí - no, no, no, estos son buenos puntos. Así que lo que tenemos que hacer es, al igual que Sam dijo: necesitamos para rastrear qué cartas son las cartas impares, y cuáles son las letras, incluso. Pero queremos asegurarnos de que no sólo estás buscando a la par e impar Los índices de la cadena, sino más bien mirar las cartas pares e impares en la cadena, así que tenemos que tener un poco esta distinción entre letras - como lo que en realidad es A, B, C, D, o así sucesivamente, y las cosas que no son letras, pero todavía en nuestra cadena. Por ejemplo aquí, como este signo de exclamación no es una letra, pero sigue siendo parte de nuestra cadena, es aún un char. Asimismo, todos estos espacios - no tiene sentido para aprovechar un espacio, ¿no? Así que queremos asegurarnos de que estamos de alguna manera omitir los sin dejar de rastrear pares e impares. Así que un poco en nuestra caja de herramientas de programación hasta el momento, si se quiere, tenemos un número de diferentes herramientas que hemos hablado. Así que una, por ejemplo, son variables, como hemos hablado aquí. Otra de las herramientas que hemos hablado son funciones. Hasta ahora hemos hablado acerca de las variables en nuestro pseudocódigo aquí como lo que vamos a utilizar para almacenar nuestra cadena. Hemos hablado de funciones para obtener la longitud de una cuerda, como strlen. Hemos estado hablando de otra cosa, y hemos hablado de ello de mucho antes en la sección de hoy: bucles. ¿Qué piensan ustedes sobre el uso de un bucle en este programa? Jared, ¿qué te parece? ¿Podríamos utilizar un bucle en este programa? >> Probablemente no, no, porque usted no tiene que ir a través de él más de una vez. Bueno, usted no tiene que pasar por lo que más de una vez? >> La cadena completa. Bien, así que usted no tiene que pasar por toda la cadena una vez. Lo siento que no tenía ningún sentido! Usted no tiene que ir a través de toda la cadena más de una vez. Bien. ¿Qué te parece? >> Creo que es mejor usarlos por lo que podemos hacer como capitalizar mientras la ubicación de la misma es el número de [inaudible]. Grande, y así capitalizar qué? Bueno, por lo que estamos diciendo que debemos utilizar un bucle porque queremos una letra en mayúsculas, mientras que no es un número. Así que - lo siento, ¿te gustaría añadir? >> Yo iba a decir que la manera de tratar a la cadena y [inaudible] aparte de [inaudible] en los personajes? Si. >> Y entonces podemos asignar los números a - o basándose en la ubicación de las letras en la cadena? Si. >> Y identificar si es par o impar y capitalizar la propia carta mientras que la ubicación de la carta es [inaudible] - lo siento. Grande. Así que sólo un resumen. ¿Me puedes recordar tu nombre otra vez - Lo siento. >> Charlotte. Charlotte, está bien. Entonces, ¿qué está diciendo Charlotte, que es totalmente correcto - Dios, esto le gusta auto guión en mí - es que si nos fijamos en una cadena como esta en la parte superior - "Thanks for the add" - como una secuencia de caracteres donde el está en la posición 0, la h está en la posición 1. A es a 2, entonces tenemos 3, 4, 5; el espacio está en la posición 6. Considerando - ¿cuál es la posición de f? 7! O? 8. R? 9. Y luego tenemos a 10, y entonces yo realmente no se puede escribir sin ella poco ensuciarse en la pantalla. Pero esto es en realidad la forma en que se puede hablar de cadenas en memoria. Es una cadena es una secuencia de caracteres, y cuando nos referimos a un carácter individual en una cadena, que a menudo lo hacen con referencia a la posición del personaje dentro de la cadena, probablemente de la misma manera que hablamos de septiembre siendo el noveno mes del año o el lunes es el primer día de la semana. Así que esto nos proporciona una forma de averiguar cuáles son impares incluso frente a porque usted puede ver aquí, si lo coincidan con esta camiseta, se puede ver que todas las mayúsculas están en posiciones pares, al menos para la primera palabra, y entonces las cosas son arrojados fuera una vez llegamos a ese espacio, porque no se tienen en cuenta este espacio como una carta, así que es como si empezáramos y fue 0, 1, 2, 3, 4, 5, espacio, 6, 7, 8, el espacio, 9, y luego 10, 11, 12, y así sucesivamente. Cool, así que sin duda tendrá que usar algún tipo de bucle para revisar cada uno de los personajes a su vez. Por lo tanto en este punto, vamos a volver a nuestro pseudocódigo viejo aquí. Como parte de esta identificación de cuáles están en mayúsculas y cuáles son minúsculas, vamos a querer hacer esto en algún tipo de bucle. Loop, colon. ¿Qué tipo de bucle, de los tipos de bucles que tenemos, parece ser una buena opción para usar en este caso? >> Yo estaba pensando el bucle for. ¿Y por qué está usted pensando en bucle? >> Debido a que empieza en cero y, a continuación, cuando llegamos a la longitud de la cadena, y entonces cada iteración puede [inaudible], también? Sí, exactamente. Así, de las opciones diferentes de bucles, que tenemos para bucles, los bucles while y do-while. Cuando un bucle es particularmente útil es cuando se quiere saber clase de donde usted está en el bucle, cuántas veces el bucle ha sido ejecutado hasta ahora. Que es exactamente lo que queremos saber en esta situación, como Kelly dijo: con sede fuera del comentario anterior de Charlotte que queremos saber la posición del carácter dentro de la cadena, y el bucle for nos dará exactamente eso, porque si empezamos especie de mirar hacia atrás en nuestra cadena, si empezamos nuestro lazo para a 0, y se sube a través de la longitud de la cadena completa, entonces podemos asociar la letra T con el 0 en nuestro bucle for, letra H con el 1 en nuestro de bucle, y así sucesivamente, va todo el camino a través del extremo de la cadena. Así que vamos a empezar a programar esta un poco sólo para ustedes tener una idea de cómo se ve. Voy a guardar esto, así que tenemos nuestro código pseudo aquí, y voy a borrar todo. Así que tengo una pizarra en blanco. Voy a empezar por escribir int main (void) { Voy a poner el 0 retorno en y luego el.} Así que por lo general cuando empiezo a programar, esto es lo que empezar. Lo guardaré para que ustedes lo tienen. Así que una de las primeras cosas que hablamos fue recibiendo la entrada del usuario y su almacenamiento en una cadena. ¿Cómo hacemos para que la entrada de un usuario? >> GetString. GetString, está bien. Así que si escribo GetString () y un punto y coma. Vamos a tratar de ejecutar este, se esta carrera, en primer lugar? ¿Y por qué no va a funcionar esto? >> Usted tiene que declarar la variable. Tengo que declarar una variable. Bien. Entonces, ¿cómo puedo hacer eso? ¿Te importa escribir algo, compartirlo? Y luego podemos subir. Vamos a ver, Dan, ¿verdad, está bien. O Daniel. Copiar en que, de entrada cadena = GetString (). Awesome. ¿Esto correr? Vamos a intentarlo. Golpe de ejecución, el código fuente subir, edificio, ocurrió un error. Bien. Entonces, qué se está encendiendo aquí? El uso de 'cadena' identificador no declarado. >> Tenemos que incluir las bibliotecas? Sí, así de Dan diciendo que tenemos que incluir las bibliotecas. ¿Es eso lo que ibas a decir, Stella? Awesome. Eso es impresionante, por lo que Stella, puede copia este código de espacio de Daniel? Si hace clic sobre Daniel Roland Ki, copiarlo, y luego se coloca la línea include, y luego guardarlo fuera? Avísame cuando estés listo. Así que esta sintaxis de inclusión es también una especie de cobarde; hay como esa etiqueta hash, Y ahí está el incluir, y luego están los corchetes angulares. ¿Te acuerdas de cómo funciona esto, o debo poner en el código aquí mismo? >> Estoy bien. Bien. >> Lo imprimí - No estaba seguro de qué biblioteca, sin embargo. Oh, está bien - sí, por lo que es la biblioteca CS50. >> Oh, puse biblioteca stdio. Oh, lo tengo - sí, no, eso es - por lo que resulta que la cadena es realmente algo que es especial para CS50. Hay en realidad no es un tipo de cadena true porque aquí, la cadena está en la posición tipo, - estamos declarando una variable de entrada se llama de tipo cadena - y estamos poniendo dentro de la entrada el valor que se devuelve a nosotros: la salida de esta llamada a la función GetString. Puedes decir que esto es una llamada a la función porque tiene los paréntesis, al igual que printf hace, al igual que strlen hace. Pero cadena no es en realidad un tipo real en el lenguaje C. Lo hemos hecho en un tipo, y vamos a tomar algo más lo que realmente es en C, porque no hay una manera de trabajar con cadenas; que acabamos de hacer algo para que se vea un poco mejor. Así que aquí vamos. Aquí está el código de Stella. Tiene el # include . Otras personas llaman a esto como un hash a veces incluyen o pueden incluir una afilada. Ahora podemos empezar, ejecutarlo, y todavía obtener un error. Vamos a ver lo que pasa. "Variable no utilizada 'input'". Bien, eso está bien, está bien. Quiero decir, no es genial, porque estamos recibiendo un error y no está en funcionamiento, pero lo que esto quiere decir es que no hemos usado nuestra variable, lo que tiene sentido. No hemos tratado de hacer nada con ella. Esta es una forma que Clang está tratando de ayudar a asegurarnos de que no sólo estamos utilizando variables y luego sin querer llamarlos otra cosa más adelante en nuestro código, ayudando a evitar los errores de esa manera. Muy bien, así que tenemos la entrada de usuario, que se almacena en una variable. El siguiente paso fue entonces empezar a buscar en todos los caracteres de la cadena y la identificación de cuáles van a ser mayúscula y cuáles han de ser minúsculas. Y al igual que Kelly y Charlotte criado, hacemos esto con un bucle for. Entonces, ¿Alguien se acuerda de la sintaxis de un bucle for y me gustaría tomar una puñalada en la escritura justa la primera línea del bucle for, sólo para el rato? Kelly, ¿quieres darle una oportunidad? >> Sí, así que hay que inicializar primero, así que me puse = 0, y luego hice i > Sí, metí la pata un poco, pero sí. Bueno, vamos a tirar de él hacia arriba. Awesome. >> Pero entonces yo no sabía si tenía que - Sí, está bien. Así que aquí está lo que Kelly tiene: vamos a ver pronto. Así que ella se incluye la biblioteca CS50 en la parte superior. Ha incluido la biblioteca estándar de IO en la parte superior, y el IO estándar tiene funciones como printf, por lo que si alguna vez quieres usar printf, necesita esa línea. Y entonces se incluyó la biblioteca cadena, que vamos a necesitar, porque la biblioteca de cuerdas tiene la función strlen, que vamos a llegar en sólo un poco. Así que si nos fijamos en lo que Kelly ha hecho aquí, Qué nos puede caminar a través de lo que hiciste? >> Sí, que sí - Digo, tengo errores, así que - Sí, no, es - >> Así que quería llamar a la cadena que me vino a mí "cadena". Quería imprimir la cadena y entonces - Yo quería como establecer la cadena como una matriz como de cada personaje ser diferente [inaudible], ¿no? Y entonces yo quería empezar en la posición 0 y luego cada 2 espacios, Me iba a capitalizar, así que sólo lo describió como el 23, porque yo estaba mirando la tabla ASCII. Así que eso es lo que estaba pensando - Sé que no está bien. Lo tengo, así que esto es un gran comienzo. Creo que mucha de la estructura está en su lugar aquí. Vamos a pasar por tipo de línea a línea y ver lo que está pasando. Así que la manera que me gusta hacer esto acaba de empezar compilando el código y dejar que el compilador me dice como lo que le pasa a mi código, ya que el compilador es realmente bueno en que le dice lo que está mal con su código. Así que si la tocamos, la construcción, y no se acumula. Se dice que hubo un error, por lo que si desplácese hacia abajo y busque en el primer error, dijo - que desplazarse de nuevo hasta la parte superior, podemos ver que hay 5 errores generados por aquí, en la parte inferior. Vaya, eso es realmente corta. Supongo que simplemente no va a conseguir nada mejor. Aquí vamos. Así que hay 5 errores totales generados. Aquí sólo puedo ver las 2 primeras, por lo que se puede mover esto un poco y luego tipo de desplazamiento hacia arriba. Este es el comando que se ejecutó para compilar el código, y luego el primer error fue en file.c aquí: "Se espera identificar o '('", y fue en esta línea donde dicha cadena = GetString (). Se puede ver aquí que estaba en la línea 8 de file.c, y entonces yo creo que esto es de 12 caracteres - que es el error. Así que lo que va mal en la línea 8 - Kelly? >> Usted sólo tiene que llamar, como una carta o algo así, s como cadena o algo así? Sí, por lo que resulta que estos nombres de tipos especiales, así string, int, corto char, que son todas las palabras clave especiales, y en realidad no se pueden utilizar como nombres de variables, porque el compilador ve eso y dice: "Oh, ya sé que es un tipo" así que en realidad no se puede tener una variable de cadena denominada cadena, como que estoy tratando de hacer aquí, lo que no va a funcionar. Pero en cambio, podemos decir que es algo así como s u st o str. Tampoco se podría llamar int. No podemos tener una cadena llamada int. No podemos tener una cadena denominada char; ninguno de ellos va a funcionar. Así que simplemente lo llamaremos s por el momento. Awesome. Así que lo próximo que está pasando en esta línea? String - esta línea se ve muy bien? Vamos a darle otra oportunidad, vamos a ejecutarlo. Bueno, por lo que aún con errores. Esta vez, estamos a 4 errores. Así que nos dieron una de ellas. Vamos a subir. "Nombre de tipo inesperado 'cadena': Expresión esperado", ¿no? >> Sí, eso es porque he intentado nombrar la cadena. Sí, lo que parece que ahora también tenemos que ir fix todas estas referencias a cadena. Usted puede ver que hay una referencia a la cadena de aquí, uno aquí, uno aquí, para que podamos pasar todo esto a s. Grande. Bueno, ejecútelo de nuevo. Edificio - otro error. Bien, ahora que estamos a un error, así int i = s y luego los corchetes. Entonces, ¿Puedes contarnos un poco acerca de lo que estaba haciendo aquí, Kelly? Sí >>. Estaba en la línea 10. >> No sé si necesitábamos todo, pero creo que yo estaba tratando de - Lo guardaré para que pueda seguir adelante. >> Creo que estaba tratando de decirle que comienzan en la posición 0 al principio de mi bucle for, así que creo que tal vez esta palabra no era necesaria. Así que para recapitular, usted decía que esto - que estaban tratando de iniciar esta en la posición 0 Y conseguir esto - si, así que creo que antes, también, cuando iban caminando por el código, que estaba hablando de cómo quería tratar la cadena como una matriz por lo que podemos acceder a cada personaje individualmente. Creo que Dan matrices mencionadas, también, tratando de convertir cadenas en arrays. Resulta que el tipo de debajo del capó, una cadena que se almacena como una matriz ya, y se puede acceder a ella como una matriz; no hay conversión que usted tiene que hacer. ¿No es una cadena - so - una cadena no es realmente una matriz, pero se puede acceder a ella como tal, ya que todos los caracteres se almacenan uno al lado del otro en la memoria de uno, así que si usted desea conseguir el primer carácter de la cadena, es lo mismo que recibir el primer número entero en una matriz de enteros. Así que muchas veces - nos volveremos se refieren a la 2 como oh, como una cadena, como una matriz, aunque en realidad - son cosas muy diferentes, pero se pueden tratar muy parecidos. Así que resulta que esta línea en realidad - no es necesario realizar ninguna conversión, y, de hecho, esto en realidad no es una expresión válida, que es lo que nuestro compilador nos está diciendo. Es como decir, "Hey, espera una expresión, y lo que tenemos aquí es algo que no es una expresión. " Para declarar una matriz, todo lo que tiene que hacer es algo como esto con un punto y coma, y luego te digo la matriz cuánto tiempo desea que sea, tal como 5, por lo que esta línea 10 declarará una matriz llamada i con 5 enteros en el mismo. Este es un lado, lo que no es necesario que el código, pero esto es - esto es algo de lo que la declaración parece. >> ¿Cómo no se utiliza char i [strlen (s)]? Char i [strlen (s)]? I >> char, y luego dentro del paréntesis, strlen (s). Sí, por lo que podría - que podíamos hacer esto, y esto sería declarar - ¿qué esto? >> Creo que sería declarar una matriz de, como - de - oh, no es necesario el i - oh, sí, definitivamente no es necesario el i. Debe declarar un array de caracteres s de longitud. Y así, lo que Sam está diciendo es que esta línea 10 - déjame poner un poco de espacio entre él y el resto para que podamos aislar - esta línea 10 se declara una matriz de caracteres, strlen (s) por valor de ellos, pero en realidad es necesario el i, y la razón por la que necesitamos i es porque tenemos que dar un nombre de la matriz; de lo contrario, no tendría una forma de referirse a la matriz más adelante en el código. Así que esto de aquí es el nombre de la matriz y en el interior es la longitud. Esto nos dará una matriz, pero esto es - de nuevo, esta es una declaración. No es un trabajo, no es una inicialización. Si declaramos esta serie como esta, hay realmente nada en el contenido de la matriz. Es sólo basura - lo está ahí. Y como hemos dicho, que en realidad ni siquiera es necesario hacer esta conversión, porque ya podemos tratar cadena s como una matriz. Sé que nos estamos quedando un poco largo en el tiempo, pero quiero conseguir realmente rápidamente a este bucle for y le mostrará cómo tener acceso a los caracteres individuales de la matriz, porque eso es clave para nuestra misión. Y entonces te dejaremos ir de allí. Así que aquí, tenemos un bucle for que se ve casi bien. Lo que no es del todo casi llegamos? Como se llame - lo que no está del todo bien en esto por bucle? >> No hay llaves? No hay llaves, por ejemplo. Quiero asegurarme de que tenemos el cuerpo del bucle con llaves. Vaya, no la llave de cuadrado! ¿Y qué es lo siguiente que tenemos que hacer con este bucle? Si trato y ejecutarlo, cuál es este error que me sale? Tengo todos estos errores - que tengo que inicializar i. Grande. Así que este será un bucle - esto no es muy allá, pero está muy cerca. Este código, ahora puede correr, construir, un error se sigue produciendo. ¿Por qué se siguen quejando, diciendo que la expresión no se utiliza, y eso es porque esta línea no hace nada. No lo guarde en cualquier lugar, no teníamos guardar el resultado. ¿Dónde deberíamos estar ahorrando este resultado? >> S o i? Exactamente, y esta sintaxis funky, este s con los corchetes significa acceder al carácter i de s. Eso va a ser algo que es realmente importante para la asignación. Por desgracia, vamos a tener que parar aquí, de modo que la sección Sebastián puede entrar, pero estoy feliz de estar fuera después, y tomarán las preguntas. Así que gracias chicos por venir. Esto debería cargar, crear, ejecutar. Podemos entrar en una cadena como "hola" y se imprime "qox". [Risas] Así que no hay bastante, pero en movimiento, consiguiendo a los bucles! Gracias por venir, y voy a estar fuera.