>> [Speel van musiek]
>> David Malan: Alle reg.
Welkom terug.
Dit is CS50, en dit is Een week, het voortgegaan.
So een van die redes waarom ons al verby om tegnologie soos
Google Glass is dat hulle kom met iets wat bekend staan ​​as 'n API, 'n
Aansoek Programming Interface.
En wat dit beteken, is dat met die reg lêers en met die regte
dokumentasie, kan jy eintlik skryf sagteware vir selfs toestelle soos hierdie.
>> En ja, wat ons in gedagte het na semesters einde is, as 'n projek
wat, sê, Google Glass kan appèl, sal ons sien wat ons kan doen in
terme van die haak jy met 'n paar loaner hardeware sowel as die
die publiek toeganklike API sodat jy kan eintlik begin met die skep sagteware
wat loop op dieselfde Google Glass.
>> Nog 'n toestel wat ons het al speel met van die laat wat ons gedink het sou wees
pret by semester se einde is hierdie klein ding hier.
Dit is bekend sprong Motion, en wat is jy om te sien, is tegnies 'n
advertensie vir die toestel, maar dit praat nie van wat hierdie spesifieke
toestel in staat is.
En dit ook, kom met 'n API via wat jy kan skryf sagteware
beheer van jou eie rekenaar op 'n wyse hou van hierdie een-minuut-film hier.
>> [Video speel]
>> [Einde video-vertoning]
>> So nou, hierdie toestel gebeur geïmplementeer word as 'n klein USB
stuk wat jy kan aansluit in jou rekenaar, maar ek sou nie verbaas wees
indien daar voor lank het ons hierdie soort tegnologie in die volgende groep van rekenaars
en Macs sodat jy kan inderdaad interaksie met dit in
'n wyse soos dit.
In werklikheid, wat ek gedink ek wil doen, ook, is Ek trek 'n bietjie demonstrasie
program wat kom met hierdie sagteware.
So ek het die klein sensor in die voorkant van my laptop.
>> En soos jy kan sien, is dit besef reeds dat my hand is daar
om dit te beheer.
En al hierdie aansoek doen, word dakje min dinge soos hierdie.
Maar jy kan sien dat, wel, Ek het vyf vingers daar.
As ons dit kan kry al 10 te doen, jy kan dink 'n netjiese klavier
aansoek of die wil.
So as jy wil om te kom na die klas vandag en speel met wat as
Wel, is jy welkom om te.
So meer op wat in die rigting van semester se einde.
>> So 'n paar van die administratiewe aankondigings.
Een, doen artikel deur hierdie Vrydag op die middag by cs60.net/section.
Dit URL is op die kursus se tuisblad as well.
In die tussentyd, al is, supersections sal debuut hierdie Sondag.
Supersections is 'n een-time ding, want dit neem ons 'n tyd om te werk
uit wie is in watter afdeling en waar.
>> So eerskomende Sondag, sal daar 'n artikel vir diegene wat minder gemaklik,
een artikel vir diegene meer gemaklik.
En dié van julle êrens in tussen is welkom om te gaan na
een of albei of nie.
Beide van hierdie sal verfilm word.
Hulle sal in 'n groter ouditorium as 'n artikel normaalweg sou wees in
Maar die doel hier is om jou toe te rus met 'n troos met die probleem wat een,
met C, met die CS50 toestel, hierdie naweek, nog voor jy vind uit jou
formele artikel opdrag.
So jy sal voldoen aan jou TF en jou kleiner groep sectionmates in oor
'n week se tyd.
>> Kantoorure, intussen, is aan die gang.
Doen neem voordeel van hulle vanaand of môreaand as jy wil.
Gestelde probleem 0 is as gevolg op Vrydag.
Dit is 'n dag later as die gereeld-geskeduleer Donderdag.
Maar met die probleem set 1, sien jy dat dit sluit 'n paar warm-up
oefeninge waarmee jy jouself kan verleng jou
Donderdag sperdatum tot Vrydag.
Probleem set 1, intussen, sal debuut op die kursus se webblad die komende
Vrydag, as jy wil om te krul met dit soos ek gedoen het eens op 'n tyd laat
Vrydag nag in jou kamer.
>> So cs50.net/appliance is die plek waar kan jy die CS50 toestel
dat ons begin gebruik op Maandag.
Ons sal dit gebruik om 'n bietjie meer vandag.
Maar wees verseker dat die probleem stel 1 spesifikasie sal loop jy deur
presies die stappe wat jy nodig het dat om op te staan ​​en loop.
So moenie bekommerd wees oor dit te doen voordat Pset 1 As jy liewer nie.
>> Alle regte.
So het ons gekyk op Maandag by die bron-kode, maar in die konteks van 'n nuwe
programmeertaal, naamlik C. en C, Anders nuuts af, is nie grafiese.
Dit is nie die stukke van die legkaart.
Dit is meer Engels-agtige sintaksis.
En daar is 'n paar van die stappe wat betrokke is in werklikheid skryf en die bestuur van 'n
program in C, want behalwe bron kode soos hierdie, moet jy iets
bekend as 'n samesteller.
En in leketaal, wat nie 'n vertaler vir ons kan doen?
Ja.
>> STUDENT: Dit vat die kode dat jy skryf aan 0e en 1e.
>> David Malan: Goed.
So dit vat die kode wat ons skryf aan 0e en 1e.
Dit vat sogenaamde bron-kode te voorwerp-kode, die laaste wat lyk
'n bietjie iets soos hierdie.
En dit is jou CPU, die brein binnekant van jou rekenaar, wat as gevolg van die
mense wat die rekenaars geskep, weet wat die rye
van 0'e en 1'e gemiddelde.
>> Miskien is dit beteken druk.
Miskien is dit beteken byvoeging.
Miskien is dit beteken aftrek.
Miskien beteken dit vertoon 'n grafiese.
Daar is vooraf patrone van stukkies dat die wêreld het besluit beteken
sekere dinge.
Maar vir die grootste deel in hierdie kursus, ons sal werk op 'n hoër vlak, en
sal ons as vanselfsprekend aanvaar dat daar bestaan dinge soos opstellers wat kan
maak ons ​​bron-kode funksie in die manier waarop ons plan.
>> So het die program het ons geskryf eerste is, laaste week en dan begin om na die hawe, so te
spreek, tot C afgelope Maandag, was hierdie.
Wanneer groen vlag gebruik het, sê hallo.
Dit was, natuurlik, geskryf in nuuts af.
En ek het beweer dat die ekwivalent program in C het 'n bietjie
iets soos hierdie.
>> So, wat ek gedink ons ​​wil doen op die eerste is, laat se terg mekaar wat lyk, op die eerste
oogopslag, weliswaar, soos billik arcane sintaksis, maar jy sal begin om op te let
patrone baie vinnig.
Wat sal ons doen ook vandag verskaf jy met 'n geestelike model vir 'n paar
kanoniese, 'n paar standaard konstrukte in ontwikkeling.
En dan sal ons werklik ons ​​hande vuil met 'n paar voorbeelde as well.
>> So vir die van julle meer gemaklik, besef dat hierdie week en dan volgende
week kan baie goed wees om 'n bietjie van die hersiening.
Maar veral wanneer die hacker uitgawe van die probleem stel 1 loop uit op die
Natuurlik se webwerf op Vrydag, dink ek jy sal vind dat selfs as jy vul
sommige spasies oor die volgende week of twee, jy sal begin al hoe meer te kry
uitgedaag en ontmoeting nuwe en nuwe dinge.
>> So laat terg hierdie program uitmekaar 'n paar lyne op 'n slag.
Op die heel boonste, ons het wat is tegnies bekend as 'n
preprocessor richtlijn.
Dit is net 'n reël van die kode wat sê die inhoud van 'n lêer in te sluit,
genoem standaard I / N, standaard insette - of, jammer, standaard I / O, standaard
toevoer / afvoer,. h, binne van my eie program.
>> So met ander woorde, as ek dit geskryf het program met 'n eenvoudige teks editor soos
gedit, die eenvoudiger ekwivalent van iets soos Microsoft Word, wat
onderrig, # sluit stdio.h, is net gaan die vertaler te vertel, gryp die
inhoud van daardie ander lêer, stdio.h, en plak hulle hier.
>> Nou, hoekom ek omgee?
Wat het ons beweer is binnekant van hierdie lêer genoem stdio.h, wat gestoor word
iewers op my hardeskyf, of in hierdie geval, iewers in die CS50 toestel?
Iemand anders het dit daar vir my.
Maar wat is in dit?
>> Ja, so dit is 'n verklaring van 'n funksie genoem printf.
So printf herinner aan die funksie wat uitstallings woorde en karakters en
nommers op die skerm op my bied.
Maar ek het nie skryf dit.
CS50 het nie skryf nie.
Iemand jaar gelede geskryf het, en hulle wese het ons die resep vir dit
in 'n lêer genaamd stdio.h.
Sodat die eerste lyn gee my net toegang om funksies wat iemand anders
jare gelede geskryf het, onder wat printf.
>> Nou, die volgende lyn Ek gaan my te waai hand op, ten minste tot volgende week.
Maar vir nou, weet dat int main (void) is wese die ekwivalent van hierdie
geel legkaart stuk toe groen vlag gebruik.
Die wêreld, jaar gelede, het besluit dat indien jy skryf 'n program in die
taal, die sogenaamde C, jy begin jou program met 'n lyn
wat lyk soos dit.
In net oor 'n week se tyd, sal dit maak sin wat int is, wat leeg is.
Maar vir nou, dink net aan dit as dit geel legkaart stuk.
>> Nou volgende, ons het 'n krullerige stut gevolg deur 'n ander naby krullerige stut,
om so te praat.
En ons sal sien hierdie hele programme in C, sowel as
JavaScript en PHP.
En dit is net omsluit verwante reëls van die kode.
Die oop krullerige stut wese sê, hier kom 'n kode.
En die geslote krullerige stut, wat hoek in die ander rigting, net
beteken, dit is dit vir die relevante kode.
>> So het die sappige lyn in die eerste program is die laaste, printf,
quote-unquote, hallo wêreld.
En ek het die ding tussen aanhalings wat die vorige keer?
So dit is 'n string.
En 'n string is net die techie term vir 'n reeks
karakters, 'n woord, 'n frase.
Selfs 'n enkele brief kon word dubbel aangehaal.
Maar dit is 'n reeks van nul of meer karakters.
>> Agteroorskuisstreep-n, al is, lyk 'n bietjie vreemd.
Maar dit net iets beteken eenvoudige na die rekenaar.
Wat is agteroorskuisstreep-n?
Nuwe lyn.
So dit is net die spesiale reeks karakters wat die wêreld het besluit
middel sit 'n lyn breek net daar, omdat die samesteller sal kry eintlik
verward, gewoonlik, as jy, baie verstaanbaar, maar verkeerd, net
begin slaan Tik te sit nuwe reëls in jou kode.
Jy moet 'n bietjie meer eksplisiete met agteroorskuisstreep-n.
>> En ons sal sien daar is 'n paar ander sulke patrone vir spesiale karakters.
Byvoorbeeld, om as jy wou laat jou gedagtes dwaal na 'n hoek geval,
veronderstel dat ek wou 'n te druk dubbel kwotasie op die skerm vir
watter rede ook al, sou dit lyk asof 'n bietjie problematies, reg?
Want as ek 'n dubbele quote in die middel van "hallo, wêreld," vir alles wat
rede is waarom dit lyk asof potensieel problematies?
Dit breek die tou.
>> Die samesteller is net 'n program.
'N program soos 'n vertaler is net gaan jou kode top te lees na onder,
links na regs.
En as daar drie dubbele aanhalingstekens plaas van twee, is dit nie gaan om te weet
as jy bedoel dat die ding aan die linkerkant moet die string, of die ding te wees
die reg of die hele ding.
Dit is dubbelsinnig, en so wat 'n tipiese samesteller sou doen, is net freak uit,
en gee jou 'n fout boodskap, en maak dat jy gaan met die probleem.
>> So gegee dat agteroorskuisstreep-n 'n nuwe lyn, wat sal jou instink nou
begin om te wees as jy wil in te sluit iets onreëlmatige soos 'n dubbele
haal die binnekant van hierdie andersins aangehaal string?
Agteroorskuisstreep-dubbel kwotasie.
En so sal ons sien hierdie soort patroon ook.
>> As jy iets 'n bietjie te doen vreemd, sal jy vind dat die
oplossings dikwels 'n patroon, en die agteroorskuisstreep
dui op 'n ontsnapping ry.
En dit beteken net iets spesiaals dat ons nodig het om te verteenwoordig in 'n
ander manier.
Soos vir hoe jy verteenwoordig 'n agteroorskuisstreep, Wel, ons sal
kom terug na daardie.
Maar die antwoord nie, ook, is eintlik 'n bietjie voor die hand liggend.
>> So laat ons nou stel 'n ander programmering konstrukte
wat jy gesien het in nuuts af.
Jy het waarskynlik as vanselfsprekend aanvaar reeds as jy reeds duik in
probleem gestel 0.
Maar laat ons nou die sintaksis in C vir hierdie andersins redelik intuïtief
idees, ten minste sommige van hulle.
>> So hierdie idee van 'n toestand of 'n tak, terwyl voorheen ons
verteenwoordig dit met 'n kode wat lyk soos hierdie aan die linkerkant in Scratch -
As x is minder as y, dan is dit te sê -
plaas nou in C - laat my slyp in die eenvoudigste geval -
ons net gaan om te sê, as, oop hakies, iets waar is - 'n
Boole-uitdrukking gaan om te gaan waar ek het gesê toestand -
naby hakies, doen dan wat is binnekant van die krulhakies.
>> So ook hier die krulhakies is soort van soos Scratch se
U-vormige stukke van die legkaart.
Weet wat is binne-in hierdie krullerige draadjies.
In hierdie geval, streep streep.
En sien dit is 'n vorentoe streep, nie 'n agteroorskuisstreep.
Slash, slash, Vir diegene wat nog geprogrammeer
voor, beteken net -
dit is net 'n kommentaar.
'N comment is nie 'n lyn van die kode, per se.
Dit is 'n reël van die Engelse dat jy, die menslike, geskryf het om jouself te
miskien herinner om iets te doen, te verduidelik aan jouself, te verduidelik
iemand anders, wat jou kode doen.
Dit is net 'n beskrywende kommentaar.
>> Nou, natuurlik, kan ons 'n twee-rigting Vurk in die pad net deur dit te doen, 'n
drie-pad vurk in die pad deur te doen hierdie, en as jy aanhou om hierdie
patroon, kan jy vier-pad, Vyf-pad, ses-pad vurk in die pad as
wat jy nodig het om te hanteer, inderdaad, dat baie voorwaardes.
En dan sien die parallel hier -
if (toestand), anders as (toestand), en die enigste een wat 'n bietjie
vreemd is, is die laaste, wat is net dat anders.
Maar weereens, dit is identies, konseptueel, na wat ons gedoen het,
reeds, selfs al is die sintaksis sal neem 'n bietjie gewoond raak aan.
>> Nou, in hierdie voorbeeld, is daar 'n ander vreemde sintaksis.
Ons sien printf weer oop hakies, en naby hakies.
En binnekant van daar 'n string aangehaal.
Die hakies, in die konteks van printf, gaan aan die linkerkant
en regs van wat?
Wat beskryf ons wat aangehaal string as meer algemeen?
>> So dit is 'n argument.
Enige tyd wat jy het 'n funksie, soos printf, en dan 'n oop hakie en 'n
naby hakie en iets binne dit, of is dit 'n string, of 'n
integer, of enigiets anders, die ding in tussen die hakies genoem
'n argument.
>> En 'n argument beïnvloed net die funksie se gedrag.
In hierdie geval, dit is redelik duidelik hoe.
x <y is wat oorgedra word in, so te sê, as 'n argument.
En printf gaan druk presies dit.
Want sekerlik, die persoon jaar gelede wat geïmplementeer printf het geen idee gehad
wat ons menslike opvolgers gaan printf gebruik.
So dit is waarom argumente bestaan, te gedrag beïnvloed na 'n funksie se
geskryf is.
>> Nou, Boole-uitdrukking.
Ons het gesien dat hierdie voor in nuuts af.
Dit blyk in C kan u ook "of" hulle saam, om so te praat.
Twee vertikale bars beteken dat hierdie blok van die kode, dit doen, sal
voer as die eerste voorwaarde is waar of die tweede voorwaarde is waar.
En selfs al sou jy nie gedoen het nie hierdie in nuuts af, jy kan inderdaad
doen dit in nuuts af, en jy kan ook druk jouself anders -
As die eerste toestand en die tweede toestand waar is, dan weet wat is
binnekant van die krulhakies.
>> En net as 'n eenkant, die rede waarom dit 'n dubbel-teken en 'n dubbele
vertikale bar, sal ons uiteindelik sien dat 'n enkele vertikale bar en 'n
enkele ampersand eintlik het verskillende betekenis in C. So vir nou,
dat duplisering van simbole is opsetlike.
>> So laat stel, kortliks, hierdie ander bietjie van die sintaks.
Dit beteken nie heeltemal oorgedra word na Nuuts af, maar ek beweer dat ek kan
implementeer om die idee van 'n as anders, as anders, indien anders as anders verklaring gebruik
iets genaamd 'n skakelaar verklaring.
En die enigste rede waarom dit werklik bestaan is om net te gee jou, die programmeerder, 'n
effens ander manier van die oplossing van 'n probleem, selfs al is dit logies
gee jou nie 'n nuwe vermoëns.
>> Deur wat ek bedoel nie.
Wanneer jy sê skakelaar, en dan 'n spasie, en dan 'n paar van die hakies, binne
van wat gaan 'n uitdrukking -
en dit is dalk 'n bietjie nie-ooglopende op die eerste, maar dit is nie 'n argument,
tegnies, want skakelaar is nie 'n funksie.
So vir nou, net aanvaar dat ons gebruik hakies in verskillende plekke
vir verskillende redes.
>> So skakel uitdrukking beteken ek kan sit 'n veranderlike binnekant van diegene
hakies waar dit sê uitdrukking.
En dan as dit veranderlike -
dink dit is genoem x, en dit is net 'n heelgetal -
Ek kan dan opsom in my gly Hier is iets soos hierdie.
As x is my veranderlike, en ek wil om iets te doen as x
gelyk aan 1, kan ek dit doen.
>> As ek in plaas wil om iets te doen indien x 2, ek kan dit doen.
Anders, as ek wil iets anders om te doen geheel en al, kan ek 'n standaard geval het in
welke geval ek dit doen ander ding.
So in daardie sin, dit is gelykstaande aan 'n as x gelyk is gelyk aan 1, anders as ander,
maar ek noem dit nou net omdat ons sal sien dit weer.
Maar vir nou, net weet dat dit bestaan.
>> Alle regte.
So het hierdie laaste paar is 'n bietjie meer kompleks met die eerste oogopslag, maar hulle doen
iets redelik eenvoudig.
'N lus vir in C is 'n stuk van die kode wat net iets weer en
weer en weer.
En die enigste irriterende ding oor dit is dit is dat dit 'n bietjie kripties
jouself uit te druk in hierdie sikliese patroon, maar die wêreld gestandaardiseerde op
die volgende manier.
>> Wanneer jy 'n lus vir die, het jy 'n paar van die hakies weer.
En kennis van die twee kommapunte daar in.
Dié twee kommapunte skei drie verskillende uitdrukkings binnekant van die
hakies.
Een daarvan is die sogenaamde initializations.
Een daarvan is die sogenaamde toestand.
En die een is die sogenaamde updates.
>> Gekyk in die abstrakte, dit is heeltemal nie voor die hand liggend, so laat ons kyk
op 'n konkrete voorbeeld.
In Scratch het ons 'n herhaling blok.
En die blok het herhaal 10 keer, sê "Hello, World." Laat my eis vir
nou, en ons sal terug te kom na hierdie, en hierdie, te, sal jy meer vertroud te
jy kort voor lank, die ekwivalent C kode kan gesê word dat dit -
'n verklaring vir en 'n ruimte, 'n paar hakies, kennis van die kommapunte in
daar, wat skei drie afsonderlike dinge, die inisialisering, die
toestand, en die werk.
>> En neem 'n raai wat die eerste is om te doen.
Int i = 0.
In rowwe leketaal, wat wat vir ons doen, waarskynlik?
So ja.
Dit is waarby 'n veranderlike genaamd i, en dit is om dit wat waarde?
0.
So dit is die skep van 'n veranderlike genoem Ek, die stoor van die waarde 0 in dit.
Dit is die sogenaamde inisialisering.
>> Alle reg, nou is ek geëis voordat dat die Midde-ding, het ek
<10, is die toestand.
So, wat doen?
Wel, wat die lus vir doen wanneer 'n program met 'n lus vir hardloop, is
elke keer as die rekenaar loop deur hierdie lus, bo na onder, bo na
bodem, net soos julle gedoen het toe toe julle en sit
weer en weer en weer, die rekenaar gaan
daardie toestand te keur.
En as ek is minder as 10, dit sal dit weer doen.
As ek is minder as 10, dit sal dit weer doen.
As ek minder as tien, dit sal dit weer doen.
So dit blyk dat voor te stel hopelik kan ek verander.
Anders, sou ons 'n oneindige lus.
En inderdaad, is ek verander, omdat die laaste ding wat na die kommapunt daar
is die ietwat kriptiese sintaksis van i + +.
Maar dié van julle wat dit gedoen het voor, wat beteken dat net
eenvoudig wat?
>> STUDENTE: [INTERPOSING Voices].
>> David Malan: Voeg 1 i.
Inkrementeer i.
So het ons 'n Krap legkaart stuk vir wat, eintlik.
Dit lyk nie asof ek + +, maar dat net beteken, heel eenvoudig, inkrementeer die
waarde wat ek met 1 elke keer as jy dit doen.
So letterlik, jy begin deur initializing i tot 0.
Jy gaan dan jou toestand.
0 is minder as 10?
Ja.
Ons gaan deur die loop.
>> Die volgende ding wat ek aanspraak maak op die rekenaar gaan doen, is dit gaan
i te inkrementeer.
So ek is nou 1.
Dit gaan die toestand.
Is 1 minder as 10?
Van die kursus.
So doen dit weer.
Dan is dit inkremente i + + tot 2.
Is 2 minder as 10?
Ja.
En weer en weer en weer.
En uiteindelik, as gevolg van die plus-plussing, ons kry om i gelyk aan 10.
Is 10 minder as 10?
Wel, natuurlik nie.
En dit is die punt waar die for-lus stop net.
En as jy meer kode op die skerm onder, die rekenaar
opbrengs wat die kode te plaas loop.
>> So weer, selfs al is dit gaan lyk en voel 'n bietjie vreemd op
eerste, beslis vir dié van julle wat het nog nooit geprogrammeer voor, is dit
letterlik verminder konseptueel na wat andersins 'n baie
eenvoudige legkaart stuk in nuuts af.
>> Alle reg, ek het belowe dat daar sal wees ander analoë in nuuts af.
Daar is hierdie een ook.
En ons het dit gesien kortliks laaste tyd.
Maar onthou die ewig sluit in Scratch?
Dit is nie net iets wat vir ewig?
Ek beweer dat jy kan implementeer dit in hierdie manier.
En jy kan eintlik die uitvoering van hierdie in 'n klomp verskillende maniere.
>> Maar die lus is net 'n ander manier in C van die uitdrukking van jouself.
Aan die einde van die dag is, kan jy dit nie doen nie enigiets met 'n lus dat jy
kan nie met 'n lus vir.
Sodat hulle aan die einde van die dag funksioneel dieselfde.
Maar dit kan jy jouself uit te druk 'n bietjie anders in
die volgende manier.
>> Met die lus, dit is wat in hakies dit is weer nagegaan en
weer en weer.
En so gou as wat uitdrukking vals is, dan sal die lus stop uitvoering,
en die rekenaar opbrengs te hardloop enige ander kode wat jy
het in jou lêer.
>> Maar wat interessant is, is hier dat ek letterlik getik waar.
En waar is, is 'n tipe van Boolese waarde, 'n ware of vals waarde.
So kon ooit waar geword valse As ek letterlik
hard-gekodeerde dit in my program?
So nie.
Dit is 'n bietjie vreemd dat ek dit gedoen het.
Maar waar is, is waar.
Daar is geen plus-plussing.
Daar is geen gebruik van veranderlikes in hier.
So omdat ek hard-gekodeerde terwyl ware, hierdie lus is altyd iets om te evalueer
weer en weer en weer.
>> So hoeveel keer is Hello World gaan druk op die skerm?
Vir ewig.
'N oneindige aantal kere wat tot die battery sterf of 'n ander eksterne
gebeurtenis.
So dit is waarskynlik nie die beste program om te skryf, want as die gebruiker
kan nooit ophou om jou program, is dit waarskynlik nie wat jy bedoel.
>> Maar soms, programme moet het 'n oneindige lus.
Byvoorbeeld, as jou rekenaar het 'n horlosie op dit, is dit seker sou wees
lekker as jou horlosie dit hou opdatering homself vir ewig, al is dit een keer 'n
tweede of een keer 'n minuut of iets soos dit.
So selfs oneindige lusse doen het hul plek.
>> Alle regte.
Laastens, hierdie een.
En hierdie een is 'n bietjie anders funksioneel, en ons sal terug te kom na
dit waarskynlik in Pset 1.
Maar daar is 'n ander soort van lus bekend as 'n doen terwyl loop.
En die enigste verskil hier tussen 'n doen terwyl lus en, sê, 'n lus,
is dat die toestand is gekontroleer nie voordat jy voer die kode nie, maar na
voer jy die kode.
So op die top vir die terwyl loop, terwyl die doen terwyl
tjeks dit aan die onderkant.
>> En dit beteken net dat die while lus sal tipies voer meer keer
of minder kere as 'n rukkie loop?
Potensieel meer keer, want 'n doen while lus is duidelik sê dit doen,
slegs nadat wat wys jy kyk Indien die toestand binnekant van die
hakies is waar.
>> So ons sal sien dit weer waarskynlik in Pset 1.
As jy ooit wil om iets te doen aan minste een keer en dan miskien 'n bietjie meer
keer, is dit 'n goeie bou om te gebruik.
Maar 'n rukkie loop, daarenteen, sal check die toestand eerste.
En dit is dit vir sirkelroetes in C, moenie terwyl, terwyl, en vir loops.
En weer, hulle kaart redelik goed terug te krap, behalwe hierdie een nie
heeltemal dieselfde analoog in nuuts af.
>> Wel, hoe oor die, nou, veranderlikes?
So dit is hoe ek verklaar 'n veranderlike sintakties die ander dag.
Ek het 'n int, wat ek beweer 'n heelgetal is.
Ek het toe 'n veranderlike genoem toonbank, en dan 'n kommapunt.
So wat is hierdie reël van die kode te doen?
Dit is eenvoudig, verklaar 'n veranderlike -
dit is, vra die rekenaar, gee my sommige geheue, gee my 'n paar stukkies - in
wat ek kan stoor wat?
'N int.
En die kommapunt beteken net einde van die lyn van die kode.
>> Nou, die tweede reël is waarskynlik mooi raaibare.
Wat is counter = 0; doen?
Dit is die toeken 0 teen te werk.
En so het dit is die ander ding dit is 'n klein irriterende
versus, sê, algebra.
Terwyl dit in algebra, die gelyke teken beteken gelykes, hier in C, die gelyke
teken beteken opdrag.
So dit beteken sit wat op die regte in wat op die linkerkant.
En ons sal nog 'n simbool sien, is gelyk aan gelyk, wanneer ons wil eintlik toets
vir gehalte, 'n bietjie lastig.
>> Maar dit is 'n bietjie ondoeltreffend.
Dit is soort van irriterende dat ek 'n veranderlike te verklaar en
dan gee dit 'n waarde.
So C kan eintlik ons ​​vereenvoudig hierdie en doen dit net alles op een slag.
Jy kan verklaar dat die veranderlike aan die linkerkant.
Jy kan nog steeds nie die opdrag op die reg deur om die gelyke teken in
die middel.
So aan die einde van die dag, hierdie twee is ekwivalent, maar hierdie een, eerlik,
waarskynlik 'n beter gewoonte in net omdat dit is 'n bietjie minder
kode, dit is 'n bietjie makliker om te lees, en dit strenger net tot
jou kode, om so te spreek.
>> Enige vrae wat tot dusver op die loops, op veranderlikes, op die voorwaardes, op
Boolse, hetsy tegnies of konseptueel?
Alle regte.
So nou is dit langs 'n mens kry 'n bietjie meer interessant.
En dit is die voorbeeld wat ek opgesit laaste tyd wat net 'n skrapie soorte kaarte
aan C.
>> So 'n funksie.
In leketaal, wat is 'n funksie?
Het om te wees vetter met jou antwoord.
Wat is 'n funksie?
>> STUDENT: Is iets.
>> David Malan: Wat is dit?
>> STUDENT: Is iets.
>> David Malan: Is iets.
OK.
Ons sal daar begin.
So 'n funksie doen iets.
So dit is 'n stukkie van die kode wat wese geïmplementeer elders, wat
wel iets doen.
Nou, wat is interessant is oor 'n funksie is dat dit insette kan neem,
En dit kan produseer uitset.
En laat ons werklik te neem 'n blik op hierdie.
>> So het die man agter die gordyn was opsetlik 'n oomblik gelede.
Hier het ons 'n tafel.
Maar veronderstel dat dit eintlik verteenwoordig 'n groot boks.
So dit is 'n sogenaamde swart boks.
En in die algemeen, in die ontwerp, in die rekenaar wetenskap, black boxes net verwys na
stukke van die funksies wat iemand geïmplementeer het, en jy dit nie doen nie
noodwendig weet of omgee hoe dit is geïmplementeer onder die kap.
Jy moet net sorg dat hierdie swart boks, wat sal ons nou begin bel 'n
funksie, doen iets.
>> So, byvoorbeeld, as dit swart boks op die stadium hier verteenwoordig printf, 'n
funksie, ek weet uit vorige voorbeelde wat neem printf een of meer
argumente, en die eerste van dié argumente moet 'n string wees, soos
"Hello, World." Wel, as ek die persoon die skryf van die program, en ek wil
te gebruik printf, ek, byvoorbeeld, die Neem 'n stuk skoon papier hier en 'n
swart merker en skryf oor dit -
Ek gespel "wêreld" -
H-E-L-L-O.
>> So ek sal my swart merker neem en ek sal skryf, so groot en leesbaar as wat ek kan op
hierdie stuk papier, "hallo, wêreld," En nou het ek beweer dat dit is my argument.
Dit is 'n string verteenwoordig met 'n stuk wit papier.
En my insette nou aan die funksie printf gaan wees nie.
So ek printf roep, verby dat die argument as insette om dit te.
>> En nou, ek weet nie hoe die persoon wat geskryf printf het dit jare gelede, maar
Ek weet nie van sy dokumentasie wat sy doel in die lewe is om te druk wat ek
verskaf aan dit as insette.
En so, selfs al is die implementering van hierdie is buite my
onder die kap, nou Ek sien, o, dit gedoen word.
Dit is gedruk iets op die skerm.
En nou die beheer van die program, indien daar was meer reëls van die kode, sou
nou het julle teruggekeer na my.
En so is die feit dat Colton -
seën sy hart, wat hier wegkruip onder 'n tafel in die voorkant van almal van julle -
is doelbewuste in dat ek nie weet nie en ek gee nie om hoe printf is
geïmplementeer word.
Ek weet net, weer, uit sy dokumentasie, wat dit beteken en hoe ek
is veronderstel om dit te gebruik.
>> Nou, onthou dat printf kon kry 'n bietjie meer gesofistikeerd.
Weereens, ons is net te praat oor die ekwivalent van nuuts sê blok.
Maar ek het dit ook die laaste keer.
Ek wou my hallo program om 'n bietjie meer dinamiese en nie net hard
kode wat iets soos "wêreld," en beslis nie moeilik om iets kode
arbitrêre soos D-A-V-ek-D in die program.
Ek wou die gebruiker vir sy of haar te vra naam, en dan iets te doen met
dat string wat hulle verskaf.
>> So daar is iets wat 'n bietjie anders hier. printf, 'n oomblik gelede
het, inderdaad, iets te doen, maar dit het nie weer iets vir my.
Reg?
Colton het nie oorhandig my niks terug, geen stuk papier.
Daar was net 'n newe-effek.
My verskaffing van "Hello, World" as 'n argument te Colton het gelei tot die
newe-effek van 'n woord, 'n paar woorde, verskyn op die skerm.
>> getstring, al is, is 'n bietjie anders. getstring is ook 'n
funksioneer, maar dit gee 'n bietjie waarde.
Dit is nie net 'n estetiese newe-effek.
Dit gee eintlik my, die persoon roep of die gebruik van die funksie,
iets terug.
So in hierdie geval, is getstring genoem met getstring oop
paren, naby hakie.
Maak getstring, dus neem enige argumente of insette?
Nee, dit lyk nie.
Sy doel in die lewe is net 'n string te kry.
Dit moet nie meer detail as dit.
So laat my gaan voort en voor te gee dat, weer, hierdie swart boks is nie printf,
maar getstring, en laat my die persoon skryf van hierdie program, bel of gebruik
getstring deur net skryf G-E-T-S-T-R-ek-N-G, oop paren, naby
paren, getstring.
>> Nou, ek het geen idee hoe die CS50 personeel geïmplementeer getstring, maar ek weet dat
As ek lank genoeg wag, sal dit doen om sy ding onder die enjinkap, miskien met behulp
sommige veranderlikes, miskien met behulp van 'n paar voorwaardes, miskien met behulp van 'n paar loops,
miskien met behulp van 'n paar funksies, Miskien gebruik -
net probeer om stalletjie - miskien gebruik 'n ander ontwikkeling funksies.
Maar as ek lank genoeg wag - in werklikheid, in die rekenaar, dit gebeur
super vinnig -
As ek lank genoeg wag, hierdie funksie getstring gaan 'n string te kry
van die gebruiker, wat vermoedelik tik dit op hul klawerbord, en
Dan, wanneer jy getstring word gedoen om die karakters van die gebruiker
en stoor dit in 'n string, wat funksie, getstring, gaan te hê
gereed is vir my 'n uitset wat ek gaan haal by wyse van die
opdrag operateur.
>> En as Ek gegaan, inderdaad, in die uitset hier, Obosi het mildelik
deelgeneem het, sonder om te weet dit in bevorder, deur die skryf van sy naam op hierdie
veranderlike, wat verteenwoordig 'n string.
Nou, die opdrag operateur beteken, selfs al sou voel 'n bietjie
oorbodig, het ek eintlik nie nodig my eie kopie van hierdie te maak.
Want op die linkerhand kant - Oeps! -
sien dat ek eintlik het string naam op die linkerkant.
So ek gaan ook te maak my eie kopie van hierdie.
En dit is 'n bietjie van 'n wit leuen, want ons sal sien in 'n week of twee se
tyd dat die snare nie eintlik wat hulle blyk te wees.
>> Maar vir nou, hier is die terugkeer waarde.
Hier is my eie kopie van dit na gebruik van die opdrag operateur.
En nou, doen wat ek wil om volgende te doen?
Ons het nou die tweede twee reëls van die kode.
So ek wil nou printf noem.
Kom ons maak nou dat die swart boks is weer terug na om
printf en nie getstring.
>> Printf hierdie tyd gaan neem hoeveel argumente?
So kyk, dit is soos twee.
Daar is twee kommas in daar, maar een van daardie kommas, is dit
binnekant van die aanhalings.
So het die eerste argument is letterlik gaan wees nie.
H-E-L-L-O, komma, persent s, agteroorskuisstreep-n.
En nou is ek die verskaffing van nie een argument, maar twee argumente te printf.
>> En wat printf veronderstel is om te doen met hierdie twee insette nadat ek verby hulle in
as argumente?
Dit is veronderstel om die tweede te neem hulle, wat ek genoem naam, so die
tweede stuk papier wat ek geskryf het uit 'n oomblik gelede genoem naam.
Dit gaan prop van die waarde in van daardie veranderlike in die plekhouer,
% S, sodat, weer, in 'n oomblik se tyd, sal ons sien 'n newe-effek van
Toe roep printf, waardeur ons nou sien nie "hallo, wêreld," maar "hallo,
Obosi. "
>> So 'n groot applous aan beide ons vrywilligers, slegs een van wie het geweet
dit sou gebeur.
Alle regte.
So, miskien, eenvoudig soos dit was, seker, as jy reeds vertroud
met sulke, en hopelik sal jy nooit vergeet dat veral visuele van hoe
funksies werk.
>> So is daar meer as net getstring.
Binnekant van die CS50 biblioteek, daar is 'n hele klomp van die funksies, wat almal
word gekapitaliseer net om duidelik te maak dat ons het hierdie funksies.
Tipies, in C, feitlik elke ander funksie wat jy sal gebruik, is onderkas.
Maar ons doelbewus gebruik hoofletters net om duidelik te maak dat hierdie
is opleiding wiele van die spesies wat ons sal gebruik vir 'n paar weke wat
vereenvoudig die proses om toevoer van die gebruiker.
>> Die CS50 biblioteek doen niks dat julle kan dit nie doen deur
net die gebruik van C-kode van 'n oldschool handboek.
Maar, weer, ons gebruik dit as opleiding wiele van soorte vir net 'n paar
weke, sodat ons kan ontslae te raak van die kompleksiteit wat jy binnekort sal verstaan
jouself om iets te doen as relatief maklik as om
insette van 'n gebruiker.
>> So weet dat jy toegang sal hê te getChar, GetDouble -
verdubbel.
What's - en dan GetFloat.
Wat is 'n float?
Kom ons begin daar.
>> STUDENT: [onhoorbaar].
>> David Malan: Ja.
Dit is 'n getal met 'n desimale punt.
So terwyl 'int 'n heelgetal is, wat is net 'n nommer met 0 tot 9,
'n aantal herhalings daarvan, 'n float is iets
met 'n desimale punt.
En 'n dubbel, intussen, is ook 'n getal met 'n desimale punt nie, maar meer
getalle na die desimale punt, moontlik.
>> So ons sal terug te kry om dit voor lank.
Maar tipies, elk van hierdie tipes data, elk van hierdie tipes veranderlikes
dat 'n biblioteek, net soos ons s'n kan terugkeer na jy, die gebruik van verskillende getalle stukkies
stoor inligting.
Tipies, 'n Char, wat beteken net een karakter, gebruik 8 stukkies.
En dit is eintlik in ooreenstemming met ons byte van vrywilligers laaste week wat
vorendag gekom en verteenwoordig een ASCII karakter op 'n tyd.
So 'n Char is 8 stukkies.
>> 'N float gebeur om te wees 32 stukkies, tipies.
En 'n dubbel, as jy kan raai, is eintlik 64 stukkies, wat net meer,
wat beteken dat jy kan 'n groter getalle of meer presisie.
Maar weereens, meer op dat 'n ander tyd.
GetLongLong, intussen, al is dom genoem word, is regtig net 'n
integer dit is twee keer so groot, twee keer so lank, moontlik, as 'n gereelde
integer, 64 stukkies in plaas van 32.
En GetString ons het al met behulp van.
>> Maar dit blyk, in die CS50 biblioteek, wat geïmplementeer word, soos ons sal sien, in
die vorm van die twee lêers, een van die wat genoem cs50.h, het twee ander
datatipes in dit.
Boolse bestaan ​​nie in C. Jy kan boots hulle deur net die gebruik van 0'e en 1'e
in jou programme.
Maar ons in die CS50 biblioteek geskep die simbole "ware" en "valse"
1 en 0 te stel, sodat jy dit nie doen nie hard kode wat iets
letterlik soos 1 en 0.
Maar ons sal sien die weer.
>> String, ook nie bestaan ​​nie.
En dit is hoekom ek genoem het is dit 'n bietjie van 'n wit leuen vir nou.
Maar ons sal terug skil wat laag voor lank.
Maar vir nou, 'n string is 'n volgorde van die karakters.
>> Intussen, in C, het jy inderdaad verskillende data tipes.
Let op dit is klein.
So het die funksies wat jy sien 'n oomblik gelede funksies is geskryf deur CS50 wat
sal terugkeer na jou 'n waarde wat val in een van hierdie kategorieë.
>> 'N Paar oneerlik velle net te plant die saad hier. printf nie net
neem% s as plekhouers.
Dit neem% d vir desimale heelgetalle, of% i sal so goed werk.
% F dryf punt waardes. % C is vir 'n kar, as jy wil net nóg
karakter in 'n vooraf opgemaakte string soos wat ons doen, kan jy gebruik% c.
>> En dan, 'n bietjie lastig,% LLD is vir 'n lang, lang desimale getal,
Dit beteken net as jy werklik 'n groot getal en jy gebruik om iets
bekend as 'n lang lang, wat ons sal kom terug in 'n pset, kan jy% LLD gebruik om te
vertel printf, plug in 'n baie groot integer hier deur middel van sy tweede of
'n ander argument.
>> En laastens, ek het belowe dat daar is 'n paar ander ontsnap
rye wat printf ondersteun.
Ons het gesien hoe agteroorskuisstreep-n.
Agteroorskuisstreep-r jy kan sien.
Dit is soort van 'n ou-skool ding.
As jy al ooit 'n ware tikmasjien jaar gelede en jy getrek op die crank
wat nie net gedraai om die wiel te beweeg die besetting, het dit ook verskuif die
hele ding al die pad terug na links, wel, agteroorskuisstreep-r net
wese beweeg jou wyser terug aan die begin van die lyn
sonder om te beweeg dit af.
Maar weereens, meer op daardie, miskien, in die toekoms.
>> Agteroorskuisstreep-quote, agteroorskuisstreep-dubbele quote, agteroorskuisstreep-agteroorskuisstreep is die
oplossing vir die klein bietjie raaisel Ek verwys na vroeër.
En agteroorskuisstreep-0 is eintlik baie interessant.
Maar ons sal terug te kom na wat kort voor lank.
>> So laat my gaan, nou, die CS50 apparaat, en laat ons eintlik 'n
vinnige opwarm met een van die voorbeelde ons het al, en dan beweeg op na
iets wat 'n bietjie meer ingewikkeld.
So as ek open my program genoem gedit -
dit is my grafiese redakteur.
En ek kan dit doen -
Laat my naby die venster is daar -
deur middel van die ikoon hier, gedit, in die onderste linker
hoek langs die spyskaart.
>> Ek gaan om voort te gaan en te bevorder, en behalwe hierdie voorbeeld in, sê, John
Harvard se gids.
John Harvard se gids is net sy huis gids waar al sy lêers lewe
by verstek.
En ek gaan om dit te red 'n lêer genaamd hallo-0.C.
En ek het gekies om hierdie naam net so is dit in lyn met die monster kode op die
Natuurlik se webwerf en in die YouTube video's aanlyn.
>> So nou gaan ek begin om te skryf my eerste program.
Laat my zoom in vir leesbaarheid.
En ek gaan om voort te gaan en te sê int belangrikste leemte, wat net soos wat
geel legkaart stuk wat begin 'n program.
Ek het gekry in die gewoonte om oor die jaar van die opening van my krullerige stut, dan
ook te sluit en dan terug te gaan na waar ek wil my kode te sit, net
want dit help my om alles gebalanseerde, veral as my
program kry lank.
>> En nou, hier, ek gaan om voort te gaan en sê: printf, haal unquote,
Hello World, agteroorskuisstreep-n, naby quote, naby hakies, kommapunt.
Dus is ek net herhaal alles wat ons het is die neem as vanselfsprekend tot dusver.
Nou gaan ek om te vergroot.
>> En dit terminale venster af hier, wat Ek is toegelaat om te doen in hierdie swart
en wit venster?
Wat kan ek nog doen?
So dit is waar ek loop opdragte en waar ek kan saamstel dinge.
En ek gaan om dit eenvoudig te hou.
Ek gaan 'n program om te gebruik Maak genoem, wat nie
tegnies 'n vertaler.
Die samesteller se naam klang, maar Ons kom terug na wat in 'n
week of twee se tyd.
>> Vir nou, is ek net gaan om te tik maak hallo-0, maar dié van julle wat
vergelyk in jou gedagtes wat ek nou net getik wat ek moet getik het nie, kan
reeds weet wat ek gedoen het iets verkeerd hier.
Nou, daar is duidelik 'n paar foute.
Voordat ek nog kyk na wat hulle is, enige gedagtes oor wat ek verkeerd gedoen het nie?
>> STUDENTE: [INTERPOSING Voices].
>> David Malan: Ja.
Ek mis die biblioteek se kop lêer.
Enige van hierdie h lêers. Genoem kop lêers, en hulle het gesamentlik
behoort aan dinge genoem biblioteke.
Biblioteke is net stukke van die kode wat ander mense geskryf het.
So het die standaard [? i] biblioteek? is 'n versameling van lêers met kode
wat ander mense geskryf het.
>> So ek mis dit.
So hoekom kry ek 'n fout?
Wel, laat my blaai terug tot in die my terminale venster hier.
En ongelukkig, in C, as in 'n baie programmeertale, veral
As dit is alles nuut vir jou, die fout boodskappe is presies nie, maar dit is ook
baie kripties.
En die fout hier, in rooi, is "Onvoorwaardelik verklaar biblioteek funksie
printf met tipe, "en dan is dit boekrolle na die volgende lyn, "int const char *,
... "Dit het net 'n oorweldigende vinnig.
>> Maar wat jy moet begin om dit te doen, indien weer nuwe aan al hierdie, is net te
begin om te kyk vir sleutelwoorde.
Dit is duidelik dat, kan ek nie verstaan ​​nie die helfte van die woorde wat ek net nog nie sien nie.
Jy sal, al is, in 'n week se tyd.
Maar ek sien printf.
En dit moet begin, voor lank, te draf jou geheue, alles reg, printf.
Iets is verkeerd met printf.
Het ek spel dit verkeerd?
Nee, beteken dit nie lyk soos - oh.
Ek kan dit nie gebruik nie, tensy ek leer die samesteller dat dit bestaan.
En so, weer, gaan saam met jou instink, selfs as jy nie eintlik nie verstaan
die werklike fout boodskappe.
>> En inderdaad, die oplossing hier is om net sluit dit aan die bokant van die lêer
soos daardie, resaving my lêer met Control-S of die File menu.
En as ek nou terug gaan hier, Ek gaan om dit te verwyder.
Control-L is net 'n mooi manier die skerm skoon te maak.
En dan gaan ek te tik "maak hallo 0 "Gee, en nou is ek steeds 'n
kriptiese volgorde van simbole, maar Ons kom terug na daardie.
Dit is wat maak vir jou doen.
Dit is die outomatisering van die proses van die neem 'n redelik irriterende opdrag wat
Klang, die werklike samesteller.
Maar die feit dat ek het geen foute beteken dat hierdie ding moet werk.
>> Dus is ek nou gaan doen - laat my zoom in weer -
./hello-0 Gee, en inderdaad, ek sien "Hello, World." So laat ons nou verbeter
dit ooit so effens net na te boots die stappe wat ons bedoel is.
Ek gaan om dit te hernoem met Save As om hello1.c.
En nou gaan ek 'n veranderlike te verklaar genoem naam, so string naam,
en ek gaan om te sit in dit die waarde van quote-unquote
D-'n-V-ek-D close-quote kommapunt.
En nou gaan ek "wêreld" te vervang met wat plekhouer vir 'n string?
% S.
>> En nou, hoeveel argumente behoort printf neem hierdie tyd?
So twee.
So ek gaan buite die aanhalingstekens.
Ek tik "naam" na 'n komma.
Maar ek het iets gedoen anders fout hierdie tyd.
Maar laat ons veronderstel dat ek nie besef dat nog.
Laat my gaan hier.
>> En kennis, ook, ek kry 'n bietjie verveeld tik al die "hallo 0 maak"
tyd, "maak" en al hierdie dinge.
So, dit blyk, in Linus jy kan dikwels druk op die pyl op jou
klawerbord, en jy kan eintlik blaai deur al die gebooie wat ek
uitgevoer vorige net nou.
So as ek dit doen, Up, Up, daar is maak hallo 0.
Ek wil nie hê dat.
Ek wil net dat om te verander na hallo 1 hierdie tyd, Tik.
Uiteindelik, wat sal red jy 'n geruime tyd.
>> Alle regte.
Ongelukkig is daar 'n fout is.
So laat my blaai up.
Dit lyk asof ek werklik afgeslag hierdie program.
Ek bedoel, my God, dit is twee reëls van die kode, 10 en sy lyne van foute.
Maar kyk na die top een eerste.
Gebruik van swart identifikasie string.
Het ek bedoel standaard i n?
Nee, ek het nie.
Ek bedoel string.
>> Maar waar is die string veranderlike tipe verklaar, DD en ons sê?
So is dit in die CS50 die biblioteek.
Daarom is dit nie voldoende wees, in hierdie eerste paar weke, net om te gebruik
wat C vir ons gee.
Ek gaan ook om te gaan op hierheen, en Ek kon sit dit bo of onder, maar ek sal
hou dit net alfabetiese om te hou dinge ordelik.
Ek gaan cs50.h te sluit, wat vooraf geïnstalleer vir
jy op die CS50 toestel.
En dit is open source, so selfs mense op die internet kan gebruik om dit op hul
eie rekenaars.
Maar dit kom met die CS50 toestel.
>> So nou laat my terug te gaan en heropstel dit met hallo 1 maak.
Damn dit.
Nog 'n fout.
Laat my blaai tot by die eerste, al is.
Hierdie een is 'n bietjie kompleks.
Multi-karakter karakter konstant.
Dit is nie om my te help.
Maar kennisgewing, klang is ten minste 'n bietjie bietjie ordentlike, waardeur met 'n bietjie
groen pyltjie simbool is, is dit gesê hier is waar ek geskroef.
Hoekom is dit wys, met daardie klein groen pyl, na die enkele aanhaling volgende
om my naam?
>> So dit is een van die dinge wat jy net gewoond te raak, veral as jy het al
programmering in Python, of JavaScript, of ander tale waar hierdie detail
maak nie saak nie.
In C, dit maak nie saak.
As jy waarby 'n string, wat 'n reeks van 0 of meer karakters,
jy eintlik moet gebruik dubbel aanhalingstekens.
So het ek werklik nodig het om dit terug te verander kwotasie te maak, sluit kwotasie, met
dubbele aanhalingstekens.
Aanhalingstekens doen het hul plek, maar slegs wanneer jy die gebruik van individuele
karakters, maar meer oor dit 'n ander tyd.
Vir nou, die dubbele aanhalingstekens nodig is.
>> So nou, laat my terug te gaan na my terminale venster, hallo 1 maak.
En wie se vertroue?
Is hierdie program gaan nou reg te stel?
OK.
So drie van ons dink nie.
Alle regte.
Betree.
En dit eintlik gedoen het.
Dus is daar geen foute hierdie keer, selfs alhoewel hierdie program gekry is 'n bietjie
meer kompleks.
As ek nou dot streep hallo 1 doen, Tik, dit gaan om te sê "hallo, David."
>> Maar laat ons nie die derde iterasie van hierdie, waar die
program is werklik dinamiese.
Laat my gaan voort en verander nie die lêer naam, net vir konsekwentheid met die
lêers wat jy beskikbaar aan u daarna aanlyn.
Betree.
En nou is ek gaan in en gaan nie stoor "David" hard gekodeer hier.
Wat kan ek doen om baie eenvoudig verbeter hierdie program?
>> Ek kon noem getstring.
Dit mag dalk 'n bietjie nie-duidelik wat is om te gebeur, so ek gaan
om werklik te voeg 'n ander lyn, printf, en sê naam, kolon, naby quote, net
gee die gebruiker 'n vinnige op die skerm.
En nou gaan ek hier gaan, en ek is gaan my kortpad te gebruik.
Ek gaan om te gaan op, op, en wysig hallo hallo 1 tot 2, Tik.
En gelukkig, ek maak vordering.
>> En nou gaan ek om te gaan dot streep hallo en
verander tot 2, Tik.
En nou is my program -
Ek sal vergroot - is om 'n bietjie mooier.
Naam gaan wees, kom ons sê Rob hierdie tyd, Tik, hallo, Rob.
Ons kan dit weer doen.
Naam, Lauren, Tik.
Naam, Joseph, Tik.
Naam, laat ons probeer om te wees moeilik, Tik.
Eh.
Dit is nie regtig 'n fout.
So dit is net 'n bietjie lelik.
So miskien kan ons los hierdie in die toekoms, nie nou nie.
>> Maar hoe sou jy instinktief gaan aanspreek
daardie besondere uitdaging?
Dit lyk net dom.
Hoe vermy jy dinge soek dom?
So ons kon doen nie, OK, ek het 'n paar van die dinge wat 'n voorwaarde en 'n lus.
Ons kan gebruik, een, 'n toestand is, om seker te maak Wat is die lengte van die string
die gebruiker aan ons gegee het?
En as dit is 0, dit is net quote unquote, hulle het net druk Enter, dan
miskien moet ek gil op hulle en gevra hulle weer.
Maar hoe vinnig 'n moet hulle weer?
Wel, ek het ook gehoor lus, en ek kon doen dit weer en weer en weer
waarna die gebruiker vir dieselfde ding.
>> Wel, laat ons doen een ander voorbeeld met behulp van 'n ander
funksie in die CS50 biblioteek.
Laat my naby hierdie lêer.
Laat my 'n nuwe een.
En ek sal dit noem adder.c, net omdat dit is maklik om 'n eenvoudige rekenkunde te doen,
Selfs al is dit heeltemal sal wees underwhelming met wat jy kan doen
met 'n moderne rekenaar.
>> Maar laat my gaan voort en nou -
Ek het my les geleer laaste keer - sluit cs50.h, sluit stdio.h, int
belangrikste leemte wat, vir nou, ek sal net neem op 'n blinde geloof nie, maar ons sal aanneem
wat sal verstaan ​​wat wat beteken dat kort voor lank.
En ek gaan om iets te sê soos "gee my 'n int."
>> En nou, hoe kry ek 'n int?
Ek wil uiteindelik verklaar 'n veranderlike genoem x van tipe int en
stoor in dit 'n heelgetal van die gebruiker.
So dit was 'n mondvol.
Maar as iemand wil hê om voor te stel hoe verklaar ek 'n heelgetal genoem x?
Int x.
>> So dit is regtig so eenvoudig nie.
Gee my 'n int.
Noem dit x.
Nou gebruik ek die opdrag operateur.
En hoe slaan ek uit die het 'n waarde van die gebruiker?
Ek wil nie getstring te roep, natuurlik, maar eerder getint.
Enige argumente?
No
So dit is oop paren, naby hakie onmiddellik, en dan 'n
kommapunt eindig die lyn.
>> Nou kan ek dit weer doen.
Gee my 'n ander int.
Hierdie keer het ek sal doen int, laat noem dit y, is gelyk aan getint.
En nou, laat my iets super-eenvoudige soos 'n paar wiskunde.
So printf, die som van% d is die plekhouer vir 'n int.
En% d, tydperk, agteroorskuisstreep-n.
>> Alle regte.
So dis nie eintlik wiskunde.
Maar as ek wil hê dat die bedrag van hierdie om te sê waarde plus hierdie waarde gelyk aan hierdie
ander waarde, hoeveel argumente in totaal moet ek printf word om te gee,
uiteindelik?
So vier, reg?
Dit string en dan die drie waardes.
So x is die eerste wat ek wil wees ingeprop in die eerste tot die% d.
y gaan wees die volgende.
>> En nou het ek soort wil sê Z, maar Z bestaan ​​nie.
Maar dit is nie 'n groot deal.
Want wat sou jy instinktief doen, veral as jy 'n
grafiese sakrekenaar, doen wat jy tik?
Hoe oor die x plus y?
Dit is dus nie 'n werklike veranderlike.
Dis net die som van twee ander veranderlikes.
En dit is heeltemal wettig is.
C verstaan ​​beslis eenvoudige rekenkundige soos hierdie.
>> Kommapunt, red.
Nou laat my gaan hier en tik maak adder, Tik.
Geen fout, so dit is vordering te.
Tik basilisk.
En 'n ander kortpad, As jy begin om te verveeld
met al die instruksies -
As jy begin tik 'n bevel, soos dot streep advertensie, en dit is waar jou
verveling skop in, wat jy gewoonlik kan getref Blad om die rekenaar klaar is met die
die res van die uitdrukking vir jou as dit is nie dubbelsinnige wat moet kom na die advertensie.
>> So laat my voort te gaan nou en jy kliek Enter.
Gee my 'n int, 1, 2, en Gelukkig, dit is 3.
Maar soos altyd, toets programme moet nie verminder
net probeer om dit een keer.
Laat my probeer om 'n hoek geval, soos negatiewe 1, gee my 1, en dat 'n mens
tjeks uit as well.
En ek sal waarskynlik wil 'n paar meer te doen streng toets, maar ek is redelik
gemaklik met waar dit is op.
>> Wel, nou, laat ons probeer om 'n ander program dat hierdie tyd gebruik van 'n
bietjie van die ander sintaksis.
Laat my 'n nuwe lêer.
Ek sal hierdie conditions0.c bel om te reël met 'n paar voorbeeld kode aanlyn.
En laat my gaan voort en doen sluit cs50.h, sluit
stdio.h, in die belangrikste leemte -
OK.
Daar gaan ons.
Ons het ons standaard boiler.
>> En hierdie keer het ek gaan printf sê, "Ek wil graag 'n int, asseblief," net om te
maak die vinnige 'n bietjie meer vriendelik.
En nou wil ek 'n te kry int van die gebruiker.
Ek gaan dit n hierdie tyd om te bel, net omdat n klink soos nommer.
getint, en nou, wat doen Ek wil om te doen met dit?
Wel, as n - en ek sal vergroot -
As n groter as 0, wil ek die volgende te doen -
printf "Jy pluk 'n positiewe getal." Anders, ek gaan om te printf tik "Jy
pluk 'n negatiewe
getal "Alles reg..
So hierdie program, selfs al het ek het dit vinnig, dit lyk reg sintakties.
Kom ek probeer dit.
Maak toestand 0.
Blyk uit te voer.
Staat 0, betree.
Kom ons gee dit 'n int van 50.
Ek pluk 'n positiewe getal.
Kom ons probeer dit weer.
Staat 0.
Negatiewe 50.
Ek pluk 'n negatiewe getal.
>> Maar nou, laat my kies wat ons sal aanhou roep 'n hoek geval, wat meer
'n interessante geval wat jy dink kan jy 'n paar probleme, 0.
Nou, ek is redelik seker dit is een van die hoek gevalle waar nul is
of positief en negatief, so my program, maar in sintakties
korrek nie - dit stel, dit loop - is nie logies korrek is.
So, wat is die eenvoudige fix hier as ek wil op te spoor, as ek wil n te hanteer
gelyk aan 0 is apart?
>> So as n gelyk aan 0, dan wil ek sê iets soos printf "Jy opgetel 0."
Kom ek probeer dit nou.
Laat my terug hier, duidelik my venster en heropstel.
Hm.
Een fout genereer.
Maar ek dink jy wil om te kyk As n gelyk aan 0.
>> So weer, nog 'n dom ding om gewoond te raak, gelyk teken is
die opdrag operateur.
So dit is eintlik fout in dat, tegnies, selfs al is die samesteller
beskerm my van myself, ons wil tegnies kopiëring 0 in n, wat
is nie wat ek wil hê.
Ek wil om te toets vir gelykheid met gelykes gelyk.
En so dat dit nou kan wees my beter oplossing.
>> Laat my eintlik weer stoor dit as, sê, conditions1 te wees, nuwe en verbeterde.
So as ek nou heropstel hierdie, dit maak voorwaardes -
Oeps - maak conditions1 dot streep conditions1, betree, "Ek wil 'n int hou,
please. "Ek is gaan om te gaan voor en tik 50.
Dit is nog steeds goed.
Negatiewe 50, nog steeds goed.
0, en dit inderdaad, opgespoor dat ek opgetel 0.
>> So, wat meer kan ek nou doen met dit?
Wel, ons kan beslis meer doen komplekse dinge.
Maar wat ek wil voorstel is dat ons uiteindelik op hierdie nota hier.
As ons trek hierdie, sien jy, miskien, 'n gunsteling spotprent van jou
Tot vandag toe jy dalk nooit verstaan ​​het.
En dit is oor die gehalte van die lag jy moet kry met CS grappies.
So dit is oor die reg.
>> Maar meer dwingend, ek het gedink ek wil gee ons 'n bietjie teaser vir Maandag.
So het ons begin met behulp van heelgetalle.
Ons het verwys na dryf.
Ons het selfs verwys na dubbelspel, wat, weer, gee jou nommers
nadat desimale punte.
>> Maar dit blyk dat dryf en dubbelspel, en regtig, rekenaars,
fundamenteel, kan nie druk sommige waardes presies.
Ons weet van wiskunde klasse wat jy kan het 'n aantal van syfers na die
desimale punt.
En jy kan selfs 'n vertikale bar om te sê hierdie gaan vir ewig.
>> Ongelukkig, jy kan nie regtig doen wat in 'n rekenaar.
En so hoek gevalle ontstaan.
Byvoorbeeld, veronderstel jy is om iets te doen finansiële.
Jy doen wiskunde met persentasies, en
met dollar en sent.
En dié sent nie noodwendig line-up.
Wel, dit blyk dat die breuke van sente kan begin by te voeg wanneer
gemodelleer met 'n rekenaarstelsel in so 'n manier dat slim
mense kan voordeel trek.
>> En dié van julle wat nie gesien het nie, ek wil graag vir jou 'n 30-tweede teaser van
'n wonderlike film bekend as kantoorruimte, wat verf 'n prentjie van 'n
probleem wat ons moet aanpak eerste ding op Maandag.
As ons kan verhoog die volume 'n bietjie, ek gee jou 30
sekondes van kantoorruimte.
>> [Video speel]
>> -Ek bedoel, jy het, het jy nie besig is om en jy jou werk te hou.
>> -Eintlik, ek bevorder is nie.
>> -Ek kan die program 'n virus wat wil rip daardie plek af groot tyd.
>> -Wel, hoe dit werk?
>> -Elke keer as daar 'n bank transaksie waar rente bereken word, en daar
is duisende 'n dag, die rekenaar eindig met hierdie breuke van 'n sent.
>> -Maar ek is nie van plan om enigiets doen onwettig.
>> -Onwettige?
Samir, dit is Amerika.
>> -Ons het om te sweer by God.
>> -As niemand weet oor hierdie maar ons, al reg?
Geen familie, geen vriendinne, niemand nie.
>> -Van die kursus.
>> Ooreengekom.
>> Moenie bekommerd wees nie, man.
Ek sal nie vir enigiemand vertel nie.
>> [Einde video-vertoning]
>> David Malan: So dit is dan CS50, dit was kantoorruimte, en dit alles sal
sin maak op Maandag.
Sien jy dan.
>> NARRATOR: By die volgende CS50, Rob pas die feit dat van die
Harvard maaltyd plan.