[MÚSICA] DAVID J. Malan: Està bé. Això és CS50 i això és l'inici de la Setmana 2. I et recordo que durant l'últim parell de setmanes, hem estat la introducció de l'ordinador la ciència i, al seu torn, la programació. I vam començar la història per mitjà de Scratch, que llenguatge gràfic del Laboratori de Mitjans del MIT. I després, més recentment, la setmana passada, oi introduir un higher-- 1 llenguatge de baix nivell conegut com C, cosa que és purament textual. I, de fet, l'última vegada que explorat dins d'aquest context una sèrie de conceptes. Això, recordo, va ser el primer programa mirem. I aquest programa, simplement, imprimeix, "hola, món". Però hi ha tant màgia aparent passant. Hi ha aquesta #include amb aquests suports d'angle. Hi ha int. Hi ha (void). Hi ha parèntesis, claudàtors, punt i coma, i molt més. I així, cal recordar que vam introduir les ratllades perquè poguéssim, si pot ser, veure més enllà que la sintaxi, les coses que en realitat no és tot el que intel·lectualment interessant, però des del principi és, en absolut, una mica complicat per embolicar la seva ment voltant. I, de fet, un dels més comuns les coses des del principi en una classe de programació, especialment per als menys còmode i sentir-se frustrat per i disparat per cert sintàctica errors, per no parlar dels errors lògics. I així entre els nostres objectius avui en dia, de fet, la voluntat ser per equipar-lo amb una mica tècniques de resolució de problemes per saber com per resoldre millor els problemes propis en forma de depuració. I com es recordarà, també, que el ambient que vam introduir última vegada que es diu CS50 IDE. Aquest és un programari basat en web que Li permet programar en el núvol, per així dir-ho, mentre es manté la totalitat del seu arxius junts, ja que novament serà avui. I recordar que ens revisited aquests temes aquí, entre ells, les funcions i bucles, i variables i expressions booleanes, i condicions. I en realitat una mica més que nosaltres traduït del món de les ratllades al món de la C. Però la construcció fonamental blocs, per així dir-ho, eren realment segueix sent el mateix la setmana passada. De fet, en realitat només vam tenir una diferents peça del trencaclosques, si es vol. En lloc que porpra guardar bloc, que en comptes havia printf, que és aquesta funció en C que li permet imprimir alguna cosa i el format de la pantalla. Vam introduir el CS50 Biblioteca, on es tenen ara a la seva disposició get_char, i get_int, i get_string, i algunes altres funcions com així, a través del qual es pot obtenir d'entrada de propi teclat de l'usuari. I també fem una ullada a les coses com aquestes: bool, i la carbonissa, i el doble, flotador, int, string LONG_LONG. I hi ha fins i tot altres tipus de dades en C. En altres paraules, quan es declara una variable per emmagatzemar algun valor, o quan s'implementa una funció que retorna algun valor, pot especificar quins tipus de valor que és. És una cadena, com una seqüència de caràcters? És un nombre, com un sencer? És un punt flotant valor, o similar? Així que a C, a diferència de les ratllades, que en realitat començar a especificar quin tipus de dades estàvem tornant o l'ús. Però, per descomptat, també ens trobem amb alguns límits fonamentals de la computació. I, en particular, aquest llenguatge C, el record que ens vam donar un cop d'ull a desbordament de sencers, la realitat que si només té una quantitat finita de memòria o, específicament, un nombre finit de bits, només es pot comptar tan alt. I així ens fixem en aquest exemple aquí pel qual un comptador en un avió ,, En realitat, si s'executa el temps suficient es desbordar i resultar en un programari un error potencial físic real. També ens fixem en flotant punt d'imprecisió, la realitat que amb només un nombre finit de bits, ja sigui 32 o 64, només pot especificar tants números després d'un punt decimal, després de la qual cosa es començar a tenir imprecisa. Així, per exemple, un terç en el món aquí, al nostre món humà, sabem que és només un nombre infinit de 3s després del punt decimal. No obstant això, un equip no pot necessàriament representar un nombre infinit de nombres si únicament permet que alguns quantitat finita d'informació. Així que no només hem de equipar amb més poder en termes de com pot expressar-se en un teclat en termes de programació, També ens limitem el en realitat es pot fer. I de fet, els errors i els errors poden sorgir d'aquest tipus de qüestions. I, en efecte, un dels temes d'avui van a ser temes com la depuració i en realitat mirant sota el capó la forma en què es van introduir les coses la setmana passada estan efectivament en pràctica de manera que és millor entendre tant les capacitats de les i les limitacions d'un llenguatge com C I de fet, anem a pelar les capes de la més simple d'estructura de dades, cosa que es diu una matriu, la qual De zero passa a anomenar una "llista". És una mica diferent en aquest context. I llavors també introduirem una de les primer dels nostres problemes específics de domini en CS50, el món de criptografia, l'art de l'aleatorització oa la informació de xifrat pel que pot enviar missatges secrets i descodificar missatges secrets entre dues persones, A i B. Així que abans que la transició a aquest nou món, tractarem de equipar-lo amb una mica tècniques amb les que es poden eliminar o reduir almenys alguns de les frustracions que és probable que hagi trobat durant l'última setmana només. De fet, abans que es tal-- alguns seus primers problemes en C. I les probabilitats són, Si ets com jo, el primer cop intenta escriure un programa, fins i tot si vostè pensa lògicament el programa és bastant simple, És molt possible que colpejar una paret, i el compilador no va a ajudar. Fer o no va Clang per fer realitat el seu fer una oferta. I per què podria ser? Bé, anem a fer una ullada a, potser, un programa senzill. Vaig a seguir endavant i guardar això en un arxiu anomenat deliberadament buggy0.c, perquè sé que a viciat per endavant. Però podria no adonar-se que si això és la primera o segona o tercera programa que en realitat estic fent a mi mateix. Així que seguiré endavant i escriure a màquina, int main (void). I després dins de les meves claus, una molt familiar ( "hola, món-- barra invertida, n ") - i un punt i coma. He guardat l'arxiu. Ara vaig a baixar al meu finestra de terminal i el tipus de maquillatge buggy0, perquè, de nou, el nom del fitxer d'avui és buggy0.c. Així que escric fer buggy0, Retorn. I, oh, Déu, recordar de l'última vegada que no hi ha missatges d'error és una bona cosa. Així que no hi ha sortida és una bona cosa. Però aquí tinc clarament cert nombre d'errors. Així que la primera línia de sortida després d'escriure fa buggy0, recordo, s'emet bastant detallat de So metàl·lic. Sota el capó, IDE CS50 està configurat utilitzar un munt de opcions amb aquest compilador de manera que vostè no ha pensar en ells. I això és tot el que la primera línia de mitjans que s'inicia amb Clang. Però després d'això, els problemes comencen a fer la seva aparició. Buggy0.c en la línia 3, caràcter 5, hi ha un gran error, vermell. Què és això? Declarant implícitament funció de biblioteca printf amb el tipus int (const char *, ...) [-Werror]. És a dir, és molt ràpid es posa molt arcà. I, per descomptat, en un primer moment vista, que no ho faria espero que ho entengui el totalitat d'aquest missatge. I el que una de les lliçons avui va a ser tractar de notar patrons, o coses similars, als errors que pugui tenir trobat en el passat. Així que anem a esmicolar només aquestes paraules que semblen familiars. El gran, vermell d'error és clarament simbòlic que alguna cosa va malament. declarant implícitament printf funció de biblioteca. Així que fins i tot si jo no entenc molt bé el declarant implícitament funció de biblioteca mitjans, el problema segurament es refereix a printf d'alguna manera. I la font d'aquesta qüestió té a veure amb el que es declara. La declaració d'una funció és esmentar que per a la primera vegada. I es va utilitzar la terminologia de la setmana passada de declarar el prototip d'una funció, ja sigui amb una línia a la part superior de la seva arxiu o incorporada a un fitxer de capçalera trucada. I en el que va fer que diem arxiu la setmana passada que printf és cita, Fi de la cita, declarada? En què fitxer és el seu prototip? Així que si vostè recorda, la primera cosa que em amb tipus, gairebé tots els programes última vegada-- i accidentalment fa un moment va començar escrivint myself-- era aquest aquí-- hash-- # include