[MUSIK AFSPILLER] DAVID J. MALAN: Okay. Dette er CS50 og dette er starten af ​​uge 2. Og du vil huske, at over de sidste par uger, Vi har været at indføre computer videnskab og til gengæld programmering. Og vi begyndte historien i form af Scratch, at grafisk sprog fra MIT Media Lab. Og derefter senest sidste uge, gjorde vi indføre en higher-- a lavere niveau sprog kendt som C, noget, der er rent tekstmæssige. Og, ja, sidste gang vi udforsket i denne sammenhæng en række begreber. Dette, tilbagekaldelse, var den meget første program vi kiggede på. Og dette program, ganske enkelt, udskriver, "Hej, verden." Men der er så meget tilsyneladende magi foregår. Der er denne #include med disse vinkelbeslag. Der er int. Der er (void). Der er parenteser, krøllede parenteser, semikolon, og så meget mere. Og ja, minde om, at vi indførte Scratch så vi kunne ideelt set se forbi at syntaks, de ting, der er virkelig ikke alt, intellektuelt interessant men tidligt er, absolut, lidt tricky at pakke dit sind omkring. Og faktisk en af ​​de mest almindelige ting tidligt i en programmering klasse, især for de mindre komfortable, er at få frustreret over og udløst op af visse syntaktiske fejl, for ikke at nævne logiske fejl. Og så blandt vores mål dag, faktisk, vil være at udstyre dig med nogle problemløsning teknikker til, hvordan for bedre at løse problemerne selv i form af debugging. Og du vil huske, også, at den miljø, som vi introduceret sidste gang blev kaldt CS50 IDE. Dette er webbaseret software, der giver dig mulighed for at programmere i skyen, så at sige, og samtidig holde alle dine filer sammen, som vi igen vil i dag. Og minde om, at vi revisited disse emner her, blandt dem funktioner og loops, og variabler og booleske udtryk, og betingelser. Og faktisk et par mere, at vi oversat fra verden af ​​Scratch til en verden af ​​C. Men det grundlæggende bygning blokke, så at sige, var virkelig stadig den samme sidste uge. Faktisk, vi virkelig bare havde en anderledes brik, hvis du vil. I stedet for at lilla spare blok, vi i stedet havde printf, som er denne funktion i C, der giver dig mulighed for at udskrive noget og formatere det på skærmen. Vi introducerede CS50 Bibliotek, hvor du har nu til din rådighed get_char, og get_int, og get_string, og et par andre funktioner som godt, via hvilken du kan få input fra brugerens eget tastatur. Og vi tog også et kig på tingene ligesom disse-bool, og fjeldørred, og dobbelt, flyde, int, long_long streng. Og der er endda andre datatyper i C. Med andre ord, når du erklærer en variabel til at gemme en vis værdi, eller når du implementerer en funktion der returnerer en vis værdi, du kan angive, hvad type værdi, der er. Er det en streng, som en sekvens af tegn? Er det et nummer, som et heltal? Er det en floating point værdi, eller lignende? Så i C, i modsætning Scratch, vi faktisk begyndte at angive, hvilken slags data vi tilbage eller bruger. Men selvfølgelig, vi løb også ind i nogle fundamentale grænser for computing. Og i særdeleshed, dette sprog C, tilbagekaldelse at vi tog et kig på heltalsoverløb, virkeligheden at hvis du kun har en begrænset mængde hukommelse eller specifikt et endeligt antal af bits, kan du kun regne så højt. Og så vi kiggede på dette eksempel her hvorved en tæller i et fly,, faktisk, hvis der kører længe nok ville overløb og resultere i en software et virkeligt fysiske potentiale fejl. Vi så også på flydende punkt unøjagtighed, virkeligheden at med kun et endeligt antal af bits, uanset om det er 32 eller 64, du kan kun angive så mange numre efter et komma, hvorefter du begynder at få upræcis. Så for eksempel, en tredjedel i verden her, i vores menneskelige verden, vi ved er blot et uendeligt antal af 3s efter kommaet. Men en computer kan ikke nødvendigvis repræsenterer et uendeligt antal numre hvis du kun tillader det nogle endelig mængde information. Så ikke kun vi udstyre dig med større kraft i form af, hvordan du kan udtrykke dig selv på et tastatur i form af programmering, vi også begrænset hvad du rent faktisk kan gøre. Og ja, bugs og fejl kan skyldes den slags spørgsmål. Og ja, blandt de emner i dag vil være emner som debugging og faktisk ser under kølerhjelmen på, hvordan tingene blev indført i sidste uge faktisk implementeres så du bedre forstå både funktionerne i og begrænsningerne af et sprog som C. Og i virkeligheden, vil vi skrælle lagene af de enkleste af datastruktur, noget, der hedder et array, som Scratch sker for at kalde en "liste." Det er en lille smule forskellige i denne sammenhæng. Og så vil vi også indføre en af ​​de første af vores domænespecifikke problemer i CS50, en verden af kryptografi, kunsten at forvanske eller chifrere oplysninger, så at du kan sende hemmelige beskeder og afkode hemmelige beskeder mellem to personer, A og B. Så før vi overgang til den nye verden, lad os prøve at udstyre dig med nogle teknikker, som du kan fjerne eller reducere i det mindste nogle af de frustrationer at du sandsynligvis er stødt løbet alene den seneste uge. Faktisk foran dig er such-- nogle af dine første problemer i C. Og odds er, Hvis du ligesom mig, første gang du forsøger at skrive et program, selvom du tror logisk programmet er ret enkel, du kan meget vel ramme en mur, og compileren ikke kommer til at samarbejde. Lav eller Dunk ikke vil til rent faktisk at gøre dit bud. Og hvorfor kan det være? Nå, lad os tage et kig på, måske, et simpelt program. Jeg har tænkt mig at gå videre og gemme denne i en fil bevidst kaldet buggy0.c, fordi jeg ved det til være fejlbehæftet på forhånd. Men jeg måske ikke klar over, at hvis dette er den første eller anden eller tredje program at jeg faktisk gør mig selv. Så jeg har tænkt mig at gå videre og skrive ud, int main (void). Og så indersiden af ​​mine krøllede parenteser, en meget velkendt ( "Hej, verden- backslash, n ") - og et semikolon. Jeg har gemt filen. Nu vil jeg gå ned til min terminal vindue og type make buggy0, fordi igen, navnet på filen dag buggy0.c. Så jeg skriver gøre buggy0, Enter. Og, åh, gosh, husker fra sidste gang at ingen fejlmeddelelser er en god ting. Så ingen output er en god ting. Men her har jeg tydeligt nogle antal fejl. Så den første linje af output efter indtastning gøre buggy0, tilbagekaldelse, er Dunk er temmelig detaljeret output. Under kølerhjelmen, CS50 IDE er konfigureret at bruge en hel masse valgmuligheder med dette compiler så du ikke behøver at tænke over dem. Og det er alt, første linje midler, der starter med Dunk. Men efter det, de problemer begynde at gøre deres udseende. Buggy0.c på linje 3, karakter 5, er der en stor, rød fejl. Hvad er det? Implicit erklære biblioteksfunktionen printf med type int (const char *, ...) [-Werror]. Jeg mener, det er meget hurtigt bliver meget mystiske. Og helt sikkert, ved første blik, ville vi ikke forventer, at du forstå helhed af dette budskab. Og så en af ​​de erfaringer, for i dag går at være at forsøge at lægge mærke mønstre eller lignende ting, fejl, du måtte have stødt i fortiden. Så lad os drille hinanden kun disse ord, der ser bekendt. Den store, røde fejl er klart symbol på noget at tage fejl. implicit erklære biblioteksfunktionen printf. Så selv om jeg ikke helt forstår, hvad implicit erklære biblioteksfunktionen midler, problemet sikkert angår printf eller anden måde. Og kilden til dette spørgsmål har at gøre med at erklære det. Erklære en funktion er nævne det for første gang. Og vi brugte terminologi sidste uge erklære en funktion prototype, enten med en linje i toppen af ​​din egen fil eller i en såkaldt header fil. Og i hvilken fil gjorde vi siger sidste uge, at printf er tilbud, citat slut, erklærede? I hvilken fil er dens prototype? Så hvis du husker, den allerførste ting, jeg maskinskrevet, næsten hver program sidste time-- og ved et uheld et øjeblik siden startede skrive myself-- var denne ene her-- hash-- #include