[Muziek] JASON HIRSCHHORN: Oké, iedereen. Welkom op Sectie. Dit is CS50, onze eerste super sectie. Zoals u allen weet, volgende week reguliere afdelingen zal beginnen, maar deze week zijn we allemaal samen. Er is mezelf. Mijn naam is Jason. Ik ben een docent in Computer Science. We hebben Andi, wie is het hoofd TA van CS50. En Scaz, professor Brian Scassellati, hij is een professor in Computer Science. Wij zijn de CS50 hoofden aan de Yale. U kunt altijd mailen ons heads@cs50.yale.edu. We zullen lezingen. We zullen zijn op kantooruren. Als er ooit iets wat we kunnen voor u doen, alles wat je nodig hebt, voel je vrij om uit te reiken naar ons. Dus wat gaan we doen vandaag? Of voor die tijd, wat is er deze week? Dus kantooruren zijn maandag, dinsdag, Woensdag en donderdag 8:00 tot 11:00 uur. Er is een programma op de website. Secties, zoals ik al zei, beginnen volgende week. En je zult deze week uit te vinden wat timen uw sectie is, welke dag het is, en wie uw TA is. Probleem Set 1 is verschuldigd op donderdag middag, vrijdag 's middags met een late dag. Ja, je hebt negen dagen te laat. Er zijn negen probleem sets. En kan alleen gebruik maken van een late dag per probleem set. Ja, in feite alle problemen sets zijn het gevolg van vrijdag op de middag. Dat is alles. Alle gegevens die op de syllabus. Elke vrijdag, hebben we lunches. Wij willen van de grote maken Natuurlijk voelt een beetje kleiner. Dus u bent van harte welkom om RSVP. Gratis lunch met collega- klasgenoten en medewerkers. cs50.yale.edu/rsvp. Al deze dingen die Ik heb op het scherm, en nog veel meer, vindt u cs50.yale.edu of cs50.harvard.edu, als je naar Harvard en kijken naar deze online. Ook op deze websites, zijn er zijn een hoop van de middelen voor u. Elke lezing heeft niet alleen de video van de lezing, maar ook notities. Iemand zal het horloge Lezing en aantekeningen voor u. Dus je kunt gewoon betalen aandacht tijdens lezingen, of je kunt hun notities gebruiken / onze merkt op uw eigen notities aan te vullen. Er zijn dia's online. De bron code-- alles David gaat over in collegezaal, of Scaz gaat over lezing, dat broncode is online beschikbaar ook, zoals als ik, noemde video's. Secties, evenzo, worden allemaal gefilmd. Al die slides zullen beschikbaar zijn. Al die code zal zijn voor u beschikbaar. Er zijn korte broek op de website waar CS50 medewerkers besteden vijf tot 10 minuten gaan door onderwerpen voor u. Sommige van die u al hebt ondervonden problemen in sets. Kantooruren, zoals ik al zei, maandag tot en met donderdag van 8:00 tot 11:00 uur. CS50 Studie is een fantastische bron. Er zijn praktijk problemen, monster dia's, bekende bugs dat studenten graag te lopen in, voor wezen elk onderwerp we dekt in deze cursus. En tot slot, op deze dia tenminste, Reference50 waar u informatie geeft alle van de C-functies je ooit zou kunnen hopen te gebruiken en veel, veel meer. Nogmaals, dat dot dot dot aan de onderkant van het scherm om aan te geven dat er nog meer middelen op die twee websites: cs50.yale.edu, cs50.harvard.edu. Dus, wat gaan we doen vandaag? Nou, ten eerste ik ga geven je kijkt naar de middelen. Deed al die ene. Kijk naar ons. Nu, we gaan dan gaan types en operators data in C. Dan zal Andi hier te komen en gaan over bibliotheken in C, Printf (), een functie waarmee u al vertrouwd of zal zeer snel worden vertrouwd. En je zult ook gaan over conditionals en loops. En dan eindelijk, Scaz zal gaan over de CS50-ID. Als u nog niet dook al in Probleem Set 1, alsmede hoe het te gebruiken terminal en nuttige commando's en dan geef je een aantal demo's en praktijk codering in de CS50-ID. Voordat ik spring in deze inhoud aan deze kant, Heeft iemand enig vragen tot nu toe? Grote. OK. Het schakelen. [Het schakelen] Dat was me een verschuiving versnellingen in een handleiding auto. Zo datatypes in C, kun je niet gewoon een variabele x en hebben het op lijn 10, een integer, misschien het getal 1, op lijn 20, een decimaal getal 10,5, en dan een paar lijnen later een string, ik hou CS50. In C kunnen variabelen alleen een ding, en slechts één ding. En dus moet je hen types te geven. En op dit forum, we hebben een lijst van soorten. Er zijn tekens die staan ​​karakters. Dus dat is een letter A, B, C, D. Dat ook een ruimte kan zijn, of die ook een nieuwe lijn karakter. Er zijn gehele getallen, die gewoon getallen, hele numbers-- of getallen rather-- maar geen decimalen. Voor de decimalen, hebben we floating point getallen. Floating point getallen getallen met decimalen. Dan zijn er longs, die wezenlijk langer integers. U zult merken dat een lange 8 terwijl een int is 4. Ik zal dat krijgen in een tweede. Dat komt omdat verlangt zelfs kan opslaan meer gehele getallen dan een int kan opslaan. Double is een lange float. En ten slotte hebben we snaar, wat een type dat u waarschijnlijk eerder hebt gebruikt. Als je onder hashtag # includeCS50.h in uw bronbestand, dan kunt u een soort string. Het is eigenlijk niet ingebouwd in C. Er zijn een paar andere soorten ook. Maar dit zijn de belangrijkste degenen met die u wilt gebruiken en tegenkomen. C als, weer zei ik, elke variable-- is kan slechts één type en slechts één type. Dat komt omdat C is een statisch getypte taal, in tegenstelling dynamisch getypeerde talen waar als u een variabele maken je kunt veranderen wat er opgeslagen in als je verder gaan in het programma. Hier aan de rechter kant, ik heb de verschillende maten Deze soorten gegevens in bytes. Dus een teken is 1 byte. Dat is 8 bits. En dat betekent, want 8 beetjes er acht 0s en 1s. We zagen deze demo in de eerste week met die binaire bollen. Met 8 bits of 1 byte, kunnen wij getallen van 0 tot 255. Rechts. Als alle 8 bits 0, dat is 0. Als de eerste bit is 1, dat is het aantal een, en ga zo maar door, helemaal tot 255. En dat is waarom voor de personages die je kunt in wezen tot 255 daarvan, maar dat is genoeg om alle dekken karakters moeten we gebruiken. Voor gehele getallen, kunt u 0 en dan heb je 2 om de 32 min 1. Dat zijn hoeveel opties je hebt voor integers. Voor een lange, heb je 0 2 de 64 min 1. Dus je hebt vele, vele, meer mogelijkheden voor longs. Strijkers, dat is een vraagteken want dat is een cliffhanger voor later. Ja. Ik kon vertellen iedereen is aan de rand van hun zetel, zoals wat is dat vraagteken? Het is een cliffhanger. We zullen uiteindelijk ter grootte van strijkers en praten meer over snaren. Omdat koord is eigenlijk één van de zijwieltjes we op dit cursus bij het begin en dan later af op, omdat strings in C zijn eigenlijk pointers karakter arrays. Maar nogmaals, dat is een Cliffhanger voor later. Voordat ik verder gaan vragen, commentaren, zorgen over deze dia? OK. Ik moet een fantastische uitlegger zijn. Ook als je het programmeren, je gaat deze operatoren gebruiken. Heel simpel tekenen dat eenvoudig kan doen operaties, waarmee je waarschijnlijk al zeer vertrouwd. Bijvoorbeeld, rechts kant zien we voegen. Toe te voegen, je gewoon een plusteken. En dus je zou kunnen hebben twee variabelen x en y. U kunt x + y doen in de code. Misschien wil je to-- je zegt het nummer 7 en 3, u wilt opslaan dat een bedrag variabele genaamd. U kunt int doen voor het type, ruimte Kortom, de naam van de variabele = 7 + 3; Wat zou die winkel in de som? Iedereen? Als ik in som = 7 + 3. Wat zou worden opgeslagen in som? Je kunt gewoon schreeuwen het uit. Publiek: 10. JASON HIRSCHHORN: 10! Zo is het precies. Hoe zit het in som = 7-3, Ik gebruik gewoon dat streepje teken. Wat er gaat worden opgeslagen? Publiek: 4. JASON HIRSCHHORN: 4. Som is waarschijnlijk de verkeerde naam voor die variabele, maar 4 worden opgeslagen. Te vermenigvuldigen in C, gebruik maken van de kleine Star karakter, hoef je niet een x gebruiken. Te verdelen, gebruik dan een Forward Slash niet de divisie symbool. En modulo, gebruiken het percentage symbool. Dus laten we zeggen dat ik wil zien int z = 7% 3, wat zou worden opgeslagen in z? Dus, dat is in wezen vragen wat doet modulo doen? Weet iemand wat modulo doet? Ja. y 4. SPEAKER 1: Het is de rest. JASON HIRSCHHORN: Het is de rest als je verdelen. Dus 7 gedeeld door 3 is 2 resterende 1. Dus 1 zou worden opgeslagen. Je deed aftrekken, maar dat is hoe het werkt. Dat is wat de modulo operator doet. Het duurt een aantal verdeelt door een ander nummer en keert terug naar je de rest. Dus nogmaals, 7% 3 geeft u 1, omdat Gedeeld door 3 is 2 restant 1 7, en geeft de rest. Hoe zit het laten terug te gaan omhoog een stap naar die afdeling teken. Als ik 7 / gedeeld door 3 doet iedereen weet wat dat zou terugkeren? Luidspreker 2: 2. JASON HIRSCHHORN: Waarom 2 en niet 2,333? Luidspreker 2: Ik denk dat het snijdt na het hele nummer. JASON HIRSCHHORN: So dat is precies juist. In C, als je afdeling van doen twee integers 7 gedeeld door 3, Het antwoord krijgt die in dit geval 2,3333 forever en hij constateert dat komma en hakt alles uit na de komma en het gewoon keert u 2. Dus als ik 8 gedeeld door 3. Die eigenlijk weten we die terugkeren 2,666, maar het hakt alles uit bij de decimale, kapt het allemaal, en gewoon terug naar je 2. Dus 6 gedeeld door 3, 7 onderverdeeld van 3, 8 gedeeld door 3, gaan allemaal terug naar je 2. Weet iemand of een gok, hoe ik eigenlijk zou kunnen krijgen de volledige antwoord als ik wil dat decimaal? Ja. Doe Maar. SPEAKER 3: Gebruik een vlotter? JASON HIRSCHHORN: Wat bedoel je? SPEAKER 3: Omdat je zei dat de float is voor nummers [onverstaanbaar] JASON HIRSCHHORN: Recht. Dus, dat is precies goed. 7 is een geheel getal. Maar als ik wilde zetten dat in een floating point getal, Ik zou moeten slaan dat als 7,0 omdat de computer is echt stupid-- we dat zagen de PB en J example-- het zal alleen precies doen wat je te vertellen. Dus als je schrijft 7, is het denk dat het een integer. Als je schrijft 7,0, hoewel we weet dat die dingen zijn gelijk, Het behandelt dat als een floating point nummer. Dus als je dat deed 7,0 verdeeld van 3 of gedeeld door 3,0, het zou zeggen, OK, nu we te maken met praalwagens. Ik zal voor altijd bij u terug 2,333333. Maar niet echt voor altijd, omdat zoals we zagen ook in collegezaal, deze floating point getallen zijn niet precies nauwkeurig. Dus als je wilt dat decimaal, of een deel van die cijfers, dan moet je een van hen use-- moet een floating point getal en de computer te begrijpen dat dit een floating point je bent behandelen, geen geheel getal. Voor vragen op die tafel op de rechterkant, tot nu toe? Of uw linkerhand, je links, uw linkerhand. Ja. SPEAKER 4: Recht. Want net als een gewone getallen, zou je write-- zou je moeten schrijven drijven? JASON HIRSCHHORN: Ja dus. Nou, als je wilt maken een variabele die een vlotter, je nodig hebt om vlotter te zeggen z is gelijk aan iets. SPEAKER 4: OK. JASON HIRSCHHORN: Maar als ik wilde do 7 gedeeld door 3 en krijgen dat decimale, Ik zou float z = 7,0 / met 3,0 doen; en die me de floating point zou geven nummer. SPEAKER 4: OK. JASON HIRSCHHORN: Als ik dat deed iets als int z = 7 / met 3, die me een integer zou geven, want dat zijn allemaal getallen. Slaat dat ergens op? SPEAKER 4: Ja. JASON HIRSCHHORN: OK. Grote. Andere vragen over die tafel? Echt waar? Ik ben zo verheugd. OK. Dus sommige andere dingen die je gaat gebruiken, vaak in omstandigheden of lussen, zijn deze vormen van operators-- deze soorten Booleaanse expressies. En zoals we geleerd == is wat je gebruiken om te controleren of twee dingen gelijk zijn. Dus hier ben ik het controleren als x == y, laten we weer aannemen dat x en y 7 3. Dus als ik schreef 7 == 3, wat zou die terug naar mij? Is dat waar of onwaar? Publiek: Valse. JASON HIRSCHHORN: OK. Ik voel me alsof iedereen kan het krijgen. Dus iedereen, wat zou dat terug? Publiek: Valse. JASON HIRSCHHORN: False. Grote. 7 is niet gelijk aan 3. Dus 7 == 3 zou return false. Je moet wel een niet gelijk teken, dus als ik gecontroleerd 7! = 3, wat zou dat terug? Publiek: True. JASON HIRSCHHORN: True. Excellent. Iemand was zeer nadrukkelijk in de rug en waarderen dat. Vervolgens minder dan operator heb je, minder dan of gelijk aan operator, groter dan operator, groter hoogste operator. Dus nog een sanity check. Als ik had 7 is groter dan of gelijk aan 3. Wat zou dat terug? Publiek: True. JASON HIRSCHHORN: True. Ja. Dat achterkamer, achterzijde van de kamer, fantastisch. U kunt deze combineren uitdrukkingen als je wilt, maar ook, een logische AND die && Of een logische OR die || ||. En nu kunt u twee testen dingen together-- Is dat grappig? Waarom is dat grappig? Dus als ik wilde, ik kan zeggen is 7 groter dan 3 en 2 minder dan 4? Nou, als 7 is groter dan 3, dat is waar. 2 minder dan 4, dat is waar. Dus dit hele ding zou gelden terugkeren. Als ik testte 7 groter is dan 3 en-- Ik ben gewoon plukken willekeurige getallen hier-- 4 minder dan 2, nou, dat is vals. Dus waar en onwaar make vals. En je kunt gaan en je combineren vele voorwaarden samen als je wilt. Heeft iemand nog vragen hebben, commentaren, zorgen nu toe? En ik zie sommigen van jullie nemen van foto's van mij in het scherm, die ik zeer waardeer. Hopelijk is het niet SNAPCHAT. Hopelijk, het is voor uw notities. Maar al deze gaan online beschikbaar zijn. Zodat je niet hoeft te foto's van deze te nemen. Zoals ik al zei, alles zal online beschikbaar zijn voor jou. OK. Ik ben over te krijgen offstage, dat doet iedereen wil om iets te zeggen voordat dat gebeurt? Vragen? [Onderbreekt hem VOICES] JASON HIRSCHHORN: Oh, te stoppen. Jullie zijn te aardig. OK. Ik ga naar een label uit. Laten we gaan. ANDI Peng: We gaan om te doen een onhandige mic verandering nu. JASON HIRSCHHORN: Ik ben gaan deze opstijgen. ANDI Peng: waarderen de steun, jongens. Kan je me horen? Is dat goed? Perfect. Mooi. Laat me instoppen alleen dat in. OK. Dus, ik ben over te doen, zoals een gigantische informatie dump nu op jullie. En geen zorgen ook als je niet na elke kleine lijn van wat Ik sta op het punt om te laten zien. Zoals Jason zei, alles is volledig online. Gewoon gaan we proberen in te voeren iedereen de concepten overdekte in sommige slides. Dus volg gewoon langs. Geen zorgen als je niet begrijpt alles; Indien evenwel op elk punt je verloren voelen, steek uw de hand, zullen we stoppen, geen zorgen. Cool. Dus ik denk dat er iets dat David heeft al een soort genoemd in college en Jason heeft soort zinspeelde vandaag is wat een bibliotheek is. Dus in de programmering, hebben we deze dingen genoemd bibliotheken. Waar in wezen alle ze is gewoon een set functies, die in wezen gewoon code die is al geschreven door iemand anders dat we kunnen allemaal gebruiken in onze programma's. Dus hoe werkt een normale bibliotheek werk, toch? U komt binnen in de bibliotheek deur. Je hebt al deze boeken die je kunt trekken uit en je kunt toegang tot informatie in die boeken. Hetzelfde in de programmering. Je hebt een bibliotheek die al geschreven door andere mensen. En de manier waarop je kunt, als programmeur of een student, kan de toegang tot die bibliotheek te krijgen is via hashtag # include. Bijvoorbeeld, in C we hebben drie C-- de meest veelgebruikte drie C standaard libraries-- de input / output bibliotheek, de snaar bibliotheek en de wiskunde bibliotheek. Dus in de eerste paar probleem stelt, die zullen de drie zijn dat je in de eerste plaats gebruikt. Dus zoals David al toegelicht in collegezaal, de standaard I / O-bibliotheek, of standaard input / output bibliotheek doet precies dat. Hiermee kunt u, in uw code, om input iets van de gebruiker en de uitvoer die het scherm in wezen printen naar het scherm. En dus elke keer dat je elke functies, bijvoorbeeld de functie printf () die we gaan te gaan over de volgende dia, Zorg ervoor dat de standaard onder meer I / O bibliotheek of anders je gaat niet in staat zijn om de printf () functie gebruiken. Omdat je, als de programmeur eigenlijk nooit schreef dat de functie, je bent gewoon met iemand code anders in uw eigen code. Is dat zinvol iedereen? Cool. En dan hebben we in wezen te krijgen op string.h de bibliotheek en de math.h bibliotheek, .h gewoon betekent bibliotheek, andere bibliotheken die u zult uiteindelijk worden met behulp van in de code. Voor doeleinden van deze bibliotheek ook have-- van deze class-- hebben we ook wat wordt genoemd de CS50 bibliotheek, cs50.h waar we voor uw inzage hebben gecreëerd vele belangrijke en handige functies. Zodat u als programmeur kan meeliften off wat we hebben al zo dat de schriftelijke 's beschikbaar deze functie voor u voor uw gebruik. Ik zal die een paar de gebruikte functies, maar weet dat dit zijn Alle googleable online. Voel je vrij, trek de CS50 bibliotheek en dan heb je alle functies daar. Ja. SPEAKER 5: Dus als je niet was met behulp van de software die wordt door ons geleverd de klasse, dat doet bedoelen we zouden moeten downloaden en te vinden deze header bestand onszelf en vertellen de computer waar het is? ANDI Peng: Grote vraag. Precies. Dus het is net als je niet fysiek aanwezig zijn in een bibliotheek, er is geen manier voor u om daadwerkelijk te gaan en toegang te krijgen tot het. Dus hetzelfde met programmeren in C, u moet je ervoor zorgen dat je met behulp van onze apparaat omdat de bibliotheek is al is opgenomen in het. En dan wanneer je hashtag #include, de bibliotheek daar. Ja. Goede vraag. Iedereen goed? Cool. Prima. Dus we gaan om te slaan, Wat is met de eerste functie Wij als programmeurs zijn gaat gebruiken in onze code. Dit is de printf () functie genoemd. Dus, printf () functie, zoals ik heb al zei in de laatste dia, is in de standaard I / O, standaard input / output, bibliotheek. Dus zorg ervoor dat wat je ook bent using-- oh, laat me pak de laser pointer-- wanneer u gebruik maakt de printf () functie, moet je de standaard onder meer I / O bibliotheek of anders, als je compileren, je gaat om een ​​fout te krijgen omdat de computer zal zijn als, oh ik weet niet waar printf () is, je me niet vertellen waar de printf () is. Well printf () opgenomen in de standaard I / O, dus als je gebruik maken van printf (), zorg ervoor te hebben dat lijn boven uw code. Dus bijvoorbeeld printf () Hier is een functie. Alles wat het doet is print iets de haakjes aan de gebruiker. Zou iemand graag een gooi te nemen wat deze regel code recht hier gaat om uit te printen? Vandaar dat het antwoord is op het scherm. Iedereen? Verdi: De bodem. ANDI Peng: Verdi, waarom ga je niet vooruit en zeg de hele verklaring? Verdi: Hallo, mijn naam is Andi, en ik ben 20 jaar oud. ANDI PENG: Ah, mooi. Dus in deze lijn gaan we printen, Hallo, mijn naam is Andi, en ik ben 20 jaar oud, die is in feite een echte statement. Syntax. Dus paar syntactische problemen die jullie willen ervoor zorgen dat je weet. Quotes. Dubbele aanhalingstekens vertellen de computer die alles binnen zal worden afgedrukt. Alles binnen can gewoon precies hoe u typt, behalve voor vaak aan het eind, we gaan wilt opnemen een hash-- oh sorry-- een streepje n. Dus een streepje n. Wil iemand een gok te nemen wat dat doet met onze code? Ja. SPEAKER 6: Zet het op een nieuwe regel. ANDI PENG: Precies. Dus dit alles doet is toestaan ​​wat er ook gebeurt na deze, na deze verklaring, om te worden afgedrukt op een nieuwe regel. Zodat wanneer je het schrijven van uw code die je niet willekeurig dingen hebben geplakt op het einde die u niet wilt. Dat alles krijgt keurig gedrukte één regel en dan beginnen we ons op de volgende regel. Is er iemand die weet wat dat puntkomma doet wanneer we het coderen? Ja. SPEAKER 7: Statement. ANDI PENG: Sorry? SPEAKER 7: Is het einde van de verklaring? ANDI PENG: Ja. Dus in C, of ​​enige programmering taal, de puntkomma geeft het einde van een programmeerregel. Dus bijvoorbeeld, in het Engels gebruiken wij periode zeggen, oh dit het einde van een zin. In de programmering, hetzelfde, we hebben een puntkomma aan het einde van een regel geven. Vaak, als je begint te programmeren je je realiseert vergeten om een ​​puntkomma toe te voegen en dan probeer je te lopen uw code en het werkt niet. En je bent zoals, Ah, ik niet weet waarom, het zou moeten werken. De kans groot dat je waarschijnlijk vergeten een puntkomma of een beugel of zoiets ergens. Dus, dat is belangrijk om te onthouden. Cool. Oké, handopsteking, hoe veel mensen hebben hier ooit genomen AP Computer Science of geprogrammeerd in Java voor, ooit? OK. Heerlijk. Dat zal niet van toepassing Vervolgens, maar in Java, je hebben iets genaamd System.out.println die niet bestaat in C. Dus in C, wanneer u wilt toevoegen in de variabelen in alles wat je wilt uit te printen, is er een specifieke syntax we gaan gebruiken. Dat heet de placeholding-- wezen we tijdelijke aanduidingen toe te voegen in plaats van de eenheid of de variabele dat we willen afdrukken. Dus zoals jullie kunnen zien die we hebben opgenomen een nieuwe bibliotheek header-bestand hier. De CS50 bibliotheek. En bevatte in die CS50 bibliotheek is een gemeenschappelijke functie die we zullen gebruiken in onze cursus genaamd getInt (). Heeft iemand wil een gooi te nemen op wat getint () zijn mogelijk te doen. PUBLIEK: [onverstaanbaar] ANDI PENG: Sorry. Kon je niet horen. Maddie, iedereen. MADDIE: Oh, vraagt u een integer. ANDI PENG: Precies. Dus deze functie, andere functie die al is geschreven door iemand anders dat we kunnen een beroep doen op nu. Al is het is gevraagd om de door u, de gebruiker, in te voeren wat je wilt als de code draait en slaat whatever-- in dit geval zijn we getInt () - ing, dus dat betekent dat we verkrijgen van een integer. En we gaan slaan dat andere integer dat we net hebben gemaakt genaamd leeftijd. Dat zinvol voor iedereen? Cool. Dus nu dat we dit integer hebben opgeslagen, dat we hebben gevraagd van de gebruiker, in deze variabele, we hebben gemaakt van het type int genaamd leeftijd, kunnen we vooruit en plaats gaan dat onze printf () functie. Dus de syntax gewoonlijk printf () is dat waar in je fysieke lijn die u wilt dat integer omvatten, je dat symbool doen daar, het percentage symbool, met de type van de variabele die u wilt. Dus in dit geval leeftijd een integer. Dus je gaat te nemen % i omdat het een integer. En dan na uw statement, je gaat om komma en het doen de naam van de variabele. Dus hier, we gaan printen out, Hallo, mijn naam is Andi, en ik ben blank jaar oud. Hashta-- of, sorry--, leeftijd met wat ik inbreng. Dus als ik om input 20 voor mijn getint (de) hier, het zou precies hetzelfde uit te printen. Maar, als ik wilde iets invoeren anders, zoals misschien wel 40 of 45, dan zou je zien dat weerspiegeld dienovereenkomstig in de code. Dit is dus een voorbeeld iets waar het drukt uit en kijkt naar je net zo als het is het zelfde ding, maar onder de motorkap van de computer is er eigenlijk heel verschillende dingen gebeuren. Cool. Prima. Dus wat als we willen meerdere variabelen? Vrij eenvoudig. Hetzelfde. We hebben ook een nieuwe functie hier genoemd GetString (), Ook omvat binnen de CS50 bibliotheek dat alles wat het doet is vraagt ​​de gebruiker een koord, dat slechts een set van personages, dus als een straf of als een naam. Dus in dit geval, zouden we twee hebben placeholders% s voor strijkkwartet en% i integer. En we gaan volgen dat de twee variabelen We willen opgenomen, in de volgorde dat ze in de zin. Dus bijvoorbeeld, mijn naam is leeg, ik wil een naam daar, dus ik ga eerst de naam te hebben. En dan daarna, ik wil leeftijd, willen leeftijd tweede hebben. En dus als ik wilde invoeren, Hello, mijn naam is Andi en ik ben 20 jaar oud. Als ik ingevoerde Andi en 20, de precies hetzelfde zou afdrukken; Maar nu hebben we twee opgeslagen variabelen naam en int. Ja. SPEAKER 8: Zou het kunnen draaien als je overgeschakeld naam en leeftijd op het einde van die? ANDI PENG: Ja. Dat is echt een goede vraag. Zo lang verhaal kort te maken, nee. Omdat de naam en age-- wat type variabele is de naam? SPEAKER 8: String. ANDI PENG: En wat type variabele is leeftijd? SPEAKER 8: Integer. ANDI Peng: Dus hier hebben we een placeholder voor strijkkwartet en integer, toch? Dus als je om deze te schakelen, de computer is niet van plan om te weten. Het gaat om te controleren of een string, en als je probeert te geven een int, het zal zijn als wacht ik ben in de war, je vertelde me dat ik zou moeten zijn toewijzen van geheugen voor een int. En hier, wanneer verwacht een integer en je het een naam geven en een string in plaats daarvan, Het gaat ook erg verwarrend te zijn, zal niet precies uitvoeren van de manier waarop je het nodig hebt. Dus hier, naamgeving en syntax zeer belangrijk voor het uitvoeren van code. Iedereen goed? Ja. Maddie. MADDIE: Hier, ik weet dat we hebben gekeken naar voorbeelden in de klas, waar ze vragen Wat is uw leeftijd, wat is uw naam. Hier, zou dat zij het doesn't-- als we deze code uitvoert, het zou niet vragen dat? Maar je zou gewoon ingang twee nummers en dan zou het uit te voeren als dat? ANDI Peng: Ja, precies. Dus als je wilde voor het te vertoning, vul dan uw leeftijd, je kunt gewoon voeg een printf () functie dat zegt, Vul uw leeftijd, erboven. Dat is een goede vraag. Ja. SPEAKER 9: Dus, zou al opgenomen in getInt () [onverstaanbaar]. ANDI PENG: Nee, het is eigenlijk niet. Dus dit alles doet is gewoon vraagt ​​een leeg scherm aan de gebruiker om invoer iets. Als je wilt, als je wilt dat het afdrukken iets dat de gebruiker vertelt zoals, geef me je leeftijd, dan zou moeten printf (), die zelf. Omdat iedereen gebruikt deze functie voor verschillende dingen, je zou kunnen worden opslaan van leeftijd, je zou kunnen worden opslaan van het adres, je zou kunnen worden opslaan van telefoonnummers. En dus het is echt aan individuele gebruik van uw jongens ' voor wat je wilt zeggen. Ja. SPEAKER 10: Dus, gewoon om te verduidelijken, waarbij heb je het invoeren van de naam en de leeftijd zodat het verschijnt in de plaats van% s? ANDI Peng: Zoals in de gebruiker? SPEAKER 10: Ja, zoals hoe doe ik maken het-- waar moet ik Andi, en waar moet ik 20? ANDI PENG: Ja. Dus als je om eigenlijk deze code uitvoert, Ik ben niet echt het uitvoeren van de code, dit is gewoon hier nu. Als ik de code uit te voeren, zou ik compileren van de code, maakt het bestand, uitvoeren van de code, en dan zou er slechts twee ruimtes voor mij om input het. Ja. Jullie zullen zien wanneer je speelt rond met de code zelf. Oké we gaan verhuizen in het volgende deel van wat zullen we die vandaag de dag. We gaan om te gaan over wat voorwaardelijke verklaringen zijn. Dus als jullie herinneren en herinneren van lezingen, voorwaardelijke verklaringen, allemaal zijn ze zijn een reeks instructies voor de computer in dewelke een bepaalde voorwaarde waar is, u de code uit te voeren de binnenkant van die voorwaarde. Dus in wezen Scratch-- het grote thema van vandaag is dat jullie al alles gezien de logica achter alles dat we die. En alles wat we aan het doen zijn is iets vertalen dat was zeer intuïtief in Kras, en hard te coderen in de syntax we zullen gebruiken voor de klasse die C. Dus logisch, al dit blok was is dat stukje code daar. Ja. OK. We hebben ook anders te krijgen in een if ... verklaring die is gewoon een extra laag complexiteit van de if-statement waar de computer neemt een kijkje op deze en ziet, als deze voorwaarde waar is, doen wat is binnen deze twee haakjes, else-- dus net zoiets als de standaard als Het voldoet niet aan de Staat- dit te doen. Het is als een vork in de weg. Als het buiten regent, heb ik op een regenjas, anders niets anders zou ik niet op een regenjas. Betekent dat logica zinvol om iedereen? Cool. Prima. Dus als een harde voorbeeld van dit dat we in C zou zien is als ik wilde een te creëren variabele genaamd huiswerk uur. En als huiswerk uur minder dan vijf, ik zeg Het leven is groot. Het is fantastisch. Echter, zegt De strijd is real-- dat is wat we allemaal op deze maandag namiddag up Science Hill zijn waarschijnlijk goed doen now-- PUBLIEK: [lacht] ANDI Peng: De manier waarop we zou, dank u voor dat. De manier waarop we zouden hardcoden dit in C is if-- laten we aannemen hebben we al een variabele van het type int genoemd huiswerk uur hier. Als huiswerk uur is minder dan vijf printf (), Het leven is groot. Vergeet niet te houden / n, omdat U wilt een nieuwe regel na. Else print, De strijd is echt. Heeft iedereen begrijpen hoe Ik overgestapt van dit blok in dit blok van de code? Cool. Prima. Dus nu gaan we een kijkje nemen Als meerdere uitspraken helemaal. Dus laten we aannemen dat de Doel van dit programma was dat we de gebruiker voor een cijfer vragen. We heeft aangezet met getint () voor een rang, en zij-ingang een waarde, en u wilt weergeven wat voor soort leerjaar kregen ze. Dus als ik een programma te ontwerpen, I betekent doorgaans in al onze ogen, 90-100 is een A, 80-90 is een B, enzovoort, enzovoort. Wat is er mis met deze stukje code dat het niet doen wat ik wil doen. Ja. SPEAKER 11: Ze hebben een lagere limieten, maar ze hebben niet bovengrenzen. ANDI PENG: Precies. Heeft iedereen horen wat ze zei? Er gaat bovenste worden grenzen, maar geen lagere limieten. Sorry, andersom, ondergrenzen, zonder bovengrenzen. Dus wilt u neem een ​​steek op te zeggen Wat op dit zou worden afgedrukt scherm als ik deze code uitvoert. SPEAKER 11: Er is een fout? ANDI Peng: Er is een fout? Grote gok, niet helemaal goed. Heeft iemand nog een steek? Ja, Aaron. AARON: Als je in iets groter dan 90, het zou alle kwaliteiten je hebt laten zien. Het zou laten zien heb je een A, je hebt een B, heb je een C. ANDI PENG: Ja. Zo is het precies. Dus, zou dat geweldig zijn. Ze zijn echter onderling exclusieve, denk ik. Als ik dit stukje code uit te voeren. En dan laten we maar zeggen, ik ingevoerde het cijfer van 95. Dus 95 is nu opgeslagen in de int genoemd leerjaar. Zo C is een taal dat loopt van boven naar beneden, dus het gaat om altijd aanloop naar beneden. Dus het gaat om hier te komen, lezen als graad groter dan of gelijk aan 90, printf () heb je een A. Groot, I een 95, die groter is dan 90. Het gaat om af te drukken, Ik kreeg een A. Het gaat om een ​​kijkje te nemen als dit, het gaat zeggen, nou 95 is ook meer dan 80, het gaat om af te drukken heb je ook een Got een B uitroepteken, en zo voort en zo voort. Zodat we allemaal kunnen zien, Dit is een veel voorkomende fout die kunnen optreden als we code te schrijven om uit te kijken. Iedereen, vragen over waarom dat gebeurde? Grote. OK. Dus hoe kunnen we dit op te lossen, is uiteraard de logische volgende vraag. Nou, we hebben deze prachtige dingen genoemd als anders als anders indien anders statements. Zodat u kunt zien, als je wilde dat probleem veranderen, gevonden voor elk van de te voorwaarden elkaar uitsluitende, zou je een anders toevoegen ... als statement. En deze van course-- van hen denken als ladders, of als treden op het ladder-- je kunt zoveel toevoegen van deze zoals u wil voor zoveel voorwaarden als je wilt. Dus hier, als ik ingevoerd cijfer te zijn 95. Als graad groter is dan 95, printf (), kreeg ik een A. Groot. Het gaat om een ​​anders zien ... als en het gaat om te weten, Oh nee, Ik reeds uitgevoerde de eerste anders. Ik weten-- of de eerste if-- ik weet dat Ik hoef niet te kijken naar een van deze omdat één van hen is al het geval geweest. Dus het gaat om te draaien van boven naar beneden. Zodra de eerste waar is, het gaat over te slaan al de rest van de anders ... ifs. Slaat dat ergens op? Dus, op deze manier heb je verschillende niveaus van controle en zodra een van hen onwaar, de rest ook, zullen ze niet eens controleren. Cool. Prima. Dit is dus een voorbeeld van een andere soort voorwaardelijke statement zien we minder vaak, maar we zullen ze zien en ze te gebruiken. En ze zijn vaak meer efficiënt voor bepaalde gevallen. Dus we hebben wat heet een switch statement. Dus voordat we bedekt wat een anders statement, een if ... else. Hier hebben we wat zijn riep switch statements. Dus toen wij gebruiken schakelaar verklaringen is de sleutel? Dus in een switch statement, je Meestal normaalgesproken je eigenlijk kan alleen gehele getallen invoeren voor uw variabele die u controleren bent. Dus als ik wilde controleren om te zien als een bepaalde number-- bijvoorbeeld een cijfer, als ik een 90. Ik wil om te zien of dat is een A, B of C. kon ik een zaak hier. De behuizing heeft een ander constant. Dus in die zin is de switch kan alleen controleren op gelijkheid van de twee getallen. Het controleert niet voor iets anders. Dus dat is iets om heel te zijn Pas op als je met behulp van deze. Dus hier, als ik wilde controleren om te zien als mijn graad van 90 is gelijk aan 90 of 80 of 70 of 60, en vervolgens afdrukken de overeenkomende soort, Ik zou kunnen schrijven dat in een switch statement. Dus het gaat om hier te komen, controle is Dit geheel getal gelijk aan deze constante? Zo niet, dan gaat het over te slaan. Is gelijk aan constant twee, enzovoort, enzovoort, totdat je de standaard geraakt, Als geen van hen zijn gelijk. Zodra een van hen wordt ingesteld gelijk te zijn, het gaat om dit te doen regel code en pauze. Wat betekent dat het gaat om raken dat lopen, te breken, en gewoon helemaal overslaan aan de onderkant van de code. Dus in die zin de aard van de functies als een of anders als anders als statement. Dus hier is een betonnen Bijvoorbeeld voor jullie. Dus laten we aannemen dat ik wilde het creëren van een variabele genaamd jaar opgericht. En ik wil de gebruiker om input gevraagd het jaar dat hun school werd opgericht. Dus ik kan een switch statement te maken. En laten we maar zeggen, ik ingang 1636. Deze code hier gaat switch zien jaar opgericht, die gelijk is aan 1636. Het gaat om het geval te zien 1636, oh die gelijk zijn, printf () Moet jij niet op die school in het noorden? Omdat we aannemen dat ze niet gaan hier als ze naar Harvard, te breken en naar het einde. Als ik om input 1701, die Ik neem aan dat ieder van ons zou invoer, zou dit geval overslaan, komen omlaag tot geval twee, die is 1701, en afdrukken Welkom bij Yale! Breken, naar het einde. Else u waarschijnlijk deze cursus nemen online waarin case-- geweldig welkom om Yale-- het gaat om naar de standaard print, Hallo Internet! En breken. Ja. SPEAKER 12: Kan je anders te gebruiken in plaats van de standaard zijn er? ANDI Peng: Nee, want de manier waarop deze hele functie schakelaar is gebouwd, de syntaxis u moet gebruiken is het geval bij standaard. Het is net als de als anders als deze één is het geval bij standaard. Ja. LUIDSPREKER 13: U misschien al dit gezegd, maar kunt u meer dan twee gevallen? ANDI Peng: Ja, je kon hebben zo vaak als je wilt. Zie het als net als oneindig toevoeging aan. SPEAKER 14: Als u geschakeld 1701 met 1636, het niet echt te maken een verschil toch? Het is gewoon te controleren voor. ANDI PENG: Dat is een echt goede vraag. En we zullen aanstippen later, maar gewoon weet dat de schakelaar statement wordt infinitely-- het is efficiënter dan en als anders als want het werkt een ander type van functie kunt u, in wezen, om gewoon springen direct naar de Indien u nodig om te zijn. Ja. SPEAKER 14: Cool. Met dank. ANDI PENG: Ja SPEAKER 14: en je kon niet doe gevallen zoals en groter dan. ANDI PENG: No. Dus, dat is wat de beperking van de switch statement is dat u constanten hebben slechts, alleen getallen. Ja. OK. Dus dit is iets dat je jongens zullen minder vaak tegenkomen van, maar ik wilde gewoon introduceren voor het geval. We hebben hier wat genoemd ternaire operator. Waar wezen, het is net als een if gecompileerd in één lijn. Hier, ik ga naar de volgende regel, de volgende pagina, omdat het gemakkelijker is om te zien. Dus we hebben allemaal dit recht gezien? Dit is vrij gemakkelijk te volgen. Als ik wilde een variabele genaamd maken koord genaamd s, indien een aantal Ik geef het op minder dan 100, I restaurant wil toewijzen aan de string, anders wil ik wijzen hoog. Dit hier doet precies hetzelfde die acht regels code aan het doen zijn. Dus hier wil ik maken een variabele string. En dit is de voorwaarde ik ben controleren, indien een aantal minder dan 100, dan heb je de waarde van de lage toe te wijzen, anders wordt de waarde van hoge toewijzen. Deze dia's zullen online zijn, geen zorgen als jullie dit niet naar beneden. Dit is slechts een eenvoudigere manier, een meer efficiënte manier van het schrijven van code. OK. Dus nu gaan we voeren wat, voor de meeste mensen zijn als een zeer, zeer verwarrend ding om na te denken over het eerste. Het gedeelte lus. Dus vandaag, we gaan praten drie soorten lussen. We gaan beginnen met een poosje lus, dan praten over een do while lus, en dan praten over voor lussen. Dus in wezen voor de meer visuele leerlingen die er zijn, hebben we in wezen een grafische afbeelding van wat een tijdje lus doet. Dus in een programmeertaal, zou je begint en voert de lus op een bepaald punt. U controleert een voorwaarde. En als de voorwaarde waar is, u de code in te voeren. En u terug rond te komen en je te controleren. Als het nog steeds waar je blijven draaien Deze code rond en rond in een lus. Echter, de tweede het de voorwaarde onwaar, je gaat te breken en het einde van de lus. Dit is hoofdzakelijk het syntax je gaat gebruiken. Terwijl een bepaalde voorwaarde is waar dit doen, als het niet waar is, je gaat naar het einde en verder te gaan met uw programma. OK. Heeft iemand een voorbeeld wat kan mogelijk gebeuren als ik probeer om dit stukje code uit te voeren? By the way, SAJ-- dat is Scaz, Andi, Jason-- we tekenen van onze e-mails, Liefde, SAJ. Dat zijn wij. OK. Iedereen heeft een voorbeeld, of een idee over wat dit zou afdrukken? Soort van een strikvraag. Dus hier, denk aan de voorwaarde we controleren op is, terwijl waar. Dus terwijl dit waar is, het is ter perse gaan, ik hou van SAJ! Is er een punt waarop we zouden dit veranderen om iets anders? Geen recht? Dus hier hebben we ondervonden wat is waarschijnlijk zal worden afluisteren veel uw programma's, de oneindige lus. Je zult zien dat als je runnen dit stukje code, het is gewoon te houden printen, ik hou van SAJ! Terwijl we waarderen de steun, we niet wilt dat uw computers te crashen omdat je blijven drukken Ik hou SAJ! Dus alsjeblieft, alsjeblieft, voorkomen dat de oneindige lus omdat het nooit te evalueren om vals en je bent nooit om de lus te verlaten. En je gaat worden meegezogen in eeuwigheid. Cool. OK. Het tweede type lus we praten over vandaag is de do while lus, doen terwijl lus. En het heet een do while lus want je hebt een doe en een tijdje. Dus dit is redelijk vergelijkbaar met een poosje lus, maar een beetje anders. Hier, je gaat doen wat de binnenkant van deze terwijl een bepaalde voorwaarde waar is. Dus als ik C en de computer ik ben loopt langs dit stuk van de code, Ik neem een ​​kijkje op de top. Ik ga naar C, ik zeg dit ding. En controleer dan ik, terwijl dit is waar, ik heb om het te herhalen. Maar terwijl dit vals is, dan heb ik vooruit en ik heb nooit terug naar die lus weer te gaan. Kan iemand neem een ​​steek wat het verschil tussen deze lus en degene die we keek was praktisch. Ja. SPEAKER 15: De toestand komt na in plaats van vóór? ANDI PENG: Precies. Dus ze zei dat de toestand komt na, niet eerder. Uiteindelijk is het verschil tussen deze en de while-lus is dat je gewoon gaat doen wat is binnen dit ongeacht of uw conditie is waar is, en controleer dan de conditie. Dus in dit geval, je bent always-- op deze wijze je bent altijd ervoor te zorgen wat er in zit loopt ten minste eens voor het controleren om te zien Als je wilt dat het opnieuw uit te voeren. En hier is een voorbeeld wanneer we zouden gebruiken. Dus bijvoorbeeld, als ik wilde hebben een variabele van het type int genaamd leeftijd, en ik wil vragen de gebruiker voor hun leeftijd, Ik ga doen printf () Wat is je leeftijd? leeftijd = getint (), die wordt gevraagd de gebruiker. En sommige mensen zullen echt vervelend. En u niet wilt dat bugs in uw programma van iemand invoeren, zoals, oh ik ben negatief 4 jaar of wat dan ook. Waarbij indien zij dat doen, dit evalueert om waar, wat betekent dat ik ga moet blijven om terug te gaan en dit te doen. Dus dit gaat houden re-vragen aan de gebruiker om u als een echte leeftijdsaantal en het zal terug gaan houden en overdoen totdat ze geven je een echte leeftijd groter dan één, of niet nul. Dus hint, hint. Dit zal zeer, zeer nuttig zijn voor een van uw Pset problemen. Ja. SPEAKER 16: Oeps, sorry. ANDI Peng: Yep. SPEAKER 16: Zijn er niet een lul te zijn, maar-- ANDI Peng: Geen zorgen. SPEAKER 16: --are er verschillende regels hier, of heb je gewoon vergeten om de offerte te zetten? ANDI Peng: Oh Yeah. Sorry, dat is helemaal mijn fout. Dat was zeker verondersteld om een ​​offerte te zijn. Goed gevangen. Dat zou niet lopen. OK. Dus de laatste soort lus zullen we praten over en, uiteindelijk, een soort van de meest complex is de lus. Maak je geen zorgen als je niet weet wat dat betekent. Het is vrij verwarrend op het eerste. We gaan meer dan een voorbeeld. Alles wat er gebeurt in een lus is dat je drie verklaringen dat je gaat nemen. Dus voor een bepaald ding, je bent naar een variabele initialiseren. Je gaat aan de voorwaarde toe te voegen aan die deze lus zal blijven draaien. En vervolgens, aan het einde van de lus, je gaat te werken. U kunt het variabele bijwerken die u wilt bijhouden. Dus we doorgaans gebruiken voor lussen voor als we willen een lus voor een run bepaald aantal keren en we al weten, Oh ik wil deze lus uit te voeren, zoals 10 keer, dan doen-- je zal ik gaan over een voorbeeld op de volgende pagina. Dus hier bijvoorbeeld in Scratch, als je wilde iets tot 10 keer te herhalen, alles wat je te zeggen had was, herhaal 10 keer ik hou SAJ! die een acceptabeler show van steun voor ons in plaats van de oneindige lus. Hier, hoe je zou overgang naar C en schrijven dat is voor int-- ik ga maken of verklaren een variabele van het type int i genoemd. Ik ga initialiseren op 0, dus i = 0; en dit gaat mijn conditie zijn. Dus ik minder dan 10. En dan aan het end-- de laatste verklaring die u bent gaat te hebben is de update van wat er met de variabele i aan het einde van de lus. Dus het is een beetje verwarrend, omdat verschillende delen van deze lijn Er gebeuren op verschillende vormen van de lus. Maar ik ga over een pseudocode voorbeeld van en dit misschien uitleggen gewoon een beetje beter. Dus hier. Dat is de lijn die we net zagen. Hoofdzakelijk in pseudocode, wat gebeurt in dit programma, is de eerste ik ben het creëren van i, initialiseren op 0. Ik controleren om te zien of ik is minder dan 10, waarbij de eerste keer is omdat 0 kleiner is dan 10. Dus de lus zal lopen. En dan ga ik deze lijn af te drukken. En vervolgens aan het einde van deze lijn, recht hier, ga ik increment i, i ++ te doen, al die middelen is verhogen door een. Dus ik nu 1. Want het was ooit 0, als ik verhogen het is, het is nu 1. En dan ga ik om terug te gaan aan het begin van de lus en ik controleer de conditie. Is de toestand nog steeds zo? Ja, 1 nog steeds minder dan 10. Dus het gaat om deze opnieuw af te drukken, gaan en vervolgens verhogen i en controleer de conditie continu continu, totdat je uiteindelijk tot het punt waarbij i 10. Je gaat dit 10 keer te printen en dan wordt ik zal gelijk zijn aan 10. Je gaat naar de toestand te controleren. Is 10 kleiner dan 10? Nee, dat is vals. Zo wordt deze lus niet gaan te lopen, gaat het te breken, en je gaat verder met uw code. Dus zoals jullie kunnen dit zien is echt een geweldig voorbeeld van een lus u kunt programmeren in die loopt een bepaalde hoeveelheid tijd. Een ieder duidelijk? Ja. SPEAKER 17: Hoe zit increment exponentieel, is het anders codering? ANDI Peng: U can-- we gaan Over deze in de volgende dia. Goede vraag. Is anyone-- voordat ik verhuizen on-- iedereen helemaal in de war, want dit is een heel moeilijk concept. Geen zorgen, als you're-- OK. Cool. Prima. Slechts een algemene glijbaan. Dit terwijl de lus wordt het doen van de precies hetzelfde de lus was. Het is gewoon anders geschreven. Jullie kunnen de slides kennisnemen op uw gemak later. Maar weet dat er meerdere schrijfwijzen hetzelfde gebeuren met verschillende lussen. OK. Zo, nu krijgen we in de vraag wat als we een lus binnen een lus. We krijgen in echte Inception soort dingen hier. Wanneer je dingen wilt meerdere doen keer binnen andere dingen dat de dingen te doen meerdere keren, je wil wat heet een geneste lus. Voor degenen onder u de eerste die dit zien en krijgen zeer verward, zijn alles wat we hier doen is het hebben van een lus, waar we hebben een variabele rij. Maar de binnenkant van het, we hebben ook een ander lus van een kolom variabele genoemd. En ik stel voor dat jullie allemaal die verward om eerst te houden track-- deze trekken, trekken dit uit. Probeer niet om goede reden door het, trek het uit. In je hoofd, op dit stuk van papier, of wat dan ook, schrijf rij, bijhouden welke rij is gelijk aan. Schrijf kolom, bijhouden wat kolom gelijk. En bijhouden van wat er afdrukken met elke iteratie. Elke iteratie van deze lus, elke iteratie van dat grotere lus, gewoon blijven na de logica. En ik garandeer je, zult u van wat je ziet, omdat het ook erg van toepassing voor uw probleem sets. Cool. Prima. Dus het belangrijkste dat zijn jullie waarschijnlijk allemaal denken over nu, zijn uw Probleemverzameling 1s, die te wijten zijn donderdag / vrijdag. In uw water.c programma, hint je gaat te hebben om de gebruiker voor een input vragen. Binnen je mario.c programma je gaat te hebben een geneste lus te gebruiken, wat een lus binnen van een lus, om een ​​blok van de piramide af te drukken, in wezen zoals wat Mario heeft om door te springen. En dan in je greedy-- of misschien De veranderingen, als iemand van jullie ooit gehoord van dat-- je gaat te hebben om heel te zijn voorzichtig eerste floating point waarden. Vergeet niet zwevende decimalen en getallen zijn niet hetzelfde. Blijf op de hoogte van welke is welke. En je gaat gebruiken voorwaardelijke verklaringen, als goed. Oké, laatste ding. Ik heb een paar minuten over. Stijl. Dus dit is iets dat niet doet daadwerkelijk invloed op de efficiency, of de feitelijke werking van de code. Toch beïnvloedt ons uw graders, als uw lezers. Het beïnvloedt je, als je proberen om een ​​probleem te vinden. Het beïnvloedt de leesbaarheid van de code. Dus stijl, net als wanneer je probeert om stijl een opstel voor Engels, als je had de punten hebben, je hebt alles wat voor soort van door elkaar op één regel, dat maakt het echt moeilijk voor iedereen om uw essay te lezen, zelfs als je punten logisch geluid. Hetzelfde in de programmering. Je kunt verschrikkelijk obscure hebben code die Scaz zal dekken, en het kan nog steeds draaien en functie. Maar voor ons, als je mooie Tas, wie dan wel te lezen en evalueren van uw PSets, Dat is niet erg aardig. Dus alsjeblieft, omwille van ons en jezelf, als je probeert op te lossen een probleem in de code, en je probeert te lees uw eigen code, maken ervoor dat je wat conventies volgen dat we gaan om te gaan over. Dus eerst. Geef je variabelen betekenisvolle namen. Als u een geheel getal op te slaan genaamd leeftijd, dan kunt u noem maar op leeftijd. Niet noem maar op de hoogte. Wanneer je probeert om slaan een tijdperk in de hoogte, het maakt alles erg verwarrend voor ons. We willen niet worden verward. U houdt niet van te verwarren. Niemand vindt het leuk te verwarren. Als je gaat om iets te creëren, noem maar iets zinvols. Echter, in de lus, enkelvoudige karakter variabelen zijn meestal prima. En in de lus, als je wilt dat ik, en j, k, voel je vrij om dat te doen. Consistente initialisatie. Dus wat betekent dat? Dat betekent technisch theorie u kunt initiëren en creëren meerdere variabelen op dezelfde lijn. Dus bijvoorbeeld, kan ik maken een integer genaamd scaz_age, en integer genoemd andi_age = 20, en een integer genoemd jason_age op dezelfde lijn. En ik kan ook slechts één van de wijzen hen en niet de andere waarden. Wij vragen u dan niet dat te doen. Want hier heb je vooral opgericht drie variabelen, maar slechts één van hen heeft eigenlijk een waarde. En toen we proberen om uw code te lezen, of als je probeert op te lossen een probleem in de code, het is erg verwarrend te volgen. Dus alleen voor uw leesbaarheid, voor onze leesbaarheid, doe dat niet. Consistente accolades. Sommige mensen willen hun zetten accolades op verschillende plaatsen. Het maakt eigenlijk niet uit. Zorg ervoor dat je consequent bent in uw eigen code van waar je ze zet. Consistente afstand. Als je een spatie na een lus, altijd doen. Niet alleen leuk voor soort doen het op sommige plaatsen, doe het dan niet in andere. Gewoon consequent zijn. Ten tweede, als iemand zou willen om kennisnemen van de CS50 Style Guide, We hebben officieel een stijlgids die vertelt u alles van deze verdragen, plus meer. Het is online. Het is net als cs50.net/style of zoiets. U kunt het google. Consistentie is de sleutel. Dus maak je geen zorgen wat andere mensen doen, maar zorg ervoor dat u bent consistente binnen je eigen code. Iedereen die vragen heeft over dat? Ja. SPEAKER 18: Dus de juiste ding te maken met de initialisatie is gewoon ze allemaal in een afzonderlijke lijn, is dat wat je zegt? ANDI PENG: Dus ik zelden gebeuren. Maar als je wilde, als je wilde te zijn als bespaart ruimte in uw code, of wat dan ook, kunt u dit doen. Wij vragen dat je gewoon niet initialiseren een ding en niet de anderen. Dus als je wilt int scaz_age doen, int andi_age, int jason_age, dat is prima. Gewoon niet initialiseren één en de andere niet allemaal. Vragen? Prima. Ik ga om te laten doorgaan van de microfoon, en de laser pointer, en het stokje door aan Scaz op dit punt. Dit is ongemakkelijk. Hier is het. BRIAN Scassellati: Dank je wel. Hoe is dat voor geluid? Geluid is goed? . Excellent. OK. Dus, hi everyone. Ik ga proberen om door te werken een praktisch voorbeeld met u. En we gaan CS50 gebruiken ontwikkelomgeving, wat heet de Integrated Development Environment. En heb je dit gezien gedemonstreerd in collegezaal. En in Probleem Set 1, je bent gaan om een ​​kans te hebben om het te gebruiken, en spelen met het, en wennen aan het, want we gaan om het te gebruiken door de rest van het semester. Dus in dit IDE, heb je wat lijkt als een zeer traditionele bestandsbrowser dan aan de ene kant. Je hebt een deel opstond top waar je naartoe gaat om uw broncode te zien, je Cfile, de code die je schrijft. En omlaag onderaan, zult u hebben een terminal venster die je zult gebruiken om zowel uw programma te compileren en uit te voeren of uw programma uit te voeren. OK. Dus alleen maar om ons een beetje stichting, in die terminal venster, je gaat worden met behulp van een set van commando's die standaard commando's gedurende zijn de meeste van Unix of Linux-systemen. En dus als je ooit gebruikt elke vorm van Unix, Ubuntu, of een van de andere smaken, deze zullen vertrouwd kijken. Als u nog niet, maak je geen zorgen. Er is niets ingewikkeld over hen. Ze zijn alleen met behulp van een ander syntaxis, een andere naamgeving conventie dan heb je eerder gezien. Dus om een ​​lijst van de bestanden binnen een bepaalde map, ze gaan een gebruiken commando genaamd ls of lijst. Als je alles wilt zien met alle details, je een commando line argument met ls -l. En dat zal je laten zien alles in meer detail, met inbegrip de rechten voor een bestand. Naar directory te veranderen, vindt u de opdracht cd gebruiken. En je zult in staat zijn om directory veranderen zowel om naar uw home directory. Dat is gewoon cd helemaal zelf, cd met twee puntjes gaat u terug op één niveau om uw vorige directory. En u kunt ook cd naar een subdirectory door te typen in cd en de naam van deze subdirectory. U kunt ook nieuwe mappen aanmaken. En we gaan lopen door dit in slechts een minuut. Maar gewoon om te zetten alles op het scherm. Zodat u kunt zien. Je hebt ook de mogelijkheid om bestanden direct te manipuleren vanaf de opdrachtregel. U zult in staat zijn om ze te kopiëren, te verplaatsen, of om ze te verwijderen, dat wil zeggen, effectief, om ze te verwijderen. De CS50 IDE geeft u de volledige kracht van de command line argumenten. En dat betekent dat u kunt ook doet zeer gevaarlijke dingen. OK. Bijvoorbeeld, je kunt verwijderen, of dat is verwijderen, Een bestand zonder te vragen voor een bevestiging. En je kunt zelfs verwijderen recursively-- dat is het dashboard r flag-- een hele subdirectory en al haar inhoud. OK. Ze zijn in het rood vermeld omdat u moeten denken "Danger" elke keer zie je die dingen. OK. Prima. Nu eindelijk, de dingen die zijn gaat echt waardevol voor u te zijn, zijn er een paar goede trucs om te weten als je het navigeren via deze terminal venster. Ten eerste kunt u het scherm te wissen elk moment door gewoon in te typen duidelijk. En je gaat zien me dat te doen heel vaak. Je kunt ook gewoon weer de tekst van een bestand door te typen en meer dan de naam van het bestand. Je zult dan in staat zijn om terug te bladeren en weer met dat alleen met de spatiebalk en pijltjestoetsen. Als je, zoals we vandaag deden in collegezaal, een programma dat continu loopt in het oneindige lus, u kan dat programma te stoppen uit het uitvoeren door te typen in de controle, dat houdt u Control-C. En je kan hebben om te doen Dit meerdere malen. De computer krijgt ver voor jou. En je soms nodig hebt om geef het een paar pogingen voordat het daadwerkelijk zal doorkomen. U zult ook in staat zijn om sorteren door de commando's dat je net hebt getypt met behulp van de sleutel, pijl van het toetsenbord, en vervolgens op de pijl naar beneden te drukken. En wat het meest handig is in plaats van het typen van lange bestandsnamen, je zult in staat zijn om het gebruik Tab om automatisch aan een paar instructies. Nu gaan we aan te tonen al die in slechts een seconde. Dus als je niet meer weet hen, maak je geen zorgen. Dat zijn dingen die je zult oppakken en gebruiken als we verder gaan. OK. Dus in tegenstelling tot Scratch-- C-- C is een gecompileerde taal. Dat betekent dat we gaan om een ​​bron te nemen file-- dat is de tekst die je schrijft, de commando's die je schrijft, de printf () statements, de lussen, alles else-- en we gaan naar dat bestand te nemen en geef het uit een programma genaamd compiler. De compiler zal dan dat de tekst die u hebt geschreven en te vertalen in de binaire instructies dat uw computer daadwerkelijk gaat gebruiken. Dat is het object met de naam of het uitvoerbare bestand. Als je kijkt naar dit bestand, je gaat om de code die je hebt geschreven te zien. Als je kijkt naar dit bestand, je gaat om een ​​willekeurige tekenreeks zien die geen zin dan ook. Dat komt omdat dit de binaire. Het is niet bedoeld voor u om te lezen. Echter, elke keer dat u wilt run iets, wat je gaat te draaien is dit object bestand. Dus toen we werken met deze bestanden, zullen we een bestand in C te schrijven We zullen vervolgens compileren het, met behulp van een commando als make die beroepen de compiler clang voor de C taal. En dat zal een object te produceren bestand, zoals een uit, of in dit geval, de naam, mijn dossier, dat ik in heb gezet. Prima. Dus laten we eigenlijk dit te proberen. Dus ik kwam met een voorbeeld van wat ik wilde proberen. En een van de dingen die fascineert mij is animatie. Dus we gaan proberen te doen een beetje animatie met alleen ASCII-tekens. Personages kunnen we gemakkelijk nu afgedrukt. Dus hier is mijn beste poging op het creëren van voor u de animatie van een konijntje loopt door het hoge gras. Daar is hij. OK. Dus hij is nog niet actief, maar hij is stond daar in het hoge gras. Nu als ik een animator, in de oude school versie van animatie, wat ik zou doen is dat ik zou produceren een beeld van dit konijntje in het gras. En dan zou ik te produceren andere picture-- een ander wat zij noemden cell-- dat had het konijn slechts licht verplaatst. En dan een derde, dat had de konijntje bewoog een beetje verder. En ik zou een hele produceren sequentie van deze cellen. Wat waar het konijn is voorbij op de linkerkant. En verplaatst langzaam een één naar het midden. En dan van de middelste naar rechts. En als ik dan, echt gelukkig, ik kon het samen en ik kon ze animeren. En daar is mijn konijntje loopt door het gras. Dat is mijn grote PowerPoint truc voor de dag. OK. Dus dit is zo goed als het wordt. OK. Dus, hier nog een keer, hier is onze bunny loopt door het gras. SPEAKER 19: Again. BRIAN Scassellati: One meer tijd, oke. Er is uw konijn. OK. Dus vandaag wat we gaan te doen is we gaan proberen om het proces te automatiseren produceren deze cellen. We zullen niet helemaal op het punt van in staat om ze allemaal samen te stellen. Maar, we gaan proberen om het te automatiseren Werkwijze voor het genereren van deze sequentie. En dit is veel van wat animatie vandaag is als. Dat wil zeggen dat je niet per se dingen doen door het tekenen van alles met de hand. We maken gebruik van een computer om te automatiseren onderdelen van dat proces. OK. Dus laat me overschakelen nu onze CS50 IDE. En ik heb gemaakt voor ons-- en laat me te vergroten hier een weinig bit-- Ik heb creëerde voor ons uitgangspunt. Elke keer dat wij u vragen om op te zitten en schrijf een stukje code, wat we je echt vragen om te doen is dat we vragen om een ​​probleem op te lossen. En de manier waarop je moet denken over het doen van dat is door te beginnen met een aantal eenvoudige deel van deze oplossing. En dan bouwen uit dat deel. En dat is wat we gaan doen vandaag. Dus in plaats van te proberen alles in één keer aan schrijf de gehele bos van code die is gaat die produceren 10 animatie cellen, we gaan in plaats daarvan beginnen met een stuk dat werkt. En dan zullen we een te bouwen beetje rond die en een beetje meer en een beetje meer. Nu het goede ding over het oplossen van problemen op deze manier is dat het zal toestaan ​​om te beginnen altijd met iets dat je weet werken en de invoering van een geleidelijke verandering. En dat is een geweldige manier om te leren hoe te coderen, omdat elke keer dat je een verandering, zie je welke impact het heeft. OK. Dus hier is ons uitgangspunt. OK. Dus aan het begin van mijn dossier, Ik heb hash #included stdio.h. Dat is zo, dat ik kan krijgen van de printf () functie te laten werken. Ik heb toen ik mijn belangrijkste functie. En dit ziet er nog steeds een beetje geheimzinnige of obscure om een ​​aantal van jullie. Dat is goed. Alles wat het zegt is dat de belangrijkste functie neemt geen arguments-- leegte middelen niets in C. En het rendementen volgens afspraak een integer. Hoofd geeft altijd een integer, meestal een code zeggen dingen ging goed of niet goed gaan. OK. Maar belangrijkste is om die vormen voor ons op dit moment. Ik heb vervolgens in drie regels code. En samen met elke lijn van code, heb ik een reactie. Nu is een van de dingen die wij zullen erop aandringen dat je doet, en het is zo'n belangrijk programmering praktijk is om altijd uw code commentaar. Schrijf altijd vastgelegd in een Engels reactie iets dat je denkt dat de code wordt verondersteld te doen. Op die manier, later als je terug te komen het, kunt u kijken naar het en je kunt zeggen, oh, ik weet wat ik was proberen te doen met dit. Of wanneer een TA gaat zitten met u proberen om u te helpen bij de kantooruren, ze kunnen kijken naar deze en gaan, ik zien wat je probeert te doen, maar dit is wat er werkelijk gebeurt. OK. Dus ik heb drie delen mijn code, Ik ga eerst afdruk een aantal punten aan de start. Ik zal vervolgens uitprinten mijn zeer mooie konijntje. En vervolgens een aantal beetje puntjes aan het eind. En deze drie afdrukken verklaringen moeten je bekend op dit moment. Alles wat ik doe in elk van hen is dat ik ben afdrukken van een reeks tekens. Er is geen betrokken variabelen. Alles is gewoon plat. OK. Dus als ik naar beneden gaan nu naar mijn terminal-- laten we eens kijken of ik dit terug kunnen krijgen out-- en ik ga weer typen duidelijk. SPEAKER 20: Moeten we gebruik maken van de dubbele slash te reageren? BRIAN Scassellati: Kan Gebruik de double-- ja. Er zijn meerdere manieren om opmerkingen achterlaten in C. One manier is een dubbele schuine streep gebruiken. De andere is een slash en een ster gebruiken en sluit met een ster en een schuine streep. Prima. Allereerst ga ik beginnen met de navigatie hier. Dus als ik ga naar mijn home directory, Ik heb directories er veranderd, Ik ga om te kijken en te zien wat er in die map, ls, een lijst uit. Ik ga om te zien dat ik heb kreeg twee submappen. Laten we dit een beetje groter hier, zodat we allemaal kunnen zien. Ik kan zien dat ik heb kreeg twee submappen. Ik zal directory veranderen in te gaan op de werkruimte. En ik ga alleen uittypen een deel van het, en dan gewoon op Tab. En het zal de rest af voor mij. Fancy. Ik zal kijken en te zien in de werkruimte. En nu, ik werk de SuperSection dat we nu aan het onderwijs. Dus ik ga naar die map. En tot slot, kijken en zien. En ik heb dat bestand bunny.c. Oké dus laat me eens te meer duidelijk. En ik ga weer Ik ben now-- nog steeds een verblijf in die map en het is me te vertellen dat ik in dat SuperSection directory. Ik ga om te gaan en maak mijn programma bunny. En die opdracht, maken konijntje, terwijl het klinkt een beetje vreemd, beroept zich tevens op de clang compiler. En het is geproduceerd voor me een uitgang die is een uitvoerbaar funny-- een uitvoerbaar bestand genaamd konijntje. OK. Ik kan het dan, en dit klinkt erger nog, voeren konijntje. OK. En laten we zien wat het doet. OK. Dat is een beetje wat ik verwachtte. Ik heb mijn bunny foto kreeg daar, maar ik wilde het allemaal soort van zelf. Wat heb ik gemist? SPEAKER 21: Slash l of n slash. BRIAN Scassellati: Slash n. OK. Dus laten we terug te gaan hier. En ik kom uit die. En ik kom terug gaan in deze. En laten we nu eens kijken van mijn belangrijkste functie hier. Dus wat moet ik doen? Ik wil de lijn te beëindigen. Dus ik in een commentaar zetten. Ik zal in een printf zetten (). En wat heb ik in te zetten? / n. OK. Wat moet ik om het te eindigen met? Puntkomma. Prima. Nu, een van de echt belangrijke dingen is ervoor te zorgen elke keer als u een wijziging aanbrengt in de code, die je opslaan. Als u uw code niet hebt opgeslagen, je bent gaan naar een kleine ster daarboven merken. En die ster zegt dat je hebben deze code niet opgeslagen. Als ik compileren het nu, is het niet gaan naar een van deze veranderingen weer te geven, omdat de compiler kijkt naar het bestand dat is op de schijf, niet het bestand dat is openen in uw editor. Prima. Dus laten slaan en dan gaan we recht hier beneden, kom terug. Kom naar mijn terminal. En laten we opnieuw duidelijk de ruimte. En we kunnen vooruit en één meer gaan tijd ons konijntje programma. En uitvoeren van het konijntje. Dat werkte niet. Verkeerde slash. Dus als je kijkt naar wat ik heb, heb ik een / n daar, maar ik had de verkeerde slash. Alles wat uw computer doet is zeer expliciet. OK? Een klein foutje van interpunctie, en opeens je niet krijgt wat je wilt. Prima. Dus laten we opnieuw weer uit. We zullen teruggaan. Wel maken dat zeer snelle reparatie. We zullen het recht slash in te zetten. We zullen het op te slaan. We zullen opnieuw in. Om een ​​of andere reden, dat is niet gelukkig zijn, maar laten we gaan vooruit en we komen terug naar de terminal gaan hier. Duidelijk het op. We zullen in te zoomen. En nog een keer, zullen we konijntje maken. En nu zeker genoeg, het werkt. Hooray. OK. Dus laten we proberen om dit te maken iets algemener. Eens kijken of in plaats van alleen afdrukken van een bepaald frame, laten we eens kijken of we dit kunnen maken zodat we alle 10 kunnen krijgen van die geanimeerde frames dat we wilden hebben. Dus nogmaals, laten we een stap tegelijk. Laten we eerst generaliseren, niet zodat ik alles doen wat de frames, maar dus ik iemand doen kader dat ik zou willen. Dus wat is het verschil tussen de frames? Is het konijn hetzelfde? Publiek: Ja. BRIAN Scassellati: Ja. Wat is het verschil? Publiek: Positie. BRIAN Scassellati: Haar positie, toch? En hoe kan ik haar positie te controleren? Hoeveel punten ik ben waardoor aan het begin en hoeveel punten ik ben waardoor aan het eind. Dus ik had vijf in het begin en vijf eind. Laten vervangen die vijf met een lus. OK. En ik ga een te creëren voor loop nu dat gaat zeggen, Ik ga wat aantal afdrukken stippen van het begin. Ik ga een variabele gebruiken. Laten we zeggen, hoe zit ik als de teller in mijn lus. En ik ga om het te verklaren boven. En vervolgens in de lus Ik moet drie dingen doen. Het eerste wat ik moet doen is dat ik moet ik initialiseren. Wat moet ik initialiseren om deze af te zijn? 0. OK. Dan moet ik zeggen, wat is de voorwaarde beëindiging? Wanneer moet ik stoppen? Nou hoeveel punten heb je wilt afdrukken op deze? Publiek: Five. BRIAN Scassellati: Vijf weer? Hoe zit laten we iets doen anders, we hebben vijf. Laten we zien dat het anders is. SPEAKER 22: Two. BRIAN Scassellati: Two. OK. Dus als ik wil twee punten, wat moet ik hier plaatsen? Publiek: Drie. BRIAN Scassellati: Drie. OK. Hoeveel keer is dat ga door middel van? Dat gaat om te gaan door drie keer, 0, 1 en 2, Rechts? Oké, laten we gaan terug naar twee. Nu gaan we twee punten te krijgen. En wat wil ik elke doen keer dat ik door de lus? Wat moet veranderen elke keer als ik ga door? SPEAKER 23: Voeg een punt. BRIAN Scassellati: Ik heb om door te gaan. Ik ga naar een punt toe te voegen. Ik ga een punt af te drukken, elke keer door de lus. Maar hoe moet ik het bijhouden van hoe vele keren dat ik door de lus geweest? Ik gebruik ik, dat variabele, die teller. Dus elke keer door middel van, ik ga de teller met één te verhogen. Nu, dat is hetzelfde voor me als zeggen i = i + 1. Dat is goed. Ik kon doen dat-- Ik hou van de steno, dus ik ga zeggen i ++. OK. Laten we hetzelfde doen hier beneden op de bodem. Alleen Ik soort deed dat één. Ik ga jullie laten dit volledig te doen. Prima. Dus wat moet ik hier schrijven? Hier is mijn lus. Ik ga een printf (doen) en ik ga om het te maken, zodat ik slechts één punt af te drukken op die bodem. Wat moet ik schrijven binnen deze lus nu? Nou, allereerst wat variabelen moet ik gebruiken? SPEAKER 24: j. BRIAN Scassellati: Ik kon j gebruiken. Kan ik het zelfde gebruiken? Kan ik weer gebruik ik? Ja. Dat is OK, omdat de Is die ik gebruik hier, Ik ze niet opnieuw wanneer nodig Ik krijg tot op dit punt. Dus wat moet ik initialiseren ik aan? SPEAKER 25: 10. BRIAN Scassellati: 0. Wat moet ik controleren? Hoeveel punten moet ik nu aan het eind als ik twee puntjes heb in het begin? Ik heb acht op het einde, dus wat moet ik controleren, ik minder than-- PUBLIEK: Zeven, acht, negen. BRIAN Scassellati: Ik hoorde zeven. Ik hoorde acht. En ik hoorde negen. OK. Dus we zijn allemaal in de juiste ball-- Jason zegt 10. OK. Als ik moest twee punten voor de eerste, hoeveel doen Ik-- en ik moet acht punten voor de laatste een-- Ik heb een twee boven, wat moet ik beneden te zetten? Publiek: Acht. BRIAN Scassellati: Acht. Want dat gaat telling nul tot zeven. En dat is acht keer door de lus. OK. En wat moet ik doen aan het eind? Publiek: i ++. BRIAN Scassellati: i ++. Prima. Dus dat ziet er goed uit daar. Laten we proberen het en laten we zien wat het doet. OK. Dus we gaan het redden. Mooi en opgeslagen. We zullen weer uit te zoomen. We zullen hier proberen in de terminal. We zullen in te zoomen. Oeps. We zullen, nog een keer, maken ons konijntje programma. En ga je gang en uit te voeren bunny. En daar is het. Dus er is ons konijntje. Wanneer het twee stippen begin en acht punten op het einde. Iedereen nog steeds met me mee? OK. Dus bouwden we het op. We bouwden een konijntje, een bepaald frame. Nu hebben we in staat geweest om generaliseren dat op te bouwen meer verschillende soorten frames. Laten we nu verder gaan, en hebben genereren niet alleen een frame, maar laten we het genereren van 10 frames, waar we langzaam maken het konijntje bewegen alle de weg over het veld. Prima. Laten we terug gaan. En we zullen nu proberen. Dus wat moet ik echt om hier te veranderen? Wat heb ik nodig om te veranderen? SPEAKER 26: U moet eerst verander het aantal puntjes maximaal in het begin. Want als we doen 10 punten, het zal nodig hebben om op te schalen. BRIAN Scassellati: Ja. Dus nu heb ik het soort van hardwired om altijd twee punten aan het begin en altijd acht punten op het einde. Ik wil nog een lus te bouwen, toch? Omdat ik het niet wil bouwen slechts een konijntje beeld, Ik wil 10 bunny's te bouwen. Dus ik moet een andere lijn te bouwen, en als ik ga door die lus, Ik wil veranderen hoeveel stippen print ik aan het begin en hoeveel punten ik afdrukken eind, op basis waarvan de lus doorlopen Ik ben in. Prima. Dus laten we een andere teller. Iemand heeft gezegd j, dus we zullen nog een j maken. En nu, we gaan bouwen van een andere lus. Wat gaat er in die lijn? Dit spul heeft te gaan in de lus, toch? Heeft het konijn hebben om te gaan in de lus? Heb ik een konijntje in elk van die 10 frames? PUBLIEK: Uh-huh. BRIAN Scassellati: Ja. Ik wil een konijntje in elk van de 10 frames, toch? Hoe zit het met stippen op Uiteindelijk heb ik dat nodig? OK. Dus ik ga ze allemaal inspringen. Ik ga al markeren dit, en ik ga te raken Tab. En dat gaat ze over te duwen een beetje, zodat het makkelijk voor mij om te zien wat er in de loop. En dan zal ik er een eind aan. Laat ons zeggen. OK? Nu, in deze lus die Ik ben gebouw-- whoops, maken dat dus je kunt see-- Ik heb mijn teller j. Ik begon bij 0. Hoe vaak moet ik wil om te gaan door deze lus? Publiek: 10 keer. BRIAN Scassellati: 10 keer. Dus welk nummer moet ik hier plaatsen? Publiek: 9, 10. BRIAN Scassellati: 9, 10, Iemand moet zeggen 11, toch? Ik wilde twee punten voor en zet ik minder dan 2. Ik wilde acht punten, Ik zet ik minder dan 8. Nu wil ik gaan door 10 keer, dus ik zet j minder than-- Publiek: 10. BRIAN Scassellati: 10. Daar gaan we. En wat doe ik aan het eind j? ++, Te verhogen. OK. Nu, hier is het lastige deel, wat is gaat nu als ik dit doe gebeuren? Ga ik 10 frames af te drukken? SPEAKER 27: Ik denk dat ze zullen allemaal hetzelfde zijn. BRIAN Scassellati: Ze zullen allemaal hetzelfde, toch? Omdat alle van hen zijn nog steeds twee stippen in het begin zetten. Maar ik heb ze niet allemaal wilt twee stippen het begin. Hoeveel punten heb ik wil aan het begin? Publiek: Veranderen. BRIAN Scassellati: I wil dat veranderen, toch? Dus wat heb ik hier dat verandert elke keer dat de lus gaat door? PUBLIEK: Aantal punten, j. BRIAN Scassellati: j, het aantal puntjes. Dus ik kan dit veranderen j zijn. De eerste keer door de lus, wat dat gaat worden? Wat stel ik j om in eerste instantie? Publiek: 0. BRIAN Scassellati: Hoeveel keer ga ik om dit te doen? 0. De tweede keer door de lus, j's gaat worden 1 omdat ik verhogen het. Hoeveel punten moet ik afdrukken? 1. De derde keer door de lus, hoeveel punten ga ik afdrukken? Publiek: Drie. BRIAN Scassellati: j gaat worden 3. Hoeveel punten moet ik afdrukken? Oh, sorry, j gaat worden 2. Hoeveel punten moet ik afdrukken? Publiek: 2. BRIAN Scassellati: 2. OK, dus ik ga houden verhogen dat als we verder gaan. Hoe zit het daar beneden? Wat gaat er hier beneden? Ik wil niet altijd 8 op het einde niet meer? SPEAKER 28: 10. BRIAN Scassellati: ik wil 10 punten? Ik wil dat veranderen, ook. Dus hoe kan ik het wil om te veranderen? PUBLIEK: [onverstaanbaar]. BRIAN Scassellati: Nou, als ik vijf stippen in het begin, hoeveel dot's krijg ik op het einde? Publiek: Five. BRIAN Scassellati: Als ik zes punten aan het begin, Hoeveel krijg ik op het einde? Publiek: Four. BRIAN Scassellati: Als ik zeven punten aan het begin, Hoeveel krijg ik op het einde? Publiek: Drie. BRIAN Scassellati: Als ik heb kreeg j dots begin, Hoeveel krijg ik op het einde? 10-j. OK. Dus laten we proberen dat uit. Dus ik ga naar onze bunny programma op te slaan. Wederom zullen we uit te zoomen. We zullen gaan om onze terminal. We zullen het wissen. En opnieuw in. We zullen ons konijntje programma opnieuw te maken. En we zullen het uit te voeren. Oh Oh. Wacht even, laten we uitzoomen. Heb ik 10 frames? Nou, hoeveel konijntjes zie ik daar? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Ik kreeg 10 frames. Zijn ze allemaal hetzelfde? Publiek: Ja. Nee. BRIAN Scassellati: No. Die eerste, de bunny is veel aan de linkerkant. En hier, het konijn is veel op het SPEAKER 29: Recht. BRIAN Scassellati: Dus, wat heb ik vergeten te doen? SPEAKER 30: Start een nieuwe regel. BRIAN Scassellati: Ik vergat om een ​​nieuwe regel te beginnen, opnieuw. Dezelfde fout die ik eerder gemaakt. Oké, laten we gaan vast te stellen dat. Nu, ik heb nog steeds de code daar om een ​​nieuwe regel te maken. Waarom heeft het niet werken? SPEAKER 31: Het is niet in de lus. BRIAN Scassellati: Oh, het is niet in de lus. Dat klopt. Het is buiten zitten hier. En de lus is alles dat is in die tekst. Dus ik ga verhuizen dit in de lus. En ik zal Tab in de voorkant van het aan tonen aan dat het op de juiste plaats. En nu, we zullen het opnieuw op te slaan. Wij zullen uit te zoomen. We zullen naar onze terminal te schakelen. In zoomen. We zullen ons konijntje programma remake. En nu, nu hebben we onze 10 frames. [SLAAN] BRIAN Scassellati: OK. So. Hier is onze genest voor lussen. We konden genereren in de binnenste lus hoeveel punten ik wilde Afdrukken vanaf het begin, aan het einde. De buitenste lus gecontroleerde hoeveel frames ik aan het bouwen was. We zijn begonnen met een klein kern van het probleem, en we hebben opgebouwd uit vanaf dat punt. Prima. Laten we nog een stap. Ben je klaar? Er is één ding hier, waar we hebben eigenlijk wel gekregen meer complexiteit dan we nodig hebben. Laten we kijken. Dus in onze bunny-programma, als ik hier uitzoomen, Ik heb eigenlijk een aantal van hetzelfde te doen wat over en weer. Wat moet ik doen, dat is een soort van het zelfde ding tweemaal herhaald? SPEAKER 32: Druk de puntjes. BRIAN Scassellati: Ja Ik afdrukken die puntjes tweemaal. Echt, zou ik deze reactie hier. Print ik enkele punten aan de begin, tot hier. En dan nog wat puntjes af te drukken wat ik op het einde. En ik doe soort precies hetzelfde. Wat we gaan om te beginnen werken aan in de komende weken is in staat om de blokken te nemen code die we gebruiken over en weer, en door een proces genaamd abstractie, we gaan ze trekken en schrijf ze eens zo dat we kunnen dan hergebruiken ze over en weer. Dus laten we dat proberen. Klaar? We gaan dit blok van de code te nemen. En ik ga om het te nemen uit daar. En ik ga define-- neer op de bodem, Ik ga een nieuwe functie te schrijven. Het is niet van plan om iets terug te keren. En ik ga het noemen printDots. Het gaat om één te nemen argument, een geheel getal dat zegt howManyDots Ik moet afdrukken. En nu in plaats van het af te drukken j punten, zal ik afdrukken howManyDots Ik moet afdrukken vertellen. En er is hier een klein probleem. Iedereen weet wat het is? Wat heb ik dat is vermeld hier dat is niet gedefinieerd? PUBLIEK: [onverstaanbaar] BRIAN Scassellati: Nou hoe vele punten gedefinieerd recht hier, maar ik gebruik dat variabele i. Dus ik ga naar die variabele nemen i en ik ga om het te definiëren hier plaats. Dus nu het gaat stay-- oops, kreeg de caps lock op somehow-- ik ben ga ik naar beneden te houden hier. Dus nu hier is mijn kleine functie of sub-routine, en het zegt, hoeveel punten ga ik afdrukken? En het zal gaan door deze lus en print ze over en weer. Dan kan ik mijn programma hier te passen up. En wat heb ik noem die functie? printDots. Dus ik zal printDots bellen. Hoeveel punten wil ik afdrukken het eerst voor het konijn? Publiek: j. BRIAN Scassellati: j. Hoeveel punten wil ik afdrukken aan het eind, na het konijn? 10-j. En er is één ding dat ik mis. Zoals je zag in de lezing van vandaag, we gaan printDots verklaren boven om het prototype te geven. OK. Dus wat ik heb gedaan is dat ik heb geprobeerd om isoleren dat hergebruikte deel van de code dat ik over en weer hebben gedaan. En ik heb geprobeerd om hem eruit te trekken, zodat dat alles is opgenomen in een plaats. Op die manier, als ik ergens een fout, Ik heb alleen maar om het te bevestigen op een plek. Prima. Dus laten we redden het. En laten we ervoor zorgen dat het werkt. Dus laten we gaan. We zullen weer naar onze terminal. We zullen in te zoomen. We zullen dat konijntje proces. Oh. En het is mij een waarschuwing. Hoe is het me te vertellen? Welnu, in een van deze tijden, je wilt altijd om te scrollen naar de allereerste error-- Nu op dit ene, ik heb maar één. Het vertelt me ​​in bunny.c, on line 8, kolom 9, er is een probleem. Het zegt, je dit hebt verklaard variabele i en heb je het niet gebruikt. Nu normaal, dat is niet het ergste fout. Dat is een gemakkelijke op te lossen. En in feite, kunnen we terug te gaan. We kunnen teruggaan naar bunny. En in dit geval, alle we hoeft te doen is zich te ontdoen van i, omdat we niet gebruiken i binnen belangrijkste meer. We zijn gewoon te gebruiken in onze sub-routine. Dus laten we behalve dat. We zullen teruggaan. En opnieuw in. We zullen nog een keer te maken bunny. En er weer zijn onze 10 frames. OK. Elke keer dat je krijgt een procedure-- Yeah. SPEAKER 33: Ik heb a-- ik ben in de war. Kunt u terug naar de code te gaan? BRIAN Scassellati: Yep. SPEAKER 33: Dus, als je schreef uw prototype, het argument dat u had genoemd werd howMany genoemd? Maar below-- BRIAN Scassellati: Oh ja. SPEAKER 33: --called hen iets anders, begrijp ik niet. BRIAN Scassellati: Waarom zijn ze anders. Dus dat is een grote vraag. Dus de vraag was, up hier, schreef ik howMany, en beneden, schreef ik howManyDots. De reden is dat in uw prototype het is eigenlijk niet op te letten naar de namen die je zet in. Alles wat het echt om is dat het een integer. Het wil de vorm kennen van wat je zetten in. Nu stylistically-- oops-- wat ik moet weet, is dat ik graag om deze wedstrijd te maken. OK. Want dat zal houden het voor mij gemakkelijker te onthouden. Maar dat was mijn fout Yeah. SPEAKER 34: En dus voor de prototype te werken, net het schrijven van die lijn, schrijven van het prototype, laat die functie die wordt geleverd recht daaronder om naar het einde en op te halen wat dat betekent? BRIAN Scassellati: Wat het betekent is wanneer de compiler gaat door, het gaat van de top van code naar de bodem. En wat dit prototype is, is het is eigenlijk een belofte. Het zegt dat er gaat worden een functie ergens gedefinieerd. Het gaat om zogenaamde printDots zijn. En het gaat om een ​​argument te nemen dat gaat om een ​​geheel getal zijn en het gaat om terug te keren niets, leegte type. OK. Ik beloof je dat het gaat worden ergens gedefinieerd op de weg. Maar elke keer zie je dat, als je naar beneden door de rest van mijn belangrijkste functie, ik wil je te behandelen die als een functie dat duurt een integer ingang. En dus als de compiler naar beneden gaat door middel van deze, het ziet die belofte. En wanneer het naar beneden, blijft gaan, blijft gaan, het vindt de eerste keer printDots wordt genoemd. En het zegt, Oh, je geeft me dit j. j is een geheel getal. Nou je me beloofd dat zou zijn een integer en dat is juist. Dat is goed. En dan eindelijk, omlaag helemaal onderaan, voordat ik aan het einde van mijn bestand, maak ik goed op mijn belofte en ik definiëren. OK? SPEAKER 35: Dus, het saves-- de programma zal spaties besparen dat het gaat terug en vult aan het eind? BRIAN Scassellati: Het is niet over het geheugen toewijzing. Het is eigenlijk alleen maar over wat soort verwacht u te zien. Moet dit ding hebben één argument, of vijf argumenten? Moet hebben gehele getallen gegeven, of strings? Dat is alles wat het ziet te doen is om te controleren, geef je me de juiste soort argument. OK? Prima. Laat me je vertrekt met een ander bit naar te kijken. ASCII kunst is niet het grote model animatie zoals het nu is. Maar sommige mensen natuurlijk dingen en duwen ze het aan hun uitersten. Dit is, zoals David aangetoond in collegezaal, een stukje code dat moet je onder geen beding proberen om jezelf te dupliceren. Want het is verschrikkelijk stilistisch. In feite is het ontworpen om zo moeilijk mogelijk te lezen. OK. Dus, om opnieuw te doen, laten we hier in te zoomen. Ik ga nu gaan veranderen directory. Ik ga om te gaan één niveau, terug naar mijn werkruimte. Ik zal dan veranderen directory in deze andere map die ik heb gemaakt. En dit is de International Versluierd C Programming Contest. Versluierd middelen zo hard mogelijk begrijpen. Dus alsjeblieft, wees niet bang als je kijkt Dit en ga, kan ik niet lezen. Dat is het punt van het. OK? Maar, we hebben dit prachtig programma dat ik ben gaan kijken naar door gewoon te typen meer. En laten we eens kijken of ik uit kan zoomen gewoon een beetje, zodat je kunt zien En dit is het programma. Het is genoemd endo.c. En het lijkt erop dat deze emmer met soort van de letters F-L-U-I-D daarin. Dit is eigenlijk een programma. Het is geschreven in de meest obscure manier waarop de auteurs zou kunnen Schrijf het. Maar het is een prachtig stukje dat genereert een model van vloeistofdynamica. En dus we gaan geven dat model een input die ziet er zo uit, van een staired set containers met wat vloeistof, wat vloeistof, op de top. En we moeten simuleren wat er gebeurt aan. Dus ik zal die functie noemen, endo. En ik geef het dat input file die ik heb gehad. En er is ons toppunt van ASCII-art. Een volledige vloeistof dynamische simulator die in slechts een paar regels code. Nu, wat is eigenlijk echt verbazend over dit kleine programma is dat ik wil het nu te stoppen, dus ik ga wat commando te gebruiken? PUBLIEK: Control-C. BRIAN Scassellati: Control-C. OK. Dus zal ik de Control-C te gebruiken. C Dat zal stoppen. Ik zal weer te wissen. En nu ga ik naar de beroepen programma, het programma uitvoeren, gebruik zelf als input. En we zullen de vloeistof dynamische zien simulatie te smelten. OK. Laten we alstublieft niet dat programma zijn het ding dat je verwart. Het is gewoon zo dat we kunnen eindigen op iets leuks en interessant. OK. Veel succes met uw probleem sets. We zullen blij zijn om te beantwoorden vragen na de les. Dankt veel, jongens.