>> Hoogleraar: Dus de agenda voor deze week, niet zo veel spullen.
Maar hopelijk zeer, zeer behulpzaam en relevant zijn voor jullie deze week.
Maar we gaan besteden misschien 15, 20 minuten gewoon snel praten
over de lijst met links.
Link lijsten gaan worden gedekt op de quiz.
Dus misschien zou het zeer nuttig zijn een beetje over wat dat is te leren.
>> We gaan naar de grote besteden meerderheid van de afdeling van vandaag
gaan over quiz nul praktijk problemen.
En dan gaan we misschien 20, 30 minuten sparen aan het einde van alle resterende vragen
iedereen heeft.
>> En dan, de laatste vijf minuten, ik ga
een pomp omhoog toespraak voor de quiz te geven.
Jullie willen allemaal hier voor zijn.
Omdat het gaat om een ​​goede tijd te zijn.
>> Oké, dus sommige materiaal op de link lijst.
Hoe ze meestal gestructureerd is je hebt wat heet een node, toch?
Je hebt deze dingen genoemd nodes, welke structuren zijn.
Ik ga over de vraag hoe om te creëren een knooppunt in de volgende dia.
Maar in wezen alle gekoppelde lijsten is bestaat uit gegevens die
is aaneengeregen via pointers.
>> En zo het voordeel dat we hebben het gebruiken van een gekoppelde lijst over,
misschien als een matrix, is dat in een array
je één aaneengesloten blok nodig geheugen allemaal in dezelfde plaats, een
na de andere, kunnen die hebben.
Terwijl een gelinkte lijst, je kon hebben willekeurige kleine stukjes van het geheugen
over uw computer aaneengeregen door pointers.
>> En op deze manier toegang tot informatie
dat komt achter andere, na elkaar
zonder alleen een enorme brok van geheugen in de computer ergens.
En dus dit is een van de belangrijkste waarom gebruiken we lijst met links.
>> Ten tweede, het is heel gemakkelijk om dynamisch verkleinen de link lijst want in array,
wanneer u verklaren een array, je hebt een bepaalde ingestelde waarde.
Laten we zeggen dat ik wilde maken een array van 10 integers.
Ik maak een serie van 10 integers, en dat is het.
Het is 10.
Ik weet niet wat te doen na dat.
Als ik wilde het 11 te maken, kan het niet doen.
Als ik wil het 9 te maken, kan het niet doen.
>> Terwijl in een lijst met links, kunt u toevoegen en verwijderen en plaats waar u wilt.
Je kunt dynamisch formaat van uw structureren hier, uw datastructuur.
En dat geeft ons veel meer toegevoegde flexibiliteit
dat doen we niet typisch hebben arrays.
>> Iedereen verward over de fundamentele structuur van hoe een link lijst
of waarom moeten we een over een array gebruiken?
Ja, we gaan over in detail hoe je nu eigenlijk een maken.
Maar dit is gewoon een soort van algemene zin op dit moment.
Koel.
En zo arrays worden aaneengeregen van deze mooie kleine dingen
zogenaamde knooppunten.
Al een knooppunt is een type struct.
Vergeet niet, een structuur is als je wilde een bepaald type variabele creëren
in C die niet reeds bestaan, u, als programmeur,
kan eigenlijk creëren dat zelf.
>> En dus dit soort gegevens structuur van een node,
daadwerkelijk zijn gemaakt door ons, dat niet voorkomt in C op zichzelf.
En de manier waarop u maakt men u
de kop van typedef struct, die de compiler ik ben vertelt
punt een structuur te creëren.
>> We gaan noem het "knooppunt."
En de binnenkant we gaan een variabele verklaren,
die gaat naar een waarde op te slaan.
En dan gaan we ook naar hebben een pointer genaamd "volgende"
die naar de volgende knooppunt in de lijst met links.
En dan eindig je dat af door gewoon opnieuw herhalen knooppunt dus
de compiler weet, OK Dat is het einde van mijn structuur.
>> En dus op deze manier, we zijn soort het creëren van een schattige kleine serie
soort dingen met een waarde en van een wijzer.
En je kunt ze allemaal koppelen samen met die pointers.
Zodat ze allerlei kunnen worden aaneengeregen in een keten.
>> Koel.
Hoor je dat een beetje beter?
>> Publiek: Ja.
>> Hoogleraar: Oké.
Dus de manier waarop, zoals jullie kunnen zien, een typisch koppeling lijst is gestructureerd
is dat je een hoofd.
Je hebt het hoofd waarde, die niet is wordt opgemerkt andere pointer.
Maar het gaat om het punt op, of verwijzing, een ander knooppunt.
Het knooppunt na het gaat om te verwijzen naar de knooppunt na dat, en zo verder en zo voort
totdat je uiteindelijk hit het einde van uw link lijst.
En je gewoon niet een pointer daar.
>> En zo denken als, aan een ketting, of zelfs als iemand van jullie gemaakt, weet ik niet,
zoals met Fruit Loops toen je klein was.
Je zou string ze samen en draag ze rond je nek.
Denk dat het precies hetzelfde.
Je hebt deze kleine dingen die je kan achter elkaar dat punt één
na, de een na het, enzovoort, enzovoort
totdat je een keten van een datastructuur
die u kunt gebruiken zoals u wilt.
>> Zodat de manier waarop deze zouden we meestal voegen of te verwijderen
elk knooppunt van een link lijst zeer verschillend
afhankelijk van waar dat knooppunt.
Dus, bijvoorbeeld omdat pointers zijn altijd
die op een specifieke waarde, wanneer u verwijderen of plaats een knooppunt,
wilt u ervoor zorgen dat de aanwijzer is al wijzend op de juiste dingen.
>> Dus als je wilde potentieel voegen een nieuw knooppunt met de waarde van één
in een gesorteerde koppeling lijst, wij allen hier weten
uit het beeld dat gaat gaan tussen hoofd en twee, toch?
Omdat men past daar.
Maar de manier waarop we zouden doen is door eerst dereferentie de pointer
van kop en verzenden die één.
>> Maar we naar een probleem kom hier.
Kan iedereen zien wat het probleem is als we eerst dereferentie
de wijzer van kop tot één?
Welk probleem kunnen we tegenkomen als we proberen om deze toe te voegen aan de voorkant van ons aanbod?
>> PUBLIEK: [onverstaanbaar]
Hoogleraar: Precies.
Dus hier hebben we een pointer die was eenmaal gericht van de top tot twee.
Maar als je te ontdoen van die krijgen wijzer, u wijzen op een,
we hebben nu geen idee waar te gaan om twee te vinden.
Want zoals ik al eerder zei, heb je een reusachtige brok van geheugen in de computer.
Al deze knooppunten kunnen willekeurig worden afgewisseld
in elke plaats in uw computer.
En je weet niet hoe om te gaan over het vinden van dat.
>> En dus moet je pointers hebben wijzend naar alle knooppunten eind.
Of anders als je per ongeluk dereference een
zonder eerst toewijzen een waarde eerste, je bent
gewoon om te verliezen alles achteraf.
>> Dus wat we gaan doen is, je zou eerst
willen een pointer op te maken het knooppunt dat u wilt invoegen.
Wijzen naar de plaats waar u willen voegen aan,
en dan daarna je kon hoofd terug wijzen naar één.
>> Heeft dat zin om iedereen hier?
Grote.
Zie het als net als een ketting.
Als je een keten toe te voegen, het is een soort van intuïtieve
hoe je het zou gaan over het plaatsen van dat.
>> OK, dus dat is eigenlijk veel korter dan ik dacht dat het zou zijn,
vijf minuten spiel op de link lijsten.
Maar dat je jongens hebben de basisidee van wat dat is.
>> Hier hebben we de agenda voor de quiz nul.
Laat dit niet intimideren.
Ik weet dat het een veel informatie.
Het ziet er erg eng.
Het is ook een veel, ik denk, CSC soort termen.
Dingen als hexadecimale strings, pointers, dynamisch geheugen toewijzingen
zijn heel eng klinkende termen.
>> Maar we gaan om ze te breken naar beneden, doe wat oefening problemen
zodat jullie allemaal zijn klaar voor deze test.
Hoeveel van jullie hebben al begonnen met studeren?
>> Oké, jullie waarschijnlijk wilt om te beginnen aan de slag
op dat, omdat de quiz is morgen.
Of donderdag voor sommigen van jullie.
Ja, dus we gaan om te gaan meer dan enige oefening problemen.
Als jullie willen allemaal te nemen op een vel papier, een potlood.
We gaan gewoon door te brengen van de overgrote meerderheid van de afdeling van vandaag
gaat over enkele van die dus jullie hebben een idee van wat je kunt verwachten op de quiz.
>> OK.
Een paar van de logistieke Gegevens als goed, voor iedereen
die niet naar die verwijzen is er, als ga je naar cs50.yale.edu, aan de voorzijde
Deze pagina is er een link dat zegt: "Over Quiz Zero."
Link brengt u daar.
Als u nog niet gelezen, lees het.
Want het vertelt je echt belangrijk informatie over de quiz.
>> Ik ga dit te trekken uit dat alleen maar omdat, fysiek,
als jullie weten niet waar om te gaan, zullen we problemen hebben.
En dus als laatste in termen van A N, naar de wet school auditorium.
En als laatste begint met P Z, naar Davies Auditorium.
En dit geldt alleen voor mensen in de sectie woensdag.
>> Als je met de quiz op Donderdag, ga je naar SSS 114
waar uw college doorgaans is.
PUBLIEK: [onverstaanbaar]
Hoogleraar: O tot Z, je gaat naar de Davies auditorium.
Ik ga om dat te veranderen, toch?
>> Oh, ja, je automatisch mislukken.
>> Oh ja, dat ben jij Christa.
Ja, mijn slechte.
Yep, O tot Z, je gaat naar Davies Auditorim.
Ik ga dit oplossen zodra ik uploaden.
Ja.
>> En dan ook nog iets belangrijk voor de geest
is dat woensdag, als je officieel ingeschreven in de sectie woensdag,
moet u uw quiz op woensdag.
En als je bent ingeschreven in donderdag, moet u uw quiz donderdag nemen.
En het is tijdens de les de tijd.
Waar, ik denk dat het net om 01:00 02:15 op woensdag en 2:30-03:45
op donderdag.
>> Als u een onverzoenlijke conflicten, Dean's excuses zijn het enige,
Helaas kunnen we nemen.
Want we hebben een meeste verzoeken
om over te schakelen van woensdag tot en met donderdag.
Die we niet kunnen nakomen, tenzij We hebben een verzoek van een Dean's.
>> OK.
Dus voordat we aan de slag op een paar praktijk problemen,
Ik ga gewoon om over te gaan Andy's handige tips voor succes.
Jullie, als je studie, je echt wilt oefenen schrijven van code met de hand.
De eerste keer dat ik ooit nam een ​​CS quiz, had ik niet
de praktijk het schrijven van code met de hand voor en het was zeer
schokkend hoe moeilijk het was.
>> Als jullie niet te krijgen in de gewoonte van het typen van alles,
het komt heel natuurlijk zijn kunnen hebben autocompleted
beugels en puntkomma's daar.
Als je het uitschrijven met de hand, soms is het
heel, heel gemakkelijk om een ​​puntkomma te vergeten, of vergeten om een ​​beugel te sluiten,
of vergeten om een ​​dubbele punt te sluiten, of zoiets.
>> Dus als je code schrijft met de hand, het is een heel ander gevoel.
Dus jullie, wanneer u werkt enkele van de praktijk problemen,
Het zou goed zijn om echt te oefenen vandaag.
Of morgen, denk ik, als je het nemen van de quiz op donderdag.
>> Ten tweede hebben we de laatste, zoals, waarde van de praktijk van acht jaar
quizzen online.
Quiz van dit jaar zal waarschijnlijk zeer, zeer vergelijkbaar met elk van hen.
Ze zijn allemaal zeer vergelijkbaar.
Je soort van te krijgen in de stijl van het soort vragen
dat wij vragen, het type functies die we zullen schrijven,
et cetera, et cetera.
>> Dus neem de praktijk quizzen, vooral onder tijdsdruk.
75 minuten te doen de quiz is niet veel tijd.
Het is heel, heel lang.
En dus jullie echt wilt om ervoor te zorgen dat jullie zijn
in de gewoonte van het schrijven code met de hand snel.
Omdat je niet wilt dat de eerste tijd om een ​​quiz van die lengte te zien
op uw quiz.
Willen jullie echt om ervoor te zorgen dat u vooraf te oefenen.
>> Ten vierde, wil je de recensie lezing en sectie glijbanen.
Je hoeft niet om dingen te onthouden.
Eigenlijk is iedereen toegestaan ​​een een vel wit papier notities,
voor en achter.
Jullie kunt typen of schrijven.
Als je merkt dat je hoeft te onthouden iets, zet het neer op dat blad.
>> Ik garandeer je, je niet wilt vast te zitten in het midden van die quiz
het zijn als, oh ja, wat is het runtime van dit soort ten opzichte van dat soort.
Zet ze gewoon neer en kopiëren rechtstreeks uit de notitie vel.
Dan kun je eigenlijk alleen maar gebruik maken van uw hersenen om na te denken over de problemen
in plaats van om de feiten te herinneren.
En dus echt profiteren van elke niche gegevens
dat je denkt dat je nodig hebt om te onthouden, plop het neer over de herziening vel.
>> OK, vragen logistiek ten aanzien van de quiz
voordat we beginnen met een aantal quiz problemen oefenen?
Ja?
>> Publiek: Ik heb niet de kans gehad om te kijken naar de quiz [onverstaanbaar]
maar gaat het om toepassing meestal,
of wordt er ook gaat worden, als, kennisvragen?
>> Hoogleraar: Het is een stuk.
Dus, de manier waarop ik zou de quiz beschreven
is-- ik samen enige oefening problemen
dat ik getrokken uit alle quizzen.
Maar je zult zien dat er twee belangrijke soorten vragen we je vragen.
>> Een daarvan is een zeer laag niveau detail van de spullen.
We geven u een klein stuk van de code geven en zeggen, is er een fout hier?
Wat zou worden afdrukken van hier?
Wat zal deze code te produceren, et cetera.
Dus zeer laag niveau informatie details.
>> En aan de andere kant, we hebben erg hoog niveau kennis gebaseerde vragen.
Kunt u uitleggen wat de verschil tussen een binaire zoekopdracht
en een lineaire zoektocht is?
Waarom zouden we willen gebruik maken van een over de ander?
Misschien, wat is GDB?
Daarom willen we GDB gebruiken?
Hoger niveau, meer fundamentele begrip vragen.
Dus je zult een mengsel van te zien de twee van hen op uw quiz.
>> Iets anders voordat we hoofd recht in het?
OK.
Publiek: Een meer.
Hoogleraar: Oh, nog een.
Sorry.
>> Publiek: Ja, het is al goed.
Dus je zegt 75 minuten is te kort, als het onwaarschijnlijk
dat we zullen eindigen?
Of, zoals, 75 minuten is precies zoveel tijd
als we zouden nodig hebben als we waren adequaat voorbereid?
Hoogleraar: OK, dus het quiz is uitdagend.
Het is zeker een uitdaging.
Vind je jezelf kort op tijd.
Je bent waarschijnlijk gaat raken, zoals 10, 15 minuten te gaan, en het zijn als, shit.
Ik heb zo veel meer te doen.
En dat is helemaal prima.
Iedereen gaat op dezelfde manier voelen.
>> Gewoon zeer bewust van hoeveel tijd heb je.
En dat is waarom ik u vertellen jongens doen de praktijk quizzen.
Omdat het echt geeft een groot gevoel van wat de quiz zal zijn als.
Dus als je jezelf zijn kunnen de praktijk afgewerkte
quizzen in een goede hoeveelheid tijd, kun je jezelf goed tempo,
dan zul je niet een probleem op woensdag of donderdag.
>> Koel.
Dus als iedereen wants-- denk ik de meeste mensen hebben vellen papier
al uit.
Ik ga in wezen gewoon geven u voorbeelden van vragen,
geven jullie, zoals een paar minuten om ze te doen.
En we zullen gaan over als een klasse wat de antwoorden op hen.
>> Dus dit is een typische vroeg vraag we zullen
vraag u, alleen het omzetten getallen tussen verschillende bases.
Binair, zoals jullie kunnen recall, is basis twee.
Decimaal basis 10, of wat we als mensen meestal te interpreteren.
Hexadecimaal is basis 16, welke nul door middel van negen evenals A tot en met F.
>> Dus er is vier nummers ben ik vragen jullie om hier te zetten.
Ik geef je drie tot vier minuten na te denken over hoe
we zouden gaan over het oplossen van dit.
>> Publiek: Mogen we rekenmachines?
>> Hoogleraar: U zult niet nodig rekenmachines, ja.
Ik denk elementaire Daarnaast denk ik, is jullie allemaal zal worden gevraagd om te doen.
>> En net dus ik heb een soort van een gevoel wanneer iedereen klaar is, kijk omhoog,
golf, ik weet het niet, glimlach, kijk blij zijn als je klaar bent.
Ja.
Misschien een paar minuten.
>> Oké, laten we brengen in.
Ik heb met opzet gaan geven jullie minder tijd
dan heb je waarschijnlijk nodig hebt om sommige van deze problemen,
gewoon omdat ik wil ervoor zorgen dat de krijgen we door een bos van problemen.
Dus geen zorgen als je dat niet deden hebben een kans om te voltooien.
Helemaal OK, zolang je hebt een idee van hoe om te gaan over dit.
Dus laten we verder gaan en doen de eerste.
>> Dus eerst, wil iemand me vertellen in binaire, wat elk van deze cijfers doen
vertegenwoordigen in termen van hun waarden?
Ja?
>> Publiek: Twee tot de stroom nul, 2-1.
Hoogleraar: Precies.
Zo.
>> Juist, zo typisch als we in de basis 10
al deze vertegenwoordigen zijn, zoals, 10 naar de basis van nul, toch?
Dat is uw één plaats.
Al uw 10's plaats is 10 tot de macht van één.
U 100's plaats 10 de macht van twee.
>> Wat base je in gaat te maken met precies hetzelfde,
gewoon met een andere basis.
Dus binaire, alles wat is basis twee.
Je gaat om te zetten alle cijfers in twee naar wat de macht
van dat cijfer.
Dus in deze zin zijn we kan een gemakkelijkere manier hebben
te kunnen optellen of Kortom alle nummers in orde
om te zetten in de basis 10.
>> Dus doet iedereen wil me vertellen wat de antwoord op de eerste is in basis tien?
>> PUBLIEK: Twee, [onverstaanbaar]
Hoogleraar: Yeah.
Publiek: 42.
Hoogleraar: 42, daar ga je.
Dus de manier waarop we dit antwoord was doet twee de eerste, dat is twee.
Plus twee derde, die acht.
En twee aan de vijfde, die is wat er overblijft.
Je vatten ze op en het is 42.
>> Is er iemand in de war over hoe we dat gekregen?
Zo fundamenteel naast, net als Ik zei, je moet wel ok.
Zo niet, nou ja, we kunnen ook de praktijk dat.
Maar dat is in orde.
Koel.
>> Wil iemand mij geven antwoord op de tweede ook?
>> 50?
Goed.
Iedereen in de war over hoe we dat ofwel?
Cool, ik heb het antwoorden op de volgende dia.
Dus geen zorgen als je nodig om het te kopiëren.
>> OK, dus hexadecimaal is een beetje lastiger.
maar ik ga je laten zien jongens een snelkoppeling voor hoe het te doen.
Dus hexadecimale, zoals u vergeet niet, al is zijn 16.
En omdat wij als mensen niet echt hebben 16 nummers te vertegenwoordigen dat,
we gaan van nul tot negen, dat onze eerste 10 waarden, en dan A doen we door F,
die de volgende zes waarden.
>> En dus is de makkelijkste manier om te gaan van elk binair getal naar hexadecimaal
om te breken in twee helften.
En dus elke binaire getal we geven zul je waarschijnlijk acht cijfers.
Je kunt gewoon breken ze in het midden.
>> Dus de eerste een-- een één, een een, een, een, een één.
Soort denken dat het op, je weet wel, tekenen een schuine streep of een komma tussen hen.
En je kunt gewoon omzetten direct wat
Dit is de eerste aantal hexadecimale,
en wat hier is de tweede hexadecimale.
>> Dus onthoud uit gewone notatie, wat hexadecimale waarden beginnen?
>> Publiek: Zero.
>> Hoogleraar: 0X.
Dus we weten dat elke keer vragen wij u willekeurig aantal zetten naar hexadecimaal,
of wanneer u elke zien nummer dat begint met 0X,
je weet dat het een hexadecimale waarde.
>> En dan zul je worden gevraagd om bepalen wat deze twee cijfers zijn.
En de manier waarop je dat doet, tellen omhoog dat de helft en tellen tot de helft.
In dit voorbeeld, wat zou een, een, een, een?
Welke waarde zou dat zijn?
Dat zou F, toch?
Dat zou 15.
>> Dus dit F. Eén zou zijn, een, een, een hier ook
F. Dus een, een, een, een, een, een, een, één in hexadecimaal, al is het is 0xFF.
Omdat dit de helft vertegenwoordigd F de waarde van 15,
en dit de helft vertegenwoordigde F, de waarde 15.
Want vergeet niet, we zijn tellen van nul tot negen.
Een is net 10, B is net 11, F-15.
>> Is dat zinvol voor iedereen hoe we kregen van binair naar hexadecimaal?
>> Publiek: En hoe hebben we krijgen 15 van een, een, een, een?
Hoogleraar: Ja, dit is binair, toch?
Voorstellen dat dit is gewoon een binair getal.
Dus je hebt twee om de nulde, één.
PUBLIEK: Oh, OK.
Dus je gewoon totaal het uit.
>> Hoogleraar: Ja, en dan je gewoon totaal dat uit.
Dat is alles wat het is.
>> Publiek: OK.
>> Hoogleraar: OK.
>> Publiek: Dus ga je van binaire naar decimaal naar hexadecimaal?
>> Hoogleraar: Dat is de makkelijkste manier om dat te doen, ja.
Je gaat niet naar decimaal omdat decimaal alleen nul tot negen.
We zijn gewoon een soort van Dit splitsen in twee.
>> PUBLIEK: [onverstaanbaar] gebruik decimaal te vinden
wat overeenkomt met maximaal hexadecimaal.
Hoogleraar: Ik bedoel, je bent tellen met behulp van elementaire wiskunde.
Publiek: Ja.
Hoogleraar: Ja, vrij veel.
Het is een beetje verwarrend.
Maar weet dat je kan verdelen, ongeacht
Deze waarde is in slechts helften.
Kijk, wat is dit in binaire?
Welk nummer is dat?
Het gaat zijn iets van nul tot F.
>> Hier wordt ook gaat worden iets van nul tot F.
En dan kun je gewoon die twee daar.
>> Publiek: OK.
Hoogleraar: Yep.
OK.
Dus jullie willen Probeer de volgende men dan?
Nul, een, een nul, een, nul, een nul.
Ik zal jullie geven als 30 seconden, omdat je waarschijnlijk niet wist
de truc om hoe dit eerder te doen.
>> OK, iedereen wil dit een te krijgen een schot?
>> 0X5A.
Hoogleraar: 0X5A.
5a.
Goed.
Dus dit zou hier be-- je wilt om ons te vertellen hoe heb je dat?
Ten eerste, hoe heb je de vijf?
>> Publiek: Omdat nul, een, nul, een vijf.
>> Hoogleraar: Heeft iedereen te begrijpen Daarom nul, één, nul, een vijf?
Je hebt één hier kwam.
Je hebt niets in twee tot de eerste.
In twee van de tweede, je hebben één, die vier.
Zodat je de vier plus toevoegen de een, je hebt vijf.
Iedereen goed?
OK.
En wat deze zijn en waarom?
Welk getal komt overeen met A?
>> Publiek: 10.
>> Hoogleraar: En wat dit in de basis twee?
PUBLIEK: [onverstaanbaar]
Hoogleraar: Precies.
Dus dit tweede waarde zou hier 0X5A.
>> Iedereen goed over hoe om te zetten?
Het is een stuk eenvoudiger dan je denkt dat het is.
Ik wil alleen maar om ervoor te zorgen weet je handige tips
en trucs voor hoe dat te doen.
>> PUBLIEK: Waarom kan je gewoon splitsen het in het midden als dat?
Net als, OK, ik ga alleen naar zorg over deze eerste [onverstaanbaar]?
>> Hoogleraar: Want dat is eigenlijk de manier hexadecimale waarden worden vertegenwoordigd.
0X, dat eigenlijk betekent niets anders dan je te vertellen
dat het een hexadecimaal getal.
En dit altijd vertegenwoordigt de eerste vier cijfers.
En dit altijd vertegenwoordigt de laatste vier cijfers.
En dus deze twee cijfers net corresponderen met verschillende bits.
>> Publiek: Dus we zullen always--
>> Hoogleraar: Je bent altijd gaat acht waarde stukjes te krijgen.
>> PUBLIEK: Is dat net als een ding hier of die iets over?
Hoogleraar: Dat is gewoon een ding in computers, yep.
Publiek: OK.
Geweldig.
>> PROFESSOR: Ook, dus in dit voorbeeld we omgezet van binair naar decimaal,
en van binair naar hexadecimaal.
Jullie willen ook ervoor zorgen dat u de praktijk gaat het andersom.
Dus als ik 0xFF gaf je, je kon trekken die in binaire, toch?
>> Je zet F in binaire, die één, één, één, één,
omzetten F naar binair, die is een, een, een, een.
>> Dus kunnen wij u vragen om te doen andersom.
Dus decimaal naar binair, of hexadecimaal naar binair.
Dus je wilt maken dat u weet in beide richtingen.
Wij zullen u waarschijnlijk vragen een combinatie van beide.
>> Ja, heb je een vraag?
Ik kan see-- je goed bent?
Publiek: Ja.
Hoogleraar: OK.
Ben ik goed om dit te wissen?
Grote.
>> Oké, dus antwoorden zijn hier als iedereen is nieuwsgierig later op en in de war raken.
OK.
>> Publiek: Maakt het uit of we zetten onze brieven in de hoofdstad of kleine letters?
>> Hoogleraar: Het doet, omdat hexadecimaal, volgens afspraak,
alle personages worden hoofdletters.
Dus A tot F zijn gaan hoofdletters zijn.
Als je een kleine letter a, ik weet het niet als we noodzakelijkerwijs markeren het verkeerd.
Maar theoretisch, dat is technisch niet
hoe je zou moeten hebben.
Dus ze moeten allemaal hoofdletters.
Ja, goede vraag.
>> OK.
De tweede vraag.
Overwegen om hier dit mooie programma.
Ik zal de vraag te stellen, Ik kom terug dit.
>> Dus, ten eerste, wat is de binnenkant van standaard io.h dat is van belang voor het programma?
Ten tweede, wat leegte doet betekenen in de regel drie?
En ten derde, wat betekent terugkeren nul vanaf belangrijkste, zoals lijn zes, in het algemeen betekenen?
Als jullie willen om die te schrijven naar beneden, want ik heb om terug te schakelen
naar de dia gewoon zo kun je de code te zien.
Dit is een voorbeeld van, net als, misschien een hogere vraag, waar wij u vragen
wat dingen betekenen in een programma.
>> Iedereen goed voor mij om te ga terug naar de schuif?
OK, cool.
Dus ik zal je jongens als misschien drie geven minuten om te kijken naar dit echt snel.
>> OK, dus dit is net als vrij eenvoudig, conceptueel.
Wil iemand mij vertellen wat is eerst binnen door hash met inbegrip
onze standaard io.h bibliotheek bestand?
Waarom hebben we die bibliotheek nodig opgenomen voor dit programma?
Wat hier doen we het voor nodig?
>> Ja?
>> PUBLIEK: Is dat wanneer je dat printf?
>> Hoogleraar: Precies.
Dus printf, wanneer u neem een ​​input van de gebruiker
en afdrukken iets op het scherm, dat is
de standaard input, output bibliotheek.
Denk aan het op die ingang way--, output.
>> Heb ik een uitgang?
Ja, ik wil.
Dus ik weet dat ik altijd zal moet het standaardiseren i.o bibliotheek.
>> Dus printf is de functie waarbij we moeten openen
en hashtag de standaard i.o bibliotheek.
OK.
>> Ten tweede is het wat doet leegte betekenen?
We hebben de int main (void), wat doet vervalt hier bedoel hier op lijn drie?
Ja, in de rug.
>> PUBLIEK: [onverstaanbaar]
>> Hoogleraar: Precies.
Dus vergeet niet, we hebben geleerd te beginnen met onze PSET
dat kun je eigenlijk specificeren opdrachtregel
argumenten dat het programma, dat u belangrijkste functie, neemt als u, de gebruiker,
noem het.
Als we leegte, dat betekent dat je kon gewoon direct uit te voeren van het programma
zonder enige command line argumenten.
Iedereen duidelijk over?
OK.
>> En tenslotte waarom hebben we moeite doen deze terugkeer nul ding hier?
Waarom hebben we zelfs een int main?
Waarom kunnen we niet gewoon void main leegte?
Ja?
PUBLIEK: Net zo dat we kunnen er zeker van zijn dat het programma
succesvol verlaten, zoals tegen wanneer het werd geteld.
En we zouden weten dat dit een ander soort fout.
>> Hoogleraar: Ja, precies.
Dit is slechts een zeer conventionele ding dat we doen,
dat net aan het einde van je programma, gewoon om er zeker
dat uw belangrijkste functie correct loopt,
we willen altijd terug op nul te doen.
Hoewel we kunnen se niet zien overal dat gedrukt.
>> Want zoals programmeurs, weet je, als heb je veel verschillende regels code
en je weet niet waar deze zijn fout gaat,
en als er een fout gebeurt dat u wilt zorg ervoor dat je die fout te krijgen.
En zo typisch als er iets gaat verkeerde we zullen een terugkeer van een zojuist
om ervoor te zorgen dat we weten dat het is.
Dus als je ziet een terugkeer nul, die typisch
betekent dat uw programma is succesvol uitgevoerd.
Goed?
Koel.
>> OK, tweede programma hier.
Bedenk dat.
En als jullie zien een zweven, kan jullie waarschijnlijk
hebben een goed idee van wat Ik sta op het punt om u te vragen.
>> Dus als dit programma uitvoert, zoals u kunt zien,
Ik ben waarbij een drijver in mijn belangrijkste functie.
Ik noem het "antwoord", en ik ben het instellen die gelijk is aan één gedeeld door 10.
Ik ben het afdrukken van, één decimaal, dat vlotter.
En dan ben ik terug op nul.
>> Dus wanneer het programma uitvoert, denk nu terug naar hebzuchtig,
Dit programma drukt 0.0.
Zoals we allemaal weten, hopelijk alles wat we weet, een gedeeld door 10 is geen 0.00,
Het is 0,1.
Maar uitleggen waarom dit programma denkt die 1 gedeeld door 10 drukken tot 0,1 andere
dan 0,1?
Ik zal jullie misschien geven als 30 seconden om gewoon snel te denken over dat
en ik kom terug om het programma te gaan.
>> OK.
Iedereen wil het een schot?
In drie zinnen of minder, want meestal zijn we
gaan alle antwoorden te beperken drie zinnen of minder
zodat je niet alleen uitbraken willekeurige dingen op uw quiz.
>> Ja, neem een ​​schot.
>> Publiek: Dus ik denk dat er dit ding genaamd, zoals, [onverstaanbaar]
Zo kunnen er bijvoorbeeld er zou kunnen zijn, als, 0,09,
dat, wanneer u afdrukt de eerste cijferige, zou het zijn om 0.0?
>> Hoogleraar: Close, niet helemaal.
Christabell?
>> Publiek: Je bent te delen één en 10, en ze zijn allebei gehele getallen.
En dus is de manier waarop het gaat te slaan als een geheel.
En dus is de dichtstbijzijnde integer zou zijn 0.0.
En dus dat is 0,1.
Hoogleraar: Ja, dat is echt goed.
Dat is het juiste antwoord.
Dus dit is een zeer verwarrend concept voor veel kinderen.
En ik wil echt om ervoor te zorgen dat Dit wordt versterkt in ieders hoofd.
>> Dus wat wij noemen drijvende punt onnauwkeurigheid,
wanneer de reden waarom veel van uw programma's in gulzige
aanvankelijk niet werken was omdat je vergeten bent om uw variabele werpen.
Dus wat Christabell gezegd was helemaal correct.
>> Een float is inherent onnauwkeurig.
Want in een computer, recht, hebben we een eindige hoeveelheid bits geheugen
we kunnen gebruiken om nummers te vertegenwoordigen.
Dus, bijvoorbeeld, deze CS50 ID is-- Ik denk dat het een 64-bits computer.
>> Een vlotter kan alleen worden weergegeven met een eindige hoeveelheid die bits.
En zo 0,1 met oneindige nullen, dat was 0,1 is, toch?
Maar we kunnen niet echt op te slaan dat nummer in onze computer.
We hebben gewoon niet voldoende geheugen om dat te doen.
>> En zo de dichtste benadering van wat er in het geheugen opgeslagen is eigenlijk
zoiets 0.000 iets, iets, iets, iets.
Die, als je eenmaal afkappen het, rondt af tot 0,0.
>> En dus dit voorbeeld is slechts één die een goede illustratie veel problemen
we hebben wanneer we proberen om wiskunde verkeerd doen
zonder met een ander geheel getal.
Dus gewoon op zijn hoede voor deze happening.
>> Op quizzen, als wij geven u een blok van de code en het is alsof,
wat drukt op het einde?
En als het aantal willekeurige waarde die u jongens moeten weten waarom dat gebeurt.
Ja?
>> PUBLIEK: Truncate is zich te ontdoen van alles na een bepaald punt?
[ONHOORBAAR]
Hoogleraar: Ja, dus eigenlijk dit is echt een slecht voorbeeld,
want 0.100 wat eigenlijk beneden zou inkorten tot 0,1.
Maar als je naar het-- lopen doe ik niet vergeet niet, want vorig jaar hebben ze
liep het op een ander programma.
Ze liep het in iets genaamd de CS50 Appliance, die
verschilt van de ID.
Dat was een 32-bits systeem, denk ik.
En zo waren er verschillende nummers.
>> Maar in wezen, weet alleen dat het hele concept van afknotting
en hoe het net snijdt dingen uit.
En dus als het rounds--
>> Publiek: Zonder afronding.
>> Hoogleraar: Precies.
Ja.
Koel.
>> Hallo, in de rug.
We gaan gewoon over een aantal quiz beoordeling vragen.
>> Prima.
Dus overwegen om hier een ander programma.
Ik ga jullie geven paar minuten om te lezen dan dit.
Dit is iets dat voor een zeer onlangs dat ik denk dat blies veel van jullie
kerels's gedachten.
Maar we gaan praten door dit weer gewoon
om ervoor te zorgen dat u begrijp het helemaal.
OK.
Iedereen die meer tijd nodig te hebben Lees deze code?
OK.
>> Dus het lijkt me dat in dit programma ben ik
creëren van twee strings met behulp GetString.
Een zogenaamde s en een zogenaamde t.
En als ze gelijk gelijk aan elkaar,
het moet "Je afdrukken Typ hetzelfde. "
>> Maar elsewise, zou het afdrukken " getypt verschillende dingen, "right?
Lijkt zeer, zeer eenvoudig.
Maar, maar als ik eigenlijk proberen om dit programma te schrijven,
het lijkt erop dat zelfs wanneer ik ingang exact dezelfde strings,
het nog steeds afgedrukt, "Je getypt verschillende dingen! "
Wil iemand een te nemen schot op waarom dit programma altijd
antwoordt de ingangen verschillend zijn, zelfs
wanneer de woorden zelf hetzelfde?
>> Dus als ik David liefde input-- om een ​​voorbeeld te gebruiken als moeder, toch?
Kleine letters M-O-M S, T evenaart kleine letters M-O-M.
Als ik liep dit door middel van die code, waarom zou het
uitprinten "je verschillende dingen typte?"
>> Heeft iemand meer nodig tijd om na te denken over dit?
OK, ik denk dat we goed.
Ja?
>> Publiek: OK, dus het is iets over waar het in het geheugen opgeslagen, toch?
>> Hoogleraar: Yep.
>> Publiek: Waar is het als, als dit touwtje s wordt opgeslagen bij het geheugen spot--
Ik uitvinden dit-- nul.
Hoogleraar: Zeker.
Publiek: En koord t wordt opgeslagen in het geheugen plaats,
als, 167, en dan nul is niet gelijk aan 167.
>> Hoogleraar: Precies.
OK, dus vergeet niet deze ongelooflijke openbaring we uitgelegd aan jullie
deze afgelopen week, dat snaren niet echt bestaan?
Wanneer we iets te creëren genaamd touwtje we, in werkelijkheid,
het creëren van iets genaamd char ster.
Die al is het is een pointer naar een string of een array van karakters.
>> Dus in dit voorbeeld als ik zouden ingang M-O-M weg
dat mijn computer zou slaan is binnen geheugen backslash nul, toch?
Deze vier karakters, tekens, zou ergens opgeslagen.
>> En dan deze vier karakters, backslash nul,
zijn ergens anders opgeslagen, toch?
Ik heb geen idee waar de adressen zijn, ze zijn ergens in mijn computer.
Maar ik weet niet precies waar ze zijn.
>> Wanneer ik een string s, dat alles echt is
is een aanwijzer naar de begin van deze string.
En wanneer ik deze t-waarde, alles is een pointer naar hier.
En dus wanneer je probeert gelijk te stellen en te controleren
om te zien of s gelijken gelijk aan t, de computer
is eigenlijk gewoon terug te keren naar u het adres van deze m
en het adres van die meter.
En omdat ze twee afzonderlijke stukken data
die zijn opgeslagen in twee verschillende adressen in uw computer,
uw computer gaat nooit ze herkennen als hetzelfde.
Wil iemand een schot op wat we
zou moeten doen als we wilden te corrigeren Hierdoor en een correcte lopend programma
in plaats daarvan?
Denk daar eens over voor een paar seconden.
Wat hebben we nodig om te veranderen naar dit programma krijgen functioneren
de manier waarop we willen dat het functioneren?
>> Ja, willen een steek te nemen op het?
>> Publiek: Kunnen we proberen om dereferentie de pointer en controleren door middel van de serie?
Hoogleraar: Dat is een manier om het te doen.
Dus, wat is opnieuw uw naam?
Het spijt me, herinneren me.
>> Zee: Zee.
Hoogleraar: Ja, dus wat Zee gesuggereerd zou absoluut werken.
Rechts?
We konden dereferentie de pointer en daadwerkelijk te gaan en de toegang
de fysieke data binnenkant van hier.
En we kunnen alleen maar vergelijken het hele scherm.
>> We kunnen zeggen, OK, wijzer, geef me wat er binnen hier.
Het zou m terugkeren.
En ik zou zeggen, wijzer, geef me wat er binnen hier.
Terug een m.
Doe die wedstrijd?
Ja.
Dan gaan we verder.
>> We blijven controleren van de gehele twee snaren helemaal tot het einde
en kijk of die gelijk zijn, Als de waarden gelijk zijn.
Als de waarden gelijk zijn, dan weten we de snaren waar zijn.
Absoluut, dat is hoe we het zou doen?
>> Is er iemand die verward op een van deze?
Het hele concept van hoe strings zijn echt gewoon pointers,
en hoe ze niet echt bestaan?
En waarom krijgen we fouten zoals de manier waarop we het?
Omdat ik garandeer jullie, wijzers en strijkorkest toewijzing en het geheugen
zullen komen.
>> Ja?
>> PUBLIEK: [onverstaanbaar] dereferentie het, zet je gewoon een ster [onverstaanbaar]
Hoogleraar: Recht.
Dus om een ​​pointer middel derererence naar dat adres van de aanwijzer
en er verkrijgen van de data, de waarde.
En de manier om dat te doen is ster pointer.
Niet te verwarren dat.
>> PUBLIEK: [onverstaanbaar].
>> Hoogleraar: Yeah.
Publiek: Dus u kunt gewoon schrijven als ster s gelijke gelijken ster t.
>> Hoogleraar: Nou, nee.
Nee.
>> Publiek: Dat is niet goed genoeg, toch?
>> Hoogleraar: Het is niet, omdat je alleen het controleren van de eerste letter.
Je bent waarschijnlijk gaan moet een soort van een lus die
doorloopt elke teken in beide reeksen.
Ja.
Dus als je wilde gewoon controleren om te zien als ze begonnen met het zelfde ding,
u kunt doen als, ster s is gelijk aan ster t.
Dan weet je dat tenminste ze begon met hetzelfde karakter.
>> Ja?
>> Publiek: Dus de manier je dat zou
als een ingesloten voor loop of pointer?
Hoogleraar: Yeah.
Vrijwel alleen een lus.
Vergeet niet, David in de klas genoemd de vrije syntactische suiker?
En hij dit erg had verwarrende ding van de ster t
plus één, waar het zou integreren door en hij de aanwijzer?
De eenvoudiger manier van doen dit is gewoon t i.
>> Dus het is gewoon een array.
De manier waarop je zou hebben voor lus die liep van nul tot i, waarbij
i de lengte van het touwtje, kon je gewoon
schrijven dat in plaats van het doen van de hele wijzer, referentie ding.
Dus deze dingen zijn precies equivalent in uw computer.
>> Jullie waarschijnlijk niet moeten weten dat,
maar het is goed om gewoon een soort van hebben in de rug je geest.
Weet gewoon dat de computer herkent verschillende blokken code
als hetzelfde.
Want dit is gewoon veel gebruiksvriendelijker vriendelijk voor ons om het te presenteren zoals het is
een array.
Het is gewoon makkelijker.
>> Publiek: Dus gebruik strlen leuk te vinden, get--
Hoogleraar: Yeah.
Publiek: OK.
Hoogleraar: Je zou strlen gebruiken of, als u
had niet strlen je gewoon kunt doen up totdat je hit backslash nul voor beide.
Ofwel zou werken.
Ja.
Publiek: Dus het is om dereferentie elke enkel karakter als we eigenlijk waren
het schrijven van deze code, we kon gewoon doen t beugels i
graag met de ster in de voorkant van het?
>> Hoogleraar: Ja, evenaart gelijken s beugel i, en dan blijven bewegen i
down up totdat je het einde te raken.
Ja, dat is wat je zou doen.
En ik eigenlijk een volgende Bijvoorbeeld wanneer we eigenlijk
schrijf strlen dus je jongens zullen soort te krijgen om te spelen met het een beetje.
>> Dus is iedereen duidelijk gewoon geheugen, strijkers, wijzers, kwaliteit adressen?
Sommige hoger niveau concepten die u zal zeker behoefte om te weten over de quiz
morgen.
>> Prima.
Goed.
Yep.
OK, dus een ding dat we ook vragen je, zoals we elk jaar doen op een quiz, is,
Stel dat u bent vergeten (die we lijken te vergeten om jaarlijks te doen)
waarin header bestand strlen wordt verklaard.
En dus moeten we het zelf te herschrijven.
>> Hier zijn een lijst van richtsnoeren wij u presenteren
kerels waar je om te veronderstellen dat s van de reeks zal niet nul.
U kunt aannemen dat s zal afgesloten met een backslash nul.
Zodat je weet dat is wat het gaat eindigen.
>> En, bijvoorbeeld dat de lengte van hello zou vijf.
Dus je kunt ervan uitgaan dat hello zullen vijf, H-E-L-L-O zijn.
Je hoeft niet aan te nemen dat de achtereind nul is goed voor de lengte.
>> Dit laatste wat hier niet zorgen te maken over integer overflow.
Heeft iemand herinneren wat integer overflow is?
>> Publiek: gaat verder dan de lengte van de [onverstaanbaar].
>> Hoogleraar: Ja, kunt u uitleggen een beetje, wat betekent dat?
>> Publiek: Dus, ik denk dat het gaat terug het afknotten eerdere voorbeeld.
Maar als je net zo veel nummers die verder gaan dan het aantal bits
dat je daadwerkelijk kunt toewijzen dat het gewoon een soort zal afgesneden.
Hoogleraar: Ja, dus op een typische computer, hoeveel bits hebben we?
Publiek: 32?
Hoogleraar: Ja, 32, rechts.
En dus dat is, wat, vier miljard twee miljard?
Vier miljard, tot vier miljard positieve gehele getallen, toch?
Twee miljard negatief, twee miljard positief,
hangt af van hoe je het wilt doen.
>> En dus in principe kunnen we genoeg integers die kan gaan
twee tot de 31 min 1, toch?
Want zodra we raakte twee naar de 32, wij niet
dat veel geheugen in onze computer.
>> En dus, in theorie, ik kon komen met een aantal
dat is, net als twee van de 46.
Het is een enorme-ass nummer, maar in theorie je kon.
En zo integer overflow is als u probeert om zorgen voor een geheel getal dat verder gaat dan
de computer kan bewaren.
>> En dus jullie voor dit voorbeeld hebben geen
zorgen te maken over ons geven je een gigantische tekenreeks die twee om de 32 tekens
lang.
Dat zou echt betekenen.
>> Oké, dus ik ga gewoon op te geven jullie de basisstructuur van dit.
Je gaat om het creëren van een functie genaamd int strlen, waar
een passeren, een char ster, of touw, pointer naar de string genaamd s.
>> Oké, iedereen kopieert die naar beneden.
Koel.
Oops-- andersom.
>> Dus dit is een soort van als een harder stukje van het probleem,
dus ik zal jullie misschien vijf te geven zes minuten voor soort brainstorm
en schrijf deze functie uit.
>> PUBLIEK: We doen niet goed voor [onhoorbaar]
we hoeven niet te integer gebruiken?
>> Hoogleraar: Nee, dat hoeft niet.
Ik geef je jongens een hint.
Een tijdje lus kan hier zeer nuttig zijn.
Ja.
Hier is
snoep.
Snoep zal ook beschikbaar zijn voor de quiz, denk ik.
Dus jullie zullen allemaal gesuikerde morgen.
Kan Ik-- je het hebt.
>> Publiek: OK.
Hoogleraar: Yeah.
>> Misschien 30 seconden of zo.
>> Oké, als je niet gedaan, geen zorgen.
We zullen samen door deze te verplaatsen.
OK.
Dus ik ga gewoon de lay-out van de basisstructuur voor deze functie in.
Int strlen.
Eerste, doet iedereen wil vertellen me wat dat betekent int?
We nodig hebben in deze functie.
>> PUBLIEK: strlen [onverstaanbaar].
Hoogleraar: Precies.
Dus wat er ook gebeurt hier, moeten we een integer terug.
En zoals aangegeven in het spec, willen we return--
Go for it guys, gewoon doorgaan.
Het is al goed.
Eten het allemaal, dus ik heb geen om het terug te nemen, eigenlijk.
De int gewoon betekent dat je zal terugkeren een integer.
>> Wat is dit char ster s?
Wat betekent dat?
>> PUBLIEK: Zoals, wat wordt ingevoerd in.
Hoogleraar: Precies.
En wat is bijna de hetzelfde als char ster?
PUBLIEK: String?
Hoogleraar: Precies.
Dus alles wat we doen is het geven Dit een pointer naar een string.
OK.
Koel.
>> Ook, vergeet niet, als wij vergeten u deze beugels geven,
vergeet niet om ze zelf te schrijven.
Omdat theoretisch, de code is onjuist als je vergeet om ze te schrijven.
Gewoon altijd opletten.
Zoals, kleine dingen dat je niet in de gaten
als je het programmeren op uw laptop, omdat uw laptop doet het voor je?
Vergeet niet bij je bent het schrijven met de hand.
Ja?
>> Publiek: Maar hoe verkeerd?
Zoals, krijgen we het hele probleem verkeerd?
>> Hoogleraar: Nee, nee.
Maak je geen zorgen.
Het is eigenlijk theoretisch mogelijk voor u om de volledige punten te krijgen op een vraag
zelfs als uw code zal nooit lopen in het echte leven.
Ik stel voor dat je niet proberen om dat te realiseren.
Bijvoorbeeld, alsof alles dat is hier juist is,
maar je moet een dubbele punt of een beugel te vergeten, de code zal niet daadwerkelijk uitgevoerd.
Maar we kunnen barmhartig zijn.
>> Ja?
>> Publiek: Moet je commentaar op onze handschrift?
>> Hoogleraar: Nee, nee, nee zorgen over dat.
Geen commentaar.
Stijl moet goed zijn.
Zoals, niet smush alles op één lijn.
We zullen niet blij zijn met u als u dat doet.
>> Wil iemand geef mij de eerste lijn?
Hint, het is heel gemakkelijk.
>> Ja?
>> PUBLIEK: Int, n gelijk is aan nul.
Gewoon opzetten teller.
Hoogleraar: Dus willen we een aantal soort van een teller, toch?
Ik ga gewoon om het te noemen "count" omwille van de leesbaarheid.
Wat willen we in te stellen dat gelijk is aan?
>> Publiek: Zero.
Hoogleraar: Yep.
Puntkomma.
Het is ook heel raar tekening puntkomma.
Gewoon de praktijk dat te doen.
>> Dus we willen eerst een teller van het type int.
Omdat we willen tellen hoe veel tekens of letters zijn
in deze reeks, toch?
Zeer eenvoudig eerste stap.
>> OK, misschien een beetje meer complexe nu, hoe gaan we dat doen?
Wil iemand geef me de regel code
die in staat lus te door middel van wat dit is?
>> Ja, dappere ziel in de rug?
>> Publiek: OK, dus terwijl punt sterretjes, de ja, ster van s,
is niet gelijk aan nul, dan is er iets te doen?
Hoogleraar: Dat is heel, heel dichtbij.
Echt dicht.
Dus ik ga aan te pakken twee dingen mee.
Allereerst, het is niet precies nul.
Wat is het?
Het is de null-terminator, die backslash nul.
Zodat ze anders in termen van hoe ze zijn opgeslagen.
Dus je bent echt dicht.
>> En ten tweede, we willen niet gewoon verplaatst u de aanwijzer.
We willen eigenlijk toegang tot de waarden, toch?
En dus hoe doen we dat?
Zeer eenvoudig.
Denk niet over pointers, denk niet over herinneringen.
Ga terug naar week twee van deze cursus.
>> PUBLIEK: [onverstaanbaar].
Hoogleraar: Met ingang van, weet je nog?
Wat zijn strings?
Hoe worden ze opgeslagen in het geheugen?
>> Publiek: Ze zijn opgevoed.
>> Hoogleraar: Ze worden opgevoed.
Dus hoe kunnen we toegang elk karakter binnen?
>> PUBLIEK: [onverstaanbaar].
Hoogleraar: Precies.
Dus while-- wat er hier binnen?
Van S -
>> Publiek: I.
>> Hoogleraar: Oh, ik niet bestaat, doet het?
>> PUBLIEK: Oh, tellen?
>> Hoogleraar: We kunnen gewoon gebruiken tellen, kunnen we niet?
>> Publiek: Sorry, ik noemde het i.
>> Hoogleraar: Ja, het is allemaal goed.
We hebben een variabele hier dat is al uitgeroepen als onze teller.
Dus waarom niet gebruiken we alleen dat om door de while loop?
Slaat dat ergens op?
>> Dus terwijl s van count-- doet iedereen wil geef me wat er gebeurt na hier?
Publiek: Het is niet gelijk.
Hoogleraar: Maakt niet gelijk zijn, toch?
Het is de knal gelijk, uitroepteken gelijk,
wat jullie willen noem het niet equal--
>> PUBLIEK: [onverstaanbaar].
>> Hoogleraar: Yeah.
Vergeet niet enkel citaat is voor een char, dubbele aanhalingstekens zijn voor een string.
Wees voorzichtig bij het gebruik ervan.
Dus als we kijken door de reeks, het laatste teken,
we weten dat we niet willen aan backslash nul.
>> Dus terwijl.
Wij zijn niet aan het einde van de string.
Wat willen we binnen doen?
>> PUBLIEK: We willen toevoegen aan de teller dus het telt plus plus?
Hoogleraar: Precies.
We dus hier gaan doen tellen, tel plus plus.
Ontbreekt nog een lijn.
We zijn er bijna.
Wat zijn we vergeten te doen?
>> PUBLIEK: Terugkerende nul?
>> Hoogleraar: U wilt naar nul terug te keren?
>> PUBLIEK: Nee, terug te keren naar strlen.
Wacht.
Hoogleraar: die wordt opgeslagen in?
Publiek: Tel.
Tellen.
Hoogleraar: Precies.
We dus hier gaan tellen terug.
>> Want wat we hier doen ultimately--
hebben we een teller variabele die is gaat verhogen door middel van onze string.
We gaan om door te gaan, houden gaan, rond en rond in deze lus.
En terwijl we niet op het einde van deze koord, hetgeen de nul terminator.
>> En elke keer als we gaan door het, zijn we toe te voegen aan onze balie.
En we verder gaan mee in deze array.
En aan het eind, als we eenmaal raakte de null-terminator,
we weten, oh, we kunnen te breken, de terugkeer van de telling.
We hebben onze strlen.
>> Krijgt iedereen hoe dit is geïmplementeerd?
Terwijl loops-- Ik weet dat we niet gedaan te veel met hen,
maar ze zijn meestal heel, heel handig als je
weet niet wat je te stoppen voorwaarde noodzakelijkerwijs te zijn.
>> Vraag?
>> Publiek: Kunnen we schrijven null op terwijl conditie?
>> Hoogleraar: Terwijl?
Ja, dus in dit probleem dat u had ik kerels veronderstellen dat is niet nul zal zijn.
Want vergeet niet, theoretisch, als ik je gaf
een pointer te grote geheugen was, het zou geven u de null, toch?
Dat is wat de operationele systeem zou doen.
>> Dus als ik je niet vertellen om te veronderstellen s zou nul zijn, moet u controleren.
Dus hier, zou jij doen, als s gelijk aan evenaart null, terug een.
Zoiets.
PUBLIEK: [onverstaanbaar] nul.
Hoogleraar: OK, zal ik vertellen waarom kunnen we dat niet doen.
Want vergeet niet in het geheugen, rechts, hier.
We zullen hier te gaan.
>> Je hebt gigantische blokken gekregen van geheugens met roosters
die winkel verschillende waarden, toch?
En zo al een string is-- voor Bijvoorbeeld, als we zijn om input hello,
zou H-E-L-L-O zijn backslash nul, toch?
En dan wie weet, willekeurige dingen die hier na het.
>> We eigenlijk niet weten wat er is.
En dus als je om te doen in plaats van backslash nul,
null, kan het niet null.
Omdat het gewoon kan betekenen enkele willekeurige andere dingen
die niet thuishoren in je string.
En dus is de manier waarop we altijd weten dat een string eindigt is met een backslash nul.
En dus dat is altijd hoe we ga naar het einde van een string zien.
>> Null, dat allemaal betekent is als u een non-existent pointer, allereerst,
of als je geheugen is gewoon zo groot dat je kunt niet terug, dan is het nul zou zijn.
Dus heel voorzichtig zijn bij het differentiëren het verschil tussen null
en de backslash nul.
Ja.
>> Iedereen OK met dit?
OK.
>> Dus ik had jullie uitschrijven strlen.
Haalbare kunnen we ook vragen u schrijft uit A tot en met I, bedenk dan dat "Atwoa"
of wat jullie ook wilt noemen?
Die functie in Vigenere en Caesar, die
Zet een ASCII-waarde aan een integer?
Dat heeft ook komen op eerdere quizzen van de functies die we hebben u gevraagd om te schrijven.
>> Vrijwel elke functie dat je hebt gebruikt en is
heel gemakkelijk om jezelf te schrijven, sensoren willen is lager,
is hoger, te verlagen, de bovenste.
Functies die een zou zetten snaar van kleine letters naar hoofdletters.
We weten allemaal hoe dat te doen, toch?
Het is vrij eenvoudig.
Gewoon willen ervoor zorgen dat u can-- het is hetzelfde denkproces.
Je herhalen alleen door en slaat u dingen.
Of je tellen of wanneer je dingen draaien anders.
>> Ik zou suggest-- I weet niet of we gaan
om u te vragen om te onthouden wat hoofdletter A of hoofdstad Z, of kleine letters A of kleine letters
z in Ascii, maar ik stel misschien schrijven dat in geval
wij doen.
Maar dat je jongens hebben een referentie.
Net als hoofdletter A is, wat, 197?
En dan kleine letters is als 50 iets.
65, ja, daar ga je.
Dus gewoon vrij veel weten de verschil tussen hen is 32.
Dat is erg belangrijk.
Ja.
Ben ik goed op deze?
OK.
>> PUBLIEK: We konden theoretisch schrijven een aantal
van deze beneden ook op onze little--
>> Hoogleraar: U theoretisch kon gewoon kopiëren van de functie neer.
Dat is waar.
>> PUBLIEK: Niet [onverstaanbaar].
>> Hoogleraar: Jullie hebben een blad.
Jullie hebben een notitie blad.
U kunt het typen.
U kunt schrijven.
Je kunt doen wat je wilt met het.
Ja.
Dus theoretisch, als je wilt, ga dan voor.
>> PUBLIEK: [onverstaanbaar] maar we doen niet echt
per se hoeft te onthouden de waarde, kunnen we net
Gebruik de bovenste of lagere functie, toch?
Hoogleraar: Yeah.
Maar als we gaf je een vraag die zegt dat schrijven naar de bovenste,
dan zou je nodig hebt om het te schrijven.
Dus jullie kunnen aannemen dat u jongens hebben toegang tot alle functies,
maar als je wilt gebruiken om de bovenste of lager, wat heb je ook te maken?
>> PUBLIEK: [onverstaanbaar] Gebruik CS50 [onverstaanbaar]
>> Hoogleraar: Is het CS50.h?
Wees er voorzichtig.
>> Dus de bovenste, naar lagere, is hoger, lager,
functies die impliceren string manipulatie zijn
allemaal binnen ofwel de Ascii of binnen de wiskunde bibliotheek
of binnen de string library.
Dus als jullie die te gebruiken functies, wees voorzichtig om te onthouden
die header.
Dus misschien ook iets wat je wilt in je vel te nemen,
wat zijn de header?
Wat zijn de bibliotheken je hebt gebruikt?
Welke functies zijn binnen die bibliotheken?
Het is belangrijk.
>> Ja?
>> Publiek: Kunnen we net cop uit en doe hashtag
door het absoluut elke brief die we ooit
gezien zoals op alle vragen?
>> Hoogleraar: Je kon.
Ik weet niet hoe blij we gaan naar de rang
dat quiz bij elk stukje code is twee keer zo lang als het moet zijn.
Ik weet het niet, we misschien take off een punt voor stijl.
Maar theoretisch uw code zou goed zijn.
Jullie konden cop out en net omvatten alles.
Dat is ook goed, ja.
PUBLIEK: [onverstaanbaar].
Hoogleraar: Yeah.
Ik stel voor dat niet al te doen.
Ja.
Publiek: Cool.
Hoogleraar: Goede vraag.
Publiek: Dus, het worst case scenario.
Hoogleraar: De ergste geval.
Als je helemaal vergeten, je dat zou kunnen doen.
Ja.
>> Yep, code is daar.
Ik gebruikte n plaats van de graaf, maar u weet, ongeacht uw boot drijft.
PUBLIEK: Wacht, dus we niet zou hebben om hashtag
onder meer omdat we vanaf de int?
>> Hoogleraar: Ja, maar ik veronderstelde dat we werden gevraagd om de functie te schrijven.
Als je wilde om veilig te zijn, je kan waarschijnlijk zet het daar.
Maar ik gewoon niet de moeite, ja.
>> Ik weet niet eens als je behoefte aan een bibliotheek voor dit.
Omdat je niet echt afdrukt uit iets of wat dan ook, toch?
Ja, ik weet niet of u een bibliotheek nodig.
>> OK.
Dit is ook een beetje samen de lijnen van het geheugen manipulatie.
Dit soort beetje lastig.
Denk hier over na.
U heeft een functie genaamd func.
Ik kon het genoemd hebben wat dan ook, maar ik kies om het func noemen.
Ik heb het boven mijn hoofd.
Vergeet niet, je wilt hebben een functie na uw belangrijkste,
wilt u ervoor zorgen dat u omvatten het prototype van de top.
>> Maar in dit geval zo kort dat ik voelde dat ik kon gewoon
opnemen bovenop de belangrijkste.
Ik hoefde niet het prototype hebben, want het is al hierboven geschreven.
Dus alles wat ik doe in mijn belangrijkste functie is het creëren van integer x is gelijk aan 10.
Ik bel mijn func-functie, en vervolgens afdrukken tot iets.
>> En dan is dat eigenlijk wat func doet.
Jullie willen denken over dit.
Want het is een beetje lastig.
Het is heel, heel lastig, eigenlijk.
Denk na over wat dit programma zou outputting zijn.
Ik zal jullie geven twee minuten.
>> Goede discussies?
>> Publiek: Ja.
>> Hoogleraar: Yeah.
Oké, dus dit is lastig voor een reden.
En dit is waarom ik wilde brengen dit om de aandacht van iedereen.
Wil iemand me een suggestie, een poging?
Wat zou dit uit te printen?
Helemaal prima als je het mis.
Ja?
>> Publiek: Ik denk dat het 100 en dan 10 op twee verschillende lijnen.
>> Hoogleraar: En een 10?
Heeft iemand nog andere gissingen?
Ja?
>> PUBLIEK: Misschien gewoon omdat 10 func is niets terug te keren?
>> Hoogleraar: OK, dus we hebben gok nummer één
is dat gok nummer twee is gewoon uit te printen 10.
Heeft iemand nog andere gissingen?
OK.
Dus laten we lopen door dit, toch?
Wanneer u een stuk code te krijgen, niet alleen kijken naar het en zijn als,
ah, dat is zo veel dingen!
Ik ben zo verward!
Zoals, zelf kalm naar beneden.
Weet gewoon dat je kon gewoon kijk door de code lijn per lijn.
Dat is alles wat het is.
Het is als het lezen van een boek.
>> Dus met een functie, We beginnen altijd bij de belangrijkste.
Dus we gaan beginnen bij int main leegte,
zelfs het programma al run down, toch?
Beginnen om in de belangrijkste leegte.
Int x is gelijk aan 10.
>> Dus ik ga dit te wissen.
Ik ga naar het geheugen te trekken zodat je jongens kunnen soort zien wat er gebeurt.
>> Vergeet niet hier beneden hebben we onze stapel?
Hier hebben we onze hoop ergens hier.
Stack groeit, toch?
En binnen de stack, je hebt het net fungeren als
Alle leidingwater lokale variabelen.
>> Dus hier, int x gelijk zijn aan 10.
Binnen onze belangrijkste functie zijn we het creëren van een variabele genaamd x.
We instelling die gelijk is aan 10.
Hier heb je een aantal x, en je bent instellen dat gelijk is aan 10, rechts,
binnen de belangrijkste.
Iedereen goed?
>> Functie.
Dus nu, in onze functie, we bellen
de functie we hierboven hebben geschreven.
Dus we nu de tweede functie.
We gaan naar een andere te maken variabele int x gelijk is aan 100.
Wat gebeurt hier op de stapel?
Wat gebeurt er als u een oproep functie nieuwe variabelen creëert?
Wat gebeurt hier op de stapel?
>> PUBLIEK: [onverstaanbaar] stapels op de top?
Hoogleraar: Yeah.
Dus het eigenlijk een kopie.
En het soort palen bovenop.
Denk aan de stack-- een stapel boeken, een stapel van alles.
Stapels op de top, de eerste in de laatste out, last in, first out.
>> Dus het gaat om een ​​x hier te creëren.
>> Dat gaat te hebben Alle funcs variabelen.
Grote.
Dus nu hebben we twee verschillende x's die vertegenwoordigen twee heel verschillende dingen.
Dan gaan we om af te drukken het geheel getal van x.
Dus laten afdrukken 100, toch?
Want hier is het 100.
Dus dat is het eerste wat dat het gaat om uit te printen.
Aangezien deze functie terugkeert niets, nu die functie, die lijn in de belangrijkste
is klaar.
Iedereen goed met mij tot nu toe?
>> Dus we zijn nu door middel van twee van de drie lijnen van onze functie.
Nu gaan we naar de derde regel.
We gaan printf.
Wat is dit x binnen belangrijkste?
Wat betekent dat voor?
>> Welke waarde is x nu?
>> Publiek: 100.
>> Hoogleraar: Het is 100?
PUBLIEK: Nog 10.
PROFESSOR: Nog 10.
Ja.
Want vergeet niet, binnen onze func, x gelijk is aan 100.
Maar als we terugkeren onze belangrijkste functie,
die variabele wordt opgeslagen in een andere plaats op onze stack.
>> Dus nu moeten we terug naar de main stack, lichtnet lokale variabelen.
En hier x is gelijk aan 10.
En dus we gaan uit te printen 10.
>> Dus ze was volkomen gelijk.
We gaan het hebben output van 100 en 10.
Ja?
Publiek: Als je malloc, is dit de heap of de stack, dat is [onverstaanbaar]?
Hoogleraar: Wanneer u malloc, je geheugen te nemen van de hoop
en verdelen.
Zodat u niet hoeft te knoeien met een van deze.
Dus ik denk dat de grotere afhaalrestaurant hier is iets genaamd scope.
>> Voor degenen onder u die op waren de beoordeling sessie gisteravond,
spraken we kort over dit.
Reikwijdte bepaalt hoe en wanneer uw variabelen bestaan.
Of binnen welke kaders doe je variabelen bestaan.
>> Vrij veel de vuistregel algemeen is, je variables-- als je ze te maken
binnen krullende braces-- ze bestaan alleen binnen de accolades.
>> Dus bijvoorbeeld in functie van onze func, zie je die twee beugels.
Als je het creëren iets binnenkant van het,
de kans groot dat alles wat je doet is het creëren en opslaan van een stapel er.
Hetzelfde in de belangrijkste.
Dat is gewoon opgeslagen binnenkant van de belangrijkste.
>> Ook u wilt worden heel, heel voorzichtig hier.
Omdat scope leent ook zich aan verschillende voorbeelden.
Dus bijvoorbeeld voor een lus, voor int i gelijk is aan 0.
I is minder dan, ik weet het niet, 10.
Ik plus plus.
En je hebt de code binnenkant van het, toch?
>> Waar komt deze variabele, ik eigenlijk alleen maar bestaan?
Alleen binnenkant van uw lus.
Dus ik wed dat velen van jullie hebben waarschijnlijk ondervonden deze fout wanneer
je doet programma's in uw psets.
Hoeveel van jullie hebben geprobeerd ik gebruik buitenkant van een lus en had een fout?
Zoals een unreferenced integers of zoiets?
>> De reden waarom dat gebeurt is omdat hier je
het creëren van iets dat alleen bestaat binnen uw lus.
En als je probeert om het te gebruiken, ik niet werkelijk bestaan ​​daarbuiten.
Dus eigenlijk een computer zeggen, ik weet niet waar je het over hebt.
Alles wat ik weet is dat een i was Hier, maar nu niet meer.
>> Dus als ik een te creëren lus binnen, toch?
En ik ga naar een ander te maken, zoals int j, en hebben het wat te doen.
En heb je een code in van dat lus, j bestaat hier alleen.
Maar die ook bestaat binnen i.
En dus j bestaat alleen binnen deze lus,
terwijl ik er in de hele zaak.
>> Iedereen duidelijk?
Hetzelfde met voorwaardelijke verklaringen Als je iets wilt creëren.
Hetzelfde met while loops als je iets wilt creëren.
Dat is iets om heel, heel voorzichtig.
Dus dit was echt een goede probleem in de voelen dat aangetoond twee dingen.
Het toonde de eerste, de reikwijdte.
En aangetoond Ook het toewijzen van geheugen.
Want jullie moeten weten dat functies omhoog groeien in de stapel.
En dat wanneer je belt functies, bent u het creëren
wezenlijk een nieuwe stapel geheugen.
Dat is heel anders wat uw lichtnet geheugen.
Ja.
Oef!
Iedereen OK op dat?
Dat was verwarrend.
Zeer goede onderwerpen om over te gaan, omdat je waarschijnlijk bent
ga wat lastig te krijgen dat soort dingen op de quiz.
Ja.
Koel.
Ik zet je 100 op een lijn en vervolgens 10 aan de andere kant.
Ja, zeer goed.
>> OK, nu jullie krijgen de kans om de TA.
U krijgt om te beantwoorden alle mooie e-mails die ik soms.
>> Dus, lieve Andi, ik zie denk ik dat er iets fout gaat met mijn compiler.
Ik ben er zeker van dat mijn code correct is, maar ik krijg steeds een segmentation fault
elke keer als ik lopen.
Wat is er aan de hand?
Gelieve te helpen, veel liefde.
>> Als jullie iets als dat hoe zou je reageren?
Dit zijn eigenlijk heel gewoon vragen we je vragen.
Is als we je een geven scenario, zullen we ons
uw beste gok op wat er gaande is.
Iemand een gooi naar wat er aan de hand?
Ja?
>> PUBLIEK: Misschien dereferentie de null, zoiets als de wijzer
wijst op iets null.
Hoogleraar: Ja, dat zou een te zijn Bijvoorbeeld wanneer dat zou gebeuren.
Maar wat is het grotere beeld van wat er hier aan de hand?
Publiek: Is het je probeert toegang tot het geheugen dat je niet
verondersteld om toegang te hebben?
Hoogleraar: Precies.
Dus denk aan een seg fout, een off grenzen, beperkt gebied in het geheugen
dat je niet moet aanraken.
>> Dus vrij veel als je probeert om index-- zoals bijvoorbeeld,
je hebt uitgeroepen tot een matrix van nul tot negen.
Maar je probeert om die 10 raken waarde, hoeft u geen toegang tot die te hebben.
Omdat je niet hebt verklaard.
En zo uw computer gaat om naar te kijken, dat zijn als,
uh oh, je probeert om te gaan buiten de grenzen van een index.
Ik ga u een segmentation fault.
>> Denken als segment, toch?
Een extra segment, de fout wanneer u probeert om iets te schenden
en je moet er niet zijn.
Segmentatie fout is altijd je probeert om dingen aan te raken
dat je niet moet aanraken.
>> Zo vaak voorbeelden zijn een index.
Natuurlijk, als je probeert aan te raken, dat was null,
dat ook zo goed werkt.
Als je wijzer probeerde te aanraken dingen die niet mogen aanraken,
dat zou ook zo goed werkt.
Meest typisch u zult zie dit in een array.
Iedereen goed?
>> Publiek: Dus als je wilt om de 10 point
en er is slechts een limiet van negen of zoiets.
>> Hoogleraar: Ja, precies.
Ongeveer.
Koel.
>> Lieve Andi.
Daarom hebben we deze prachtige kregen dingen geroepen soorten.
Als samenvoegen sort-- als we zaag bijvoorbeeld wanneer
David deed de hele ding class-- waarom,
als het zo veel sneller dan elk van de andere soort,
waarom doen we eens de moeite weten alle andere soorten?
>> Wat is deze vraag die je echt te vragen?
Wat is de drie word--
Publiek: Wat is de trade-off?
Hoogleraar: Precies.
Dat is wat de vraag vraagt.
Wat is de trade-off tussen Samenvoegen soort verzen alle andere soorten?
>> PUBLIEK: Neemt geheugen, toch?
>> Hoogleraar: Heeft u uitleggen dat een beetje meer?
Laten we eerst uitleggen Merge winkel.
Hoe werkt Merge soort werk?
>> Publiek: Dus het werkt door verdelen alles in de helft
en dan zetten het samen en herschikking van het in orde,
zoals elke keer dat u samenvoegen de sets.
Hoogleraar: Vrij veel.
Dus ik kan deze trekken, maar het zou neem me vijf minuten om het uit te trekken.
Kijken terug op de sectie slides waar we bedekt Merge soort.
Precies.
>> Dus de manier samenvoegen soort werken is deze dingen verdeelt in de helft,
en dan ziet het er net op het Eerst waarden van allemaal
en sorteert alleen dat.
Continu creëert nieuwe arrays en zet de dingen meer en meer in orde.
En dus terwijl dat is echt, echt snel omdat it's-- u weet,
een binaire zoektocht is n log n.
Je bent het creëren van zoveel verschillende arrays dat je
met behulp van een enorme hoeveelheid geheugen.
En dus terwijl het is sneller, de afweging hier is dat u gebruikt meer geheugen.
>> En dus, hint, sorteert en zoekopdrachten bedekt waren veel meer dit jaar
dan in voorgaande jaren zijn.
Jullie moeten zien dat dienovereenkomstig op de quiz gereflecteerd.
Ik zou zeker tijd doorbrengen gaan via welke alle verschillende soorten
zijn, hoe binary search, hoe lineair zoeken werk.
Hoe je misschien pseudocode code die uit.
Wat zijn de looptijden?
Zoiets looptijden is zeer gemakkelijk naar beneden te kopiëren op een notitie blad,
rechts?
>> Het is echt moeilijk als je in het midden van de proef
en je hebt om dat uit.
Kopiëren naar beneden.
Ik garandeer je dat je bent gaat nodig hebben om te weten dat.
Wat zijn de trade-offs?
Ergste geval best case scenario's voor elk van hen zeer leren kennen.
Ja?
>> Publiek: Moeten we weten hoe ze samenvoegen soort code?
Zoals, moeten we herinner me de recursieve?
>> Hoogleraar: Ik betwijfel het ten zeerste, net want het is net vrij ingewikkeld.
Maar het kan niet onhaalbaar als we vragen u om pseudocode het uit te gebruiken.
Ja.
>> Yep, OK, nog één.
Dit kan in gekomen je laatste stuk een beetje.
Ja?
Heeft iedereen gehoord dat?
>> OK, dus vrij veel in de eerste plaats Alles, wat voor soort programma
zou geven u een output als dit?
Vergeet niet wij u gevraagd om te leren over dit nieuwe type debuggen tool?
Wat was de naam van het?
Valgrind, rechts
>> Het is een programma waarin je zou kunnen noemen, dat kon
bijhouden van al het geheugen dat je het gebruiken in uw programma en aan de hand was.
Dus als je hebt iets, als, zeker verloren, 40 bytes in één blok.
Waarschijnlijk ben je niet herinneren om het te bevrijden.
Want als je gebruik bytes van het geheugen, dat betekent dat je hebt geopend dat het geheugen,
maar je hebt niet in staat om vrij geweest.
Dus je wilt maken ervoor dat u ook bent
gebruik free-- dat is een function-- al vrij
van het geheugen toegewezen door malloc.
>> Koel.
Dus deze dia, zal ik het moeten omhoog.
Het is overal in een heleboel lezingen, in een veel sectie glijbanen.
Wil je echt om ervoor te zorgen je weet dit alles.
Hetzij in uw notitie blad of als u willen onthouden, voel je vrij om.
Dat is echt, echt, echt belangrijk.
>> Ook een zeer goede vraag die we kunnen vragen.
Waarom is Selection sort-- blik op Selectie sort-- alle runtimes
zijn n kwadraat.
Ongeacht hoe de lijst komt te je net zo, dus waarom is Selection sort--
Ik zal jullie geven 30 tweede na te denken over dit.
Omdat het soort verwarrend.
Het gaat om een ​​aantal conceptuele denken.
Waarom zou de run keer hetzelfde zijn in zowel het slechtste en beste scenario?
>> Ja?
>> Publiek: Omdat Selection sort elke positie of ruimte in deze kleine serie
ding of wat dan ook.
Dus zelfs in het beste geval zelfs als het perfect is gesorteerd,
zou het nog steeds zo te zijn, OK, één.
In mijn eerste plaats heb ik een.
En gaan door alle van hen.
OK, men het kleinst is.
En dan weer gaat hij en is net als, OK, twee
is de kleinste van alle dingen.
Maar het moet nog Controleer ieder.
Hoogleraar: Yeah.
Dus bijvoorbeeld, laten we maar zeggen hebben we een lijst, al naargelang,
een array 1-5.
De manier waarop Selection soorten is dat het gaat door, het controleert deze twee.
Vervolgens controleert zij deze twee.
En dan controleert en controleert.
Het houdt controle op alle van hen, ongeacht of niet
het is eigenlijk opgelost.
Want dat is gewoon de manier waarop het soort werkt.
>> En dus deze vraag is een soort een conceptuele vraag die we zullen stellen.
Waar de eerste, kunt u weet wat Selection sort
is, recht te kunnen om de vraag te beantwoorden.
Je moet in staat zijn om te begrijpen conceptueel wat er gaande is.
En dan kun je het toepassen en denken, OK laten we stel gewoon worst case scenario.
Ze zijn allemaal in aflopende volgorde.
Hoe zou dat beïnvloeden?
>> Wat als het oplopende volgorde?
Als deze al is naargelang?
Hoe zou dat invloed hebben op de runtimes?
En dan Selection soort, zult u merken dat het niet echt belangrijk.
Omdat je het controleren bent alle waarden ongeacht wat er gebeurt.
>> En zo goede dingen te onthouden.
Waarom sommige soorten verschillen van anderen en hoe het best en worst case scenario's
zou ze allemaal te beïnvloeden.
>> Ik ga echt hit in allerlei want dat zal zijn op de quiz.
Ja.
OK.
Er is zes minuten verlaten.
Ik kan drie minuten vragen te nemen.
Ik kan ook rond te hangen voor zoals 20 minuten na sectie
als je wilt om vragen te stellen als goed.
Heeft iemand gewoon echt korte vragen of conceptuele kwesties
ze zijn onduidelijk op dit moment?
Ja?
>> Publiek: Kun je een beetje praten beetje over bitsgewijs operatoren?
>> Hoogleraar: Yeah.
Dus bitwise exploitanten iets dat je waarschijnlijk
misschien wil gewoon op je vel te zetten.
Dus quickly-- Ik wil niet te veel in de diepte te gaan
omdat Harvard, in hun beoordeling sessie, overdekt het vrij goed.
Bitsgewijze operator, er is vijf van hen, toch?
>> Er is dit, dat is x of functie, er teken, de en.
Buis, die de of.
En dan heb je de twee verschillende ploegen.
>> Als ik geef u twee waarden, indien Ik geef u, als, één en één.
Wat zou dat te evalueren?
Als ik je echte en ware, waar?
Hoe zit het waar of onwaar?
Nog steeds zo, toch?
Omdat er een of.
We zullen waarschijnlijk geef je nummers.
Dus onthoud, één gelijk waar is, is gelijk aan nul vals.
En we kunnen u deze dingen en vragen u om ons te vertellen wat er gebeurt.
Harvard dekt het binnen de eerste 10 minuten van hun studie sessie
echt, echt goed.
Dus jullie willen maken ervoor dat u kijken terug op dat.
>> PUBLIEK: Is pisa5 gaat worden op de quiz?
Hoogleraar: No.
Niet eens kijken naar pisa5 nu.
Het is moeilijk.
Gewoon niet eens de moeite te kijken naar pisa5.
>> Echter, zoals sommige hints en suggesties, ik
zou je aanraden pisa5 start Zodra de quiz voorbij.
Dit zal het moeilijkste zijn week, maar dan jullie
zal worden doorgegeven het op de heuvels glooiende groene en puppies,
en het is prima.
>> Deze klasse krijgt aanzienlijke makkelijker na de vijfde PSET.
PUBLIEK: Spreekuur zijn zondag, maandag?
Hoogleraar: Ja, dus kantooruren de zondag op maandag voor de PSET.
Kantooruren vanavond wezen zal enkel verslag voor de quiz zijn.
Als iemand wil om binnen te komen en vragen de TAS een vraag, zullen we er zijn.
>> Ik zal misschien nog een vraag te nemen als iemand een vraag?
Ja?
Publiek: Als je definiëren knooppunten [onhoorbaar]
als je zegt knooppunt ster en dan de volgende, doet de computer automatisch
begrijpen dat je bent verwijzing naar andere pointer?
>> Hoogleraar: No.
>> PUBLIEK: Je moet Het opnieuw koppelen [onverstaanbaar]?
>> Hoogleraar: Dus in principe de structuur van een knooppunt is, vergeet niet,
het is alsof je het knooppunt te maken en dan heb je een pointer genaamd volgende.
Alles wat je doet is het hebben de structuur daar.
Je moet toewijzen dat ergens pointer.
Dus de computers niet weet wat het nog doet.
Je moet eigenlijk toewijzen wanneer je bent het maken van uw gelinkte lijst.
En dat is wat vooral PSET 5 zal op zijn.
Dus geen zorgen over elk van dat recht nu.
>> Publiek: Dus we hoeven niet te richten zich te veel op de link lijst, net
de algemene opvatting?
>> Hoogleraar: Gewoon vrij veel stapels, wachtrijen, koppeling lijsten, bomen, hash tabellen.
Gewoon in staat zijn om te weten wat ze zijn.
We gaan niet om te vragen je iets specifieks wilt
want we hebben niet echt gedaan PSET dat het betrekking heeft op een van die nog.
>> Dus in de laatste twee minuten voor Ik je vrij om deze quiz te vermoorden.
Vrij veel, als, na te denken over hoe ver jullie zijn gekomen in deze klasse.
>> Ik herinner me dat twee weken van deze klasse, sommigen van jullie
spenderen drie uur schrijven water.
Hoe lang zou het duren jongens te water nu schrijven?
30 seconden, misschien?
Denk na over hoeveel jullie hebben geleerd.
CS is een heel, heel moeilijk onderwerp.
Er is geen twijfel dat.
Het is moeilijk, dat is waarom niemand bestudeert het.
Het is gewoon moeilijk.
En het is helemaal prima.
>> En ik ben echt trots op dat iedereen heeft het zo ver gemaakt.
Psets zijn niet gemakkelijk.
Ze nemen veel tijd.
Jongens, ik zal u nooit vragen om te schrijven het spel van 15 of Vigenere op het PSET.
Geen behoefte om gewoon flippen over.
Alles wat we hier testen is om te evalueren uw conceptuele kennis, alsook
zoals sommige van uw basisvaardigheden van codering.
De test is bedoeld om echt uitdagend.
Zoals, is het ontworpen voor u om te krijgen 100.
Het is ook ontworpen voor u om waarschijnlijk niet kunnen eindigen in 75 minuten.
En dat is helemaal prima.
Ik ben een student zelf.
Ik weet het, ik haat het wanneer ik loop uit een quiz zijn als, shit.
Dat was echt moeilijk.
Waarschijnlijk wat er gaat happen-- en dat is helemaal prima,
Ik zeg jullie nu.
De middelen op deze dingen zijn niet hoog op alle.
>> En voor degenen onder u die hebben gekregen, zoals,
drieën op uw probleem sets, dat betekent niet dat je bent
naar een 60 procent krijgen in deze klasse.
Als je 60% van de quiz, dat niet doet
bedoel je gaat krijgen een D in deze klasse.
We zien, vooral ik, voor die van u in mijn afdeling,
Ik zie hoe hard jullie werken allemaal.
En ik houden van dat.
>> Jullie zullen wel goed.
Er is geen institutioneel geheugen van geluk op het einde van het semester.
Omdat alle Harvard kinderen vertellen hun vrienden, oh, kunt u prima.
Niemand vertelt jullie dat hier.
Dus ik moet u dat hier jongens vertellen.
>> Jullie zullen wel goed.
Ik ben zo trots op jullie allemaal.
De test zal moeilijk zijn.
Studie voor het, en daarna gooi het weg.
Maak je klaar om nieuwe dingen te leren.
En eet snoep.
We hebben hebben veel snoep.
>> Krijg een goede nachtrust's.
Niet niet slapen, omdat dat echt slecht zou zijn.
CS is een stuk van de logica.
Als je niet slaapt, kun je niet functioneren, en je hersenen kan niet functioneren.
En ik zal hier voor de komende 20 minuten als iemand wil om rond te hangen.
Jullie gaan om het te doden.
Veel geluk.