>> [Musikk spilles]
>> DAVID MALAN: Greit dette er CS50 og dette er slutten på en uke.
Så jeg vil gjerne presentere min tidligere advisee, Andel Duff, som ikke bare gjør
iPhone 5 står, så vel som dette talerstol, han gjør også biler.
ANSEL DUFF: Hvordan går det, alle sammen?
Jeg vil bare fortelle deg litt litt om Formula SAE, som jeg
er kaptein.
Det er en MIT team.
Jeg vil bare fortelle deg gutta litt om det
og forhåpentligvis generere litt interesse.
>> Så la meg bare kjøre gjennom en par ting om vårt team.
Så vi er helt student løp, hvor alle
av medlemmene design, simulere, test, og produsenten et delsystem
av bilen.
Vi har vår egen maskinverksted og garasjer, og N52-- eller beklager,
N51-- som er samme bygning som MIT Science Museum.
Og vi er mennesker som kjører bilen.
Det er en nasjonal konkurranse i begynnelsen av sommeren,
og så er det mindre shootout konkurranser gjennom hele året.
Og så gjør vi driver opplæring dager å få nye medlemmer kjent.
>> Våre bygge dager er på Lørdager fra 11 AM til 20:00.
Lunsj og middag er å ta vare av, fra Bertucci og Beantown
respektivt.
Vi har et ukentlig møte og Seminaret, som er for selvfølgelig kreditt.
Som er ny fra og med dette semesteret, og det vil også være for neste semester,
slik at du kan kryss-reg for det.
Og så har vi designe, butikk, og CAD dager i uken,
mens medlemmer vil uavhengig CAD-deler, ordre et cetera.
>> Så for elektrisk teknikk ved lag
vi har vår trekkraft, høyspenningssystem,
som går på en nominell 300 volt, som omfatter
motorer, motorstyringer, og batteripakker.
Da har vi en lav spenningssystem, som går
ved 12 volt, som omfatter kontrollene kan noder, hjernen
boks, og dashbordet.
Så langt CS går, gjør vi har nettstedet vedlikehold
at vi trenger gjort for hendelser, medlemskap endringer, nye bilder, og PR materiale.
Og så har vi kode som styrer bil for våre antispinn, lansering
kontroll, dash kontroll, dreiemoment vectoring, og regenerative bremsesystemer, som
kjøre typisk i MATLAB, Simulink og LabView.
>> Fortell deg litt om bilen.
Så det er ca 500 pounds.
Det er regler begrenset til 85 kilowatt.
Den har 2 EMRAX 207 motorer i tilbake, en for hvert bakhjul.
Den har spesialbygde batterier fra Prisme A123 posen celler,
totalt 300 volt og 5,6 kilowattimer.
Og det er direkte stasjonen med en 2,64 til 1 utvekslingsforhold.
Her er noen bilder vi tok av det på konkurranse.
Her er baksiden, nese kjegle, og her er de motorene,
de store svarte disker under et herre manus.
Her er et bilde som jeg trakk ut av vår konkurranse ordningen.
Og dette er bare å sammenligne vår bil til en par kommersielt tilgjengelige biler,
som KTM XBOW, Ariel Atom, og Caterha M 7-280.
Hvis du er kjent med prisen, makt trekke vekt, dollar per hestekraft,
dollar per dreiemoment, og vår bil blåser dem ut av vannet.
Hvis du har spørsmål, notere ned denne e-postadressen.
Skyte oss en epost på fsae@mit.edu.
>> Vi er glade for å snakke om noe du ønsker.
Harvard studenter er snill av minoritets på laget.
Hvis du har spørsmål om at vennligst skyte oss en mail,
glade for å snakke, og jeg kommer å dra tilbake over til David.
Takk.
Jeg setter pris på det, folkens.
[APPLAUSE]
>> DAVID MALAN: Ansel tilbrakte sommeren jobbe med oss ​​her på campus i CS50
denne sommeren.
Og i tillegg til å arbeide på ting som de binære pærer,
han faktisk virkelig åpnet vår eyes-- og gruve i particular--
til det som virkelig krysset av ikke av maskinvare og programvare kan være.
Faktisk mye av de tingene han bare turnert deg gjennom er slutt
opprettet først i programvare, og deretter til slutt fremstille
i den virkelige verden i maskinvare.
Så hvis du er interessert i utforske det krysset,
kanskje ta opp den gruppen.
>> Nå i mellomtiden, de av dere som er fans av teknologi,
og Apple-produkter i Spesielt vet at det
var et par kunngjøringer i går.
Men vi tenkte at vi skulle vise du en som kom ut
noen dager før den du kanskje ikke har sett.
>> JORGEN EGHAMMER: Du vet, gang på en stund noe
kommer sammen som endrer måten vi lever.
En enhet så enkelt og intuitivt bruke det føles nesten familiær.
Vi presenterer 2015 IKEA-katalogen.
Det er ikke en digital bok eller en e-bok, det er en bok-bok.
>> Den første tingen å merke seg er ingen kabler, ikke engang en strømkabel.
2015 IKEA-katalogen kommer fulladet,
og batterilevetiden er evig.
Grensesnittet er 7.5 med 8 inches, men også utvide til 15 av 8 inches.
Navigasjonen er basert på taktil berøring teknologi som du faktisk kan føle.
>> Innhold leveres forhåndsinstallert via 328 HD-sider
av inspirerende interiørtrenden ideer.
For å begynne å bla, bare berøre og dra.
Høyre til venstre for å bevege seg fremover, venstre til høyre for å bevege seg bakover.
>> Legg merke til noe annet?
Det er riktig.
Ingen lag.
Hver krystallklare side laster umiddelbart,
uansett hvor fort du ruller.
Hvis du ønsker å få en rask oversikt bare hold den i håndflaten din,
og ved hjelp av tommelen, hastighet bla i innholdet.
>> Hvis du finner noe du ønsker å lagre til senere, kan du bare bokmerke den.
Og selv om du lukker programmet, kan du enkelt finne bokmerket igjen.
Amazing.
>> [Latter]
[APPLAUSE]
Så det bringer oss til slutten av uken en.
Noen kunngjøringer bedriften.
Så seksjonering er nå pågår.
Gå til denne nettadressen her en gang mellom nå og fredag ​​midt på dagen
å faktisk oppgi om du er blant de mindre komfortable, mer
komfortabel, eller et sted i mellom.
>> Dette er vanligvis en av disse ting som du bare slags kjenner.
Og faktisk de av dere som er mindre komfortabel sikkert vet så mye,
de av dere som er mer komfortabel vite så mye,
og igjen hvis du ikke er helt sikker på hvilken av disse bøtter du faller inn du er
trolig et sted i mellom.
Men være trygg på at du kan bytte etter et par uker hvis behovet være.
>> I mellomtiden, for den kommende uken Vi starter ikke seksjoner per se,
men super seksjoner, som er åpent for alle studenter.
Førstkommende søndag på et sted å bli annonsert på kurset hjemmeside
vi vil ha en for de mindre komfortable,
så vel som en for de mer behagelig.
Og de et sted i mellom kan velge hvilke av disse to,
eller begge deler hvis du ønsker å sitte i på.
Og fokus for de blir til slutt på C,
som vi vil fortsette vår samtale i dag.
>> Problem satt 0 i mellomtiden er forhåpentligvis i hendene.
Offisielt forfaller i morgen, Torsdag, midt på dagen.
Med mindre du kontanter i ett av dine 5 sene dager,
som ville bringe det til fredag ​​midt på dagen.
Problem satt en i mellomtiden vil være lagt ut på kursets hjemmeside.
Og dette vil bli vår første streiftog som en klasse i C.
Og det problemet satt spec vil lede deg gjennom mye av mekanikken i hva
vi begynte å snakke om på mandag, og vi vil fortsette å snakke om i dag.
C, Linux, den CS50 apparatet, alt dette
venter deg i spesifikasjonen.
>> Arbeidstid i mellomtiden er i gang, i lavere spisesalen.
Hodet til denne nettadressen her for å se den planlegge for i kveld og i morgen,
Hvis du ønsker å delta.
Spørsmål i mellomtiden, slik at du har muligheter til å stille spørsmål
asynkront, 24/7, skjønner du er ikke begrenset til seksjoner og kontor
time, men heller dette verktøy her, CS50 Diskuter på denne nettadressen
vil være kursets online oppslagstavle programvare, via hvilke
du kan stille spørsmål til klassekamerater og også ansatte.
Så husk at ressursen også.
I mellomtiden en tradisjon starter denne fredagen.
Som du kanskje har observert fra siste onsdagens teaser video,
vi har en tradisjon mest hver fredag ​​i semesteret
for å ta om lag 50 studenter og ansatte til en lokal restaurant som heter
Fire and Ice, hvor vi er typisk selskap av noen alumni
eller venner fra industrien å generelt strebe
for å lage en stor klasse føles mindre.
Så det er en helt uformell lunsj.
En gjeng av oss, de ansatte spesielt, vil spille musikalske stoler
og prate med elevene om 50, liv utenfor 50,
liv i fremtiden, den virkelige verden, Jeg snakker om jobbmuligheter
med venner i bransjen.
>> Så hvis du ønsker å bli med oss denne fredagen, hodet til denne nettadressen her.
Plassen er begrenset, men vi vil gjøre dette recurringly gjennom begrepet.
Hodet der å cs50.harvard.edu/rsvp.
Og hvis du ikke får i denne gangen, for ikke å bekymre deg.
Vi vil gjøre det igjen i de kommende ukene også.
>> Så dette er bildet vi malte i forrige uke,
og du har trolig vært sysle i hittil.
Men la oss prøve å koble dette nå til hva vi skal gjøre i dag
og videre.
Kan jeg få en frivillig?
Greit, eller flere.
Hva med her på slutt, i det blå konstante.
Kom opp, hva heter du?
ALANA: Alana.
DAVID MALAN: Alana.
Så Alana, for bare en moment-- hyggelig å møte du--
kommer til å spille rollen av denne funksjonen her.
Den lilla blokken vi har kalt hittil en funksjon.
Så det jeg kommer til å gå foran her og tilby Alana
er litt navn signal, for å gjøre klart hvilken rolle du spiller.
>> Så du skal være si blokk.
Hvis du ønsker å gå videre og sette det på.
Og vi kommer til å holde denne super enkelt.
Hvis målet for hånden er rett og slett nå å gjennomføre med Benedicte,
Dette såkalte si blokk, her er hvordan det kommer til å fungere.
Jeg have-- la oss kalle det et argument eller parameter,
det er egentlig bare et blankt ark.
Og det er hvit til slags være minner av den hvite boksen der du
kan skrive ord.
>> I mellomtiden kommer jeg til å gå her.
Jeg kommer til å gå videre og skrive H-E-L-L-O komma verden.
Og nå har jeg, som sier programmereren, ikke faktisk vet hvordan jeg skal si noe.
Jeg kan komme opp med ordene, men jeg gjør ikke nødvendigvis
vet hvordan de skal uttrykke meg verbalt eller på skjermen.
Og så hva jeg skal å gjøre er å ta dette stykket
av funksjonalitet, hvis input-- eller argument, som vi kaller det,
Jeg har skrevet om dette stykke paper-- og jeg kommer til å outsource det.
>> Og ja det er den rollen som funksjoner i et programmeringsspråk
kan spille.
Noe som sier blokk kan bli outsourcet
til noen som virkelig vet hva hun eller han snakker om.
Så hvis du vil gå over her for bare et øyeblikk,
Jeg kommer til å passere denne inngangen til Benedicte, og ber om at du sier dette innspill.
>> ALANA: Hei, verden.
DAVID MALAN: Det er det.
Slik at det er en funksjon.
Nå kan vi ta det litt mer, vi kan ta et skritt frem her.
Fordi det var tydelig uimponerende.
Så la oss nå konvertere dette til noe litt mer sofistikert.
>> Så dette er selvfølgelig vår C-versjonen.
Så nå hvis du vil ta den en av, det navnet tag av,
og la oss har du legger på et nytt navn.
Men fundamentalt du er spille samme rolle,
det bare så skjer for å bli kalt printf nå.
>> Historien er, selvfølgelig, kommer til å be-- trolig
akkurat som underwhelming-- er kommer til å være følgende.
Du er nå den funksjonen printf.
Jeg er den som ringer, eller programmerer, som ønsker
å stå på skuldrene til mennesker i fortiden som deg,
som allerede har funnet ut hvordan å faktisk skrive noe ned.
Og så denne periode heller enn å si det la oss
bruker faktisk vår skjermen over her.
Så hvis du ønsker å gå over her, jeg kommer
til å passere igjen dette som innspill til min printf venn.
Hvis du kunne gå videre og skrive ut som på skjermen,
rett og slett ved å tegne med din finger på den svarte skjermen.
Utmerket.
Ok, så det er mye spenning for hvordan det skulle spille ut.
>> Så nå la oss ta ting opp én endelig hakk, hvis vi kunne, som følger.
Så dette er et C-program som vi sa sist gang.
Og dette bare gjør det du gjorde, det skrives ut til skjermen, hallo, verden.
Selv om det er tydelig mye av distraherende ting der oppe.
Men la oss ta ting opp et hakk og introdusere denne versjonen, som husker
var den tredje versjonen som vi endte opp med forrige gang.
>> Og nå er det klart to bruk av printf.
Det er to samtaler til Alana i dette tilfellet for printf,
men det er også en samtale til en annen funksjon.
Hva er det funksjon tydelig?
Getstring.
>> Kan vi få en mer frivillig?
OK, kom igjen opp.
Hva heter du?
>> JAVIER: Javier.
>> DAVID MALAN: Javier, kom opp.
Så Javier rolle er på dette stykke papir.
Som jeg kommer til å ringe generisk s.
Nå er dette en variabel, det er av type streng, som underforstått
ved at andre linjen i midten der.
Og jeg vil at du skal gå få meg en streng.
Spesielt hodet ned til orkesteret seksjon og få meg navnet på noen,
og komme tilbake med en variabel inneholdende den verdien.
Det kan være hvem du vil.
>> Here we go.
Greit, er Javier å skrive ned navnet.
Greit.
Vi kan vel alle gjette hvordan dette kommer til å spille ut.
Vi er kanskje belaboring poenget med hva
en funksjon er å gjøre, men likevel takke deg veldig mye.
>> Så Javier har returnert denne strengen her, som, kan ikke helt se,
Jonathan er strengen som vi har fått.
Så nå hva jeg faktisk kommer å gi til Alana skjønt
er noe litt annerledes.
Fordi i denne versjon av program, først er det oppgi navn.
Så den aller første argumentet Jeg trenger å gi Alana
med kommer til å være bokstavelig talt oppgi navn.
Greit, så enkelt er det Jeg vil gi dette til deg.
Og som jeg skriver opp neste argument, hvis du
ønsker å gå videre og skrive dette på bordet, la oss gå videre
og gjøre den siste eksempel her for å gjøre fjerne det som til slutt nødt til å skje.
Så oppgi ditt navn, skrive det mot toppen
hvis du ikke tankene, bare slik at vi har plass til en annen linje.
Fordi det siste jeg kommer å nå gi deg er ikke bare én,
men to stykker av papir.
>> Greit.
H-E-L-L-O komma og deretter en blank linje.
Så det jeg er i ferd med å levere Alana nå er noe litt annerledes.
Ikke bare er hun å få dette, hvor fylle de tomme representerer
som percent-- hva som var plassholder vi har brukt?
Ja, så prosent s.
I mellomtiden kommer jeg til å passere henne i et annet argument, som
er nettopp hva Javier hentet fra Jonathan.
>> Så la meg gi deg disse to.
Hvis du ønsker å gå foran og skrive ut den effekten.
Hva er det som til slutt skjer nå er, Alana igjen
spiller rollen som printf.
Javier spilte rollen GetString.
Så det vil være din souvenir.
Og til slutt hva som skjer, til tross for dette hello-- yep gå videre og komma.
ALANA: Sa jeg får denne ennå, eller nei?
DAVID MALAN: Jepp, du fikk dem begge samtidig.
Så ideen er at du Nå kan snu siden
å behandle den andre av de to inngangene.
Så dette er bare å hamre hjem påpeke at mens Alana henrettet
denne grønne linjen her, og deretter Javier gjorde dette for oss
og gå tilbake til meg noe vi kaller s, men det var virkelig
bare det stykke papir av sine egne.
Og nå Alana har gjort denne tredje linjen.
>> Og selv om alt dette ser så utrolig kryptisk kanskje
ved første øyekast, er det virkelig er så enkelt som det.
Passerer innganger rundt, får utganger, enten
blir fysisk levert tilbake noe, eller se en bivirkning som dette.
Noe visuelt skrevet på skjermen.
Så la oss gå videre og takke Benedicte og Javier,
som var her nede, for bli med oss ​​her oppe.
>> [APPLAUSE]
>> Så nå la oss ta for gitt akkurat hvordan grei alt dette kan være.
Og la oss fortsette å faktisk gjøre noe i selve koden.
Så opp på skjermen her er et skjermbilde av den såkalte CS50 apparatet.
Og hvis du måtte på, som en 02:00 på onsdag ettermiddag,
forklare til noen venn hva CS50 apparatet er,
hvordan vil du definere det i en setning?
Enhver én setning?
Yeah?
STUDENT: Det er som et program som gjør alles datamaskin
drives med det samme systemet.
DAVID MALAN: Good!
Det er et program som gjør at alles datamaskin til å løpe med samme system.
Det er liksom din egen kopi av et drifts
system som skjer med bli kalt Ubuntu Linux.
Og det går effektivt innsiden av et vindu på din egen Mac eller PC,
slik at på denne måten rett ut av porten i uke 1, alle her i klassen
har tilgang til de samme verktøyene, samme konfigurasjon,
og det er ingen læringskurve bestemt til en Mac eller en PC i særdeleshet.
>> Nå åpnes vi opp innsiden av CS50 apparatet på mandag, dette programmet her.
Det skjer for å bli kalt gedit.
Men det er egentlig bare en grafisk editor.
Det er noe som Notisblokk eller Tekst Redigere på Windows eller Mac OS hhv.
Og jeg foreslått at det var virkelig tre viktige deler til denne skjermen.
Oversiden er der du ville skrive koden din.
Og det er der vi brukte mye av vår tre eksempler i mandagens foredrag.
Bunnen vi kalte det, denne sorte vinduet, ja?
>> STUDENT: Compiler?
>> DAVID MALAN: Compiler vi åpnes ved hjelp av dette vinduet.
Men mer generelt.
Ja, det var bare et terminalvindu.
Dette er et år gammelt begrep som bare beskriver i hovedsak en blinkende
teksten, at år siden brukt til å være på en av de store CRT stil skjermer.
Men i dag er det liksom virtuell i programvare.
Og terminalen vinduer lar oss skrive kommandoer.
Den slags forenklet versjon av brukergrensesnittet eller UI.
Det er ikke en grafisk brukergrensesnitt eller GUI,
det er et tekstbasert grensesnitt eller en kommandolinje-grensesnitt.
>> Og ja det er der til slutt Jeg var i stand til å skrive litt kode.
Når jeg hadde skrevet noen kode skjønt, husker at jeg brukte denne kommandoen.
Og som det navnet slags antyder, dette
tillater meg å gjøre en program kalt Hei.
Men hva var det egentlig gjør?
Vel make tok min input, min kildekode,
og konvertere det til hva, til slutt?
>> Objektkode.
Og objektkode er bare en fancy måte å si nuller og enere.
Og så når jeg ønsket å kjøre som objektkode,
når jeg ønsket å passere som input de nuller og enere inn i datamaskinens
hjernen, den såkalte CPU eller sentralenhet,
Jeg måtte kjøre programmet.
Men det var ikke helt enkelt på mandag så bare å dobbeltklikke noen ikonet.
Hva i stedet gjorde jeg må gjøre for å kjøre et program?
>> Hva var det nestkommanderende?
Jeg hører litt skråstreker?
Ja, ja?
>> STUDENT: Dot slash og programmets navn.
DAVID MALAN: Nettopp.
Dot slash og programmet navn.
Nå hva gjorde dette?
Vel dot er bare en avleggs måte si gjeldende katalog.
Uansett mappen du er i er refereres til som, er representert som prikk.
Skråstreken er akkurat det du har sett i Mac OS og Windows i mange år,
det er en separator mellom en katalog eller mappe og resten av noen navn.
I Windows skjer det å gå bakover, i Linux og Mac
OS det skjer for å gå fremover.
Men det er bare separatoren, så det er bare en uinteressant syntaktisk detalj.
>> Den saftige delen av kurset er navnet på programmet, Hello.
Og det er det som gjør skapt for oss.
Det sendes ut at filen for oss.
Men hvordan kom vi til det punktet?
La oss nå be spørsmålet, hva var egentlig
skjer her, i hvert fall med hensyn til noen av denne syntaksen?
>> Så i en setning eller så, Hvordan klarte vi bortforklare
denne første linje som er uthevet i grønt?
Hva var det første linjen gjør, med hensyn til mitt program?
Yeah?
>> STUDENT: [uhørbart].
DAVID MALAN: Si det igjen?
STUDENT: Inkludert og nedlasting siste funksjonene [uhørbart].
DAVID MALAN: Good.
Inkludert, vil jeg ikke si nedlasting, men la oss si
inkludert funksjoner som folk har skrevet i det siste.
Og disse funksjonene er implementert et sted i min datamaskin.
Noen skrev en fil år siden, og at filen
er et sted på innsiden av CS50 apparatet, eller på harddisken min
mer generelt.
Og så denne linjen er i hovedsak si, gå finne den filen, standard I / O dot
h, og kopiere og lime inn innholdet her på toppen av min fil
slik at jeg ikke trenger å gjøre det manuelt selv.
>> Og blant de saftigste bitene på innsiden av den filen vi hevdet var hvilken funksjon?
Hvilken funksjon vi si ble erklært eller nevnt i standard I / O dot h
mest sannsynlig?
Printf, ikke sant?
Vi skrev ikke printf på Mandag, det bare eksisterte.
Mye som Alana bare kom opp på scenen og hun bare
eksistert og visste hvordan å trekke noe på skjermen,
så eksisterer printf i mange år.
Og så dette er hvordan vi tilgang til den.
Nå hvis vi går videre her, viktigste var analogt vi
sa til puslespill brikke kalles når grønne flagget klikket
i verden av Scratch.
Det er bare liksom den standardnavn som mennesker
besluttet ville representere standard inngangspunkt til et program.
Den del av programmeringskode som blir utført først.
>> I mellomtiden disse klammeparentes er type som den buede formen
av mange av disse gule skrape stykker.
De slags kapsle en hel haug med instruksjoner sammen.
Så det bare slags binder sammen noen relaterte funksjonalitet.
printf selvfølgelig er en funksjon som skriver på skjermen, slik vi nettopp gjorde.
>> Hva om disse parentes?
Hvordan ville du define-- selv om du har aldri programmert før, men bare basert
nå på en økende forhåpentligvis intuisjon, hva
er parentesene gjør for oss her?
Eller hva er de rundt?
Yeah?
>> STUDENT: De sier hva du kommer til å skrive ut med printf.
>> DAVID MALAN: Ja, de sier hva du kommer til å skrive ut med printf.
Eller mer generelt, er de rundt inngangene til funksjonen.
Så du kan nesten tenke av disse parentes
som å være som metall klipp på denne utklippstavlen.
Det er hva som holder, det er det som er kommer til å bli brukt for å gi argumenter
inn i funksjon, noe som i dette tilfellet kalles printf.
>> Så generelt nesten alle gang vi kaller en funksjon,
vi kommer til å se et par parentes.
Kanskje med noe i det, som nå, kanskje ingenting i det.
Men det er der du vil sette inngangene eller såkalte argumenter
til en funksjon.
>> Her er en slik argument.
Jeg har fremhevet alt mellom anførselstegn,
fordi det viser seg i dette språket kalles
C, når du ønsker å representere en string-- som er et ord eller en frase
eller enda en paragraph-- du må omslutter den med doble anførselstegn.
Ikke apostrof, anførselstegn.
Og det er akkurat det jeg har gjort her.
>> I mellomtiden er det en funky symbol mot slutten der.
Backslash n.
Hva sa vi at representert?
Yeah?
>> STUDENT: En ny linje.
>> DAVID MALAN: Ny linje.
Høyre, gjør du ikke generelt trykk Enter når
du vil at programmet å spytte ut en ny linje.
Heller du fortelle det eksplisitt med dette riktignok uforståelige stykke
syntaks, backslash n, at ønsker du en ny linje for å gå dit.
Endelig semikolon.
Vi gjorde egentlig ikke snakke for mye om dette,
og langt dette vil være bane av noen av din eksistens for det første problemet
satt, når du bare ikke klarte å realisere du har glemt noe så dumt
som et semikolon.
Og generelt å sette den det vil løse det problemet.
Men hva er det du gjør for oss, vil du si?
>> STUDENT: [uhørbart].
>> DAVID MALAN: Sorry?
>> STUDENT: [uhørbart].
DAVID MALAN: Finishing en uttalelse.
Det er liksom som perioden på slutten av en engelsk setning,
mens i dette språket C det er slutt en uttalelse.
En instruksjon av programmering kode som du bare ønsker å si,
Jeg er ferdig med dette.
Merker at det nå er den eneste her.
Så du ikke ønsker å komme i en vane å sette semikolon
etter hvert lukket parentes.
For eksempel er det ingen neste til å annullere, og vi vil
komme tilbake i fremtiden til hva ugyldig midler.
Men i dette tilfellet din printf er en funksjon, eller en uttalelse som brukes,
og så vi ønsker å ha det endestasjonen helt på slutten av den.
>> Og jeg med vilje rørt på C. Og oppriktig en rekke språk som C, C ++
Java, Javascript, og en rekke andre språk har mye av disse
slags syntaktiske detaljer.
Som sikkert hvis du er ny på programmering kan virkelig reise deg opp.
Og du vil, merk mine ord, noen av dere vil
har denne erfaringen i kontortiden eller sent
om natten arbeider på noen p-set, hvor din jævla programmet bare ikke kompilere,
den kjører ikke, du har ingen anelse om hva som er galt,
det virker helt logisk riktig for deg.
Og det er fordi du har glemt noe som treffer
semikolon ved slutten av en linje.
>> Men dette er den slags ting du er kommer til å umiddelbart lære å se.
Og faktisk er det disse tingene at CAs og TF-er har
blitt liksom opplært til å se mye raskere enn deg.
Og så dette er bare å si, som du dykk inn i oppgavesettet en spesielt,
ikke bli frustrert av denne ting.
Når du liksom akklimatisere til verden, du
begynne å se ting som du kanskje ikke se ved første øyekast denne første uken.
>> Så kildekoden er noe sånt.
Vi ønsker å gi det inn den såkalte kompilatoren.
Og at kompilatoren som vi sa gir effekt
kalles objektkoden, såkalte nuller og enere.
Men derfra, hva som gir oss?
Vel det gir oss disse mønstrene.
Og igjen datamaskinen, Intel inne,
forstår disse mønstrene nuller og enere.
Og noen ganger mønsteret representerer en faktisk desimaltall
som vi så i forrige uke, noen ganger det representerer en bokstav
som vi så i forrige uke, noen ganger det representerer en instruksjon,
som å skrive ut noe til skjermen.
>> Så printf for instance-- men heller la meg bakover.
Vi har tatt for gitt at de nuller og enere
produsert av denne kommandoen make.
Men gjør er ikke en kompilator.
Gjør er ikke tingen i midten som er å produsere de nuller og enere.
Heller gjøre er bare en svært beleilig oppkalt program hvis formål i livet
er i hovedsak å finne ut hvordan å kompilere programmet.
Og vi bruker det i disse første ukene fordi det bare
sparer oss for mye trøbbel.
>> Men hva gjør er egentlig gjør når du kompilere hello,
er, som vi sa sist gang, er det ser på harddisken
eller i gjeldende mappe, for fil som heter hva, tydeligvis?
Hello.c, ikke sant?
Det er bare slags en konvensjon.
Det er vilkårlig, men det er slik ting er.
Lag, hvis du bare oppgir navnet av et program som ikke eksisterer ennå,
det kommer til å se etter kildekoden i en fil, som standard betyr hello.c.
Og hvis den finner det, flott.
Det kommer til å konvertere den kilden kode til objektkode for deg.
>> Men hver gang jeg har trykk Enter etter å ha kjørt gjøre hello,
Husker du å se siste gang en ganske lang og kryptisk sekvens
av andre hvite bokstaver og tegn på skjermen?
Vel det var selve kommandoen, Selve kompilatoren, som kjørte.
Så selve kompilatoren vi skal bruke mesteparten av semesteret er noe som kalles klang.
Noen av dere kanskje har brukt Visual Studio før, eller GCC,
eller hvilket som helst antall av andre kompilatorer.
Vi vil bruke klang.
>> Og klang tillater oss å faktisk konvertere at kildekoden til objektkoden.
Hva betyr dette egentlig bety i praksis?
Vel la meg gå inn i en av Mine mapper fra forrige gang.
Innsiden av CS50 apparatet.
Og la meg gå videre og lage dette samme fil, inkluderer standard I / O dot h.
Int main annullert.
Og vi vil komme tilbake i fremtiden som til hva int betyr og hva void betyr.
Men for nå la oss gjøre hello world backslash n,
akkurat som vi gjorde i styret.
>> La meg lagre denne filen som heter hello.c.
Og nå hvis jeg ønsker å kompilere dette Jeg kunne-- la meg zoome i-- løp
gjøre hallo inn.
Og dette igjen var at svært kryptisk linje.
Men nå minst ett ord sannsynligvis hopper ut på deg.
Clang er den linjen vi har sett før.
Nå er det en masse andre ting ærlig at vi vil bølge våre hender for i dag.
Men det er noen undergrupper, noen tegn i her
som er av interesse.
Men jeg kommer til å gå videre og gjøre dette.
Jeg kommer til første løp Hei, bare for å bevise
at dette fungerer som det var mandag.
Men nå kommer jeg til å slette programmet.
Og mye som vi hadde disse korte navn forrige gang,
kommandoen for å fjerne noe er rm, fjerne inn.
Du kommer til å få noen ganske kryptiske spørsmål.
Vanskelig å tro at du kan gjøre selv dette spørsmålet er vanskelig å forstå.
Men fjerne vanlig fil hallo bare betyr at du vil slette hei.
>> Og jeg kan gå videre og skriver y for ja, Enter, og nå er det borte.
Hva betyr dette nå, hvis jeg fjerner skjermen min,
er at istedenfor gjør gjøre hello-- du
Vet du hva, jeg får god på dette.
Jeg kommer til å kjøre kompilatoren selv.
Jeg trenger ikke noe program for å finne ut hva min filen heter.
Jeg skrev hello.c, jeg vet hva det heter,
Jeg er helt klart i stand til å skrive det.
Så jeg kommer til å gå videre og gjør clang hello.c Enter.
>> Synes å fungere.
Og det er ingen ekstra utgang, fordi klang er kompilatoren.
Det er det som å konvertere kildekoden til nuller og enere.
Så hvis jeg nå gjøre dot slash hei Enter, hm.
Ny feilmelding i dag.
Så bash er bare navnet på blinkende meldingen som vi bruker.
Det er en grov overforenkling, men for nå det er alt som er,
det er den blinkende meldingen.
Og det er derfor det er roping på oss.
>> Ingen slik fil eller katalog er litt mer ukomplisert.
Men sikkert jeg gjort som objektkode.
Men fangsten er, at hvis jeg skriver kommandoen
å vise innholdet i dette katalogen, som er hva?
ls for listen.
Det er en haug med ting her inne, noen som fulgte med apparatet,
som min Desktop mappe, nedlastinger mappe, Dropbox-mappen, og alle
at ting.
Men hva er interessant er hello.c, som
Jeg opprettet et øyeblikk siden med gedit.
Og hva er det merkeligste ser navn her inne,
kanskje at vi ikke se siste gang i det hele tatt?
>> a.out, ikke sant?
Så tilbake i dag, det ble nettopp besluttet at når
du kompilere et program for første gang,
og du ikke oppgir navnet av en fil, la oss kalle det en.
Og a.out betyr bare dette var produksjonen av kompilatoren.
Så det er et fryktelig navn på et program.
Men etter den logikken, dot slash for gjeldende katalog, slash a.out,
bør bety det er faktisk min hello world program.
Nå litt varme opp trening, også.
Hvis jeg ønsker å endre navnet på denne fil, viser seg at du
flytte en fil fra ett navn til et annet.
Så mv a.out, og da jeg kan kalle det hallo Enter.
Så dette er en Linux-kommando.
DOS hadde dette år siden, Windows har et terminalvindu
av noe slag som ser som dette, Linux og Mac
datamaskiner har dette blinkende teksten.
Selv om de fleste av oss sannsynligvis sjelden, om noensinne, bruk den.
>> Men det jeg har gjort er å kjøre en Programmet, som heter mv,
og jeg har gitt den med to argumenter, så å si.
To innganger.
a.out er det opprinnelige navnet.
Hei er det nye navnet.
Så hvis jeg nå gjøre dot slash hallo, Enter, finnes det.
Og hvis jeg gjør dot slash a.out, hva forventer du jeg burde se?
>> Bash, ingen slik fil eller katalog.
Fordi jeg bare omdøpt den.
Så dette tar litt tid å bli vant til.
Men problemet satt en spesifikasjonen vil virkelig
holde hånden din gjennom noe av denne minutae.
Fordi dette er en fullstendig intellektuell distraksjon
fra det mer interessant ideer for hånden, som
er faktisk lage noe ut av kode.
Men la oss gjøre en modifikasjon nå til dette programmet.
>> Husker at sist gang jeg gjorde noe som dette, printf oppgi navn.
Og ja vi nettopp gjorde dette på storskjerm der borte.
Og så gjorde jeg streng s blir GetString åpne paren, nær paren.
Og paren bare stenografi notasjon for parentes.
Så betyr GetString ta noen argumenter?
Ingen innganger Nei, men det trenger parentesene,
fordi det er det som avgrenser kallet til en funksjon.
>> Så jeg kommer til å gå videre og prøve å kjøre kompilatoren på dette programmet nå.
Klang hello.c, fordi jeg ikke endre navn for nå.
Og jeg fikk en haug med feil.
La oss zoome ut her.
Hvis jeg ruller opp igjen, som jeg sa sist gang,
til den første, samme feilen at jeg fikk forrige gang.
På linje 6 av hello.c hadde jeg en undeclared identifikator streng,
jeg mener standard i?
Jeg gjorde ikke det.
Fordi det feil har jeg gjort i dette program, hvis du husker fra forrige gang?
Ja, vi trenger såkalte trening hjul
at vi vil bare bruke et par uker.
Men jeg må presisere at også, et sted inne i apparatet,
er en fil som vi skrev bare noen få år siden.
Innsiden av disse er funksjoner som tilsynelatende GetString.
Så nå hvis jeg går tilbake hit, zoome inn, og re-run klang hello.c.
Damn, en annen feil.
Men vi har ikke sett dette før.
>> Denne er litt mer esoterisk å finne ut.
Men dette er bevisst på skjermen, fordi vi ønsket å fortelle denne historien.
Når du kompilerer hello.c, akkurat som bildet fra før foreslått,
du bare konvertere at kildekoden til nuller og enere.
Nå CS50 ansatte for noen år siden skrev CS50.h, og en tilsvarende fil,
CS50.c.
Og vi, et par år siden, kompilert disse filene
i en fil som skjer å bli kalt CS50.o.
>> Eller det kan bli omdøpt en par forskjellige ting.
Men det er en enkel måte av å tenke på det.
Så vi samlet CS50 er biblioteket til nuller og enere.
Men ingen steder har jeg spesifisert at jeg ønsker å kombinere mine nuller
og de for min hello world program med nuller og enere
at CS50 ansatte opprettet for noen år siden til en helhetlig program.
Alt jeg har angitt ved å skrive klang hello.c er kompilere hello.c.
>> Jeg har ikke fortalt klang til leddet i nuller og enere
at CS50 ansatte opprettet for deg en tid siden.
Så det er lett å fikse, dash l for link, CS50.
Og vi vil igjen se dette før lenge igjen og igjen.
Men legg merke til nå var det ingen klager.
Så nå hvis jeg kjører dot slash Hei, nå er det å jobbe.
Selv om det er litt misvisende siden jeg bare gjenskapt hva fil?
a.out.
>> Så la meg spole tilbake for bare et øyeblikk.
Programmet vi bare kompilert har de tre linjer med kode.
Når jeg kjørte hello world, hallo et øyeblikk siden, jeg fikk ikke se oppgi navn.
Og det er fordi jeg kjørte gamle versjonen av programmet.
Men hvis ikke jeg faktisk kjøre dot slash a.out Enter, oppgi navn, Rob, hallo,
verden.
Hm.
Det er litt av en bug.
Sannsynligvis mente å si Rob, ikke sant?
Så hva er fix her i kode.
STUDENT: [uhørbart].
DAVID MALAN: Nettopp.
Så jeg trenger bare å gjøre det endelige tweak slik at jeg har bestått i en plassholder,
som en fylle de tomme, som vi gjorde for et øyeblikk siden.
Men prosent s er nå at fylle inn de tomme.
Så til slutt la oss avsløre en siste detaljer, slik at det er ingen magi.
Jeg kommer til å gå videre og bli kvitt hellow.
Jeg kommer til å gå videre og bli kvitt a.out.
Så nå har jeg ingen programmer, bare min kildekoden.
Og jeg kommer til å kjøre en litt lengre kommando, klang
dash o hallo hello.c dash LCS50.
>> Nå er dette i ferd med å liksom gå i det ene øret og ut det andre kanskje.
Men bare erte hverandre hva dette gjør.
Clang er kompilatoren, dash LCS50 bevisst på slutten
gjør hva i en setning?
Lenker til CS50 biblioteket.
Griper de nuller og de som de ansatte gjorde
og crams dem inn i mitt eget program.
Så det siste spørsmålet på hånden er, hva er dash o hei trolig
gjør, selv om du aldri har sett denne syntaksen før?
>> Gi ut et program som er ikke navngitt standard a.out.
Snarere er det oppkalt hei.
Så nå er det ingen a.out.
Ingen slik fil eller katalog, fordi jeg eksplisitt sa
kaller dette programmet hello, slik at Jeg kan nå skrive inn et navn som det
og har det oppfører seg.
>> Nå ærlig, er gutten som uinteressant å ha
å huske alt dette lite minutia, ikke sant?
Så la oss gå videre og bli kvitt Hei igjen.
Og la oss nå vende tilbake til en verden som det er nok å si at hei.
Men det er magien som gjør gjør for deg,
det er tedium at det gjør for deg.
Og som våre programmer og problemene blir mer komplekse,
gjør vil virkelig være din venn.
Fordi ikke altfor lenge fra nå skal vi
å ha programmer som er skrevet ikke med én fil, men flere filer,
og gjøre vil automatisere prosessen med kompilere alt dette for oss sammen.
>> Så nå ut.
printf er innsiden av denne filen, standard I / O dot h, som vi har sett før,
men det er mer til printf enn det.
Det er backslash n, men det er også en haug med andre escape-sekvenser.
Og escape-sekvens er bare en fancy måte å si noe
som starter med en backslash, ikke en skråstrek, en skråstrek,
og gjør noen spesiell ting.
Og vi vil ikke dvele ved de fleste av disse, men hvorfor er det backslash dobbelt anførselstegn,
tror du?
Hvorfor er det denne rare sekvens av tegn, backslash dobbelt anførselstegn,
hvorfor kan det være nyttig?
STUDENT: [uhørbart].
DAVID MALAN: Nettopp, ikke sant?
Tenk tilbake til vår hello world program som vi har sett ganske mange ganger nå,
hver gang vi har sett at hello world programmet vi har hatt doble anførselstegn inni
som er hallo komma verden backslash n.
Men tenk deg selv, hva om du faktisk
ønsket å skrive ut et anførselstegn?
Ditt første instinkt kan være, vet jeg ikke vet hvorfor jeg kanskje vil gjøre-- her,
vi kan være litt passiv aggressive, hallo venn.
Vi kan ønske å gjøre noe sånt.
>> Men hvorfor er dette nå problematisk?
Ignorerer krøllete sitater side at keynote gjort for oss automatisk.
Hvorfor er dette problematisk?
>> Nettopp.
Fordi vi har som 4 anførselstegn.
Vel det første man trolig går med den andre,
og kanskje den fjerde går med den tredje,
eller, jeg mener jeg er ikke engang sikker, heller ikke er maskinen kommer til å bli.
Datamaskiner igjen, kompilatorer igjen, er ganske dumme.
De vil bare gjøre det du forteller dem å gjøre.
Og hvis du ikke er entydig de er sannsynligvis kommer til å kaste en feil.
>> Hvis du ikke er entydig om hvordan man skal lage en peanut smør og gelé sandwich
merkelige ting kan komme.
Det er den samme ideen.
Nå er nok å si at det er noen andre escape-sekvenser,
men vi kommer til dem før lenge.
Hovedsak disse flukt sekvenser representerer noe
at du ikke kan være i stand for lett på tastaturet,
uten forvirrende datamaskinen.
>> Nå i mellomtiden har vi plassholdere i printf.
Prosent d, som også kan skrives i nesten alle tilfeller som prosent i,
er en plassholder for hva slags data?
Hva slags verdi?
Et desimaltall.
Så egentlig vil vi starte ved hjelp av prosent i fordi det er
litt enklere, for eksempel et heltall.
Prosent i.
Et heltall som skjer for å være desimal.
>> Prosent s vi allerede sagt var en plassholder for en streng.
Som er bare et ord, en setning, et avsnitt, et essay, uansett.
Det er en sekvens av tegnene i noen lengde.
Og vi får se før lenge noen av disse andre.
Men prosent c er for en enkelt tegn.
Prosent f er for en flyttall,
som et reelt tall som har desimaltegn i den, som
er selvfølgelig ikke er et heltall.
Og det er en hel haug med andre også.
>> I mellomtiden i C, og i en rekke språk,
vi har ulike datatyper.
Forskjellige glass boller hvis du vil.
Bollen jeg brukte forrige gang var for ping pong-baller,
men vi kan også lagre forskjellige verdier som tegn og strenger
og heltall i en container, som en variabel, og C har disse.
Røye er den type data, den type variabel,
der du kan lagre et tegn.
Float er en type variabel i der du kan lagre et reelt tall.
>> Int er selvfølgelig for en int.
Og heller latterlig heter en lang lang
er der du kan lagre hovedsak en veldig lang rekke, med enda
flere sifre deretter en typisk int makt butikken.
Men vi skal komme tilbake til det før lenge.
>> I CS50 dot h i mellomtiden den andre header-fil
at vi har sett et par ganger i bruk, er det
to andre datatyper som ikke finnes i C typisk.
En er streng, og vi vil se i noen uker hvilke strenger virkelig
er under panseret.
Og man er bool.
Og en bool er en variabel som kan bare ta på visse verdier.
Og bare basert på forrige ukes forklaring av Scratch,
og mer nylig C, hva ville du gjette
er de to mulige verdier for noen beholder som er av typen bool?
>> Ja og nei.
En og null.
Sant eller usant.
Og ja det er det siste som har en tendens være konvensjonelle i et programmerings
språk, å si noe som sant eller usant.
>> Imens CS50 biblioteket kommer med en haug med funksjonalitet
at de ansatte skrev for deg, foruten bare å få en streng.
Vi skrev på forhånd funksjoner som kan få et helt tall fra brukeren,
få et enkelt tegn, får en dupp, som
er bare et tall med desimaltegn.
Få en lang lang, en virkelig stor verdi fra brukeren.
Så vi har bare sett dette i handling i form av GetString.
Men via disse funksjonene vil snart være i stand til å skrive
programmer som får input fra brukeren.
>> I mellomtiden vurdere dette program, og vurdere
hvordan vi kan nå begynne å legge til det med nye konstruksjoner.
En rask virvelvind tur og så får vi se
på noen skrive noen programmer manuelt selv.
Heretter hvis vi ønsker å implementere en tilstand,
det er ikke til å se ut som en fint lite pen puslespill brikke.
Det kommer til å se litt mer uforståelige.
Men dette er den kanoniske Strukturen av en tilstand i C.
>> Ordet hvis to parentes, innsiden av som
kommer til å være en slags boolsk uttrykk.
Nå slash slash i midten, er dette
i øyeblikket liksom som pseudokode plassholder.
Men mer riktig, noen linje med kode i C som starter med skråstrek skråstrek
er en kommentar.
>> Det er som en gul lapp som du kanskje sette på et essay, trykt på papir.
Det er et notat til deg selv.
Det har ingen funksjonell innvirkning på programmet.
Det er liksom en påminnelse, er det din egen dokumentasjon på hva som skjer.
Så gjør dette i øyeblikket er liksom en plassholder
for hva som er inni av de klammeparentes
til slutt kommer til å gjøre noe.
>> I mellomtiden har du to gafler i road, en if else konstruere som dette.
Du kan hvis, elseif, annet.
Nå er det verdt å merke seg, spesielt hvis du har vært Googling rundt
online for ressurser ut av nysgjerrighet, eller hvis du plukke opp
en av kursets anbefalte bøker om C,
vil du se at mennesker har mange av ulike preferanser for hvordan
til å uttrykke seg i kode.
Noen mennesker liker å sette klammeparentes som jeg har gjort her.
Noen mennesker liker å sette den krøllete tannregulering for eksempel opp her.
>> Noen mennesker liker å sette den andens opp her og deretter dette over her.
Det er en rekke måter å skrive-kode, og ingen av dem
er riktig per se.
Selv om det er noen som er ganske galt.
Men det er no-- hvis dette er til slutt en veldig religiøs debatt.
Faktisk en av de mest irriterende ting om informatikk
er hvor sta dataforskere kan være.
Og du vil finne over tid som selv du utvikle personlige preferanser
om hvordan koden skal se ut.
>> Ikke bare oppfører seg, ikke bare lage utgang, men hvordan det skal se estetisk.
Så det vi vil gjøre er å veilede deg langs an mot, for å nå det minste
en standard CS50 stil at minst holder ting uniform og lett å lese.
Men mer om de distinksjoner før lenge.
>> Et boolsk uttrykk i C, hvis du ønsket å si om denne betingelsen er sann
og denne andre betingelsen er sant, trenger du ikke skrive ordet
og, som du ville gjort på engelsk.
Du stedet bruke ampersand ampersand, av grunner vi vil komme tilbake til.
Hvis du ønsker å si, eller du bruker to vertikale barer, som på et norsk tastatur
er generelt over Enter tasten ved siden av backslash.
Og dette bare betyr at hvis denne tilstanden eller denne andre betingelsen er sann gjøre dette.
>> I mellomtiden er det denne sprø ting, som
vil du ha anledning å bruke en gang i en stund.
Men det er bare et alternativ måte å uttrykke deg selv.
Dette, for nå, la oss fastsette, det er bare
en annen funky måte å uttrykke hvis, elseif, elseif, elseif, elseif.
Det er bare formatert i form av tilfellene, hvor du bokstavelig talt
oppsummere de verdiene som kan det være lurt å se etter.
>> I mellomtiden looper.
Vi så en sammenligning av Skrap med en løkke.
Og jeg kommer til å vinke min hånd på hva hver av disse tingene betyr.
Men legg merke til at en loop vil veldig starter ofte med nøkkelordet for.
Eller det vil begynne med søkeordet stund.
Eller det vil starte med nøkkelordet gjøre, og ender med nøkkelordet stund.
>> Men det vi er i ferd med å se er ting mer som dette.
Her er generelt i C, hvordan du kan deklarere en variabel og gi den en verdi.
I C er det ikke nok, som i Scratch, du bare
si gi meg en variabel kalt noe.
Du må fortelle C, og fortell kompilatoren, mer spesifikt,
hva slags verdi har du ønsker å sette i glassbollen.
>> Er det et heltall?
I så fall må du bokstavelig talt si int og deretter
navnet på variabelen, deretter et semikolon.
Hvis du i stedet ønsket streng og kalte Det er som jeg gjorde min kode her i dag,
du vil si streng s semikolon.
Når du ønsker å gi den en verdi Du kan deretter bruke likhetstegnet,
ellers kjent som oppdrag operatør.
Og legg merke til hvordan hver av disse linjene med kode
har de semikolon ved enden av den.
>> Men ærlig talt dette bare ser litt stygg.
Hvorfor kan jeg ikke si til datamaskinen, gi meg en variabel og initialisere den til null.
Det vil si, gi meg en tom glassbolle.
Mens du kan.
Og så en av dommen kaller du vil har å gjøre stilistisk over tid
er, skriv du din kode som dette, eller du slags rydde opp og imponere
folk ved å skrive to linjer som bare ett.
Og dette vil bli betraktet generelt en mer elegant måte
skrive koden din stilistisk.
>> Funksjoner vi er selvfølgelig sett.
De kommer til å ta dette formatet.
Navnet på en funksjon, noen parenteser, og deretter kanskje noen
ting inni.
Eller du kan se bruk av flere funksjoner side
ved side, som noe som dette.
Nå som en tangent, gjør denne spøken nå fornuftig?
>> [Latter]
Det betyr ikke at det er morsomt, men det betyr kanskje gjøre en litt mer fornuftig.
Så nå la oss gå inn i CS50 apparatet et øyeblikk.
Og la meg åpne opp en teaser her.
>> Og faktisk en av grunnene for innføring av IKEA-katalogen
og blinkende bilde av iPhone litt siden
var å faktisk knytte sammen faktum at bare noen få år siden, i 2007,
denne del av koden var frigjøres, som ble
en av de aller første gjennomføringen av et stykke av programvare
som gjør det som kalles jailbreaking.
For dem ukjent, jailbreaking noe som en telefon eller en iPhone
betyr i hovedsak å finne ut hvordan ting skal gjøres
med det at selskapet som gjorde det ikke har tenkt.
Som du ønsker å installere visse programvare som ikke er i app store,
jailbreaking telefonen som du gjøre ting som dette og mer.
Men hva var det gøy i 2007-- og det har vært
dusinvis av forskjellige versjoner av disse ting siden da,
i alle slags languages-- er at dette programmet her, kalt iUnlock,
ble faktisk skrevet i C. Og så jeg trakk opp kildekoden for dette,
bare for å slags vise deg noen av likhetene med de konstruerer
vi har diskutert så langt.
Nå er det mye mer kompleksitet her enn vi har sett allerede i klassen.
La meg bla opp bare en liten bit her.
>> Men legg merke these-- godt vi merker noen things-- men legg merke til disse linjene her,
inkludert standard I / O dot h.
Og alle-- linje 24, vennligst bli merke standard I / O
dot h og en hel haug med andre Filer som tilsynelatende andre mennesker
har skrevet.
Og hvis vi bla nedover gjennom dette, litt vilkårlig,
merker jeg ikke vet hvordan du skal skrive alt dette selv nødvendigvis ennå,
men det er hvis.
Så tydeligvis dette har en filial.
>> Og hvis jeg blar ned litt videre det er en annen hvis.
Hvis jeg bla opp, tror jeg rundt linje 100 jeg så etter.
Så jeg er ikke helt sikker hvordan dette fungerer ennå,
men dette er en for løkke som kommer til å la meg iterere et antall ganger.
Og hvis jeg bla alle veien til bunnen
Jeg ser at det er en fungere her nede kalt
viktigste, og noen ekstra studiepoeng for din leseglede.
>> Så dette er bare for å si-- og vi vil sette dette online blant kursets kilde
kode today-- at selv noen av disse enheter som vi tar for gitt,
på slutten av dagen du fortsatt ved hjelp av disse grunnleggende begreper som vi har
vært å innføre allerede så langt.
Det er nok av den.
Ok, så la oss nå faktisk bygge noe.
>> La oss gå utover noe sånt hello.c, og åpne opp dette,
La oss skrive dette programmet her.
Jeg kommer til å gå videre og skrive et program som heter adder.c,
hvis formål i livet kommer til å være som min første super enkel kalkulator
som bare legger et par tall.
Ikke fordi det er en vanskelig problem, men fordi det
tillater meg å nå knytte sammen et par ting.
Så jeg kommer til å gå videre og omfatte standard I / O dot h og CS50 dot h.
Jeg kommer til å si int main annullert.
Og igjen i fremtiden vi vil komme tilbake til det
inn i denne sammenhengen og maktesløse midler.
>> Og nå kommer jeg til å si noe som printf, gi meg et heltall.
Og nå på min andre linjen, hvordan uttrykke jeg meg selv slik
at jeg ønsker å erklære en variabel som kommer til å lagre en int?
Bokstavelig talt hva jeg skriver om jeg vil oppretter en variabel som lagrer en int
ville du si?
int en lik getint.
Jada, så som fungerer.
Og bare for konsistens med koden du
ser på nettet, la meg endre dette til x, bare fordi x
er et felles variabelnavn å bruke, i alle fall i algebra.
Nå la meg gå videre og gjøre printf igjen.
Gi meg et annet heltall.
Og nå kommer jeg til å form av lære av dette mønsteret,
Jeg kommer til å si int y får GetInt.
>> Og vi har brukt GetInt før, men bare
som GetString går og får en streng, som Javier gjorde fra publikum,
Tilsvarende gjør GetInt begynner å blinke spørsmålet.
Og effektivt venter på at brukeren å gi den et heltall, ved å skrive det inn
og trykket Enter.
Nå til slutt kommer jeg til å gjøre dette, printf summen of--
og la meg få fancy now-- prosent i og prosent i er til stede
Jeg utropstegn backslash n.
Og hva tror du jeg kommer til å satt i nå som de ekstra innganger
til printf?
>> Jeg ønsker ikke å si bokstavelig sitere unquote x.
Jeg ønsker å klasse i x og da, og nå la oss få fancy
og la oss bare anta Vi kan gjøre hva vi vil.
Hva du ønsker å si neste?
x pluss y.
Og ja det vil fungere.
Det er minimalt programmeringsspråk forstår grunnleggende aritmetikk,
og så dette bør faktisk arbeid.
>> Så la meg gå videre og gjør huggorm i min svart og hvitt vindu
her nede, Enter.
Cryptic linje, men ingen feil melding, så det er bra.
Dot slash huggorm, gi meg et heltall, 1.
Gi meg et annet heltall, to.
Summen av 1 og 2 er 3.
>> Ok, så en ganske triviell program, men hva er det gjort?
Det er tillatt meg å bruke en funksjon syne her, ringe en annen funksjon her,
to samtaler til GetInt, en tredje kall til printf,
og deretter bruke disse plassholdere.
Så det er litt mer sofistikert enn forrige gang.
Men hva hvis jeg vil få en litt mer avansert?
>> La meg gå videre og nå gjør dette.
La meg gå videre og skape en ny fil som heter forhold null.
Og jeg kommer til å spare litt tid for klasser skyld
og limer i at kode som utgangspunkt.
Og nå er jeg bare kommer til å sette noe nytt her i midten.
Så printf jeg ønsker et heltall takk.
Og all denne koden er tilgjengelig på kurset hjemmeside,
du trenger ikke skrive det ut i klassen hvis du heller ikke.
int, og nå kommer jeg til å bruke, i stedet for x og y,
Jeg kommer til å bruke n, som er trolig den mest vanlige navnet
for et helt tall i et dataprogram.
Og nå ønsker jeg å gjøre en litt kritikk her.
Jeg kommer til å se om n er større enn 0, og deretter
Jeg kommer til å si printf-- whoops, printf-- du plukket et positivt tall,
utropstegn backslash n.
Lukke det.
Else Jeg kommer til å skrive ut printf du plukket et negativt tall.
>> Nå før du kjefte på meg, la oss kjøre dette programmet.
La meg gå ned her.
Og hvordan kompilere jeg et program kalt forhold dash 0?
Gjøre forholdene dash 0.
Slag av en dum navn, men-- faen.
OK, god undervisning øyeblikk.
Hvorfor gjorde at bryte?
>> Hva gjorde jeg tilfeldigvis kalle denne filen?
Du kan slags antyde fra kategorien her oppe.
Så det er ikke ille at jeg gjorde dette, fordi dette
vil skje kanskje for noen av dere.
Så jeg tilfeldigvis heter min kildekode tilstand 0.
Men min kilde kode ved konvensjon bør være i en fil kalt tilstand 0 dash c,
eller hva dot c.
>> Så la meg fikse dette.
Akkurat som Microsoft Word jeg kan gå opp Lagre som og gjøre tilstanden 0 dot c.
Nå bare å være ryddig jeg er kommer til å gå videre og ta
tilstand 0, som var min gamle versjonen.
Og nå la oss gjør tilstand 0, Enter.
OK, virker bra.
>> Tilstand 0, Enter.
Jeg ønsker et heltall please, 50, du plukket et positivt tall.
Nå hva med negativ 50?
Du plukket et negativt tall.
Hva med nå, 0.
Ganske sikker på at 0 er ikke negativ.
>> Så dette er en slags logisk feil.
Hvordan løser jeg dette?
Else hvis n er mindre enn 0, gjør dette, annet vi kan ha en treveis gren her,
printf du plukket 0.
Så nå hvis jeg kjøre dette program etter kompilering av det
igjen med make, og nå kjøre tilstand 0, hva jeg vil se her
er 0 gir meg at produksjonen.
Så hvor skal vi med dette?
>> Vel det er veldig lett å miste av syne av skogen for bare trær.
Og så la oss til å konkludere med denne 2 og 1/2 minutters video
som til slutt er litt av en annonse fra Google,
men som egentlig er testament til hva selv ved hjelp av disse grunnleggende bygge
blokker vi kan til slutt gjøre en gang vi har en bit av programmering
savvy under våre belter.
>> [Musikk spilles]
>> SAROO Brierley (voiceover): Det var 26 år siden,
og jeg var bare om å slå fem.
Vi fikk til jernbanestasjonen og vi bordet vårt tog sammen.
Broren min sa bare at jeg vil bo her, og jeg skal komme tilbake.
Og jeg tenkte, vel du vet, Jeg kan like godt bare gå i dvale
og han vil bare vekke meg.
Og da jeg våknet opp neste dag, hele vogn
var tom på et løpsk tog, et spøkelse toget tar meg jeg vet ikke hvor.
>> Jeg ble adoptert ut til Australia, til en australsk familie.
Og mamma hadde dekorert min rommet med kart over India,
som hun satt ved siden av sengen min.
Jeg våknet opp hver morgen ser at kartet, og dermed
det liksom holdt minnene i live.
Folk vil si, du er prøver å finne en nål
i en høystakk, Saroo du vil aldri finne den.
>> Jeg ville ha blinket av de stedene som jeg brukes til å gå, de blinker av familien min
ansikter.
Det var bildet av min mor, sitter med bena i kors,
bare se henne gråte.
Livet er bare så vanskelig.
Det var min skatt.
Og jeg var ute på Google Map og innså at det er Google Earth også.
I en verden der du kan zoome inn, Jeg begynte å ha alle disse tankene
og hvilke muligheter at dette kunne gjøre for meg.
Jeg sa til meg selv, du vet, har du fikk alle de fotografiske minner
og landemerker hvor du er fra, og du vet hva byen ser ut.
Dette kan være et program som du kan bruke til å finne veien tilbake.
>> Jeg tenkte, vel jeg vil sette en prikk på Calcutta jernbanestasjonen,
og en radius linje, vet du, at du bør søke rundt dette området.
Jeg liksom kom over disse toget spor.
Og jeg begynte å følge den, og Jeg kom til en jernbanestasjon som
reflekteres det samme bildet som var i mine minner.
Alt matchet.
Jeg tenkte Jepp, jeg vet hvor jeg skal.
Jeg skal bare la kart som jeg har i hodet mitt
føre meg og ta meg tilbake til min hjemby.
>> Jeg kom til dørstokken huset som jeg ble født.
Og gikk rundt ca 15 meter rundt hjørnet,
det var tre damer stående utsiden, ved siden av hverandre.
Og den mellomste gikk frem, og Jeg tenkte, dette er din mor.
Hun kom frem, hun klemte meg, og vi var der i ca fem minutter.
>> Hun tok meg i hånden og hun tok meg med til huset
og fikk på telefonen, hvor hun ringte min søster og min bror
å si det, vet du, din bror har nettopp
alle plutselig dukket opp som et spøkelse.
Og da familien ble gjenforent igjen.
Alt er bra, Jeg hjalp min mor ut,
hun trenger ikke å være slaving bort.
Hun kan leve resten av sitt liv i fred.
>> Det var en nål i en høystakk, men nålen var der.
Alt er der.
Alt vi har i verden er på peke på en knapp.
Men du må ha vilje og vilje til å ville det.
>> [Musikk spilles]
DAVID MALAN: Wonder søt anbefaling
til akkurat hva du kan nå gjøre med teknologi.
Vi vil se deg neste uke.