[Musik spiller] David J. MALAN: Okay. Dette er CS50, og dette er i slutningen af ​​uge fire. Og et af de emner i dag er, at digitale retsvidenskab, kunsten at inddrive oplysninger. Og ja, selv om du er midt lige nu Freds på Three og Breakout, i næste uge, vil fokus være på netop dette domæne. Så en af ​​de fedeste job, jeg nogensinde havde var tilbage i graduate skole, da jeg arbejdede for den lokale Middlesex County District Attorney kontor, laver retsvidenskab virker. Så det væsentlige, Massachusetts Statspolitiet lejlighedsvis ved arbejde på sager ville bringe i ting som harddiske og disketter og hukommelseskort og lignende. Og de ville udlevere dem til mig og min mentor, og vores mål var at finde beviser, hvis der var nogen, om disse medier. Nu har du måske set glimt af denne verden af ​​retsvidenskab i medierne, tv og film. Men jobbet havde jeg, og daresay denne verden, er ikke helt som du ville se det. Lad os tage et kig på, hvad Du har sikkert set. [VIDEOAFSPILNING] -OK. Lad os nu få et godt kig på dig. [Musik spiller] -Hold Det. Kør den tilbage. -Vent Et minut. Gå til højre. -Der. Frys det. -Fuld Skærmen. -OK. Frys det. Stramme op op på dette, vil du? -Vector Ind på at fyr ved baghjulet. -Zoom I lige her på dette sted. -Med Det rigtige udstyr, den Billedet kan forstørres og slibes. Hvad er det? -Det er en forbedring program. Kan du klare det op nogen? Jeg ved det ikke. Lad os forbedre det. -Enhance Afsnit A6. Jeg forbedrede detaljer, og-- Jeg tror, ​​der er nok til at forbedre. Slip det til min skærm. Jeg forbedret refleksion i hendes øjne. Lad os køre dette gennem video ekstraudstyr. -Edgar, Kan du forbedre dette? -Hang På. -Jeg Har arbejdet på denne refleksion. -Der Er nogens refleksion. -Reflection. -Der Er en afspejling af mandens ansigt. -Den Refleksion! -Der Er en refleksion. -Zoom Ind på spejlet. Du kan se en refleksion. Kan du forbedre billedet fra her? Kan du forbedre det? Kan du forbedre det? Kan vi forbedre dette? Kan du forbedre det? Vent lige et sekund. Jeg vil forbedre. -Zoom I på døren. -Times 10. -Zoom. -Flyt I. -Mere. Vent, stop. Hold op. -Pause Det. -Rotate Os 75 grader rundt om den lodrette, tak. Hold op. Gå tilbage til den del om døren igen. -Har Et billede forstærker, der kan bitmap? Måske kan vi bruge Pradeep Singh metode til at se ind i vinduerne. -Den Software er state of the art. -Den Egenværdi er slukket. -Med Højre kombination af algorithms-- Han er taget belysning algoritmer til det næste niveau, og jeg kan bruge dem til forbedre dette fotografi. -Lock På og forstørre z-aksen. -Enhance. Forbedre. -Enhance. -Freeze Og forbedre. [END VIDEO PLAYBACK] David J. MALAN: Så dem er alle ord, men de var ikke anvendes i sætninger korrekt. Og faktisk i fremtiden, når som helst, venligst, du hører nogen sige ordet, "Forbedre", klukle bare en lille smule. Fordi når du forsøger at forbedre, for eksempel, det er hvad der sker. Så her er en smuk foto. Dette er CS50 egen Daven. Og formoder, at vi ønskede at fokusere på det glimt i øjet, eller refleksion af skurken, der var klart fanget af den sikkerhed kamera. Dette er, hvad der sker, når du zoomer ind på et billede, har kun et begrænset antal af bits, der er forbundet med det. Det er, hvad du ville få. Og ja, i Daven øje er men fire, måske seks pixels at komponere præcis hvad var glimtende der. Så Problem opstillet fire i sidste ende vil have du udforske denne verden, især af arten af ​​noget vi kalder fil I / O, hvor I / O er bare en fancy måde siger input og output. Så hidtil alle interaktioner vi har haft med en computer har været stort set med din tastatur og skærm, men ikke så meget med harddisken eller gemme filer ud over dem, du selv skrive. Dine programmer hidtil har ikke været at skabe og gemme, og ajourføring af deres egne filer. Nå, hvad er en fil? Nå, noget som en JPEG. Dette er et billede, som du måske har eller uploade til Facebook, eller se overalt på nettet. Ja, det foto vi bare sav af Daven var en JPEG. Og hvad er interessant om filer som JPEG er, at de kan identificeres, typisk ved visse bitmønstre. Med andre ord, hvad er det, adskiller en JPEG fra en GIF fra en ping fra et Word dokument fra en Excel-fil? Tja, det er bare anderledes bitmønstre. Og de forskellige mønstre er normalt ved starten af ​​disse filer. Så når computeren åbner et Word doc, eller når en computer åbner en JPEG, det ser typisk på første adskillige bits i filen. Og hvis det genkender et mønster, det siger, åh, det er et billede. Lad mig vise det til brugeren som en grafik. Eller, åh, det ligner et Word dok. Lad mig vise det til brugeren som et essay. Så for eksempel, JPEG, det viser sig, er temmelig sofistikeret under hætten. Men de første tre bytes i de fleste hver JPEG starte med disse tre numre. Så byte nul, en og to er i mest hver JPEG, 255, så antallet 216, så antallet 255. Og hvad du vil være i stand at begynde at gøre i næste uge er faktisk stikke nedenunder hætten af ​​filer som JPEG og ligesom bitmap-filer, og se hvad der altid har været der så længe som du har brugt en computer. Men hvad er der er ikke typisk skrives som decimaltal som denne. Dataloger ikke tendens til at tale i decimal. De har ikke rigtig tale i binær. Typisk, når vi ønsker at udtrykke tal vi rent faktisk bruger hexadecimal, som du måske husker fra, siger, Problem Sæt En, der udfordrede du til at tænke på et andet system. Vi naturligvis er bekendt med decimal, nul til ni. Vi talte om binær. Og vi har ikke rigtig har at bruge så meget her på ud, fordi computere vil bruge den. Men programmører vil meget ofte, men ikke altid, bruge hexadecimal, som netop betyder du har 16 bogstaver i dit alfabet, i modsætning til to eller 10. Så hvordan kan du tælle til højere end ni i hexadecimal? Du går 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, blot ved konvention. Men hvad er afgørende er, at hver af disse er et enkelt symbol. Der er ingen 10. Der er ingen 11, i sig selv, fordi hver af dine cifre, ligesom i decimal og ligesom i binær, bør kun være et enkelt tegn, efter sædvane. Så da er alfabetet vi til rådighed til hexadecimal. Så hvad gør en JPEG se ud, hvis du skulle skrive ud de første tre bytes ikke som decimal, men for eksempel som hexadecimal? Og hvorfor er hex selv alt det nyttigt? Tja, et hurtigt kig på et eksempel. Så hvis jeg skriver de bits, der repræsentere disse decimal numbers-- dette kan være lidt rusten nu fra et par uger tilbage, men den venstre og rigtige er temmelig let. 255 var det største antal, vi kunne repræsentere med otte bits. Det var alle dem. Så den eneste, der er mildt interessant er den midterste. Og hvis du slags gøre ud matematik, vil du udlede, at, ja, dette mønster af en og nuller repræsenterer 216. Så lad os bare lægger for nu, at de er korrekte. Men hvorfor er det interessant? Tja, en byte, selvfølgelig, er otte bits. Og det viser sig, at hvis du tror af en byte som to stykker af fire bit, som denne. Lad mig lige tilføje noget plads. Så før, efter. Jeg har lige tilføjet nogle hvide rum til visualisering skyld her. Hvordan kan vi nu repræsenterer i, siger, hexadecimal hver quad af bits, hvert sæt af fire bit? Så for eksempel til venstre nu har vi 1111 i binær. Hvad er det tal i decimal, hvis du gør ud af matematik? Du har dem sted, det toere sted, det Fours sted, og ottere sted. Publikum: 15. David J. MALAN: Det er 15.. Så hvis vi gør otte plus fire plus to plus en, får vi 15. Så jeg kunne skrive ned 15 nedenfor 1111, men hele pointen her er hexadecimal, ikke decimal. Så i stedet for at skrive ned 15, 1-5, Jeg har tænkt mig at skrive, at i hex, som hvis du tænker tilbage, hvis du har nul gennem f, hvad der 15 kommer til at være? Publikum: f. David J. MALAN: Så det viser sig det er f. Og du kan arbejde ud af ved at sige, Tja, hvis en er 10, så OK, f er 15. Så ja, vi kunne omskrive dette samme sæt af numre som f f. Og så hvis vi gør en smule matematik, vil vi udlede, at det er d. Otte er temmelig let, fordi vi har en i ottendedele sted. Og så har vi et par mere F F er. Så hvad mennesker har tendens til at gøre med konvention når de bruger hexadecimal er de bare skrive det lidt mere kortfattet, slippe af med de fleste af denne hvide rum. Og bare for at være super klar til læsere, at dette er hexadecimal, den simple konvention blandt mennesker er du skriver nul x, som ikke har nogen anden betydning end en visuel identifikation af, her kommer en hex nummer. Og så, du sætter de to cifre, f f i denne sag, så d et, så F F. Så lang historie kort, hexadecimal bare en tendens være nyttigt, fordi hver af dets cifre, nul gennem f receptioenen linjer med et mønster af fire bit. Så hvis du har to hexadecimale cifre, nul gennem F, igen og igen, der giver dig perfekt otte bits eller en byte. Så det er derfor, det har en tendens til være konventionelt nyttig. Der er ingen intellektuel indholdet virkelig ud over det, andet end den faktiske nytte. Nu JPEG er ikke den eneste filformater til grafik. Du husker muligvis, at der er filer som dette i verden, i det mindste fra et par år tilbage. Så det var faktisk installeret i Windows XP på millioner af pc'er i hele verden. Og dette var en bitmap-fil, BMP. Og en bitmap-fil, som du vil se næste uge, betyder bare et mønster af prikker, pixel som de kaldes, et kort på bits, virkelig. Så hvad er interessant, selv om, om dette filformat, BMP, er at under kølerhjelmen, det har mere end blot tre bytes at sammensætte sin header så til at tale, de første par bites. Det faktisk ser lidt kompliceret ved første øjekast. Og du vil se dette i P sæt. Og få noget særligt ud af det nu er ikke så vigtig, som bare det faktum, at der ved begyndelsen af ​​hvert bitmap fil, en grafisk format, der er en hel masse tal. Nu Microsoft, Forfatteren af ​​dette format, tendens til at kalde de tingene ikke int'er og tegn og flåd, men ord og d ord og længes og bytes. Så de er bare forskellige datatyper. De er forskellige navne for den samme ting. Men du vil se, at i P Angiv Four. Men dette er kun at sige, at hvis et menneske dobbelt-klikker nogle .BMP sagsakter om hans eller hendes harddisk, og et vindue åbnes op vise ham eller hende, at billedet der skete, fordi operativsystemet systemet formentlig bemærket ikke kun .bmp filtypenavnet i filnavnet, men også det faktum, at der er nogle konvention til mønster af bits i begyndelsen denne bitmap-fil. Men lad os nu fokusere på sådan en kompliceret fil, men i stedet på noget som dette. Antag her i gedit, jeg bare have begyndelsen af et program, der er ret simpelt. Jeg har fået nogle omfatter op toppen. Nu har jeg # include "structs.h", men Jeg vil vende tilbage til om et øjeblik. Men dette er nyttigt for nu. Så dette er et program det kommer til at gennemføre ligesom registratoren database. Så en database over studerende, og alle studerende i verden har et navn og et hus og sandsynligvis nogle andre ting, men vi vil holde det simpelt. Hver elev har et navn og et hus. Så hvis jeg ønskede at skrive en program, hvis formål i livet var bare for at skifte fra nul på op til tre, hvis der er tre studerende ved Harvard University. Og jeg ønsker blot at få hjælp getString, den enkelte studerendes navn og hus, og så bare printe dem ud. Det er lidt ligesom uge En, Uge to ting nu, hvor jeg bare vil have en til sløjfe eller noget lignende. Og jeg vil ringe til getString et par gange, og derefter udskrive f et par gange. Så hvordan kan jeg gøre dette, selv om, når både et navn og et hus er involveret til hver elev? Så min første indskydelse måske være at gøre noget som dette. Jeg kunne først sige, ja, giv mig, sige, en vifte af strenge kaldet navne. Og jeg vil ikke have en papirkopi tre her. Hvad ønsker jeg at sætte der? Så de studerende, fordi det er bare en konstant erklæret i toppen, bare så jeg ikke behøver at hardcode tre flere steder. På denne måde kan jeg ændre det ét sted, og det påvirker en ændring overalt. Og så kan jeg gøre streng huser studerende. Og nu, kan jeg gøre noget lignende for (int i = 0; i