>> [Muziek]
DAVID MALAN: Oké.
Dit is CS50, en dit het einde van week 2.
Het spijt me dat ik niet kon worden daar met u allen vandaag,
maar je bent in goede handen.
Sta mij toe om te introduceren CS50 eigen Rob Bowden.
ROB BOWDEN: En natuurlijk, dan we plezier maken van het feit
dat hij stuurde ons een verticale video en het tonen.
>> [VIDEO AFSPELEN]
>> [Muziek]
>> [VOETSPOREN]
>> -Deze Video niet moeten deze kant op te kijken.
Het zou kunnen worden voorkomen.
Zeg nee tegen verticale video's.
>> Verticaal video gebeuren wanneer u Houd uw camera op de verkeerde manier.
Uw video zal eindigen op zoek als onzin.
>> - [GRUNT]
>> -Er Zijn meer en meer mensen verslaafd het maken van verticale dagelijks video's.
Het is niet te kraken of niets, maar het is nog steeds erg slecht.
Er zijn twee verschillende soorten mensen die zijn getroffen met VVS.
De eerste groep behandelt de video's schieten ze als foto's.
Ze doen geen kwaad.
Ze begrijpen niet dat terwijl u een foto kan draaien,
je kunt niet echt weer een video.
>> [CRASH]
>> - [MONKEY SOUNDS]
>> -De Andere groep mensen die niet geven een [BLEEP].
>> Verticaal Video Syndroom is gevaarlijk.
Bewegende beelden hebben steeds horizontaal zijn.
Televisies zijn horizontaal.
Computerschermen zijn horizontaal.
People's ogen zijn horizontaal.
We zijn niet gebouwd om kijken verticaal video's.
>> -Ik Hou verticale video's.
>> -Nobody Om je geeft.
>> -Als Dit probleem er niets aan, je te
zal beginnen met vier video's in een keer gewoon om bandbreedte te besparen.
>> -Letterboxed Verticale video's zou zijn de grootte van een postzegel.
>> -En Het zal overal verspreid.
Movie schermen hebben steeds horizontaal zijn.
Als verticale video geworden geaccepteerde, bioscopen
zal lang en mager te zijn.
>> -En Alle bioscopen zou moeten krijgen afgebroken en herbouwd.
En tegen de tijd dat ze werden herbouwd, Mila Kunis zou oud en lelijk zijn.
>> -Birds Zal crashen in hen en sterven.
>> -We Krijgen allemaal stijf nekken uit te kijken.
>> -En Niemand zal zitten in de voorste rij nooit meer.
>> -George Lucas zal opnieuw vrijkomen Star Oorlogen again-- de magere editie.
>> -Ik Was nooit echt in staat om te vertellen het verhaal dat ik wilde vertellen.
Dit was een grote kans voor mij om experimenteren met een nieuwe technologie.
>> -Je bent een eikel.
>> -elke Keer dat een mobiel apparaat wordt gebruikt video opnemen, de verleiding is er.
Zeg gewoon neen.
Zeg nee tegen George Lucas.
Zeg nee tegen oude Mila Kunis.
Zeg nee tegen verticale video's.
>> -En Als je ziet dat iemand het doet, zeg, "Je bent niet schieten dat recht dummy!"
>> [Muziek]
>> [END AFSPELEN]
>> [Applaus]
>> [AUDIO OUT]
ROB BOWDEN: --simple vorm van cryptografie,
die in feite de encryptie en decryptie van geheime boodschappen.
Dus hier hebben we een zeer eenvoudige speelgoed.
Het idee is de buitenring roteert rond de binnenring.
En je kunt zien, misschien als ik te zoomen in, dat-- het is moeilijk te zien.
Maar, net als het aantal 1-- goed, dat verplaatst.
>> De nummer 1 toegewezen aan de letter X, nummer 2 kaarten naar de letter
J. ongelooflijk moeilijk niet vooruit te springen.
Brief 2 kaarten voor J. Nummer 3 kaarten naar D. So
met deze ring kan geven iemand een bericht 1, 2, 3.
Om een ​​of andere reden ze wilt vertellen XJD.
Maar je kunt ze geven enkele boodschap van nummers,
en zolang zij deze ring, zij kan decoderen wat je probeert te zeggen.
>> Dus je kan hebben gezien dit bijzonder voorbeeld van cryptografie
voor als rond de kerstdagen je hebt A Christmas Story bekeken.
Als je nog nooit hebt gezien het al eerder, dan gewoon
Schakel TBS bij letterlijk elk gewenst moment op kerstavond,
omdat ze laten zien dat het gewoon rijtjes om een ​​back to back om de hele dag terug.
En de relevante video is dit.
[VIDEO AFSPELEN]
-zij Het bekend om alles en iedereen dat Ralph Parker is hierbij
benoemd tot lid van de Kleine Orphan Annie Secret Circle
en heeft recht op alle eer en voordelen welke ontstaan.
Ondertekend Little Orphan Annie.
Medeondertekend Pierre Andre in inkt!
Eer en voordelen al op de leeftijd van negen!
>> [SCHREEUWT VAN RADIO]
-Kom op.
Laten we aan de slag gaan.
Ik geloof niet alles wat jazz nodig over smokkelaars en piraten.
-listen Morgenavond met de afsluitende avontuur
van de Zwarte piratenschip.
Nu is het tijd voor Geheime boodschap Annie's
voor u de leden van de Secret Circle.
Vergeet niet de kinderen, alleen voor leden van Annie's Secret Circle
kan geheime boodschap Annie's te decoderen.
Vergeet niet, Annie is afhankelijk van je.
Stel uw pinnen B2.
Hier is de boodschap.
12.
11.
2.
-Ik Ben in mijn eerste geheime vergadering.
>> -25.
14.
11.
18.
16.
>> Oh, Pierre is in grote stem vanavond.
Ik kon vertellen dat vanavond boodschap was heel belangrijk.
-3.
25.
Dat is een boodschap van Annie zichzelf.
Vergeet niet, niet iedereen vertellen.
>> -vijf Seconden later, ben ik in het enige kamer in het huis, waar een jongen van negen
privacy en decoderen kon zitten.
Aha!
B!
Ik ging naar de volgende.
E. Het eerste woord is "te zijn."
S. Het kwam nu gemakkelijker.
U. 25.
Dat is R.
-Kom Op, Ralphie!
Ik moet gaan!
-Ik Recht naar beneden zijn, Ma!
Gee whiz.
T. O. "Zorg ervoor dat u" - zorg ervoor dat wat?
Wat was Little Orphan Annie probeert te zeggen?
Zorg ervoor dat u wat?
>> -Randy Heeft om te gaan!
Wil je alsjeblieft naar buiten komen?
>> -Alle Rechts, mam!
Ik kom uit zijn!
Ik was dichterbij nu krijgt.
De spanning was verschrikkelijk.
Wat was het?
Het lot van de planeet kan hangen in de balans!
>> -Ralphie, Randy's moet gaan!
>> -Ik Rechts uit, voor schreeuwt luid!
Er bijna!
Mijn vingers vlogen.
Mijn geest was een stalen trap.
Elke porie getrild.
Het was bijna duidelijk!
Ja.
Zorg ervoor dat drink je Ovaltine.
Ovaltine?
Een mollig commerciële?
Klootzak.
>> [END AFSPELEN]
>> ROB BOWDEN: Dus dat is hoe Ovaltine betrekking op cryptografie.
Eigenlijk CS50 gewoon geadverteerd Ovaltine, dus we konden
zijn een crummy commercial voor Ovaltine.
Prima.
Dus nu werkelijke informatica.
Vergeet niet op maandag we gebleven duiken dieper in strings.
Dus waren we te maken met de string "Zamyla."
En we waren te herkennen het feit dat we kunnen behandelen
"Zamyla" als een reeks tekens.
En vergeet niet dat we geleerd de beugel notatie.
Dus als dit waren opgeslagen in een string "s", dan
Als wij zeiden s beugel 0, dat zou geven de letter hoofdletter Z.
En als we zeiden s beugel 1, dat zou een eerste kleine geven,
en zo verder tot en beugel 5, hetgeen de laatste een duiden.
>> Nu niet vergeten dat de lengte van deze string 6,
maar de indices in de string zijn 0 tot en met 5, Z door dat laatste een.
Dus dit past nu in een groter geheel van het geheugen van uw computer, uw RAM-geheugen.
Dus ergens het programma dat je draait je computer
moet onthouden Zamyla ergens in het geheugen.
Dus ik heb een vrijwilliger?
Ja graag.
En hoe heet jij?
>> DEAN: Dean.
>> ROB BOWDEN: Dean?
Leuk je te ontmoeten, Dean.
Dus kom hier, en we gaan heb je trekken
op onze mooie handige indeling van het geheugen.
Nu ik denk graag van het geheugen als een lange strook van de bytes,
maar alleen voor weergave doeleinden we zullen gewoon van links naar rechts, van boven naar beneden.
OK?
>> Dus ik ga naar een show program-- Getstrings.c.
En zo al dit programma is doet vraagt ​​vier snaren
van de gebruiker GetString en vervolgens afdrukken
wat dat eerste snaar ingevoerd was.
We negeren van twee tot en met vier.
OK.
Dus hier now-- wanneer Ik eerste verzoek s1.
Dus jij bent de computer.
En u bent uitvoering GetString.
Dus je moet een reeks van vragen mij, en ik zeg, OK, Dean.
Geven de string "Dean."
>> Dus ergens in geheugen moeten onthouden "Dean."
Dus schrijf het in het geheugen ergens.
Perfect.
OK.
Dus nu hebben we S2.
En s2 gaat worden een verzoek GetString.
Dus ik ga naar een string in te voeren.
Ik ga enter "Hannah."
Dus voer "Hannah" ergens in het geheugen.
Ja.
A-H.
>> OK, dus nu s3.
En het gaat naar de andere verzoeken GetString.
En nu voeren "Maria."
Prima.
En dan is er nog een laatste verzoek GetString, s4.
Dus, ik weet het niet.
Zullen we gaan met antidisestablishmentarianism.
Voeren zodat in het geheugen.
Ja.
Dus gewoon doen "Rob."
>> OK.
Dus nu explain-- waarom deed u deze ruimtes te verlaten?
Waarom heb je dit leeg ruimte hier, hier en hier?
Ja.
Dus merken wanneer ik ga afdrukken s1-- dus als we
had "Hannah" running recht naast "Dean,"
hoe weten we wanneer de string "Dean" eindigt?
Zo drukken de string s1 kan hebben gewoon gedrukt "DeanHannahMariaRob"
indien geen aanwijzing heeft wanneer "Dean" daadwerkelijk eindigt.
>> Prima.
Dus in het geheugen van de manier waarop we eigenlijk Daarom vertegenwoordigen van een string
is met backslash nul.
Zodat deze ruimte is precies wat we wilden.
Het moet een backslash nul.
Dit zal een backslash nul, en dit zal een backslash nul.
En u kunt een fantastische prijs hebben voor een perfecte vrijwilliger.
Neem een ​​stress-bal!
>> OK.
Dus dit karakter backslash nul hoe wij geven het einde van een koord.
Het is hoe bij een bepaald programma wil een string te drukken,
het is how-- herinner we geleerd de strlen functie van vorige week?
Tekenreekslengte?
Het is hoe touw lengte is in staat om bepalen hoe lang een string is.
Het houdt gewoon itereren over de personages
tot hij de Backslash nul karakter.
Dus het belangrijkste om te beseffen over het backslash nulteken
is het is vertegenwoordigd alle nullen in bits.
Zo merken dat dit is duidelijk van de nul karakter.
Dus de nul karakter, als je nog in het voorbeeld dat Hij eind
van de lezing waarin de personages in kaart to-- als hoofdletter A kaarten tot 65.
Kleine letters a kaarten tot 97.
Kleine letter b zou zijn 98.
Zodat het aantal 0 kaarten to-- ik niet weet uit de top van mijn hoofd.
44 of 45.
Ergens in die regio.
>> Zo het teken 0 is een feitelijke aantal.
Maar backslash nul kaarten voor alle nul bits.
Dus er is een onderscheid tussen backslash nul,
waarvan we de nul terminator noemen.
Er is een onderscheid tussen backslash nul en het karakter nul.
>> Prima.
Dus praten een beetje meer over snaren.
Dus dan zien we hier dit is hoe het zou in het geheugen worden vastgelegd.
Dus dit idee van snaren als een opeenvolging van characters-- zodat de officiële computer
sciency term voor volgorde is een array.
Dus zouden we een string noemen een array van karakters.
Er zijn eigenlijk andere data types die we arrays kunnen maken uit.
>> Dus om dit te motiveren, kijken naar een voorbeeld.
We zullen het ages0.c noem ik zal Kopieer en plak onze template.
OK.
Dus in dit programma wat we willen doen is pak je de leeftijd
van drie studenten in de cursus.
Dus we weten het int age-- en nu ga ik zeggen 0.
Dus wilt u misschien age1 zeggen, maar voor doeleinden die we zullen zeer binnenkort te zien,
Ik zeg int age0 gelijk getint.
Zodat dezelfde oproep om getInt dat we al met I
niet toevallig worden gevraagd zeggende: "geef mij de leeftijd."
Maar net daarom vraagt.
>> En age1 gelijk getint.
En int ouderdom2 gelijk getint.
Dus nogmaals, drie studenten, maar uiteindelijk de variabele indices
zijn age0 door middel ouderdom2.
OK.
Dus dit programma zal doen wat we willen met age0, age1 en ouderdom2,
maar dit programma uiteindelijk werkt voor drie studenten.
>> OK.
Dus wat nu als ik wil vier studenten?
Nou, ik ga te hebben om terug te gaan in mijn code, verander de commentaar,
en nu hebben we een int leeftijd 3 gelijk getint.
OK.
Dus wie het probleem ziet hier?
Wat is het probleem met dit soort setup?
Ja.
Dus we zijn het creëren van een variabele voor elke student.
Nu dat werkt, maar uiteindelijk wat als ik nu
zeggen: "Ik wil de leeftijd van pakken acht studenten of 16 studenten
of echter veel studenten van de honderden studenten in CS50
of de duizenden studenten op de campus of de miljarden mensen in de wereld?
Dus uiteindelijk is dit niet duurzaam.
Elke keer zie je jezelf kopiëren en plakken van de code als dit,
moet je over het algemeen het gevoel dat er een betere manier.
>> Dus dit is waar we introduceren een array verklaring.
Dus als je een array te verklaren, dit is wat de algemene formaat
gaat uitzien.
We gaan het type zeggen.
en dan gaan we Geef de naam van de array,
net zoals we elk variabele definiëren.
En dan tot slot maken we gebruik deze beugel notatie weer
maar in een andere context hoe we het gebruiken waren eerder.
>> Dus hier dit ziet eruit als een normale variabele verklaring dat we hebben gezien.
Dus we hebben int x puntkomma eerder gezien.
Nou nu kunnen we iets zien zoals int x beugels 5.
En het zetten van dit idee in de Getint programma dat we have--
dus we kunnen implementeren deze op dezelfde wijze.
>> Laten we zeggen dat in CS hebben we de neiging om te gebruiken n het aantal iets.
Dus hier gaan we slaan vier studenten.
En nu kunnen we int leeftijd zeggen beugel N-- niet helemaal krijgen yet--
om een ​​reeks van vier studenten verklaren.
Dus hoe dit eruit zal zien in geheugen ongeveer zo uitzien.
Wis dit.
En we gaan ergens in memory-- Ik zal dit er zetten.
>> Dus ergens in het geheugen.
Een twee drie vier.
We hebben vier integers in een rij voor deze serie van vier integers.
Dus, momenteel, wat de grootte van één van deze dozen?
Ja.
Het is vier bytes.
Het is 32 bits.
Dus nu is dat anders van de array die we
zag eerder, de reeks van tekens.
In een reeks werd elk vak slechts één byte, omdat een teken slechts één byte.
Maar met een array van integers, elk box moet vier bytes teneinde
om een ​​heel integer passen.
Dus dit is wat een array van vier ints eruit zou zien.
>> En dan terug naar code.
Nu willen we eigenlijk winkel getallen in die matrix.
Dus nu is dit een zeer, zeer, zeer gemeenschappelijk patroon dat zal op een bepaald punt
geworden spiergeheugen.
Zo int i gelijk is aan 0.
i minder dan n.
i plus plus.
Leeftijdsgroep i gelijk getint.
>> Dus deze lus, dit formaat, je moet erg wennen aan.
Dus dit is over het algemeen hoe we zullen itereren over bijna elke array.
Let nu op dit soort verklaart waarom vanaf het begin
We hoefden er niet voor lussen gaan voor int i is gelijk aan 1, i kleiner dan of gelijk aan 10.
De reden is dat uitgaande van nul maakt dit werk goed met arrays.
Dus arrays nul geïndexeerd.
Indien deze array is lengte 4, de indices zijn 0 tot en met 3.
>> Dus door de eerste iteratie van deze lus
We gaan worden het instellen van de leeftijd beugel 0 gelijk aan een oproep tot getint.
Dus wat ik toevallig het toetsenbord voor invoer.
In de tweede pas, we zijn instelling age1 gelijk aan getint.
Derde pas, ouderdom2.
Eindpass leeftijd 3.
Als in de eerste doorgang van de lus Ik voer het nummer 4 op het toetsenbord,
dan zullen we een 4 hier invoegen.
Indien op de tweede pas ik binnenkom 50, zullen we een 50 hier gezet.
Op de derde pas zou ik voeren negatieve 1, negatieve 1,
en dan uiteindelijk als ik binnenkom 0-- en Nu herinner me dat dit index drie.
>> Nadat we lus terug, i zal worden verhoogd tot 4.
i niet meer dan n, wat 4.
En breken we uit de lus.
Dus wat zou er mis met deze zijn?
[Onverstaanbaar]?
PUBLIEK: [onverstaanbaar]
>> Ja.
Dus de array slechts vier plaatsen, Dit betekent als indices 0 tot 3.
Dus als dit het geval was, zou ik te nemen over de waarde 4 op een bepaald punt.
leeftijdsgroep 4 zal instellen wat er ook gebeurt om hier te zijn
naar wat ik te zeggen heb, voer 6.
Dat zal deze instelling op 6.
>> Maar we weten niet wat hier.
Dit is niet het geheugen dat we hadden toegang tot.
Dus als je nog uit de vorige college,
Hij werd het afdrukken van de waarden van Zamyla en op een gegeven moment dat hij deze segmentatie hit
fout. Dus u zult waarschijnlijk zien veel segmentatie fouten zoals u
het uitvoeren van sommige van de problemen sets.
Maar dit is een van de manieren waarop kunt u een segmentatie tegenkomen
fout, wanneer je begint met de toegang geheugen op een manier die je niet zou moeten zijn.
Dus hebben we geen toegang hebben tot deze locatie en dit is een fout.
>> Dus dit is beter.
Nu is er nog een kleine probleem met deze code.
En dat is eigenlijk dat we nog steeds vast op vier studenten.
Nu als ik wil acht studenten te gebruiken, op OK.
Het is niet zo'n groot probleem.
Ik kan gaan in, verander de commentaar, en verander n.
Nu zal dit samen met acht studenten.
Als ik dit te compileren en uit te voeren Dit zal het mij-- tonen
zal vragen integers acht studenten en het zal gewoon werken.
Maar het is minder dan ideaal nodig hebben om recompile het programma elke keer
Ik wil het aantal studenten veranderen dat ik wil de eeuwen heen te voeren.
>> Zodat de uiteindelijke verbetering dit, zoals we zullen zien hier-- we
naar het aantal personen te vragen.
Hier hebben we een aantal van de mensen in de kamers
of een leeftijd van mensen in de kamer.
Maar we gaan het aantal aanvragen van de mensen in de kamer van de gebruiker.
Dus dit is exact dezelfde do-while lus die we eerder hebben gezien.
Het is precies hetzelfde do-while lus dat u
kunnen de aan het probleem set.
Zolang ze invoeren van een n kleiner is dan 1,
dus er moet worden op minstens één persoon in de kamer.
Zolang ze invoeren van een n kleiner is dan 1,
dan gaan we weer blijven vragen.
Vul het aantal van de mensen in de kamer.
Nu, als we eenmaal het aantal van de mensen in de kamer--
dus ik zou daar in te voeren dat zijn 200 mensen in deze kamer.
Dan hier beneden gaan we komen en verklaren een array van grootte van 200.
We verklaren array die is groot genoeg om 200 leeftijden te houden.
Naar beneden, het is de lus dat krijg je gewend aan.
Dus itereren dan deze array, waarbij aan iedere locatie
in de matrix een integer, en dan uiteindelijk hier zijn we
net een voorbeeld van iteratie over die reeks, niet om waarden toe te wijzen,
maar om waarden.
>> Dus hier zien we dat we zeggen, een jaar vanaf nu,
persoon% i zal zijn% i jaar oud, waar de eerste% i i plus 1.
Dus ik is deze index variabele.
En de tweede% i gaat het worden waarde in de leeftijd matrix plus 1.
Dus dit plus 1 is gewoon omdat we saying-- dit plus 1, leeftijden i plus 1.
Dit plus 1 is gewoon omdat we zeggen, een jaar vanaf nu de persoon
zal deze oude zijn.
>> Dus waarom is deze i plus 1?
Daarom hebben we een plus 1 is er?
Ja.
Dus onthoud arrays worden nul geïndexeerd.
Dus als we het afdrukken van dit uit voor iemand om alleen de output lezen,
dan waarschijnlijk willen ze iets zien als persoon een, persoon nummer één,
zal 20 jaar oud.
Persoon nummer twee zal zijn 15 jaar oud.
Ze liever niet zien persoon getal nul is 15 jaar oud.
>> Dus dit compileren en gewoon zien wat het ziet er like-- wat ruimte maken.
Maak leeftijden compileert.
Running leeftijden.
We zien het aantal mensen in de kamer.
Dus ik zal zeggen dat er drie mensen in de kamer.
Leeftijd van persoon nummer één, laten we zeggen 15, 20, 25.
En nu zal ik zeggen over een jaar Nu zullen ze 16, 21, 26.
Laten we zien dat dit werkt met een n die niet gelijk is aan 3.
Dus als ik zeg dat aantal mensen is 5, een, twee, drie, twee, over een jaar
zullen ze twee, drie, vier, drie, twee jaar oud.
Dus ik kon net zo gemakkelijk kunnen n 10.000.
Nu zal ik hier zitten voor een heel een tijdens het invoeren van leeftijden, maar dit werkt.
>> Dus nu in het geheugen ergens wij een matrix van grootte 10000,
dus uiteindelijk 40.000 bytes, omdat er
vier bytes voor elk van de gehele getallen.
Dus er is een scala aan size 10.000 waar we kunnen
opslaan van de leeftijden van die 10.000 mensen.
Prima.
Vragen over een van deze?
Ja.
Wat als u een negatief getal gaf?
Laten we afwachten wat er gebeurt.
Dus in dit specifieke case-- nummer van de mensen in de kamer, negatieve.
Het verwierp dat, omdat hier we toevallig
te hanteren dat als n minder dan één gaan we opnieuw te vragen.
Als u probeert een te verklaren reeks van negatieve grootte,
Het over het algemeen niet.
>> Dus laten we proberen.
Laten we negeren wat waarde die zij input voor n
en gewoon zeggen int leeftijden negatieve.
Laten we eens zien of het compileert zelfs.
Ik ben niet zeker.
Nee.
Dus leeftijden wordt verklaard als een array met een negatieve grootte.
Dus vooraf erkent een array kan niet zijn van negatieve grootte en verwerpt.
Nu, als we niet behandelen Dit doe-while lus correct
als we niet controleren Als n kleiner is dan 1--
laten we zeggen dat we net had dit niet helemaal
en in plaats daarvan hebben we net pak een integer.
Ongeacht wat die integer is, we verklaren een array van die grootte.
>> Zodat de compiler niet kan eventueel klagen nu.
Als ik compileren dit-- dus het kan niet klagen,
want het kan niet dat ik ben zal een negatief getal in te voeren,
die ongeldig zou kunnen zijn.
Voor al het weet, zou ik voer een positief getal,
die volkomen geldig.
Dus ik neem aan dat als ik binnenkom negatieve 1 mensen in de kamer, segmentation fault.
>> Dus ok.
Dus laten we voegen deze net terug houd het wat het oorspronkelijk was.
Dus zorg leeftijden.
Nu als ik wil proberen negatieve age-- dus laten
zeggen dat er vijf mensen in de kamer.
Leeftijd van persoon nummer één negatief 4, persoon drie
nul is, persoon three-- OK.
Dus hier, een jaar vanaf nu, persoon nummer Niemand zal negatief 3 jaar oud zijn.
Dus waarschijnlijk niet zinvol.
Maar dat is alleen maar omdat op zoek naar de code alles wat we doen
vraagt ​​getint.
>> Nu, als we hadden de GetPositiveInt functie
of we hadden gewoon gedaan soort van dezelfde while loop daar beneden,
dan zou dit werkt prima.
Maar in dit geval is, doen we het gewoon niet
toevallig hanteren negatieve waarden.
Andere vragen over arrays?
OK.
>> Dus we hebben nu gezien arrays.
En we gaan moet gebruiken Dit voor command-line argumenten.
Dus probleem ingesteld two-- Ik weet dat velen van jullie
misschien nog werken aan probleem set één, maar probleem set twee komt eraan.
In set twee probleem, je gaat moeten omgaan met strings, arrays,
en command-line argumenten.
>> Dus wat zijn command line argumenten?
Nu kunt u hier beneden een zien kleine teaser voor precies wat
gaat gebeuren.
We zien int main, inc argc, touwtje argv haakjes.
Dus laten we eerst proberen te interpreteren wat dat probeert te zeggen.
Nu goed.
>> Dus op de opdrachtregel moet je wennen aan een aantal van deze opdrachten
nu, en je hebt waarschijnlijk lopen cd in de terminal voor.
Dus als we zeggen cd pset1, weet je dat dat zou moeten
te veranderen in de pset1 directory.
>> Nu merken dat je nog nooit hebt schriftelijk een programma als dit eerder.
Elk programma dat je hebt geschreven, je zou lopen, laten we zeggen, dot slash Mario,
dot slash hebzuchtig, en dan is het zou u vragen om input.
Nu, dat is niet wat change directory doet.
Als je cd draaien, is het niet dan zeggen, welke map wil je cd in?
In plaats daarvan, je gewoon zeggen, cd pset1 en het gaat gewoon naar de pset1 directory.
>> Dus op dezelfde wijze hebben we andere voorbeelden.
maken hallo.
Wanneer je loopt te maken, is het niet dan zeggen, welk programma wilt u maken?
Je zegt gewoon, bij de command line maken hallo.
>> Move is een ander voorbeeld.
Deze ene we het verplaatsen van de mario.c bestand up één directory.
Dus nu weten we met dit voorbeeld We zijn echt voorbij twee argumenten.
Er is mario.c als het eerste argument, en dot dot is het tweede argument.
En dan wanneer je run te maken, u zie dat echt lang commando line--
dat echt lang commando gedrukt op de opdrachtregel.
Zodat deze lange command-- is slechts een korte deel van het,
maar nu hebben we drie command-line argumenten.
Dot dash nul, hallo, en hello.c.
>> Dus dit zijn command-line argumenten, argumenten
dat je bij het passeren van de command line zodat het
moet niet worden gevraagd wanneer u het programma uitvoert.
Het zou frustrerend zijn als bij je liep kletteren het zei, "OK,
die program-- die bestand bent u samenstellen?
Hello.c.
Wat vlaggen zou je willen gaan? dash o.
Wat wil je hebben het bestand te worden genoemd?
Hallo.
Nee, je moet gewoon lopen clang dash o hallo hello.c.
>> Dus kijken terug op deze.
Nu argc-- argc is het argument telt.
Het is het aantal command-line argumenten ingevoerd op de opdrachtregel.
Nou, argv-- technisch de v staat voor vector,
die in feite betekent array.
Maar je kunt negeren.
Argv-- we touwtje argv, dus touwtje argv haakjes.
Dit is dus een vorm van beugels je nog niet eerder gezien.
Dus we hebben gezien beugel notatie toen we hebben gezegd,
zoals, touw s gelijk Zamyla.
s beugel 0 toegang tot het teken Z.
>> We hebben ook gezien haken bij we zeiden int leeftijden beugel 5.
Dat verklaarde een array van grootte 5.
Dus hier is een versie van de haken we nog niet eerder gezien.
Dus dit soort string argv dat zou volledig op de hoogte zijn
dat het enkel een tekenreeks zijn.
Nu de haakjes geven dat dit een matrix.
Dus touwtje argv beugels middelen dat argv is een array van strings.
Nu technisch gezien een string een reeks karakters.
Dus dit is nu een matrix van een reeks karakters.
Maar het is veel makkelijker om na te denken over dit gewoon als een array van strings.
>> Dus waarom zou de beugels leeg?
Zoals, waarom kunnen we niet zeggen, beugel 5, beugel n?
Ja.
We weten niet hoeveel ingangen er zullen zijn.
Dus als we kijken naar de clang voorbeeld we zeggen kletteren dashboard o hallo hello.c.
In dit geval, er gebeurt zijn drie command-line argumenten.
En zo de brackets-- we zullen zien in een tweede het zou niet drie.
Het technisch zou vier.
Maar de beugels, zouden we zeggen, er drie.
Maar nu als we keken naar move mario.c dot dot, de beugels
we zouden willen twee op hen.
>> En er zijn een heleboel opdrachten die hebben een variabel aantal command line
argumenten.
Dus wat deze versie van de haakjesnotering geeft
is dat argv is een array van strings.
Maar we weten niet hoeveel strings in die array.
En hoe weten we dan hoe veel strings zijn in de array?
Dat is het hele punt argc.
argc vertelt ons hoe lang argv is.
>> Dus het laatste wat in te houden geest is dat, technisch gezien,
de opdracht zelf geldt als een van de command-line argumenten.
Dus cd pset1 er twee command-line argumenten.
Het programma op zich, cd, en vervolgens de werkelijke argument deel van het, pset1.
Elk programma dat je tot nu toe hebt geschreven is een command-line argument-- dot had
slash Mario.
Dat is de enige command-line argument.
>> Dus nu kijken naar Clang dash o hallo hello.c.
Dus wat is argc?
4.
Dus argc is 4.
Clang, dus argv beugel 0 is Clang.
argv beugel 1 is 0 dash.
argv beugel 2 is hallo, en argv beugel 3 is hello.c.
OK, dus vragen over dit, en dan zullen we kijken naar een aantal programmatische voorbeelden.
>> OK.
Dus we kijken naar hello3.c nemen.
Dus dit bekend uit zou moeten zijn een van de eerste c voorbeelden
we hadden waar we alleen maar zouden zeggen: hallo wereld, maar nu is dit meer algemeen.
We zijn dus even hallo zeggen % s backslash n argv beugel 1.
Notice-- dus tot op dit punt, dit is wat mijn template bestand leek.
Ik had int main (void), en dan zou ik iets in de belangrijkste functie te doen.
Nu in plaats, een keer beginnen we te maken met command-line argumenten,
moeten we een staat andere vorm van de belangrijkste.
>> Dus kijken naar hello3 opnieuw, de belangrijkste gaat
twee argumenten nemen now-- int argc, het aantal command-line argumenten,
en strijkorkest argv beugels, de eigenlijke snaren ingevoerd op de opdrachtregel.
Dus ik ga dat veranderen template dat feit weerspiegelen.
Nu wanneer u schrijft een programma, als je niet
behoefte aan een command-line te nemen argumenten, dan gewoon gebruik int main (void).
Maar nu wanneer je schrijft opdrachtregelargument programma's, die
je gaat doen voor het probleem set two-- dus nu dat je draait
programma's moet nemen command-line argumenten,
je nodig hebt belangrijkste van dit formulier te hebben.
>> Dus hier-- dit is het grote gebruik van de command-line argument.
Dus afdrukken argv 1.
OK dus laten we compileren en start dit programma.
Maak hello3.
Compileert.
Dot slash hello3.
En laten we zeggen, "Rob."
Hallo Rob.
Als ik zeg, "hallo Maria," hallo Maria.
Hallo Maria.
Hannah nog steeds zegt: "hello Maria, "want ik ben niet
iets met onze argv 2 doen.
Argv 2 nu zou zijn "Hannah."
Argc zou 3.
Wat als ik dit deed?
Dus hallo null.
>> Hij raakte kort op het feit dat, technisch gezien, GetString
null zou terugkeren, maar we zullen een krijgen veel meer in wat null eigenlijk is.
Maar neem het als een kwestie van dat er geen algemeen slecht.
Wij deden iets mis als het is afgedrukt "hallo null."
En de reden dat we deden iets mis is-- goed,
toen ik liep dot slash hello3, argc was 1.
Dus dat betekent de lengte van argv was 1.
Indien een array van lengte 1, de enige geldige index nul.
En dus even argv 1 is buiten het bereik van deze array.
Het was vergelijkbaar met vroeger toen ik probeerde opslaan 6 buiten het einde van de array.
Dus ik ben op zoek naar iets te openen buiten de argv telt,
en we krijgen nul.
>> Dus een betere versie van deze verbetering,
expliciet controleren argc.
Dus als argc gelijk aan 2, dat betekent dat we liepen zoiets dot slash hello3 Rob.
En het zal drukken "hallo Rob."
Als argc niet gelijk 2, dan is het gewoon
te negeren wat je bij de command-line argument
als command-line argumenten.
Of als u geen heeft gezet op alle, het is gewoon te negeren dat en gewoon zeggen,
"Hallo Jij."
>> Dus de samenstelling van dit.
Maak hello4.
And running hello4.
Loopt het op deze manier, wat moet worden afgedrukt?
"Hallo Jij."
Hallo Jij.
Hoe zit het met hello4 Rob?
"Hallo Rob."
En tot slot, hello Rob Maria is gewoon "hallo You" opnieuw,
omdat je niet echt in te voeren iets wat verwacht.
U hebt ingevoerd meer namen dan het zou kunnen verwerken,
dus het is alleen standaard op de hallo je gedrag.
Dus vragen over dit?
Of command-line argumenten?
>> OK, dus het nemen van een blik op een paar voorbeelden van het gebruik
command-line arguments-- eerst we hebben argv dash 1 punt c.
Dus de reacties weggeven wat dit programma zou moeten doen.
Maar let now-- deze lus, Dit komt overeen met de exacte patroon
Ik was eerder zei.
We toevallig te zijn gebruik argc plaats van n.
Nu argc is echt de n.
Het is de lengte van de argv array.
Dus worden itereren over de argv matrix-printf ing elk argv waarde.
>> Dus als ik dit.
Maak argv 1.
Het compileert.
Dot slash argv 1.
Alleen deze loopt, prints dot slash argv 1
want dat was de enige command-line argument-- de naam van het programma.
Er zullen altijd op least-- argc kan niet minder dan één zijn,
want er zal altijd ten minste zijn de naam van het programma uit te voeren.
Dus argv 1 Rob zal argv afdrukken 1 en dan op de nieuwe lijn "Rob."
>> Dus in de eerste iteratie van deze lus, i 0.
Argv 0 is de naam van het programma.
Dot slash argv 1.
En dan argv 1 is mijn eerste command-line argument, dat is Rob.
Op dit moment zijn we gelijk argc.
We breken van de lus en we zijn klaar.
Dus dit werkt voor een willekeurige aantal command-line argumenten.
Let drukt argv 0, argv 1, argv 2, argv 3, argv 4.
En er is geen argv 5.
argc gelijk aan 5.
Dus op argc-- bij i gelijk is aan 5, breken we uit de lus.
OK.
Dus vragen over dat voordat we kijken naar een meer complex voorbeeld?
>> Dus argv 2.
Prima.
Dus we zijn nog steeds afdrukken de command-line argumenten.
Maar nu merken we hebben een geneste lus.
Dus wat is dit?
Dus de eerste lus doet precies wat het voorheen deed.
We zijn nog steeds een lus boven elke command-line argument,
maar nu deze tweede loop-- we hebben Ook zoiets gezien.
Toen hij werd dan itereren Zamyla drukken Z-A-M-Y-L-A.
Dus dit tweede lus voor int j gelijk 0, n gelijk strlen van argv beugel i.
>> Dus laten we eerst nadenken the-- laten we lopen door.
Laten we bedenken wat de computer zou doen als ik liep dit programma alleen dot
slash argv dash 2.
Dus als ik liep deze code, dan argc gaat gelijk aan 1 zijn.
En strijkorkest argv-- er is slechts gaat naar een index in argv,
en dat gaat gelijk dot te zijn slash argv 2-- de naam van het programma.
>> OK, dus nu heb ik gelijk is aan 0, i minder dan 1, i plus plus voor int j gelijk is aan 0,
n gelijk strlen van argv beugel 0, dus in de eerste iteratie van deze lus. argv
beugel 0 is dot slash argv 2.
Dus wat is de lengte van die string?
Nou, dot slash A-R-G-V dash 2.
Dus strlen van die zullen worden 8.
Dus j gelijk is aan 0, n gelijk is aan 8.
Zolang j kleiner dan 8, j ++.
En met dat we gaan worden printen van een enkele karakter, dat
is argv beugel beugel i j.
>> Dus de enige i nul.
We hebben nog maar één command-line argument.
In dat eerste iteratie van de lus, we zijn
gaat om het afdrukken zijn argv beugel beugel 0 0.
En dan j gaat verhogen.
En we gaan printen argv beugel 0 beugel 1.
En dan argv beugel 0 beugel 2.
>> Dus dit is onze eerste ontmoeting multi-dimensionale arrays.
Eerder herinner me dat ik zei dat argv technisch
een array van reeksen karakters.
Dus hier als ik zei iets als touwtje s gelijk argv beugel i,
en toen zei ik, s beugel j, dit zou volbrengen hetzelfde.
Nu, je hebt beugel j eerder gezien s.
Dat is gewoon toegang tot de j- karakter van deze string.
Dus met dit, krijgen we de j-de aard van de i-de argv.
>> Dus wat moet dit uiteindelijk output?
Maak argv 2.
Het compileert.
Dot slash argv 2.
"Rob Maria Hannah," en geef ons wat ruimte.
Zo zien we dat dit uitvoeren punt op zijn eigen lijn en slash
op zijn eigen lijn en een op zijn eigen lijn.
Het afdrukken van elk eigenheid
van elke command-line argument.
Dan daartussen als gevolg van deze nieuwe lijn
We zijn hier beneden te drukken, in tussen hen is een nieuwe lijn zal worden afgedrukt.
>> Dus dit is vergelijkbaar voorafgaande argv dash 1,
waarbij elke afgedrukte command-line argument,
maar nu zijn we printen de command-line argumenten
en dan itereren door elke karakter van elk opdrachtregelargument
om deze uitgang te krijgen.
OK?
Dus vragen over dit?
>> Een ding om op te merken is dat command-line arguments--
zodat ze worden gescheiden door spaties als zou je natuurlijk verwachten dat ze zijn.
Dus een string kan ruimtes in het hebben.
Het is niet super belangrijk, maar als ik wilde de derde opdrachtregelargument
om een ​​ruimte in hebben, dan ben ik zou zoiets zeggen.
OK?
Dus dit nu nog slechts drie command-line arguments-- goed 4.
Dot slash argv dash 2, Rob, Maria en Hannah Bloomberg.
OK.
Vragen over dit?
>> Er is niets bijzonders over de spatie.
Het gebeurt gewoon te zijn dat de command-line behandelt de spatie
hoe je scheiden elk argument.
Prima.
Dus dan Probleem set two-- je gaat worden
op zoek naar geheime sleutel cryptografie.
Dus, vergelijkbaar met voorbeeld we zagen van A Christmas Story,
je gaat implementeren sommige algoritmen die, gegeven een bericht,
je gaat om te kunnen deze boodschap versleutelen
dat alleen iemand met dat geheim key, met die decoder ring,
zou kunnen ontsleutelen.
>> Dus dat is de standaard editie.
Je gaat implementeren twee verschillende uitvoeringen.
Als je toevallig een kijkje te nemen bij de hacker edition-- nu,
we gaan geven je een string als dit,
wat neerkomt op een versleuteld wachtwoord.
Dus je doel is om erachter te komen Wat de gedecodeerde wachtwoord.
Nu is dit eigenlijk hoe wachtwoorden worden in veel computers,
en het slaat alleen deze willekeurige tekenreeks.
Je moet uitzoeken hoe je uit deze willekeurige tekenreeks
wat de oorspronkelijke wachtwoord was.
>> Tenslotte, daarna probleem set, moet u
in staat zijn om te begrijpen wat dit betekent.
Zo leert u hoe te ontcijferen dit soort willekeurige tekenreeks.
Ook als je nog van week 0, zou u deze URL hebt gezien.
En je moet in staat zijn om decoderen dit uiteindelijk.
Je zou niet blij zijn als u decoderen en klik op de link.
Prima.
Dat is het voor vandaag.
Zo zie je volgende week!
>> [Elektronische muziek]