[VIDEO AFSPELEN] -Een Triomf van wiskundige en mechanische vaardigheid is deze grote nieuwe automatische rekenmachine aan de Harvard University. Ingewikkelde problemen in de wiskunde gebracht door middel van de machine in gecodeerde vorm op band nauwkeurig opgelost in een minute fractie van de tijd die nodig is menselijke berekening. Ontworpen om alle vormen van bespoedigen wiskundige en wetenschappelijk onderzoek, de gigantische mechanische hersenen zal werken voor de Amerikaanse marine tot eind van de oorlog. [END AFSPELEN] DAVID J. MALAN: Dit is CS50. Het verleden was een magische plek, maar als je ooit vroeg zich af wat dat apparaat is in Harvard Science Center, het is inderdaad een deel van de Harvard Mark I, en het is op het display er nu de afgelopen jaren. En wat je ziet ingebed in probleem set een is een kijkje achter de schermen wat dat apparaat deed en doet, van professor Harry Lewis, die in de informatica-afdeling hier. Zodat meer op dat in slechts een beetje. Maar vandaag beginnen we om de overgang van vorige week aan deze, en we zullen noemen brengen van een foto hier Dat is eigenlijk heel beroemd. Heeft iemand wat dit weten is hier op het scherm? Althans volgens de mythe. Ja. Publiek: De eerste virus. DAVID J. MALAN: Dus het was zogenaamd de eerste echte bug in een computer. Nu in werkelijkheid het woord bug, voor een fout in een programma, is bij ons voor een aantal tijd in de fysieke wereld en dit was een van de eerste gedocumenteerde tijden waarin iemand daadwerkelijk plukte een grote nachtvlinder uit de Mark II computer, zet het in het bindmiddel, en dan nam het als de eerste bekende bug om daadwerkelijk fysiek gevonden. Dus zo werd ingevoerd dat in de lore van vandaag. Alles van de laatste week is online beschikbaar. In het bijzonder middelen die je misschien niet noodzakelijk merken, vooral Als hier te komen in persoon. Dus een van de leer fellows per jaar maakt een canonieke set van noten, dus je moet niet te houden je hoofd naar beneden, in een poging om bijna alles transcriberen dat zou kunnen gebeuren hier in de klas. Dus beseffen dat degenen zogenaamde [? Scribd?] Notities zijn online, zeker de glijbanen en source code die we gebruiken in de klas. Wij maken volledige tekst transcripties ook verkrijgbaar. Dus als je vaag herinneren wat termijn en wil het een beetje opzoeken gemakkelijker, beseffen dat alle daarvan is online doorzoekbaar. Evenals walkthroughs ook. Inderdaad, vandaag beginnen we om naar te kijken een lager niveau programmeertaal, binnenkort ons bekend als C, en het is heel gemakkelijk om een ​​soort van verloren na een paar momenten tijd, en dan een soort van verwondering hoe kregen we eigenlijk wat meer complex voorbeeld van de eenvoudigste. En dus realiseren we zullen cherry pick tijdens de les een aantal van de representatieve voorbeelden, maar beseffen dat er zo veel meer is ook online beschikbaar, zodat u kunt werken door het op uw eigen tempo, maar je bent het meest comfortabel. Maar we vertrokken af ​​met programma's die alleen deze waren. Dus ik klik op de groene vlag, en wat doet dit programma doen? Zegt, hello, wereld. Het maakt de kat zeggen hallo in zijn kleine wereld op de bovenste linkerkant van de gebruikersinterface Scratch's. Maar we begonnen in te voeren sommige terminologie vorige week. En ja, dit soort dingen we wat genoemd? Wat zou de algemene term voor dit zijn? Ja. Een methode of een verklaring. Tuurlijk, het is een actie. Doe dit. En toch waren er andere vormen te krabben, Naast deze zogenaamde statement, waren ze ook dit soort dingen, dat we wat genoemd? Ja. Dus een lus. En in dit geval, deze zaak repeats, uiteraard, 10 keer. Er is een eeuwig blok. Er zijn een paar van anderen. En vandaag gaan we om te zien hoe vertaalt dit naar een meer moderne wereld, als je wil, ook al is het zal verschijnen op het eerste gezicht veel meer mysterieuze zijn. Maar die waren inderdaad loops. En dan hebben we dingen als Dit die deze vorm had, en in wezen vragen. En we aangeduid om deze als wat? PUBLIEK: Boolean expressie. DAVID J. MALAN: Ja. Boolean expressie. Iets dat is waar of onwaar, ja of nee, één of nul, maar je wilt de wereld te bekijken. Maar we noemden die Boole uitdrukkingen, en wij hen plug in omstandigheden, of filialen. En in de wereld van Scratch, alles netjes vergrendelingen in termen van zijn vorm, als het maakt logisch daartoe, maar je hoeft niet te stoppen bij alleen doet een ding voorwaardelijk, kunt u een spreekwoordelijke hebben vork in de weg en doe dit of dat, als de voorwaarde waar is of niet. En dan, zoals u zult zien, als je nog niet hebt gedaan, U kunt nest zelfs deze blokken. Dus Scratch groeit om de vormen te vullen dat je zou willen voegen in het, dus je kunt eigenlijk uitdrukken meest elke logica die je zou willen doen. Nu een paar woorden van de aankondiging voor zowel hier en New Haven. Dus snijden begint vandaag. De URL hiervoor is op de cursus website, voor degenen die niet bekend. Secties zal een gelegenheid om samen te komen in een veel meer intieme omgeving dan [? Sanders?] Maakt, met 10 om 20 klasgenoten met een lesgeven fellow bij verschillende tracks, en verschillend tempo, als je daarvoor kiest. Inderdaad de cursus aanbiedingen secties voor degenen die minder comfortabel, meer comfortabel, en ergens tussenin, en de rol Bealngrijkste is er is geen formele definitie, maar als je minder comfortabel, je soort van weet. Je bent een beetje onverschrokken over de idee van het stappen voet, misschien, terug in de klas, of het tonen tot een tussendoor gedeelte. Als u de programmering geweest aangezien u waren zes jaar oud, comfortabeler, misschien voor jou. En als het is een soort van een toss-up, dat is precies wat de tussenin is bedoeld om te worden. Nu, in de tussentijd, voor een klasse deze omvang, het kost ons heel wat tijd om sectie iedereen, dus hebben we de zogenaamde, super secties, komen deze weekeinde en begin volgende week, dus neem een ​​kijkje op de website van de cursus voor degenen die zijn natuurlijk breed, en ook gefilmd voor degenen die ze niet kunnen maken. En secties zelf zullen beginnen in week drie CS50 nul index. Probleem set 0 is al op de website van de cursus. En beseffen dat je hebt negen dagen te laat dit semester. Dus dit is een upgrade van de laatste jaar, toen we vijf dagen te laat. Dus als je je afvraagt, We hebben negen probleem sets. Je hebt late negen dagen, die elk je kunt alleen doorbrengen één per week. Dat al maakt effectief het probleem stelt wijten vrijdag maar het doel is om een ​​beetje zetten beetje psychologische druk op u om te proberen te krijgen dingen op donderdag want zoals u zult snel ontdekken, voor beter of slechter, de meeste alles in de software-wereld eindigt nemen veel langer dan u verwacht. Dus beschouwen het als een soort van de kans om te helpen jezelf te richten donderdag, maar neem comfort in dat, ja, alles is het gevolg van vrijdag. En als je ze in te dienen over Donderdag, dat is geweldig. Er is geen bonus punten of extra krediet voor het voldoen aan deze termijn. Het is bedoeld om slechts een kruk zijn. En kantooruren, zowel hier en in New Haven, in persoon, als je wilt een ontmoeting met een van onze cursussen onderwijs fellows en CA's voor hulp. Prima. Dus nu, laten we deze meer echt. En voor een moment dat het gaat om te beginnen om een ​​beetje meer mysterieuze, maar zeer snel op vrijdag en Volgende week zullen we in staat om zo veel meer te doen dan we konden tot nu toe in de Scratch. Dus we code laatste geïntroduceerd week, zij het picturale. Het was puzzelstukjes. En we geformaliseerd dat het iets genaamd broncode, maar zou niet eruit? Nou, het leek een beetje iets zoals dit. En in feite alleen maar om soort plagen waar we kunnen gaan met dit. Ik ga om te gaan en het openen van een raam hier, en ik ga gewoon Nieuw bestand kiezen. En ik ga dit bestand op te slaan zo iets als hallo dot c. Meer op dat de keuze van woorden in slechts een moment. En dit is hoe iemand zou kunnen gaan over het schrijven van een programma. Zijn standaard I / O punt h, int main leegte, en open accolade, dicht accolade, printf hello komma wereld, backslash n, puntkomma, Opslaan gedaan. OK. Ik heb geschreven mijn eerste programma, maar het gaat ongelooflijk underwhelmed te zijn want als ik eigenlijk Dit programma, uiteraard, door eerst schriftelijk kenbaar te maken hello, en dan dot slash hallo, en we zullen door dit in veel meer detail in een moment, dat is alles wat het doet. Geen pop geopend alle vensters. Het doet niets bijzonder luxe. Alles wat het doet is wat ik vertelde het aan doen, maar hoe krijgen we dat? En hoe kunnen we bouwen op dat? Nou, laten we introduceren een paar verschillende concepten here. Zo een, we staan ​​op het punt om te beginnen een programma genaamd compiler. Een compiler bestaat voor Mac OS, Windows, Linux elk aantal gebruikers, en we zullen je snel kennismaken met de omgeving die we zullen gebruiken, maar een compiler is gewoon een algemene term voor een stukje software dat neemt broncode en produceert objectcode van. Met andere woorden, als je hebben als input uw bron code, iets wat ik net getypt, het uiteindelijk produceert object code. En object code is eigenlijk gewoon een mooie manier om te zeggen dat uitgangen nul en één's. Met andere woorden, source code, ook al is het ga een beetje mysterieuze kijken, en een beetje minder vriendelijk Scratch dan op het eerste gezicht, het is tenminste iets dat wij mensen kunnen begrijpen. Het ziet er soort en klinkt als Engels ook al is het zeer beknopt. Overwegende dat de programmering in de nul en je, als onze voorgangers moest doen, enkele jaren geleden, was niet een bijzonder leuke uitdaging. En toch, dit is wat de computer nog begrijpt. Dus compiler krijgt ons uit broncode code bezwaar. Het is als het openen van een bestand met de compiler, en als je het op te slaan, je die nullen en enen. Dus we zullen zien hoe dat te doen dat in slechts een moment. Maar laten we nu proberen om een ​​te bieden Brug tussen vorige week en dit, zodat zelfs als we opgehangen op zaken als accolades, en puntkomma's en haakjes, en al deze intellectueel interessant aspecten van de programmering, die zeer begrijpelijkerwijs struikelen mensen vroeg op, beseffen dat alle ideeën vandaag, zijn dezelfde als laatste. Dus laatste, dit voorbeeld zagen we hier, Hello World programma. Nou, vanaf vandaag, als we willen de uitvoering van die hetzelfde programma, het gaat om een ​​kijkje iets als dit. En we zullen uitleggen wat het duurde niet lang int, en de belangrijkste, en leegte, en dat alles is, maar in ieder geval zie ik hier al het bekende Hello World. Ondertussen, dingen zoals functie, zeg hallo, is heel eenvoudig gaat om een ​​te zijn heel eenvoudige uitspraak als deze. Printf hello wereld, met enkele citeert, met een backslash, met een puntkomma, maar meer daarover te komen. Loops, ondertussen, is een lus die, Natuurlijk, zegt hallo wereld voor altijd, en dit zal een kijken beetje vreemder dan in de vorige, maar als ik iets te zeggen als, terwijl waar, ik Vervolgens kunt uitprinten Hallo wereld opnieuw en opnieuw en opnieuw en opnieuw. En dan als je kan soort van start hier afleiden dit verdrag van het gebruik van accolades is een soort van, zoals het omarmen van de ingesprongen regel code daar. De printf regel code net als de gele puzzelstukje boven. Dus we gaan niet altijd zeggen, we gaan om te zeggen, terwijl ware, maar we zullen zien waarom dat in slechts een beetje. Ondertussen, als we een lus als deze, waar u iets een eindige herhalen aantal keren, deze ook het gaan om een ​​beetje te nemen wennen aan, maar het gaat te zeggen int i krijgt nul, ik minder dan 10, i ++, en vervolgens weer printf. Maar er gaat patronen. En voor degenen onder u bekend met AP Informatica, of Java, of elk aantal andere talen, Bijna al deze constructen tot nu toe moet vooral bekend voor. Zo variabel. Dus hier is een eenvoudige Scratch fragment dat stelt een variabele genaamd teller op nul, en dan altijd zegt dat de teller, en dan verandert de teller met één. Zo begint met nul, en één, twee, drie. Nou, hoe kunnen we introduceren dat in Deze nieuwe taal een beetje op dezelfde manier? Int teller gelijk nul, terwijl waar die is dat hetzelfde idee van voor om iets te doen voor altijd, en ik ga gewoon printf. En nu is het een beetje vreemd, i procent, maar daarover te komen, maar deze ideeën zijn exact hetzelfde. We nu moeten houden aan de syntax dat de computer gaat eisen van ons. Boolean uitdrukking, iets als sx minder dan y of x lager dan y, en y kleiner dan z. Het gaat om een ​​beetje iets te kijken als dit, met haakjes net zoals in de wiskunde voor een goede maatregel om gewoon ervoor te zorgen dat de volgorde van de operaties is zoals we van plan zijn. En nu, omstandigheden. Als x minder is dan y, zeg x minder dan y, anders als x groter is dan y, zeggen x is groter dan y, anders logisch moet gelijk zijn aan x y zijn. Dus je zou kunnen implementeren iets als dit in Scratch, of je zou implementeren in deze syntax. En nogmaals, de accolades zijn soort geeft ons dezelfde vorm als de puzzel stukken, maar de syntax, nu is misschien beginnen sommige patronen te volgen. Ja, wat heeft dit ons hier? Dus we zijn toen naar onze programma. Laten we het eigenlijk, nu, iets mee te doen. Dus in dit eerste lijn zien we scherp omvatten, standaard I / O, punt h, en dan komen er rare hoek beugels daaronder. int main leegte, en dan printf hallo wereld. Dus gewoon een stap. Iemand die nog nooit eerder heeft geprogrammeerd, tenminste verklaren één van deze lijnen. Met behulp misschien sommige het jargon van vorige week. Wat is printf, bijvoorbeeld? Ja. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Het is een functie, of een verklaring, van de terminologie van vorige week. En het is een actie dat er iets doet. Nu deze functie, of deze verklaring, doet het lijkt een soort ingang te nemen? En in welke zin doet het lijken om input te nemen, en zo ja? Input, wat moet ik daarmee? Ja. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Dus Kras een paar puzzelstukjes waar u kunt het parametriseren. Je kon de herhaling vertellen blokkeren hoeveel keer te herhalen, zodat was een ingang van soorten, en net als Scratch had een kleine witte placeholder voor het nummer dat u zou intypen, dat doen we in dit tekst wereld haakjes om ons dat cirkelvorm waarin we onze inbreng plug. Immers, tientallen jaren geleden wanneer deze taal, genaamd C, uitgevonden niemand verwacht dat het een van ons, die enkele jaren later, zouden we wil een functie die hallo zegt. Rechts? Het zou mooi zijn als er een puzzelstukje, of een sleutel woorden, dat heet hello, dat letterlijk zegt hallo. Maar we hebben dat niet nodig. We kunnen iets veel lager zijn niveau, zoals een generieke afdruk commando, die ingang neemt, en prenten wat we willen. Zo merkt nu het patroon die begint te ontstaan. Open paren, dicht paren is blijkbaar het omarmen van de input, en dan zie ik dubbel citaten aan beide uiteinden. Er is nog steeds raar backslash n, maar hopelijk nu heb je kan beginnen om in ieder geval dat visualiseren printf neemt in een bepaalde vorm van de input. Niet zo gebruiksvriendelijk als Krabben, maar het is gewoon zoals hebben gestoken in sommige waarde daar. Oké, laten we nu eigenlijk iets mee te doen. Dus sommige van u misschien kent van hebben gewinkeld de klas voor, praatte met vrienden, dat jarenlang we iets gebruikt geroepen de CS50 apparaat. Dit is een term die een technologie zogenaamde virtuele machine, die is een stukje software dat je voorgangers zou off downloaden website van de cursus is gratis. Zij zouden ook het downloaden van een gratis stuk van software genaamd een hypervisor, iets geroepen zoals VMware, of VirtualBox, of een aantal andere instrumenten, en op hun Mac of pc of welke computer ze vorig jaar hadden en in de afgelopen jaren, zij zou verdubbelen op een pictogram om deze software te draaien genaamd de hypervisor. En dan binnenin dat programma zij zouden CS50 het apparaat te openen. En het effect was dat of een voorloper van jou werd met Mac OS of Windows, hij of zij vervolgens Vervolgens had een nieuw venster op de scherm loopt CS50's omgeving. Dus een virtuele machine kunt u een run besturingssysteem binnenkant van een ander, en dat is precies wat we deden. Gedurende het grootste deel van de koers die we Gebruik een besturingssysteem genaamd Linux specifiek Ubuntu Linux, en dit is een zeer leuke manier in de afgelopen jaren van ervoor te zorgen dat iedereen in de loop had net dezelfde omgeving. En je kunt elke vorm van gebruik computer die je eigenlijk wilt. Onder de nadelen, hoewel, waren was het als twee gigabyte om dit ding te downloaden. Het heeft niet per se te werken super goed op mensen van wie de computers die misschien slechts had een optreden of zo van RAM, of niet te veel gigahertz van CPU-snelheid, en dus dit jaar, voor de deze en andere redenen, hebben we al de overgang deze omgeving. De zogenaamde CS50 IDE, wat op basis van open source software, en een ondersteund platform dat een bedrijf genaamd Cloud9 steunt in Europa, dat laat ons in wezen hebben dat exact dezelfde omgeving als in afgelopen jaren, maar in de zogenaamde cloud. Dus wat is de cloud? U hebt waarschijnlijk geklikt het pictogram op je Mac of pc. Wat is de cloud? Ja? Een beetje luider. Ja. Het is gewoon een stelletje computers elders dat de gegevens op te slaan en uit te voeren software en dergelijke. Dus het is eigenlijk gewoon om het woord de jure beschrijven [? verhuurd?] computers die elders wonen. Dat je, jezelf, niet noodzakelijkerwijs bezit. Dus als uw gegevens, of uw programma's, zijn in de cloud, het is gewoon betekent dat het over iemand anders computers elders, en niet hoogstwaarschijnlijk op fysieke laptop of desktop. En dus dat is wat CS50 IDE is nu. Voortaan ga je naar een bepaalde URL die je zal introduceren om, in probleem set 1, later dit week, dat vervolgens, na inloggen, geef je deze omgeving. En net als Kras had een paar verschillende panels betrokken, zo heeft CS50's IDE hebben precies dat. Op de bovenste linkerkant hier, je bent gaan naar een vertrouwde bestandsbrowser zien. Dus een van de bestanden die u zet in deze omgeving zijn gewoon gaan om daar te worden vermeld. Bestanden en mappen. Op de top hier, je gaat naar een plek te zien waar u eigenlijk schrijf uw code. Aanvankelijk in C, later in de term in PHP en JavaScript, en, misschien voor definitieve projecten, Ruby of Java of Python of een aantal talen gesteund omgeving. Het is helemaal niet gebonden specifiek CS50. En vervolgens in de benedenhoek hier vooral voor degenen die meer comfort, je iets hebt riep een terminal venster. En deze terminal venster laat u elke opdracht uit te voeren die u wil in deze cloud-omgeving. Het staat u te installeren extra software die u wilt omdat je zogenaamd wortel, of beheerdersrechten. Met andere woorden, ook al uiteindelijk wordt gehost in de cloud, en ook al hebben we vereenvoudigde zij enigszins standaard, letterlijk introduceren, dankzij Dan Armendariz, en Dino, en Dan Bradley op CS50's team over de afgelopen vele maanden, een minder comfortabel modus die een groot deel van de huiden aanvankelijk verwarrende afleiding. Alles wat er bestaat om vertegenwoordigen een typisch computersysteem dat je zou kunnen gebruiken in de echte wereld. Dus wat betekent dit alles, en wat kunnen we eigenlijk doen? Laten we eigenlijk een kijkje nemen in een programma. Dus ik ga het openstellen van de werkelijke omgeving hier, dat is gewoon onze Chrome browser, die Firefox kan zijn, kon Internet Explorer, of een andere browser ook. Het is hier volledig gescreend voor het moment. En ik wil eigenlijk plagen behalve wat dit programma was. Dus laten we eens een kijkje nemen, door in te zoomen op top, in wat ik deed, en hoe ik hier kwam. Dus hier is de exacte Dezelfde regels code. Dus dit is de verklaring, zoals u eerder vermeld. De functie die hallo zegt. De accolades, op lijn vier en zes lijn, vermoedelijk soort envelop die lijn te associëren de essentie van mijn programma. Dus inderdaad, dit zoekwoord belangrijkste, dat is daar op lijn drie, je kunt bedenken dat als het equivalent van dat als groene vlag geklikt, blokkeren Scratch. Dus dat is alles wat we hier hebben, is wanneer groene vlag geklikt, print, of zeggen, Hallo Wereld. Maar laten we eens een gok, nu, op wat deze eerste, meer mysterieuze lijn is. Scherpe omvatten, geopend schuine beugel standaard I / O punt h, sluiten hoekige beugel. Wat is dat misschien doen, vooral als je hebt geprogrammeerd eerder in een andere taal. Ja? PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Precies. Dus dit geeft u toegang tot een library, zogezegd functies. En een bibliotheek van functies is functies dat iemand anders schreef, ofwel recent of lang geleden, zodat u hoeven niet het wiel opnieuw uit te vinden. Zo doen we niet moet weten, in 2015, hoe code die puts schrijven een personage op mijn scherm. Iemand anders heeft bedacht dat uit met de printf functie zodat ik kan soort abstracte vanaf dat of layer bovenop zijn of haar code, en nu gewoon vanzelfsprekend dat elk programma dat ik schrijf kan iets om het scherm te drukken. Dus deze eerste regel er in één stap inclusief de zogenaamde header-bestand voor de standaard bibliotheek. Zo zie, de taal die we nu mee bezig had een standaard bibliotheek met veel functies. Printf is een van hen, en die eerste regel van de code betekent geef me de toegang tot die functies, zodat ik hoeft niet het wiel opnieuw uit te vinden. Laten we nu naar het onderste venster en doe precies wat ik deed voorheen. Een moment geleden, toen ik suizen door de code, uit te typen voor de eerste keer, Ik heel snel getypt, maken hallo. Wat was dat allemaal over zou u raden? Wat deed ik? Ja? Laat maar. Het is ok. Ja. Publiek: compileren het. DAVID J. MALAN: Ja. Het was gewoon de compilatie. Rechts? Zelfs als dit volledig onbekend aan u, het is vrij Engels als. Het is zeker niet nullen en degenen, dus ik nog steeds nodig om het te lopen door dat de zogenaamde programma, een compiler, dat gaat om het als invoer en uitvoer produceren. En althans voorlopig, in Deze Linux-omgeving, maar dit is niet eerste vereiste, dit is precies waar we zullen beginnen, je over het algemeen communiceren met computer systemen zoals deze door een zogenaamde command line. Dus met een knipperende prompt en je toetsenbord, en niet zozeer de muis, en niet zo veel ramen en pictogrammen en menu's, plaats alles is tekstueel. En hoewel dit voelt, aanvankelijk gezicht, misschien, als een stap achteruit, het is eigenlijk een veel meer krachtige en expressieve manier het besturen van een computer vooral als je, zelf, steeds meer comfortabele uit minder. Het zal u toelaten om veel doen meer dingen dan alleen wat Microsoft of Apple kun je doen met hun grafische besturingssysteem. Dus toen ik druk op Enter, nu, niets gebeurt deze keer want blijkbaar de programma hello is up-to-date. En wat was de opdracht Ik rende daarna? Dot slash hallo en hello wereld. Laten we nu eens een stap terug voor slechts een moment. Het blijkt dat te maken hello is slechts een vereenvoudigde manier van het samenstellen van een programma. Laten we gewoon introduceren een stuk van jargon, maar dan verder weg van het, omdat het niet zo interessant voor doeleinden van vandaag. De compiler we gaan aan de slag met heet Clang, de C taal. En dit is een programma dat alleen gerund zoals wij deden op de opdrachtregel daar. En dus als ik wil een programma samen te stellen dat ik hebben in een bestand genaamd hallo dot schriftelijke c, ik letterlijk typ clang hello c voeren. Het grappige is, om historische redenen, als ik niet geef de Naam van het programma dat ik wil output, als ik niet geef een bestandsnaam voor de nullen en enen, een heel raar conventie aangenomen jaar geleden waar het voelde een soort van een goed antwoord op het moment, goed laten we gewoon willekeurig bellen eerste programma dat we een punt te stellen uit. Een komt eerst in het alfabet. Uit, het is de output. Dus we zullen het programma noemen standaard een punt uit. En dat is prima, want als ik wil start het programma in deze tekst gebaseerde milieu, ik typ dot slash een punt uit te voeren. En het zou precies als voorheen lopen. Dus laten we zien dat heel snel. Dus als ik ga terug naar mijn broncode in CS50 IDE, en ik in plaats daarvan doen, clang hello kinderbed c in te voeren, lijkt mededeling niets te gebeuren, maar bijna altijd in Deze Linux-omgeving, wanneer niets slecht lijkt te gebeuren, dat betekent iets goeds eigenlijk gebeurd. Als je niet een fout te zien boodschap, al is het waarschijnlijk ook. En inderdaad, als ik nu doen dot slash een dot uit te voeren, ik heb mijn hetzelfde programma uit te voeren. Ik heb nog steeds het hallo-programma uit eerdere omdat inderdaad, het ga zo veel mooier gewoon typt maken in plaats van herinneren deze bezweringen van commando's, maar laten we eens kijken hoe we kunnen verbeteren op deze, toch. Dit is dus het commando om de code te compileren. Dit is de opdracht uit te voeren de gecompileerde code daarna. Hoe kan ik een bestand opgeven? Nou laten we gewoon introduceren nog een stuk van jargon. Als je in deze tekst gebaseerde omgeving, je gaat te willen specificeren dingen geroepen command line argumenten. Dat is gewoon een mooie manier om te zeggen, met andere woorden op de prompt dat knijpen het gedrag van welke programma je draait. Dus met name het programma dat ik ben hardlopen, door het intikken van de naam clang, is het programma genaamd Clang. Dus dit is of de oude school equivalent van dubbelklikken Microsoft Word of pictogram van een aantal programma's. Ik ben in plaats daarvan alleen het typen van zijn naam, maar in deze versie van de opdracht, Ik heb dan dash o ruimte hallo hallo ruimte dot c. Dus zelfs als je nog nooit hebt gespeeld in deze wereld voor, gewoon een gok nemen wat doet dash o hallo doen? Of wat doet het vertellen clang te doen? Ja. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Het zet alleen uitvoer van het bestand te hallo plaats van de gekker een punt uit. En, inderdaad, laten we proberen dit. Dus als ik nu doe, eerst laten we dit doen, r m hallo. Dat is te verwijderen. En het gaat om te verwijderen zeggen regelmatig file hello, die is onnodig geheimzinnig, maar het is gewoon middelen wilt u het bestand te verwijderen, en ik typ y voor ja. En merk, als je een blik op de top vertrokken, deed het verdwijnen van daarboven. Laat me nu doen clang dashboard o, en Ik ga om te gaan en te doen hallo, in hoofdletters, hello dot c. Nu, als ik dat doe dot slash hallo, wat zou je verwachten? Misschien is hoofdlettergevoelig. Misschien is het niet. Laten we kijken. Bestand of map bestaat niet. En we kunnen soort bedriegen door alleen te kijken naar linksboven. Wat heb ik natuurlijk sla het programma? Alle caps hallo. Dus inderdaad, dat is gaan om een ​​verschil te maken. Dus nu Hallo wereld is terug. Nu is dit allemaal prima en goed, en allemaal heel mind-numbing, naar soort get verzanden in deze details, maar ze begrijpen is goed. Het typen van deze in toenemende mate lange bezweringen is niet van plan om in het bijzonder te zijn leuk, dus mensen in de wereld uitvinder van een ander programma, enkele jaren geleden, de zogenaamde maken, dat eenvoudigweg kun je make typt, de naam van het programma u wilt maken, en maak is slim in dat het eruit zal zien in de huidige map, aka directory, en als je een bestand riep hello dot c, dat is het bestand zal het compileren voor u in een programma genaamd hallo. Dus het is een veel eenvoudigere manier het doen van de meer cryptische opdrachten dat we eerder deden. En we hebben pre-geconfigureerd CS50 IDE om te weten dat het dashboard o en een aantal zou moeten doen andere vlaggen of command line argumenten, dat we zullen zien het duurde niet lang. Maar laten we nu eigenlijk doen iets interessanter. Net typen van hello wereld alle de tijd is niet zo overtuigend. Dus laat me gaan en verandering dit programma en zeggen hallo David. Nu ga ik hier beneden te gaan. Ik ga om te gaan en te doen maken hallo. En nu weer je ziet maken is de langere toont u serie commando dat het doen omdat we vooraf geconfigureerd het op die manier, maar we hoeft geen zorgen te maken voor nu wat het is anders dan het is te doen samenstellen dot slash hello, hello wereld. Wat is er mis? Ja. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Dus, Noobie vergissing. Ik merk dit is super subtiele, maar het sterretje hier, in het tabblad, gewoon betekent dat je het niet gered, en browsers en andere programma Dit doen soms. Dus controle s of command s moet het redden. Laat me nu ga je gang en re-start het programma. Gecompileerd. Juist, dus het is een multi-step proces. Geen daarvan is bijzonder complex, maar elk moment wijzigen we het bestand, we moeten de daaruit voortvloeiende wijziging nullen en enen, en dot slash hallo. Wow. Dus dit is erg underwhelming dat we gewoon uitgeprint dit. Laten we de dingen een beetje meer dynamiek, nu. Nou, het blijkt, dat willen Kras, C ondersteunt variabelen. En het blijkt dat als je wilt een variabele die winkels hebben, geen nummer zoals wij typisch deed met Scratch, maar als een woord of een uitdrukking, of een naam, je kan een variabele opgeven te zijn van het type string. Dus zullen we meer van zien deze in slechts een moment, maar het blijkt dat de C, en veel talen zoals het, zeer specifieke typen variabelen. Het is niet alleen leuk algebra, waar je een x, een y en z krijgt en die zijn gewoon altijd getallen, in een programmeertaal U kunt nummers opslaan, kunt u afzonderlijke tekens op te slaan, kon je hele woorden op te slaan, je kon opslaan hele afbeeldingen hele geluidsbestanden, en dergelijke. Dus we moeten wat opgeven het type onze variabele. En volgens afspraak ga ik bel mijn variabele s gewoon omdat het beknopt, en S staat voor string. En dan ga ik op te slaan binnenkant van deze variabele, net als met Scratch wanneer ik de set blok, Ik ga het gebruiken opdracht operator in C, die mooi genoeg is het gelijk ondertekenen, maar het isgelijkteken doet dit. Het beweegt iets van het recht in de linkerkant van de uitdrukking. Dus wat ik heb gedaan, om duidelijk te zijn lijn vijf, is ik heb een variabele gedeclareerd. Ik heb de computer verteld, geef me geheugen voor een variabele, noem het is, en weet op voorhand dat ik ga te zetten een tekenreeks daarin. En een string is slechts een opeenvolging van karakters. Het is een woord of een zin of paragraaf, maar het is een reeks tekens. Het is geen aantallen. Wat reeks ben ik gaan worden het in die variabele? Nou, blijkbaar citeer unquote, "Hannah". Merk nu het patroon dat is in opkomst. Er is een linkerhand expressie. Er is een rechterhand meningsuiting, gescheiden door het isgelijkteken. En gewoon een gok, als onbekende niettemin wat de puntkomma doet. Hoe is het vermoedelijk voor ons doet? Ja? PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Het is gewoon het beëindigen van de lijn. Rechts? De computers willen botweg zijn vertelde, letterlijk, wat te doen. Net als de pindakaas en gelei sandwich bijvoorbeeld als je niet opgeeft precies wat je van plan bent, het zou kunnen worden overgelaten aan het oordeel of fouten. De puntkomma betekent, dat is het voor deze opdracht. Het wordt super nauwkeurig, en het is een zeer eenvoudig ding af te vertrekken. Dus nu dit programma lijkt niet te worden gedragen elke anders totdat ik maken het meer dynamiek. Dus in plaats van harde kon mijn eigen te noemen, laat ik een placeholder waarde. En het blijkt dat, en ik weet dat dit van de documentatie te hebben gelezen, en gebruikt de functie jaren, dat printf is ontworpen dynamisch te zijn. Je hoeft niet te weten op voorhand welke woorden je wilt in te zetten. U kunt in plaats daarvan een placeholder, zoals procent s, die gaat het vertellen computer, zet hier een string. Die reeks willen we daar te zetten? Testament blijkt dat tussen deze haakjes, die herinneren, afbakenen de ingang naar een functie, als je komma's gescheiden lijst van dingen hier, we eigenlijk in meerdere passeren input voor een functie. Dus gewoon graag wat Scratch blokken, zou je niet hebben gespeeld met hen voor uw projecten nog niet of helemaal niet, sommige Scratch blokken hebben twee ingangen. Twee witte dozen je kunt Typ getallen of woorden in. Dus heeft C hebben functies zoals printf die twee ingangen kan nemen. En nogmaals, dit komma is ze te scheiden. Dus in het Engels, weer zelfs als je nog nooit hebt geprogrammeerd, door die logica printf is een functie, neemt twee ingangen, waarvan is een placeholder, wat zou je hopen printf gaat doen met deze input? Het gaat om hallo te zeggen Hannah, hopelijk. Dus om deze die we nodig hebben om het te redden. Ik ga om uit te zoomen. Ik ga hier terug te gaan en zeggen: maak gedag te voeren. Oh. Er is iets mis, en eigenlijk dit is heel overweldigend. Ik heb zes lijnen van de code en net als 12 lijnen van fouten. Dus, kijk uit naar deze. Dus wat is hier aan de hand? Dus de beste vuistregel hier, vooral wanneer je begint, laat je niet afleiden door het spul op de bodem. In feite heb ik heel bewust gewoon gebladerd up omdat vaak een computer niet zo helder van een apparaat. Het zal in de war raken. Als het ziet een ding dat het niet begrijpt, Het andere zou kunnen verwarren regels code als onjuist, ook al zijn ze prima. Zodat u altijd wilt werken boven naar beneden door de fouten. En toegegeven dit is super mysterieuze op dit moment. Fout, het gebruik van zwartwerk id string. Heb ik bedoel standaard? Nee, ik bedoelde string. En het is wijzend op, misschien is het een typo. Een beetje zoals, spellingcontrole in een zeer geeky manier, maar de reden hier, en je zult weten alleen door de praktijk is dat blijkt dat touwtje bestaat niet in C. In feite, C is een bijzonder oude taal, en het is zeer laag niveau, en het doet niet veel functies dat je zou kunnen zijn gegroeid met als u, in feite, geprogrammeerd in Java, zoals sommigen van u, maar je kunt het leren van nieuwe dingen. En inderdaad, we hebben deze CS50 gedaan, ook al tegen het einde van het semester, al deze zijwieltjes zullen zijn genomen uit, wat we doen in deze eerste paar weken aanvankelijk we hebben ook je oa CS50 dot h. Dat is een header bestand. Meer daarover in de toekomst. Het is een bestand dat functies bevat dat we hebben geschreven voor u. En onder die functies is functies voor het verkrijgen van invoer van de gebruiker, zoals koorden, en getallen en reële getallen, en nog veel meer. Maar het heeft ook een aantal sneltoetsen. Het definieert een Boolean een gegevenstype. C heeft geen waar of onwaar. Maar we kunnen geven het begrip true of false door middel van deze bibliotheek. En het is ook niet een string hebben gebouwd in totdat we onder deze lijn. Dus deze regel code vertelt de compiler, hey, Clang, kijk in dit bestand op geheel stelletje code die CS50 heeft geschreven, zodat iedereen die dit bestand kunnen voor lief nemen de functies die ze hebben toegevoegd. Dus nu laat me doorgaan en duidelijk op het scherm, en als nieuwsgierig Ik zeg alleen controle l elke keer om het scherm te wissen, of je kunt duidelijk typen. Ik ga nu verder te gaan en soort maken hallo, en alles is goed. Nog steeds een mysterieuze uitgang, maar het is niet een verkeerde boodschap. Nu als ik dat doe dot slash hallo, en als een terzijde, dot slash is onbekend voor de meeste. Het betekent alleen, dot middelen de huidige directory. Dus als je ooit hebt gebruikt DOS of Linux of Unix je zou iets hebben gedaan zoals cd dot dot, waar de dot dot betekent achteruit gaan in tijd, of achteruit gaan, of hoger in uw telefoonboek. Dot betekent gewoon kijken in de huidige directory. Ik wil hallo, dat is hier. En inderdaad, nu zegt hallo Hannah. En als ik het weer veranderen Maria, opnieuw te compileren het zou hello, dot slash maken hallo, het programma blijft veranderen. Maar dit is nog steeds een behoorlijk stom programma. Als ik wil dit programma verzenden, of geef het aan een vriend, of geef het aan Maria of Hannah wat dat betreft, is dat prima. Ik kan het voor hen beiden, maar het zal nooit dynamisch te zijn. Ze kunnen het niet veranderen als het eenmaal is gecompileerd beneden in de nullen en enen. Dus wat we deden iets slimmer? Stel dat, in plaats van hard-codering in het programma de naam van deze persoon, wat als we gewoon de string op de vraag? Dus met andere woorden, laat mij dit te doen. Ik ga dit programma opnieuw te compileren. En laat me in te zoomen op de bodem nu. Maak hello dot slash hallo. Nu is er niets gebeurt. Kunnen we snel een vrijwilliger om iets te laten gebeuren? Kom op maximaal. Hoe heet je? PANCHO: Pancho. DAVID J. MALAN: Pacho? Kom op maximaal. Zodra je hier op te staan, dit is gaat erg underwhelming worden, maar het is interessanter dan me te typen. Als je vooruit wilt gaan en typ naam, heb ik dit programma voor jou. Typ gewoon je naam. Enter. Geweldig. Oké, heel erg bedankt. PANCHO: Hartelijk dank. DAVID J. MALAN: OK. [Applaus] Dat was erg aardig. Alsjeblieft. Wat hebben we gedaan? Dus uiteindelijk hebben we, op zijn minst, maakte dit programma dynamisch. Nu is het nog steeds zeker door het ontwerp underwhelming, maar we eindelijk de mogelijkheid nu om code te schrijven op voorhand, veel zoals de auteurs van printf, en vervolgens dynamisch passen zich op basis van de input wij overhandigd, hetzij door de programmeur, of door de mens die eigenlijk interactie met het programma. Dus laten we nu eigenlijk proberen een paar andere constructies doen en kijken of we niet van de programma's kan maken zich meer verfijnd. Dus laten we verder gaan en in plaats van het schrijven van dit één van de grond af, Ik ga naar vandaag te gaan broncode, en dit alles is beschikbaar op de cursus website, en u kunt slepen en neerzetten in uw eigen omgeving komen vrijdag eenmaal probleem set 1 geeft u de instructies, of je kon doe het op de opdrachtregel als goed, maar meer te komen in p 1. Laten we eens kijken wat er in dit programma hier genoemd, adder dot c. Nu heb ik al commentaar , maar wat is er nieuw? Op het eerste gezicht, welke lijn van de code is absoluut nieuw? Waarschijnlijk niet fundamenteel onbekende nu. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja, dus int x gelijk krijgen n. We hebben nog nooit een van deze gezien eerder, maar is waarschijnlijk int het symbool voor wat voor soort variabele [? vanaf?] een integer. Zo int voor integer. Het is gewoon meer beknopt. x is gewoon willekeurig. x en y en z zijn nog redelijk voor nummers, maar over het algemeen zullen we woorden eens gebruiken onze programma's krijgen complexer. Get int natuurlijk net als get string waarschijnlijk gaat krijgen een int van de gebruiker, en dan gaan we hetzelfde doen met y. En blijkbaar, hoewel dit laatste regel, 24, ziet er meer complexe, het gaat om de som van dit te zeggen en dat is dat andere ding. En let procent i Waarschijnlijk geeft wat? Welke rol speelt procent ik blijkbaar dienen? Het is gewoon placeholders. Rechts? Procent s was voor strijkkwartet, procent i is voor integer. Er gaat procent f zijn voor floating point waarde, die is gewoon een nummer met een komma. Met andere woorden, een reëel getal. Dus laten we eigenlijk dit compileren programmeren echt snel en niet te maken adder. Whoops. Goede gelegenheid. Zo ziet hier, al die tijd mijn gebruiker naam voor deze account wordt jharvard. Ik ben in CS50 IDE, aka IDE50. En nu in het blauw hier, is een vermelding, maar uit de omgeving, van waar ik ben. En in feite, als ik te zoomen naar de top hier opmerken dat ik een IDE50 en ik zie dit woord, als je soort draai je hoofd naar de kant, werkruimte. In een notendop, het feit dat Ik zie tilde slash werkruimte betekent dat in deze tekst gebaseerde commando milieu, Ik ben in de tekst van Deze grafische hier map up. Dus toen ik dot slash adder, het zegt geen regel tot doel adder stop. Ik weet niet wat dat betekent, maar het is slecht voor een of andere reden. Bestand of map bestaat niet is nog duidelijker. Waar is het dan? Gebaseerd op waar ik klikte het bestand eerder openen. Waar kan het zijn? Het is waarschijnlijk in de bron een w, voor woensdag, en ik kan het zien, inderdaad, als ik open die up. Er is opteller punt c, maar van dit tekst gebaseerde omgeving, nogmaals, ik heb super expliciet te zijn. Als ik wil directories veranderen in bron een woensdag, ik moet typen, cd bron één ruimte Woensdag betreden en nu mijn snelle veranderingen geef me een visueel signaal dat Ik ben inderdaad elders in mijn omgeving, maar nu kan ik niet maken adder lijkt te werken, dot slash adder, geef me een integer. Een. Twee. De som van één en twee is drie. Maar als ik niet meewerken, laten we zien wat krijgt int doet. Geef me een integer. Nee. Probeer opnieuw. OK. Fijn. 50. 50. Prima. Dus het eindelijk meewerkt. En dat is een deel van de functionaliteit die deze functies kunnen hebben ingebouwd voor u. Dus binnen de implementatie van krijgen int, wat programmering construeren van vorige week is waarschijnlijk in daar dit gedrag van het opnieuw proberen te dwingen, opnieuw proberen, opnieuw proberen? Ja, er is waarschijnlijk een soort van lus. Het gaat om syntactisch kijken verschillend van blokken Scratch's, maar dat is inderdaad wat er in het bestand. En in een paar weken tijd we zullen eigenlijk kijken naar de CS50 bibliotheek wat er in zit, maar er is een lus imposante precies dat. Laten we spelen een beetje dom spel hier met dit bestand. Condition Zero dot c. We gaan gewoon naar het algemeen beginnen te tellen bij nul. En ik blijf verleden scrollen sommige van de spullen aan de bovenkant. In blauw hier, afgebakend met alle van deze sterren en de schuine strepen, degenen onder u die programmeert voor, wat is dat? Waarom houden we overslaan overheen? Wat? Publiek: Het is een reactie. DAVID J. MALAN: Ja. Het is gewoon een reactie. Dit is een reactie voor de mens te lezen, die in ons geval, vertelt wat de naam van het bestand is, wie het geschreven heeft, en wat het doet, zodat u niet hoeft te lezen via de code om te weten wat dit bestand is alles over. Het is gewoon een beschrijving, maar functioneel is irrelevant. En ik kan zelfs verwijderen uit mijn dossier en het heeft geen invloed. De sappige lijnen zijn deze eerste twee hier, nu. int main leegte is het equivalent van ons als groene vlag geklikt, dus we gaan om te vertrekken, dat zijn voor vandaag, en we zullen terugkomen, Uiteindelijk, wat int en generlei waarde zijn, maar nu, let op wat ik heb gedaan ook hier, kunt u ook, als u een in de lijn commentaar, als je Een gedachte die u wilt delen over een bepaalde regel code, conventie in C is om slash doen slash, en dan een paar beknopte woorden, niet een volledige zin, over het algemeen niet een paragraaf, dat alleen maar legt je uit, of je TF of andere lezers of collega's, wat uw code doet. Dus in plaats van te kijken Dit en afleiden van lijnen negen en 10, wat is dit te doen, in lijn acht Ik geef een reactie op vraagt ​​de gebruiker om een ​​integer, dan weet ik niet al te moeilijk denken over wat lijnen negen en 10 zijn. Ik weet alleen dat dat is wat gezamenlijk ze doen. Hoe? Nou, hier is de prompt. Hier is het krijgen van de Int. En gebaseerd op de eerdere gedrag, het lijkt alsof get int is slim genoeg om ervoor te zorgen dat de menselijke samen en geeft het een integer. Maar nu zien we dit. En dat doet denken aan Scratch. Ik beweren dat ik ben het analyseren van invoer van de gebruiker, maar enigszins onnauwkeurig. En dit blijkbaar C is hoe we geven van een of ander, een tak, een vork in de weg, maar ik zeggen enigszins onnauwkeurig. Wat is de bug in dit programma? Over verder terug? Ja. PUBLIEK: [onverstaanbaar] nul. DAVID J. MALAN: Ja. Dus als ik typ in nul, laten we eens kijken precies dat geval, of in een hoek geval, als je wil. Dus als ik typ in nul, die van de blokken gaat blijkbaar grijpen? De als of het anders? Het anders, en het gaat om te zeggen, u een negatief getal geplukt. En inderdaad, nul is niet de bedoeling positief of negatief, en dat zou foutief zijn. Dat zou een fout zijn. Dus hoe kunnen we dit oplossen? Iemand die nog nooit eerder heeft geprogrammeerd? Wil je-- PUBLIEK: [onverstaanbaar] DAVID J. MALAN: intrekken? PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Oh, heb je? Iemand die nog nooit eerder heeft geprogrammeerd. Willen proberen je hand op Dit, in het rode shirt? Kom op maximaal. Oh ja, kom op, als je het niet erg vindt. Dus nooit te hebben geprogrammeerd voor, wat is uw naam? Lauren: Lauren. DAVID J. MALAN: Lauren, oke. Dus dit oplossen bug voor ons. Je hebt niet gezien C, vermoedelijk, en waarschijnlijk geen andere taal. Dus bevestig dit programma voor ons. Leuk om je te ontmoeten. Geen druk. Lauren: Ja. DAVID J. MALAN: Maar nogmaals, als dit gok volgens plan verloopt, de afhaalmaaltijd hier zal , net opnieuw beginnen patronen en merken afleiden uit bestaande syntax hoe anders je zou uitdrukken jezelf, no pun intended, met het oog wat extra scenario vangen. Dus we zeggen anders als. printf, goed. En merk met CS50 IDE en frankly-- IDE staat voor Integrated Development Environment. Het is gewoon een mooie manier om te zeggen een programma dat u programma helpt. Het doet gebruiksvriendelijk dingen zoals wanneer u een haakje te typen, het geeft je automatisch de andere. Het vermoeden is dat je bent uiteindelijk gaat wilt typen dat, en het doet het ook met citaten. Dus ik wil lijn 23. 99% van de weg daar. Iemand willen in klokkenspel met een tip? Ik hoorde puntkomma van het publiek. Goed. Zodat deze voltooid. En nu, ik heb alleen een beetje consternatie met lijn 21. Hoe willen we dit uit te drukken? Welke vraag willen we te vragen, denk je? Dus eerder vroegen we de vraag, Als n groter is dan nul, dit doen. Anders, dat doen. Dus moeten we een keuze vraag om hier te vragen. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Goed. Als n gelijk is aan nul. Excellent. Dus laten we pauzeren hier. Dank je wel voor deze trotseren. Laat me je een beetje welverdiende stressbal, misschien is er. Dus we zijn er bijna. In feite, Lauren, als je niet geest, laat me een tweak hier alleen maar om consequent te zijn, zelfs met wat we zagen in Scratch, wat wil ik doen met lijnen 21 en 24 slechts wederom gebaseerd over hoe we deden dit in Scratch, misschien? Publiek: Move it up. DAVID J. MALAN: Ja, beweeg het op. Dus de andere aandoening, de derde, of vierde of vijfde, of definitieve vestiging, moeten inderdaad komen daarna, en dat is gewoon volgens afspraak gewoon omdat als je wil. Dus ik moet deze tweak te maken. En ik moet mijn zetten accolade hier terug. En nu, zal dit programma samen te stellen. We zijn zo dichtbij, maar er is een zeer, zeer subtiele bug. Laten we eens kijken wat er gebeurt. Ten eerste wil ik ga je gang en uit te zoomen. Ik ga om te gaan en typt maken Condition Zero. Oh, ik heb gelogen. Nu is de compiler is eigenlijk best slim. En ik begrijp niet echt het is foutmelding. De resultaten van een opdracht als voorwaarde zonder haakjes, blijkbaar slecht. Maar wat betekent dat? Weer goed, op zoek naar patronen in code die we eerder hebben gezien, Wat is lijn 17 eigenlijk doen, hoewel Lauren bedoeld lichtjes anders? Ja. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Dus onthoud het isgelijkteken, blijkbaar zoals we dat eerder hebt gebruikt, is niet gelijk. De toewijzing van rechts naar links. Dus lijn 17 momenteel is een voorwaarde, en het is het uitvoeren van code in de haakjes maar wanneer dat code wordt uitgevoerd, wat er gebeurt met de waarde van nul? Wat gebeurt er met de waarde van n? Steeds nul. Als n steeds nul, en opnieuw, zoals per vorige week, wij over het algemeen zeggen dat nul onwaar en één waar is, of ja, is een en geen nul. Dus waar en onwaar, een en 0. Als n als lijn 17 is geweest gezien de waarde 0, nul is waar? Nee. Per definitie, nul is vals. Dat is de conventie zijn we gaan vastklampen aan vooruit. Zo zal lijnen 18, 19 en 20 nu ooit van toepassing, logisch? Dat kunnen ze niet. Dus de vraag vroegen we maar niet helemaal nauwkeurig, en je zou dit niet weten, tenzij je hebt het gezien, de oplossing in C is wanneer u wilt uitdrukken gelijkheid, zeg je gelijken gelijk. Dus gelijk-teken werd reeds opgebruikt in opdracht van rechts naar links. Gelijk aan evenaart middelen gelijk. En als je echt wilt dat uw geest te buigen, in JavaScript en PHP, er is gelijk aan evenaart gelijken, die betekent iets heel anders, maar we zullen krijgen dat duurde niet lang. Dus dit is een eenvoudige oplossing, maar besef super gemakkelijk om dit fout te maken, en dan af en strijd minutenlang, zoniet uur, waarom is mijn code niet uitvoeren zoals ik van plan? Het is omdat je niet vertellen is precies wat je bedoelde. Zodat bijna perfect, en het was geweldig dat we vonden deze twee kleine dingen want nu als we ze op te lossen, en Ik maak Condition Zero dot slash Condition Zero, Ik wil graag een integer aub. Laten we kijken. Nee. Het gaat me dwingen om het te doen. Zo 42. Ik pakte een positief getal. Dus nu hoe kan ik bewijzen dit programma correct? Als je een wiskundige, kun je niet dit is echt bewijzen door trial and error, toch? Je kunt niet alleen het bewijs van Bijvoorbeeld, maar in ieder geval als programmeur we niet gaan proberen te bewijzen voor nu dat dit eigenlijk correct, maar ik zou waarschijnlijk testen van een aantal representatieve gevallen. Ik heb getest 42. Ik kon testen 43. Ik kon testen 44. Test 45. Rechts? Maar ik zou dit een hele lange tijd doen. Wat zou wat meer zijn interessante gevallen te proberen? PUBLIEK: [onverstaanbaar] nul. DAVID J. MALAN: Dus nul. Zeker. En goed, wij hebben het deze keer, dankzij nieuwe code Lauren's. Wat is een goede zaak om te proberen? Publiek: negatief. DAVID J. MALAN: negatief, en misschien iets een beetje groter, dus misschien negatief 42, maar in het algemeen, wanneer het testen van uw programma's vooruit, je bent gaat willen denken om jezelf, net als wat zijn fundamenteel verschillende zaken. En ik durf te zeggen dat een negatieve zaak, een positieve zaak en een nul case vrij veel rondes deze uit. Laten we eens kijken naar een variant van deze wel. Voorwaarden één. Dit is een correcte oplossing hier zodat je ziet twee en online, Als je door de wandeling walkthroughs, zal in het algemeen increment deze stapsgewijs totdat we krijgt precies de juiste aanpak. Wat als we wilde vragen twee vragen in een keer? Laat me dit openstellen plaats. Non-schakelaar om redenen we zullen nog een keer te zien. Wat is nieuw syntactisch hier? Ik ben momenteel het spelen van een spel waar de computer vertelt me, geef me een integer tussen één en 10, en dan ga ik oordelen invoer van de gebruiker. In het Engels, gebaseerd op de code die u hier ziet in blauw, wat dit programma doen? PUBLIEK: [onverstaanbaar] opgehaald een groot of klein aantal. DAVID J. MALAN: Ja. Het is gewoon berechting of Ik pakte een grote of middelgrote, of een klein aantal op basis van een zeer willekeurige definitie van kleine, middelgrote, en hier groot, maar kennisgeving de syntax dat is nieuw is dit. Er is liefst int of gelijk aan ondertekenen, of groter dan of gelijk aan te melden, waar men over de andere, dat je kan uitdrukken in, zoals Microsoft Word. Dus in een programmeertaal meestal gewoon twee karakters, de een na de ander. En wat betekent dit waarschijnlijk vertegenwoordigen, ampersand ampersand. PUBLIEK: [onverstaanbaar] DAVID J. MALAN: Ja. Het betekent gewoon en omdat het blijkt dat de auteurs van C gebruikt een enkel teken, die je zou denken perfect voor het idee zou zijn en, is al opgebruikt, dus ampersand ampersand eigenlijk vangt het geval we eigenlijk willen. Dus laten we nu struikelen over twee dingen. Laat me gaan en open te stellen een. Iets dat is een beetje zorgwekkend. Onnauwkeurigheid dot c. Laat me twee dingen hier te introduceren. Eén, bericht dat we kunnen doen wiskunde, zo net als vroeger toen we plus twee getallen x en y. Wat is dit programma blijkbaar doen? Ik heb het nog niet heeft gereageerd, en ik heb procent f geïntroduceerd, maar ik snel eerder gezegd procent f betekent floating point waarde, die reëel getal. Iets met een decimale punt, dat geen geheel getal. Wat denk je dat dit programma proberen om me te laten zien op het scherm? Ja? Doelgroep: Het resultaat van een meer dan 10. DAVID J. MALAN: Ja. Wat is het resultaat van één gedeeld door 10. Juist, omdat jullie allemaal waarschijnlijk opgegroeid wetende dat men dan 10 is wat? Ja, het is gewoon 10/1 of 0,1. Rechts? Dus laten we eens kijken wat dit eigenlijk is. Dus laat me gaan en sla dit. Laat me hier beneden te gaan. Maak onnauwkeurigheid dot slash onnauwkeurigheid, en kennisgeving, ook, in een Linux-omgeving, je niet moeten uittypen onnauwkeurigheid en nemen de hele dag lang. In het algemeen, als je Tab raken, is zal uw gedachte afmaken voor u, op basis van de woorden die verkrijgbaar in de huidige directory. OK. Dus je had gelijk. Een gedeeld door 10 is in feite 0,1. Maar ik ben een beetje nieuwsgierig. En het blijkt printf ondersteunt een aantal functies waarbij je meer dan kunt opgeven het standaard aantal cijfers achter de komma. Dus als ik wil 10 decimale zien punten die ik kan procent doen, voor de plaatsaanduiding symbool, dot 10 voor, geef me 10 cijfers achter de komma, en dan nog floating point waarde, en, als een terzijde, wat is dit backslash n blijkbaar blijven we gebruiken? Het blijkt dat het een symbool voor een nieuwe regel. Het is de zeer expliciete wijze zeggen de computer, Beweeg de cursor naar de volgende lijn nadat je klaar bent. En we zullen zien wat er gebeurt als we dat niet doen. Laat me opnieuw compileren maken onnauwkeurigheid. Dot nu slash onnauwkeurigheid. OK. Nog steeds goed. Een gedeeld door 10. Nu ben ik het krijgen van een beetje nieuwsgierig, dat wel. Wat als ik kijk 20 decimaal wijst er opnieuw compileren, herhaling, en als een opzij voor snelheid, kunt u ook gebruik maken uw pijlen omhoog en omlaag te Blader door uw geschiedenis, zodat je niet hoeft te houden overtypen deze opdrachten, in te voeren. He. Ik heb niet te weten dat er in de lagere school. Oké, dus laat me zie als 29 plaatsen buiten. Misschien is het gewoon een toevalstreffer. Misschien is mijn computer is raar. Dat is niet een ding, toch? Het is iets te doen deterministisch. Dus zorg onnauwkeurigheid. OK, dat is verknald. Dus wat is er aan de hand? Dus blijkbaar uw leraar heeft gelegen aan u allen van deze tijd redenen dat we zullen zien het duurde niet lang. Maar laten we eindigen met een ander programma. Dit is een klein programma iemand schreef enkele jaren geleden, en het is eigenlijk een deel van een wedstrijd. Niemand eigenlijk schrijft code als dit, en als je dat doet, dit is stilistisch een probleem. Maar mensen doen dit voor het opscheppen. Schrijven de meest verwarrende looking programma toch wel iets interessants. En de notitie ik dacht dat we zouden vertrekken op vandaag, voordat Colton speelt ons hier, is om dit programma uit te voeren, die zelfs in slechts met behulp C in deze tekst gebaseerde milieu, geeft ons dit. Dammit. [Lachen] Stand-by. [Onverstaanbaar] c dash l m. Je gaat naar de magische zien bezwering dat we zullen zien het duurde niet lang. [Onverstaanbaar] Oké. En nu kunt u zelfs dit soort dingen te doen. Dat is het. Voor CS50 wij, ziet u op vrijdag. [Muziek] [Applaus]