>> [Muziek]
>> DAVID Malan: Oke.
Welkom terug.
Dit CS50 en is Week One, Vervolg.
Dus een van de redenen waarom we al voorbij rond technologieën zoals
Google Glass is dat ze komen met iets bekend als een API, een
Application Programming Interface.
En wat dit betekent is dat met de juiste bestanden en met de juiste
documentatie, kun je eigenlijk schrijven software voor zelfs apparaten zoals deze.
>> En dus wat we in gedachten hebben in de richting van semesters einde is, wanneer een project
met, zeg, Google Glass zou beroep, we zullen zien wat we kunnen doen in
termen van het aansluiten van je met een aantal vervangend hardware als de
publiek toegankelijke API, zodat u kunt eigenlijk beginnen met het maken software
die draait op diezelfde Google Glass.
>> Een ander apparaat dat we al spelen met de laatste tijd dat we dachten dat zou kunnen zijn
plezier op het einde semester is dit kleine ding hier.
Het heet Leap Motion, en wat je bent ongeveer te zien is technisch gezien een
reclame voor het apparaat, maar spreekt wat dit specifieke
apparaat in staat is.
En het, ook, wordt geleverd met een API via waar u software kunt schrijven naar
uw eigen computer te bedienen op een manier heel graag hier deze film van een minuut.
>> [VIDEO AFSPELEN]
>> [END VIDEO AFSPELEN]
>> Dus nu, dit apparaat is toevallig worden uitgevoerd als een kleine USB
connector die u kunt aansluiten op uw computer, maar ik zou niet verbaasd
Als het duurde niet lang hebben we dit soort technologieën in de volgende batch van pc
en Macs zodat je kunt, inderdaad, interactie in
een manier zoals dat.
Sterker nog, wat ik dacht dat ik zou doen, ook, is Ik trok een kleine demonstratie
programma dat wordt geleverd met deze software.
Dus ik heb de kleine sensor gezet in de voorkant van mijn laptop.
>> En zoals je kunt zien, het al beseft dat mijn hand is er
het controleren.
En al deze applicatie doet is swimmingly kleine dingen zoals dit.
Maar je kunt zien dat, inderdaad, Ik heb vijf vingers daar.
Als we kunnen krijgen om te doen al 10, je kunt je voorstellen een nette piano
applicatie of dergelijke.
Dus als je wilt om te komen na de les vandaag en spelen met die als
goed, bent u van harte welkom om.
Dus meer op dat in de richting van het einde semester.
>> Dus een paar administratieve aankondigingen.
One, doe sectie van deze vrijdag bij middag bij cs60.net/section.
Die URL is op de cursus homepage ook.
In de tussentijd echter, supersections zal debuut deze zondag.
Supersections zijn een eenmalig ding, want het kost ons wat tijd om te werken
uit wie er in welke sectie en waar.
>> Dus deze komende zondag, zal er een zijn sectie voor die minder comfortabel,
een sectie voor die comfortabeler.
En die van jullie ergens in tussen zijn welkom om te gaan
of beide of geen van beide.
Beide worden gefilmd.
Ze zullen in een grotere zaal dan een sectie normaal zou worden inch
Maar het doel is hier om u uit te rusten met wat troost met probleem set een,
met C, met de CS50 toestel moet dit weekend, zelfs voordat je erachter uw
formele gedeelte opdracht.
Dus je zult je TF en uw kleinere voldoen groep van sectionmates in ongeveer
een week tijd.
>> Kantooruren, ondertussen, zijn gaande.
Doe profiteren van hen vanavond of morgenavond als je zou willen.
Probleem set 0 is verschuldigd op vrijdag.
Dit is een dag later dan de regelmatig-geplande donderdag.
Maar met probleem set 1, zie je dat het bevat een aantal warm-up
oefeningen waarmee je jezelf kan je uitbreiden
Donderdag deadline naar vrijdag.
Probleem set 1, ondertussen, zal debuut op de website van de cursus deze komende
Vrijdag, als je wilt om weg te kruipen met het als ik eens een tijd laat
Vrijdagavond in uw kamer.
>> Dus cs50.net/appliance is de plaats waar kunt u de CS50 apparaat krijgen
dat we begonnen met op maandag.
We zullen het gebruik van een beetje meer vandaag.
Maar wees gerust dat het probleem set 1 specificatie zal u door
precies de stappen die u moet om die up and running.
Dus maak je geen zorgen over dat doen vóór Pset 1 als je liever niet.
>> Oke.
Dus keken we op maandag om broncode, maar in de context van een nieuw
programmeertaal, namelijk C. En C, in tegenstelling Scratch, is niet grafisch.
Het is niet puzzelstukjes.
Het is meer Engels-achtige syntax.
En er zijn een paar stappen die betrokken in feite het schrijven en uitvoeren van een
programma in C, want naast source code als dit, je iets nodig hebt
zogenaamde compiler.
En in lekentaal, wat doet een compiler voor ons doen?
Yeah.
>> STUDENT: Het zet de code dat u schrijven naar 0s en 1s.
>> DAVID Malan: Good.
Dus het zet de code die we schrijven aan 0s en 1s.
Het zet zogenaamde broncode objectcode, de laatste van die eruit ziet
een beetje zoiets als dit.
En het is je CPU, de hersenen binnenkant van computer, dat door de
mensen die die computers geschapen, weten wat die sequenties
van 0s en 1s gemiddelde.
>> Misschien betekent het afdrukken.
Misschien betekent toevoeging.
Misschien betekent het aftrekken.
Misschien betekent het geven van een grafische.
Er zijn voorgedefinieerde patronen bits die de wereld heeft besloten betekenen
bepaalde dingen.
Maar voor het grootste deel in deze cursus, zullen we werken op een hoger niveau, en
zullen we voor lief nemen dat er bestaan dingen zoals compilers die kunnen
maken onze broncode functie in de manier waarop we van plan zijn.
>> Zodat het programma dat we vorige week schreven eerst en begon toen aan de haven, om zo te
spreken, naar C afgelopen Maandag, was dit.
Bij groene vlag geklikt, zeg hallo.
Dit was natuurlijk geschreven in Scratch.
En ik beweerde dat het equivalent programma in C zag er een beetje
zoiets als dit.
>> Dus wat ik dacht dat we doen op het eerste is, laten we plagen elkaar wat lijkt op het eerste
blik, toegegeven, als tamelijk mysterieus syntax, maar je zult beginnen te merken
patronen vrij snel.
Wat zullen we vandaag ook doen is je met een mentaal model voor sommige
canonieke, een aantal standaard constructies in de programmering.
En dan gaan we daadwerkelijk onze handen krijgen vies met voorbeelden ook.
>> Dus voor degenen onder u comfortabeler, beseffen dat deze week en dan de volgende
week kan heel goed een beetje beoordeling.
Maar vooral wanneer de hacker editie van probleem set 1 gaat uit van de
website natuurlijk op vrijdag, denk ik je zult zien dat zelfs als je in te vullen
sommige blanks in de komende week of twee, zul je beginnen om steeds meer te krijgen
uitgedaagd en ontmoeting nieuwe en nieuwere dingen.
>> Dus laten we plagen dit programma apart een paar regels tegelijk.
Aan de top, we hebben wat technisch genoemd
preprocessor richtlijn.
Dit is slechts een regel code die zegt de inhoud van een bestand omvatten,
riep standaard I / N, standaard input - of, sorry, standaard I / O, standaard
input / output,. h, binnen van mijn eigen programma.
>> Dus met andere woorden, als ik dit schreef programma met een eenvoudige tekst-editor zoals
gedit, het eenvoudiger equivalent van iets als Microsoft Word, dat
instructie, # include stdio.h, is gewoon gaat de compiler te vertellen, grijp de
inhoud van die andere bestand, stdio.h, en plak ze hier.
>> Nu, waarom kan het mij schelen?
Wat hebben we beweren is de binnenkant van dit bestand stdio.h genoemd, dat wordt opgeslagen
ergens op mijn harde schijf, of in dit geval, ergens in de CS50 apparaat?
Iemand anders heeft het daar voor mij.
Maar wat zit er in?
>> Ja, dus het is een verklaring van een functie genaamd printf.
Dus printf herinnert aan de functie die displays woorden en tekens en
getallen op het scherm op mijn verzoek.
Maar ik heb het niet geschreven.
CS50 heb het niet geschreven.
Iemand jaar geleden schreef het, en ze wezen gaf ons het recept voor het
in een bestand genaamd stdio.h.
Zodat de eerste regel geeft gewoon me toegang de functies dat iemand
schreef jaren geleden, onder die zijn printf.
>> Nu, de volgende regel ga ik mijn zwaaien hand op, ten minste tot volgende week.
Maar voor nu, weet dat int main (void) is wezen equivalent van deze
gele puzzelstukje wanneer groene vlag geklikt.
De wereld, jaren geleden, besloten dat als je bent het schrijven van een programma in de
taal genaamd C, je begint uw programma met een lijn
dat lijkt op dat.
In zowat een week tijd, maak het voelen wat int is, wat leegte is.
Maar voor nu, denk maar aan het als deze gele puzzelstukje.
>> Nu naast, we hebben een accolade gevolgd door een andere nauwe accolade,
zo te zeggen.
En we zullen deze gedurende zien programma in C, en
JavaScript en PHP.
En deze gewoon in te kapselen gerelateerde regels code.
De open accolade wezen zegt, hier komt een code.
En de gesloten accolade, dat is hoek in de andere richting, net
betekent, dat is het voor de desbetreffende code.
>> Zodat de sappige lijn in deze eerste programma is de laatste, printf,
citaat-unquote, hello wereld.
En ik riep het ding tussen citaten wat vorige keer?
Dus het is een string.
En een string is gewoon de techneut term voor een reeks
personages, een woord, een zin.
Zelfs een enkele letter kon worden dubbel geciteerd.
Maar het is een opeenvolging van nul of meer tekens.
>> Backslash-n, hoewel, ziet er een beetje vreemd.
Maar het gewoon iets betekende eenvoudig aan de computer.
Wat is backslash-n?
Nieuwe lijn.
Dus dat is gewoon de bijzondere opeenvolging van tekens die de wereld heeft besloten
middel breek de regel daar, omdat de compiler zal daadwerkelijk krijgen
verward, meestal, als je, heel begrijpelijk, maar verkeerd, net
beginnen te raken Enter om te zetten nieuwe regels in de code.
Je moet een beetje meer expliciet met backslash-n.
>> En we zullen zien dat er een paar andere dergelijke patronen voor speciale tekens.
Bijvoorbeeld, als je wilde laten uw gedachten dwalen naar een hoek zaak,
stel dat ik wilde een af ​​te drukken dubbel aanhalingsteken op het scherm voor
welke reden dan ook, dat lijkt te wel een beetje problematisch, toch?
Want als ik een dubbel aanhalingsteken in de midden van "hello, world," om wat voor
reden, waarom die lijken potentieel problematisch?
Het breekt de string.
>> De compiler is gewoon een programma.
Een programma als een compiler is gewoon uw code boven te lezen naar beneden,
van links naar rechts.
En als er drie dubbele aanhalingstekens plaats van twee, gaat het niet om te weten
als je bedoelt dat het ding naar links moet de string, of het ding te zijn
de rechter, of de hele zaak.
Het is dubbelzinnig, en dus wat een typische compiler zou doen is gewoon freak out,
en geven u een foutmelding, en maak je gaan met het probleem.
>> Zo bepaalde backslash-n betekent een nieuwe lijn, wat zou je instinct nu
beginnen te worden als je wilde zijn iets abnormaal als een dubbele
citeer binnenkant van deze anders-genoteerde touwtje?
Backslash-dubbel aanhalingsteken.
En dus we zullen dit zien soort patroon ook.
>> Als je iets wilt een beetje doen vreemd, zult u merken dat de
oplossingen volgen vaak een patroon, en de backslash
geeft een escape.
En het betekent gewoon iets speciaals dat we moeten vertegenwoordigen in een
andere manier.
Zoals voor hoe u vertegenwoordigt een backslash, nou ja, we zullen
kom terug naar dat.
Maar het antwoord ook eigenlijk een beetje voor de hand liggende.
>> Dus laten we nu introduceren we een paar andere programmeerconstructies
die je zag in Scratch.
U hebt waarschijnlijk vanzelfsprekend al als je al hebt dook in
probleem set 0.
Maar laten we nu introduceren de syntaxis in C voor deze anders vrij intuïtief
ideeën, ten minste enkele van hen.
>> Dus dit idee van een aandoening of een tak, terwijl we vroeger
vertegenwoordigd met code die eruit zag als deze aan de linkerkant in Scratch -
als x kleiner dan y, dan zeggen dus -
in plaats daarvan nu in C - laat me scherpen in het eenvoudigste geval -
we zijn gewoon gaan zeggen, indien, opent haakjes, iets waar is - een
Booleaanse expressie zal gaan waar ik heb gezegd staat -
haakje sluiten, doe dan wat is binnenkant van die accolades.
>> Dus ook hier, de accolades zijn een soort Scratch's
U-vormige puzzelstukjes.
Weet wat er in deze accolades.
In dit geval, slash slash.
En merkt dit is een voorwaartse slash, niet een backslash.
Slash, slash, voor degenen die hebben geprogrammeerd
vóór, betekent alleen -
het is gewoon een reactie.
Een reactie is niet een lijn code, per se.
Het is een lijn van het Engels dat u, de mens, hebben geschreven om jezelf te
misschien kunt herinneren om iets te doen, om uit te leggen aan jezelf, om uit te leggen aan
iemand anders, wat uw code doet.
Het is gewoon een beschrijvend commentaar.
>> Nu, natuurlijk, kunnen we een twee-weg hebben vork in de weg net door dit te doen, een
drie-weg splitsing in de weg door te doen dit, en als je dit blijft
patroon, kunt u vier-weg, vijf-weg, zes-weg vorken in de weg als
je moet omgaan met, inderdaad, dat vele voorwaarden.
En dan merken de parallellisme hier -
if (conditie), anders als (conditie), en het enige dat een beetje
vreemd is de laatste, die is gewoon dat anders.
Maar nogmaals, dit is identiek, conceptueel, naar wat we hebben gedaan
al hoewel de syntax zal neem een ​​beetje wennen.
>> Nu, in dit voorbeeld, zijn er enkele andere vreemde syntax.
We zien printf weer, open haakje, en haakje sluiten.
En de binnenkant van er een tekenreeks tussen aanhalingstekens.
De haakjes, in de context van printf, ga aan de linkerkant
en rechts van wat?
Wat doen we beschrijven dat geciteerd string als meer in het algemeen?
>> Dus het is een argument.
Elke keer dat je een functie, zoals printf, en vervolgens een open haakje en een
dicht Paren en iets in het, of het nu een string, of een
integer, of iets anders, het ding in tussen de haakjes heet
een argument.
>> En een argument gewoon beïnvloedt het gedrag van de functie.
In dit geval, het is vrij duidelijk hoe.
x <y is wat er wordt overgegaan in, zo te zeggen, als een argument.
En printf gaat afdrukken precies dat.
Want zeker, de persoon jaar geleden die printf geen idee geïmplementeerd had
wat wij menselijk opvolgers waren gaat printf gebruiken.
Dus dat is waarom argumenten bestaan, naar invloed op het gedrag na van een functie
geschreven.
>> Nu, Booleaanse expressie.
We hebben deze eerder gezien in Scratch.
Het blijkt in C kunt u ook "of" ze samen, om zo te zeggen.
Twee verticale balken betekent dat dit blok van code, dit dit doet, zal
uitvoeren als de eerste voorwaarde waar is of de tweede voorwaarde waar is.
En zelfs al zou je niet hebt gedaan Dit in Scratch, kon je inderdaad
Dit doen Scratch, en u kunt ook anders uitdrukken jezelf -
als de eerste voorwaarde en de tweede voorwaarde waar zijn, dan doen wat is
binnenkant van de accolades.
>> En net als een terzijde, de reden dat het een dubbele ampersand en een dubbele
verticale balk, zullen we uiteindelijk zien dat een verticale balk en een
enkele ampersand eigenlijk hebben verschillende betekenis in C. Dus voor nu,
dat duplicatie van symbolen is opzettelijk.
>> Dus laten we introduceren, kort, deze andere stukje syntax.
Deze niet helemaal overdracht naar Kras, maar ik beweer dat ik kan
de uitvoering van het idee van een zo anders, indien anders, als anders, als anders opgenomen met behulp van
zoiets als een switch statement.
En de enige reden dat deze werkelijk bestaat is om gewoon geven u, de programmeur, een
iets andere manier van het oplossen van een aantal probleem, ook al logisch dat
geeft je niet alle nieuwe mogelijkheden.
>> Daarmee bedoel ik dit.
Wanneer je switch, en dan een spatie, zeggen en vervolgens een paar haakjes, in
daarvan gaat een uitdrukking -
en dit kan een beetje niet duidelijk op het eerste, maar dit is geen argument,
technisch, omdat schakelaar is geen functie.
Dus voor nu, gewoon aannemen dat we gebruiken haakjes verschillende plaatsen
om verschillende redenen.
>> Dus schakelaar op expressie betekent dat ik kan zet een variabele binnenkant van die
haakjes waar het zegt expressie.
En dan, als die variabele -
veronderstel dat het wordt x genoemd, en het is gewoon een integer -
Ik kan dan opsommen in mijn dia hier iets als dit.
Als x is mijn variabel, en ik willen iets doen als x
gelijk aan 1, kan ik dat doen.
>> Als ik wil in plaats daarvan iets doen als x 2, kan ik dat doen.
Anders, als ik wil iets anders doen geheel, ik kan een standaard-case hebben in
welk geval ik doe dit andere ding.
Dus in die zin, het is gelijk aan een wanneer x gelijk is gelijk aan 1, anders als anders,
maar ik noem dit nu alleen maar omdat we zullen het opnieuw zien.
Maar voor nu, weet alleen dat het bestaat.
>> Oke.
Dus deze laatste zijn een beetje meer complex op het eerste gezicht, maar ze doen
iets redelijk simpel.
Een for-lus in C is een stuk code dat gewoon weer doet iets en
weer.
En het enige vervelende ding over het is dat is dat het een beetje cryptisch
om jezelf te uiten in deze cyclische patroon, maar de wereld gestandaardiseerd op
volgt.
>> Wanneer u gebruik maken van een lus, heb je een paar haakjes weer.
En let op de twee puntkomma's daarbinnen.
Die twee puntkomma's gescheiden drie verschillende uitdrukkingen binnenkant van de
haakjes.
Een daarvan is de zogenaamde initialisatie.
Een is de zogenoemde toestand.
En is de zogenaamde updates.
>> Gezien in het abstracte, dit is volledig niet-voor de hand, dus laten we eens kijken
een concreet voorbeeld.
In Scratch hadden we een herhaling blok.
En dit blok zei herhaal dit 10 keer, zeggen "Hallo, wereld." Laat me claimen voor
nu, en we komen terug naar deze, en dit, ook, zal meer vertrouwd te geraken
u het duurde niet lang, het equivalent C code kan worden gezegd dat dit zijn -
een voor de verklaring en een ruimte, een paar haakjes, let op de puntkomma in
daar, die drie aparte scheiden meer de initialisatie, de
conditie, en de update.
>> En neem een ​​gok wat de eerste aan het doen is.
Int i = 0.
In termen ruwe leek, wat is dat voor ons doet, waarschijnlijk?
Dus ja.
Het declareren van een variabele genaamd i, en het geeft het wat waarde?
0.
Dus het creëren van een variabele genaamd i, opslaan van de waarde 0 in.
Dat is de zogenaamde initialisatie.
>> Oke, nu voordat beweerde I dat de middelste ding, i
<10, is de aandoening.
Dus wat doet?
Nou, wat de lus doet wanneer een programma met een lus wordt uitgevoerd, is
elke keer dat de computer draait door deze lus, van boven naar beneden, van boven naar
bodem, net zoals jullie deden toen tellen uzelf en gaan zitten,
opnieuw en opnieuw en opnieuw, de computer gaat
om die toestand te controleren.
En als ik minder dan 10, het zal het opnieuw doen.
Als ik minder dan 10, het zal het opnieuw doen.
Als ik minder dan tien, het zal het opnieuw doen.
Dus dat lijkt te suggereren dat hopelijk i is aan het veranderen.
Anders zouden we een oneindige lus.
En inderdaad, ik is aan het veranderen, omdat de laatste ding na de puntkomma er
is de ietwat cryptische syntax van i + +.
Maar degenen onder u die dit heeft gedaan eerder, dat betekent
gewoon wat?
>> STUDENTEN: [onderbreekt hem VOICES].
>> DAVID Malan: Voeg 1 tot i.
Increment i.
Zo zagen we een Scratch puzzel stuk voor dat, eigenlijk.
Het zag er niet uit als i + +, maar dat middelen, heel eenvoudig, verhoog de
waarderen i door 1 elke keer dat je dit doet.
Dus letterlijk, begint u met het i geïnitialiseerd op 0.
U controleert dan uw conditie.
0 is minder dan 10?
Ja.
We gaan door de lus.
>> Het volgende dat ik aanspraak maken op de computer gaan doen, is dat het gaat
naar i verhogen.
Dus ik nu 1.
Het controleert de voorwaarde.
1 is minder dan 10?
Natuurlijk.
Dus doet het weer.
Dan stappen i + + 2.
Is 2 minder dan 10?
Ja.
En opnieuw en opnieuw en opnieuw.
En uiteindelijk door de plus-plussing, krijgen we te i is gelijk aan 10.
10 is minder dan 10?
Nou, natuurlijk niet.
En dat is het punt waarop de lus gewoon stopt.
En als je meer code op het scherm beneden, de computer
opbrengst aan die code in plaats daarvan draaien.
>> Dus nogmaals, ook al gaat dit kijken en voelen een beetje vreemd
eerst, zeker voor degenen onder u die nog nooit geprogrammeerd,
letterlijk vermindert conceptueel wat is anders een zeer
eenvoudige puzzel stuk in Scratch.
>> Oke, ik heb beloofd dat er zou zijn andere analogen in Scratch.
Er is deze ook.
En we zagen dit kort laatste keer.
Maar vergeet het altijd blokkeren Scratch?
Het doet gewoon iets voor altijd?
Ik beweerde dat je zou kunnen implementeren deze op deze manier.
En je kunt eigenlijk dit te implementeren in een heleboel verschillende manieren.
>> Maar de while-lus is gewoon een andere manier in C van jezelf uitdrukken.
Aan het eind van de dag kunt u niet doen alles met een while lus die je
kan niet met een lus.
Zodat ze aan het eind van de dag functioneel hetzelfde.
Maar het laat je om jezelf te uiten een beetje anders in
volgt.
>> Met de while loop, het is wat in haakjes, dat weer is gecontroleerd en
weer.
En zodra dat expressie onwaar, dan is de lus stopt uitvoeren,
en de computer overgaat tot lopen wat andere code die u
hebben in uw dossier.
>> Maar wat is interessant hier is dat ik letterlijk getypt waar.
En waar is een soort van Booleaanse waarde, een waar of onwaar waarde.
Dus kan waar ooit geworden false als ik heb letterlijk
hard-coded het in mijn programma?
Dus geen.
Het is een beetje vreemd dat ik dit deed.
Maar waar is waar.
Er is geen plus-plussing.
Er is geen gebruik van variabelen in hier.
Dus omdat ik hard-coded terwijl true, dit lus zal altijd evalueren
opnieuw en opnieuw en opnieuw.
>> Dus hoeveel keer is hello wereld gaat afdrukken op het scherm?
Altijd.
Een oneindig aantal keren totdat de batterij sterft of een andere externe
gebeurtenis plaats.
Dus dit is waarschijnlijk niet het beste programma schrijven, omdat als de gebruiker
kan nooit uw programma stoppen, het is waarschijnlijk niet wat je bedoeld.
>> Maar soms, programma's dienen hebben een oneindige lus.
Bijvoorbeeld, als uw computer een klok op het, het zeker zou zijn
leuk als je klok het niet zorgen voor een actualisering zelf altijd, zij het een keer per
tweede of een keer per minuut of zoiets.
Dus zelfs oneindige loops hebben hun plaats.
>> Oke.
Tot slot, deze.
En deze is een beetje anders functioneel, en we komen terug te komen
Dit waarschijnlijk in Pset 1.
Maar er is een ander type lus riep een doen terwijl lus.
En het enige verschil tussen een do while loop en, zeg, een while lus,
is dat de voorwaarde wordt gecontroleerd niet voordat u de code uit te voeren, maar na
u de code uit te voeren.
Dus aan de bovenkant voor de tijdens het lus, terwijl het doen terwijl
controleert deze aan de onderkant.
>> En dit betekent gewoon dat de while lus zal doorgaans uitgevoerd malen
of minder tijd dan een while lus?
Potentieel meer keren, omdat een te doen while loop wordt duidelijk zeggen doe dit,
pas waarna wijzen u controleren Als de toestand van de binnenkant
haakjes waar is.
>> Dus zullen we dit opnieuw zien waarschijnlijk in Pset 1.
Als je ooit iets wilt doen op minstens een keer en dan misschien wat meer
tijden, is dit een goede construct te gebruiken.
Maar een while loop, daarentegen, zal controleer dan eerst de conditie.
En dat is het voor lussen in C, doen terwijl, tijdens, en lussen.
En nogmaals, ze in kaart vrij mooi weer naar Scratch, behalve deze niet
vrij hebben dezelfde analoge in Scratch.
>> Nou, wat dacht je, nu, variabelen?
Dus dit is hoe ik verklaarde een variabele syntactisch de andere dag.
Ik had een int, waarvan ik beweerde een geheel getal.
Ik had toen een variabele genaamd teller, en vervolgens een puntkomma.
Dus wat is deze regel code doen?
Dat is, heel eenvoudig, verklaren een variabele -
dat is, vraagt ​​de computer, geef me wat geheugen, geef me wat stukjes - in
waar ik wat kan opslaan?
Een int.
En de puntkomma betekent alleen einde van de regel code.
>> Nu, de tweede regel is waarschijnlijk vrij te raden.
Wat is teller = 0; doen?
Het toewijzen van 0 tegen te gaan.
En dit is dus de andere zaak dat is een beetje vervelend
versus, zeg, algebra.
Overwegende dat in de algebra, de gelijk-teken betekent gelijk, hier C, gelijke
teken betekent opdracht.
Het betekent dus zet wat er op de juiste in wat er aan de linkerkant.
En we zullen een ander symbool te zien, gelijk gelijk, als we willen eigenlijk testen
voor kwaliteit, enigszins irritant.
>> Maar dit is een beetje inefficiënt.
Het is een beetje vervelend dat ik heb aan een variabele declareren en
geef het dan een waarde.
Dus C laat ons eigenlijk dit te vereenvoudigen en doe het gewoon allemaal tegelijk.
U kunt de variabele declareren links.
U kunt nog wel de opdracht op de recht door de invoering van die gelijk-teken in
het midden.
Dus aan het eind van de dag, deze twee zijn gelijkwaardig, maar dit ene, eerlijk gezegd,
is waarschijnlijk de betere gewoonte om in gewoon omdat het een beetje minder
code, het is een beetje makkelijker te lezen, en het scherpt gewoon omhoog
uw code, zo te zeggen.
>> Voor vragen tot nu toe op de lussen, op variabelen op voorwaarden,
Booleans, hetzij technisch of conceptueel?
Oke.
Dus nu deze volgende krijgt men een iets interessanter.
En dit is het voorbeeld zet ik laatst tijd die net in kaart brengt een kras voorbeeld
naar C.
>> Zo een functie.
In termen van de leek, wat is een functie?
Kreeg om brutaler met uw antwoord.
Wat is een functie?
>> STUDENT: Bestaat er zoiets.
>> DAVID Malan: Wat is dat?
>> STUDENT: Bestaat er zoiets.
>> DAVID Malan: Bestaat er zoiets.
OK.
We beginnen daar.
Dus een functie doet iets.
Dus het is een stukje code dat is wezen elders die geïmplementeerd
inderdaad doet iets.
Nu, wat interessant is over een functie is dat deze inbreng kan nemen,
en het kan uitvoersnelheid.
En laten we daadwerkelijk een kijkje op deze.
>> Dus de man achter het gordijn opzettelijk was een moment geleden.
Hier hebben we een tafel.
Maar stel dat dit ook daadwerkelijk vertegenwoordigt een grote doos.
Dit is dus een zogenaamde black box.
En in het algemeen, in design, in computer wetenschap, zwarte dozen alleen maar verwijzen naar
stukjes functionaliteit dat iemand heeft geïmplementeerd, en jij niet
se weten of schelen hoe het is uitgevoerd onder de motorkap.
Je gewoon zorgen dat deze black box, die we nu beginnen te bellen naar een
functie, doet iets.
>> Dus, bijvoorbeeld, als deze zwarte doos op het podium hier vertegenwoordigt printf, een
functie, ik weet uit eerdere voorbeelden dat printf neemt een of meer
argumenten, en de eerste van deze argumenten moet een string zijn, zoals
"Hallo, wereld." Nou, als ik de persoon het schrijven van het programma, en ik wil
te printf gebruiken, ik, bijvoorbeeld, zou neem een ​​stuk blanco papier hier en een
zwarte stift en schrijf op het -
Ik verkeerd gespeld "wereld" -
H-E-L-L-O.
>> Dus ik zal mijn zwarte marker te nemen en ik zal schrijven, zo groot en leesbaar als ik kan op
dit stuk papier, "hello, world," En nu heb ik beweren dit is mijn argument.
Dit is weergegeven met een string een stuk wit papier.
En mijn inbreng nu naar de functie printf gaat dit worden.
Dus ik ben printf bellen, passeren dat argument als input voor het.
>> En nu, ik weet niet hoe de persoon die schreef printf deed het jaren geleden, maar
Ik weet uit de documentatie die haar doel in het leven is om af te drukken wat ik
aan het als invoer.
Dus, hoewel deze implementatie is buiten het medeweten van mij
onder de motorkap, nu Ik zie, oh, is het gedaan.
Het heeft iets gedrukt op het scherm.
En nu controle van het programma, als er waren meer regels code, zou
zijn nu terug naar mij.
En dus het feit dat Colton -
zegene zijn hart, is ondergedoken hier onder een tafel voor jullie allemaal -
is opzettelijk in dat ik niet weet en kan me niet schelen hoe printf is
uitgevoerd.
Ik weet gewoon, nogmaals, uit zijn documentatie, wat het doet en hoe ik
word geacht om het te gebruiken.
>> Nu, herinner dat printf kon krijgen een beetje meer verfijnd.
Nogmaals, we alleen maar praten over de equivalent van Say blok Scratch's.
Maar ik deed ook deze laatste keer.
Ik wilde mijn hello programma maken beetje meer dynamiek en niet alleen moeilijk
code iets als "wereld," en zeker niet moeilijk code iets
willekeurige zoals D-A-V-I-D in het programma.
Ik wilde de gebruiker voor zijn of haar vragen naam, en vervolgens iets mee te doen
die string die ze leveren.
>> Dus er is iets een beetje anders hier. printf, een moment geleden,
deed, inderdaad, doe iets, maar het heb niks terug naar mij.
Rechts?
Colton niet Geef me om het even wat terug, geen stuk papier.
Er was slechts een neveneffect.
Mijn verstrekken van "hello, world" als een argument Colton resulteerde in de
bijwerking van een woord, sommige woorden, verschijnen op het scherm.
>> getString, is echter een beetje verschillende. getString is een
functioneren, maar het enige waarde terugkeert.
Het heeft niet alleen een esthetische kant effect.
Het geeft me eigenlijk, de persoon bellen of met de functie,
iets terug.
Dus in dit geval, getString is riep met getString geopend
Paren, dicht Paren.
Heeft getString daarom neem geen argumenten of inbreng?
Nee, het lijkt niet.
Zijn doel in het leven is alleen maar om een ​​string te krijgen.
Het heeft niet meer details dan dat.
Dus laat me gaan en doen alsof, nogmaals, deze zwarte doos is niet printf,
maar getString, en laat mij, de persoon het schrijven van dit programma, bel of gebruik
getString door alleen het schrijven G-E-T-S-T-R-I-N-G open Paren, close
Paren, getString.
>> Nu, ik heb geen idee hoe de CS50 personeel geïmplementeerd getString, maar ik weet dat
als ik maar lang genoeg wacht, zal het haar doen ding onder de motorkap, misschien met behulp van
sommige variabelen, misschien met behulp van enkele omstandigheden, misschien met behulp van enkele lussen,
misschien een aantal andere functies, Misschien met behulp van -
gewoon proberen om kraam - misschien met behulp van enkele andere programmeerfuncties.
Maar als ik maar lang genoeg wacht - in werkelijkheid, in de computer, gebeurt
super snel -
als ik maar lang genoeg wacht, deze functie getString gaat om een ​​string te krijgen
de gebruiker, die vermoedelijk typen het uit op hun toetsenbord, en
dan, wanneer je wordt getString gedaan krijgen die tekens van de gebruiker
en te slaan in een tekenreeks, die functie, getString, zal moeten
klaar voor me enkele uitgang die ik ben gaan halen via de
toewijzingsoperator.
>> En als ik ga inderdaad naar de uitgang hier, Obosi heeft royaal
deelgenomen, zonder het te weten deze in vooruit, door het schrijven van zijn naam op dit
variabel wat vertegenwoordigt een string.
Nu, de opdracht operator betekent, zelfs hoewel dit een beetje zou kunnen voelen
overbodig, ik eigenlijk wel nodig om mijn eigen exemplaar van deze te maken.
Omdat aan de linker kant side - whoops! -
merken dat ik in wezen touwtje naam aan de linkerkant.
Dus ik ga ook maken mijn eigen exemplaar van dit.
En dit is een beetje een leugentje om bestwil, want we zullen zien in een week of twee van
keer dat strings zijn niet echt wat ze lijken te zijn.
>> Maar voor nu, hier is de return waarde.
Hier is mijn eigen exemplaar van het na met behulp van de opdracht operator.
En nu, wat wil ik nu doen?
We hebben nu de tweede van twee regels code.
Dus ik wil nu printf bellen.
Laten we doen alsof nu dat de zwarte doos is weer terug naar zijn
printf en niet getString.
>> Printf dit keer gaat neem hoeveel argumenten?
Dus kijk, het is als twee.
Er is twee komma's in, maar zo'n komma, het
binnenkant van de citaten.
Dus het eerste argument is letterlijk gaat dit worden.
H-E-L-L-O, komma, percenten s, backslash-n.
En nu ben ik het verstrekken van niet een argument, maar twee argumenten aan printf.
>> En wat is printf verondersteld wordt te doen met deze twee ingangen nadat ik geef ze in
als argumenten?
Het zou de tweede van te nemen hen, die ik geroepen naam, zodat de
tweede stukje papier schreef ik uit een moment geleden heet naam.
Het gaat om stekker van de waarde binnen van die variabele in de tijdelijke aanduiding,
% S, zodat, opnieuw, in slechts een moment van tijd, zullen we een neveneffect van te zien
hebben printf geroepen, waarbij we nu zie niet "hello, wereld," maar "hallo,
Obosi. "
>> Dus een groot applaus voor beide onze vrijwilligers, maar een van hen wist
dit zou gebeuren.
Oke.
Dus, misschien, simpel als dat was, zeker, als je al bekend bent
met dergelijke, hopelijk zul je nooit vergeten dat bepaalde visuele hoe
functies werken.
>> Dus er is meer dan alleen getString.
Binnenkant van de CS50 bibliotheek, er is een hele hoop functies, die allemaal
worden geactiveerd gewoon om duidelijk te maken dat we schreven deze functies.
Typisch, in C, bijna elke functie die u zult gebruiken is in kleine letters.
Maar we bewust gebruik hoofdletters alleen maar om duidelijk te maken dat deze
zijn zijwieltjes van soorten die we zullen gebruiken voor slechts een paar weken dat
het proces om te vereenvoudigen input van de gebruiker.
>> De CS50 bibliotheek doet niets dat je kon zelf niet doen door
alleen met behulp van C-code van een oldschool leerboek.
Maar, nogmaals, gebruiken we ze als training wielen van soorten voor slechts een paar
weken, zodat we kunnen ontdoen van de complexiteit dat u binnenkort zult begrijpen
zelf iets te doen als relatief eenvoudig als het krijgen van
input van een gebruiker.
>> Dus weet dat je toegang zult moeten naar getchar, GetDouble -
verdubbelen.
Dinges - en dan GetFloat.
Wat is een vlotter?
Laten we beginnen er.
>> STUDENT: [onverstaanbaar].
>> DAVID Malan: Yeah.
Het is een nummer met een komma.
Dus terwijl een int is een geheel getal, waarvan is maar een getal met 0 tot en met 9,
sommige aantal herhalingen, daarvan een vlotter is iets
met een decimale punt.
En een dubbele, ondertussen, is eveneens een getal met een decimale punt, maar meer
getallen achter de komma punt, potentieel.
>> Dus we zullen terug te gaan naar dit duurde niet lang.
Maar meestal, elk van deze typen data, elk van deze typen variabelen
dat een bibliotheek als de onze kan terugkeren naar u, maken gebruik van verschillende aantallen bits aan
informatie op te slaan.
Typisch, een Char, die net betekent een teken, gebruikt 8 bits.
En dat is eigenlijk in lijn met onze byte van vrijwilligers vorige week die
kwam en vertegenwoordigde een Ascii karakter per keer.
Dus een Char is 8 bits.
>> Een drijvende toevallig 32 bits, typisch.
En een dubbele, zoals je wel kan raden, is eigenlijk 64 bits, dat is gewoon meer,
wat betekent dat je groter kunt hebben nummers of meer precisie.
Maar nogmaals, meer daarover een andere keer.
GetLongLong, ondertussen, hoewel dom genaamd, is eigenlijk gewoon een
integer die twee keer zo groot, tweemaal lang, potentieel, als een gewone
integer, 64 bits in plaats van 32.
En getString we heb gebruikt.
>> Maar het blijkt, in de CS50 bibliotheek, dat wordt toegepast, zoals we zullen zien, in
de vorm van de twee bestanden, waarvan heet cs50.h heeft twee
gegevenstypen in.
Booleans bestaan ​​niet in C. U kunt simuleren ze door gewoon met behulp 0s en 1s
in uw programma's.
Maar wij in de CS50 bibliotheek hebt gemaakt de symbolen "true" en "false"
op 1 en 0 vertegenwoordigt zodat je niet moeten hard code iets
letterlijk als 1 en 0.
Maar we zullen weer die zien.
>> String, ook niet bestaat.
En dat is waarom ik gezegd dat het een beetje een leugentje om bestwil voor nu.
Maar we zullen schil terug dat layer duurde niet lang.
Maar voor nu, een string is een reeks tekens.
>> Ondertussen, in C, je inderdaad verschillende gegevenstypen.
Let op dit zijn kleine letters.
Zodat de functies die u daarnet zag zijn functies geschreven door CS50 dat
zal terugkeren naar een waarde die valt in een van deze categorieën.
>> Een paar spiekbriefjes gewoon te planten het zaad hier. doet printf niet alleen
neem% s als tijdelijke aanduidingen.
Het duurt% d voor decimaal integer, of% i zou zo goed werken.
% F is floating point waarden. % C is een char, als je wilt gewoon aansluiten een
karakter in een vooraf opgemaakte tekenreeks zoals we hebben gedaan, kunt u% c gebruiken.
>> En dan, ietwat hinderlijk,% lld is voor een lange, lange decimaal integer,
die net betekent dat als je een echt groot aantal en je gebruikt iets
riep een lange lange, waar we komen terug naar in een PSET, kunt u% lld gebruiken om
vertel printf, plug in een echt grote integer hier via de tweede of
een aantal andere argumenten.
>> En tot slot, ik beloofde dat Er is een paar andere ontsnapping
sequenties die printf ondersteunt.
We hebben gezien backslash-n.
Backslash-r je kan zien.
Het is een soort van een old-school ding.
Als u ooit gebruik gemaakt van een echte typemachine jaar geleden en u trok op de kruk
die niet alleen gedraaid aan het wiel om bewegen de line-up, het bewoog ook de
hele zaak helemaal terug naar links, goed, backslash-r gewoon
beweegt in wezen je cursor terug het begin van de regel
zonder het te bewegen naar beneden.
Maar nogmaals, meer op dat, misschien in de toekomst.
>> Backslash-citaat, backslash-dubbel aanhalingsteken, backslash-backslash is de
oplossing voor de kleine kleine raadsel Ik zinspeelde eerder.
En backslash-0 is eigenlijk heel interessant.
Maar we zullen terug te komen dat duurde niet lang.
>> Dus laat me gaan in, nu, de CS50 apparaat, en laten we eigenlijk doen een
snel op te warmen met een van de voorbeelden we hadden al en dan naar
iets een beetje ingewikkelder.
Dus als ik open mijn programma riep gedit -
dit is mijn grafische editor.
En ik kan dat doen -
laat me dat venster te sluiten daar -
door middel van dit pictogram hier beneden, gedit, in de bottom-links
hoek naast het menu.
>> Ik ga om te gaan en te bevorderen, en bespaart dit voorbeeld in, zeg, John
Map Harvard.
Map John Harvard's is gewoon zijn huis directory waar al zijn bestanden te leven
standaard.
En ik ga dit zo te besparen een bestand met de naam hello-0.c.
En ik heb deze naam gekozen gewoon dus het lijn staat met het monster code op het
website cursus en in het YouTube-video's online.
>> Dus nu ga ik om te beginnen aan schrijf mijn eerste programma.
Laat mij in te zoomen voor leesbaarheid.
En ik ga je gang gaan en zeggen int belangrijkste leegte, die net zo is als dat
gele puzzelstukje dat start een programma.
Ik heb gekregen in de gewoonte over de jaar van het openen van mijn accolade, dan
Ook sluiten en dan terug te gaan naar waar ik wil mijn code zetten, net
omdat het helpt me alles te houden evenwichtig, vooral omdat mijn
programma krijgt lang.
>> En nu, hier, ik ga om verder te gaan en zeggen: printf, citeer unquote,
hello wereld, backslash-n, dicht citaat, haakje sluiten, puntkomma.
Dus ik ben gewoon alles wat we hebben te herhalen het nemen van voor tot nu toe verleend.
Nu ga ik om uit te zoomen.
>> En deze terminal venster hier beneden, wat mag ik doen in deze zwarte
en witte venster?
Wat kan ik het gebruiken?
Dus dit is waar ik opdrachten uitvoeren en waar ik dingen kan compileren.
En ik ga het simpel te houden.
Ik ga naar een programma te gebruiken Voeg genaamd, die niet
technisch een compiler.
De compiler heet Clang, maar we komen terug naar die komen in een
week of twee de tijd's.
>> Voor nu, ik ben gewoon gaan typen maken hello-0, Maar degenen onder u die waren
vergelijken in uw gedachten wat ik net getypt op wat ik had moeten getypt kan
weet al dat ik deed hier iets mis.
Nu, er is duidelijk een aantal fouten.
Voordat ik zelfs kijken naar wat ze zijn, geen gedachten over wat ik verkeerd gedaan?
>> STUDENTEN: [onderbreekt hem VOICES].
>> DAVID Malan: Yeah.
Ik mis header-bestand van de bibliotheek.
Hiervan. H bestanden header genoemd bestanden, en ze gezamenlijk
behoren tot dingen geroepen bibliotheken.
Bibliotheken zijn slechts stukjes code dat andere mensen schreven.
Dus de standaard [? i?] bibliotheek verzameling van bestanden met code
dat andere mensen schreven.
>> Dus ik mis dat.
Waarom krijg ik een foutmelding?
Nou, laat me terugbladeren in mijn terminalvenster hier.
En helaas in C, zoals in veel programmeertalen name
als het allemaal nieuw voor je, de fout berichten zijn nauwkeurig, maar ze zijn ook
nogal cryptisch.
En de fout hier, in rood, is "Functie impliciet verklaren bibliotheek
printf met type, "en dan scrollt naar de volgende regel, "int const char *,
... "Het wordt gewoon echt overweldigend snel.
>> Maar wat je moet beginnen te doen, indien, nogmaals, nieuw voor dit alles, is gewoon om
beginnen te zoeken naar trefwoorden.
Duidelijk, zou ik niet begrijp de helft van de woorden zie ik gewoon nog niet.
Je wil, hoewel, in een week tijd.
Maar ik zie printf.
En dat moet beginnen, het duurde niet lang, tot jog je geheugen, oke, printf.
Er is iets mis met printf.
Heb ik spel het verkeerd?
Nee, het maakt niet uit als - oh.
Ik kan het niet gebruiken, tenzij ik les de compiler dat het bestaat.
En dus, nogmaals, ga met je intuïtie, zelfs als je niet echt begrijpen
de werkelijke foutmeldingen.
>> En inderdaad, de oplossing hier is gewoon opnemen bovenaan het bestand
als dat, opnieuw op te slaan mijn dossier met Controle-S of het menu Bestand.
En als ik nu terug ga hier beneden, Ik ga dit te wissen.
Controle-L is gewoon een leuke manier om het scherm te wissen.
En dan ga ik te typen "make hello 0 "invoeren, en nu zie ik nog steeds een
cryptische reeks symbolen, maar komen we terug naar dat.
Dat is wat maken voor u doet.
Het automatiseren van het proces van het nemen een tamelijk vervelende opdracht waarbij
Clang, de eigenlijke compiler.
Maar het feit dat ik geen fouten betekent dat dit ding zou moeten werken.
>> Dus ik ga nu doen - laat me in te zoomen weer -
./hello-0 Enter, en inderdaad, ik zie "Hallo, wereld." Dus laten we nu verhogen
Deze ooit zo iets gewoon te repliceren de stappen die wij bedoelden.
Ik ga dit hernoemen met Opslaan als om hello1.c.
En nu ga ik naar een variabele declareren riep naam, dus naam touwtje,
en ik ga in te doen de waarde van citaat-unquote
D-A-V-I-D close-citaat puntkomma.
En nu ga ik naar "wereld" te vervangen met wat placeholder voor een string?
% S.
>> En nu, hoeveel argumenten moeten printf neem deze keer?
Dus twee.
Dus ik ga buiten de aanhalingstekens.
Ik typ "naam" na een komma.
Maar ik heb iets gedaan anders mis deze keer.
Maar laten we aannemen dat ik niet beseffen dat nog niet.
Laat me gaan hier omhoog.
>> En merk ook, ik word een beetje verveeld van het typen "make hello 0" alle
tijd, "maken" en dit alles.
Dus, zo blijkt, in Linus kunt u Vaak raken de pijl omhoog op uw
toetsenbord, en je kunt eigenlijk scrollen door alle van de opdrachten die ik heb
uitgevoerd voorafgaand aan daarnet.
Dus als ik dat doe, Boven, Boven, er is maken hello 0.
Ik wil dat niet.
Ik wil alleen maar om dat te veranderen om hello 1 deze keer, Enter.
Uiteindelijk, dat zal u wat tijd besparen.
>> Oke.
Helaas, er is een fout.
Dus laat me scrollen.
Dit ziet eruit als ik echt afgeslacht dit programma.
Ik bedoel, mijn god, het is twee regels code, en zijn 10 lijnen van fouten.
Maar kijk naar de bovenste eerste.
Gebruik van niet-aangegeven id string.
Heb ik bedoel standaard i n?
Nee ik niet.
Ik bedoelde string.
>> Maar waar is de string variabele soort verklaard, dd wij zeggen?
Dus het is in de CS50 de bibliotheek.
Dus het is niet voldoende, in deze eerste paar weken, gewoon om te gebruiken
wat C ons geeft.
Ik ben ook gaan om hier te gaan, en ik kon het boven of onder te zetten, maar ik zal
hou het alfabetische om dingen ordelijk te houden.
Ik ga cs50.h omvatten, die vooraf geïnstalleerd
u op de CS50 apparaat.
En het is open source, dus zelfs mensen op het internet kan het gebruiken op hun
eigen computers.
Maar het komt met de CS50 apparaat.
>> Dus nu laat ik terug te gaan en opnieuw te compileren dit met make hello 1.
Verdomme.
Nog een andere fout.
Laat me schuiven tot aan de eerste, dat wel.
Deze is een beetje ingewikkeld.
Multi-character character constant.
Dat helpt me niet.
Maar let op, Clang is op zijn minst een beetje beetje fatsoenlijk, waarbij met een beetje
groen dakje staat, het is te zeggen Hier is waar ik het verpest.
Waarom is het wijst, met dat kleine groene pijl, om de enkele aanhalingstekens volgende
naar mijn naam?
>> Dus dit is een van de dingen die je gewoon wennen, vooral als je geweest bent
programmeren in Python of JavaScript of andere talen, waar dit detail
doet er niet toe.
In C, het ertoe doet.
Als u verklaren een string, dat is een reeks van 0 of meer karakters,
je eigenlijk moet gebruiken dubbele aanhalingstekens.
Dus ik echt nodig om dit terug te veranderen te openen citaat, sluit citaat, met
dubbele aanhalingstekens.
Enkele aanhalingstekens hebben hun plaats, maar alleen wanneer u gebruik maakt individuele
chars, maar daarover een andere keer.
Voor nu, de dubbele aanhalingstekens noodzakelijk.
>> Dus nu, laat me terug naar mijn terminal venster, maak hello 1.
En wie is zelfverzekerd?
Is dit programma nu gaan te kunnen compileren?
OK.
Dus drie van ons denken dit.
Oke.
Enter.
En het eigenlijk deed.
Zodat er geen fouten dit keer, zelfs hoewel dit programma heeft gekregen een beetje
complexer.
Als ik nu doen dot slash hello 1, Enter, het gaat om te zeggen "hallo, David."
>> Maar laten we de derde iteratie dit, wanneer de
programma werkelijk dynamisch.
Laat me gaan door en verander het bestand naam, alleen voor de samenhang met de
bestanden die je beschikbaar hebt om je daarna online.
Enter.
En nu ga ik te gaan en niet slaan "David" harde hier gecodeerd.
Wat kan ik doen om heel eenvoudig dit programma te verbeteren?
>> Ik kon getString noemen.
Het is misschien een beetje non-duidelijk wat is zijn te gebeuren, dus ik ga
om daadwerkelijk toe te voegen een andere lijn, printf, en zeg naam, colon, dicht citaat, net
de gebruiker een aanwijzing geven op het scherm.
En nu ga ik hier te gaan, en ik ben ga mijn sneltoets.
Ik ga om te gaan omhoog, omhoog, en veranderen hello 1 tot hello 2, Enter.
En gelukkig, ik ben het maken van vooruitgang.
>> En nu ga ik naar boven te gaan om dot slash hallo en
dat veranderen naar 2, Enter.
En nu mijn programma -
Ik zal inzoomen - wordt steeds een beetje mooier.
Naam gaat worden, laten we zeggen Rob dit keer, Enter, hello, Rob.
We kunnen het opnieuw doen.
Naam, Lauren, Enter.
Naam, Joseph, Enter.
Naam, laten we proberen te zijn moeilijk, Enter.
Eh.
Het is niet echt een bug.
Dus het is gewoon een beetje lelijk.
Misschien kunnen we dit oplossen in de toekomst, niet nu.
>> Maar hoe zou je instinctief gaan over de aanpak
dat bijzondere uitdaging?
Het ziet er gewoon dom.
Hoe ga je dingen vermijden zoekt dom?
Dus we konden doen, OK, ik hoorde een paar van de dingen, een voorwaarde en een lus.
We konden gebruiken, een, een voorwaarde, om te controleren wat is de lengte van de tekenreeks
de gebruiker ons gaf?
En als het 0, het is gewoon citeren einde citaat, ze gewoon op Enter, dan
misschien moet ik schreeuwen tegen hen en wederom prompt hen.
Maar hoe weet een prompt ze weer?
Nou, ik hoorde ook loop, en ik kon dat doen opnieuw en opnieuw en opnieuw
de gebruiker vraagt ​​om het zelfde ding.
>> Nou, laten we een ander voorbeeld een andere
functie in het CS50 bibliotheek.
Laat me dit dossier af te sluiten.
Laat ik een nieuwe maken.
En ik zal het adder.c noemen, alleen maar omdat het is makkelijk om eenvoudige rekenkundige doen,
ook al is dit volledig zal zijn underwhelming met wat je zou kunnen doen
met elke moderne computer.
>> Maar laat me nu ga je gang en -
Ik heb mijn lesje geleerd vorige keer - onder andere cs50.h, omvatten stdio.h, int
belangrijkste leegte, die, voor nu, ik zal gewoon nemen op blind geloof, maar we gaan ervan uit
dat zal begrijpen wat dat betekent dat duurde niet lang.
En ik ga iets zeggen zoals "geef me een int."
>> En nu, hoe krijg ik een int te krijgen?
Ik wil uiteindelijk een variabele declareert riep x van het type int en
op te slaan in een geheel getal van de gebruiker.
Dus dat was een hele mond vol.
Maar als iemand wil voorstellen, hoe verklaar ik een integer genaamd x?
Int x.
>> Dus het is echt zo simpel.
Geef me een int.
Noem het x.
Nu gebruik ik de opdracht operator.
En hoe kan ik opslaan van de liet een waarde van de gebruiker?
Ik wil niet getString bellen, natuurlijk, maar getint.
Alle argumenten?
Nee.
Dus het is geopend Paren, dicht Paren onmiddellijk, en vervolgens een
puntkomma eindigt de lijn.
>> Laat me nu weer doen.
Geef me nog een int.
Deze keer zal ik int doen, laten we noem het y, gelijk getint.
En nu laat ik iets super-eenvoudig te doen zoals sommige wiskunde.
Dus printf, de som van% d is de placeholder voor een int.
En% d, periode, backslash-n.
>> Oke.
Dus dat is niet echt wiskunde.
Maar als ik wil de som van deze zeggen waarde plus deze waarde gelijk aan dit
andere waarde, hoeveel argumenten in totaal moet ik printf te geven,
uiteindelijk?
Dus vier, toch?
Deze string en dan de drie waarden.
Dus x is de eerste die ik wil zijn in eerst gestopt om de% d.
y gaat worden de volgende.
>> En nu heb ik soort van willen zeggen z, z maar bestaat niet.
Maar dat is geen big deal.
Want wat zou je instinctief doen, vooral als je had een
grafische rekenmachine, wat doe je typt?
Hoe zit het met x plus y?
Dus het is niet een echte variabele.
Het is gewoon de som van twee andere variabelen.
En dat is volkomen legitiem.
C begrijpt ongetwijfeld eenvoudig rekenkunde als deze.
>> Puntkomma, opslaan.
Laat me nu even naar beneden en Typ maken adder, Enter.
Geen fout, dus dat is vooruitgang ook.
Typ adder.
En nog een sneltoets, als je begint te vervelen
met alle commando's -
als je begint te typen een commando, zoals dot slash ad, en dat is waar uw
verveling kicks in, u kunt meestal raken Tabblad om de computer af de
rest van de zin voor u als het niet dubbelzinnig wat moet komen nadat ad.
>> Dus laat me nu ga je gang en u klikt op Enter.
Geef me een int, 1, 2, en gelukkig, het is 3.
Maar zoals altijd, testen van programma's niet verminderen
gewoon proberen het een keer.
Laat me proberen een hoek geval, zoals negatieve 1, geef me 1, en dat men
klopt ook.
En ik wil waarschijnlijk om wat meer te doen strenge tests, maar ik ben vrij
comfortabel met waar dat is op.
>> Nou, laten we nu eens proberen een ander programma dat deze tijd wordt een
beetje andere syntax.
Laat me een nieuw bestand te maken.
Ik zal dit conditions0.c bellen naar lijn up met enkele voorbeeldcode online.
En laat mij ga je gang en doe omvatten cs50.h, omvatten
stdio.h, in de belangrijkste leegte -
OK.
Daar gaan we.
Wij hebben onze standaard standaardtekst.
>> En deze keer ga ik printf zeggen, "Ik zou graag een int, alsjeblieft," gewoon om
maken de prompt een beetje vriendelijker.
En nu wil ik een krijgen int van de gebruiker.
Ik ga het n deze tijd noemen, net omdat n klinkt als nummer.
getint, en nu, wat doe Ik wil ermee doen?
Nou, als n - en ik zal in te zoomen -
Als n groter is dan 0, ik wil om het volgende te doen -
printf "Je pakte een positief getal." Anders, ik ga printf type "You
pakte een negatieve
nummer. 'Oke.
Dus dit programma, hoewel ik het deed snel, ziet er goed uit syntactisch.
Laat ik dit proberen.
Maak toestand 0.
Lijkt te lopen.
Staat 0, in te voeren.
Laten we het een int van 50.
Ik pakte een positief getal.
Laten we het nog eens proberen.
Staat 0.
Negatief 50.
Ik pakte een negatief getal.
>> Maar nu, laat me kiezen wat we houden bellen corner geval dat meer
een interessant geval dat u denkt zou kunnen geven u een aantal problemen, 0.
Nu, ik ben er vrij zeker van dat dit een van die hoek gevallen nul is
positief noch negatief, dus mijn programma, maar in syntactisch
corrigeren - het compileert, het loopt - is niet logisch correct.
Dus wat is de eenvoudige oplossing hier als ik wil op te sporen, als ik wil n verwerken
gelijk is aan 0 afzonderlijk?
>> Dus als n gelijk is aan 0, dan wil ik zeggen iets als printf "Je pakte 0."
Laat mij dit nu proberen.
Laat me hier terug, duidelijk mijn raam, en opnieuw compileren.
Hm.
Een fout genereren.
Maar ik wil je controleren Als n gelijk is aan 0.
>> Dus nogmaals, een ander dom ding wennen, gelijk-teken is
de opdracht operator.
Dus dit is eigenlijk fout doordat, technisch, hoewel de compiler
me beschermd tegen mezelf, we zouden technisch te kopiëren 0 in n, waarin
is niet wat ik wil.
Ik wil om te testen op gelijkheid met gelijken gelijken.
En zo dat nu zou kunnen zijn mijn betere oplossing.
>> Laat me dit eigenlijk opnieuw opslaan als, zeg, voorwaarden 1, om nieuwe en verbeterde.
Dus nu als ik hercompileren dit, het zou omstandigheden maken -
whoops - maak voorwaarden 1 dot slash voorwaarden 1, Enter, "Ik zou graag een int,
alsjeblieft. "Ik ga om te gaan vooruit en type 50.
Het is nog steeds goed.
Negatieve 50, nog steeds goed.
0, en het, inderdaad, gedetecteerd dat ik pakte 0.
>> Dus wat kan ik nu doen?
Nou ja, kunnen we zeker meer doen ingewikkelde dingen.
Maar wat ik zou willen voorstellen is dat we uiteindelijk op deze opmerking hier.
Als we trekken dit, zie je, misschien, een favoriete cartoon van jou
tot op vandaag je misschien nooit hebben begrepen.
En dat is over de kwaliteit van de lach je moet krijgen met CS grappen.
Dus dat is ongeveer gelijk.
>> Maar meer dwingend, ik dacht dat ik zou geef ons een beetje teaser voor maandag.
Dus we zijn begonnen met behulp van gehele getallen.
We hebben aangeduid praalwagens.
We hebben zelfs genoemd doubles, die, nogmaals, geef je nummers
na decimalen.
>> Maar het blijkt dat de praalwagens en dubbelen, en, echt, computers,
fundamenteel, kan niet uitdrukken sommige waarden precies.
We weten uit de wiskunde klassen die je kunt enig aantal cijfers achter de
decimale punt.
En je kunt zelfs een verticale balk gezet Zeg ik deze gaan voor altijd.
>> Helaas, je kunt niet echt dat doen op een computer.
En dus hoek gevallen voordoen.
Bijvoorbeeld, stel dat je bent iets te doen financieel.
Je doet de wiskunde met percentages, en
met dollars en centen.
En die centen niet noodzakelijkerwijs line-up.
Nou, het blijkt dat de fracties van centen kunnen beginnen te kloppen bij
gemodelleerd met een computersysteem zodanig dat slimme
mensen kunnen profiteren.
>> En degenen onder jullie die niet hebben gezien, ik zou als je een 30-tweede teaser van te geven
een prachtige film bekend als Office Space, die een beeld van een zal schilderen
probleem dat we zullen aanpakken eerste ding op maandag.
Als we het volume zou kunnen verhogen een beetje, ik geef je 30
seconden van Office Space.
>> [VIDEO AFSPELEN]
>> -Ik bedoel, je, je nog niet laten zien up en je krijgt om je baan te houden.
>> -Eigenlijk ben ik gepromoot.
>> -Ik kon een virus dat zou programmeren rip die plaats af big time.
>> -Nou, hoe werkt het?
>> -Elke keer als er een bank transactie waarvan de rente wordt berekend, en er
duizenden per dag, de computer eindigt up met deze fracties van een cent.
>> -Maar ik ben niet van plan om doen iets illegaals.
>> -Illegal?
Samir is America.
>> -We moeten zweer.
>> -Als niemand weet over dit maar ons, oke?
Geen familie, geen vriendinnen, niemand.
>> -Natuurlijk.
>> -Afgesproken.
>> -Maak je geen zorgen, man.
Ik zal niet iedereen ofwel vertellen.
>> [END VIDEO AFSPELEN]
>> DAVID Malan: Dus dit is dus CS50, dat was Office Space, en het zal allemaal
zinvol op maandag.
Zie je dan.
>> NARRATOR: Bij de volgende CS50, Rob aanpast aan het zijn van de
Harvard maaltijd plan.