[Powered by Google Translate] [♪ ♪ Buzzing] Dus u laten kennismaken met wat ik heb op het scherm; het is een van de instrumenten die we ontwikkelden in de zomer; het heet CS50 Spaces, en het is onze gezamenlijke codering toepassing dat we gaan gebruiken in secties. Het is wel cool. Heeft iemand van jullie gezien CS50 run nog? Laat me dat trek in een ander tabblad. Run.cs50.net Zo als je naar run.cs50.net, je kunt zien is dit een in uw browser weg naar eigenlijk code - schrijven C-code, en voer het, zodat het zowel het compileert, loopt, dan geeft de uitgang is voor u, dus dit is een soort van een coole manier om te experimenteren met een aantal van de code die David over gaat in lezingen en we geven op je op probleem sets zonder echt te hoeven brand-up van het apparaat. Dus wat Spaces doet dat anders is dan dat als ik overschakel naar dit tabblad, Spaces is CS50 run, zoals je ziet hier, maar als we bladeren over en kijken naar de andere kant van het raam, zie je de juiste ben ik de enige persoon in deze ruimte, maar wat ik ga doen is vragen jullie om deze ruimte samen met mij en we zullen allemaal naar code in hetzelfde kleine venster, delen code met elkaar, en praten over de verschillen tussen onze code. Dus het is een soort van een cool ding - zo aan te sluiten, als u deze link te bezoeken hier aan de top die ik heb gemarkeerd, je kunt gewoon typen in apps.cs50.net/spaces/vqcspSnO. Oke, om zo te beginnen, Ik ga u een beetje een tour door dit. We gaan wat domme kleine codering met het te doen op het eerste, gewoon zo dat iedereen deze bijwerkingen krijgt een beetje een gevoel voor wat het is, maar wat ik heb gedaan - of wat ik ben over te hier te doen is - Ik ga de code die ik heb geschreven hier te nemen, die zoals je ziet op dit moment leeg is; Het doet niets. Het is gewoon boiler plate code, zullen we het noemen. Met een beetje to-do commentaar. Ik ga het op te slaan door op deze knop Opslaan. En wat dat doet is het benadrukt het hier kort - dat de herziening opslaan groene doos, en nu, als je zoekt voor mij in de ruimte, u klikt op mijn naam, kun je zien dat ik deze herziening heeft hier, en als je klikt op deze herziening, het zal laden die code in uw Space, ook. Dus heeft iedereen geladen die code in hun ruimte? Oke, als je nog niet, ga je gang en doe dat, en dan wat ik wil dat jullie doen in dit kleine to-do sectie is schrijven een beetje met behulp van printf over jezelf, dus bijvoorbeeld, zou ik schrijven printf ("Mijn naam is Nate"); en dan zou ik schrijven "Ik ben afgestudeerd in 2009 van Stanford " en ik zou graag horen over welk jaar je op school, of u nu aan het college of de business school of een andere Harvard school, wat je studeert als het nog niet bekend; als het niet bekend is, dat is helemaal cool. Ik heb niet te beslissen totdat ik was al laat in mijn tweede jaar. en dan zou ik ook graag willen weten gekke dingen je wilt om me te vertellen of iets over de klasse of gewoon iets anders. Wanneer u klaar bent met het schrijven van dat met je kleine printf, Als je bespaart de herziening of liever controleer dan eerst of dat je het kunt draaien en dat het drukt precies wat je wilt dat het afdrukken, en dan als je gaat vooruit en sla deze herziening met behulp van de herziening knop Opslaan, deze eerste kleine jongen hier, en we een beetje gaan door en doen een kleine introductie die manier. Dus je moet gewoon naar de Play knop drukt, die hier linksboven, dus dit knop Afspelen in de linkerbovenhoek zal Stuur uw code uit naar onze server, waar het wordt gecompileerd en vervolgens uit te voeren. Dus wat is een beetje gek op dit deze code is eigenlijk niet op uw computer; het is eigenlijk wordt verzonden over het internet. Hoe gaat het, Charlotte? >> I - oke. Ik ben - Ik denk dat ik hebben moeilijkheden op te slaan op de server zodanig dat het kan - ik kan het programma uit te voeren. En dan wanneer ik probeer om het uit te voeren, zegt dat er een fout. Aangegeven als een virus dat niet in meer aanwezig. Oh, laten we eens kijken, kunt u het opnieuw raken opslaan? Ik zie het op het scherm. >> Juist, oke, dus dat is wat ik heb. En ik weet niet waarom het niet laat me voer het uit. Oh, oke, sorry. Kunt u uitleggen waarom - wat er mis was - wat niet werkte met het? >> Ja, omdat ik niet zie dat er een laatste regel waar er nog steeds een variabele dat had ik niet verklaard, wat ik niet van plan om dat het er is. Ja, perfect! >> Nu als ik sla het op, ik denk dat het zou moeten werken. Nu dat je het hebt opgeslagen, het werkt; geweldig. Dus ja, als we door - dus wat er gaande was, Ik ga gewoon dit te herhalen voor de camera. Wat er gebeurde was dat deze variabele is bleef in na - ik neem aan dat je verwijderde een aantal andere dingen waar u verklaard, en dus dit was het gooien van dingen uit en was niet om u te laten draaien. Dus dit is precies wat we willen doen in paragraaf is hebben mensen proberen het schrijven van verschillende stukken code, compileren, te zien wat werkt, wat niet, en dan een beetje praten over deze dingen, want dit zijn uitschakelpunten dat Ik heb nog steeds tegenkomen, Ik heb nog steeds - ik doe heel veel domme dingen de hele tijd, en ik weet niet waarom het niet werkt, dus laten we trekken Charlotte's revisie 3, en wij zullen uitvoeren. Dus toen ik lopen, nu ik heb haar code in hier, Ik kan inzoomen, druk op de knop Uitvoeren, upload het, bouwt, loopt het, zegt dat het succesvol is, en als ik naar beneden scrollen, zie Charlotte is een junior op Adams House, psychologie, het middelbaar onderwijs in de economie; geweldig. Leuk je te ontmoeten! Awesome. Oke, bewegen op, laten we naar Daniel, ga naar 3e herziening, samen te stellen, te beheren; waarom ga je niet vertellen ons iets over jezelf, Daniel? >> Bel me Dan. Ik ga naar business school aan de overkant van jullie, en ik was bij de marine voordat hier, en dit is allemaal nieuw voor mij, dus ja. Voel je niet slecht, ik ben 30 en ik ken geen enkele van deze spullen. Awesome; bedankt, Dan! Oke, we hebben een andere Daniel. Je gaat door Daniel - zul je jezelf introduceren, Daniel? >> Tuurlijk, ik ben Daniel. Ik ben een tweedejaars op Mather nu. Ik ben te concentreren op de overheid, maar ik wilde CS50 nemen, want ik heb gehoord goede recensies over de klasse en ik heb nooit geprobeerd CS tevoren. Hier Scroll naar beneden en tonen - cool. Moving on, Jared. Hoe gaat het? >> Goed, hoe gaat het? Zoals je kunt zien, ben ik een junior filosofie concentrator in Eliot, oorspronkelijk uit Zuid-Californië, en ik ben geïnteresseerd in het nemen van CS50, want ik hou van de logica van het, en het lijkt echt cool om dingen te doen op de computer, dus. Awesome, waar in het zuiden van Californië kom je vandaan? >> Over een uur rijden van [onverstaanbaar], een kleine stad [onverstaanbaar]. Oh, ja, mijn vader komt uit Redlands. Cool stuff. Oke, Jimmy, hoe gaat het, Jimmy? >> Goed, hoe gaat het? Doen vrij goed! Vertel ons over jezelf. >> Ik ben een eerstejaars, en ik ben niet helemaal zeker wat ik als hoofdvak maar ik ben een beetje leunend naar economie. Net als Daniel voor mij, ik heb nog nooit gedaan een CS, maar het klinkt erg cool. Ik kom oorspronkelijk uit Chicago. Awesome. Dus check out zijn afdruk hier. Ik wilde vragen, heeft deze prent als je had verwacht? >> Nee, ik vergat om een ​​nieuwe lijn te drukken. Ik heb eigenlijk vergeten dat toen ik aan het schrijven was mijn ding voor het eerst ook. Het is een soort van een pijn om te onthouden aan die in de hand te zetten. Het zou mooi zijn als het gewoon weet dat is wat je wilde. Oke, Kelly. Wow, we hebben 2 Kellys, 2 Daniels, 2 Kellys. Dus Kelly - ga je door Kelly Ren? Oke, geweldig. Of Kelly, bedoel ik. >> Dus ja, dus ik ben Kelly. Ik ben een tweedejaars in Pfoho. Ik kreeg een e-mail vandaag aan dat ik nog 7 weken mijn concentratie te verklaren, dus ik probeer niet te denken, en ik hou van bakken, hardlopen, en Craisins. Ik heb geen ervaring met de meeste CS; Ik leerde mezelf websites te bouwen toen ik nog heel jong, maar ik denk dat ik waarschijnlijk mezelf geleerd verkeerde een heleboel keer. Hopelijk zal ik een beetje meer te weten en - ja. Awesome, goed, dank je. Laten we naar de andere Kelly; Ik heb niets - heb je iets te zeggen hier? >> [Onverstaanbaar] Daar is het! Sweet! >> Oke, dus ik ben Kelly. Ik ben een eerstejaars student. Ik ben hoofdvak in Mind, Brain, en onderwijs. Ik ben afgestudeerd in Franklin & Marshall College in 2008 met majors in de psychologie en de sociologie en een minor in het Frans. Ik neem CS50 want ik ben geïnteresseerd in het verkrijgen van een doctoraat in Neuroscience en ik voel me als dit zal me helpen begrijpen van de technologie die wordt gebruikt. Awesome. Moving on, Mikaela. Is dat juiste uitspraak? Oke, geweldig. >> Ik ben Mikhaila. Ik ben een tweedejaars in Kirkland House, en ik ben concentreren in Mechanical Engineering. Ik hou echt van fietsen, bouwde een fiets deze zomer. Ik neem CS, eigenlijk, als-eis, maar weet je, ik denk dat het nog steeds cool soort van engineering klasse. Awesome - je bouwt een fiets deze zomer? >> Ja. Wow, net als het frame en zo? >> Uh-hunh (positief). Wow, dat is echt cool. >> [Onverstaanbaar off-camera chatten] [Gelach] Ja, het is zo lang. Je weet maar nooit, toch? Nou, koele, goed bedankt, Mikhaila. Oke, Missy. >> Mijn naam is Missy, ik ben een eerstejaars, dus dat betekent dat ik weet niets! Ik wil concentreren in de astrofysica. In CS50, Ik voel me als zal zeker helpen. Een vreemd feit over mij is dat ik een landelijk gecertificeerd brandweerman. Wow! Hoe is dat zo gekomen? >> Ik heb deelgenomen aan een academie en ging door de hel voor heel wat weken en kreeg mijn certificatie. Wow, congrats! Dat is geen geringe prestatie, zeker. Oke, dus nu gaan we doen mij. Ik ben de volgende in de rij. Ik ben - voer het uit. Dus mijn naam is Nate. Ik was klasse van 2009 aan de Stanford. Ik was een symbolische systemen grote, die vergelijkbaar is met de Mind, Brain, Behavior concentratie hier, maar het is een soort van een mix van informatica, taalkunde, psychologie en filosofie. Kind van - ja, een heleboel rare dingen, maar het was geweldig, en toen deed ik mijn master in Computer Science is er, als goed. Dus ik ben nieuw op Harvard dit jaar. Ik wilde krijgen in het onderwijs. Ik heb de afgelopen 4 jaar aan de Stanford TA-gen Informatica klassen en ga zo maar David laat me kom op, en Ik ga helpen met CS50, dus ik doe dit full-time, ik ben niet in grad school. Het was leuk. Hopelijk zal blijven leuk, ik ben er zeker van dat het zal. Oke, Sam. >> Mijn naam is Sam, ik ben een tweedejaars op de universiteit, in de wet bepaald. Mijn grootste zal de geschiedenis van de wetenschap waarschijnlijk, en VES secundaire, en mijn favoriete kleur is geel. Geen behoefte om oordeel of iets voorbij, maar het is een goede kleur! En Stella. >> Hallo, ik ben Stella, ik ben een eerstejaars in Grays. Ik heb geen idee wat ik heb geconcentreerd in nog, dus CS50 was gewoon een soort van willekeurige, wat interessant. Leuk weetje, Jimmy was de eerste Harvard vriend van mij, omdat we beide uit Chicago. Cool, en Grace - die verondersteld om de echt nice one, toch? >> Ik dacht dat [onverstaanbaar]. Oh, ja. [Onverstaanbaar / off-camera chatten] Oke, ik ben nog aan het leren, nog aan het leren. Dus we hebben iets anders dat is een soort van interessant hier. Ja, ik vraag me af, heb je een idee dat er aan de hand hier? Je weet hoe je dit interpreteren? >> Ik zou worden gesteld de puntkomma na elke regel. Dat is een soort van een pijn. Soms zijn die puntkomma kan een echte pijn op te sporen. Dus het blijkt dat het speciale programma dat we met behulp van dit jaar compileren onze C-code wordt genoemd Clang, en de reden dat we zijn begonnen met Clang gebruiken dit jaar - omdat we niet gewend dat programma in het verleden; we hebben gebruikt een andere naam GCC dat is erg populair - Clang biedt je eigenlijk foutmeldingen dat logisch. Deze zegt "verwacht", "na expressie", en het vertelt je zelfs de uitdrukking waarna u behoefte aan een puntkomma. Dus bent u de vaststelling van het? >> Ja, nu meteen. Awesome; laat het me weten en we trekken het op, en wij zullen uitvoeren. Maar ja, zetten deze puntkomma is een soort van een pijn. >> Ik het vast, dus ik denk dat het zou moeten werken. Awesome - revisie 3. Dat lijkt op het. Oke, dus nu als we draaien, daar gaat. Cool stuff. Oke. Dus bedankt om dat te doen. Het is geweldig om te ontmoeten jullie. Wat we gaan doen is nu brengen de komende beetje een beetje duiken in de sectie problemen die afkomstig zijn van het probleem te stellen van deze week en we doen dat voor de meeste van de secties voor de rest van het woord, en dan zullen we besparen de laatste 15, 20 minuten of zo om te praten over het probleem zich en dan gewoon een andere vragen die je hebt in het algemeen over de klas. Dat gezegd hebbende, wat we echt willen doen is iedereen zijn deel het gebruik van de ruimtes spul, gooien in code, gooide in suggesties, en praten over wanneer dit soort dingen pauze of niet werken, alleen maar omdat dit zijn dingen die Ik weet dat ik tegenkwam toen ik begon codering, en waren echt een beetje frustrerend want als het is net 2 uur voordat je probleem gevolg is van overmacht, zo - alleen voor openbaarmaking, Ik heb niet het programmeren te starten tot ik een tweedejaars op de universiteit. Het was een beetje een raar, onbekende ding dat ik hoorde was erg cool en ik heb ook gehoord dat het kan een echte pijn in de kont worden als je mist een puntkomma en dat is de enige fout het houden van uw programma werkt niet en houden u overschakelt naar de slaapmodus, dus zeker, als u vragen hebt als dat, Als u zich zorgen maakt als dat, laat het me weten, want ik wil maken dit een goede ervaring voor jullie. Dus hebben jullie alle gedownloade het probleem te stellen nog? Kinda weet waar het is? Oke. Dus gaan we naar cs50.net, omdat ik het niet hebben op deze rekening, trek het probleem sets, pull up probleem set 2, en we zullen kijken naar de standaard editie van vandaag. We trekken de specificatie hier. Scroll naar beneden. Dus we gaan kijken naar dit deel van de vragen. Hebben jullie keek deze shorts nog? Oke. Dus er zijn korte broek aan loops, die wordt gedaan door Tommy, een van de hoofd onderwijs kerels. Er is een over het toepassingsgebied, Ik geloof dat gedaan door een andere leer man genaamd David en dan een op Caesar Cipher ook gedaan door David. Ze zijn wel cool. Hebben jullie al het kijken naar hun shorts tot nu toe? Hoe gaat het ze al? Nuttig? Oke, goed om te weten. Als ze niet, dan kunt u dat zeggen. Maar voordat je dat doet, hebben jullie gekeken naar deze vragen op alle? Laten we praten over dit een beetje. Dus we hebben geïntroduceerd in de afgelopen paar weken in lezing verschillende loops. Er is de for-lus, de while-lus, en dan de do-while-lus, en in collegezalen, hebben we veel gepraat over hoe die loops zijn redelijk vergelijkbaar in een heleboel manieren, en je kunt veel van dezelfde dingen met een while-lus dat kun je met een for-lus. Je hoeft alleen te soort gebruik maken van de juiste combinaties van variabelen en dergelijke. en dus echt het reële onderscheid tussen alle lussen is dat soms zijn ze nuttiger te gebruiken in een keer dan op een ander tijdstip. Dus bijvoorbeeld, de while-lus verschilt van een do-while-lus. Heeft iedereen het gevoel dat ze hebben een goede grip op wanneer een do-while-lus is meer nuttig of wat het verschil is? >> Ik denk dat het verschil is een do-while-lus loopt - Ik weet niet helemaal wat de terminologie is, maar de reeks van functies binnen de lus. Zij worden automatisch - het doet zijn runs op zijn minst voordat het controleert de toestand of de while-lus kan alleen worden uitgevoerd wanneer loopt continu - of de voorwaarde wordt voldaan. Ja, is dat logisch? Laten we eens een kijkje nemen op een klein stukje code. Dus alleen maar om de vraag te herhalen, of het antwoord plaats; het antwoord was dat een while-lus zal controleren om te zien of de conditie die u opgeeft, is voldaan bij het uitvoeren van het lichaam van de lus voor het eerst terwijl de do-while-lus wordt automatisch uitgevoerd van het lichaam van de lus, is wat wij noemen - het is raar terminologie, maar als ik ooit iets dat niet logisch te zeggen, laat het me weten - de lus lichaam is dat spul dat je in tussen de accolades. En in een do-while-lus, dat lichaam te krijgen ten minste een keer draaien, en dan de conditie wordt gecontroleerd voordat het wordt uitgevoerd elke opeenvolgende keer. Dus eigenlijk, Sam, vind je het erg het schrijven van een eenvoudige while loop in Spaces? >> Hoe kun je een beetje als een nieuwe ...? Ik gewoon verwijderen wat je hebt daar. Ja, gewoon duidelijk het uit. >> Nou, ik geloof dat ik dit met - welke wil je, een tijdje, of wil je ...? Ja, gewoon een tijdje waar is, af te drukken iets uit. En laten we eens kijken. Alexander, besefte ik dat we je nooit geïntroduceerd. >> Oh, dat is prima. Heb je - kunt u coderen van een do-while-lus voor ons? >> Ja, zal ik proberen. Oke, zullen we gewoon trek deze op het scherm, zodat je soort van een handvat op wat de verschillen zijn. Dus hier is wat Sam heeft gedaan. Hij heeft een geheel getal genaamd i dat hij geïnitialiseerd op 17. Dan zegt hij, terwijl (int i = 17) printf ("Mijn naam is Sam."); Dus wat gebeurt er als we deze code uitvoert? Er is een fout; wat zegt de fout? Laten we trek hem omhoog en over praten. Er is een fout opgetreden, staat er. Laten we naar beneden scrollen. Dus het gaf ons deze fout, en hij zei, "He, ik had verwacht een uitdrukking." Dat is een beetje cryptisch. Ja, dus precies - en nogmaals, zal er nog een kleine bug die we zullen vangen in slechts een seconde. Maar dit is weer een van die een beetje vreemd terminologie dingen, dus dit int i = 17 is geen uitdrukking. Hoe het eruit ziet het doet is dat het verklaren een geheel getal genaamd i en waarin tot ofwel 17 of liever, waardoor 17 in dat int genaamd i. En dat slaat nergens op in het kader van deze while loop. Het heeft zin, zoals we zullen zien, in het kader van een for-lus, want voor lus declaraties beginnen met die voor int i is gelijk aan iets en gaat verder. Jij ook - vast iets, oke. Hier gaat; geweldig. Dus nu ziet het er een beetje anders. Een paar dingen zijn veranderd. Kunt u ons vertellen wat dingen zijn veranderd? >> Ik haalde de int, dus er is geen verklaring [onverstaanbaar] in plaats van een opdracht. De een is gelijk-teken, heb ik 2 gelijke tekenen, wat betekent dat een gelijken. Awesome. Ja, dus wat Sam deed was nam hij de int dat was hier eerder, dus als ik kijk naar dit - dit is wat het vroeger was, zei int, die werd aangifte te doen - dus namen we de type. Er is int, char, string, short, deze types genoemd. Dus u haalde het type en eerder Hij had net de single sign is gelijk aan en wat hij zei was problematisch over dit werd wanneer u een gelijk-teken, dat is een opdracht operator. Dat is niet het testen van het al dan niet 2 dingen gelijk zijn. Dat is eigenlijk het instellen van iets gelijk is aan iets. We zetten het nummer 17 in de variabele i. Dus om dat soort vergelijking te doen, moet je de dubbel is te gebruiken, dat is een beetje een raar ding maar is een vrij veel voorkomende fout. Dus een ander ding dat ik wel opmerken, als je het niet erg vindt, dat in onze functie hier in int main, zie je dat het lichaam van onze functie is ten opzichte van de linkerkant door 4 spaties of een tabblad. De reden dat we dit doen is gewoon voor de leesbaarheid. Zoals je hier kunt zien in, terwijl Sam's lus, hij niet streepje helemaal niet, en dat heeft geen invloed op de functionaliteit van de code. Het draait precies hetzelfde. Dus bijvoorbeeld, als we naar de top hier en drukt u op onze Play-knop, zal het bouwen, het zal draaien, en wat er gaat gebeuren? Waarom duurt het nog zeggen draait? >> Omdat het zal blijven herhalen hi. Precies, en waarom is het blijven herhalen hi? >> Omdat de integer nooit verandert, dus het is altijd 17. Ja, precies, dus Laten we, te zien na - doen mij denken aan je naam ook alweer? Jimmy. Dus Jimmy zei dat de reden waarom dit blijft herhalen hi over en weer omdat deze voorwaarde is altijd waar. We hebben nooit de waarde van i. We hebben nooit veranderen van de inhoud van wat er is opgeslagen in die variabele. Dus op dit punt kregen we deze fout dat uw programma gegenereerd te veel output, en als we naar beneden scrollen en soort van kijken naar wat er hier aan de hand, je kunt zien dat het hi, hi, hi, hi, hi, hi, hi helemaal door. Awesome. Dus soort van terug naar het oorspronkelijke punt dat met de inkeping here in het lichaam van de while-lus had geen invloed op wat dan ook. Het programma nog liep prima. Typisch voor een goede stijl - en dit is iets dat we voor kijken in uw probleem sets - vragen wij u laten inspringen dit met 4 ruimten, die u kunt doen door gewoon te drukken op de tab-toets of door handmatig zetten in 4 ruimtes jezelf. Cool, oke dus laten we terug gaan en te kijken naar Alexander's do-while. >> Gewoon een beetje met een beetje moeite. Oke, laten we werken er doorheen. Is dat cool? >> Ja. Oke, dus hier gaan we. Dit is de code die Alexander schreef. Ga je door Alex - oke. Dus hier is de code die Alex heeft geschreven. Dus, we hebben onze verklaring van de belangrijkste hier, en dan hebben we dit integer variabele genaamd i worden hier verklaard. We hebben een doe verklaring en vervolgens het lichaam weer met deze bretels, dus dit is het lichaam van de do-while - laat me in te zoomen op deze, dus het is beter leesbaar - en in het lichaam, we proberen om af te drukken "Dit is het lichaam", i + +, dus verhogen de inhoud van i en doen dit tot i krijgt 3 is, en dan ons programma eindigt. Dus wat gebeurt er als we dit programma uitvoert? >> Ik verwachtte een identifier. Oke, dus bouwen rennen,, fout optreedt. Wat gebeurt er? We scroll naar beneden hier, krijgen we deze wat cryptische zoek ding, verwacht puntkomma na hoogste niveau verklaring. Dat is een beetje raar. Heeft iemand een idee van wat zou kunnen worden aan de hand? Beetje raar, ja. >> [Onverstaanbaar] worden verklaard buiten de haakjes? Betekent dat dan niet van toepassing bij het gebruik van haakjes? Dus hij verklaarde deze man buiten die haakjes? Oh, deze jongens - de accolades? >> Ja. Ja, precies. Dus het blijkt dat kun je eigenlijk niet een variabele declareert hier als deze. Wat je zou kunnen hebben proberen te doen was - knip het uit van daar - kunt u ofwel zet het binnen de accolades hier of een ander alternatief is gericht op het volledig buiten. En dus deze - afhankelijk van waar je eigenlijk zet de verklaring van die integer variabele, kun je 2 zeer verschillende soorten variabelen; wanneer het buiten van de belangrijkste, het is wat wij noemen een globale variabele. Het is buiten de werkingssfeer van een van de functies - het is niet binnen een functie - terwijl als we het binnen van de belangrijkste, zoals hier, dan is het wel een lokale variabele, omdat het de plaatselijke omvang van de belangrijkste. En we zullen een beetje meer praten over wat de verschillen zijn tussen de 2 types en waarom u gebruik maken van verschillende soorten variabelen, maar voor nu, u kunt gewoon blijven alle variabelen lokale, omdat we hebben geen behoefte aan globale variabelen. Oke, dus dat is een ding daar. Laten we proberen het uitvoeren van dit weer, zien wat er gebeurt. Uitvoeren, krijgen een andere fout. Zoom in een beetje, we wat krijgen? We krijgen dit verwacht accolades na te doen / tijdje. Enig idee wat er aan de hand? Dan? >> Is die tijd dan tussen haakjes en dan - Ik weet niet of je nodig hebt om int redeclare, maar de do while (i <3). Precies, ja. Zo blijkt dat Dan is het precies. We hebben geen behoefte aan dit soort weer hier plaatsen. We kunnen in plaats daarvan doden het type en gewoon doen. Oke. Ik kom terug uit te zoomen, probeer het nog een keer. Kijk dat en draait succesvol. Als we naar beneden scrollen, "dit is het lichaam" uitgeprint 3 keer. Dat is vrij zoet. Goed gedaan, goed gedaan, jongens. Goed gedaan. Hoe gaat dit zo ver te gaan? Decent tempo? Oke, cool. Dus, als we soort van terug naar de oorspronkelijke vraag, we - en nu als we het verschil zien, zie je dat in dit do-while-lus, de aandoening komt laatste. Dus als de computer leest het programma omdat C programma's worden voor soort uitgevoerd in deze volgorde, waar ze letterlijk beginnen met de eerste regel van de belangrijkste, en vervolgens uitvoeren lijn 6, lijn 7, lijn 8, lijn 9, lijn 10, lijn 11, al deze spullen in de rechterbovenhoek hier gaat eenmaal wordt uitgevoerd voordat we ooit testen deze voorwaarde te zien al dan niet i - of de inhoud van i, in plaats van - minder dan het cijfer 3. En alleen als als we naar lijn 12, de inhoud van i minder dan 3 hebben we eigenlijk terug te gaan naar lijn 7 en herhaal het proces, en dan gaan we weer testen van de conditie en opnieuw en opnieuw. Dus we kunnen contrasteren deze met - zoomen weer naar buiten, scroll naar beneden naar versie Sam's, We gaan kijken naar deze, iets veranderd zodat het niet langer een oneindige lus - waar als we inzoomen, zien we dat als dit programma wordt uitgevoerd, het gaat om eerst te verklaren int i, stelt u de inhoud van de i be op 0, en dan raakt de toestand van de lus while eerste dus in dit geval, dit lichaam, dit printf ("hi") en i + + zal niet eens uit te voeren tenzij i zelfs minder dan of gelijk aan 2. Als i is 3 bijvoorbeeld Als we dit hier gelijk aan 4 - of ik doe 3, omdat ik zei 3 - en voer het, het zal bouwen, zal het draaien helemaal goed, maar het zal niet echt afgedrukt wat dan ook, omdat zij niet die test voor het eerste geval. Dus in de klas, we soort van gesproken over waarom deze do-while loops soms bruikbaar en waarom zouden we het gebruiken in plaats van een while lus. Zijn er - hebben jullie nog suggesties waarom een ​​do-while-lus wellicht beter? >> Nou, ik denk dat do-while loops is als je wilt input van de gebruiker, want op die manier kunt u hen laten iets in een keer, maar als het klopt, we verder met de rest van het programma, maar als het niet correct is, dan moet je blijven vragen aan de gebruiker totdat u de juiste ingang. Ja, precies - precies, dus een do-while-lus is nuttig want tijdens het vragen om invoer van de gebruiker want je moet de gebruiker input te krijgen voordat je daadwerkelijk kunt controleren. Dus PSET 1, in PSET 2, waar je wordt gevraagd om invoer van de gebruiker veel, dat is een handig ding om te gebruiken in tegenstelling tot een simpele while lus. Als u gebruik maakt van een while-lus, kunt u hetzelfde doen - u kunt hetzelfde doen met een lus while als je met een do-while-lus. Je hoeft alleen te soort hebben dit dubbele proces waar u eerst de ingang en dan begin je while lus. Overwegende dat een do-while-lus, hoef je alleen maar een keer te schrijven en het is een stuk schoner. Oke. Nog vragen? Logisch? >> De return 0 - dat is gewoon een soort van een kraam of is het -? Ja, dus we kunnen - goed, zullen we de dekking van deze een beetje meer later maar het blijkt dat de Deze return 0, dat we eind voornaamste hele tijd - kun je een beetje gewoon als iets wat we doen voorlopig. Wat zijn we begonnen om over te praten met functies soort van aan het einde van vorige week en dan weer deze week dat een functie neemt ingangen die deze dingen binnen de haakjes; Dit zijn 2 ingangen, onze argumenten of parameters, wat ze ook wel naar onze belangrijkste functie, en een functie een uitgangssignaal noemen wij een return waarde. En de retourwaarde bij belangrijkste is dat int, deze integer, en de manier waarop u te vertellen een functie, "He, dit is wat je output gaat worden, "is met dit woord" return ", dat zoekwoord, in plaats van, en zo de belangrijkste terugkerende 0 of belangrijkste uitvoeren van 0 is standaard in C-programma's omdat terugkeer 0 van de belangrijkste middelen die "Hey, alles uitgevoerd met mijn programma prima." Als we iets anders zetten dan 0, zoals 1, bijvoorbeeld die wordt gebruikt om te vertellen wie liep dit programma dat er iets mis ging. Dus als we meer betrokken met spullen over de semester, als je ooit om te zeggen, "Oeps, je weet wel, ging er iets mis met dit programma," in plaats van mijn programma crash, ik wil melden de loper van mijn programma dat er iets mis ging, kunt u gebruik maken return waarde, zoals wij het noemen, dat is niet 0. Dus gaan we het hebben dat een beetje meer zodra we in functies. Dat soort zinvol? Oke. Functies zijn soort bizarre - Ik denk dat voor mensen die veel van wiskunde achtergrond, komt wat gemakkelijker vooral als je een beetje meer abstracte wiskunde achtergrond en je bent gewend om te praten over functies en al dat soort dingen. Maar we zullen proberen en dek ze af en ga lekker langzaam als ze komen. Ook deze hele int argc, char * argv [], voor nu, kunt u ook dat als ketel plaat. We zijn begonnen om die een beetje in lezing dekken als we praten over argumenten die krijgen in programma's die via de opdrachtregel, maar in uw probleem sets en uw programma's, het is helemaal prima alleen nietig te schrijven en het simpel te houden. En wat deze leegte betekent is dat "He, is de belangrijkste niet van plan om alle inputs te accepteren; dit is gewoon een programma dat we gaan gewoon lopen. We zijn niet gaan geven extra informatie elke keer als we beginnen met het op draait. " Dus voor nu, kunt u dit doen; kunt u ook nog weglaten van de return 0 aan het eind van uw programma's en ze lopen prima, maar ik raad alleen het houden van dat binnen In een paar weken zullen we beginnen met de soort trek de deksel een beetje en meer te begrijpen over al die verschillende kleine bewegende delen. Oke, laten we nu hier praten over onze tweede vraag. Dus wat doet "zwart identifier" duiden er meestal op indien afgegeven door Clang? Ik denk dat we dat al hebben gezien vandaag. Kan iemand geven een samenvatting van wat dat betekent? Laten we eens kijken, Kelly - een van de Kelly's. >> Dus - Ja, wat doet - >> Ik denk dat als je, net als, niet verklaren de variabelen en je probeert om het te gebruiken. Ja, precies, precies. Dus als je ooit zult zien deze uitgang wanneer u probeert en stel uw programma, net zoals Kelly zei, betekent dit dat u een variabele die je niet hoeft te declareren wordt gebruikt, dus als ik terug naar onze Space, en ik doe iets als printf ( "Hallo% s") en proberen en vul dat% s met een variabele s die ik niet heb nergens verklaard en ik probeer het uit te voeren, je zult zien wat ik aan de slag in deze rechtsonder hier: "Het gebruik van niet-aangegeven identifier 's'"; dat betekent gewoon dat je niet hoeft te declareren uw variabele. Hetzelfde gebeurt als je hebt x en je probeert en 7 op te slaan in het en ik heb niet verklaren X. Ik krijg dezelfde error: "Het gebruik van 'x' aangegeven naam". Oke, zodat de Caesar Cipher, niet erg veilig, Ik laat jullie zien deze korte, soort van begrijpen waarom, en hopelijk na het doen van deze week probleem te stellen waar je eigenlijk een Caesar Cipher schrijven, zul je begrijpen een beetje meer over wat het betekent om een ​​veilige en onveilige - of niet veilig, denk ik - onzeker is iets anders. Het andere was hebben we hier deze andere vragen over functies en wat een functie is, en we soort van over gehad kort toen we spraken over de terugkeer van waarden; voor iemand die is al de les te lezen, U kunt samen te vatten die zijn geweest om les te lezen vandaag? Oke. Laten we eens kijken, laten we eens - kan iemand ons vertellen wat een functie is? Kelly? >> In principe iets wat je putten uit iets dat geschreven is in de bibliotheek dat is ingewikkelder daar, en dan moet je gewoon schrijven een korte vorm van het, dus als je verwijst naar die bibliotheek, met behulp van zo lang code en [onhoorbaar]. Ja, precies, en dan wil je iets toevoegen aan wat? >> Ja, ik denk het als vergelijkbaar met het concept van een formule in de wiskunde waar je gewoon schrijf een formule en dan u kunt aansluiten variabelen in en dat is wat een functie is [onverstaanbaar]. Ja, dus we hebben een paar antwoorden hier dat zijn allebei erg goed en direct aan. Er is met betrekking tot code die is geschreven in de bibliotheek ergens Dat is ingewikkelder en dan kun je putten uit die code en werkelijk te gebruiken door gewoon het schrijven van de korte vorm van het - of liever, de naam - en dan is er ook deze vergelijking om een ​​formule in de wiskunde of natuurkunde, al dat soort dingen waar je een formule en je in kan pluggen in de variabelen aan die formule te krijgen dan het resultaat van de formule zodat je er over nadenkt als als de kwadratische vergelijking. Stel je voor dat in plaats van om te leren over wat de kwadratische formule is in wiskunde klas, je had net een beetje rekenmachine programma dat het voor jou deed. Heeft iemand gebruiken rekenmachine-programma's in wiskunde lessen op de middelbare school? Ja, natuurkunde klassen? Waar kun je gewoon zeggen: "He, kwadratische formule. Dit zijn de variabelen die ik wil invoeren. Geef me het antwoord. " Dat is een soort van wat een functie is. Het is een manier voor ons om soort van schrijven als een klein beetje onder het programma binnen onze grotere programma en gebruik het over en weer zodat wij niet hoeven te kopiëren en plakken code, we kunnen geven verschillende ingangen en krijg verschillende uitgangen, het is super handig als je probeert om verschillende programma's te schrijven op verschillende tijdstippen. Dus bijvoorbeeld, een functie die we hebben gebruik gemaakt van over en over en weer gedurende de cursus is printf. Printf zelf een functie en het blijkt dat het eigenlijk een vrij lang en ingewikkeld, vervelende kijken, werken te schrijven. Dus zo simpel als het lijkt ons om dingen uit te printen op het scherm, omdat we allemaal net deed dat aan het begin van deel vandaag de dag, blijkt dat het eigenlijk, weet je, een goed paar honderd regels code. Het is niet iets dat ik ooit zou willen schrijven, zeker, maar we krijgen om het te gebruiken elke dag, dat is wel cool, dus we krijgen om het te delen met elkaar, met verschillende programma's, dus we zullen duiken meer in functies; voor het moment, we zijn niet - de enige functie gaan we te schrijven is de belangrijkste. Main zelf ook een functie, en je kunt zien dat het de output heeft, de inputs zoals we gesproken over, en dan de naam, die de belangrijkste. Main is een soort van een - is een speciale functie daar. In uw C-programma, moet er een hoofdfunctie, en dus voor nu, we hebben soort van weggelaten schrijven het prototype of de verklaring van, de belangrijkste. We hebben gezien het feit dat u, en we hebben net vul je in natura van de blanks. >> Dus voor het tweede probleem set, hoeven we niet te schrijf het in de tweede functie? Ik denk het niet. Ik geloof dat het allemaal hier. Ja, dus Caesar Cipher, je hoeft niet te, is het niet zien, en Vigenere, doe je ook niet, dus - en het blijkt dat je niet ooit daadwerkelijk te schrijven een functie, toch? U belt altijd al je code te zetten in de belangrijkste, en veel programmeurs doen. Als we verder gaan, We beginnen met de invoering functioneert als een manier om schoon te maken uw code, om het meer elegante, in het geval u taken - een beetje zoals toen we spraken over loops, hoe soms zijn er dingen die je wilt opnieuw en opnieuw en opnieuw doen, en je hebt soort van de naïeve manier - of wat we vaak noemen de "stroman" oplossing, is om gewoon kopiëren en dan plakken en weer - u kunt hetzelfde doen met functies waar je gewoon kopiëren en plakken dezelfde code over en weer, maar dat bloats uw code - het eindigt het maken van uw code echt lang - en het wordt ook een beetje verwarrend, en dan betekent dit dat u niet in staat zijn om dergelijke - als je ooit wilt dat de code opnieuw te gebruiken in een ander programma, je bent ook vast te kopiëren en plakken het weer, dus een van de dingen die we praten over is soort ontwerp en de stijl van uw programma's, en dus, als het zinvol is om dergelijke pakket iets omhoog en zet het als een aparte functie, raden wij u aan dat te doen, en dat is iets dat, nogmaals, er is geen vaste regel. We zelden zeggen dat je moet een functie genaamd dit te schrijven, maar het is meer van een van die dingen die je gewoon ontwikkelen in de tijd als je meer en meer programma's te schrijven. Nog meer vragen? Oke, dus laten we nu Ga terug naar deze man hier, dus ik ben nog steeds in dit gedeelte van vragen. We hebben gesproken over al die verschillende, wat is een functie, waarom om functies te schrijven, wanneer je kunt gewoon kopiëren en plakken? Hopelijk hebben we je overtuigd dat het schrijven van functies is een goede zaak. Dus laten we nu overgaan tot deze MySpace programma, en wij zullen besteden een beetje tijd om dit te doen. Dus, laten we eens kijken, kan ik iemand heb dit voor mij? Laten we Mikhaila - zal je dit leest voor ons? >> Je bedoelt terug als MySpace - Terug toen MySpace was cool. >> "Toen MySpace was cool, Het was al de woede op type Vind je deze. Misschien is het nog? Ik ben niet echt zeker. In ieder geval met de CS50 Appliance, CS50 Run of CS50 Spaces, schrijf een programma dat de gebruiker voor een melding en drukt dan het bericht met de eerste letter als hoofdletter geschreven, met alle andere letters in afwisselende geval, volgens de voorbeeld van de uitvoer onder, waarin vetgedrukt tekst vertegenwoordigt enkele gebruiker input. Voor de eenvoud, kunt u ervan uitgaan dat de gebruiker zal alleen ingang kleine letters en spaties. Beschouw dit probleem een ​​kans om te oefenen; wordt u niet gevraagd om dit programma in te dienen. " Geweldig, dank je wel. Dus als Mikhaila gezegd, gaan we een programma dat uw code MySpaces schrijven. Dus heb een van jullie gebruiken MySpace? Elk van jullie heeft MySpace-accounts? Oh, ja, ja! Het was erg tof. [Gelach] Ik weet het. Dating mezelf. Dus wat we proberen te doen is een programma te schrijven dat doorloopt en de eerste letter en vervolgens om de brief daarna - of elke andere letter daarna, het spijt me. Dus - en je kunt zien in dit voorbeeld, dit is hoe we het programma uit te voeren, en dus dit is gewoon te zeggen: "We zijn een programma genaamd a.out draait. De input die we gaan waardoor het zal worden gevraagd. We gaan niet leveren de input op de opdrachtregel. " Als u al na alle lezingen en het horen van argumenten op de prompt, dat is een soort van waar die - dat funky syntaxis aan de Main komt binnen met de int argc, al dat spul, dus hier zijn we nog niet gebruikt, dat, we zijn niet te maken met een van die. We zijn gewoon gaan dit getypt in te krijgen door de gebruiker, en dan deze tweede lijn met de funky kapitalisatie is wat we willen ons programma om output. Dus in plaats van het apparaat of Run, zullen we gebruik maken van Spaces, want we hebben Spaces, en dus als jullie zou krijg je code om iets op te zoeken als dit, dus ik ga deze herziening op te slaan gewoon zo je hebt de ketel plaat hier dat ziet er zo uit, int main (void), niets in. Eigenlijk, wat we doen is dat we zullen gewoon alles te verwijderen allemaal samen. We willen een schone lei, omdat we niet gaan beginnen met het schrijven van code; liever gezegd, we gaan proberen het schrijven van een aantal pseudo-code wat eigenlijk gewoon betekent dat we gaan iets dat niet is code te schrijven dat soort beschrijft wat we willen doen, een beetje zoals David deed op de eerste dag van de lezing, of ik denk dat dat was de tweede dag van de lezing toen hij dat deed de hele sokken demo. Jullie herinneren dat - het zien van de sokken? Jozef was daar soort van te typen in het Engels? Dus we gaan hetzelfde doen. Dus toen ik beginnen met het schrijven pseudocode, Ik wil graag beginnen door te kijken naar wat de ingang gaat worden. En ik geef mezelf een monster zaak, dus als "bedankt voor de add!" En dan heb ik ook schrijven wat ik wil de output te zijn, in dit geval is zoiets. En dat soort geeft me een goed, net als, uitvalsbasis om na te denken over, "Oke, ik wil lijn 1 te nemen en ik wil om te zetten in lijn 2, " en dat soort helpt begeleiden mijn denken. Dit is een goede plek om te beginnen. Een andere manier om na te denken over het, ook, zoals we kinda gaan en als je dit doet in je eigen programma's, is het na te denken over zoiets als wat zijn de rand gevallen dit? Wat zijn soort van de vreemde scenario's? Wat zijn de rare ingangen die we kunnen krijgen? En wat moeten die resultaten zien? Bijvoorbeeld, een rare ingang zou men, het creëren van helemaal niets, zoals wat moeten we uitvoeren in dat geval? Iets wat we willen denken, ook. Dus net als een vraag, wat zouden we willen output? Als we een willekeurige ingang niet helemaal, wat moet ons programma worden uitvoeren? >> Niets. Niets? Klinkt goed. Dus we willen ervoor zorgen dat we niet alles uit te schrijven als we niet krijgen wat binnen Cool. Oke. Zo Ik ga een beroep doen op een paar mensen als we door en net erachter te komen net zoiets als wat de algemene algoritme is en we soort slag door deze samen. Dus, laten we eens kijken. Missy. Hoe denk je dat we zouden beginnen? Wat zou een goede plek om hier te starten als we willen veranderen, zeg, lijn 1 in lijn 2? Kun je soort van gewoon mij uitleggen, in het Engels, wat je denkt? Maak je geen zorgen over code. >> Het eerste wat ik zou doen zou zijn om vorm van directe de gebruiker om ze te vertellen wat je wilt. Oke, dus, laten we zeggen, "He, gebruiker. Wil ik een string "- geweldig. Dus laten we opschrijven. De gebruiker vragen om een ​​string. Dat klinkt als een goed begin. Oke. We vragen Kelly Ren deze tijd. Wat zouden we dan willen doen? Wat is een soort van onze volgende -? >> Verzamel hun input en opslaan als een variabele. Geweldig. Dus het verzamelen van de string, opslaan in een variabele. Dus is er iets speciaals willen we hier doen? Willen we hun inbreng te controleren voor -? >> Ja. Wat zouden we willen om te controleren op? >> Nou, je zei dat we niet hoeven te controleren of het een nummer, toch? Omdat het zal gaan ervan uit dat het kleine is? Ja. Dus het blijkt dat - ja. Dus getString is gegarandeerd om terug te keren ons een string. Het gaat niet om een ​​nummer terug te gaan naar ons of iets dergelijks. Er kunnen cijfers karakters binnen die string, dat wel. En die kunnen we negeren als we deden de kapitalisatie. Maar een lege string is helemaal goed, De zaak hier op lijn 4 en 5, recht, wanneer er geen input, en we hebben gezet niets als onze output. We hebben geen zorgen te maken over het maken van zorgen dat er iets in de string of dat de string is ten minste 4 tekens lang zijn; alles is prima. Dus dit contrast, bijvoorbeeld met als de centen programma dat u schreef waar je moest zorgen dat je niet-negatieve getallen krijgt; moest je ervoor zorgen dat je het juiste aantal dagen om in een maand. En hoe doen jullie dat? Hoe zou je dat doen test? Wat heb die vereisen dat u te gebruiken? >> Doe-while-loops. Do-while loops, andere vormen van lussen, ook, ja. Zo blijkt we niet een lus in dit geval, als we vragen om een ​​string, dat is wel leuk. Oke, we gaan door. Dus, Stella. Kun je ons een beetje over wat we zouden moeten doen? Dus nu hebben we de string, wij hebben het opgeslagen in een variabele; wat we moeten doen met de string? >> We moeten - identificeren 2 - Ja, gewoon zeggen dat het in het Engels, dat is geweldig. >> Identificeer de [onverstaanbaar] hoofdsteden - of, hoofdletters. Ja, dus je zou identificeren welke zijn hoofdletters en kleine letters. We kunnen niet hoofdletters of kleine letters totdat we geïdentificeerd welke. Dus zetten we dat hier. Dus, net te denken over dit proces, hoe doen we deze identificatie? Weet je, Dan? Kind van wat we - welke tool we zouden hebben om uit het gebruik van onze gereedschapskist? >> Ik zou het in een of andere manier in als een array of elke lijn is zijn eigen doosje, en dan hoofdletters het vanaf daar of niet. Oke, dus een tool die we kunnen gebruiken is een array. Wat hebben we om naar te kijken in de string, hoewel, om erachter te komen - we hadden om te kijken naar de personages. >> Dus je hebt om te kijken naar de lengte van de snaar? Ja, dus deel daarvan krijgt de lengte van de tekenreeks. Gewoon uit nieuwsgierigheid, we wat te gebruiken om de lengte van een string te krijgen? >> Strlen? Ja, strlen, noemen we dit "strlen" Al deze string functies, dus strlen een functie, en het is super handig, want we kunnen het gebruiken om gewoon te zeggen, He, strlen: Hier is een string, vertel me hoe lang het is. In de lezing van vandaag, David sprak veel over hoe strlen wordt uitgevoerd, wat er eigenlijk aan de hand achter de schermen. Maar dit is een van de super handige degenen. Er zijn andere die ook in de string bibliotheek zoals strcmp, die wordt gespeld "strcmp", die wordt gebruikt om strings met elkaar te vergelijken. Andere degene die je gaat gebruiken als strstr, dat is goed voor het vinden sub strings enzovoort. Voor het grootste deel, ze allemaal beginnen met str en gaan vervolgens in op iets anders te zijn. De reden dat ze niet echt spellen ze als string en ga zo maar door omdat terug als de vroege dagen van C, toen mensen werden voor het eerst schrijven en dat alles, hadden ze beperkingen op het aantal tekens dat je zou kunnen gebruiken voor functie namen en namen van variabelen, dus alles is als super gecondenseerd. Maar elke keer als u iets ziet dat begint met str, dat betekent meestal is dit iets te maken heeft met een string. Oke, dus je hebt om de lengte van de string te krijgen, en dan, wat doen we met de personages? Weet je, Sam? >> Ik heb geen idee, ik probeerde om het te achterhalen. Ik weet het echt niet - Ik wou dat er een manier om - Ik bedoel, ik zou misschien denken dat we iets konden doen met kansen en egaliseert, maar ik weet niet van een functie als dat. Ja. >> Maar dat - het zou niet per se te werken, want dan zou je de ruimtes te zijn - je zou hebben om de ruimte te tips over hoe te krijgen - Oke. >> Ik weet niet - ik ben soort van verloren op dit punt. Ja - nee, nee, nee, dit zijn goede punten. Dus wat we moeten doen is, zoals Sam zei, moeten we bijhouden welke letters zijn de oneven letters, en welke zijn de even letters. Maar we willen ervoor zorgen dat we gewoon niet op zoek de oneven en even indices in de string, maar naar de even en oneven letters in de string, dus we moeten een beetje hebben dit onderscheid tussen brieven - zoals wat is eigenlijk A, B, C, D, of zo op, en wat de dingen zijn niet letters, maar nog steeds in onze string. Bijvoorbeeld hier, als dit uitroepteken is niet een letter, maar het is nog steeds een deel van onze string, het is nog steeds een char. Ook al deze ruimten - Het heeft geen zin om een ​​spatie profiteren, toch? Dus we willen ervoor zorgen dat we een of andere manier die overslaan terwijl nog het bijhouden van kansen en egaliseert. Dus een beetje in onze programmering toolbox tot nu toe, als je wil, We hebben een aantal verschillende tools die we hebben gesproken over. Dus een bijvoorbeeld variabelen, zoals we hebben gesproken over hier. Een andere tool die we hebben gesproken over zijn functies. Dus we hebben gesproken over variabelen in onze pseudocode hier als wat we gaan gebruiken om onze string op te slaan. We hebben gesproken over functies om de lengte van een string te krijgen, net als strlen. We hebben het over iets anders, en we hebben erover gesproken voor een veel eerder in paragraaf vandaag: loops. Wat doen jullie denken over het gebruik van een lus in dit programma? Jared, wat denk je? Zouden we gebruik maken van een lus in dit programma? >> Waarschijnlijk niet, nee, want je hoeft niet te gaan door middel van het meer dan eens. Oke, je hoeft niet te gaan door wat meer dan een keer? >> De hele string. Juist, dus je hoeft niet te keer te gaan door middel van de string hele. Sorry dat maakte totaal geen zin! Je hoeft niet te gaan door de hele reeks meer dan eens. Oke. Wat denk je? >> Ik denk dat het beter is om ze te gebruiken dus we kunnen doen zoals profiteren, terwijl de locatie van het [onverstaanbaar] nummer. Geweldig, en zo profiteren wat? Oke, dus we zeggen dat moeten we gebruik maken van een lus, omdat we willen profiteren van een brief, terwijl het is niet een nummer. Dus - sorry, heb je wilt toevoegen? >> Ik was van plan om te zeggen dat de manier waarop je de snaar te behandelen en het [onverstaanbaar] gescheiden van de [onverstaanbaar] op de personages? Ja. >> En dan kunnen we toewijzen nummers - of gebaseerd op de locatie van de letters in de string? Ja. >> En vast te stellen of het even of oneven en de brief zelf kapitaliseren terwijl de locatie van de brief is [onverstaanbaar] - sorry. Geweldig. Dus gewoon een samenvatting. Kun je me weer herinneren aan je naam - Het spijt me. >> Charlotte. Charlotte, oke. Dus wat Charlotte zegt, dat is helemaal gelijk - goh, dit houdt om automatisch streepje op mij - is dat als we kijken naar een string zoals deze aan de top - "Thanks for the add" - als een opeenvolging van tekens waarbij de op positie 0, het h op positie 1. A is 2, dan we 3, 4, 5; de ruimte op positie 6. Overwegende dat - wat is de positie van f? 7! O? 8. R? 9. En dan hebben we 10, en dan kan ik niet echt te schrijven zonder dat het beetje knoeien op het scherm. Maar dit is eigenlijk hoe we kunnen praten over strings in het geheugen. Is het een tekenreeks is een opeenvolging van karakters, en wanneer we verwijzen naar een eigen karakter in een string, we doen dat vaak door te verwijzen naar positie die personage in de string, waarschijnlijk op dezelfde manier als we praten rond september zijnde de negende maand van het jaar of maandag is de eerste dag van de week. Dus dit geeft ons een manier om erachter te komen welke zijn oneven versus zelfs omdat je hier kunt zien, Als wij voor uw met deze T, kun je zien dat alle van de geactiveerde degenen ten even posities, althans voor het eerste woord, en dan dingen krijgen afgeworpen zodra we raken die ruimte, omdat we deze ruimte niet als een brief, dus het is alsof we begonnen en ging 0, 1, 2, 3, 4, 5, ruimte, 6, 7, 8, ruimte, 9 en 10, 11, 12, enzovoort. Cool, dus we zeker willen een soort van lus te gebruiken te gaan over elk van de personages op zijn beurt. Dus op dit punt, we zullen hier terug te komen naar onze oude pseudocode. Als onderdeel van deze identificatie van welke zijn hoofdletters en welke kleine letters, we willen dit doen in een soort lus. Loop, dikke darm. Wat voor soort lus, uit de aard van de lussen die we hebben, lijkt een goede om te gebruiken in dit geval? >> Ik zat te denken van de for-lus. En waarom denk je aan for-lus? >> Omdat het begint bij nul, en dan wanneer we de lengte van de tekenreeks te bereiken, en dan elke iteratie kun je [onverstaanbaar], ook? Ja, precies. Dus, uit de verschillende keuzes van loops, we hebben voor loops, while loops, en do-while loops. Wanneer een for-lus is vooral nuttig is wanneer u wilt weten soort van waar je bent in de lus, hoe vaak de lus dusver uitgevoerd. En dat is precies wat we willen weten in deze situatie, zoals Kelly zei, gebaseerd off van de eerdere opmerking Charlotte's die we willen de positie weten van het karakter in de string, en de for-lus zal ons alleen dat, want als we beginnen soort terugblik op onze string, als we beginnen onze for-lus op 0, en we gaan door de lengte van de gehele string, dan kunnen we associëren de letter T met de 0 in onze for-lus, letter H met een in onze lus, enzovoort, gaat helemaal door het einde van de string. Dus laten we beginnen met coderen dit maar een klein beetje gewoon zo dat jullie een gevoel krijgen voor hoe dit eruit ziet. Ik ga dit op te slaan, dus we hebben onze pseudo code in hier, en ik ga om alles te verwijderen. Dus ik heb een schone lei. Ik ga beginnen met het schrijven int main (void) { Ik ga de return 0 zetten in en de}. Dus meestal als ik begin te programmeren, dit is wat ik beginnen. Ik bewaar het zo dat jullie het hebben. Dus een van de eerste dingen die we gesproken over was het krijgen van input van de gebruiker en op te slaan in een string. Hoe krijgen we input van een gebruiker? >> GetString. GetString, oke. Dus als ik typ GetString () en een puntkomma. Laten we proberen het uitvoeren van deze, zal deze run, in de eerste plaats? En waarom zal dit niet uitvoeren? >> Je moet de variabele te declareren. Ik moet een variabele declareren. Oke. Dus hoe doe ik dat? Vind je het erg het schrijven van iets, te delen? En dan kunnen we trek het omhoog. Laten we eens kijken, Dan, rechts, oke. Of Daniel. Kopieer dat in, string input = GetString (). Awesome. Zal dit uitvoeren? Laten we het eens proberen. Hit run, uploaden broncode, de bouw, is een fout opgetreden. Oke. Dus wat hier aan de hand? Gebruik van 'string' zwart identifier. >> We moeten de bibliotheken zijn? Ja, dus Dan's zeggen dat we moeten de bibliotheken op te nemen. Is dat wat je wilde zeggen, Stella? Awesome. Dat awesome, dus Stella, kunt u Kopieer deze code uit Space Daniel's? Als je op Daniel Roland Ki, kopiëren, en dan zal je de include lijn in, en sla het uit? Laat me weten als je klaar bent. Dus dit zijn onder andere syntax is ook een soort van funky; Er is net als die hash tag, en er is de include, en dan zijn er deze punthaken. Weet je nog hoe dit werkt, of moet ik zet het op deze code hier? >> Ik ben goed. Oke. >> Ik drukte het - ik was niet zeker welke bibliotheek, dat wel. Oh, oke - ja, dus het is de CS50 bibliotheek. >> Oh, ik stdio bibliotheek. Oh, ik heb het - ja, nee, Dat is - dus het blijkt dat touwtje eigenlijk iets is dat is speciaal voor CS50. Er is eigenlijk geen echte reekstype omdat hier, string is in het type positie, - we verklaren van een variabele met de naam invoeren van het type string - en we zetten de binnenkant van ingang de waarde die wordt geretourneerd aan ons: de uitvoer van dit GetString functie-aanroep. U kunt zien dat dit is een functie-aanroep, omdat het heeft de haakjes, net als printf doet, net als strlen doet. Maar string is eigenlijk niet echt een soort in de C-taal. We hebben het in een soort, en we nemen om meer wat het eigenlijk is in C, want er is een manier om te werken met strijkers; we hebben net iets gedaan zodat het lijkt een beetje vriendelijker. Dus hier gaan we dan. Hier is Stella's code. Het heeft de # include . Andere mensen zullen dit noemen als een hash bevatten soms of een scherp zijn. Nu kunnen we starten, voer het uit, en we hebben nog een foutmelding krijgt. Laten we eens kijken wat er gebeurt. "Ongebruikte variabele 'input'." Oke, dus dat is cool, dat is cool. Ik bedoel, het is niet echt cool, want we krijgen er een fout en het is niet actief is, maar wat dit zegt is dat We hebben geen gebruik gemaakt van onze variabele, wat logisch is. We hebben niet geprobeerd om iets te doen met het. Dit is een manier Clang probeert om ons te helpen ervoor te zorgen dat we niet alleen variabelen met behulp van en dan per ongeluk bellen ze iets anders later in onze code, helpt ons te voorkomen fouten die manier. Oke, dus we hebben input van de gebruiker, we opgeslagen in een variabele. De volgende stap was toen gaan kijken naar alle tekens in de string en het identificeren welke moeten worden hoofdletters en welke worden kleine letters. En net als Kelly en Charlotte opgevoed, we dit met behulp van een for-lus. Dus heeft iemand herinner me de syntax van een for-lus en wil graag een gooi te nemen op alleen het schrijven de eerste regel van de for-lus, alleen de voor bit? Kelly, wil je het eens proberen? >> Ja, dus je moet initialiseren eerste, dus ik zet i = 0, en toen deed ik i > Ja, Ik heb het verpest een beetje, maar ja. Oke, laten we trek het omhoog. Awesome. >> Maar ik wist niet of je had dat - Ja, oke. Dus hier is wat Kelly's heeft: laten we snel kijken. Dus ze is inbegrepen de CS50 bibliotheek aan de top. Ze is onder meer de standaard IO bibliotheek aan de top, en de standaard IO heeft functies zoals printf, dus als je ooit wilt printf gebruiken, moet u die lijn. En toen waren de snaar bibliotheek, die we nodig hebben, omdat de string bibliotheek strlen functie, die we krijgen in een beetje. Dus als we kijken naar wat Kelly heeft gedaan hier, kunt u een wandeling ons door wat je gedaan hebt? >> Ja, dus - ik bedoel, ik heb fouten, dus - Ja, nee, het is - >> Dus ik wilde de string die ik net "string" kreeg noemen. Ik wilde om uit te printen de string en dan heb ik - Ik wilde de string te stellen, gelijk als een array van elk karakter anders zijn [onverstaanbaar], toch? En toen wilde ik om te beginnen op positie 0 en vervolgens om de 2 ruimtes, Ik was van plan om te profiteren, dus ik beschreef het als 23, want ik was op zoek naar de ASCII-tabel. Dus dat is wat ik dacht - ik weet dat het niet goed is. Ik heb het, dus dit is een goede start. Ik denk dat veel van het kader is hier op zijn plaats. Laten we gaan door voor soort lijn per lijn en zien wat er gebeurt. Dus de manier waarop ik graag om dit te doen is gewoon beginnen met het opstellen van de code en laat de compiler vertellen als wat er mis is met mijn code, omdat de compiler is echt goed in je te vertellen wat er mis is met uw code. Dus als we het spelen, bouwen, en het niet te bouwen. Het zegt dat er is een fout opgetreden, dus als we naar beneden scrollen en kijken naar de eerste fout, gezegd - we terugbladeren naar de top, we kunnen zien zijn er 5 fouten gegenereerd hier beneden op de bodem. Oeps, dat is echt afgesneden. Ik denk dat dat niet gaat gewoon om een ​​betere te krijgen. Daar gaan we. Dus er zijn 5 gegenereerd totale fouten. Hier kan ik alleen de eerste 2, dus ik kan bewegen dit een klein beetje en dan soort van scroll up. Dit is de opdracht die werd uitgevoerd om de code te compileren, en dan de eerste fout was in file.c hier: "Identificeren of te verwachten '('", en het was op deze lijn waar we zeiden string = GetString (). U kunt hier dat het was op lijn 8 van file.c te zien, en dan denk ik dat dit karakter 12 - dat is de fout. Dus wat is er mis op lijn 8 - Kelly? >> Je hoeft alleen maar te noemen, zoals, een brief of iets, zoals string s of zo? Ja, dus het blijkt dat deze speciale soort namen, dus string, int, char, short, ze zijn allemaal speciale trefwoorden, en je kunt eigenlijk niet gebruiken als de namen van uw variabelen, omdat de compiler die kijkt en zegt "Oh, ik weet dat het een soort," dus je kunt niet echt een string variabele genaamd string, alsof ik hier probeer te doen, dit zal niet werken. Maar in plaats daarvan, kunnen we noemen het iets als s of st of str. Wij konden ook niet noemen int. We kunnen geen een string genaamd int. We kunnen geen een string genaamd char, geen van deze zal werken. Dus we zullen noemen het gewoon is voor het moment. Awesome. Dus wat de toekomst aan de hand is in deze lijn? String - deze lijn ziet er goed uit? Laten we het nog eens proberen, laten we voer het uit. Oke, dus we nog steeds fouten. Deze keer zijn we naar 4 fouten. Dus we hebben een van hen. Laten we naar boven. "Onverwacht type naam 'string': de verwachte uitdrukking," ja? >> Ja, dat is omdat ik heb geprobeerd om de string te noemen. Ja, dus het lijkt erop dat we nu ook moeten fix te gaan Al deze verwijzingen naar string. Je kunt zien dat er hier een verwijzing naar string, een hier, een hier, zodat we kunnen bewegen al deze naar s. Geweldig. Oke, nogmaals draaien. Building - een andere fout is opgetreden. Oke, nu zijn we neer op een fout, dus int i = s en dan de vierkante haken. Dus kun je ons vertellen een beetje over wat je hier doet, Kelly? >> Ja. Het was op lijn 10. >> Ik weet niet of we het allemaal nodig, maar ik denk dat ik probeerde te - Ik sla het op, zodat u kunt volgen. >> Ik denk dat ik was proberen om het te vertellen om te beginnen op positie 0 aan het begin van mijn for-lus, dus ik denk dat dat te zeggen niet nodig was. Dus gewoon om samen te vatten, je zei dat dit - je probeert om dit te beginnen op positie 0 en krijg deze - ja, dus ik denk eerder ook toen je wandelen door de code, waar je het over hoe je wilde de string te behandelen als een array dus we kunnen toegang krijgen tot elk karakter afzonderlijk. Ik denk dat Dan genoemd arrays, ook proberen om strings om te zetten in arrays. Het blijkt dat soort onder de motorkap, een string is eigenlijk opgeslagen als een array reeds, en je kunt het gebruiken als een array; er is geen conversie die je moet doen. Een string isn't - zo - een string is niet echt een array, maar je kunt openen als zodanig, omdat alle tekens worden opgeslagen een naast elkaar in het geheugen, dus als je wilt om het eerste teken van de string te krijgen, is hetzelfde als om de eerste integer in een integer array. Dus we vaak - we zullen Zie de 2 als oh, als een string, als een array, ook al is het echt - ze zijn heel verschillende dingen, maar u kunt behandelen heel veel hetzelfde. Dus het blijkt dat deze lijn eigenlijk - we geen behoefte aan een conversie te doen, en in feite, Dit is echter niet een geldige expressie, dat is wat onze compiler ons zegt. Het is te zeggen: "He, het een uitdrukking verwacht, en wat ik hier heb is iets dat niet is een uitdrukking. " Om een ​​array te verklaren, alles wat je hoeft te doen is iets als dit door een puntkomma, en dan moet je vertellen de array hoe lang je wilt dat het is, zoals 5, zodat deze lijn 10 zal verklaren een array genaamd i met 5 getallen in. Dit terzijde, dit is niet nodig voor de code, maar dit is - dit is een soort van wat de verklaring eruit ziet. >> Hoe zou je geen gebruik maken van char i [strlen (s)]? Char i [strlen (s)]? >> Char i, en dan tussen haakjes in strlen (s). Ja, dus we konden - kunnen we dit doen, en dit zou verklaren - wat zou dit doen? >> Ik denk dat het een array declareren van, net als - of - oh, je hoeft niet de i - o, ja, je zeker niet nodig op de i. U verklaart een array van karakters lengte s. En dus wat Sam's zeggen is dat deze lijn 10 - laat me wat ruimte zet in tussen haar en de rest, zodat we kunnen isoleren - deze lijn 10 zou een array declareren van tekens, strlen (s) ter waarde van hen, maar we eigenlijk nodig hebben op de i, en de reden waarom we nodig hebben op de i is, want we moeten naar de array een naam te geven; anders zouden we niet een manier om later verwijzen naar de array in de code. Dus dit hier is de array naam en binnen is de lengte. Dit geeft ons een array, maar dit is - nogmaals, dit is een verklaring. Het is niet een opdracht, het is niet een initialisatie. Als we verklaren deze array als deze, er eigenlijk niets in de inhoud van de array. Het is gewoon troep - wat is daar. En zoals we al zeiden, we eigenlijk niet eens nodig om deze conversie te doen, want we kunnen nu al behandelen string s als een array. Ik weet dat we een beetje lang op tijd rijden, maar ik wil gewoon echt snel om dit te krijgen voor lus en laten u zien hoe u de afzonderlijke tekens in de array te openen, want dat is de belangrijkste voor onze opdracht. En dan zullen we je laten gaan vanaf daar. Dus hier hebben we een for-lus dat ziet er bijna goed. Wat is niet helemaal er bijna? Hoe heet - wat niet helemaal goed over deze for-lus? >> Geen accolades? Nee accolades, voor een. Wil ervoor zorgen dat we het lichaam van de lus met accolades hebben. Oeps, niet de vierkante brace! En wat is het volgende ding dat we moeten doen met deze lus? Als ik probeer en voer het uit, whats this error die ik krijg? Ik krijg al deze fouten - Ik moet i initialiseren. Geweldig. Dus een lus - dit is niet helemaal, maar het wordt heel dichtbij. Deze code kunnen we nu uitvoeren, bouwen, treedt er een fout nog steeds. Waarom is het nog steeds klagen, zeggen dat de uitdrukking is gebruikt, en dat komt omdat deze lijn doet niets. We hebben niet ergens op te slaan, hebben we niet het resultaat opslaan. Waar moeten we het opslaan van dit resultaat? >> S of i? Precies, en deze funky syntaxis, Dit is met de vierkante haakjes betekent toegang tot de i-de karakter van s. Dat zal iets dat echt belangrijk is voor de opdracht. Helaas, we gaan hier moeten stoppen, zodat Sebastian sectie kan komen, maar ik ben blij om te verblijven na buiten en zal eventuele vragen. Dus dank jullie voor jullie komst. Dit moet nu uploaden, te bouwen, uit te voeren. Wij kunnen u een string als "hallo" en deze wordt afgedrukt "QOX". [Gelach] Dus er nog niet helemaal, maar het verplaatsen, het krijgen van de richting die loops! Bedankt voor het komen, en ik ben buiten.