Section 6

Section 6

>> JASON HIRSCHHORN: Bienvenido,todo el mundo, hasta la semana 6. Estoy feliz de verlos a todos vivos y biendespués Cuestionario 0, porque sé que era un poco áspero. Pero, por suerte, gracias a todoshizo increíblemente bien. Y lo que es maravilloso. Si estás en mi sección, le he dado másde hacer una copia de sus exámenes ya. >> Un par de ustedes, me voy a encontrar condespués de la clase. Y si usted es un estudiante de la extensión y lausted no ha recibido su concurso de nuevo sin embargo, el TF está probablemente trabajando en elloy clasificación, y lo recuperará a la brevedad. Así que mis estudiantes de extensión que sonviendo ahora mismo - en vivo con suerte - Voy a conseguir sus cuestionariospoco así. >> Nuestra agenda para hoy es el siguiente. En primer lugar, vamos a repasar algunosrecursos que CS50 proporciona. Vamos a repasar Cuestionario 0 siguiente, yVoy a responder a cualquier pregunta que nadie tiene alrededor de problemas concretos. Y luego, vamos a ir más de/ S de archivos y problemas 5. Estos dos últimos temas se llevarán ael grueso de la sección actual. >> Pongo esta lista cada semana como unrecordatorio a todos ustedes, pero de núcleo sección, sólo tenemos 90 minutos - queno son capaces de cubrir todo lo que yo le encantaría cubrir para ustedes. Pero tenemos un montón de recursos paradibujar sobre como se llega a saber el material y el trabajo a través desu problema se pone. >> Un recordatorio de que tengo en línea un textocuadro, creado para que usted pueda llenar si tener ninguna reacción para mí,tanto positivos como constructiva, sobre la sección. Esa URL se encuentra aquí abajo. Así que por favor, tome un momento si usted tiene cualquierretroalimentación, ya sea durante la sección, o después, o después de ver el videoen línea, para darme su reacción. Realmente aprecio todos y cada uno de ellos. >> Así que he estado teniendo conversaciones pequeñascon una gran parte de mi estudiantes durante toda la semana - lo entregopruebas de espalda, hablando de la Por supuesto, al ver cómo lo está haciendo. Y un tema ha surgido una ymás de hablar de - en en particular - boletines de problemas. Y he encapsulado ese temaen el tablero en este momento. >> En esencia, hay una diferenciaentre el encendido en algo que es se hace correctamente y algolo que se hace bien. La mayoría de la gente ha estado haciendo fantásticoen términos de corrección - De 5 o 4 de sobre todos los conjuntos de procesadores. La mayoría de la gente se estáaquellos todo el tiempo. >> Sin embargo, sólo porque usted ha hechoalgo bien no significa que has hecho algo tan elegante, ode manera eficiente, o la forma más limpia que podría haber hecho. Y eso es lo que el diseño - y, en menor grado, el estilo - ejes son para. Así que todos ustedes estoy presionando, y otros FFestán empujando ustedes, no sólo a su vez en lo que es correcto, pero a su vezen las cosas que son codificadas también. >> Si no lo hace innecesario que los bucles,No volver a calcular las variables si usted no tiene que hacerlo. Por ejemplo, mirando de nuevo a conjunto de problemas4, cuando la colocación de los ladrillos en la pantalla, cada fila - todos los ladrillos en unafila dada tiene la misma coordenada y - la misma altura de coordenadas. >> De modo que la coordenada y no necesitabanse calculará en el interior del interior anidado bucle FOR que probablemente utilizóponer los ladrillos en la pantalla. Sólo hay que calcular cadavez que encendió una fila, o movido hacia abajo una fila. Así que decir que si hay 10 ladrillos en unafila, cada ladrillo puede tener el mismo coordenada, y que la coordenadasólo se puede calcular una vez para todos aquellos. >> No necesita ser calculado 10tiempos, ni tampoco esa necesidad cálculo a ocurrir en el actualfunción de llamada - la nueva llamada a la función gracked. Así que si eso fue un poco confuso parausted, más genéricamente, las cosas que no es necesario que suceda cada vezvas a través de un lazo para no deberían ser poner dentro del bucle FOR, y no debesuceder cada vez que vaya a través del bucle FOR. >> Otro buen ejemplo de diseño que vimosen la semana 3 por 15, usted podría mantener pista del cero. Así que al inicializar el tablero,save - en una variable global, tal vez - la x y coordenada y del cero. Y entonces cada vez que - en su función de movimiento, cada vez que hagasun movimiento acertado, se actualiza la ubicación de la cero. >> Eso le ahorrará el tener que hacerbucles for anidados para mirar a través de la abordar cada vez que en su función de desplazamientoy encontrar el cero, o encontrar la baldosa, a continuación, compruebe lo que hay al lado. En su lugar, usted tiene la ubicación de lacero, usted puede simplemente mirar arriba, abajo, y a la izquierda y derecha de la misma, para encontrarla baldosa que estaba buscando. >> Así que en términos de los programas que estamosescritura, nunca son lo suficientemente grandes que algunas de estas decisiones de diseñoson realmente va a obstaculizar su programa o hacer que se ejecute más lentamente,o tal vez se quede sin memoria. Pero seguimos empujando ustedesescribir tan elegante y código eficiente posible. >> Así que si usted termina de escribir las cosasque tienen una significativamente mayor ámbito de aplicación, que se escribirá con buenadiseñar además de ser correcta. Así que algunos de ustedes tienetraído eso. Eso es algo que estamos buscando -algo que vamos a seguir empujarte chicos en. >> Si alguna vez tiene alguna pregunta acerca de ladiseño de su programa, no dude en para llegar a mí, y estoy feliz decaminar a través de su programa con usted, y señalar algunos de los diseñosdecisiones que tomó, y le dará un poco de sugerencias sobre cómo hacer que inclusomejores decisiones de diseño. >> Así que vamos a seguir adelantea hablar de Prueba 0. Antes de hacer eso, ¿alguientiene alguna pregunta acerca de lo que He cubierto hasta ahora? >> [Crujido] >> JASON HIRSCHHORN: Siete segundos. Aceptar. Vamos a hablar de Prueba 0 para un poco. La mayoría de ustedes tienen su concurso espalda de 0. Si no lo hace, es de esperarrecuerdas un poco. Pero si usted ha tomado Cuestionario 0, entoncesTambién tendrá acceso al PDF en línea en las soluciones de muestra. >> ¿Alguien tiene alguna pregunta antes denos lanzamos en el material de la semana sobre un problema particular en el concurso 0 - ¿por qué la respuesta es lo que es? ¿Hay alguien confundido acerca de algo? Incluso si usted tiene el problema de la derecha, perosimplemente le gustaría que le explique un poco más, estoy feliz de hacerlo ahora. >> Así que le he pedido a ustedes paravenga preparado con un poco de pensamientos acerca del concurso 0. Entonces, ¿quién le gustaría que noscomenzó con una pregunta comentar acerca del concurso 0? >> [Crujido PAPEL] >> JASON HIRSCHHORN: No todo el mundohizo perfectamente. Así que sé [risas] tiene que haber algunas preguntasCuestionario sobre 0. Aceptar. Sí. Ompica. >> OMPICA: Número 10. >> JASON HIRSCHHORN: Número 10. ¿Cuál era el número 10? >> OMPICA: The - >> JASON HIRSCHHORN: I haven't - >> OMPICA: include - >> JASON HIRSCHHORN: Número 10 era de ochopara i - i escribir ocho a? >> OMPICA: Si. >> JASON HIRSCHHORN: OK. Así que otra pregunta que podría tenerpreguntó fue premonitorio estoy? La respuesta es sí. En la sección antes de la prueba, le preguntéustedes para codificar tanto Sterling y ocho a i. Ambos se pasó aaparecer en el cuestionario. Así que espero, que pagóatención a eso. >> Y si lo hubieras hecho, entonces usted tendría queprobablemente hecho bien en los dos. Pero ocho a i, en realidad no nos Códigoen clase, pero fue, de nuevo, preguntó en el cuestionario. Así que un par de cosas a tenerseñalar al codificar ocho a i. Lo primero, por la pregunta, eraque usted necesita para comprobar si la cadena era igual a nulo. >> Un par de personas trataron de comprobar más adelanteen el programa si s abrazadera i era - por lo que un carácter específico en questring - era igual a nulo. Pero recuerde, que es esencialmente nula -Es bueno pensar en null como un puntero cero -un puntero a cero - en algún lugar de la memoria dondenunca se puede tener acceso. >> Así que si algo es igual a null,sabemos que no se ha inicializado, o no hay nada allí. Así que s es una estrella char, ssoporte de i es un char. Así que tiene sentido comparar s en null,pero no s abrazadera i en null. Pero una vez más - así que eso fue lo primero queque se suponía que hacer - asegúrese de que usted realmentetiene una cadena real. >> A continuación, te quería ir a través decada carácter de la cadena. Y así, eso sería como un soporte de si, por ejemplo, si i es el iterador. Y dar ese carácter, yobtener su valor real. Usted lo tiene almacenado como un char, peroel valor ASCII para el cero - cero como un personaje - no es en realidad el número entero cero. Es algún otro número que puedamirar hacia arriba en la tabla ASCII. >> Así que una manera de corregir para que -probablemente la mejor manera para corregir que - se resta de élel valor del carácter - cero como un carácter. Comilla simple Así que menos, cerootra comilla simple. Eso llevará el número que tienecomo char, y hacerlo igual a el número como un número entero real. >> Y que es muy similar al enfoquemucha gente tomó en el problema conjunto 2, con Césary Viginere - esas cifras, cuando seellos fueron rotando. Así que después de que lo tienes como un número delcero a nueve, a continuación, - dependiendo a dónde va en el número final -que necesita para multiplicarlo por una potencia de 10. >> Algunas personas se trasladaron de nuevo a lafrente, y multiplicado el individuo número por una potencia de 10. Algunas personas se trasladaron deel frente hacia atrás - y así se llevó el más altoordenar números primero - y salvaría los de unvariable de contador global. Y entonces cada vez que a través de la DElazo, multiplique ese gigante mundial contrarrestar variable 10, para hacerespacio para el siguiente carácter. >> Así que fue un poco confuso y sinyo escribiendo en la pizarra. Pero la solución de la muestraestá disponible para usted. Pero esas eran las cosas grandesque estábamos buscando. También una comprobación para asegurarse de que cadacarácter individual era de hecho un carácter entre cero y nueve años, y noalgún otro personaje, al igual que una A, por ejemplo. >> Esas eran las cosas que estábamos buscandoen esa pregunta. ¿Responde esto a su pregunta? >> OMPICA: Si. >> JASON HIRSCHHORN: OK. ¿Hay otras preguntasCuestionario sobre 0? ¿Qué pasa con la compilación? Todo el mundo la compilación correcta? No. Había un - [Risas] ¿Una pregunta sobre laproceso de compilación? Wow. >> [Crujido PAPEL] >> JASON HIRSCHHORN: Si. Michael. >> MICHAEL: ¿Es el número 7 - al azar? >> JASON HIRSCHHORN: Número 7. Número 7 era obtener un número entero aleatorio. Excelente. Así que te dan un número entero a y unb entero, y quieres un azar número entero entre a y b. De hecho, podemos escribir éste enel tablero, porque éste Era una línea de código - una manera de hacerlo. >> Así que se nos da como un Drandfunción que podría utilizar. ¿Y qué hace Drand - suponiendo que ha sido cabeza de serie - lo que no Drand volver? >> MICHAEL: Un flotador entre 0,0 y 1,0. >> JASON HIRSCHHORN: Varios - sí. Un número entre 0 y 1. Y así hemos B y A. Y luego tenemos nuestro número aleatorioentre 0 y 1 que nos ha dado Drand. Algunas personas trataron de poner b, o b menosa, o algo dentro de los paréntesis. Eso significaría que sonargumentos de esta función. >> Drand no toma ningún argumento -como getString hace No tome ningún argumento. Así que es sólo paren abiertas, cercaParen - y que, en sí, es la llamada de función. Y eso le da un númeroentre 0 y 1. Por supuesto, tenemos toda una gamaque los números pueden estar adentro >> Digamos, si b es 10 y es 5, que realmentequiero un número con un rango de 5. Así que lo siguiente que tenemos que hacer esmultiplique esto por el rango b, menos una. Así que suponiendo que eso multiplicado. Y eso nos dará un númerodentro de un rango dado. Y ese rango específico de ser eldiferencia entre B menos una. >> Y, por último, que sólo voy a dar desde -decir el rango entre b, menos una es 5, eso nos da unanúmero de 0 a 5. Pero si a es en realidad 5, tenemos que impulsareste rango hasta donde es en realidad supone que, mediante la adición de una. Así que tiene la derecha de la lógica. Y entonces, ¿tendríaotra pregunta? >> MICHAEL: No. Me siento muy tonto en estos momentos. [Risas] >> JASON HIRSCHHORN: No. No se sienta realmente tonto. Un número de personas que luchócon esta pregunta. Y luego, la otra pregunta es, Drand,usted ha dicho, le da un flotador - devuelve un float. Pero esta función realmente pidiópara un entero sea devuelto. >> Usted no tiene que jugar esta carta de forma explícitaa un número entero, porque estos operaciones se tratan como un todoflotar - como un número de punto flotante. ¿Te gusta esta voluntad - incluso si estoes un número entero, esta voluntad debe multiplicarse correctamente. Toda la multiplicación funcionará. No es necesario para lanzarlo aquí. De hecho, usted no debe lanzarlo. >> Eso lo haría - si usted desea emitir un númeroeso es entre 0 y 1 - un número al azar, un punto flotante - entonces o bien ser sólo 0 o 1, de modosi no se pierden todos los que la precisión. Pero al final, cuando regrese,se pone automáticamente envió como un entero. Así que usted no tiene que hacerque echando a ti mismo. >> Así que esta era la respuesta aque se trate, el número 7. ¿Alguna otra pregunta sobre Cuestionario 0? Sí, Annie. >> ANNIE: ¿Cuándo usamos recursivo - cuando usamos bucles iterativos? >> JASON HIRSCHHORN: Cuando usted utilizarecursivo - de modo más general, la pros y los contras de la recursividad frenteun enfoque iterativo. ¿Alguien puede ofrecer un profesional o una estafa? ¿Por favor? No puede nadie. ¿Quién puede ofrecer un profesional o una estafa? >> [Crujido PAPEL] >> ESTUDIANTE 1: recursiva es menoscodificación - teclear menos? >> JASON HIRSCHHORN: Así que en general,recursividad en especial, una función - o un algoritmo como fusióntipo - que se presta a un enfoque recursivo - podría ser más sencillopara codificar de forma recursiva. Y así más sentidohacerlo de forma recursiva. Así que sería un profesional de la recursividad. ¿Otros? ¿Sí? >> Estudiante 2: Con para la recursividad - Utiliza más memoria. >> JASON HIRSCHHORN: Entonces, ¿la derecha. Una función recursiva mantendrá añadiendomarcos de pila a la pila. Así que si usted está trabajando en un montón denúmeros, y tienen que llamar a este funcionar mucho, entonces sin dudaocupan más memoria, mientras que un enfoque iterativo pondrá solamente unmarco de pila en la pila, porque todo sucede dentro de una función. >> Cualquier otro pros y los contras? Sí. >> ESTUDIANTE 3: Pros de la recursividad. Usted no tiene que determinar enavanzar en el número de veces que el código tenía que ser repetido. Usted puede tener un número predeterminado deveces que usted tiene que repetir, entonces recursividad es mejor, porqueque se necesita ese resultado. >> JASON HIRSCHHORN: Creo que eso es cierto. Pero creo que en ambos casoslo haría nunca - usted probablemente obtener algunaentrada del usuario. O esta función tendría alguna entradaque determinaría el número de veces que debe ejecutar. Así que en general, no lo harías codificar -incluso en un enfoque iterativo - how muchas veces que bucle debería correr. >> ¿Tuviste otra eraspensando, Annie? Aceptar. Así que estos son probablemente los dos - el mayor pro y el mayorCon para una recursiva frente un enfoque iterativo. Aceptar. Algo más sobre Cuestionario 0? >> Vamos a pasar. File I / O. Hay un maravilloso cortoesta semana en el archivo de E / S que se espera usted ha visto múltiplesveces, y admirado. Una gran cantidad de trabajo fue en eso, y no tengooído es increíblemente servicial. También incluí el enlace en esta diapositiva,en caso de que usted no ha tenido un oportunidad de verlo 10 veces. >> Por lo tanto, vamos a repasar brevemente laprincipales pasos para abrir y trabajar con los archivos y, a continuación vamos asumergirse en un problema de codificación antes de examinando el conjunto de problemas. Así que de nuevo, me voy a poner esto enla pantalla, pero yo voy a hablar de sólo un minuto acerca de lo que estamoshace aquí con el archivo I/O-- ¿Qué significa eso? >> Eso significa que podemos crear nuestraprogramas y, a continuación, tener nuestros programas salida, y no han hecho ningún impacto enel mundo exterior de nuestro programa. Pero cuando empezamos a trabajar con archivos -tanto su lectura y la creación de ellos - podemos tener algún efecto sobre lamundo exterior de nuestro programa. >> Al igual que si Microsoft Word no pudopara que todos los documentos de Word, a continuación, una vez que Microsoft Word dejar de fumar, la totalidad de sutrabajo se ha ido, y sería realmente inútil. Nosotros, en última instancia queremos ser capaces deescribir programas que pueden afectar a la mundo que les rodea, tanto mediante la adopción deentradas complejas - en términos de archivos y a través de archivos, y también la creación interesantey salidas de peso - en cuanto a los diferentes tipos de archivos. >> Así que es por eso que estamos empezando aaprender a trabajar con los archivos. Más específicamente, ¿quélo que hacemos es la siguiente. Es muy simple. Sólo hay un par de pasos, yque se enumeran aquí en este código. Así que vamos a ir a través deeste código línea por línea. >> En primer lugar, se ve resaltado - cuando se trabaja con un archivo,independientemente del tipo de archivo se trata, usted necesita para abrirlo. Y es que con una llamada a fopen - aquí mismo. Incluya el nombre del archivo. Si el archivo no está en el directorio,o la carpeta donde este programa vida, entonces también tienen que incluiruna ruta en la que archivo es. >> Vamos a suponer que estaarchivo llamado "text.txt" - un documento de texto simple - se encuentra en lamisma carpeta que este programa es. Así que esa es otra cosa a tener enmente - que si desea abrir un archivo en otro lugar, que realmente necesitapara incluir su ubicación. >> En segundo lugar, usted puede pasar un argumento afopen, y eso es lo que quieres hacer con el archivo. Hay tres argumentos principales queusted va a pasar a fopen. ¿Quién me puede dar los tres? ¿Quién me puede dar uno de ellos? Sí. >> Estudiante 4: El nombre del archivo? >> JASON HIRSCHHORN: Lo siento. Tres argumentos principales que se pueden pasarcomo segundo argumento a fopen. Tienes razón - el nombre del archivoes el primer argumento. Pero el segundo argumento a fopen songeneralmente tres cuerdas, y - sí. Aleja. >> ALEJA: A para anexados. >> JASON HIRSCHHORN: A, si quieresanexar a un archivo que ya existe. >> ESTUDIANTE 5: R para leer. >> JASON HIRSCHHORN: R, siquiera leer desde un archivo. >> ESTUDIANTE 6: W para escritura. >> JASON HIRSCHHORN: Y w, siquiero escribir en un archivo. Así que en este caso, estamos escribiendoal archivo, por lo que tenemos w. Lo abres, usted también tiene que guardar elarchivo en algún lugar, y eso es con la código para el lado de la mano izquierda deel operador de asignación - Estoy creando un puntero a un archivollamado, en este caso, el archivo. >> Nosotros no nos vamos a preocupar de loesta todo en mayúsculas cosa FILE es. Baste decir, que es un largocorriente de ceros y unos. Y así es como vamos aoperar y entenderlo. >> Lo siguiente que tenemos que hacer - yesto es muy importante - cada vez que abra un archivo - de hecho, cada vez que se llama a malloc, porejemplo, y conseguir un poco de memoria y tratar de y guardarlo en un puntero, siempreque desee comprobar para asegurarse de que de que función no volvió nulo. >> Así que en este caso, estamos comprobando que hacerAsegúrese de que realmente abrió la archivo correctamente, y habíaningún error en nuestro programa. A continuación, una vez que hemos comprobado para asegurarseque tenemos un archivo de trabajo, podemos escribir o leer,o agregar en el archivo. En este caso, simplemente estoy imprimiendouna línea a este archivo. >> ¿Cómo lo sé? Bueno, estoy usando esta funciónllamada fprintf. Todas las funciones que va a utilizaral escribir o leer desde o la manipulación de archivos será similar alfunciones que has visto antes, pero comenzar con la letra F,de pie para archivo. Y fprintf, a diferencia de nuestra normal de impresiónaplicación, toma un argumento adicional, y que es el archivo donde seque desee imprimir esta línea. >> Yo no tengo nada queel derecho de los ohai. Yo no tengo la terceraargumento de printf - o el segundo argumento de printf, eltercer argumento a fprintf, porque no tienen los marcadores de posición aquí. No estoy incluyendo cualquier variable. Pero, de nuevo, fprintf y todos estos archivosfunciones que operan con archivos en general se va a necesitar el archivoen la que están operando. >> Finalmente, la última cosa importante ahacer es cerrar el archivo, al igual que con - siempre que malloc algo,queremos liberar algo, no sea que nos tener una pérdida de memoria - que queremospara cerrar nuestro archivo. Si este programa salió sin cerrarel archivo, las probabilidades son nada iría mal, especialmente si seera un pequeño archivo. >> Pero sin duda es un buen estilo de codificacióny practicar siempre cierre su archivo cuando haya terminado de utilizarlo. Así que eso es lo básico de archivo de E / S.Usted probablemente ha visto esto antes, o vimos que en ese fantástico corto. ¿Alguien tiene alguna pregunta, antes deentramos en una cierta codificación práctica problemas, sobre archivo de E / S o elpasos yo nos fuimos de nuevo? >> [PULSA SOUNDS] >> JASON HIRSCHHORN: ¿Tiene ustedtiene una pregunta, Avi? >> AVI: No. >> JASON HIRSCHHORN: OK. Voy a esperar otroSiete segundos. [Risas] Esa es una muy buena propina. Ustedes simplemente no les gustahaciendo preguntas. Eso está bien. Aceptar. Así que nuestro problema es la primera práctica, estamosva a duplicar la función de una herramienta de línea de comandos que probablementeutilizado antes - copia - la herramienta de copia. Si escribe cp y luego pasarlo dosargumentos en su terminal, puede copiar un archivo. Y eso es lo que vamospara escribir en estos momentos. >> Así que de nuevo, la lectura fuera de esta diapositiva, mea escribir un programa que toma dos y sólo dos de línea de comandosargumentos - un archivo de origen y un archivo de destino - y copia el contenido de la fuentepresentar al archivo de destino un byte a la vez. Así que eso es mucho pedir. >> Una vez más, un buen método para esto esNo ir directamente al código C, pero descomponerlo en un par de pasos. En primer lugar, pensar en la lógica - exactamentelo que te estoy pidiendo que hagas - y comprender la totalidad de lapasos a este problema. No se encuentra en C, sólo en algunos pseudocódigo,o incluso un modelo mental de ¿qué está pasando. >> A continuación, una vez que tenga el pseudocódigo abajo,averiguar cómo el pseudocódigo mapas en las herramientas y las cosas que hemosaprendido a usar en C. >> Y, por último, una vez que tenga todo lo quejuntos, puede codificar el problema. Tome 5 a 10 minutos atrabajar en este problema. Voy a poner las instruccionesuna copia de seguridad en un segundo. Y luego vamos a ir másel pseudocódigo, y el código que viven como un grupo. >> Si usted tiene alguna pregunta mientras estástrabajando en esto, no dude en plantear tu mano, y vendréalrededor y responderlas. >> ESTUDIANTE 7: ¿Puedo deslizarun pedazo de papel? >> JASON HIRSCHHORN: ¿Qué pasa? >> [PULSA SOUNDS] >> JASON HIRSCHHORN: OK. Vamos a repasar el pseudocódigo primero, yentonces yo te voy a dar un par más minutos para terminar la codificación. >> ¿Quién quiere empezar me offcon la primera línea de pseudocódigo para esta función? >> ESTUDIANTE 8: Revise para asegurarse de quele dieron dos archivos. >> JASON HIRSCHHORN: OK. Y si no lo somos? >> ESTUDIANTE 8: Yo regresaría 0. >> JASON HIRSCHHORN: Si volvemos 0? >> ESTUDIANTE 8: Regreso a - supresión. Lo siento. >> JASON HIRSCHHORN: Si. Probablemente no es 0. Debido a 0 significa que todo estaba bien. Aceptar. Así que esa es la primera líneade pseudocódigo. ¿Quién tiene la segunda línea de pseudocódigo? >> ESTUDIANTE 9: Abierto tanto a los archivos? >> JASON HIRSCHHORN: Abra ambos archivos. ¿De acuerdo? >> ESTUDIANTES 10: Compruebesi el archivo es NULL? >> JASON HIRSCHHORN: Compruebede que ni son NULL. Como acotación al margen - slash 0 - es que NULL? >> ESTUDIANTES 11: No. >> JASON HIRSCHHORN: Eso no es NULL. Eso se llama el terminador NULL. En realidad se escribe con una sola l. Así que comprobar algo en contra de eso -eso es en realidad un personaje - así que el revisar algo en contra de que seno es igual que la comprobación para ver si es igual a NULL. >> Y algunas personas - en sus pruebas y su problemajuegos - tienen la dos de los confundidos. Pero los dos de ellos sonde hecho diferentes. Uno termina una cadena - uno es un puntero a 0. >> ESTUDIANTES 12: ¿Por qué no le echa aasegurarse de que los archivos no son NULL antes de abrirlos? >> Así ahorra abierta: JASON HIRSCHHORNalgo en ese archivo. Y si vuelves aquí - por lo que esta línea - fopen - le dará una dirección y tiendaesa dirección en archivo si funciona. Si no funciona,almacenará NULL - >> ESTUDIANTES 12: Oh. Aceptar. Te tengo. >> JASON HIRSCHHORN: En el archivo. Así que no puedes comprobar NULLantes de que usted los haya abierto. NULL significa algo que no hizotrabajar correctamente. Aceptar. Así que asegúrese de no decir? ¿O? ¿Qué pensamos? Vamos a ir con eso. >> ESTUDIANTES 13: Es. >> JASON HIRSCHHORN: ¿Es? Tampoco es? >> ESTUDIANTES 13: Es. >> JASON HIRSCHHORN: OK. Parece que tenemos un poco deconsenso sobre eso. Tampoco es NULL. Bueno, la próxima línea de pseudocódigo. ¿Quién no me ha dado una línea todavía? Vamos a esperar para usted. Sí. >> ESTUDIANTES 14: Hay que leerdesde el primer archivo? >> JASON HIRSCHHORN: OK. >> ESTUDIANTES 14: O utilizamos fscanf oalgo así como que el primer archivo? >> JASON HIRSCHHORN: Así que queremosleer desde el primer archivo y - vamos a poner que justo aquí. Leer desde el archivo de origen. Y entonces, ¿qué hacemos después de queleer desde el archivo de origen? Alguien más? >> ESTUDIANTES 15: Escribir enel archivo de destino? >> JASON HIRSCHHORN: Le escribimos parael archivo de destino, y - Aceptar. ¿Qué más nos falta? Alguien más que no me ha dado unlínea de código sin embargo - de pseudocódigo. Sí. >> ESTUDIANTES 16: Tal vez siempre se puede comprobarsi hay algo que leer para, como la siguiente línea? Que son como la línea siguiente,ver si existe. >> [ELECTRÓNICA BEEP] >> JASON HIRSCHHORN: Vaya. Esa es mi software de diario. ¿Sí? >> ESTUDIANTES 16: Así es. >> JASON HIRSCHHORN: Así que dara mí una vez más. >> ESTUDIANTES 16: Compruebe si haysiendo una próxima línea de la archivo de fuente para leer. >> JASON HIRSCHHORN: OK. Así que no estamos leyendo las líneas -estaban leyendo bytes aquí - pero estás en lo correcto. Queremos leer y escribir hastano existen más bytes. Aceptar. Y lo que estos deben ser realmente sangríaun poco, porque están ahí abajo. ¿Cierto? Hasta que no estamos fuera de bytes, que vamos aleer desde el archivo de origen y escribir al archivo de destino. >> Y entonces, ¿qué es lo últimolínea de pseudocódigo? Alguien que no es dadomí algo todavía. >> ESTUDIANTES 17: Cierre los archivos? >> JASON HIRSCHHORN: Exactamente. Cierre los archivos. Así que ahí está nuestro pseudocódigo. Voy a poner el pseudocódigo engedit, y en un par de minutos que cifrará esto juntos. >> Aceptar. Vamos a empezar como un grupo. Nishant, tengo mi nuevo archivo. Acabo de abrir esto. Untitled document 1. ¿Qué es lo primero que debo hacer? >> NISHANT: Incluya las bibliotecas? >> JASON HIRSCHHORN: OK. ¿Qué bibliotecas? >> NISHANT: stdio.h, stdlib.h, creo? >> JASON HIRSCHHORN: OK. ¿Qué es stdlib para? >> NISHANT: se me olvidó. >> JASON HIRSCHHORN: OK. Así incluir stdio. ¿Qué debo hacer antes incluso deEmpiezo codificación? >> NISHANT: Escribe un encabezado? >> JASON HIRSCHHORN: ¿CómoQué debo hacer para que color? >> [VOCES interponiendo] >> NISHANT: ¿Cómo conseguir que color? >> JASON HIRSCHHORN: ¿CómoQué debo hacer para la codificación de colores? >> NISHANT: No sé. Oh. Guardar. >> JASON HIRSCHHORN: Save. Sí. Debería guardarlo como un archivo. C. Así que guardarlo en el escritorio como cp.c. Sweet. Y si quiero conseguir el estilo completopuntos, lo que habría de hacerlo incluir en la parte superior? >> NISHANT: Se puede escribir su nombre, nombredel programa, y ​​el propósito del programa así? >> JASON HIRSCHHORN: Tiene buena pinta. Excelente. Así que nos has empezado perfectamente. # Include - nosotros también vamos a escribir - Aceptar. Así que creo que todo lo que estoy listo para ir. ¿Quién tiene la primera línea de código para mí -o las primeras líneas de código que que se necesita para satisfacer nuestra primeracomentar en pseudocódigo? Usted. >> ESTUDIANTES 18: ¿No debería ser intargc, y luego char * argv? >> JASON HIRSCHHORN: Creo quetienes razón. Vamos a cambiarlo a int principales, paren abiertas,int argc, coma, char * argv? Al igual que? >> ESTUDIANTES 18: Soportes. >> JASON HIRSCHHORN: Soportes. Soporte Abrir, cerrar el paréntesis,cerca de los padres. Perfect. Ahora puedo tomar argumentos de línea de comandos. Aceptar. Asegurarnos de que nos dan dos archivos. Usted me puede dar eso también. >> ESTUDIANTES 18: Si argc - éste no es igual a 3. >> JASON HIRSCHHORN: Si paren abiertasargc no es igual a 3? >> ESTUDIANTES 18: Sí, regrese1 ni nada. >> JASON HIRSCHHORN: Lo siento. >> ESTUDIANTES 18: Retorno 1 ni nada. >> JASON HIRSCHHORN: Vuelta 1. ¿De acuerdo? Grande. Abra ambos archivos. ¿Quién puede ayudarme a abrir ambos archivos? ¿Quién no me ha dado el código todavía? Kurt? >> KURT: Así que todas las tapas de origen estrella F-I-L-E. >> JASON HIRSCHHORN: Voypara sacar las vocales. Esos son cool. Es como Tumblr. >> ESTUDIANTES 18: igual a fopen - >> JASON HIRSCHHORN: igual a fopen? >> ESTUDIANTES 18: paren Abiertas,argv, soporte abierto. >> JASON HIRSCHHORN: Espera. Lo siento. Paren en Abrir. Aceptar. >> ESTUDIANTES 18: Así es. Argv sub 1. >> JASON HIRSCHHORN: Sub 1? >> ESTUDIANTES 18: Así es. Argv paréntesis abierto 1 - Sí. Y luego coma y haga doble abiertacita, r, comillas dobles, cerca paren, y coma. >> JASON HIRSCHHORN: Sweet. Y ¿qué pasa con el otro? >> ESTUDIANTES 18: Muy similar, pero en lugarde S-R-C, que se dice que D-S-T. >> JASON HIRSCHHORN: Oo! Me gusta eso. >> ESTUDIANTES 18: Sólo D-S-T. Sí. Y entonces argv, soporte abierto, 2. Sí. Y entonces w en lugar de r. Sí. >> JASON HIRSCHHORN: Muy bien. Siguiente par de líneas. Además, si alguien tiene cosas que añadir alíneas que hemos hecho, no dude en añadir esos también. Asegúrese de que no es NULL. ¿Quién me puede dar el código que necesitosatisfacer esa línea de pseudocódigo? Archer. >> ARQUERO: Si el original es igual a los igualesNULL o dst es igual a los iguales NULL, entonces regresa - >> JASON HIRSCHHORN: ¿Qué? >> ARQUERO: Return 2? >> JASON HIRSCHHORN: Return 2. Así que si src paren abierto es igual aes igual a NULL, o - lo que thing's - pipa? Pipe? Lo llamaremos tubería. Tubería, tubería, dst es igual a los igualesNULL, devuelve 2. ¿De acuerdo? Hasta que no estamos fuera de bytes - que tipo de saltamos este paso dela parte pseudocódigo para ir a aquí. >> Pero hasta que estemos fuera de bytes -lo que hace que el sonido tiene? ¿Qué tipo de estructura C - pero yo no uso la palabra estructura,porque vamos a empezar a utilizar que en otros casos - pero la herramienta C suena eso? >> ESTUDIANTES 19: Un bucle. >> JASON HIRSCHHORN: Un bucle. Suena como un bucle. Entonces, ¿quién me puede dar la primera líneadel código del bucle aquí? También puede elegir qué tipo debucle que desea, si me das esta línea de código. Hay tres tipos. Te dan a elegir. Yo sugeriría una de esas. Avi. ¿Qué quieres? >> AVI: FOR. >> JASON HIRSCHHORN: FOR. >> AVI: int i es igual a cero. >> JASON HIRSCHHORN: OK. >> AVI: Esta parte no estoy seguro. Pero i es menor que el tamañode la fuente de estrella? No estoy seguro de eso. >> JASON HIRSCHHORN: OK. >> AVI: Debido a que usted desea que eltamaño de un archivo, ¿no? >> JASON HIRSCHHORN: Así que esto probablemente no lo harános dan el tamaño de la actual archivo en bytes. Entonces, ¿qué otra cosa podíamos hacer? ¿Qué otro tipo de bucle? ¿O debemos seguir con el bucle PARA? >> ESTUDIANTES 20: ¿Puedes un bucle WHILE? Y entonces, lo que haría es you'd - porque tenemos un char * para el archivo. Así que si sólo seguimos incrementando quehasta que nos íbamos a encontrar el carácter NULL en Al final de la misma? O no, es que no se como funcionan los archivos? >> JASON HIRSCHHORN: Así podemos mantenerincrementando el char * hasta que encontremos el NULL - >> ESTUDIANTES 20: mantener Esencialmente ircarácter a carácter hasta que llegamos a el final del archivo. >> JASON HIRSCHHORN: Si. Así que eso es lo que queremos hacer. Queremos seguir leyendo, carácterpor su carácter, hasta llegar a el final del archivo. >> ESTUDIANTES 20: Así es. Encontrar - ¿cuál es el fin o la señal de stopal final de un archivo de texto. >> JASON HIRSCHHORN: OK. Así que cuando llegamos al final del archivo -¿cómo sabemos que hemos llegado el final de un archivo? Si estoy llamando - así que vamos a dar un paso atrás. ¿Qué es una función? Vamos a ir a esta línea aquí. Leer desde el archivo de origen. ¿Quién me puede dar esa línea de código? >> ESTUDIANTES 21: fscanf? >> JASON HIRSCHHORN: fscanf. Aceptar. ¿Qué pasa si quiero leer, muyespecíficamente, un byte? >> ESTUDIANTES 21: No sé. >> JASON HIRSCHHORN: OK. Incluso más simple que fscanf - lo que es una - Quiero leer de un archivo de origen? Leer de un archivo de origen. ¿Qué es una función - sí. >> ESTUDIANTES 22: Es fread? >> JASON HIRSCHHORN: Fread. Creo que vamos a seguir conque uno por ahora. ¿Qué tipo de argumentosembargo, toma fread? >> ESTUDIANTES 22: Probablemente el tipo de archivo,y luego ubicación en el archivo? >> JASON HIRSCHHORN: ¿Qué puedo escribir aquípara averiguar qué tipo de argumentos fread necesita? >> ESTUDIANTES MÚLTIPLES: Hombre fread. >> JASON HIRSCHHORN: Hombrefread y fwrite. Parece que pasar el rato juntos. Así fread toma cuántos argumentos? >> ESTUDIANTES 23: Cuatro. >> JASON HIRSCHHORN: Se necesitacuatro argumentos. Se necesita un puntero, un tamaño, y quecosa, lo cual es raro, y algunos archivos. ¿De acuerdo? Vamos a leer sobre ello aquí. "La función fread lee n membelementos de datos, cada uno de bytes de tamaño de longitud, desde el flujo apuntado portransmitir, almacenándolos en la ubicación dada por el puntero ". >> Así que cuatro argumentos. ¿Por qué no puedo simplemente copiar esto,y pegarlo aquí. Aceptar. Entonces, ¿quién puede empezar a llenarestos argumentos para mí? Avi. >> AVI: Saque el vacío. Ponga simplemente src. Saque puntero y la estrella. Coloque el original. Entonces - >> JASON HIRSCHHORN: Así que voy a dejar deEstás ahí, porque eso es incorrecto. Tienes razón con el original, perodonde src debería ir? >> [VOCES interponiendo] >> JASON HIRSCHHORN: debeir por aquí. Ese es el src - nuestra src es un tipo. Echemos un vistazo aquí. Esto es pedir para un tipo FILE *, queen realidad suele verlos así. Así que esto es pedir un argumento deTipo de archivo * llamado arroyo que es el original. ¿De acuerdo? >> ¿Qué tamaño de las cosas hacenqueremos leer? Yo te di esto en eldescripción del problema. >> ESTUDIANTES 24: Un byte a la vez. >> JASON HIRSCHHORN: Un byte. ¿Qué tan grande es un byte? Su tamaño es en bytes, así que lo quepuedo poner ahí? >> ESTUDIANTES 25: Primero. >> JASON HIRSCHHORN: Primero. Derecha. Su tamaño se encuentra en la unidad de bytes,de modo 1 es de 1 byte. ¿Cuántos no quiero leer a la vez. >> ESTUDIANTES 26: One? >> JASON HIRSCHHORN: Una de las cosas. Quiero leer una cosa de tamaño1, un bocado a la vez. ¿Y dónde lo pongo, una vez que lo leo? >> ESTUDIANTES 27: Destino? >> JASON HIRSCHHORN: Así que no puedo poneren línea recta en destino. >> ESTUDIANTES 28: Eres a poneren un tercer puntero? >> ESTUDIANTES 27: Para el destino. >> JASON HIRSCHHORN: OK. Sí. >> ESTUDIANTES 29: Se puede declarar algo queactuar como un almacenamiento temporal anterior. >> JASON HIRSCHHORN: OK. Dame eso. >> ESTUDIANTES 29: Otro archivopuntero, tal vez? >> JASON HIRSCHHORN: OK. Así que esta es nula estrellas - que es un tipo void estrella, por lo que no hacetiene que ser un apuntador de archivo. Y si estoy leyendo un byte,donde sería un buen lugar para almacenar un byte? >> ESTUDIANTES 29: Una matriz? >> JASON HIRSCHHORN: Una matriz. Aceptar. ¿Y qué otra cosa es algo que essólo el tamaño de un byte? >> ESTUDIANTES 30: Un char *? >> ESTUDIANTES 29: Así es. >> JASON HIRSCHHORN: Un char *no es de un byte. >> ESTUDIANTES 29: A car. >> JASON HIRSCHHORN: Un char es un byte. ¿Cierto? Así que vamos a llamar a este buffer es un genériconombre usado para estas cosas que almacenar algo temporal. Así que creo un búfer. ¿Cierto? Pero hace falta ser un void *. Así que tal vez tienes razón, quedebe ser un tampón de tamaño 0. Así que almacena uno - derecha. >> Debido a que esta aquí - Charbuffer es un personaje, pero esto toma un void * - un puntero. Así que yo podía hacer esto y ahoratampón es un puntero. ¿Qué otra cosa podía hacer? >> ESTUDIANTES 31: Ponga una estrella junto a char. >> JASON HIRSCHHORN: pudehan creado char *. Aceptar. ¿Cuál es otra cosa que podía hacer? ¿O vamos a ir con éste. Char * buffer, así que lo queCómo puedo poner aquí? >> ESTUDIANTES 31: Buffer. >> JASON HIRSCHHORN: Buffer. Buffer es un puntero a un char. Y en ese lugar, estamos poniendoun byte de algo que hemos leído. Sí. Avi. >> AVI: Sólo una pregunta rápida. ¿Quieres malloc tampón? >> JASON HIRSCHHORN: ¿Quién puederesponder a esa pregunta? >> ESTUDIANTES 32: Bueno, en realidad nopunto a nada en este momento, por lo que - >> JASON HIRSCHHORN: Pero hacerqueremos malloc él? >> ESTUDIANTES 32: Si se va a hacer de esamanera, supongo, sí, porque lo que se necesita un lugar para que apunte a. >> JASON HIRSCHHORN: ¿Tenemosque malloc él? >> ESTUDIANTES 33: Si usted va ausarlo fuera del bucle. >> JASON HIRSCHHORN: ¿Vamos autilizarlo fuera del bucle? >> ESTUDIANTES 34: Si. >> ESTUDIANTES 35: Espera. ¿Queremos declararen el bucle hasta más allá? >> JASON HIRSCHHORN: Así que supongo que tenemosalgunos seudo bucle WHILE aquí donde estamos tratando de averiguar, queno hemos llegado a todavía. No necesitamos a malloc ella. Estamos operando en el principal, que sólo vapara ser utilizado dentro de este bucle. No tiene por qué existir, fuera de esta. >> Así que puede ser una variable local. Usted tiene un puntero auna variable local. >> ESTUDIANTES 36: Pero no esapuntando a nada. >> JASON HIRSCHHORN: No, no lo esinicializado a nada. Pero no vamos a utilizarlo también. Vamos a poner algo enes la primera vez que lo utilizan. Así que parece que está bien. Así que no necesitamos malloc aquí. Y creo que está bien como está. Aceptar. Tenemos la línea fread. Vamos a hacer la siguiente línea. >> Si queremos escribir en un archivo, lo que esuna buena función a utilizar para hacer eso? >> ESTUDIANTES 37: fwrite? >> ESTUDIANTES 38: fprintf? >> JASON HIRSCHHORN: fprintf es uno. ¿Qué otro? >> ESTUDIANTES 39: fwrite. >> JASON HIRSCHHORN: fwrite. Y para nuestros propósitos, fwrite,que hemos visto aquí, es probablemente la mejor opción. Lleva cuatro argumentos también. Nishant, le puede darme los argumentos? >> NISHANT: El primer curso de unaser sólo tampón. >> JASON HIRSCHHORN: OK. >> NISHANT: El segundo desólo va a ser 1. En tercer lugar uno va a ser 1. Y el cuarto va a ser el horario de verano. >> JASON HIRSCHHORN: ¿Alguien tienealguna pregunta acerca de esa línea? Eso se ve bien. Aceptar. Así que ahora parece que lo único que estamosfaltante - en realidad, vamos a escribir esta última línea. Cierre los archivos. ¿Quién puede acabar con nosotros a la escrituraestas dos últimas líneas? Sí. Lo sentimos, ¿cómo te llamas? >> LUCY: Lucy. >> JASON HIRSCHHORN: Lucy. >> LUCY: src fclose y luegodestino fclose. >> JASON HIRSCHHORN: fclose, paren abierta,src, cerca paren, punto y coma. Y fclose - ¿si? >> LUCY: Abrir paréntesis, dsty luego por punto y coma. >> JASON HIRSCHHORN: Muy bien. ¿Y qué tengo que incluir al final? >> LUCY: Devuelve 0. >> JASON HIRSCHHORN: Devuelve 0. ¿Tengo que hacerlo? Sólo una pregunta. ¿Tenemos que incluir la rentabilidad 0? >> ESTUDIANTES MÚLTIPLES: No. >> JASON HIRSCHHORN: No. Principal lo hace automáticamentesi se llega a la final. Pero creo que es buenoincluir de forma explícita. Sobre todo cuando estamos volviendo otracosas a lo largo del programa. Aceptar. Esto es lo que nos falta - MIENTRAS qué? ¿Quién puede pensar en alguna - tiene un cierto sentido de lo que las cosaspodría entrar ahí? Incluso si es sólo en algunos pseudocódigocomo el lenguaje? >> ¿Qué somos en realidad - lo queQué queremos ir hasta? Sí, Lucy. >> LUCY: El final del archivo. >> JASON HIRSCHHORN: El final del archivo. Entonces, ¿qué quiere usted decir con fines de archivo? >> LUCY: Una vez que llegue a lafinal del archivo, para. >> JASON HIRSCHHORN: OK. Así que una vez que lleguemos al final del archivo. ¿Cómo sabemos si hemos llegadoel final del archivo? >> ESTUDIANTES 40: Creo búferse establecerá en NULL. >> ESTUDIANTES 41: Buffer se declaradentro del bucle. >> JASON HIRSCHHORN: Así que usted piensabúfer se establece en NULL. ¿Por qué habría de búfer se establece en NULL? >> ESTUDIANTES 40: Porque cuandofread, usted está tratando de poner nada en la memoria tampón. >> JASON HIRSCHHORN: OK. Así que usted está pensando fread - cuando hemos llegado al final de laarchivo, lo que se fread va a hacer? Creo que esa es la cuestiónlo que tenemos que averiguar. ¿Qué hace fread? ¿Pone NULL en tampón oQué hacer otra cosa? ¿Cómo podemos averiguar lo que hace? >> ESTUDIANTES 42: Hombre. >> JASON HIRSCHHORN: Hombre. Así que echemos un vistazo por aquí. Valor de retorno. En caso de éxito, fread y fwrite devolver elnúmero de artículos leídos o escritos. Este número es igual al número de bytestransferido sólo cuando el tamaño es 1. Si se produce un error, o el extremo de lase alcanza archivo, el valor de retorno es un número de elementos a corto o 0. >> Así que para nuestros propósitos, si alcanza freadel final del archivo, y lee desde al final del archivo, no hay nada a la izquierdapara leer, ¿qué va a volver? >> ESTUDIANTES 43: Zero? >> JASON HIRSCHHORN: ¿Qué? >> ESTUDIANTES 43: Zero? >> JASON HIRSCHHORN: Zero. Se va a volver a cero. Así que sabemos que fread, cuando hemosalcanzado el final del archivo, que está pasando para volver a cero. ¿Cómo podemos usar eso a nuestro favor? >> AVI: Puede declarar una variable fueradel bucle de llamada de verificación. Si el control es igual a - por ahora - uno. >> JASON HIRSCHHORN: OK. >> AVI: Y entonces usted puede poner un IFdeclaración de la derecha después de fread diciendo que si fread es igual a cero - No. >> JASON HIRSCHHORN: ¿Quiénpuede ayudar a Avi? >> AVI: ¿Cuál es el valordevuelto por fread? >> JASON HIRSCHHORN: Acabamosse fue por arriba de eso. >> AVI: ¿Cómo se representa esto? >> JASON HIRSCHHORN: Así que regresa - vamos amirar hacia arriba aquí - devuelve una size_t, que es esencialmenteun número entero. Por lo tanto, devuelve un entero. Y en nuestro caso, lo harádevuelve 1 o 0 - 1 si dijera una cosa - un byte,y 0 si hemos llegado al final. Así que si fread - ¿si? >> ESTUDIANTES 45: No se puede simplemente poner la plenafread (tampón, 1, 1, SRC) en el while? >> JASON HIRSCHHORN: Así que usted proponehaciendo esto en allí? >> [VOCES interponiendo] >> JASON HIRSCHHORN: Espera. Así que estamos librando de eso. Así que usted está proponiendo ponerfread en allí? ¿Qué debemos también moversi quieres hacer eso? >> ESTUDIANTES 45: El buffer exterior. >> JASON HIRSCHHORN: Deberíamostambién mover esto hacia fuera aquí. >> ESTUDIANTES 45: ¿Pero que constantementemoverlo hacia adelante? >> [VOCES interponiendo] >> JASON HIRSCHHORN: OK. Así que esto es lo que Okshar propuso. Creamos nuestro buffer. Nos fread MIENTRAS, entonces llamemos fwrite. Los pensamientos sobre esto? >> ESTUDIANTES 46: Mi única pregunta es, ¿lo haríaque en realidad ejecuta el comando fread? >> JASON HIRSCHHORN: Muy buena pregunta. Cuando usted está poniendo una llamada a la funciónen el interior de una condición, que hace llamada a la función ejecutar? Hemos visto ejemplos de esto antes. ¿Cierto? >> ESTUDIANTES 46: OK. Sí. Así lo hace ejecutar. >> JASON HIRSCHHORN: Hemos visto cosasasí antes, donde tenemos una llamada de función dentro de una condición. ¿Se ejecuta dicha llamada de función? Sí. Así que la respuesta es sí. Esta llamada a la función se ejecutará. Pero de nuevo, ¿es lo que queremos? >> ¿Cuál es una manera de que pudiéramos averiguarsi eso es lo que queremos? >> ESTUDIANTES MÚLTIPLES: Ejecutar esto? >> JASON HIRSCHHORN: Podríamos ejecutarlo. Pero antes de hacer eso, podríamosTambién razonar a través de este. Si - digamos que tenemos un byte en nuestraarchivo, vamos a llegar a aquí, vamos a llegar a este código. Esto ejecutará. fread devolverá un byte yalmacenarlo en la memoria intermedia. Y esto va a evaluar a 1,derecho, después de su regreso 1. >> Así, mientras que 1. ¿Significa eso que el código dentroEl bucle while se ejecutará? >> ESTUDIANTES 47: Así es. Es cierto. >> JASON HIRSCHHORN: Si. 1 es verdadera. No es 0. Así que el código dentro de aquí se ejecutará. Así que vamos a escribir eso. Vamos a pasar de nuevo a estelínea una vez más. Ahora que tenemos - estamos en el final de nuestro archivo. Leemos en el final de nuestro archivo,porque sólo tenía un byte en el mismo. >> Fread devuelve 0, tiendasalgo en tampón. Sinceramente, no sé quéalmacena en la memoria intermedia. Probablemente podríamos mirar hacia arribapara ver lo que hace. Eso, sinceramente, no lo sé. No sabemos a quién le importa lo quealmacena en tampón? Pero no devolverá 0. Y se MIENTRAS 0 ejecutar? >> MIENTRAS 0 no se ejecute. Así que vamos a pasar por aquí. Así que vamos a tener una votación a mano alzada si estees el código que debemos correr, o si debe hacer cambios primero. Así que si usted piensa - tienes que votar. Si crees que debemos ejecutar este códigocomo es, por favor, levanten la mano. >> Aceptar. Hay uno - ¿tienes una pregunta, preocupación? Sí. >> ESTUDIANTES 48: Después de que nos movemos búferfuera del bucle, ¿nos que malloc él? >> JASON HIRSCHHORN: Muy buena pregunta. Después nos movemos búfer fuera de lalazo, tenemos para malloc él? Esta es una pregunta alcance. Si inicializamos amortiguar fuerade este bucle, va a existir en el interior del bucle? >> ESTUDIANTES MÚLTIPLES: Si. >> JASON HIRSCHHORN: Si. Su ámbito de aplicación abarca el interior del bucle,y, en definitiva, cualquier cosa por debajo de ella en el interior de este código, incluyendo eldentro de las cosas aquí. Así que no necesitamos a malloc ella. Es una variable local, y su alcancetodavía incluye el bucle. >> ESTUDIANTES 49: ¿Es necesario para liberarlo? >> JASON HIRSCHHORN: ¿Tenemosnecesitar búfer libre? >> ESTUDIANTES 49: Sí, si no lo hacemos malloc. >> JASON HIRSCHHORN: ¿Tenemosnecesitar búfer libre? No lo sabemos. De nuevo, es una variable local,así que no tenemos que liberarla. Aceptar. Vamos a ver qué pasa. Por lo que es sin inicializar. Eso era lo que algo queMarcus propuso anteriormente. Así tenemos que el error, variable bufferno está inicializado cuando se utiliza aquí. >> ¿Cómo podemos solucionar este problema? >> ESTUDIANTES 50: malloc él? >> ESTUDIANTES 51: igual a NULL? >> ESTUDIANTES 52: Di búfer es igual NULL. >> JASON HIRSCHHORN: OK. Se ve bien. Tenemos ahora. Vamos a crear algo para tratar de copiar. Así que tenemos nuestro archivo de texto. ¿Cómo podemos ejecutar este programa? Sí. >> ESTUDIANTES 53: Puedes hacer puntoslash cp, test.txt. Y entonces usted puede nombrar a otro archivoel cual se almacenan en. >> JASON HIRSCHHORN: OK. Lo llamaremos out.txt. ¿De acuerdo? Culpa Seg. Reflexiones sobre el fallo seg? Esto es genial. ¿Cómo podemos averiguar dóndeel fallo segmento es? ¿Qué? >> ESTUDIANTES 54: Gdb. >> JASON HIRSCHHORN: Gdb. Corremos gdb escribiendo slash dot gdb,el nombre de nuestro programa. No hay argumentos de línea de comandos allí. Vamos a establecer unpunto de ruptura en principal. Si quiero empezar gdb, ¿qué hago? >> ESTUDIANTES 55: R. >> JASON HIRSCHHORN: R. ¿Y luego qué? >> ESTUDIANTES 55: Los argumentos? >> JASON HIRSCHHORN: Entonces elargumentos de la línea de comandos. Vamos a caminar a través. N es sólo me lleva línea por línea. Yo voy a ir hasta queMe sale mi culpa seg. No es mi culpa seg. Parece fread causadomi culpa seg. Sé fread causó mi culpa seg,porque esa era la la línea que acabamos de ejecutar. >> Y la única cosa que erapasando en esa línea - dos cosas estaban sucediendo. Fread iba, y luego nos quedamoshaciendo algunas comprobaciones WHILE. Estoy dispuesto a apostar que la MIENTRAScomprobación no estaba causando mi culpa seg. Lo más probable era freadcausando mi culpa seg. También veo algo aquí, memcopy. >> Copia de la memoria. Suena como la mudanza de memoria deun lugar a otro. Suena como algo que ocurriríaen fread, tal vez un poco de memoria pasar de aquí hasta aquí. Vamos a pasar por esto otra vez. ¿Cómo comienzo a lo largoy ejecutarlo de nuevo? Sí. >> ESTUDIANTES 56: ¿Es necesario ponerun símbolo de unión antes de búfer? >> JASON HIRSCHHORN: Así ampersand antesbúfer me daría la dirección del buffer, que es un char *. Repasemos esto una vez más. ¿Cómo se ejecuta a través de él una vez más? >> ESTUDIANTES 57: ¿Puede usted acabaEscriba Ejecutar de nuevo? >> JASON HIRSCHHORN: Sólo tienes que escribir run nuevo. Así que no vamos aejecutar esta línea. Así buffer es un puntero NULL. Corrija? Está apuntando a - vamos a ver. Si tenemos nuestra - hacer un dibujo rápido de esto. ¿Todos pueden ver siYo escribo por aquí? >> Así que en la pila, tenemos un local devariable y se llama buffer, y que es un puntero a un char. ¿Qué es esta dirección en caracteres? >> ESTUDIANTES 58: 0x0. >> JASON HIRSCHHORN: Así es. Eso es lo que es esto. Aquí, en el interior de amortiguamiento, se almacena 0x0. Eso es lo que tenemos - elconfiguración que tenemos en estos momentos. Así que esta línea, fread, pone algodesde la fuente de dónde? Dentro de esta caja, o de esta caja? ¿Qué caja? Caja o cuadro de la derecha, dejando? Este cuadro de la derecha. >> De ello se sigue el puntero,y lo pone en aquí. Cuando tratamos y la memoria táctil enubicación 0, ¿qué obtenemos? Un fallo de segmentación. Ese es el error que tenemos en estos momentos. Sí. >> ESTUDIANTES 59: ¿No tienesponer búfer estrella? ¿O no? Para fread? >> JASON HIRSCHHORN: Así freadtoma un puntero. Por lo tanto, pasa en tampón. Y entonces va a de-referenciaque en algún lugar dentro fread. Pero, de nuevo, vimos, se necesita un puntero. No necesitamos pasarlo búfer estrellas. Eso sería pasandoél lo que está aquí. Y eso probablemente nos daría un errorporque estamos de-referencia a ella. >> ¿Cierto? Cuando nos de-referencia este puntero, cuandotratamos de acceder a este lugar, estamos llegando a un error -nuestro fallo de segmentación. Por lo tanto - ¡Uy. Vamos a salir de gdb. Nuestra línea - nuestro problema - que es correctoaquí en esta línea. Y es un problema porquede esta línea. >> ¿Cómo podemos crear un cuadro quees accesible en fread. ¿Cierto? Tenemos que crear un cuadro que es unobyte grande, el tamaño de un char. Pero necesitamos que la caja sea accesibleCuando esta función se ejecuta. Entonces, ¿dónde - sí. ¿Alguna idea? >> ESTUDIANTES 60: Sólo tienes que configurar comocualquier carácter aleatorio. Sólo hacer iguales char bufferel carácter. Y luego, cuando hayas amortiguar allí - >> JASON HIRSCHHORN: Espera. Carácter tampón? Así que no hay estrellas? >> ESTUDIANTES 60: Así es. Saque la estrella. Igual a un personaje al azar. >> JASON HIRSCHHORN: OK. Así que dame una. >> ESTUDIANTES 60: Al igual que un o algo así. Y luego, cuando usted tiene búferallí, se utiliza un - >> ESTUDIANTES 61: Star? ¡Oh, no, el signo. >> ESTUDIANTES 60: Utilice el signo. >> JASON HIRSCHHORN: OK. ¿Y qué hay en fwrite? >> ESTUDIANTES 60: Utilice el signo más. >> JASON HIRSCHHORN: Muy bien. Así que su idea es, creamos un char yponer algo en él, y luego grabar en ese carbón. >> ESTUDIANTES 60: Así es. >> JASON HIRSCHHORN: ¿QuéQué piensa la gente? >> ESTUDIANTES 62: Ha enrevesado. >> JASON HIRSCHHORN: OK. Dibujemos a cabo. Así que esta vez, voy a sacar esto enrojo en la pila de aquí, y luego tendrá - ooh! Lo siento. Así que esta vez tenemos algo que se llamatampón, y es en la pila. Corrija? Y estamos ahorrando en ella un principio. >> Entonces tenemos nuestra llamada a fread. ¿Qué fread hace es que toma un byte denuestro archivo y lo pone en alguna parte. Se pone en cualquiera que sea ello está señalando. Bueno, antes de que tuviéramos esta dirección - 0x0. Ahora, ¿qué dirección tenemos? >> ESTUDIANTES 63: Lo que seabuffer de dirección es. >> JASON HIRSCHHORN: Lo que seabuffer de dirección es. Probablemente va a seralgo así. Probablemente va a comenzar con una b yuna f, y luego tiene otros seis dígitos hexadecimales. No tiene importancia. Algunos de direcciones. Y estamos de paso, que la dirección pulg >> Y vamos a poner nuestro únicoLo byte en esa dirección. Así que vamos a poner nuestro únicoLo byte aquí dentro. Y luego vamos a escribir desdelo que es siempre aquí dentro. ¿Alguien tiene alguna preguntaacerca de eso? ¿Quién piensa que este código va a funcionar? >> Levante su mano si usted piensaEste código funcionará. Usted tiene que tomar una postura. ¿Y quién cree que este código no funcionará? Levanten la mano. Todo el mundo debe serlevantando la mano. Aceptar. Michael, ¿dónde estás parado? >> MICHAEL: No puedo decidir. Tipo de en medio. >> JASON HIRSCHHORN: Eresen el medio. Elige una. >> MICHAEL: Voy a tener fey dicen que va a funcionar. >> JASON HIRSCHHORN: OK. Vas a tener fe y dicen que funciona? ¿Qué pasó? >> [VOCES interponiendo] >> JASON HIRSCHHORN: Sin culpa seg. ¿Cómo se puede comprobar que para ver sidos cosas son iguales? Dos archivos son iguales. >> ESTUDIANTES 64: Diff. >> JASON HIRSCHHORN: Diff. Cheques de diferencias para las diferencias entredos archivos, y si devuelve nada, son idénticos. Y si abrimos, tenemos nuestro archivo. Así que esa era la solución correcta. Echemos un vistazo hacia atrás en ella una vez más. En realidad, ni siquieranecesitará inicializarlo. >> Sería probablemente un aspecto un pocolimpio si usted no puso algo al azar en ese país. El punto es, que necesita crear unun poco de espacio para almacenar algo de fread y tomar algode fwrite. Y eso tenía que ser un local devariables en la pila - que podría haber malloc'd algo de espacio. >> Así que en realidad podría tenermalloc escrito aquí, y eso habría funcionado. Y entonces habríamos estado almacenandonuestras cosas en algún lugar en el montón. Pero esto es en realidad, probablemente,la solución más elegante. Basta con crear un poco de espacio en la pilapara que estas cosas pasan. >> Me gustaría tener otros dos comentarios. Si usted fuera a tomar a su vez en esto, yentonces quedan marcados en esto, mis comentarios sería de la siguiente manera. Estos 1 es aquí, para mí, mirarcomo números mágicos. Este 1, en términos de fread,tiene sentido. Ese es el número de cosaspara leer o escribir. >> Pero esta de aquí debeProbablemente sea algo más. Entonces, ¿qué es una solución? >> ESTUDIANTES 65: Tamaño de byte. >> JASON HIRSCHHORN: ¿Así? >> ESTUDIANTES 65: Tamaño de caracteres. >> JASON HIRSCHHORN: Tamaño de caracteres. Sí, el byte no es un tipo. Así que el tamaño de las obras carac. Podríamos tener, en la parte superior denuestro código, # define que. Llamado algo BYTE yes realmente un char. En realidad, un enfoque aún mejorque podría haber sido este - uint. ¿Alguien sabe lo que es eso? >> Lo siento. Lo tengo al revés. Espera, no. Por dónde se va? ¿Alguien sabe lo que es eso? Sí. >> ESTUDIANTES 67: Se supone que ayudará a estandarizara través de los sistemas de las cosas que tener - como enteros sin signoque tiene 8 bytes? >> JASON HIRSCHHORN: Eso esexactamente correcto. En diferentes máquinas,el tamaño de un char - no generalmente un char. Chars suelen ser un byte. Pero el tamaño de otros tipos de datos sondiferentes tamaños en una máquina de 32 bits frente a un equipo de 64 bits. A uint8_t es siempre de 8 bits - siempre un byte. >> Y tengo que incluir esaarchivo de cabecera estándar int. Así que ahora, esto habría sido probablementela mejor manera de escribir este código. Así que me libro de los números mágicos. Y también tengo un más lógicotipo de búfer. No es simplemente un char, es un byte,que es lo que esperamos que sea. >> Y hasta aquí, hemos hechosido un poco más robusto. No vamos a llamar a un char, que - tal vez, quién sabe - podría ser una diferentetamaño en diferentes máquinas. En realidad estamos diciendo que esto es exactamenteun byte, siempre, no importa qué. Y si miramos aquí, hacemos cp. Uh-oh. ¿Qué pasó? >> ESTUDIANTES 68: Podría estar encendido. >> JASON HIRSCHHORN: ¿Qué? >> ESTUDIANTES 69: ¿Lo es? >> ESTUDIANTES 70: Usted no lo hizolo definen como un tipo. >> ESTUDIANTES 71: Pero lo que deberíaser definido en la norma. >> ESTUDIANTES 72: ¿Qué está pasando? >> ESTUDIANTES 73: En caso de definir estar todo en mayúsculas? >> JASON HIRSCHHORN: Así que no es # define. En realidad, en este caso, estoyva a utilizar typedef. Debido a que estamos usando comoun tipo en un solo lugar. Así que en este caso, en realidad queremostypedef que estamos imprimiendo un nuevo tipo byte, y es, esencialmente, este. Es un poco diferente a # define. >> Y ahora, nuestro código funciona perfectamente. Así que, de nuevo, # define toma algo,reemplaza todas partes con lo otro. Es sólo una macro - taquigrafía para deshacerse de números mágicos. Pero en este caso, porque estamosutilizando como un tipo - aquí - para que eso funcione, necesitamostypedef a lo byte es. >> Y estamos definiendo aquí mismo. No es una estructura, en realidad essimplemente un entero sin signo. Es un byte de longitud. Este código estará disponible en línea, ytodos deben tener ahora mismo. >> Así que tenemos - perfecto - 13 minutos a la izquierda para irproblema por set 5. Quiero caminar por copy.c juntos,y entonces hablaremos brevemente sobre las otras partesdel conjunto de problemas. Así que permítanme levanto copy.c. Y lo bueno es que hemos hechoya se ha escrito mucho de este código. >> El código que escribimos, literalmente, sólosalió de aquí cuando era escribiendo esto en mi cuenta. Pero esto es copy.c, constituye la basepara las dos primeras partes de el problema establecido para whodunit.c, queque necesita para escribir, y resize.c. Recover.c, que es el tercero y últimoparte del conjunto de problemas, no es con sede fuera de este archivo. >> Vas a tener que escribir ese archivo,te damos una plantilla para que presentar, pero no tiene nadaque ver con copy.c. Pero debido copy.c es la base paralas dos primeras partes, vamos caminar a través de él ahora, para que tengaun buen sentido de lo que hace. >> Y los comentarios dan de parte de ella. Ya hemos escrito algo de esto. En primer lugar, nos estamos asegurando detenemos tres argumentos. A continuación, estamos recordando el nombre del archivo. Así que nos saltamos este paso cuandocodificamos lo nuestro - cuando nuestro cp. Pero aquí, están haciendoun poco más limpio. >> Están vigilando para asegurarseambos archivos son buenas, en Además de la apertura de ellos. Se escribió todo este código en este momento, así que estoyNo voy a detenerme en este código. El siguiente es un poco de materia que es específico paralos tipos de archivos que estamos utilizando, que son archivos de mapa de bits. Archivos de mapa de bits tienen algunos metadatosasociado con ellos. >> Así que el primer par de bytesle informará sobre el archivo. Ellos no son los colores deel píxel en esa imagen. Te dicen sobre el archivo. Y si usted lee a través del conjunto de problemas,usted tendrá mucha más información sobre qué tipos de estructuras de metadatosse incluyen con los mapas de bits. >> Pero es por eso que tenemos esta primeraconjunto de - el código aquí. Estamos leyendo los metadatos - dos piezas de metadatos - el archivoencabezado y el encabezado de información. Y estamos revisando algunas partes del mismo aasegúrese de que es un archivo de mapa de bits verdadera antes de continuar. >> Y una vez más, estos son los detalles queno es necesario ir a ahora. Si usted lee a través del conjunto de problemas,usted entenderá esto. Larga historia corta, estos son sólo diciendo,Este es un archivo de mapa de bits y confirmando que. >> A continuación, vamos a escribir losal archivo de salida. Vemos que aquí. Estamos escribiendo al puntero fuera. A continuación, estamos determinando relleno. Así que de nuevo, ya que es la particularidad conun archivo de mapa de bits, algunas líneas incluyen relleno en el extremo. Y si usted lee a través del conjunto de problemas,usted aprenderá más sobre el relleno. Esta es la fórmula para encontrar relleno. >> Importante recordar - cuando se cambia el tamaño de un mapa de bitsarchivo, los cambios de relleno. Cuando se cambia el tamaño de unarchivo, los cambios de relleno. Nunca va a sermayor que 3 - que va a ser de 0 a 3, inclusive. Pero cuando se cambia el tamaño dealgo, los cambios de relleno. >> Si sólo tengo un píxel en la fila, menecesita tres bytes de relleno, porque cada fila tiene que ser múltiplos de cuatrobytes de longitud en un archivo de mapa de bits. Pero si me doblo, para ir de un pixela dos píxeles, cada uno de los cuales, digamos, es un byte, entonces necesitodos bytes de relleno para hacer que igual a cuatro. >> Así que cuando se cambia el tamaño de algo,Tengo que cambiar la cantidad de relleno de lo que tengo. ¿Eso tiene sentido para todo el mundo? A continuación, iterar sobre cada fila,o a través de todas las filas. Y luego iterar a travéscada columna en cada fila. Estamos tratando a este mapa de bits comouna cuadrícula, como hemos tratado el tablero en 15. >> Como tratamos los ladrillos cuandonosotros los imprimimos en la pantalla. Una cuadrícula de filas y columnas. Entonces - vimos esto. En realidad solo codificamos esto. Hemos creado algunos de almacenamiento temporal. Leemos allí, y luegoescribimos a cabo. Esto es exactamente lo que acabamos de hacer. >> A continuación, porque dije: cada líneatermina en algo de relleno, que pasar por alto que el relleno - el viejo relleno. Y luego añadimos ti. En este caso, estamos creandoexactamente el mismo archivo. Estamos copiarlo. Así que esta línea es un poco tonto. Podríamos literalmente sóloponer el relleno pulg >> Pero si cambia el tamaño del archivo,¿Todavía quieres esta línea? Así que si queremos cambiar el tamaño de un archivo,Por qué seguimos queriendo saltar sobre el viejo acolchado? >> ESTUDIANTES 74: Si. >> JASON HIRSCHHORN: Así que lo que hacemos. Debido a esto, de nuevo, ofertascon el archivo de origen. Nosotros no nos preocupamos por el rellenodesde el archivo de origen. Queremos ir a la línea siguiente. Pero no nos limitamos a poner de nuevola vieja cantidad de relleno. Tenemos que volver a poner elnueva cantidad de relleno. >> Así que cuando estamos cambiando el tamaño de unaarchivo, todavía queremos pasar por alto el relleno en el archivo antiguo - loestamos leyendo desde. Pero lo que estamos escribiendo a, vamosa necesitar volver a poner un poco diferente número de relleno quehemos determinado. Sí. >> ESTUDIANTES 75: El orden de los doslíneas no importa, ¿verdad? Debido a que usted está manejandodiferentes archivos. >> JASON HIRSCHHORN: Exactamente. El orden de estas dos líneasno importa. Escribimos esta línea. Esto está aquí para el archivoestamos escribiendo a. Eso es importante, por lo que tenemos lacantidad correcta de relleno. Esto tiene que ver con el archivo en formato. Queremos pasar directamentesobre el relleno. >> No queremos leer - si estamos leyendo un byte a la vez, nosno se preocupan por los bytes de relleno. Queremos pasar a la siguiente línea. Por último al igual que Lucy le dio para nosotros,cerramos los archivos y volvemos 0. Así que esto es copy.c. Y que en realidad escribió - que pasamos la mayor parte desección de escribir esto, en esencia. >> Usted ha hecho esto. Así que espero que usted tiene un buen sentidode lo que está pasando aquí. La gran diferencia, la verdad, es sóloesta primera parte que se ocupa de peculiaridades de los archivos de mapa de bits. Así que tengo como mi siguiente diapositiva,¿Qué necesitamos hacer? Bueno, vamos a pensar en quién lo hizo. >> Y para alguien que lee a través deestablecer el problema, ¿qué hacemos que tenga que hacer en novela policíaca? Simplemente. Aleja. >> ALEJA: ¿Se puede sacar la partede cada píxel que denota rojo. Y entonces - tipo de? >> JASON HIRSCHHORN: OK. Así que sacar la parte de cadapíxel que denota rojo. Eso es cerca, pero no todos de la misma. >> ESTUDIANTES 76: Bueno, haydiferentes maneras de hacerlo. >> JASON HIRSCHHORN: OK. Dame una manera. >> ESTUDIANTES 76: Saque todo el rojo, ya continuación, hacer hincapié en el azul y el verde. >> JASON HIRSCHHORN: OK. Así que teniendo en cuenta estos dos sentidos - suena como que le damos un píxel, quetiene un nivel de color rojo, azul y verde. Queremos cambiar los niveles relativos deel rojo, azul, y verde, dependiendo en ese píxel. Cuando en este código debemos cambiarel familiar color rojo, azul y verde los niveles de un píxel dado. Después de que hemos leído - antes de escribir esto? Dame el número de línea. >> ESTUDIANTES MÚLTIPLES: 83. >> JASON HIRSCHHORN: 83. Así que aquí. Para quién lo hizo, el código es necesarioescribir todos deben ir a la derecha allí. Y eso es el único códigoque necesita para escribir. Porque, como hemos escuchado, todo lo que necesitahacer es cambiar estos azul relativa, niveles de rojo y verde de cada píxel. >> Usted ha leído todo, y ahora que estáva a escribirlo. ¿Cómo puedo conseguir - si tengo esta cosallama triple, justo aquí, y es de escriba RGBTRIPLE - bien, si nos fijamos en bmp.h,¿cuál es RGBTRIPLE? >> ESTUDIANTES 77: Es una estructura. >> JASON HIRSCHHORN: RGBTRIPLEes una estructura. Vemos que aquí abajo. Y así, si quería acceder, por ejemplo, lanivel rojo de la estructura, ¿cómo puedo acceder al nivel rojo de esta estructura? >> [CLASE SOPLOS] >> ESTUDIANTES 78: RGBTRIPLE.rgbtred? >> JASON HIRSCHHORN: ¿Eso es correcto? >> ESTUDIANTES 79: Debe ser el triplepunto, en lugar de RGBTRIPLE punto? >> JASON HIRSCHHORN: Triple. Triple es la variable local, por lo queaquí, no hay punteros aquí. Entonces sólo tiene que utilizar la notación de puntos. Esto me dará el nivel de rojo. Si quiero cambiar, me acaba de establecerque iguala a algo diferente. Así que de nuevo, esta línea de código tiene acceso aesta variable dentro de esta estructura, y podemos configurarlo para que algo nuevo. >> Así que para quién lo hizo, de nuevo, esto es,en esencia, lo que tenemos que hacer. Muy simple. Sólo tienes que cambiar algunos niveles relativos yaquí es donde ese código va. Cambiar el tamaño, por otra parte,es un poco más complicado. De hecho, el cambio de tamaño es probablemente elmás difícil parte de este problema establece. Tenemos tres minutos para el final del mismo. >> Pero una vez más, ya hemos escritola mayor parte de este código, por lo que debe ser bastante familiar. ¿Cuáles son algunas cosas que queremos hacer encambiar el tamaño, si usted ha leído sobre el establece problema? Si usted les da a mí, quese puede hablar de ellos. ¿Cuáles son algunas cosas que queremos hacer? >> ESTUDIANTES 80: Verticalmente - lo que tiene que cambiar su tamaño en sentido horizontal,pero verticalmente cambiar su tamaño, así? >> JASON HIRSCHHORN: Así que una si se nos dapixel, y queremos cambiar su tamaño por un factor de dos, ahora tiene que sercambiar de tamaño horizontal y cambiar de tamaño verticalmente. ¿Eso tiene sentido? Sí. Así que esa es probablemente lamayor desafío. Y hablaremos de eso en un segundo. Sí. >> ESTUDIANTES 81: La forma en que pensaba de ellaeras tú necesitabas imprimirlo - >> JASON HIRSCHHORN: Espera. No nos digan lo que hiciste. Vamos a hablar de la lógica. >> ESTUDIANTES 81: OK. ¿Cuál era la pregunta? >> JASON HIRSCHHORN: Usted acaba delevantado la mano. No había duda. Permítanme presentarles ella. Permítanme discutir esto brevemente. Así que hemos un píxel, queremosreplicarlo, tanto horizontales como verticalmente. Así que lo ideal lo que hacemos aquí es, queleer en nuestro pixel, lo escribimos sin embargo muchos de los tiempos. >> Pero entonces tenemos nuestro truco aquí, porqueentonces queremos pasar a la siguiente línea y escribir en ela partir de la siguiente línea. Así que si queremos replicar tantohorizontal y verticalmente, lo que es una buena manera de hacer eso - uno bueno, aunque para hacer eso? Así que no necesitamos buscar constantementealrededor de nuestro archivo a colocar las cosas. >> Esa pregunta podría no tenertenía sentido, pero creo que una responder a ella le ayudará. >> ESTUDIANTES 82: Crear una matriz? >> JASON HIRSCHHORN: Así que vamos a pensarde cada archivo como una fila. Vamos a pensar en términos de filas. Si tenemos nuestra primera fila de nuestra pequeñafoto, podemos hacer esa fila en una gran fila de una imagen grande,y luego replicar esa fila sin embargo muchas veces que necesita para replicarse,en lugar de ir pixel por pixel, que se pone confuso cuandotratar con archivos. >> Porque si hemos tenido - Me estoy quedando sin espacio. Si este es nuestro archivo, y tenemos queun píxel allí, y queremos ponerlo justo ahí, todavía tenemos algunas cosasesa necesidad de ir allí cuando estamos la escritura y la creación de nuestro nuevo archivo - nuestro archivo que es el doble de grande. >> Pero es realmente difícil con funciones de archivosaltar en torno a las nuevas líneas de esa manera y, a continuación, volver aquíy poner las cosas en ese país. Es casi imposible hacer algoasí, si eso tiene sentido. Así que si pensamos en términos de filas, podemostomar nuestra fila y, a continuación, poner - replicar filas verticalmente. >> Y así fue como abordamos el cambio de tamañoverticalmente en lugar de horizontalmente. Eso fue un poco rápido, yun poco confuso. Desafortunadamente nuestro tiempo se ha acabado. Voy a estar fuera para aquellos de ustedesaquí que tenga preguntas sobre la conjunto de problemas, incluyendo la recuperación. >> Así que vamos a levantar la sesión por ahora. Y de nuevo, si usted tiene cualquier pregunta,podemos charlar exterior.

Noticias relacionadas