>> [Muziek]
>> ANDI Peng: Dit is CS50, en welkom op week twee van de sectie.
Dit is eigenlijk tijdens week twee van onze class-- eigenlijk,
de eerste week hebben we deel gehad.
Handopsteken, hoeveel van jullie allemaal kwam super sectie van vorige week?
OK, dat is OK.
Dat is goed.
Hoeveel van jullie bekeken super sectie van vorige week?
OK.
En jullie deden het goed Op probleem set één?
Dus ik ga om het te nemen dat we een heleboel echt intelligente kinderen
in deze klasse en de dingen zullen wel goed.
OK.
Dus first--
>> Ten eerste, we gewoon te kort gaan over de agenda voor vandaag.
We praten natuurlijk logistiek.
Veel van jullie waarschijnlijk hebben vragen over
hoe de dingen lopen in deze cursus.
We zullen ze te beantwoorden.
We gaan in het kort gaan over lussen in het geval
elk van jullie gemist super sectie.
We praten over ASCII-mapping.
We praten over arrays, functies command line argumenten.
En tot slot, wat jullie waarschijnlijk allemaal echt willen om hier te zijn om te leren over,
is uw pset2.
We zullen een aantal leuke trucs hebben en tips voor hoe dat te doen.
>> OK.
Ook tweede we veel snoep hier.
Iedereen die houdt van snoep, kom gewoon hier boven.
Pak wat.
Ik heb een bos.
We hebben een ton in het kantoor.
Ik wil eigenlijk niet om snoep te eten de hele dag.
Jullie moeten alle snoep eten, want ik bracht het hier voor jullie.
Gewoon eten snoep.
Er zal snoep zijn elke sectie.
>> Dus eerst, wie ben ik?
Mijn naam is Andi Peng.
Ik ben het hoofd van TA CS50 hier bij Yale.
En naast dat zal ik ook be--
als iemand uw lopende zou like-- maatje, je schouder om op te huilen.
Als de avond voor als gevolg van uw PSET, je hebt geen idee wat er gaande is,
geef me iets.
We zullen samen medelijden, et cetera.
Weet alleen dat ik hier ben als een bron voor u als de frontlinie
in het helpen van jullie uitzoeken hoe problemen in CS50 en daarbuiten lossen.
>> Mijn e-mail is andi.peng@yale.edu.
Ik zal ook het verzenden van een individu e-mail met mijn telefoonnummer erin
zodat niet iedereen op de internet kunnen mijn telefoonnummer zien.
Voel je vrij om mij te bellen op elk moment.
Serieus, mijn telefoon is meestal verbonden aan mijn hand.
Ik kan niet reageren binnen een paar minuten.
Ik kan niet binnen een paar uur te reageren.
Maar ik kan je verzekeren, als je e-mail me, als je me bellen,
tekst me, ik zal reageren binnen 24 uur.
Vaak, zal ik reageren vóór dat, omdat ik begrijp
dat iedereen heeft wat problemen, en u wilt dat uw antwoorden
zeer snel worden beantwoord.
>> Echter, als je belt me 30 minuten voor
dat stuk dat is te wijten donderdag nacht-- zijn als, Andi, help me,
Ik heb niet started-- ik kan geven je die schouder om op te huilen.
Maar is het misschien tijd om na te denken over zijn hoe je dat niet doen de volgende keer.
OK.
Oeps.
Hoe kan ik teruggaan?
Daar gaan we.
>> Dus in deze cursus hebben we een ton van ondersteuning voor iedereen.
Naast gewoon secties hier, die u
Elke week krijgen om te besteden 90 prachtige minuten met mij,
we hebben ook kantooruren.
Hoeveel van jullie hebben al tot kantooruren geweest voor hulp?
Grote.
Dat is echt goed om te zien, omdat we heeft een staf van meer dan 45 TA en CA
opgeleid voor deze cursus die hier voor het helpen jullie met je psets.
>> Maandag ze gehouden in de TEAL klaslokaal in 17 Hill House hier
aan de Yale.
Dinsdag en donderdag, ze gehouden in commons.
8:00-11:00 vrijwel elke weekdag.
Kom binnen, kom naar buiten.
Elk probleem, geen probleem-- net kom binnen,
en dan zullen we u helpen met dat.
>> Ten tweede, naast kantooruren en afdelingen, hebben we ook een korte broek.
Heeft iemand ooit gezien een paar van de korte broek of walkthroughs in de video's
op de website?
OK.
Dus ze zijn echt, echt behulpzaam.
Onze mooie Harvard productie team over daar op die school
het noorden, hebben ze gefilmd en geproduceerd deze ongelooflijke walkthrough video's.
>> Ze nemen u stap voor stap door hoe om te gaan over het oplossen van een probleem.
Vaak, als je in de war bent over een eenvoudig concept, een unieke concept,
een kijkje nemen, want we hebben waarschijnlijk een korte op het ergens op onze website.
En het is meestal een geweldige bron om te zoeken wanneer u voor het eerst bent
verloren over hoe een probleem aan te pakken.
>> Ten derde, hebben wij ook study50 en reference50.
Dus bestuderen 50 van de website is slechts een link.
Het is, denk ik, study.cs50.net of zoiets.
Google het net.
We hebben veel dia's voorbereid.
We hebben veel korte broek en walkthroughs-- dingen alle gecompileerd
erg mooi en netjes voor jullie allemaal om door te bladeren, zie geen concepten
dat je verward over.
Het zou waarschijnlijk worden gedekt daar in study50.
>> Reference50-- vergelijkbaar.
We hebben een heleboel verschillende noten direct beschikbaar voor uw beschikking.
En tot slot, we hebben wat riep CS50 Bespreek,
een forum waarin, als de avond tevoren je doet uw problemen, laten we zeggen,
heb je een vraag.
Log in om CS50 bespreken.
Stel uw vraag.
En vervolgens een van de hundreds-- misschien, thousands-- peers
het nemen van deze klasse zal online aanmelden.
En misschien iemand kan krijgen uw antwoord voordat een TA kan.
Het is in wezen slechts een online forum dat we kunnen allemaal
gebruiken om onze problemen te bespreken.
Dat is cool.
>> OK.
Dus probleem stelt.
We staan ​​op het punt in het dikke probleem set twee.
Veel van ons hebben al worstelde door middel van een probleem stellen.
We weten al dat misschien te wachten voor de laatste nacht om uw PSET doen
is niet de slimste wat je moet doen in CS50.
>> Tips en tips voor wezen succes worden gelezen het hele spec.
Hoeveel van jullie hebben al lees de spec voor PSET 2?
OK.
Dat is een stevige hoeveelheid.
Ik weet dat jullie waarschijnlijk erkend nu de specs zijn echt lang.
Ze zijn echt, echt lang.
>> Het is echt moeilijk om elke regel te lezen van die zorgvuldig woord voor woord.
Je wilt gewoon romen naar waar het vertelt je om iets te doen.
Ik kan u verzekeren, dat niet doen.
Als je dat doet, ben je waarschijnlijk ga ergens missen
waar het je vertelt hoe een probleem te beginnen
of het vertelt je wat je moet naam uw probleem of het u vertelt,
Dit is waarschijnlijk de beste manier om te beginnen met het doen van uw probleem.
En dan zul je verloren.
>> Wanneer u probeert te lezen uw spec halverwege,
veel van de belangrijke information-- in dat je niet
zal in staat zijn om echt toegang.
Dus lees het hele spec.
Probeer om het hele spec lezen voordat je naar sectie,
omdat dan, als we praten over de PSET,
we allemaal kunnen een idee van wat er gaande is.
>> Ten tweede is een concept dat ik graag verwijzen
veel in de loop semester.
Maar in wezen, ontmoet ons halverwege, toch?
Mij, als uw TA en Jason als natuurlijk manager en Scaz als je docent
en David als uw professor en alle de andere mooie TA in deze cursus,
assistenten in deze course-- we zullen ons best doen
om ervoor te zorgen dat u zijn ingesteld up om te slagen in deze cursus.
Wij zullen houden sectie.
We zullen spreekuren houden.
Wij zullen uw telefoon te beantwoorden oproepen beantwoorden uw e-mails,
alles doen wat we kunnen om te maken ervoor dat uw vragen worden beantwoord.
>> Echter, helpen ons ook.
Ontmoet ons halverwege.
Als je naar de kantooruren niet gegaan sectie, niet
gezien de lezingen, die geen idee wat er aan de hand, net als, help me.
Ik ga zijn als, nou, het spijt me.
Is het misschien tijd om te lenen zijn die schouder om op te huilen,
want ik ben niet zeker wat ik kan doen om je te helpen
als je niet proberen om minstens hulp jezelf een beetje in het begin.
Ontmoet ons halverwege.
Je weet wel, kom bereid zijn om te beantwoorden en krijgen
klaar om deel te nemen in het materiaal.
Het maakt de dingen zoveel makkelijker voor iedereen die betrokken is.
Ja, dat is vrij veel.
>> Indeling.
Dus op de syllabus, het is vrij diepgaande over hoe we leerjaar.
Maar in wezen, de afbraak in dit is 50% van je cijfer
zullen de psets, die is mooi, want dat is
waar je de besteding van de overgrote meerderheid van uw natuurlijk tijd aan.
Ondervraagt ​​40%, en de laatste project zal 10% bedragen.
Er zullen twee quizzen hele de loop van het semester.
Ik denk dat de tijden en data zijn ook vermeld op de syllabus.
>> De manier waarop we zullen worden de indeling van uw psets
is dat we in wezen vier waarden die we toekennen aan elke rang.
We hebben een waarde van scope, correctheid, design en stijl.
Dus zoals je ziet, dat is een soort van onze formule voor de berekening psets.
Drie geven we de meest gewicht juistheid,
want natuurlijk je coach moeten testen op de zaken
dat we willen dat het testen.
>> Jullie hebben allemaal check50 tot uw beschikking.
Het is een zeer nuttige functie dat jullie allemaal kunnen
upload uw code om onze servers, waar we het voor u controleren.
En je hebt gezien die frowny gezichten, smiley gezichten.
Ze zijn echt, echt behulpzaam.
Aarzel dan niet de student die probeert graag
om hardcode in alle antwoorden op hen.
Ik heb zeker gezien een PSET waarbij iemand zag alle waarden van check50
en ze gewoon hard gecodeerd in-- als dit nummer, print dit nummer.
Als dat aantal, uit te printen dat nummer.
Doe dat niet.
>> Hoewel technisch check50 is correct,
uw manier van het oplossen van de probleem is niet correct.
Dus gewoon gebruik check50 spaarzaam.
Maar er ook voor zorgen dat u begrijpen hoe het functioneert,
het programma functioneert in aanvulling op check50,
omdat we niet elke kunnen testen mogelijk geval van check50.
We zullen het testen van een aantal van hen.
>> Ontwerp is in wezen, hoe goed ontworpen is uw code?
Als u copy-plakken multiple regels code vele malen.
Misschien heb je niet helemaal hebben het beste ontwerp in de code.
Misschien is het tijd om die lus toe te voegen.
In wezen, hier is het gewoon allemaal over het proberen om uw code te doen,
proberen om de code zo efficiënt schrijven mogelijk, zodat uw programma loopt
zo snel mogelijk.
>> Tot slot hebben we de stijl.
Dus stijl is een soort van een willekeurige, subjectieve term.
Ik weet dat we officieel hebben een stijl 50 gids voor CS50,
waar het vertelt je, oh, je moet een ruimte hier.
Je moet soort van formaat uw code op deze manier.
Je moet de dingen te noemen op deze manier.
>> Ik heb niet echt schelen, per se, hoe u ervoor kiest om uw code stijl,
net zo lang als je consequent blijven.
Bijvoorbeeld, als je wilt laat een ruimte na vier
voordat je vier loop, gewoon doen dat elke keer.
Niet soort doen.
Geen andere keer niet.
Als je graag krullend houden braces ruimte op een bepaalde manier,
gewoon altijd doen het op die manier.
Niet soort ergens doen hier en ergens niet.
Als we de indeling, het is echt moeilijk
als ik heb geen idee hoe je bent het formatteren van uw code,
dingen zijn gekke en misplaatst.
Als je gewoon consistent te houden, het is veel gemakkelijker voor mij als de grotere
in staat zijn om de code te lezen.
Het is veel gemakkelijker voor u als student om te kunnen kijken via uw code
en zien wat er mis is met Het slash waarom er problemen.
Stijl is een van de makkelijkste dingen jullie kunnen doen om de volledige scores te krijgen.
In wezen, als je gewoon schelen, als betaal je vijf minuten van de aandacht
uw code elke week, moet u krijgen volledige stijl punten.
>> Ten slotte, hebben wij wat heet de multiplier van de scope.
Scope-- Ik weet dat het een grote woord, vooral in deze klasse.
Maar scope, alles dat middelen is dat je probeert
de psets om het beste van uw vermogen.
Als u zich in drie van vier problemen
en zelfs niet proberen de laatste, ben je waarschijnlijk
ga een aantal punten te verliezen op scope.
>> Zelfs als je gewoon het probleem te starten, doe je best om er doorheen lopen.
Zelfs als het niet werkt, zet hem in, want dat laat zien en toont
voor ons dat je probeert, dat de set probleem geprobeerd
om het beste van uw vermogen.
En dan kunnen wij u volle punten voor scope.
>> Scope is ook erg belangrijk voor als we praten over de laagste PSET score neerzetten.
Dus in de loop van de semester, jullie hebben negen psets.
En we zullen daadwerkelijk te laten vallen de laagste score uit die negen,
maar alleen als je volledige reikwijdte punten.
>> Dus als je draaien in een onvolledige PSET, Helaas kunnen we niet die ene druppel,
omdat uw scope punten werden niet afgerond.
Dus zelfs als je de vreselijke week waar je sterft en je ziek bent
of je hond sterft, je kat sterft, en je bent overladen met huiswerk,
gewoon proberen de PSET.
Doen om het beste van uw vermogen.
Als het niet werkt, het maakt niet uit.
Zet hem gewoon in.
Kunnen we tenminste geven je punten voor de moeite.
>> A voor inspanning in deze klasse.
Tenminste laagste score neerzetten voor inspanning.
Dus ja.
Dat is vrij veel.
Heeft iemand vragen hebben, zodat ver over hoe we de rang in de klas?
Of een van deze?
Elk van deze zo far-- secties, kantooruren?
Cool.
OK.
>> Dus dit is een onderwerp dat er geen men houdt echt om over te praten.
Ik hou er niet echt over praten.
Jullie willen niet echt om mij te horen over praten.
Maar helaas, we hebben allemaal hebben om erover te praten.
David bracht 20 minuten een lezing over te praten.
En dat is het onderwerp academische eerlijkheid.
>> Dus we hier allemaal hebben waarschijnlijk geschreven een essay ergens in onze Yale carrière.
We hebben waarschijnlijk gekregen een gesprek waarin we hebben verteld om niet plagiaat onze essay,
want dat werk is niet van ons.
In de informatica, hebben we dezelfde soort concept.
Alle werkzaamheden die u indient, alle code die je schrijft
moet de code die u hebt geschreven zijn.
Moet code die je hebt niet gekopieerd van ergens anders.
Moet code niet zo zijn dat heb je googled en plofte in
en je weet niet echt of het werkt.
Je hebt een soort van een gevoel van wat het doet, maar niet echt.
Bij twijfel, wezen, het is gewoon redelijk.
Op onze syllabus hebben we een hele lijst van dingen
zien wij als een redelijke versus niet redelijk.
>> Bijvoorbeeld, redelijke is jou en je vriend
bespreken wat de beste manier om te gaan over logisch oplossen van een probleem.
Dat is redelijk.
Wat zou niet redelijk zijn, is als je jongens kwamen bij elkaar, getypt dezelfde code,
en draaide in dezelfde code.
Dat is niet redelijk.
Hetzelfde, een soort van een essay.
Als u wilt bespreken met je vriend, hey,
dit is wat ik wil schrijven.
Dit zijn de stappen die ik wil nemen om erover te schrijven, geweldig.
Dat is geweldig.
Gelieve met elkaar samenwerken.
Als jullie beginnen het schrijven van het zelfde ding,
draaien in hetzelfde essay, dat is minder OK.
Dus wanneer je twijfelt, gewoon niet doen.
>> Hier hebben we in CS50, hebben we scripts die lopen te automatiseren om te testen
niet alleen de juistheid van de code, maar ook het unieke karakter van uw code.
Dus gelieve niet zetten ons in de positie van het hebben van uw zaak te verwijzen naar ExComm.
Neem gewoon voor iedereen, laten we gewoon maken dit een geweldige ervaring.
Iedereen leert beter, we allemaal gelukkiger,
en we zijn allemaal opgezet om slagen in deze cursus.
Iets dat is heel Uniek aan deze klasse
dat ik denk dat iedereen moet echt aandacht te besteden aan is dat we
wat de spijt heet clausule in onze syllabus.
Dus in wezen, binnen 72 uur, als je denkt dat je iets hebt gedaan
je bent niet echt zeker was geval, dan kunt u bij ons terecht.
Wij beloven u dat binnen 72 uur zullen we de zaak zelf te behandelen
zonder naar een hogere autoriteit in de administratie.
>> Dus als je bij mij komen en zeggen: Andi, hey, ik ben echt jammer,
maar ik denk dat er een paar lijnen in mijn code gisteravond dat ik soort van googled,
stapte uit van Stack Overloop, kopiëren en plakken,
en ik ben echt, echt spijt over, laat het me weten.
Gelieve niet gewoon laten etteren en maar hopen dat ik vangen.
We zullen het op te vangen.
Kom gewoon naar me.
Laat het me weten binnen 72 uur.
We zullen uitzoeken een oplossing.
En we beloven dat we niet zullen verwijzen naar universitaire autoriteiten wezen.
Dus het is in uw belang om gewoon eerlijk met iedereen
die betrokken zijn bij de cursus.
>> OK.
OK.
Dus nu snel voor Ik ga verder, doet iedereen
hebben vragen over logistiek hoe cursussen we gaan lopen,
hoe secties gaan te lopen, een van die?
OK.
Ja.
>> PUBLIEK: [onverstaanbaar]?
ANDI PENG: Ja.
Dus quizzes-- hoeveel van jullie zijn in de sectie maandag / woensdag?
Hoeveel van jullie zijn in de dinsdag / donderdag?
OK, dus het is een solide split hier.
Dus de manier waarop we lopen het op Yale is dat we
zullen twee afzonderlijke hebben quizzes-- één voor elk section-- dat
zullen worden genomen tijdens de les.
Ik denk dat het oktober, eind oktober, zoiets als een week
van de quiz.
Ja, dus kom gewoon naar de klas.
Op die maandag of woensdag, je de quiz te nemen.
Op die dinsdag of donderdag, je zult een andere quiz.
Maar hetzelfde materiaal bedekt.
Ja.
Goede vraag.
Ja.
>> Publiek: Waar doen we ga naar onze kwaliteiten te controleren?
>> ANDI PENG: Ja.
Dus ik zal het verzenden van een e-mail, ongeacht elke week
wanneer quizzen zijn graded-- of, sorry, wanneer psets worden gesorteerd.
Psets zijn meestal gedraaid in de middag of vrijdag.
Dus ik beloof dat ik zal proberen om ze terug te krijgen om u
door de middag van de volgende vrijdag.
>> Wanneer ik een graad PSET, zal ik stuur een melding op de rang boek
dat vertelt je je score kan online worden bekeken.
Zo goed deze week, nadat ik afwerking indeling psets van vorige week,
jullie zullen een e-mail te krijgen kennisgeving zeg je,
hey dit is waar je ga naar je cijfers te bekijken.
En je kunt elke zien overzicht van uw kwaliteiten.
Kun je de opmerkingen zien.
Oh, snelle ding ook.
De commentaar sectie in de grote boek is waar ik zal waarschijnlijk
spenderen het grootste deel van mijn tijd sorteren.
Dus een ding dat is echt belangrijk wanneer
jullie bekijkt je cijfers op uw psets
niet alleen kijkt op de fysieke score
maar ook de tijd nemen om echt mijn opmerkingen gelezen.
>> Vaak dat geeft je feedback over hoe je een probleem hebt oplossen.
Als u hoeft te doen iets een beetje beter,
opbouwende kritiek is meestal beste gegeven in die sectie opmerkingen.
Dus alsjeblieft, alsjeblieft, ga ik om tijd te besteden aan het schrijven opmerkingen.
Alsjeblieft, ik zou echt waarderen als jullie deze opmerkingen zou lezen.
OK.
Cool.
>> Prima.
Dus gaan we om te beginnen met praten en gewoon snel herzien
deel van het materiaal van week nul net zo zijn we
op de juiste pagina voor beginnen de problemen van deze week.
Dus de while lus is een van de drie lussen
we eerder in deze klasse besproken.
>> Een tijdje loop wezen is geschreven in de syntaxis
waarbij, terwijl een bepaalde voorwaarde, doe dit herhaaldelijk, toch?
Denk aan het in deze grafische hier.
Je gaat om te beginnen op een bepaald punt in de code.
Je gaat naar de lus voorwaarde in te voeren if-- ik niet weten-- x minder dan één.
>> Als dat waar is, je gaat het luslichaam te voeren.
En je gaat blijven doen die opnieuw, opnieuw, opnieuw,
over en over-- dat is waarom het is een loop-- totdat je conditie wordt
vals.
Dus op deze manier, een tijdje lus is een van de eenvoudigere manieren
om elke vorm van de aandoening schrijven dat moet over en over en over herhalen.
Wees voorzichtig wanneer je schrijft een soort van lus
dat u een uitgang voorwaarde evenals een update voor wat het
is zodat uw lus doet niet alleen lopen over en oneindig.
In ieder geval, je gaat te willen ervoor zorgen
dat je een bepaald aspect van je veranderende code of aan het einde van de lus
gewoon om ervoor te zorgen dat u een manier om vooruitgang te boeken in de richting van de aandoening
die u wilt ontmoeten om eind.
Heeft dat zin om iedereen?
We gewoon niet willen zijn gevangen in deze spiraal, waar
We gaan rond en rond en er is geen manier om de lus te breken.
En elke lus in wezen heeft een manier om dat te doen.
OK.
>> Ten tweede, velen van jullie in uw Mario psets
Waarschijnlijk moest in dienst Dit soort lus.
Het heet een do while lus.
Allereerst, kan iemand mij vertellen wat het verschil tussen een do
terwijl de lus en een tijdje lus?
Ja.
>> Publiek do while lus loopt in eerste instantie [onverstaanbaar].
>> ANDI Peng: Ja, precies.
Dus een do while lus altijd doet wat is binnen de doe, binnen de beugels
daar en doet die voorwaarde voor het controleren van the-- sorry,
doet die code voor het controleren van de conditie.
Dit is vooral relevant voor ons hier in deze klasse, omdat de meeste tijden
gaan we willen vragen de gebruiker een soort van invoer.
En dan, afhankelijk de input die ze ons geven,
dan kunnen we evalueren, oh, doe we moeten ze opnieuw vragen?
>> Dus in Mario, als de gebruiker je gaf een negatieve hoogte, bijvoorbeeld,
je gaat naar de eerste prompt en doen wat er in zit.
Dan zul je tijdens het controleren.
Je weet wel, is negatief 1, is dat een positief getal?
Als het niet, ik ga om te gaan terug en herhaal de do en herhaal
en herhalen en herhalen totdat ze eindelijk geven u een nummer dat u wilt,
dat we allemaal kunnen gebruiken in onze code.
Het is vrij belangrijk voor wezen elk gebruikersinvoer.
Ik kan u garanderen tijd in een PSET, waar
vragen wij u om input een soort van code, we zijn
waarschijnlijk gaan om u een testcase waarin we
zal je iets ergs te geven dat ga proberen om de code te breken.
>> Als we proberen om u te vragen om input van een integer, kunnen we geven je gewoon een string
en zie hoe je zou omgaan met dat.
Als we vragen jullie om een ​​leeftijd in dienst, We kunnen u een negatief getal te geven
om te zien hoe je zou omgaan met dat.
Maar zorg ervoor dat jullie testen voor gevallen waarin je niet het beste
input, laten we maar zeggen.
En een do while lus is vaak de beste
manier om uw code zo te ontwerpen dat het voldoet aan die ruimte.
OK.
>> OK.
Dus dit is waarschijnlijk de meest complexe loop van de drie
dat we hebben gekeken naar nu toe.
En het lijkt heel eng op het eerste.
Maar ik garandeer je, als je eenmaal jongens de knie krijgen van hoe je gebruik maken van een lus,
het is een van de meest nuttige dingen, meest handige tools in je arsenaal
voor verdere vooruitgang in deze klasse.
>> Dus bijvoorbeeld in Scratch, we hadden dit heel eenvoudig blok
dat net gezegd herhaal deze bepaalde zinnen bepaald aantal keren.
By the way, SAJ-- dat is Scaz Andi Jason.
We vaak ondertekenen onze e-mails SAJ.
Als we zeggen SAJ, niet worden verward.
Dat is gewoon ons.
>> Dus in Scratch, konden we hebben een blok dat zei, herhaal ik hou SAJ!
10 keer.
Erg makkelijk.
De logica hierachter is dat een heel, heel simpel, toch?
Ik wil eerst gaan door de eerste de tijd en zien dat, voor de tweede keer
en zie dat, de derde keer, enzovoort en zo verder, totdat je raakt tot 10.
>> En de manier waarop we zouden vertegenwoordigen die in code is slechts door middel van een eenvoudige lus.
Dus, je gaat te verklaren variabele hier, in casu
met int.
We gaan noem ik.
We gaan het initialiseren op 0.
En het stoppen editie zal worden i kleiner is dan 10.
En de update zal worden i ++.
>> En binnen de lus, het gaat uitvoeren totdat uiteindelijk
raakt het einde van de Staat- waarin geval, het gaat om de lus te breken.
Er moeten dingen zijn dat u jongens hebben al soort eerder gezien
en had te doen voor uw probleem te stellen één.
Heeft iemand enig vragen over voor lussen op dit moment?
OK.
Grote.
>> OK.
Dus voor degenen onder u die hebt lees de PSET spec voor deze week
weten dat we zullen moeten gebruiken iets genaamd ASCII en ASCII-tabel.
David in lezing ging over het kort hoe computers essentially-- alles
wordt gecodeerd in een computer in binair, in nullen en enen.
En de manier waarop computers in staat zijn verschillende waarden daarnaast slaan
om nullen en enen zijn door middel van het in kaart brengen die nummers aan andere cijfers vertegenwoordigen
of in hoofdzaak andere personages.
>> Dus in dit geval, een ASCII table-- alles wat het doet
is kaart tekens, of tekens, nummers.
Dus de broncode bestand in computer-- je het ziet,
hey, een heleboel nullen en enen, nullen en enen, nullen en enen.
Dat opgeslagen in het werkelijke geheugen van uw computer.
>> Maar als we mensen willen communiceren met de computer,
want-- we zeggen, bijvoorbeeld, als ik wil de hoofdletter A,
Ik ga een manier nodig van het vertellen van de computer, oh,
toen ik typ hoofdletter A, ik bedoel Deze vertegenwoordiging in binaire.
>> En dus is de manier waarop we dat doen is gooide een willekeurige ding heet een ASCII-tabel,
waarin wij mensen, als programmeurs, enige tijd geleden,
we willekeurig besloten dat we gingen deze toewijzen
waarden van deze karakters.
>> Dus jullie kunnen deze online google.
Ik denk dat er een link naar het in uw pset-- gewoon een ASCII kaart tafel, ASCII
tafel.
Het vertaalt gewoon binaire getallen in karakters.
En het zal zeer worden handig voor uw probleem set
wanneer u maar wilt berekenen iets of als u
willen bepaalde weergeven tekens of getallen
of manipuleren van bepaalde tekens.
Het gaat om heel te zijn belangrijk dat u alle
weet hoe je een ASCII-tabel te navigeren.
>> Dus bijvoorbeeld de hoofdletter A wordt weergegeven door het getal 65.
En de kleine letters a wordt vertegenwoordigd door 97.
Dus het is belangrijk om te weten dat de verschil tussen de twee waarden
is 32.
Vaak, als je nodig hebt om te zetten van een naar de ander, het verschil is 32.
En maak je geen zorgen als je kind bent verward deze eerst.
We zullen gaan over hoe we zouden gebruiken deze in eigenlijke code.
>> OK.
Dus voor degenen onder u met laptops uit, voel je vrij om te trekken van een ASCII-tabel,
omdat deze zal waarschijnlijk vereisen jullie om te verwijzen
wat de personages zijn.
OK.
>> Dus weten dat bepaalde tekens kaart naar bepaalde nummers,
als ik alleen nog maar de eerste lijn van dat code-- de printf een,
kleine letters a, minus hoofdletter A. Heeft iemand
een gissing wat zou afdrukken van het scherm op dit moment?
>> Dus in de eerste plaats, wat doet Kleine letters a vertegenwoordigen?
Welk nummer is dat gecodeerd in de ASCII-tabel.
Sorry?
>> Publiek: 97?
>> ANDI Peng: 97, geweldig.
En wat is hoofdletter A?
>> Publiek: 65.
>> ANDI Peng: Dus wat is 97 minus 65?
>> Publiek: 32.
ANDI Peng: OK.
Dus wat doen jullie denken gaat gebeuren als ik input die regel code
in mijn computer?
>> PUBLIEK: [onverstaanbaar].
ANDI Peng: Sorry, spreken.
Geen zorgen.
Dit is een zeer veilige milieu, verminderd met de camera.
We gaan allemaal to-- geen zorgen.
Dat we gaan allemaal doen alsof het is gewoon ons chillen in deze kamer.
Geen zorgen.
Geen vraag is te dom.
Geen antwoord is een dom antwoord.
Ik ga waarschijnlijk om fouten te maken in de loop van mijn leer.
Serieus, jongens, net flappen het uit.
Heb vertrouwen in jezelf, weet je?
Dus wat was dat?
Wie zei dat laatste antwoord?
OK.
Roepen dat mooi en duidelijk.
>> Publiek: 32?
>> ANDI Peng: 32.
Oké, laten we het uitvoeren van deze code en te zien als dat is wat er gebeurt.
OK.
Zodat jullie kunnen soort zie, de typische notatie ik heb
opgezet hier voor hoe we zouden in dienst elke vorm van het programma in onze computer.
We hebben onze functie binnen onze functie.
Ik ga gewoon te kopiëren en plak deze regel code.
Wees ook voorzichtig wanneer u kerels kopieert en code plakken.
Soms sommige marktdeelnemers niet goed plakken voorbij.
In dat geval is de min teken was eigenlijk een streepje.
En dus is de computer niet ophalen.
Dus moest ik terug te gaan en fysiek overtypen dat.
Wees voorzichtig bij het jullie doen dat.
>> OK.
We gaan dit hier te lopen.
Dus we gaan naar cd in onze section2.
Ik heb dit programma asciimath genoemd.
Dus onthoud, wanneer we lopen elke programma, willen we eerst compileren
door het uitvoeren van het door onze make.
En dan willen we eigenlijk lopen het programma door het doen van dot-slash.
Dus we gaan ./asciimath.
>> Juist, daar gaan we.
En we zien 32.
Goed gedaan.
Je verdient een snoepje.
Snoep voor je.
Sorry.
Prima.
OK.
Dus kunnen we terug naar ons voorbeeld gaan hier.
Aah, nee.
Aah.
OK.
Ik ga gewoon om het zo te houden.
OK.
Dus zoals jullie kunnen zien, kunnen we doen veel zeer interessante dingen,
een groot aantal zeer leuke dingen, veel zeer ingewikkelde dingen met
ASCII-tekens en cijfers.
Zodra je naar beneden op lijn vijf, dat is veel om mee te volgen.
We gaan niet om te gaan via de rubriek.
Voel je vrij om, als je kunt, beredeneren het uit op papier
eerst op wat er moet gebeuren wanneer u invoert zoals een reeks van waarden.
Bijvoorbeeld, in die laatste regel, we z-- die een zekere number-- vertegenwoordigt
a-- die ook staat voor een bepaalde number-- plus 1 modulos 26
plus een kleine letters.
>> Als jullie blijven lezen door deze, je
kan een patroon komen in hoe we het manipuleren van de code.
Ik beveel ten zeerste aanraden na sectie jullie allemaal
jongens ga je gang en input die allemaal in je computer
en zie wat voor soort nummers komen uit
en redeneren door middel van waarom die zijn gebeuren, want voor je psets
het zal heel belangrijk zijn voor u om te begrijpen
waarom bepaalde dingen gebeuren.
Al deze slides zal online zijn.
Dus geen zorgen over pogingen om fysiek kopiëren aantekeningen.
Online alles is.
Dit gedeelte zelf zal online zijn.
Al mijn broncode die Ik ben actief zal online zijn.
Ja.
Hebt u nog vragen?
Publiek: Wat is modulos?
ANDI Peng: OK.
Dus modulo is een operator die gaat behoorlijk belangrijk om uw jongens PSET
here.
Dus de manier waarop exploitanten in C en in de programmering werk
is dat je wat heet de scheiding symbool en de modulus symbool
dat is net als het percentage teken.
>> Dus in C, wanneer u een integer doen gedeeld door een geheel getal met een schuine streep,
C heeft de neiging om te zagen korting op alle van de decimale punten,
omdat een integer wil converteren naar een integer.
Het is niet van plan te willen een dubbele te zijn met een bos van decimalen alles na.
>> Dus als ik 3 gedeeld door 2, het gaat af te snijden van de 0,5 en geef je 1.
Dus dat is iets om heel voorzichtig zijn wanneer je
het doen van elke vorm van wiskunde in de programmering, is dat de nummers die je krijgt
misschien niet de aantallen dat je denkt,
Daarom afronding in laatste PSET is zo belangrijk.
>> Modulo geeft je de rest.
Dus bijvoorbeeld, als ik dat deed 3 modulo 2-- dus 3 procent teken 2--
het zou de rest van die geven.
So 3 gedeeld door 2 is 1,5.
Het is 1 rest van 1.
Het zou geven u de 1, die is de rest van dat.
>> Dus als jullie verhuizen door middel van de ASCII-tabel,
modulo zullen uiteindelijk op een iets dat is heel belangrijk,
en we zullen bespreken die later.
>> OK.
Dus iets dat is vrij, vrij nieuw en vrij uniek
dat we deze week hebben besproken wordt het begrip wat een matrix is.
Dus is de eerste matrix type gegevensstructuur
dat we gaan tegenkomen in deze klasse.
Alle gegevensstructuur is een soort van willekeurige,
letterlijk dingen achtige structuur dat wij als programmeurs hebben gecreëerd,
dat we in onze code hebben gezet dat kunnen andere stukken code bevatten.
>> Dus in die zin, een array-- denk aan het als een archiefkast,
waar als je anders opent schappen van uw archiefkast,
u toegang tot verschillende dingen.
In het geheugen, wordt een array gewoon te doen het zelfde ding op je computer.
U kunt verschillende blocks-- we noemen ze indices-- van een array.
Het is net als een blok, een plank geheugen
dat wij binnen hebben gemaakt uw computer die u kunt invoeren
bepaalde dingen in de verschillende ruimtes.
>> Dus met een array, u altijd te specify--
je moet opgeven verklaren een array in het volgende formaat.
Je gaat eerst geef de soort data
dat u wilt maken van de array.
Als ik wil een array van integers, Ik ga int daar te zetten.
Als ik wil een array van strings, Ik ga strings daar te zetten,
de naam van de array, en vervolgens je gaat vierkante haken hebben.
En in de vierkante haken, je bent naar de grootte van de array.
>> Iets dat is echt belangrijk in gedachten te houden bij het maken van arrays is
dat, als je eenmaal een te creëren array, kan die grootte niet veranderen.
Dus als je weet dat op dit moment heb je een array van maat 10,
je weet dat ik ga 10 cellen binnen of 10 indices binnen deze array,
en het is nooit uit te breiden of te verminderen
wat er ook gebeurt, en dat er momenteel slechts 10 blokken van de ruimte
in uw geheugen dat kan opslaan toegewezen tot 10 dingen van wat je hebt gezet.
>> Dus op deze wijze een matrix gegevenstype de gegevensstructuur die een array
is heel anders dan sommige anderen we zullen worden die later in deze cursus.
Ja.
Bijvoorbeeld, als je wilde een array van grootte 3 die
bevatte variabelen integer-- oh, sorry, van temperature--
en temperatuur van Uiteraard is een geheel getal.
>> Zo zouden we int creëren, die de data type wat we willen opslaan.
We gaan deze temperaturen bellen omwille van de nomenclatuur van naamgeving
iets dat we allemaal begrijpen.
En we gaan vierkante haken hebben.
En we willen drie getallen.
Dus we gaan zetten drie binnenkant van het.
>> Iets dat is echt belangrijk om in gedachten te houden
dat arrays nul geïndexeerd.
Al dat betekent is dat je beginnen met de index van 0,
en je omhoog lopen door de grootte van de matrix minus 1.
Dus hier hebben we bijvoorbeeld hebben een scala van maat 3.
Het gaat om te kunnen drie waarden houden.
Maar de nummers die themselves-- nummer, de matrix, die index,
de array, zijn 0 tot en met 2.
Dus jongens, echt, echt voorzichtig bij je gaat door je problemen stellen
en het creëren van een soort van matrix, omdat veel van de tijd is het
echt, echt gemakkelijk om te vergeten dat.
Ik eigenlijk niet de index van 3, dat ik op dit moment alleen
hebben de index van 2.
En als je probeert te toegang tot de derde index,
het gaat om wat er riep de null-terminator.
Het gaat niet om daadwerkelijk bestaan ​​in de array.
En de computer is niet van plan te willen dat.
Dus wees voorzichtig wanneer u toegang tot dingen gewoon
om ervoor te zorgen dat u niet vergeten dat arrays nul geïndexeerd.
>> OK.
Dus het eerste voorbeeld is gewoon een manier om een ​​array.
Het tweede voorbeeld dat ik heb Hieronder is slechts een aparte manier
creëren wat hetzelfde data structuur die we net hebben ingevoerd.
Dus in plaats van fysiek running door en de invoering van de temperatuur van 0
gelijk aan wat dan ook, de temperatuur 1 gelijk aan wat dan ook, de temperatuur 2 gelijken
wat dan ook, ik kon gewoon eigenlijk het allemaal rechtstreeks te maken op één lijn
in temperatuur vierkante haakjes gelijk.
>> En de mededeling in dit geval, hoeft u niet om aan te geven hoe groot de array is,
omdat de computer gaat ga door en zie dat er
drie elementen die accolades.
En het gaat om te weten, OK, Ik heb een array van grootte 3.
Je bent niet gaat nodig hebben om ingang is op de volgende manier.
>> En ook, ja, op die manier.
Heeft iemand vragen over hoe we arrays
of hoe de structuur van een matrix werkt?
Ja.
>> PUBLIEK: [onverstaanbaar]?
ANDI Peng: Ja, precies.
Dus als je te verklaren en te initialiseren een array van de volgende werkwijze,
dat is de tweede manier, u kunt gewoon laten deze.
En de computer weet automatisch dat het
moet het aantal elementen tellen zijn in die accolades, gescheiden
door komma's.
>> Dus hier zien ze 65, 87, 30.
Zodat de computer weet, oh, er zijn drie getallen.
Ik weet dat een array naam creëren temperatuur drie elementen daarin.
Goede vraag.
Ja.
>> Publiek: Is het niet mogelijk om te creëren een array met verschillende types van data
die kunnen worden opgenomen in het?
Bijvoorbeeld, met integers [onhoorbaar]
ANDI Peng: Voor de toepassing van deze klasse, nee, juist nu.
Wanneer u een data maken structureren als een array,
vertel je bent de computer, hey, ik heb je nodig
om deze veel wijzen geheugen van mijn harde schijf,
waarbij elke cel wordt een aantal bits.
>> Vergeet niet dat we geleerd hebben in week zero dat verschillende data
types hebben verschillende maten?
Dus bijvoorbeeld, een koord een ander bedrag
ruimte dan een char, die een andere hoeveelheid ruimte
uit een integer.
En dus als je niet opgeeft en je mix en match welke soorten variabelen
je hebt, de computer gaan erg in de war zijn.
En het gaat niet om te weten hoeveel geheugen om u te geven.
Dus voor doeleinden van rechtswege nu, computers kan alleen
herkennen type van een array.
Goede vraag.
OK.
>> Zo natuurlijk, de tweede vraag die wij hebben
is, nou ja, nu we een hebt gemaakt array en we hebben al deze dingen te zetten
in de array, hoe zijn we zal in staat zijn om toegang te krijgen?
Dus de typische structuur die we altijd toegang krijgen tot een array is onze mooie lus.
Ik beloof jullie dat we zijn het zien van een heleboel deze kerel hier.
>> In wezen, wanneer u maar wilt input waarden in een array
of wilt u hen de toegang, de beste manier om dat te doen is een lus,
want in een lus, u hoe vaak je bent
gaat te willen lopen door de array, omdat je een stop editie, toch?
En elke keer dat u door middel van, kunt u toegang
een ander element van de array.
>> Ook dit is een reden waarom gewoonlijk we beginnen onze voor lussen aan de waarde 0,
want als je toegang tot arrays, u toegang tot het nul-index.
En zo parallellen heel mooi.
Jullie kunnen hebben willen schrijven voor int i is gelijk aan 1.
i kleiner is dan of gelijk is aan 3.
>> Het zou niet goed werken als hier goed, omdat je alleen
elementen heeft van 0, 1 en 2.
En dus als je om te beginnen je i op element 1, 2 en 3,
je gaat eindigen running buiten de grenzen van de array,
en slechte dingen gaan gebeuren.
>> Dus ik hoop dat jullie zien de segue waarom in de eerdere klassen
We leerden jullie hoe te lopen en formatteren een lus van de manier waarop we waren.
Het is omdat, nu hebben we overgegaan in arrays,
kunt u zien waarom de 0 leent zelf erg mooi om toegang.
>> Dus de manier waarop we dat doen is dat-- ik ben gewoon uit te drukken hier omwille
afdrukken van het uit.
Maar ik heb mijn placeholder, komma.
En de eigenlijke ontsluiting deel gebeurt.
De naam van de array temperatuur werd genoemd.
Dus het is de temperatuur en de i-de element van de array.
>> Zodat de lus loopt door, het gaat om te beginnen bij 0.
Het gaat om een ​​afdruk van de 0 index van deze array.
Dan is het ter perse gaan het eerste element.
Dan is het ter perse gaan de tweede.
En dan gaan we breken.
Is iedereen duidelijk Hoe dat gebeurt?
Grote.
>> Prima.
Dus hier hebben we een manier van zeggen, als we niet willen
hard-code in-- mij als programmeur.
Ik wilde niet fysiek zet in elk individueel element
van deze array.
Als ik wilde in plaats de gebruikersinvoer waarden
wat is de beste manier om dat te doen?
>> Nou, hier heb ik gemaakt deze mooie functie,
waar kan ik verklaren een array.
Dus int scores-- laten gewoon zeggen dat we willen maken
een array dat de kwaliteiten van alle 18 gehouden van de studenten hier in deze sectie.
Ik denk dat we een beetje gekregen meer dan 18 kinderen van vandaag.
Maar om het voorbeeld van, laten we aannemen dat we hadden 18.
Ik zou een array naam scoort met creëren int omdat scores, natuurlijk
getallen.
En ik ga moeten 18 vierkante haken,
want dat is hoeveel studenten I willen in staat zijn om scores van slaan.
>> En de manier waarop ik zou bevolken de array is dat ik zou
voer het uit door middel van een lus, van Natuurlijk, waarbij 0 0 mijn index.
En vervolgens met 18 zijn mijn stoppen editie, want er is
18 elementen in de array.
En dan ga ik printf doen, Enter scoren voor student-- yada yada yada.
>> Kan iemand mij vertellen waarom ik hier ben afdrukken i plus 1 en niet ik?
Het is een soort van een truc vraag, niet echt.
Het maakt eigenlijk niet fysiek van invloed op de werking van de code.
Ja.
>> PUBLIEK: [onverstaanbaar] 0?
ANDI Peng: Ja, precies.
Het is een beetje lastig om te zeggen, he, je bent de 0 student in deze klasse.
Het is een beetje raar.
Dus wij, als mens, niet echt om na te denken over hoe computers denken.
Dus hoewel in de computer, het opslaan van waarden
in de 0-ste index bij We zijn mensen, we doen niet echt
willen verwijzen naar onszelf als nul.
Dus toen ik printen alleen dat, Ik ga om af te drukken en voeg
1 alleen voor de duidelijkheid.
Dus toen ik afdrukken, ik ga worden kunnen studenten afdrukken 1 tot en met 18.
Het doet er niet echt invloed de werking van de code
op welke wijze, de manier waarop ik te drukken.
>> Maar wees voorzichtig als je eigenlijk de toegang tot array.
Als je de scores i, merkt hier Ik ben eigenlijk
de toegang tot 0-index en geen 1 plus 0-- of 1 plus 1,
in dit geval dus index dat het eigenlijk duidelijk.
Is iedereen soort OK op hoe dit wordt uitgevoerd door middel van
en bij elke index Ik ben zetten een waarde in de array
en het creëren van een array met 18 nummers de gebruiker zal invoeren?
OK.
Cool.
>> OK.
We gaan nu in iets dat is vrij relevant voor dit stuk zo goed opgezet.
Ik weet in collegezaal, David-- sorry, u een vraag had?
>> Publiek: Kan je het vergroten?
>> ANDI Peng: Ja, dus ik probeerde.
Maar ik weet het niet.
Om een ​​of andere reden, dit versie van PowerPoint
is echt niet werken goed met de display.
Dus we gaan gewoon te houden als dit.
Al deze zal online worden geüpload.
Sorry jongens.
Ja.
OK.
>> Dus we kunnen ook strings.
Dus als jullie eigenlijk notice-- I weet Rob ging dit in die lezing
dat hij did-- een tekenreeks daadwerkelijk slechts een array van karakters,
Als je erover nadenkt, toch?
Een string is een naam of een zin of een woord, toch?
>> Als ik naar een string met de naam maken Andi-- gewoon mijn naam, A-N-D-I.
Je denkt aan dat als slechts een variabele.
Maar eigenlijk, het is afgebroken in slechts een array van chars.
Dus het heeft een teken van Opgeslagen in een array waarde.
Het heeft een karakter van n opgeslagen in de tweede index, enzovoort, enzovoort.
>> Dus zodanig, we eigenlijk dit soort
structuur in plaats voor onze snaren.
Dus hier, als ik het invoeren van de Het woord "eten" - dus touwtje woord evenaart
krijgen string.
Als ik ingang van het woord "eten", dat fysiek de manier waarop mijn computer
opslaat die string in mijn geheugen.
>> En als ik wilde lopen door dat en printen die zo out-- voor in i
gelijk is aan nul, herinner me, in collegezaal, we bedekt iets dat strlen heet,
of de lengte van de snaar.
Omdat ik niet echt weten hoe groot de array
van welke inputting-- de gebruiker
>> Bijvoorbeeld, ingevoerde I het woord "eten," en ik weet
dat is drie tekens lang zijn, toch?
Dus ik kon in een drie daar te zetten en alles komt goed.
Maar als je input van de gebruiker iets dat is een ander aantal waarden,
je gaat niet in staat zijn om echt weten dat wanneer u uw code te programmeren.
>> Dus de manier waarop we omgaan met testcases als dat is dat we iets
strlen genaamd, dat is gewoon een functie dat vertelt u hoe lang een string is.
Dus strlen van het woord.
Mijn woord is eten.
n gelijk strlen van het woord.
Kan iemand mij vertellen wat dat waarde eigenlijk is daar?
Wat doet n recht vertegenwoordigt Nu, in dit voorbeeld, als ik eten?
>> Publiek: 3.
>> ANDI Peng: 3, precies.
Dus we hebben voor int i gelijk nul, n gelijk is aan 3, wezen.
En ik zal lopen totdat het is minder dan 3i ++.
En het gaat in wezen gaan door en doe hetzelfde.
Het gaat om uit te printen elke waarde en geven u
E-A-T. Het is gewoon een aanduiding andere manier van schrijven.
Dat zal zeer nuttig zijn.
Ja.
Publiek: Wat is de voordelen van zetten de n gelijk strlen woord binnen dat
lus [onverstaanbaar]?
ANDI PENG: Ja.
Dus als ik to-- zeggen, bijvoorbeeld, als ik om dat te doen en dan
doen-- oop-- dat, in mijn code, het zou eigenlijk moeten doen, zoals het zelfde ding.
Echter, de manier waarop David verklaard het tijdens college, als iemand van jullie
herinneren, was dat, mensen, programmeurs,
we echt proberen te programmeren onze code, zodat onze computer
zo klein mogelijk te werken, zodat dat onze code is zeer efficiënt.
>> Dus als ik had dat er, wat zou gebeuren door mijn lus
is dat ik voor het eerst zou verklaren een variabele met de naam i gaat worden 0.
Ik ga om te controleren, oh, wat is de strlen van het woord?
Oh, de strlen is 3.
Dus ik minder dan drie?
Ja dat is zo.
Ik ga om te draaien.
>> En dan is de tweede keer terug rond de lus, ik ga ik verhogen.
i zal een.
En ik zal controleren, oh, maar wat is het strlen van het woord?
Oh, het is drie.
En doet dat soort verspilling lijken, elke keer dat je door de lus lopen,
te controleren van de functie, hoewel de strlen van het woord
nooit echt verandert?
>> Dus het is extra vermogen voor een computer.
Wanneer je begint te praten over dingen die miljarden en miljarden
en miljarden plaatsen lang, stel uw computer
hebben om fysiek te gaan door en Controleer dat alles elke keer weer.
Dat is de reden waarom, om gewoon te maken omwille van de efficiëntie,
hebben we de neiging om dit gewoon doen, omdat op deze manier zijn we alleen
aanroepen van de functie eenmaal in het begin,
en dat elke keer gaat door het gaat
de waarde op te slaan 3 er zijn, dat je niet
moet voortdurend controleren elke keer.
Ja.
>> Publiek: Sorry.
Net [onverstaanbaar].
Kon je int n gelijk strlen en zet dat boven het buiten de lus
ook?
ANDI PENG: Ja.
Je zou kunnen doen, absoluut.
De reden dat we hebben het in hier omdat de manier waarop een lus werkt
is dat het heet een lokale variabele in de zin
dat alles wat je bent het creëren van de binnenkant van de lus
alleen bestaat de binnenkant van de lus.
>> Alleen zodat de variabele i bestaat in deze haken.
En hier de variabelen n ook bestaat alleen in die tussen haakjes.
Dus als je om te gebruiken strlen van woord meerdere keren beneden,
absoluut de beste manier om dat te doen zou zijn om het te verklaren de top
zodat u niet hoeft te keer te doen.
Ja.
Publiek: Waarom heb je een nieuwe regel na het percentage
te zien als je wilt om alle zetten de letters ernaast scheiden?
>> ANDI Peng: Oh, ik wilde print ze allemaal op elke lijn.
Het maakt niet uit.
Ja, het is een opmaak.
Dat is een goede vraag, dat wel.
Ja, als ik wilde afdrukken het allemaal op één lijn,
Ik zou niet in het dashboard.
OK.
Iedereen goed?
OK.
Cool.
>> Dus ik denk dat ik heb genoeg gepraat.
Jullie aan de beurt om door de code en vertel me wat er mis is hier.
Waar is het fout?
Dus zoals je kunt zien, heb ik verklaard nieuwe array van het type tekenreeks met de naam klasse.
En ik heb ingevoerd Sam, Jess en Kim in.
En ik ben een poging om uit te printen alle elementen van de array.
Kan iemand mij vertellen waarom dit gaat me problemen geven?
Ik zal jullie geven 10 seconden na te denken over dit.
>> OK.
Ja?
>> PUBLIEK: Is de linker centrum gelijk aan 3 of [onhoorbaar]
ANDI Peng: Recht.
Dus hoe vaak is dit eigenlijk gaan lopen door deze lus?
>> Publiek: Four.
>> ANDI PENG: Precies.
Het gaat om door vier keer.
Het gaat om door te lopen bij 0, 1, 2 en 3,
omdat hun element i kleiner is dan of gelijk aan 3.
Het is niet van plan om te stoppen als het 2.
Het zal houden gaan tot het hits 3.
En zoals we weten, is er slechts drie elementen in onze huidige array.
>> Als we proberen om toegang te krijgen tot het vierde element of de index van 3,
je gaat om ergens te raken geheugen dat niet bestaat.
Het heet de null-terminator.
Niets gaat om daar te zijn.
Uw computer is niet van plan te zijn erg blij met je.
Ja.
Heeft iemand vragen over waarom dat gebeurde?
Dat is een gemeenschappelijke ruimte om te vermijden.
Ja.
>> Publiek: Is niet de eerste Schuif ook een reeks 2?
ANDI PENG: No.
Dus in wezen als je maakt een array,
dat beugel rechts daar alle number--
het is je te vertellen is hoe veel elementen die ik heb.
Het is eigenlijk niet te vertellen me de indexen van alles.
Dus in dit geval, ik weet dat ik wil schrijven met drie plaatsen,
met drie fysieke plaatsen Houd wat ik wil vasthouden.
Dus dat is de reden waarom de nummer drie is er.
Echter, als ik wilde daadwerkelijk toegang toe,
als ik wilde zeggen, printf klasse beugel nummer, dan
je gaat om daadwerkelijk zetten de fysieke index daar.
Ja, goede vraag.
>> Publiek: Dus is de fysieke index hoort te zijn [onverstaanbaar]?
ANDI PENG: Het spijt me.
Kunt u spreken een beetje?
>> Publiek: Dus is de fysieke index [Onverstaanbaar] elk van de dozen?
[Onverstaanbaar]?
>> ANDI PENG: Ja.
Dus ik ga terug naar hier.
Denk aan hier.
We hebben een scala van maat 3.
Er zijn drie plaatsen, zoals, fysieke placeholders hier.
Maar ze zijn genoemd 0, 1 en 2.
Dus als ik wilde om ze te openen, de manier waarop ik toegang tot deze
is printf van wat ik wilde hier.
Je zou hebben om af te drukken de naam van het,
omdat dan de computer weet, oh, ik moet kijken
in deze array voor de 0-index.
Ja.
Maar de grootte ervan niet verandert.
De grootte is 3, ongeacht hoe je ze te labelen.
OK.
Iedereen goed?
Publiek: Dus elke keer als ik [onverstaanbaar]?
ANDI Peng: OK.
Dus in dit geval hebben we niet echt krijgen in het nu in de cursus.
Maar weet dat een string-- zoals ik gezegd, een string in hoofdzaak
een array van karakters.
Dus als ik een array strijkers, ik soort van
een reeks matrix karakters, toch?
>> Dus in dit geval, omdat ik hebben een array van strings,
als je het invoeren van een heel lang woord, die nog steeds neemt slechts één ruimte,
want dat is het één snaar.
Maar als je te denken van de tekens van deze matrix,
dan is dat het nemen van een veel meer karakters dan enig ander woorden
zijn.
Niet echt belangrijk voor nu.
Maar dat is slechts het algemeen hoe het werkt.
>> OK.
Dus dit is iets wat ik zal u laten doen veel in de loop van het semester.
Ik moet mijn stem te rusten.
Jullie moeten jezelf te stimuleren.
Veel van jullie waarschijnlijk moet nu slapen.
Ik ben het invoeren van willekeurige problemen waar we als een klasse of u
met een partner naast je gaat om een ​​paar minuten te besteden bespreken
over hoe we zouden gaan over het oplossen of het creëren van een programma zoals dit.
>> Dus nu, we willen een program-- creëren
we gaan noemen upper.c-- dat bekeerlingen
een kleine letter woord om een ​​upper-class string-- hoofdletters, sorry.
Woord in strings, sorry, is synoniem.
Ik ga ze veranderen om hetzelfde te betekenen.
>> Ja.
Neem een ​​paar minuten.
Het hoeft niet te worden geschreven in elke taal.
Just in pseudocode code of logisch hoe we zouden zelfs
gaan over het doen van een dergelijk probleem.
Ja.
>> [SIDE GESPREK]
>> Ik heb ook gemerkt dat jullie can-- Ik soort zie al het programma.
Ik denk dat mijn gebrek aan presentator modus is een probleem.
Maar het is oke.
>> [SIDE GESPREK]
Ja, alsjeblieft, jongens.
Kom krijgen snoep.
>> Publiek: Ja!
>> [SIDE GESPREK]
ANDI PENG: Ook, ja, Ik zal beginnen met het gooien van snoep
bij mensen die geen vragen beantwoordt.
Dus moet je alle vragen te beantwoorden.
Of ik denk dat mensen die beantwoordt vragen.
Ja, andersom.
>> [SIDE GESPREK]
PUBLIEK: [onverstaanbaar]
>> ANDI PENG: Ja.
Ja.
>> [SIDE GESPREK]
>> Oké, jongens.
Neem, als, 10 seconden.
>> [SIDE GESPREK]
>> Oké, jongens.
Dus voordat we beginnen proberen daadwerkelijk fysiek code schrijven,
een goede gewoonte om te ontwikkelen is dat we willen eerste soort van de rede
out logisch hoe we dat zouden doen.
U wilt er zeker van, voordat je fysiek
beginnen proberen coderen Mario, die je maakt
ervoor dat u uw pseudocode.
Dat neemt u door wat je nodig hebt om dit te creëren
dat, wanneer je fysiek schrijf uw programma later,
bent u beter in staat om fouten te vangen in uw code en dat soort dingen.
>> Dus we gaan gewoon beginnen by-- in het Engels, in pseudocode,
doet iedereen willen geven me een algemene verklaring
hoe zouden we dat doen?
Ja.
>> PUBLIEK: [onverstaanbaar].
ANDI Peng: Tuurlijk, geen zorgen.
Publiek: Kun je het vragen of vragen iemand string 1-- ja, touwtje te krijgen,
en dan--
>> ANDI Peng: Ja, dus dit is een goed begin.
Ik zal beginnen met typen, sorry, als je spreekt.
So--
>> PUBLIEK: --de kleine letters getallen hoger zijn, toch?
Of de kleine letters hebben hoge aantallen?
ANDI PENG: Precies.
Publiek: Dus dan aftrekken we 32 van welke [onverstaanbaar].
>> ANDI Peng: Grote.
Dus we soort hebben een algemeen gevoel van hoe te werken over dit probleem.
Wetende dat we soort hebben geleerd de fysieke manier waarop strings
worden opgeslagen in het geheugen, wat je doet al
weet dat je gaat waarschijnlijk moeten schrijven in uw code
om te bewegen door de string?
>> Publiek: voor lus.
ANDI Peng: Een lus, precies.
Grote.
Dus hebben we een soort van generieke pseudocode opgeschreven
dat soort geeft je merkt hoe je
zou bewegen oplossen van het probleem.
Nu je dit hebt, je kan het referentie voor later
wanneer je probeert om eigenlijk schrijf uw code.
Dus we kunnen eigenlijk gaan hier.
En ik heb een functie genaamd kreeg upper.c-- daar is-- van slechts een blanco sjabloon
nu dat jullie gaan me helpen uitzoeken hoe om te schrijven
deze lijn van code-- geen regel code.
Het zal meerdere regels code.
>> Bij het starten van een soort blanco PSET, wat is
het eerste wat ik nodig om te onthouden om te doen?
>> PUBLIEK: [onverstaanbaar].
>> ANDI PENG: Great Yep.
Omvatten.
stdio.h.
Vaak is dit een van de meest eenvoudige fouten die mensen
zal maken als ze schrijven, is dat ze zullen
vergeten om een ​​include belangrijke bibliotheek die ze nodig hebben.
Dus als het kantooruren en je bent zoals, Ik weet niet waarom mijn code niet werkt.
Kunt u mij vertellen waarom het niet werkt?
We gaan om te zeggen heb je #include?
Je moet het #include.
OK.
>> Dus hebben we de standaard I / O kreeg hier.
Is dat het enige bibliotheek we gaan hier nodig?
Wat gaan we doen?
Sorry.
Iemand die net schreeuwen het uit?
>> PUBLIEK: [onverstaanbaar].
ANDI Peng: Daar ga je.
OK.
En hoe ga ik over het starten van een soort van de functie, een soort van hoofdfunctie
binnen ons programma?
Int main.
OK.
Wat doe ik hier binnen?
Wat is het eerste wat je wilt doen?
Als we willen een te krijgen snaar van de gebruiker,
wat gaan we te hebben te doen op de eerste lijn?
Sorry, jullie voel me vrij om te spreken en luid.
Gewoon schreeuwen wat dan ook.
>> Publiek: Vraag de gebruiker?
ANDI Peng: Hoe doen we dat?
Ask-- ben ik naar het type "vragen de gebruiker"?
>> Publiek: Printf.
>> ANDI Peng: OK.
Printf.
Wat wil ik printf?
>> PUBLIEK: Typ iets.
>> ANDI Peng: Net als dat?
Jongens, doen alsof ik een computer.
Fysiek vertel me elke stap die ik nodig heb om hier te typen?
Doe ik iets verkeerd?
Moet ik iets heb getypt?
>> Publiek: Je moet aanhalingstekens.
>> ANDI Peng: ik citaten nodig?
OK.
>> PUBLIEK: En dan nieuwe lijn.
Puntkomma.
ANDI Peng: Puntkomma?
OK.
Goed.
>> Publiek: En misschien opgeven dat u het in kleine letters?
>> ANDI Peng: Grote.
Jullie lachen me vergeten om een ​​puntkomma te zetten.
Ik garandeer je ergens In de loop van deze klasse,
je zal vergeten te zetten een puntkomma, en het
zul je drie uur om erachter waarom uw code werkt niet.
Het is gebeurd voor ons allemaal.
Het zal waarschijnlijk gebeuren met je.
Krijgen in een goede gewoonte van het gebruik puntkomma.
OK.
>> PUBLIEK: Wilt u aan de backslash in doen?
>> ANDI PENG: Zeker.
Wilt u de backslash doen?
>> Publiek: Ja.
>> ANDI Peng: Grote.
OK.
Wat moet ik nu doen?
>> Publiek: Get string.
ANDI Peng: Get string.
Dus wat moet ik typen?
Iemand?
>> Publiek: String s.
>> ANDI PENG: String s.
Publiek: GetString.
ANDI Peng: Iemand, kunt u mij vertellen waar de
deze functie GetString vandaan komt?
>> Publiek: string.h.
>> ANDI Peng: string.h?
Je denkt dat het van string.h?
>> PUBLIEK: [onverstaanbaar].
>> ANDI Peng: Daar ga je.
Het is van CS50.h.
Als je altijd in de war over waar een bibliotheek bestand of een header bestand,
google letterlijk string.h, en ik zal je vertellen
welke alle functies die in string.h.
OK.
>> Dus nu dat ik een string hebt gemaakt en ik heb gevraagd de gebruiker voor het,
Ik heb het opgeslagen in een variabele genaamd s, wat moet ik nu doen?
>> Publiek: Controleer of het in kleine letters.
ANDI PENG: Sorry?
Publiek: Controleer of het in kleine letters.
ANDI Peng: Oké, laten we dat doen.
Hoe doe ik dat?
Eigenlijk is de zin van de klasse op dit moment,
we gaan gewoon veronderstellen dat alles
dat we ingang is al in kleine letters.
Als je wilde om te controleren, zou je voeg gewoon een voorwaardelijke verklaring
dat gecontroleerd, dat door middel liep elk arrayelement
en gecontroleerd of het tussen bepaalde waarden.
Ik vergeten wat het aantal van de waarden van de kleine letters zijn.
U kunt het opzoeken van de ASCII-tabel.
Maar ja, dat is een heel goed punt.
Maar nu zijn we gewoon gaan aannemen dat alle strings we ingang
zijn in kleine letters.
OK.
>> Dus hoe zou ik gaan over het dit probleem de volgende stap?
Publiek: voor lus.
ANDI Peng: For-lus?
OK.
Vertel me wat te typen.
>> Publiek: voor int i gelijk is aan 0.
>> ANDI Peng: OK.
>> PUBLIEK: Oh, eigenlijk, dan moet je doe een komma en doe n gelijk strlen.
>> ANDI PENG: Zo belangrijk ding dat ik denk dat ze hier merkte
is dat we niet hoefde te zeggen int n de tweede keer hebben we dit.
Weet alleen dat in een voor lus wanneer u verklaren,
je eigenlijk niet de int van nodig de tweede keer dat je een variabele.
U kunt n strlen zeggen.
>> Publiek: Van s.
>> ANDI PENG: s.
OK.
>> PUBLIEK: Dan een puntkomma.
>> ANDI PENG: Zeker.
>> Publiek: En dan [onverstaanbaar] n.
Dan ++ i.
>> ANDI Peng: Grote.
Prima.
Wat willen we binnen van deze lus nu?
Vergeet niet, als we gaan door te draaien een string en lopen door een array,
We willen dingen te controleren in.
Wat gaan we nodig hebben?
Dit is een soort van het lastige deel nu.
Iedereen heeft een gok?
>> OK.
Dus eerst, hoe kunnen we zelfs toegang?
Hoe kunnen we zelfs de eerste cheque of toegang tot een element in de array?
Hoe doen we dat?
Wat is de notatie die we gebruiken om dat te doen?
Wat is de naam van deze serie genoemd?
Het heet is, toch?
>> Vergeet niet, elke reeks is altijd een array.
Dus s beugel ik, toch?
Want dat is de huidige waarde of indexwaarde we controleren.
En we gaan die gelijk te stellen to-- willen we een kleine waarde, toch?
We willen zetten dat lower-- sorry, we willen een hoofdletter.
We willen de kleine zetten waarde in een hoofdletter.
En dus like-- het spijt me, hoe heet je?
>> Publiek: Heidi.
>> ANDI PENG: Sorry?
>> Publiek: Heidi.
>> ANDI Peng: Heidi.
Zoals Heidi zei in eerste instantie, we zijn waarschijnlijk
gaat nodig the-- we waarschijnlijk zal moeten aftrekken
32 van welke charc dat is, toch?
Omdat op ASCII tafel, het verschil
tussen een kleine letter en een hoofdletter is 32.
Dus als we dit doen, zijn we waarschijnlijk gaat willen aftrekken 32, toch?
>> Dus we gaan en ik doe.
Heeft iedereen begrijpen waarom ik dat deed?
Want nu, in ons aanbod, we zijn het controleren van de 0-index, toch?
En in de 0-index van de koord, dat is het eerste teken.
En dat karakter we gaan om aan te nemen dat het in kleine letters.
Als we willen het hoofdletters te maken, we moeten aftrekken 32 van zijn waarde,
omdat in onze ASCII tafel, dat is hoe we het
de volgende overeenkomstige waarde dat het hoofdletters maakt.
Begrijpt iedereen dat?
Ja.
>> Publiek: Kunt u ook hebben kleine letters een minus--
>> ANDI Peng: Ja, dus dat is eigenlijk heel goed.
Ik ga terug naar die vraag nadat we dit doen.
Ja.
En dan als ik wil zien wat er gaande is,
Ik ga waarschijnlijk wilt, rechts af te drukken?
Iemand mij vertellen wat Ik wil hier afdrukken.
>> PUBLIEK: printf procent c backslash [onverstaanbaar].
Dat is de waarde van [onverstaanbaar] s i.
>> ANDI PENG: s ik, sorry?
PUBLIEK: [onverstaanbaar].
ANDI Peng: Ik weet het niet.
Wat denk jij?
>> Publiek: Nou, ik wouldn't-- Ik denk dat ik zou niet bring--
Ik zou het afsluiten van de binnen, omdat [onverstaanbaar].
ANDI Peng: Oh, u zou hebben gedaan?
Publiek: Ja.
ANDI Peng: Laten we het de weg het is, en ik zal later uitleggen waarom.
Vergeet niet, zelfs wanneer u hebben een plaats houder,
je wilt haakjes omheen zetten.
Prima.
Dus dit moet een solide functie hier te zijn.
Laten we draaien het en zien of het compileert.
Maak de bovenste.
Oh Oh.
Dat klinkt niet zo goed uit.
Waarom gebeurt dit?
Zoals bij elke fout, u wilt gaan back en beginnen met de eerste,
want meestal één fout oorzaken tal van andere fouten na het.
Hier zien we upper.c: 18: 25, die vertelt me in dit programma genaamd upper.c,
op lijn 18, fout impliciet verklaren bibliotheek van functies strlen met type
unassigned-- blah, ik weet het niet wat er na dat.
>> Alles wat het vertelt me ​​nu is dat er iets aan de hand is de strlen.
En de computer is in de war, omdat Het is net als, ik weet niet wat strlen is?
Wat doet dat waarschijnlijk je vertellen je mist?
>> Publiek: Je mist [onverstaanbaar].
>> ANDI Peng: Je hebt gelijk.
Precies.
Dus dit is waar het het belangrijk om ervoor te zorgen
dat elke functie die u in gebruik je code is het hebben van de juiste header
bestand voor de bibliotheek, of anders je gaat om veel fouten te krijgen
en uw code is niet van plan om te weten wat er gaande is.
Dus we gaan string.h hier onder.
>> Nu als we proberen boven te compileren.
Correct samen te stellen.
Laten we draaien dit programma.
Dus typt iets in kleine letters.
Wat willen jullie te typen?
Schreeuwen iets.
Oké, Charly liep gewoon in.
We zullen de naam Charly's typen.
>> Charly in kleine letters.
En hopelijk, hopelijk is dit gaan schreeuwen en spugen
Charly in hoofdletters.
Yay!
begrijpt iedereen hoe Ik ging over het oplossen van dat?
De manier waarop ik kan manipuleren met behulp van gehele getallen
iets dat oplossen Ik wil doen in strings,
omdat de personages en getallen kunnen worden verwezen op dezelfde manier, omdat
ASCII mapping.
>> Dus terug naar je punt, als ik wilde hier in plaats van 32 zetten
hoofdletter A minus kleine letter a, net als dat, zou dat even zo goed werkt,
want dat is gewoon de verschil tussen deze twee waarden.
Als ik wil dit again-- charly maken.
O nee.
Ik denk dat we de verkeerde kant op, ja?
>> PUBLIEK: [onverstaanbaar] kleine letters a.
>> ANDI Peng: Daar ga je.
Yep.
En uit spuugt charly.
Dus wees voorzichtig bij je aftrekken van waarden
om te onthouden welke is groter dan de andere.
Bijvoorbeeld, hier ben ik vergeten dat een kleine eigenlijk
groter dan hoofdletter A. Dus toen ik geprobeerd om ze af te trekken andersom
rond, ik kreeg negatieve 32.
En mijn computer was, Ik weet niet wat dat is.
Het is waarschijnlijk slechts enkele willekeurige waarde is niet erg goed.
En dus zorg ervoor dat je bent aftrekken van de juiste lengte
het teken dat u wilt.
OK.
Is er iemand in de war over hoe wij ging over het schrijven van deze functie?
OK.
Dus eigenlijk, een functie reeds bestaat in de bibliotheek genaamd ctype.h.
Genaamd ctype.h de bibliotheek.
Deze functie is eigenlijk al geschreven voor jou.
Het heet de bovenste.
>> Zo behoeve van Dit PSET, je gaat
te vinden dat je echt wilt gebruiken veel van de functies
binnen de CType bibliotheek.
Naar boven, om te verlagen, is de bovenste, is lower-- dat zijn alle functies
dat u in staat om zeer te gebruiken zal zijn, zeer snel in uw eigen code die
doet precies wat dit doet.
We schreven hoe om te zetten een tekenreeks naar hoofdletters.
Maar dit is eigenlijk de code dat iemand anders heeft geschreven
en dat u toegang via een andere functie.
Ja?
>> Publiek: Dus je gewoon kopiëren A's daar en doe het voor elke letter?
>> ANDI Peng: Ja, omdat ik niet zorg over de waarden van a.
Ik zorg dat het verschil tussen hen is 32, nietwaar?
Het verschil tussen kleine letters b en hoofdletters B is ook 32.
En het verschil tussen ca. en hoofdletter C is altijd 32.
>> Ik moet gewoon zorgen te maken over de verschil tussen de twee,
omdat alle letters volgen hetzelfde patroon, toch?
Als ik het verschil tussen één van hen
Ik weet wat het verschil tussen hen allen is.
Goede vraag.
Ja.
Iedereen goed?
OK.
Oop.
>> OK.
Dus een ander concept dat gaat heel nuttig als je zijn
blijven ontwikkelen de code is dit idee
van het creëren van functies of abstractie.
Dus nu hebben we allemaal algebra genomen.
In de algebra, wordt u geleerd dat er dit prachtige ding heet een functie
machine, waar als je ingang een soort nummer,
het door deze prachtige functie loopt en uit springt een andere uitgang, toch?
In de code, hetzelfde gebeurt in een soort van functie.
>> Dus kon ik fysiek schrijf in mijn lichaam van mijn code
een van de belangrijkste verklaring dat eigenlijk doet ongeacht het lichaam van de code doet.
Maar buiten dat, kan ik ook schrijf verschillende functies
dat veel verschillende dingen te doen.
Zo hebben we al begonnen met een aantal van hen.
Printf-- dat een functie die iemand anders
heeft al geschreven dat we kunnen noemen in onze code.
Om upper-- in dit geval, upper-- is een andere functie
we hebben geschreven dat we kunnen bellen in onze code.
En dus ik denk waarom we hebben zelfs functies?
Waarom gaan we niet gewoon plop te allemaal in dezelfde regel code?
Het maakt het gemakkelijk voor iedereen.
>> Nou, de redenering daarachter is allereerst, organisatie.
Het is echt vervelend te gaan door middel van code iemand
en één functie als printf.
Als jullie echt wist wat de functie printf meebrengt om te schrijven,
het is, net als, 1000 regels code.
>> Als elke keer als ik wilde iets printf,
Ik moest 1000 regels code te schrijven, dat echt vervelend om te lezen zou zijn,
toch?
Dat is de reden waarom we hebben net creëerde dit abstracte functie
dat we al iemand anders heeft ergens anders geschreven.
En elke keer moeten we om het te gebruiken in onze code, moeten we gewoon printf zeggen.
En dat in staat is de functie iemand anders heeft geschreven in onze code.
Het maakt het makkelijker organisatorisch om code te lezen.
>> Ten tweede is het vereenvoudigen.
Het vereenvoudigt de stappen die we hebben te nemen om onze problemen op te lossen.
Printf, functies zoals printf, functies zoals de bovenste
zijn allemaal dingen die ons in staat stellen vereenvoudigen onze code beneden, zodat het makkelijker is.
En de laatste is herbruikbaarheid.
>> Dus het feit dat we een functie genaamd printf
dat we kunnen noemen veel verschillende tijd en maakt het mogelijk om herbruikbaar.
Als ik printf schrijven, Ik schrijf het maar één keer.
Het bestaat alleen in die ene plaats.
Als ik het opnieuw zou doen, zou ik te kopiëren en te plakken dat alles
in mijn tweede regel code.
Dat is waarom als we een functie dat bestaat buiten onze,
kunnen we gewoon een beroep doen op het en opnieuw te gebruiken wanneer
moeten we dus dat het een stuk makkelijker voor ons als programma's te schrijven.
>> Dus de manier waarop we zouden eigenlijk schrijven een functie is zeer vergelijkbaar zijn, toch?
Dit is een soort van de eerste geval waarin we zullen
zie een functie nemen op een stijl anders dan onze int main leegte.
In dit geval, als ik wilde Schrijf een functie genaamd q, toch?
>> En int waarde hier is allemaal me te vertellen,
wat wil ik dit functie om terug te keren naar me?
Als ik wil een integer kubus, Ik ga om te willen invoeren.
Dit zijn de parameters.
Ik ga naar een waarde van het type int ingangen.
En ik ga om terug te keren een ander type waarde van int.
En hier, zoals u kan zien, alles wat ik doe
wordt cubing wat mijn inbreng is als mijn output en terug te zenden.
>> Dus al deze functie doet is neemt een soort van integer.
Het vermenigvuldigt door zelf twee keer zodat kubussen kracht.
En dan terug wat dat output is.
Dus in dit geval, het twee regels code dat we moesten extra schrijven.
Maar als we wilden bellen op deze meerdere keren,
het is een stuk makkelijker om die ene typen lijn hier die in kubus dan
moeten gaan door meerdere malen.
>> Dus de wijze waarop wezen elk opmaak voor elke vorm van functie
gaat bestaan ​​is als hier.
Dus hebben we de naam van de functie.
In dit geval, het heet kubus.
En we noemen dat kubus omdat het is makkelijk te onthouden.
U kunt noemt het plein en het kan eigenlijk worden in blokjes.
Maakt niet uit.
Gewoon een naam die je bent toewijzen van uw functie.
>> Dit recht hier, int, is het van de parameter die u nodig hebt.
Dus wat deze functie doet nodig om te kunnen werken?
Nou, het heeft behoefte aan een ingang.
Ik noemde het invoeren.
Je kunt het noemen wat je wilt.
Maar ik moet iets van het type int.
Het gaat om daadwerkelijk uit te voeren wat is de binnenkant van hier,
het lichaam van de functie.
En dan is de return type hier, dit int--
Alle het is me te vertellen is dat deze functie
ga terug naar mij in int.
Dus het gaat om te nemen in een int, en het gaat om u terug te geven een int.
Heeft iedereen begrijpen hoe de opmaak van dit soort werkt?
Cool.
>> OK.
Dus wees niet ongerust als dit lijkt een beetje abstract nu.
Dit is iets dat we praten over.
We zullen duiken in diepere later in de cursus.
De manier waarop een soort van hoger niveau abstractie van deze dingen werk
dat in het geheugen, in uw computer, alles
wordt in deze soort van de stack, zal ik zeggen.
>> Dus daar aan de top.
Ik weet niet of je jongens kunnen dat goed zien.
Ik zal proberen om in te zoomen.
Hier boven, we hebben de fysieke tekst
van wat de computer is interpreting-- alle nullen en enen die
bestaan ​​binnen onze computer.
En dan hebben we het geïnitialiseerd gegevens en geïnitialiseerde data,
wat wij noemen globale variabelen.
Dus variabelen die bestaan in alle programma's
en in uw hele, wezen, code.
Geen zorgen als jullie zijn soort onduidelijk op dit punt.
Het maakt eigenlijk niet uit nu.
>> En dan hebben we wat zogenaamde heap in een stapel.
Denk aan een stapel letterlijk als net als een stapel van dingen,
een stapel van verschillende dingen op de top worden geduwd
van elkaar dat de verschillende slaan variabelen en syntax in uw code.
En dan is hier helemaal onderaan, hebben we de omgevingsvariabelen
van wat je binnen uitvoert gewoon je kleine regel code.
>> En we gaan gewoon om in te zoomen in op het werkelijke stack deel.
Dus hier, als we waren om in te zoomen in op enkel dit gebied van de stapel,
dit is wat het lijkt.
En dit is eigenlijk best belangrijk wanneer jullie praten over functies,
omdat bericht dat de geheugen van uw computer
opslaat de variabelen en de functies
en de parameters van zowel functie en uw belangrijkste variabelen
op verschillende plaatsen.
>> Dus nu, de belangrijkste is de eigenlijke functie
dat je het uitvoeren van een code.
Je hebt de parameters hier opgeslagen en de lokale variabelen opgeslagen.
Lokale variabele betekent gewoon een variabele dat bestaat alleen in die functie.
En op de top van het, deze heb je aparte functie genaamd kubus.
Je hebt dat is parameters evenals die de lokale bevolking.
>> En de reden dat je kunt hier zien is dat wat
gebeurt wanneer kubus neemt in een waarde uit uw belangrijkste functie
is dat eigenlijk is het kopiëren van dat voorbij.
Dus als ik wilde cube 2 en terug 8, dat 2
feitelijk ingevoerd als parameter en het
gekopieerd, zodat u deze bestaande op twee verschillende plaatsen in het geheugen.
En je moet heel voorzichtig zijn Op herinneren die een van deze
je bent eigenlijk manipuleren.
En een voorbeeld van wat er gebeurd is dat zeer, zeer slecht zou zijn
Er bestaat hier.
>> Dus hier, heb ik, in theorie, een programma hier, een van de belangrijkste functie
dat ik verklaren een int x gelijk aan 1.
Ik verklaar een ander int y is gelijk aan 2.
En dan ben ik het runnen van het door middel van deze functie
zogenaamde swap, waar ik neem aan dat dat het omwisselen van de twee waarden.
En dan ga ik print ze uit, toch?
Dat is wat ik wil dit programma te doen.
>> Dus laten we naar beneden komen en een kijkje nemen.
Dus als ik eigenlijk schrijf een andere functie, zoals je kunt zien,
we hebben onze functie hier.
En dan hebben we onze tweede functie hier.
Void swap.
Leegte gewoon betekent dat het niet van plan om iets terug te keren.
De naam van de functie is riep swap, en het is
naar intake twee variabelen, int en een int b, van uw [onverstaanbaar] functie.
>> Dus in wezen hier, we zijn langs x en y in deze functie.
En als we creëren dit-- dus we willen
een tijdelijke waarde te creëren, toch?
We gaan toe te wijzen dat een.
En dan een gaat nu gelijk b.
En b gaat om terug te zijn wanneer de temperatuur waarde werd
die een, want als je dingen wilt ruilen,
je kunt niet zomaar willen ruilen hen.
>> Je moet een buiten te houden hier, zodat het onthoudt
wat dat is, want zodra je er een swap, je vergeet
wat dat oorspronkelijke waarde was, toch?
Dus in theorie, dit programma zou moeten werken, toch?
Als ik wilde de swap twee, moeten ze ruilen.
Dus laten we lopen en zien of het werkt.
>> Dus zoals jullie kunnen zien, x ooit 1 en y was eens 2.
En als ik print het uit, x is nog 1 en y 2.
Hmm, dit programma lijkt niet te zijn werken op de manier waarop ik wil dat het werkt.
Wil iemand om een ​​schot te nemen op gissen waarom dit gebeurde?
Het heeft te maken met de manier waarop dat verschillende dingen zijn
opgeslagen in verschillende plaatsen in het geheugen.
>> OK.
Dus jullie geen zorgen te maken te veel over dit recht nu.
Maar weet dat kubus lokale variabelen a en b,
want hier in onze functie, we hebben verklaard a en b
de variabelen die bestaan binnen de kubus, die functie.
Maar zoals je kunt zien, de parameters die het neemt in werden opgeslagen.
Maar we waren niet echt iets terug.
We waren eigenlijk niet veranderen x en y.
We waren net het veranderen a en b.
>> We hebben x en y gekopieerd naar iets genaamd a en b.
Maar we eigenlijk nooit gemanipuleerde x en y zelf.
Zijn jullie het zien Hoe dat gebeurt?
Is dat we gewoon hebben gekopieerd over, maar we hebben niet echt gehouden
bijhouden van waar ze in het geheugen waren.
>> En nu de computer zoekt, oh, ik heb
lopen deze zaak door middel van deze mooie functie.
Maar x en y steeds x en y.
Niets is gebeurd met ze vanwege het feit
dat deze parameters en lokale variabelen
worden opgeslagen op een andere plaats in het geheugen.
Dit is een hogere concept dat we zullen
beginnen met het zien later in de cursus.
Maar weet dat dit Een probleem dat kan gebeuren
en dat we uitzoeken manieren over hoe om gaan met deze later in de cursus.
OK.
Prima.
Dus we de laatste begrip bent echt te dekken
dat gaat om bruikbaar te zijn voor de PSET deze week
zijn wat worden genoemd command line argumenten.
Dus Rob in zijn lezing ging door soort kort op hoe deze werken.
Hoofdzakelijk dat als je aan het schrijven bent
als een belangrijke functie, als we schreef functies alvorens in het verleden,
hadden we int main leegte.
En de reden dat we hadden er leegte was omdat onze programma's niet
moeten invoeren waarden te lopen, toch?
Toen ik liep Mario, heb ik niet nodig eigenlijk enkel type in iets
toen ik liep Mario.
Ik kon de gebruiker later gevraagd.
Maar dat niet altijd het geval zal zijn.
>> Bijvoorbeeld, in deze probleem week zet,
je gaat worden gevraagd, dat in Naast het runnen van uw programma,
je gaat te willen invoeren bepaalde dingen in een rechte zoals u
run je programma.
Dus de manier waarop we dat doen is genoemd een command line argument, dat
is als een argument u kunt invoeren direct
als je probeert om je programma uit te voeren.
>> Dus de notatie voor deze, het is vrij complex ogende,
maar het is echt niet zo moeilijk. Zo int main--
dat is gewoon uw belangrijkste functie.
In argc komma reeks argv haakjes.
Dus alles wat te zeggen is dat dit int al die argc-- heeft je te vertellen
is dat deze zijn het aantal de argumenten van de computer moet verwachten.
>> Dus een ding dat is echt belangrijk om bij te houden
is de fysieke naam van uw programma geldt als een van de argumenten.
Dus als ik wilde mijn programma draaien plus een extra command line
argument, ik ben eigenlijk zullen twee hebben.
Argc is eigenlijk gaat om twee.
En dan touwtje argv bracket-- dat alles doet,
het geeft me een array van strings dat is
ga gewoon weer te geven en op te slaan wat al die command line argumenten.
>> Dus bijvoorbeeld, als ik wilde om dit te hebben programma, ./copy infile outfile, toch?
Dat is gewoon een typische Linux-commando.
Wat is eigenlijk argc?
Hoeveel opdrachtregelargumenten zijn er eigenlijk in deze?
Alle dit doet is een kopie van een infile van de naam van een bestand
en kopieert het in een ander bestand, toch?
Dat is dit allemaal doet.
Zoals je kunt zien, ik doe het op een lijn zonder dat hoeft het programma.
>> Wat is onze argc in dit geval?
Hoeveel argumenten hebben we?
PUBLIEK: Drie?
ANDI Peng: We hebben drie, precies.
Dus het is zeer intuïtief denk dat het gewoon
de infile en outfile.
Maar dat de fysieke naam programma je draait telt als één.
Dus in dit geval, argc is eigenlijk drie.
Hoe zit het, wat is argv 0?
Vergeet niet, alle van de command line argumenten
werden opgeslagen in een array van strings.
Dus als ik probeer om toegang te krijgen, wat zou argv beugel 0 geef me?
>> PUBLIEK: [onverstaanbaar].
ANDI PENG: Precies.
Het zou me de stip te geven slash exemplaar, want dat is
de 0-element, de eerste element van mijn array.
Hoe zit het met argv 1?
>> Publiek: INFILE.
ANDI Peng: INFILE, precies.
Hoe zit het met argv 2?
Publiek: outfile.
ANDI Peng: outfile.
Dit is nu een beetje lastig.
Wat doen jullie denken argv 3 gaat geven me
als ik probeerde te drukken dat uit?
>> PUBLIEK: [onverstaanbaar]?
>> ANDI Peng: Had je een hand omhoog?
Ja.
>> Publiek: Een alternatief.
>> ANDI PENG: Precies.
Dus onthoud in de lezing die we aan het einde van een wedstrijd iets
riep een null-terminator?
We zullen ook in dit verderop in de klasse.
Maar weet dat in de notatie, de manier waarop uw computer
weet dat het is het einde van de array is dat het
zet zoiets als een null terminator of een streepje nul.
>> Dus als u probeert te openen argv 3, je gaat dit dashboard 0 geraakt.
Dit is nog meer een strikvraag.
Hoe zit het met argv 4?
Dus dit is afgelopen null terminator, voorbij de grenzen van onze array.
Wat denk je dat er gaat gebeuren wanneer we proberen om dat te doen?
>> PUBLIEK: [onverstaanbaar]?
ANDI PENG: Sorry?
Zeggen dat een beetje harder?
>> PUBLIEK: [onverstaanbaar].
ANDI Peng: Ja.
Dat is de naam van de gebied dat u zult waarschijnlijk te krijgen.
Maar weet dat argv 4-- die u toelaat om toegang
plaatsen in uw computer geheugen dat je echt
niet aanraken, want nu weet je wat argv is.
Je weet dat het een array van grootte 3 dat heeft dot kopiëren infile en outfile.
>> Als u probeert om zo ver gaan verder dan dat dat je langs de null-terminator,
uw computer heeft waarschijnlijk opgeslagen iets in argv 4.
En je echt niet mag worden toegang krijgen tot argv 4,
omdat je een bestand hebt kast en je bent alleen
toegang krijgen tot die drie planken.
Maar als je probeert om veel verder te komen de plank waar u zijn toegestaan,
je gaat beginnen knoeien met andere dingen in het geheugen van uw computer.
Dat gaat echt, echt slecht.
Zo weet alleen dat.
Wees zeer voorzichtig dat u niet zomaar beginnen
toegang tot elementen in een array die waren niet in wat je wilde maken.
Yep.
>> OK.
Dus we gaan naar een ander te doen terminal bijvoorbeeld hier.
OK.
Dus Rob snel in collegezaal de andere dag ging
door dit voorbeeld, waar hij had int main int argc reeks argv
beugels, die is me te vertellen dat ik ben ga command line argumenten.
>> Hij heeft, als argc gelijk evenaart 2-- herinneren,
evenaart gelijken betekent vergelijking.
Als deze gelijk is aan 2, dan ben ik perse gaan hello,
ongeacht het eerste element van de array.
Else print, hello wereld.
Wat gaat dit gebeuren in wezen?
Kan iemand gewoon uitleggen Engels wat dit programma aan het doen is?
Ja.
>> Publiek: Als iemand getypt in een commando en zei dat hun voor- en achternaam,
het zal niet alleen af ​​te drukken eerste en zeggen: hallo,
wat uw voornaam is.
>> ANDI Peng: OK, laten draaien.
Dus bijvoorbeeld, als ik te maken Dit bestand maken to-- hallo hallo
to-- wat wil je dat ik invoeren?
>> PUBLIEK: Voor- en achternaam.
>> ANDI Peng: Voor- en achternaam?
Spaces?
>> Publiek: Ja.
>> ANDI Peng: Kan iemand vertellen me nu, wat is argc?
Gewoon daar?
Oeps, sorry.
Laat me terug te gaan.
Hoeveel opdrachtregelargumenten zijn-- jullie niet echt zien.
Maar ik zal proberen om in te zoomen.
Ik probeer.
Ja, er is drie, toch?
Het is dot slash hello, het is Andi, en het is Peng.
>> Dus wat doen jullie denken dit programma zal worden uit te printen?
Oh.
Oh sorry.
Verkeerde naam.
Het afdrukken van, hello wereld.
Heeft iemand wil uitleggen waarom dat gebeurt?
Ja?
>> PUBLIEK: [onverstaanbaar].
ANDI PENG: Precies.
Dus hier, zijn voorwaardelijk is, indien argc gelijk gelijk 2.
Dus alleen in het geval dat er twee commandoregel argumenten.
Dan ga ik om af te drukken, hallo, wat het ook is.
Maar anders, ik ga afdrukken gewoon, hello wereld.
Zo heeft iemand wil voor mij een voorbeeld geven
van hoe ik in staat om daadwerkelijk zou zijn krijgen om de waarde van argv 1 afdrukken?
>> Wat zou ik moeten invoeren hier?
Slechts één ding, toch?
Omdat de stip hallo tegen al geldt als het eerste argument.
Ik heb slechts één meer.
Dus dot hallo als ik gewoon doen Andi.
Hallo, Andi.
Heeft iedereen begrijpen waarom dat gebeurt?
Ja.
>> Publiek: Dus de ruimte tussen de commando line-- is dat [onverstaanbaar]?
ANDI PENG: No.
Zodat de ruimte in een opdrachtregel argument, x, om uw computer te vertellen
dat dit het begin van een nieuwe reeks.
Dus touwtje argv hier-- deze winkels al uw commando lijn argumenten
in strings.
En zo de ruimte in de opdrachtregel argument-- dat alles doet is u te vertellen,
Dit is het einde van een koord en het is tijd om verder te gaan naar een andere.
>> Ja.
Dit is vrij belangrijk voor uw PSET, omdat je
zullen testen hiervan.
Dus heeft iemand Voor vragen over dit?
OK, cool.
Ja?
>> Publiek: Dus de reden dat je zou zet integer argument calc plaats
van [onverstaanbaar] zou zijn wanneer je wilt om aanvullende informatie te typen
[Onverstaanbaar]?
>> ANDI Peng: Ja, precies.
Sommige programma's zullen vereisen het invoeren van een command line argument
dat zij passen in en gebruikt deze.
Ja.
Publiek: Dus wat als [onverstaanbaar]?
>> ANDI Peng: Nou, wat heb ik om vervolgens te veranderen in mijn programma?
>> Publiek: Slechts 3.
>> ANDI Peng: Waarom is dat gebeurt, denk je?
>> Publiek: Omdat de [onverstaanbaar].
>> Publiek: Je zou moeten verander het in 2 [onverstaanbaar].
>> Publiek: 1 en 2.
ANDI PENG: 1 en 2, precies.
Dus in dit geval, zou je waarschijnlijk wil twee printf statements-- hebben
een die argv 1 gedrukt en degene die gedrukte argv 2.
Hier.
Ik kan eigenlijk doen dat echt snel.
Daar ga je.
Oh.
Niet helemaal wat je wilde.
Maar als jullie prutsen met de opmaak, zal het naar buiten komen.
Ja.
Cool.
Ik weet dat we een beetje kort op tijd.
Maar ik ga gewoon om snel te besteden paar minuten gaan door behulpzaam--
Publiek: Je hebt twee minuten.
ANDI Peng: Ik heb twee minuten?
Dankjewel.
Enkele snelle PSET tips.
Dus voor deze PSET, ik beveel, zoals ik al zei, iedereen om de spec lezen.
U zult het schrijven van drie programs-- één riep initials.c, een zogenaamde caesar.c,
een zogenaamde vigenere.c.
Enkele belangrijke tips die jullie echt wilt
dus in mind-- te houden er is deze functie
riep atoi-- zoals ik willen zeggen, a trois.
Onduidelijk of dat eigenlijk hoe je het zegt.
Maar alles wat het doet, is het invoeren van.
Het zet een string naar een int.
Dus vertegenwoordigt een ASCII i integer.
Het is gewoon het omzetten van ASCII waarden waarden integer.
Dus onthoud argv, de array die winkels al uw commando lijn arguments--
het hen allemaal opgeslagen als strings.
En dus als je wilt om te kunnen een ervan wordt een integer,
je gaat te hebben deze waarde hier te gebruiken.
>> Modulo, zoals wij behandeld eerder in de klas vandaag,
hiermee kunt u het hebben restant van wat je hebt.
Dus als we echt, echt grote aantallen in Caesar,
wat als we het einde van een reeks van Vigenere?
Hoe ga je om te kunnen om dat te wikkelen rond?
Als ik raakte z en ik wil is om terug te gaan naar een,
hoe ga ik om te krijgen dat te wikkelen rond?
Waarschijnlijk wilt gebruiken modulo daar ergens.
>> Ten tweede, rondkijken uw bibliotheek. ctype.h.
Dat is een nieuwe bibliotheek die we hebben.
Je zult een hoop heel erg vinden, bruikbare functions-- isupper, islower,
toupper, tolower, isAlpha, et cetera.
Alle functies die zeer nuttig zullen zijn als je probeert te achterhalen,
is dit personage een kleine letter?
Hoe kan ik dit omzetten string naar een hoofdletter?
Al deze dingen zal heel zijn, zeer nuttig zijn voor uw PSET.
OK.
>> Kantooruren vanavond zijn om 08:00 11:00 in de TEAL klas morgen
evenals woensdag en donderdagavond.
De openingstijden zijn in commons.
Ik raad sterk aan jullie Alle meteen aan de slag,
omdat je niet wilt dat jongen die donderdagavond heeft problemen
het indienen van uw PSET en zoals, ik weet niet wat te doen.
Ik begon, ik klaar, ik ingediend.
Probeer jezelf te geven wat ruimte, omdat in de code altijd problemen optreden.
U wilt er zeker van dat je jezelf
veel tijd te kunnen de psets voltooien.
Cool.
Ik zal hier in de buurt hangen.
>> PUBLIEK: Is dit al online?
ANDI Peng: Ik weet niet of het is online al, maar het zal zijn.
Ik zal hier in de buurt hangen als iedereen heeft vragen al.
Bedankt voor het komen.