[MUSIKK] DAVID J. MALAN: Greit. Dette er CS50 og dette er starten av uke 2. Og du husker at over de siste par ukene, vi har vært innføring av datamaskin vitenskap og i sin tur programmering. Og vi begynte historien ved hjelp av Scratch, som grafisk språk fra MIT Media Lab. Og så sist, forrige uke, gjorde vi innføre en higher-- en lavere nivå språk kjent som C, noe som er rent tekstlig. Og, ja, sist gang vi utforsket innenfor den konteksten en rekke begreper. Dette, husker, var det veldig første programmet vi så på. Og dette programmet, rett og slett, skrives ut, "hallo, verden." Men det er så mye tilsynelatende magiske skjer. Det er denne #include med disse vinkelparenteser. Det er int. Det er (void). Det er parenteser, klammeparentes, semikolon, og så mye mer. Og så, husker at vi introdusert Scratch slik at vi kunne, ideelt sett, se forbi som syntaks, ting det er egentlig ikke alt som intellektuelt interessant, men tidlig på er, absolutt, litt vanskelig å vikle tankene dine rundt. Og faktisk en av de mest vanlige ting tidlig i et programmerings klasse, spesielt for de mindre behagelig, er å bli frustrert av og utløst opp av visse syntaktiske feil, og ikke minst logiske feil. Og så blant våre mål i dag, faktisk, vil være å utstyre deg med noen problemløsning teknikker for hvordan å bedre løse problemene selv i form av feilsøking. Og du husker også at den miljø som vi innførte siste gang ble kalt CS50 IDE. Dette er web-basert programvare som kan du programmere i skyen, så å si, samtidig som alle dine filer sammen, som vi igjen vil i dag. Og minner om at vi revisited disse temaene her, blant dem funksjoner og looper, og variabler, og boolske uttrykk, og forhold. Og faktisk noen flere som vi oversatt fra verden av Scratch til en verden av C. Men grunnleggende bygge blokker, så å si, var egentlig fortsatt det samme forrige uke. Faktisk er vi egentlig bare hadde en annerledes puslespill brikke, hvis du vil. I stedet for det purpur redde blokk, vi i stedet hadde printf, som er denne funksjonen i C som kan du skrive ut noe og formatere den på skjermen. Vi introduserte CS50 Bibliotek, hvor du nå har til disposisjon get_char, og get_int, og get_string, og noen andre funksjoner som vel, via som du kan få innspill fra brukerens eget tastatur. Og vi tok en titt på ting som disse-bool, og røye, og double, float, int, long_long streng. Og det er til og med andre datatyper i C. Med andre ord, når du deklarerer en variabel til å lagre noen verdi, eller når du implementerer en funksjon som returnerer en viss verdi, du kan spesifisere hva type verdi som er. Er det en streng, som en sekvens av tegn? Er det et antall, for eksempel et heltall? Er det et flyt verdi eller lignende? Så i C, i motsetning til Scratch, vi faktisk begynte å spesifisere hva slags data vi var tilbake eller hjelp. Men, selvfølgelig, også kjørte vi inn noen grunnleggende grensene for databehandling. Og i særdeleshet, dette språket C, tilbakekalling at vi tok en titt på Heltallsoverflyt, virkeligheten at hvis du bare har en begrenset mengde minne eller, spesielt, et endelig antall bits, kan du bare telle så høyt. Og så har vi sett på dette eksemplet her hvor en teller i et fly,, faktisk, hvis du kjører lenge nok ville overflyt og resultere i en programvare en faktisk fysisk mulig feil. Vi så også på flytende punkt upresishet, virkeligheten som med bare et endelig antall bits, enten det er 32 eller 64, du kan bare spesifisere så mange tall etter et desimaltegn, etter som du begynner å få upresise. Så for eksempel, en tredjedel i verden her, i vår menneskelige verden, vi vet er bare et uendelig antall av 3s etter desimaltegnet. Men en datamaskin kan ikke nødvendigvis representerer et uendelig antall tall hvis du bare lar det noen begrenset mengde informasjon. Så ikke bare gjorde vi utstyre deg med større kraft i form på hvordan du kan uttrykke deg på et tastatur i form av programmering, vi også begrenset hva du kan faktisk gjøre. Og ja, feil og feil kan oppstå fra slike saker. Og faktisk, blant temaene i dag kommer til å være som debugging emner og faktisk ser under panseret på hvordan ting ble innført i forrige uke faktisk blir gjennomført slik at du bedre forstå både egenskapene til og begrensningene i et språk som C. Og faktisk, vil vi skrelle tilbake lagene av de enkleste av datastrukturen, noe som kalles en matrise, som Scratch skjer å kalle en "liste". Det er litt annerledes i den sammenheng. Og så får vi også presentere en av de første av våre domenespesifikke problemer i CS50, en verden av kryptografi, kunsten scrambling eller i ciphering informasjon slik som du kan sende hemmelige meldinger og dekode hemmelige meldinger mellom to personer, A og B. Så før vi overgang til den nye verden, la oss prøve å utstyre deg med noen teknikker som du kan eliminere eller redusere i det minste noen av frustrasjonene at du sannsynligvis har møtt den siste uken alene. Faktisk, før du such-- noen av dine første problemene i C. Og oddsen er, Hvis du er som meg, første gang du prøver å skrive ut et program, selv om du tror logisk programmet er ganske enkel, du kan godt treffer en vegg, og kompilatoren er ikke til å samarbeide. Gjør eller klang ikke kommer å faktisk gjøre din budgivning. Og hvorfor kan det være? Vel, la oss ta en titt på, kanskje et enkelt program. Jeg kommer til å gå videre og lagre dette i en fil bevisst kalt buggy0.c, fordi jeg vet at det å være feil på forhånd. Men jeg kan ikke forstå at hvis dette er den første eller andre eller tredje program at jeg faktisk gjør meg selv. Så jeg kommer til å gå videre og skriver ut, int main (void). Og så innsiden av mine klammeparentes, en veldig kjent ( "Hei, world-- backslash, n ") - og et semikolon. Jeg har lagret filen. Nå kommer jeg til å gå ned til min terminal vindu og type make buggy0, fordi, igjen, navnet på filen i dag er buggy0.c. Så jeg skriver gjøre buggy0, Enter. Og, ja, jøss, husker fra forrige gang at ingen feilmeldinger er en god ting. Så ingen utgang er en god ting. Men her har jeg klart et antall feil. Så den første linjen i produksjonen etter å ha skrevet lage buggy0, husker, er klang er ganske ordrik utgang. Under panseret, CS50 IDE er konfigurert å bruke en hel haug med alternativer med denne kompilatoren slik at du ikke trenger å tenke på dem. Og det er alt som førstelinje middel som starter med klang. Men etter det, problemene begynner å gjøre sitt utseende. Buggy0.c på linje 3, karakter 5, er det en stor, rød feil. Hva er det? Implisitt erklære bibliotek funksjon printf med type int (const char *, ...) [-Werror]. Jeg mener, det svært raskt blir veldig uforståelige. Og sikkert, først øyekast, ville vi ikke forvente deg å forstå helheten av den meldingen. Og så en av leksjonene for i dag kommer å være å prøve å legge merke mønstre, eller lignende ting, feil du kan ha oppstått i det siste. Så la oss erte hverandre bare de ordene som ser kjent ut. Den store, røde feil er klart symbolsk for noe være galt. implisitt erklære bibliotek funksjon printf. Så selv om jeg ikke helt forstår hva implisitt erklære bibliotek funksjon midler, problemet sikkert relatert til printf eller annen måte. Og kilden til dette problemet har å gjøre med å erklære det. Erklærte en funksjon er nevne det for første gang. Og vi brukte terminologien i forrige uke erklære en funksjon prototype, enten med en linje på toppen av din egen fil eller i en såkalt topptekstfilen. Og i hvilken fil gjorde vi sier i forrige uke at printf er sitat, unquote, erklærte? I hvilken fil er sin prototype? Så hvis du husker, det aller første jeg skrevet, nesten hvert program siste tid-- og tilfeldigvis et øyeblikk siden startet skrive myself-- var dette en her-- hash-- #include