1 00:00:00,000 --> 00:00:11,736 2 00:00:11,736 --> 00:00:16,626 >> [VIDEOAVSPELNING] 3 00:00:16,626 --> 00:00:19,410 >> -En Triumf matematisk och mekanisk färdighet 4 00:00:19,410 --> 00:00:23,270 är denna stora nya automatiska kalkylator vid Harvard University. 5 00:00:23,270 --> 00:00:27,140 Intrikata problem i matematik sätta genom maskinen i kodad form 6 00:00:27,140 --> 00:00:31,710 på band noggrant lösas på ett minut bråkdel av den tid som krävs 7 00:00:31,710 --> 00:00:32,819 för mänsklig beräkning. 8 00:00:32,819 --> 00:00:44,280 9 00:00:44,280 --> 00:00:48,220 Designad för att påskynda alla former av matematisk och vetenskaplig forskning, 10 00:00:48,220 --> 00:00:53,840 jätten mekaniska hjärnan kommer att arbeta för Förenta staterna marinen fram till krigsslutet. 11 00:00:53,840 --> 00:01:03,620 12 00:01:03,620 --> 00:01:06,570 >> [END SPELA] 13 00:01:06,570 --> 00:01:08,590 >> DAVID J. MALAN: Detta är CS50. 14 00:01:08,590 --> 00:01:10,590 Det förflutna var en magisk plats, men om du har någonsin 15 00:01:10,590 --> 00:01:13,366 undrade vad den enheten är i Harvard Science Center, 16 00:01:13,366 --> 00:01:16,150 det är verkligen en del av den Harvard Mark I, och det är 17 00:01:16,150 --> 00:01:18,710 visas där nu under de senaste många år. 18 00:01:18,710 --> 00:01:20,590 Och vad du ser inbäddade i problem set 19 00:01:20,590 --> 00:01:24,416 en är en titt bakom kulisserna vad den enheten gjorde, och gör, 20 00:01:24,416 --> 00:01:27,540 från professor Harry Lewis, som är i datorvetenskapliga institutionen här. 21 00:01:27,540 --> 00:01:29,440 Så mer om det på bara en bit. 22 00:01:29,440 --> 00:01:33,990 >> Men idag börjar vi övergång från förra veckan till detta, 23 00:01:33,990 --> 00:01:37,290 och vi kommer att föra omnämnande av ett fotografi här 24 00:01:37,290 --> 00:01:38,630 det är faktiskt ganska känd. 25 00:01:38,630 --> 00:01:42,270 Vet någon vad detta här visas på skärmen? 26 00:01:42,270 --> 00:01:43,880 Åtminstone enligt myten. 27 00:01:43,880 --> 00:01:44,837 Yeah. 28 00:01:44,837 --> 00:01:45,920 Publik: Det första viruset. 29 00:01:45,920 --> 00:01:49,570 DAVID J. MALAN: Så det var förment den allra första faktiska fel i en dator. 30 00:01:49,570 --> 00:01:52,490 Nu i verkligheten ordet bugg, för ett fel i ett program, 31 00:01:52,490 --> 00:01:55,250 har varit med oss ​​för vissa tid i den fysiska världen, 32 00:01:55,250 --> 00:01:58,190 och detta var en av de första dokumenterade tillfällen där någon faktiskt 33 00:01:58,190 --> 00:02:02,280 plockade en stor fjäril ur Mark II dator, lägga den i bindemedlet, 34 00:02:02,280 --> 00:02:05,006 och sedan spelade in det som den första kända kryp 35 00:02:05,006 --> 00:02:06,630 att faktiskt funnits fysiskt. 36 00:02:06,630 --> 00:02:10,104 Så därför har angetts som i dagens lore. 37 00:02:10,104 --> 00:02:12,020 Allt från förra vecka är tillgänglig online. 38 00:02:12,020 --> 00:02:14,840 I synnerhet resurser som du kanske inte nödvändigtvis märker, särskilt 39 00:02:14,840 --> 00:02:15,881 Om komma hit personligen. 40 00:02:15,881 --> 00:02:20,230 Så en av undervisnings stipendiater varje år gör en kanonisk uppsättning av anteckningar, 41 00:02:20,230 --> 00:02:22,010 så du behöver inte hålla huvudet nedåt, försöker 42 00:02:22,010 --> 00:02:24,410 att transkribera de flesta någonting som kan hända här i klassen. 43 00:02:24,410 --> 00:02:25,940 Så inser att de så kallade [? Scribd?] Anteckningar 44 00:02:25,940 --> 00:02:29,350 är online, säkerligen bilderna och källkod som vi använder i klassen. 45 00:02:29,350 --> 00:02:31,436 Vi gör fulltext avskrifter finns också. 46 00:02:31,436 --> 00:02:34,310 Så om du vagt minns några sikt och vill slå upp det lite 47 00:02:34,310 --> 00:02:37,280 lättare, inse att alla av detta är sökbart på nätet. 48 00:02:37,280 --> 00:02:38,930 Samt walkthroughs också. 49 00:02:38,930 --> 00:02:42,710 I själva verket, i dag börjar vi titta på ett programmeringsspråk lägre nivå, 50 00:02:42,710 --> 00:02:45,290 snart att bli känd för oss som C, och det är mycket lätt 51 00:02:45,290 --> 00:02:48,820 att sorts vilse efter bara några stunder tid, och sedan sortera av förundran 52 00:02:48,820 --> 00:02:52,370 hur vi faktiskt fick lite mer komplext exempel från den enklaste. 53 00:02:52,370 --> 00:02:54,975 Och så inser vi ska körsbär plocka under klass vissa 54 00:02:54,975 --> 00:02:57,850 av de representativa exemplen, men inse att så mycket mer är också 55 00:02:57,850 --> 00:03:01,140 tillgängliga online så att du kan arbeta genom den i din egen takt, 56 00:03:01,140 --> 00:03:02,950 men du är mest bekväm. 57 00:03:02,950 --> 00:03:05,200 >> Men vi slutade med program som var just detta. 58 00:03:05,200 --> 00:03:09,690 Så jag klickar på den gröna flaggan, och vad gör det här programmet göra? 59 00:03:09,690 --> 00:03:10,710 Säger, hej, värld. 60 00:03:10,710 --> 00:03:13,180 Det gör katten säger hej i sin lilla värld 61 00:03:13,180 --> 00:03:15,990 på det övre vänstra sida av Scratch användargränssnitt. 62 00:03:15,990 --> 00:03:18,810 Men vi började införa några terminologi förra veckan. 63 00:03:18,810 --> 00:03:23,614 Och så, sånt här vi kallas vad? 64 00:03:23,614 --> 00:03:25,280 Vad kan vara en allmän term för detta? 65 00:03:25,280 --> 00:03:26,266 Yeah. 66 00:03:26,266 --> 00:03:28,210 En metod eller ett uttalande. 67 00:03:28,210 --> 00:03:29,280 Visst, det är en åtgärd. 68 00:03:29,280 --> 00:03:30,140 Gör det här. 69 00:03:30,140 --> 00:03:32,400 Och ändå fanns andra former att repa, 70 00:03:32,400 --> 00:03:35,360 Förutom dessa så kallade uttalande, var de också 71 00:03:35,360 --> 00:03:38,221 sånt här, som vi kallade vad? 72 00:03:38,221 --> 00:03:38,720 Yeah. 73 00:03:38,720 --> 00:03:39,634 Så en slinga. 74 00:03:39,634 --> 00:03:42,050 Och i detta fall, den här grejen upprepningar, uppenbarligen, 10 gånger. 75 00:03:42,050 --> 00:03:43,040 Det finns ett evigt block. 76 00:03:43,040 --> 00:03:44,164 Det finns ett par andra. 77 00:03:44,164 --> 00:03:48,309 Och idag ska vi se hur man översätta detta till en mer modern värld, 78 00:03:48,309 --> 00:03:50,850 om du vill, även om det är kommer att visas vid första anblicken 79 00:03:50,850 --> 00:03:52,024 vara mycket mer svårbegripliga. 80 00:03:52,024 --> 00:03:53,190 Men de var verkligen loopar. 81 00:03:53,190 --> 00:03:56,182 Och sedan har vi saker som detta, som hade denna form, 82 00:03:56,182 --> 00:03:57,515 och i huvudsak frågor. 83 00:03:57,515 --> 00:03:58,890 Och vi hänvisade till dessa som vad? 84 00:03:58,890 --> 00:03:59,762 >> PUBLIK: Boolean uttryck. 85 00:03:59,762 --> 00:04:00,320 >> DAVID J. MALAN: Ja. 86 00:04:00,320 --> 00:04:01,340 Boolean uttryck. 87 00:04:01,340 --> 00:04:04,502 Något som är antingen sant eller falskt, ja eller nej, en eller noll, 88 00:04:04,502 --> 00:04:05,960 men du vill visa världen. 89 00:04:05,960 --> 00:04:08,335 Men vi kallade dem Boolean uttryck, och vi ansluter dem 90 00:04:08,335 --> 00:04:09,900 i förhållanden, eller filialer. 91 00:04:09,900 --> 00:04:12,170 Och i en värld av Scratch, allt snyggt 92 00:04:12,170 --> 00:04:15,460 förreglingar i fråga om form, om det är logiskt att göra det, 93 00:04:15,460 --> 00:04:18,490 men du behöver inte stanna vid bara gör en sak villkorligt, 94 00:04:18,490 --> 00:04:20,450 du kan ha en ökända gaffel i vägen 95 00:04:20,450 --> 00:04:24,040 och göra antingen det ena eller det om villkoret är sant eller inte. 96 00:04:24,040 --> 00:04:26,040 Och sedan, som du ser, Om du inte redan har gjort, 97 00:04:26,040 --> 00:04:27,480 Du kan även bo dessa block. 98 00:04:27,480 --> 00:04:32,110 Så Scratch växer för att fylla formerna att du kanske vill infoga i det, 99 00:04:32,110 --> 00:04:35,330 så att du kan faktiskt uttrycka mest någon logik som du kanske vill göra. 100 00:04:35,330 --> 00:04:38,220 >> Nu några ord om tillkännagivandet både här och New Haven. 101 00:04:38,220 --> 00:04:39,370 Så snitt börjar i dag. 102 00:04:39,370 --> 00:04:42,120 Adressen till denna är på kursens webbplats, för dem obekanta. 103 00:04:42,120 --> 00:04:43,970 Sektioner kommer att vara en möjlighet att träffas 104 00:04:43,970 --> 00:04:46,553 i en mycket mer intim miljö än [? Sanders?] Tillåter, 105 00:04:46,553 --> 00:04:50,347 med 10 till 20 klasskamrater med en undervisning Fellow vid olika spår, 106 00:04:50,347 --> 00:04:51,930 och olika steg, om du så önskar. 107 00:04:51,930 --> 00:04:54,080 Faktum Kursen ger olika sektioner 108 00:04:54,080 --> 00:04:57,340 för de mindre bekväm, mer bekväma, och någonstans däremellan, 109 00:04:57,340 --> 00:04:59,860 och den roll som tummen här är det finns ingen formell definition, 110 00:04:59,860 --> 00:05:04,600 men om du är mindre bekväm, du typ av vet det. 111 00:05:04,600 --> 00:05:07,470 Du är lite intrepid om idén om att sätta foten, kanske tillbaka 112 00:05:07,470 --> 00:05:10,130 i klassrummet, eller visar upp till en in mellan avsnitt. 113 00:05:10,130 --> 00:05:12,770 Om du har varit programmering eftersom du var sex år gammal, bekvämare, 114 00:05:12,770 --> 00:05:13,400 kanske för dig. 115 00:05:13,400 --> 00:05:16,150 Och om det är lite av en toss-up, det är precis vad däremellan 116 00:05:16,150 --> 00:05:17,190 är tänkt att vara. 117 00:05:17,190 --> 00:05:18,410 >> Nu, i mellantiden, för en klass denna storlek, 118 00:05:18,410 --> 00:05:21,326 det tar oss ganska lång tid att avsnitt alla, så vi har så kallade, 119 00:05:21,326 --> 00:05:24,030 super sektioner, kommer upp här helgen och i början av nästa vecka, 120 00:05:24,030 --> 00:05:26,570 så ta en titt på kursens hemsida för dem som är naturligtvis stort, 121 00:05:26,570 --> 00:05:28,610 och även filmat för dem som inte kan göra dem. 122 00:05:28,610 --> 00:05:33,470 Och sektioner själva kommer att börja i vecka tre av CS50 noll index. 123 00:05:33,470 --> 00:05:35,880 Problem set 0 är redan på kursens hemsida. 124 00:05:35,880 --> 00:05:40,010 Och inse att du har nio sena dagar den här terminen. 125 00:05:40,010 --> 00:05:43,240 Så detta är en uppgradering från förra år, när vi hade fem sena dagar. 126 00:05:43,240 --> 00:05:46,210 >> Så om du undrar, Vi har nio problemsamlingar. 127 00:05:46,210 --> 00:05:53,200 Du har nio sena dagar, som var och en du kan bara tillbringa en per vecka på. 128 00:05:53,200 --> 00:05:56,089 Det gör i själva verket alla av problemet sätter beror fredag, 129 00:05:56,089 --> 00:05:58,630 men målet är att sätta lite bit av psykologisk press 130 00:05:58,630 --> 00:06:01,100 på dig för att försöka få saker i på torsdag 131 00:06:01,100 --> 00:06:03,960 eftersom ni kommer snart att upptäcka, på gott och ont, mest 132 00:06:03,960 --> 00:06:07,820 allt i programvaruvärlden hamnar tar mycket längre tid än du räknar med. 133 00:06:07,820 --> 00:06:10,620 Så ser det som en sorts möjligheter att hjälpa 134 00:06:10,620 --> 00:06:13,880 själv att rikta torsdag, men åtminstone trösta sig att, ja, 135 00:06:13,880 --> 00:06:14,950 allt beror fredag. 136 00:06:14,950 --> 00:06:17,590 Och om du skickar dem på Torsdag, det är underbart. 137 00:06:17,590 --> 00:06:21,020 Det finns inga bonuspoäng eller extra kredit för att möta denna tidsfrist. 138 00:06:21,020 --> 00:06:23,250 Det är tänkt att vara endast en krycka. 139 00:06:23,250 --> 00:06:25,810 >> Och kontorstid, både här och i New Haven, 140 00:06:25,810 --> 00:06:28,840 personligen, om du vill träffa någon av våra kurser 141 00:06:28,840 --> 00:06:31,060 undervisa stipendiater och CAS för assistans. 142 00:06:31,060 --> 00:06:31,640 >> Okej. 143 00:06:31,640 --> 00:06:33,110 Så nu, låt oss göra det mer verkligt. 144 00:06:33,110 --> 00:06:35,470 Och för ett ögonblick det kommer att starta att få lite mer svårbegriplig, men mycket 145 00:06:35,470 --> 00:06:37,310 snabbt på fredag ​​och Nästa vecka kommer vi att 146 00:06:37,310 --> 00:06:41,230 kunna göra så mycket mer än vi kunde hittills i Scratch. 147 00:06:41,230 --> 00:06:44,350 Så vi introducerade kod sista vecka, om än pictoral. 148 00:06:44,350 --> 00:06:45,620 Det var pusselbitar. 149 00:06:45,620 --> 00:06:48,800 Och vi formalis att det är något som kallas källkod, 150 00:06:48,800 --> 00:06:50,330 men skulle ser ut som? 151 00:06:50,330 --> 00:06:52,550 Tja, såg det lite något som det här. 152 00:06:52,550 --> 00:06:55,410 Och, i själva verket bara att typ av retas där vi kan gå med detta. 153 00:06:55,410 --> 00:06:57,800 Jag kommer att gå vidare och öppnar ett fönster här, 154 00:06:57,800 --> 00:06:59,810 och jag ska bara välja ny fil. 155 00:06:59,810 --> 00:07:03,200 Och jag kommer att spara den här filen som något liknande hello dot c. 156 00:07:03,200 --> 00:07:05,700 Mer om detta val av ord på bara ett ögonblick. 157 00:07:05,700 --> 00:07:08,630 Och det är hur någon kanske gå om att skriva ett program. 158 00:07:08,630 --> 00:07:13,990 Inkludera standard I / O punkt h, int main tomrum, och öppna sedan klammerparentes, nära 159 00:07:13,990 --> 00:07:19,430 klammerparentes, printf hej kommatecken världen, bakstreck n, semikolon, Spara gjort. 160 00:07:19,430 --> 00:07:19,930 OK. 161 00:07:19,930 --> 00:07:21,670 Jag har skrivit min första program, men det kommer 162 00:07:21,670 --> 00:07:23,878 att vara oerhört underwhelmed eftersom när jag faktiskt 163 00:07:23,878 --> 00:07:27,352 köra programmet, naturligtvis, genom att först skrift gör hej, 164 00:07:27,352 --> 00:07:30,310 och sedan dot slash hej, och vi ska gå igenom detta mer i detalj 165 00:07:30,310 --> 00:07:31,730 i ett ögonblick, det är allt den gör. 166 00:07:31,730 --> 00:07:33,270 Inte pop öppna alla fönster. 167 00:07:33,270 --> 00:07:35,070 Det gör ingenting särskilt snygga. 168 00:07:35,070 --> 00:07:38,830 Allt det gör är vad jag sa det till göra, men hur ska vi få till det? 169 00:07:38,830 --> 00:07:40,560 Och hur ska vi bygga vidare på det? 170 00:07:40,560 --> 00:07:43,430 Nåväl, låt oss presentera några olika koncept här. 171 00:07:43,430 --> 00:07:47,170 >> Så en, vi är på väg att starta med hjälp av ett program som kallas en kompilator. 172 00:07:47,170 --> 00:07:51,470 En kompilator finns för Mac OS, Windows, Linux, valfritt antal operativsystem, 173 00:07:51,470 --> 00:07:54,540 och vi kommer snart introducera dig till miljö som vi kommer att använda, 174 00:07:54,540 --> 00:07:57,410 men en kompilator är bara en allmän term för en mjukvara 175 00:07:57,410 --> 00:08:01,940 som tar källkoden och producerar objektkoden från den. 176 00:08:01,940 --> 00:08:03,940 Med andra ord, om du har som indata din källa 177 00:08:03,940 --> 00:08:08,250 kod, något som vad jag just skrev, det i slutändan producerar objektkod. 178 00:08:08,250 --> 00:08:11,780 Och objektkoden är egentligen bara ett fint sätt att säga det utgångar 179 00:08:11,780 --> 00:08:12,926 nollor och en s. 180 00:08:12,926 --> 00:08:14,800 Med andra ord, källa kod, även om det är 181 00:08:14,800 --> 00:08:17,240 kommer att se lite svårbegripliga, och lite mindre vänlig 182 00:08:17,240 --> 00:08:19,590 än Scratch vid första anblicken, Det är åtminstone något 183 00:08:19,590 --> 00:08:21,120 att vi människor kan förstå. 184 00:08:21,120 --> 00:08:24,360 Det slags ser ut och låter som Engelska trots att det är mycket kortfattad. 185 00:08:24,360 --> 00:08:28,040 Medan programmering i nollor och ens, som våra föregångare hade att göra, 186 00:08:28,040 --> 00:08:30,920 för några år sedan, var inte en särskilt kul utmaning. 187 00:08:30,920 --> 00:08:33,710 Och ändå, är vad detta dator förstår fortfarande. 188 00:08:33,710 --> 00:08:37,010 Så kompilator får oss från källkod objektkoden. 189 00:08:37,010 --> 00:08:39,860 Det är som att öppna en fil med kompilator, och när du sparar den, 190 00:08:39,860 --> 00:08:41,419 du får dessa nollor och ettor. 191 00:08:41,419 --> 00:08:43,419 Så vi får se hur man gör som på bara ett ögonblick. 192 00:08:43,419 --> 00:08:47,400 >> Men låt oss nu försöka ge en brygga mellan förra veckan och detta, 193 00:08:47,400 --> 00:08:50,660 så att även när vi får hänga upp på saker som klammerparenteser, 194 00:08:50,660 --> 00:08:54,100 och semikolon, och parenteser och alla dessa intellektuellt intressant 195 00:08:54,100 --> 00:08:57,620 aspekter av programmering, som mycket förståe resa upp människor tidigt, 196 00:08:57,620 --> 00:09:00,930 inser att alla de idéer idag, är samma som förra. 197 00:09:00,930 --> 00:09:03,975 Så sist såg vi det här exemplet här, Hello World-programmet. 198 00:09:03,975 --> 00:09:07,500 Tja, med start idag, om vi vill att genomföra samma program, 199 00:09:07,500 --> 00:09:10,800 det kommer att se en lite ungefär så här. 200 00:09:10,800 --> 00:09:14,040 Och vi ska förklara snart vad int, och viktigaste, och tom, och allt det 201 00:09:14,040 --> 00:09:18,770 är, men åtminstone jag ser här redan välbekanta Hello World. 202 00:09:18,770 --> 00:09:20,860 >> Samtidigt, saker som funktion, säga hej, 203 00:09:20,860 --> 00:09:23,570 är mycket enkelt kommer att bli en mycket enkel förklaring som denna. 204 00:09:23,570 --> 00:09:26,930 Printf hallå världen, med vissa citerar, med en backslash, 205 00:09:26,930 --> 00:09:29,780 med ett semikolon, men mer på att komma. 206 00:09:29,780 --> 00:09:34,066 Loopar, under tiden, detta är en loop som, naturligtvis hälsar världen för alltid, 207 00:09:34,066 --> 00:09:36,690 och detta kommer att se en lite weirder än i den sista, 208 00:09:36,690 --> 00:09:39,530 men om jag säger något liknande, medan sant, jag 209 00:09:39,530 --> 00:09:44,050 kan sedan skriva ut Hello world igen och igen och igen och igen. 210 00:09:44,050 --> 00:09:46,660 Och då du kan snäll av att börja sluta här, 211 00:09:46,660 --> 00:09:49,070 denna konvention för att använda klammerparenteserna är snäll 212 00:09:49,070 --> 00:09:52,050 som att omfamna indragen kodrad där. 213 00:09:52,050 --> 00:09:55,840 Printf kodrad likt den gula pusselbiten upp ovan. 214 00:09:55,840 --> 00:09:58,740 Så vi kommer inte att säga för evigt, vi kommer att säga när sant, 215 00:09:58,740 --> 00:10:01,020 men vi får se varför det är bara lite. 216 00:10:01,020 --> 00:10:04,210 >> Samtidigt, om vi har en loop så här, där du upprepar något ändligt 217 00:10:04,210 --> 00:10:07,730 antal gånger, här också är det kommer att ta lite tid att vänja 218 00:10:07,730 --> 00:10:12,820 , men det kommer att säga int Jag blir noll, i mindre än 10, i ++, 219 00:10:12,820 --> 00:10:14,056 och sedan printf igen. 220 00:10:14,056 --> 00:10:15,430 Men det kommer att bli mönster. 221 00:10:15,430 --> 00:10:18,434 Och för dem av er bekant med AP datavetenskap, eller Java, 222 00:10:18,434 --> 00:10:21,100 eller valfritt antal andra språk, nästan alla dessa konstruktioner 223 00:10:21,100 --> 00:10:23,820 hittills bör se mestadels bekant. 224 00:10:23,820 --> 00:10:24,680 >> Så variabel. 225 00:10:24,680 --> 00:10:29,270 Så här är ett enkelt Scratch utdrag som sätter en variabel kallad räknare till noll, 226 00:10:29,270 --> 00:10:33,150 och sedan för evigt säger disken och då den ändrar räknaren med ett. 227 00:10:33,150 --> 00:10:37,030 Så det börjar med noll, och sedan en, två, tre. 228 00:10:37,030 --> 00:10:42,560 Nå, hur skulle vi införa denna i denna nya språket lite på samma sätt? 229 00:10:42,560 --> 00:10:45,460 Int räknaren är lika noll medan true, vilket 230 00:10:45,460 --> 00:10:48,100 är samma idé från tidigare att göra något för evigt, 231 00:10:48,100 --> 00:10:49,530 och jag ska bara printf. 232 00:10:49,530 --> 00:10:53,310 Och nu det blir lite konstigt, procent i, men mer på att komma, 233 00:10:53,310 --> 00:10:55,140 men dessa idéer är exakt desamma. 234 00:10:55,140 --> 00:10:58,820 Vi har just nu måste följa syntax att datorn är 235 00:10:58,820 --> 00:11:00,010 kommer att kräva av oss. 236 00:11:00,010 --> 00:11:04,620 >> Booleskt uttryck, något liknande sx mindre än y, eller x är mindre än y, 237 00:11:04,620 --> 00:11:06,354 och y mindre än z. 238 00:11:06,354 --> 00:11:09,270 Det kommer att se en liten sak så här, med parenteser bara 239 00:11:09,270 --> 00:11:13,020 som i matematik för bra åtgärd att bara se till att ordningen på verksamheten 240 00:11:13,020 --> 00:11:14,750 är som vi tänker. 241 00:11:14,750 --> 00:11:15,600 Och nu, villkor. 242 00:11:15,600 --> 00:11:21,220 Så om x är mindre än y, säg x är mindre än Y, annars om x är större än y, 243 00:11:21,220 --> 00:11:26,020 säga x är större än y, annars logiskt, måste x vara lika med y. 244 00:11:26,020 --> 00:11:28,710 Så du kan genomföra något liknande i Scratch, 245 00:11:28,710 --> 00:11:31,230 eller du kanske genomföra det i denna syntax. 246 00:11:31,230 --> 00:11:35,090 Och återigen, klammerparenteserna är typ av ge oss samma form som pusslet 247 00:11:35,090 --> 00:11:40,750 bitar, men syntaxen, nu är kanske börjar följa vissa mönster. 248 00:11:40,750 --> 00:11:42,910 >> Så, vad gör detta ger oss här? 249 00:11:42,910 --> 00:11:45,260 Så vi är tillbaka då på våran program. 250 00:11:45,260 --> 00:11:47,930 Låt oss faktiskt, nu, göra något med det. 251 00:11:47,930 --> 00:11:50,660 Så i detta mycket först linje vi ser skarp omfatta 252 00:11:50,660 --> 00:11:53,160 standard-I / O, pricka h och sedan några konstiga vinkel 253 00:11:53,160 --> 00:11:57,330 parentes under det. int main tomrum, och sedan printf hallå världen. 254 00:11:57,330 --> 00:11:58,200 Så bara ta ett steg. 255 00:11:58,200 --> 00:12:02,440 Någon som aldrig programmeras före, åtminstone förklara en av dessa linjer. 256 00:12:02,440 --> 00:12:04,490 Använda kanske några av jargong av förra veckan. 257 00:12:04,490 --> 00:12:06,942 Vad är printf, till exempel? 258 00:12:06,942 --> 00:12:07,442 Yeah. 259 00:12:07,442 --> 00:12:08,410 >> PUBLIK: [OHÖRBAR] 260 00:12:08,410 --> 00:12:08,610 >> DAVID J. MALAN: Ja. 261 00:12:08,610 --> 00:12:11,380 Det är en funktion eller ett uttalande, från förra veckans terminologi. 262 00:12:11,380 --> 00:12:13,470 Och det är en åtgärd som gör något. 263 00:12:13,470 --> 00:12:15,855 Nu denna funktion, eller detta uttalande, gör 264 00:12:15,855 --> 00:12:17,550 det verkar ta någon form av ingång? 265 00:12:17,550 --> 00:12:20,080 266 00:12:20,080 --> 00:12:24,380 Och på vilket sätt gör det verkar ta ingång, om så? 267 00:12:24,380 --> 00:12:26,180 Input, vad menar jag med det? 268 00:12:26,180 --> 00:12:26,720 Yeah. 269 00:12:26,720 --> 00:12:27,595 >> PUBLIK: [OHÖRBAR] 270 00:12:27,595 --> 00:12:30,565 271 00:12:30,565 --> 00:12:31,440 DAVID J. MALAN: Ja. 272 00:12:31,440 --> 00:12:34,890 Så Skrapa ut några pusselbitar där du kan parametrize det. 273 00:12:34,890 --> 00:12:37,980 Du kan tala om upprepning blockera hur många gånger att upprepa, 274 00:12:37,980 --> 00:12:40,320 så det var en ingång sorterar, och precis som Scratch 275 00:12:40,320 --> 00:12:43,060 hade en liten vit platshållare för det nummer som du vill skriva in, 276 00:12:43,060 --> 00:12:45,810 så gör vi använder i detta text världen parentes 277 00:12:45,810 --> 00:12:49,910 att ge oss att cirkulär form i vilken vi kan koppla vår insats. 278 00:12:49,910 --> 00:12:53,180 När allt kommer omkring, tiotals år sedan när detta språk, som kallas C, 279 00:12:53,180 --> 00:12:55,950 uppfanns ingen en förväntat det är en av oss, 280 00:12:55,950 --> 00:12:59,420 Dessa några år senare, skulle vi vill ha en funktion som säger hej. 281 00:12:59,420 --> 00:12:59,920 Höger? 282 00:12:59,920 --> 00:13:02,880 Det skulle vara trevligt om det fanns en pusselbit, eller ett nyckelord, 283 00:13:02,880 --> 00:13:05,502 som kallas hello, att bokstavligen bara säger hej. 284 00:13:05,502 --> 00:13:06,460 Men vi behöver inte det. 285 00:13:06,460 --> 00:13:09,320 Vi kan ha något mycket lägre nivå, som en generisk print 286 00:13:09,320 --> 00:13:12,760 kommando, som tar indata, och utskrifter vad vi vill. 287 00:13:12,760 --> 00:13:14,960 Så märker nu mönstret som kommer att börja dyka upp. 288 00:13:14,960 --> 00:13:19,310 Öppna Paren är nära Paren tydligen omfamna ingången, 289 00:13:19,310 --> 00:13:21,770 och då ser jag dubbel citationstecken i båda ändarna. 290 00:13:21,770 --> 00:13:25,110 Det finns fortfarande konstig omvänt snedstreck n, men förhoppningsvis nu 291 00:13:25,110 --> 00:13:29,900 kan börja att visualisera åtminstone att printf tar i någon form av ingång. 292 00:13:29,900 --> 00:13:31,850 Inte så användarvänligt som Skrapa, men det är bara 293 00:13:31,850 --> 00:13:34,920 som att ha inkopplad visst värde där. 294 00:13:34,920 --> 00:13:38,306 >> Okej, nu ska vi faktiskt göra något med detta. 295 00:13:38,306 --> 00:13:40,930 Så en del av er kanske vet från har handlat klassen innan, 296 00:13:40,930 --> 00:13:42,638 chattade med vänner, som under många år 297 00:13:42,638 --> 00:13:44,590 vi använde något som kallas den CS50 apparaten. 298 00:13:44,590 --> 00:13:49,160 Detta var en term som beskriver en teknik kallas den virtuella maskinen, som 299 00:13:49,160 --> 00:13:51,870 är en mjukvara som din föregångare skulle hämta ut 300 00:13:51,870 --> 00:13:53,360 kursens hemsida gratis. 301 00:13:53,360 --> 00:13:56,550 De skulle också ladda ner en gratis bit programvara som kallas en hypervisor, 302 00:13:56,550 --> 00:14:00,590 något som kallas som VMware, eller VirtualBox, eller valfritt antal 303 00:14:00,590 --> 00:14:04,450 andra verktyg, och på sin Mac eller PC eller vad dator de hade förra året 304 00:14:04,450 --> 00:14:06,620 och i år tidigare, de skulle dubbelklicka på en ikon 305 00:14:06,620 --> 00:14:08,860 att köra den här programvaran kallas hypervisor. 306 00:14:08,860 --> 00:14:12,220 Och sedan inne i programmet de skulle öppna CS50 apparaten. 307 00:14:12,220 --> 00:14:14,710 Och effekten var att om en föregångare till dig 308 00:14:14,710 --> 00:14:17,780 kördes Mac OS eller Windows, han eller hon sedan 309 00:14:17,780 --> 00:14:22,910 Därefter hade ett nytt fönster på deras skärm kör CS50 miljö. 310 00:14:22,910 --> 00:14:27,370 Så en virtuell maskin kan du köra en operativsystem insidan av en annan, 311 00:14:27,370 --> 00:14:28,785 och det är precis vad vi gjorde. 312 00:14:28,785 --> 00:14:31,410 Under större delen av kursen vi använda ett operativsystem kallat 313 00:14:31,410 --> 00:14:34,070 Linux, speciellt Ubuntu Linux, och detta 314 00:14:34,070 --> 00:14:37,590 är ett mycket trevligt sätt i år tidigare av att se till att alla i kursen 315 00:14:37,590 --> 00:14:38,840 bara haft samma miljö. 316 00:14:38,840 --> 00:14:41,339 Och du kan använda någon form av dator som du verkligen vill. 317 00:14:41,339 --> 00:14:43,930 Bland de avigsidor, men, var det var två gigabyte 318 00:14:43,930 --> 00:14:45,480 att ladda ned den här saken. 319 00:14:45,480 --> 00:14:50,310 Det fungerade inte nödvändigtvis fungerar super bra på människor vars datorer som kanske bara 320 00:14:50,310 --> 00:14:54,570 hade en spelning eller så RAM, eller inte alltför många gigahertz av processorhastighet, 321 00:14:54,570 --> 00:14:56,750 och så i år, för detta och andra skäl, 322 00:14:56,750 --> 00:14:59,140 har vi varit övergår till denna miljö. 323 00:14:59,140 --> 00:15:03,730 Den så kallade CS50 IDE, som är baserad på öppen källkod, 324 00:15:03,730 --> 00:15:07,380 och en plattform som stöds att ett företag som heter Cloud9 325 00:15:07,380 --> 00:15:11,110 stöd i Europa, att tillåter oss att ha i huvudsak 326 00:15:11,110 --> 00:15:15,770 exakt samma miljö som i år tidigare, men i den så kallade molnet. 327 00:15:15,770 --> 00:15:17,532 >> Så vad är molnet? 328 00:15:17,532 --> 00:15:20,480 Du har antagligen klickat dess ikon på din Mac eller PC. 329 00:15:20,480 --> 00:15:22,210 Vad är molnet? 330 00:15:22,210 --> 00:15:22,709 Yeah? 331 00:15:22,709 --> 00:15:25,880 332 00:15:25,880 --> 00:15:26,780 Lite högre. 333 00:15:26,780 --> 00:15:30,510 334 00:15:30,510 --> 00:15:31,010 Yeah. 335 00:15:31,010 --> 00:15:33,770 Det är bara en massa datorer i andra områden som lagra data och köra 336 00:15:33,770 --> 00:15:34,880 programvara och liknande. 337 00:15:34,880 --> 00:15:39,390 Så det är egentligen bara till ordet de jure att beskriva [? uthyrningsbar?] 338 00:15:39,390 --> 00:15:40,930 datorer som bor på annat håll. 339 00:15:40,930 --> 00:15:42,810 Som du själv, inte nödvändigtvis äger. 340 00:15:42,810 --> 00:15:45,256 Så när dina data, eller din program, är i molnet, 341 00:15:45,256 --> 00:15:47,630 det betyder bara att det är på någon annans datorer på andra håll, 342 00:15:47,630 --> 00:15:50,510 och inte, troligen på din fysiska bärbara eller stationära. 343 00:15:50,510 --> 00:15:52,990 Och så det är vad CS50 IDE nu är. 344 00:15:52,990 --> 00:15:55,670 >> Hädanefter ska du gå till en viss URL som kommer att introducera dig 345 00:15:55,670 --> 00:16:00,090 att på problemet set 1, senare vecka, som då, när du loggar in, 346 00:16:00,090 --> 00:16:01,480 ge dig den här miljön. 347 00:16:01,480 --> 00:16:03,896 Och mycket liknande Scratch hade en några olika paneler involverade, 348 00:16:03,896 --> 00:16:06,030 så gör CS50 IDE har just detta. 349 00:16:06,030 --> 00:16:09,480 På det övre vänstra sidan här, du är kommer att se ett bekant filhanterare. 350 00:16:09,480 --> 00:16:11,930 Så någon av de filer som du tas i denna miljö 351 00:16:11,930 --> 00:16:13,346 bara kommer att listas där. 352 00:16:13,346 --> 00:16:14,350 Filer och mappar. 353 00:16:14,350 --> 00:16:16,790 På det övre högra hörnet här, du kommer att se en plats 354 00:16:16,790 --> 00:16:18,420 där du kan faktiskt skriva din kod. 355 00:16:18,420 --> 00:16:21,860 Inledningsvis i C, senare i term i PHP och JavaScript, 356 00:16:21,860 --> 00:16:24,739 och, kanske för slutlig projekt, Ruby eller Java eller Python 357 00:16:24,739 --> 00:16:27,280 eller valfritt antal språk är stöds i denna miljö. 358 00:16:27,280 --> 00:16:30,130 Det är inte alls knutna att CS50 specifikt. 359 00:16:30,130 --> 00:16:33,390 >> Och sedan i nedre hörnet här, särskilt för dem bekvämare, 360 00:16:33,390 --> 00:16:35,590 du har något kallas ett terminalfönster. 361 00:16:35,590 --> 00:16:38,770 Och detta terminalfönster tillåter du köra något kommando som du 362 00:16:38,770 --> 00:16:40,860 vill i detta moln miljö. 363 00:16:40,860 --> 00:16:42,860 Det gör att du kan installera någon extra programvara 364 00:16:42,860 --> 00:16:46,810 som du vill att du har så kallade rot, eller administratörsbehörighet. 365 00:16:46,810 --> 00:16:49,930 Så med andra ord, trots att detta slutligen värd i molnet, 366 00:16:49,930 --> 00:16:52,400 och även om vi har förenklat det i viss mån 367 00:16:52,400 --> 00:16:57,110 som standard, bokstavligen införa, tack vare Dan Armendariz, och Dino, 368 00:16:57,110 --> 00:17:01,070 och Dan Bradley på CS50 team över förbi många månader, en mindre bekväm 369 00:17:01,070 --> 00:17:05,140 läge som döljer en hel del av inledningsvis förvirrande distraktioner. 370 00:17:05,140 --> 00:17:10,119 Allt det finns till representerar ett typiskt datorsystem 371 00:17:10,119 --> 00:17:12,319 som du kan använda i den verkliga världen. 372 00:17:12,319 --> 00:17:15,640 >> Så vad betyder då allt detta, och vad kan vi faktiskt göra med det? 373 00:17:15,640 --> 00:17:19,124 Låt oss faktiskt ta en titt på ett program. 374 00:17:19,124 --> 00:17:21,290 Så jag kommer att öppna upp Själva miljön här, 375 00:17:21,290 --> 00:17:23,894 vilket är bara vår Chrome webbläsare, vilket kan vara Firefox, 376 00:17:23,894 --> 00:17:26,640 kan vara Internet Explorer, eller någon annan webbläsare samt. 377 00:17:26,640 --> 00:17:28,400 Det är fullt screenas här för tillfället. 378 00:17:28,400 --> 00:17:31,580 Och jag vill faktiskt retas isär vad detta program var. 379 00:17:31,580 --> 00:17:36,170 Så låt oss ta en titt, genom att zooma in upp top, på vad jag gjorde och hur jag kom hit. 380 00:17:36,170 --> 00:17:38,315 Så här är de exakta Samma rader kod. 381 00:17:38,315 --> 00:17:40,440 Så detta är ett uttalande, som ni nämnde tidigare. 382 00:17:40,440 --> 00:17:42,580 Funktionen som säger hej. 383 00:17:42,580 --> 00:17:45,870 Klammerparenteserna, på line fyra och linjen sex, 384 00:17:45,870 --> 00:17:49,290 förmodligen slags omsluta den linjen att associera det 385 00:17:49,290 --> 00:17:50,890 med kärnan i mitt program. 386 00:17:50,890 --> 00:17:54,890 Så ja, det här sökordet på, det är där uppe på rad tre, 387 00:17:54,890 --> 00:17:59,450 du kan tänka på det som motsvarande av att när grön flagg klickade, 388 00:17:59,450 --> 00:18:01,080 blockera i Scratch. 389 00:18:01,080 --> 00:18:05,280 Så det är allt vi har här, är när gröna flaggan klickade, skriva ut, eller säga, 390 00:18:05,280 --> 00:18:06,700 Hej världen. 391 00:18:06,700 --> 00:18:11,210 >> Men låt oss ta en gissning, nu, vad denna första, mer svårbegripliga linje är. 392 00:18:11,210 --> 00:18:15,100 Sharp innefattar, öppen vinklad fäste, standard I / O punkt h, 393 00:18:15,100 --> 00:18:17,320 stäng vinklad konsol. 394 00:18:17,320 --> 00:18:19,850 Vad är det kanske gör, speciellt om du har programmerat 395 00:18:19,850 --> 00:18:21,390 tidigare i något annat språk. 396 00:18:21,390 --> 00:18:21,890 Yeah? 397 00:18:21,890 --> 00:18:22,765 >> PUBLIK: [OHÖRBAR] 398 00:18:22,765 --> 00:18:25,095 399 00:18:25,095 --> 00:18:25,970 DAVID J. MALAN: Ja. 400 00:18:25,970 --> 00:18:26,470 Exakt. 401 00:18:26,470 --> 00:18:29,455 Så det här ger dig tillgång till en bibliotek, så att säga, av funktioner. 402 00:18:29,455 --> 00:18:31,830 Och ett bibliotek med funktioner är funktioner som någon annan 403 00:18:31,830 --> 00:18:34,406 skrev antingen nyligen eller för länge sedan, så att du 404 00:18:34,406 --> 00:18:35,780 behöver inte uppfinna hjulet på nytt. 405 00:18:35,780 --> 00:18:39,020 Till exempel, gör vi inte måste veta, 2015, 406 00:18:39,020 --> 00:18:42,280 hur man skriver kod som sätter ett tecken på min skärm. 407 00:18:42,280 --> 00:18:44,820 Någon annan har räknat att ut med printf funktionen 408 00:18:44,820 --> 00:18:47,280 så att jag kan sortera abstrakt bort från det, eller skikt 409 00:18:47,280 --> 00:18:49,350 ovanpå hans eller hennes kod, och nu bara ta 410 00:18:49,350 --> 00:18:52,760 för givet att alla program jag skriver kan skriva ut något till skärmen. 411 00:18:52,760 --> 00:18:58,150 Så denna första raden där i steg ett inkluderar den så kallade huvudfil 412 00:18:58,150 --> 00:18:59,980 för standardbiblioteket. 413 00:18:59,980 --> 00:19:02,630 Så ser det språk som vi nu arbetar 414 00:19:02,630 --> 00:19:05,010 hade en standard bibliotek med massor av funktioner. 415 00:19:05,010 --> 00:19:07,240 Printf är en av dem, och den första kodrad 416 00:19:07,240 --> 00:19:10,040 innebär ge mig tillgång till dessa funktioner, så att jag 417 00:19:10,040 --> 00:19:12,300 behöver inte uppfinna det hjulet. 418 00:19:12,300 --> 00:19:15,940 >> Nu går vi till botten fönster och göra exakt vad jag gjorde innan. 419 00:19:15,940 --> 00:19:18,520 För en stund sedan, när jag var vinande genom koden, 420 00:19:18,520 --> 00:19:24,540 skriva ut för första gången, Jag mycket snabbt skrivit, gör hej. 421 00:19:24,540 --> 00:19:28,250 Vad handlade det om du skulle gissa? 422 00:19:28,250 --> 00:19:29,150 Vad gjorde jag? 423 00:19:29,150 --> 00:19:29,649 Yeah? 424 00:19:29,649 --> 00:19:31,810 425 00:19:31,810 --> 00:19:32,310 Det är ingen fara. 426 00:19:32,310 --> 00:19:32,970 Det är ok. 427 00:19:32,970 --> 00:19:33,492 Yeah. 428 00:19:33,492 --> 00:19:34,450 PUBLIK: Bygg den. 429 00:19:34,450 --> 00:19:34,700 DAVID J. MALAN: Ja. 430 00:19:34,700 --> 00:19:35,770 Det var bara att kompilera det. 431 00:19:35,770 --> 00:19:36,270 Höger? 432 00:19:36,270 --> 00:19:39,280 Även om detta är helt obekant till dig, det är ganska engelska som. 433 00:19:39,280 --> 00:19:41,155 Det är verkligen inte nollor och sådana, så jag fortfarande 434 00:19:41,155 --> 00:19:44,220 måste köra det genom att så kallade program, en kompilator, är att gå 435 00:19:44,220 --> 00:19:46,060 att ta det som indata och producerar utdata. 436 00:19:46,060 --> 00:19:48,270 Och åtminstone för tillfället, i denna Linux-miljö, 437 00:19:48,270 --> 00:19:51,030 men detta är inte en förutsättning, detta är bara där vi ska börja, 438 00:19:51,030 --> 00:19:53,960 du vanligtvis interagerar med datorsystem som denna 439 00:19:53,960 --> 00:19:55,770 genom en så kallad kommandoraden. 440 00:19:55,770 --> 00:19:57,790 Så med en blinkande snabb och tangentbordet, 441 00:19:57,790 --> 00:20:01,630 och inte så mycket musen och inte så mycket fönster och ikoner och menyer, 442 00:20:01,630 --> 00:20:02,980 snarare allt är text. 443 00:20:02,980 --> 00:20:06,180 Och även om det känns, först blick, kanske, som ett steg bakåt, 444 00:20:06,180 --> 00:20:08,437 det är faktiskt en mycket mer kraftfullt och uttrycksfullt sätt 445 00:20:08,437 --> 00:20:10,270 att styra en dator särskilt som du, 446 00:20:10,270 --> 00:20:12,950 själv, blivit mer bekväma från mindre. 447 00:20:12,950 --> 00:20:16,790 Det kommer att låta dig göra en hel del fler saker än vad Microsoft 448 00:20:16,790 --> 00:20:20,390 eller Apple gör att du kan göra med deras grafiska operativsystem. 449 00:20:20,390 --> 00:20:23,270 >> Så när jag slog in, nu, ingenting händer den här gången 450 00:20:23,270 --> 00:20:25,960 eftersom tydligen program hej är aktuell. 451 00:20:25,960 --> 00:20:28,250 Och vad var kommandot Jag sprang efter det? 452 00:20:28,250 --> 00:20:32,370 Dot snedstreck hej och hej världen. 453 00:20:32,370 --> 00:20:34,350 Nu ska vi ta ett steg tillbaka för bara ett ögonblick. 454 00:20:34,350 --> 00:20:39,510 Det visar sig att göra hej är bara en förenklat sätt att sammanställa ett program. 455 00:20:39,510 --> 00:20:41,670 Låt oss bara införa en bit av jargong, 456 00:20:41,670 --> 00:20:43,470 men sedan flytta bort från det, eftersom det inte 457 00:20:43,470 --> 00:20:46,640 så intressant för dagens ändamål. 458 00:20:46,640 --> 00:20:51,000 Kompilatorn vi ska börja använda kallas Clang, för C-språk. 459 00:20:51,000 --> 00:20:54,280 Och detta är ett program som körs just som vi gjorde på kommandoraden där. 460 00:20:54,280 --> 00:20:56,580 Och så om jag vill sammanställa ett program som jag 461 00:20:56,580 --> 00:21:00,790 har skrivit i en fil som heter hello dot c, jag bokstavligen bara skriva klang hello c 462 00:21:00,790 --> 00:21:02,100 ange. 463 00:21:02,100 --> 00:21:04,880 >> Det roliga är, av historiska skäl, 464 00:21:04,880 --> 00:21:07,750 om jag inte anger Programmets namn 465 00:21:07,750 --> 00:21:11,690 att jag vill skriva ut, om jag inte ange ett filnamn för de nollor 466 00:21:11,690 --> 00:21:14,990 och sådana, en mycket konstig konvention antogs år sedan 467 00:21:14,990 --> 00:21:17,390 där det kändes typ av en bra svar på den tiden, 468 00:21:17,390 --> 00:21:21,650 bra låt oss bara godtyckligt ringa första program vi sammanställa en prick ut. 469 00:21:21,650 --> 00:21:22,900 A kommer först i alfabetet. 470 00:21:22,900 --> 00:21:23,920 Ut, är det utgång. 471 00:21:23,920 --> 00:21:26,210 Så vi kommer att kalla programmet som standard en punkt ut. 472 00:21:26,210 --> 00:21:29,550 Och det är bra, för om jag vill köra programmet i denna textbaserad 473 00:21:29,550 --> 00:21:33,590 miljö, jag skriver bara dot slash en prick ut anger. 474 00:21:33,590 --> 00:21:35,250 Och det skulle köras precis som tidigare. 475 00:21:35,250 --> 00:21:36,880 Så låt oss se att riktigt snabbt. 476 00:21:36,880 --> 00:21:40,370 >> Så om jag går tillbaka till min källkod i CS50 IDE, 477 00:21:40,370 --> 00:21:47,860 och jag istället göra detta, klang hello barnsäng c anger, märka ingenting verkar hända, 478 00:21:47,860 --> 00:21:49,790 men nästan alltid i denna Linux-miljö, 479 00:21:49,790 --> 00:21:53,310 när inget dåligt verkar hända, att betyder något bra faktiskt hände. 480 00:21:53,310 --> 00:21:56,270 Om du inte ser ett fel meddelande, är allt förmodligen väl. 481 00:21:56,270 --> 00:22:01,930 Och faktiskt, om jag nu gör dot slash en punkt out in, jag har kört min samma program. 482 00:22:01,930 --> 00:22:04,610 Jag har fortfarande hello programmet från tidigare eftersom faktiskt, det är 483 00:22:04,610 --> 00:22:07,430 kommer att bli så mycket trevligare bara skriver att i stället för att komma ihåg 484 00:22:07,430 --> 00:22:10,240 dessa besvärjelsear av kommandon, men låt oss se hur vi 485 00:22:10,240 --> 00:22:12,890 kan förbättra detta, ändå. 486 00:22:12,890 --> 00:22:15,340 >> Så detta är kommandot att kompilera koden. 487 00:22:15,340 --> 00:22:19,100 Detta är kommandot för att köra den kompilerade koden därefter. 488 00:22:19,100 --> 00:22:20,546 Hur kan jag ange ett filnamn? 489 00:22:20,546 --> 00:22:22,670 Bra låt oss bara införa ytterligare en bit av jargong. 490 00:22:22,670 --> 00:22:24,461 När du är i detta textbaserad miljö, 491 00:22:24,461 --> 00:22:27,400 du kommer att vilja specificera saker som kallas kommandoradsargument. 492 00:22:27,400 --> 00:22:31,380 Vilket är bara ett fint sätt att säga, andra ord på frågan som 493 00:22:31,380 --> 00:22:33,860 justera beteendet hos oavsett program du kör. 494 00:22:33,860 --> 00:22:37,320 Så specifikt program jag kör, genom att skriva namnet klang, 495 00:22:37,320 --> 00:22:38,504 är program som heter Clang. 496 00:22:38,504 --> 00:22:40,920 Så detta är eller den gamla skolan motsvarande dubbelklicka 497 00:22:40,920 --> 00:22:42,860 Microsoft Word eller ikon några programmets. 498 00:22:42,860 --> 00:22:46,360 Jag stället bara skriva sitt namn, men i denna version av kommandot, 499 00:22:46,360 --> 00:22:51,334 Jag har sedan streck o utrymme hello utrymme hello dot c. 500 00:22:51,334 --> 00:22:53,500 Så även om du har aldrig spelat i den här världen innan, 501 00:22:53,500 --> 00:22:58,160 bara ta en gissning vad inte streck o hej göra? 502 00:22:58,160 --> 00:23:00,620 Eller vad säger den klang att göra? 503 00:23:00,620 --> 00:23:01,386 Yeah. 504 00:23:01,386 --> 00:23:02,455 >> PUBLIK: [OHÖRBAR] 505 00:23:02,455 --> 00:23:03,330 DAVID J. MALAN: Ja. 506 00:23:03,330 --> 00:23:08,614 Det sätter bara filens utdata till vara hej i stället för den sillier en punkt ut. 507 00:23:08,614 --> 00:23:09,780 Och, ja, låt oss prova det här. 508 00:23:09,780 --> 00:23:14,250 Så om jag nu gör, först låt oss göra detta, r m hej. 509 00:23:14,250 --> 00:23:15,590 Det är bort. 510 00:23:15,590 --> 00:23:18,450 Och det kommer att säga ta bort vanlig fil hej, som 511 00:23:18,450 --> 00:23:22,210 är onödigt svårbegriplig, men det bara medel göra du vill ta bort filen, 512 00:23:22,210 --> 00:23:23,230 och jag skriver y för ja. 513 00:23:23,230 --> 00:23:27,340 Och lägg märke till, om du blick på toppen vänster, gjorde det försvinna från uppe. 514 00:23:27,340 --> 00:23:32,180 Låt mig nu göra klang streck o, och Jag kommer att gå vidare och göra hej, 515 00:23:32,180 --> 00:23:34,890 med stora bokstäver, hej dot c. 516 00:23:34,890 --> 00:23:37,775 Nu, om jag gör dot slash Hej, vad skulle du förväntar dig? 517 00:23:37,775 --> 00:23:41,240 518 00:23:41,240 --> 00:23:42,430 >> Kanske är det stora och små bokstäver. 519 00:23:42,430 --> 00:23:43,070 Kanske är det inte. 520 00:23:43,070 --> 00:23:44,030 Låt oss se. 521 00:23:44,030 --> 00:23:45,230 Ingen sådan fil eller katalog. 522 00:23:45,230 --> 00:23:47,438 Och vi kan slags fuska genom att bara titta på upp till vänster. 523 00:23:47,438 --> 00:23:49,630 Vad gjorde jag självklart spara programmet som? 524 00:23:49,630 --> 00:23:51,070 Alla mössor hej. 525 00:23:51,070 --> 00:23:53,020 Så ja, det är att gå att göra en skillnad. 526 00:23:53,020 --> 00:23:54,540 Så nu hallå världen är tillbaka. 527 00:23:54,540 --> 00:23:56,969 Nu är alla fina och bra, och alla mycket mind-bedövande, 528 00:23:56,969 --> 00:23:59,760 till slags fastna i dessa detaljer, men att förstå dem 529 00:23:59,760 --> 00:24:00,500 Det är bra. 530 00:24:00,500 --> 00:24:02,675 >> Typing in dessa alltmer långa besvärjelsear 531 00:24:02,675 --> 00:24:05,980 kommer inte att vara särskilt roligt, så människor i världen 532 00:24:05,980 --> 00:24:08,260 uppfann ett annat program, för några år sedan, som kallas 533 00:24:08,260 --> 00:24:12,190 gör, att helt enkelt låter dig skriva make, 534 00:24:12,190 --> 00:24:14,530 namnet på programmet du vill göra, och göra 535 00:24:14,530 --> 00:24:18,580 är smart att den kommer att se ut den aktuella mappen, aka katalog, 536 00:24:18,580 --> 00:24:21,440 och om du har en fil kallas hello dot c, 537 00:24:21,440 --> 00:24:25,800 det är filen det kommer att sammanställa för dig i ett program som heter hello. 538 00:24:25,800 --> 00:24:29,950 Så det är ett mycket enklare sätt att gör det mer kryptiska kommandon 539 00:24:29,950 --> 00:24:30,800 att vi gjorde tidigare. 540 00:24:30,800 --> 00:24:34,080 Och vi har förkonfigurerade CS50 IDE att veta 541 00:24:34,080 --> 00:24:38,560 att den bör göra streck O och ett antal andra flaggor, eller kommandoradsargumenten, 542 00:24:38,560 --> 00:24:40,670 att vi får se snart. 543 00:24:40,670 --> 00:24:43,700 >> Men låt oss nu faktiskt göra något mer intressant. 544 00:24:43,700 --> 00:24:46,950 Bara skriva ut hallå världen alla tiden är inte så övertygande. 545 00:24:46,950 --> 00:24:52,280 Så låt mig gå vidare och förändring detta program och säga, hej David. 546 00:24:52,280 --> 00:24:54,120 Nu ska jag gå här nere. 547 00:24:54,120 --> 00:24:57,360 Jag kommer att gå vidare och göra göra hej. 548 00:24:57,360 --> 00:25:00,652 Och återigen nu du ser gör visar dig längre 549 00:25:00,652 --> 00:25:03,360 sekvens av kommandon som det är göra eftersom vi har förkonfigurerade 550 00:25:03,360 --> 00:25:05,200 det på det sättet, men vi behöver inte oroa dig för nu 551 00:25:05,200 --> 00:25:10,735 vad det gör annat än det är sammanställa dot slash hej, hallå världen. 552 00:25:10,735 --> 00:25:14,969 553 00:25:14,969 --> 00:25:15,510 Vad är fel? 554 00:25:15,510 --> 00:25:16,177 Yeah. 555 00:25:16,177 --> 00:25:17,370 >> PUBLIK: [OHÖRBAR] 556 00:25:17,370 --> 00:25:18,203 >> DAVID J. MALAN: Ja. 557 00:25:18,203 --> 00:25:19,600 Så, noobie misstag. 558 00:25:19,600 --> 00:25:22,394 Jag märker att detta är super subtila, men asterisken här, på fliken, 559 00:25:22,394 --> 00:25:25,060 betyder bara att du inte har sparat det, och webbläsare och andra program 560 00:25:25,060 --> 00:25:25,930 gör det ibland. 561 00:25:25,930 --> 00:25:27,939 Så kontroll s eller kommandot s ska spara det. 562 00:25:27,939 --> 00:25:29,730 Låt mig nu gå vidare och kör programmet. 563 00:25:29,730 --> 00:25:33,360 564 00:25:33,360 --> 00:25:34,260 Kompileras. 565 00:25:34,260 --> 00:25:36,050 Rätt, så det är en flerstegsprocess. 566 00:25:36,050 --> 00:25:39,400 Ingen som är särskilt komplicerad, men helst ändra vi filen 567 00:25:39,400 --> 00:25:43,450 vi behöver ändra den resulterande ettor och nollor, och dot slash hej. 568 00:25:43,450 --> 00:25:43,950 Wow. 569 00:25:43,950 --> 00:25:46,450 Så det här är mycket underwhelming att vi bara skrivas ut redan. 570 00:25:46,450 --> 00:25:48,360 Låt oss göra saker lite mer dynamiskt nu. 571 00:25:48,360 --> 00:25:52,280 >> Jo det visar sig, som gillar Scratch, C stöder variabler. 572 00:25:52,280 --> 00:25:54,790 Och det visar sig om du vill att ha en variabel som lagrar, 573 00:25:54,790 --> 00:25:57,300 inte ett nummer som vi typiskt gjorde med Scratch, 574 00:25:57,300 --> 00:26:01,300 men som ett ord, eller en fras eller ett namn, du 575 00:26:01,300 --> 00:26:04,837 kan ange en variabel att vara av typen sträng. 576 00:26:04,837 --> 00:26:06,670 Så vi får se mer av dessa på bara ett ögonblick, 577 00:26:06,670 --> 00:26:09,090 men det visar sig att C, och en hel del språk som det, 578 00:26:09,090 --> 00:26:11,240 har mycket specifika typer av variabler. 579 00:26:11,240 --> 00:26:13,810 Det är inte precis som algebra, där du får en x, y och z 580 00:26:13,810 --> 00:26:16,940 och de är bara alltid siffror, i ett programmeringsspråk 581 00:26:16,940 --> 00:26:20,030 Du kan lagra nummer, du kan lagra enskilda tecken, 582 00:26:20,030 --> 00:26:24,619 du kan lagra hela ord, du kan lagra hela bilder, hela ljudfiler, 583 00:26:24,619 --> 00:26:25,160 och liknande. 584 00:26:25,160 --> 00:26:28,362 Så vi måste ange vad vilken typ av vår variabel är. 585 00:26:28,362 --> 00:26:31,570 Och enligt praxis ska jag ringa min variabla s bara för att det är kortfattad, 586 00:26:31,570 --> 00:26:33,510 och s står för sträng. 587 00:26:33,510 --> 00:26:36,400 >> Och sedan ska jag förvara insidan av denna variabel, 588 00:26:36,400 --> 00:26:39,570 precis som med Scratch när jag använder den inställda blocket, 589 00:26:39,570 --> 00:26:41,950 Jag kommer att använda tilldelningsoperatorn i C, 590 00:26:41,950 --> 00:26:45,290 vilket fint nog är lika underteckna, men likhetstecknet gör detta. 591 00:26:45,290 --> 00:26:53,220 Det rör sig något från höger in den vänstra sidan av uttrycket. 592 00:26:53,220 --> 00:26:57,170 Så vad jag har gjort, att vara tydlig i line fem är jag har deklarerat en variabel. 593 00:26:57,170 --> 00:27:01,284 Jag har sagt datorn, ge mig minne för en variabel, kalla det är, 594 00:27:01,284 --> 00:27:03,950 och veta i förväg att jag kommer att sätta en sträng i den. 595 00:27:03,950 --> 00:27:05,950 Och en sträng är bara en sekvens av tecken. 596 00:27:05,950 --> 00:27:09,190 Det är ett ord eller en fras, eller punkt, men det är en sekvens av tecken. 597 00:27:09,190 --> 00:27:10,610 Det är inte tal. 598 00:27:10,610 --> 00:27:13,800 Vad sträng jag kommer att vara ibruktagande den variabeln? 599 00:27:13,800 --> 00:27:16,185 Tja, uppenbarligen citera unquote, "Hannah". 600 00:27:16,185 --> 00:27:17,810 Nu märker det mönster som framväxande. 601 00:27:17,810 --> 00:27:19,260 Det finns en vänster uttryck. 602 00:27:19,260 --> 00:27:21,810 Det finns en höger uttryck, åtskilda av likhetstecknet. 603 00:27:21,810 --> 00:27:24,390 Och bara ta en gissning, om obekant ändå, 604 00:27:24,390 --> 00:27:27,430 med vad semikolon gör. 605 00:27:27,430 --> 00:27:28,865 Vad är det förmodligen gör för oss? 606 00:27:28,865 --> 00:27:29,365 Yeah? 607 00:27:29,365 --> 00:27:29,840 >> PUBLIK: [OHÖRBAR] 608 00:27:29,840 --> 00:27:29,980 >> DAVID J. MALAN: Ja. 609 00:27:29,980 --> 00:27:31,170 Det är bara att avsluta linjen. 610 00:27:31,170 --> 00:27:31,669 Höger? 611 00:27:31,669 --> 00:27:34,260 Datorerna vill vara rakt på sak berättade, bokstavligen, vad de ska göra. 612 00:27:34,260 --> 00:27:36,343 Liksom jordnötssmör och gelé smörgås exempel, 613 00:27:36,343 --> 00:27:39,360 Om du inte anger exakt vad du tänker, 614 00:27:39,360 --> 00:27:42,190 det kan lämnas till dom eller fel. 615 00:27:42,190 --> 00:27:44,890 Semikolon innebär det är det för detta kommando. 616 00:27:44,890 --> 00:27:48,310 Det är super exakt, och det är en mycket enkel sak att lämna ut. 617 00:27:48,310 --> 00:27:52,240 Så nu detta program inte verkar beter sig annorlunda förrän jag 618 00:27:52,240 --> 00:27:53,500 göra den mer dynamisk. 619 00:27:53,500 --> 00:27:57,107 Så i stället för hårt kunde mitt eget namn, låt mig uttrycka en platshållare värde. 620 00:27:57,107 --> 00:28:00,190 Och det visar sig att, och jag vet att detta från att ha läst dokumentationen, 621 00:28:00,190 --> 00:28:04,080 och använde funktion för år, att printf var avsedd att vara dynamisk. 622 00:28:04,080 --> 00:28:07,510 Du behöver inte veta i förväg vilka ord du vill sätta i det. 623 00:28:07,510 --> 00:28:11,290 Du kan i stället ha en platshållare, som procent s, som 624 00:28:11,290 --> 00:28:15,500 kommer att tala om dator, lägg en sträng här. 625 00:28:15,500 --> 00:28:17,740 >> Vilken sträng vill vi sätta dit? 626 00:28:17,740 --> 00:28:22,430 Will visar sig att mellan dessa parentes, som minns, avgränsa 627 00:28:22,430 --> 00:28:28,020 ingången till en funktion, om du har kommaseparerad lista över saker här, 628 00:28:28,020 --> 00:28:31,790 vi faktiskt passera i multipel insignaler till en funktion. 629 00:28:31,790 --> 00:28:33,901 Så precis som några Scratch block, kanske du inte 630 00:28:33,901 --> 00:28:36,150 har spelat med dem för dina projekt ännu eller överhuvudtaget, 631 00:28:36,150 --> 00:28:38,250 vissa Scratch block har två ingångar. 632 00:28:38,250 --> 00:28:41,220 Två vita rutor du kan skriva siffror eller ord i. 633 00:28:41,220 --> 00:28:45,210 Så för att inte C har funktioner som printf som kan ta två ingångar. 634 00:28:45,210 --> 00:28:48,050 Och återigen, denna kommatecken separerar dem. 635 00:28:48,050 --> 00:28:51,070 Så i engelska, igen även om du aldrig programmeras före, 636 00:28:51,070 --> 00:28:55,320 av den logiken printf är en funktion, tar två ingångar, varav en 637 00:28:55,320 --> 00:28:58,810 är en platshållare, vad skulle du hoppas printf kommer att göra med denna ingång? 638 00:28:58,810 --> 00:29:01,470 639 00:29:01,470 --> 00:29:03,220 Det kommer att säga hej Hannah, förhoppningsvis. 640 00:29:03,220 --> 00:29:05,274 Så för att göra detta måste vi spara det. 641 00:29:05,274 --> 00:29:06,190 Jag kommer att zooma ut. 642 00:29:06,190 --> 00:29:10,701 Jag kommer att gå tillbaka hit och säga, gör hej ange. 643 00:29:10,701 --> 00:29:11,200 Oh. 644 00:29:11,200 --> 00:29:14,830 Något är fel, och faktiskt Detta är helt överväldigande. 645 00:29:14,830 --> 00:29:18,400 Jag har sex rader kod och liknande 12 linjer av fel. 646 00:29:18,400 --> 00:29:22,120 Så ser fram emot detta. 647 00:29:22,120 --> 00:29:24,260 Så vad är det som händer här? 648 00:29:24,260 --> 00:29:27,370 Så det bästa tumregel här, speciellt när du börjar ut, 649 00:29:27,370 --> 00:29:29,370 inte bli distraherad av grejer på botten. 650 00:29:29,370 --> 00:29:31,220 Faktum är att jag mycket medvetet bara rullas upp 651 00:29:31,220 --> 00:29:33,930 eftersom det ofta är en dator inte så ljusa på en enhet. 652 00:29:33,930 --> 00:29:35,054 Det kommer att bli förvirrad. 653 00:29:35,054 --> 00:29:37,220 Om det ser en sak som Det förstår inte, 654 00:29:37,220 --> 00:29:40,030 det kan förväxla andra kodrader eftersom felaktiga, 655 00:29:40,030 --> 00:29:41,649 trots att de är helt bra. 656 00:29:41,649 --> 00:29:43,940 Så att du alltid vill arbeta uppifrån och ned genom felen. 657 00:29:43,940 --> 00:29:47,850 Och visserligen är supersvårbegripliga för tillfället. 658 00:29:47,850 --> 00:29:50,830 >> Fel användning av odeklarerat identifierarsträng. 659 00:29:50,830 --> 00:29:52,130 Har jag menar standard i? 660 00:29:52,130 --> 00:29:53,720 Nej, jag menade sträng. 661 00:29:53,720 --> 00:29:55,830 Och det pekar på, kanske är det ett stavfel. 662 00:29:55,830 --> 00:30:00,570 Ungefär som, stavningskontroll i en mycket nördigt sätt, men orsaken här, 663 00:30:00,570 --> 00:30:02,840 och du vet detta bara genom praktiken är 664 00:30:02,840 --> 00:30:06,390 att det visar sig att sträng existerar inte i C. I själva verket, C 665 00:30:06,390 --> 00:30:08,820 är en särskilt gamla språk, och det är mycket låg nivå, 666 00:30:08,820 --> 00:30:11,361 och det gör inte en hel del funktioner att du kanske har vuxit upp 667 00:30:11,361 --> 00:30:14,620 med om du har, i själva verket, programmerad i Java, som några av er har, 668 00:30:14,620 --> 00:30:16,980 men du kan lära den nya saker. 669 00:30:16,980 --> 00:30:20,900 Och faktiskt, har vi gjort detta CS50, även om i slutet av terminen, 670 00:30:20,900 --> 00:30:23,512 alla dessa stödhjul ska ha tagits bort, 671 00:30:23,512 --> 00:30:25,220 vad vi gör i dessa första veckorna 672 00:30:25,220 --> 00:30:29,830 initialt är att vi har också du inkluderar CS50 dot h. 673 00:30:29,830 --> 00:30:31,230 Vilket är en header-fil. 674 00:30:31,230 --> 00:30:32,440 Mer om det i framtiden. 675 00:30:32,440 --> 00:30:36,430 >> Det är en fil som innehåller funktioner att vi har skrivit för dig. 676 00:30:36,430 --> 00:30:39,180 Och bland dessa funktioner är funktioner för att få input 677 00:30:39,180 --> 00:30:43,520 från användaren, som strängar, och siffror och reella tal, och mycket mer. 678 00:30:43,520 --> 00:30:45,550 Men den har också ett par genvägar. 679 00:30:45,550 --> 00:30:48,200 Den definierar en Boolean som en datatyp. 680 00:30:48,200 --> 00:30:50,340 C har inte sant eller falskt. 681 00:30:50,340 --> 00:30:53,880 Men vi kan ge det begreppet sant eller falskt genom detta bibliotek. 682 00:30:53,880 --> 00:30:57,670 Och det inte heller har en sträng inbyggd tills vi ta med den raden. 683 00:30:57,670 --> 00:31:01,090 Så här kodraden berättar kompilatorn, hej, Clang, titta 684 00:31:01,090 --> 00:31:03,570 i den här filen för en hel gäng kod som CS50 685 00:31:03,570 --> 00:31:06,330 har skrivit så att alla som använder den här filen 686 00:31:06,330 --> 00:31:09,330 kan ta för givet funktioner som de har lagt till. 687 00:31:09,330 --> 00:31:11,220 >> Så nu vill jag gå vidare och rensa skärmen, 688 00:31:11,220 --> 00:31:14,178 och om nyfiken Jag säger bara kontroll l varje gång för att rensa skärmen, 689 00:31:14,178 --> 00:31:15,500 eller du kan skriva klart. 690 00:31:15,500 --> 00:31:19,220 Jag kommer bara att gå vidare nu och typ gör hej, och allt är bra. 691 00:31:19,220 --> 00:31:22,550 Fortfarande en hemlig utgång, men det är inte ett felaktigt meddelande. 692 00:31:22,550 --> 00:31:28,300 Nu om jag gör dot snedstreck Hej, och som en åt sidan, är dot slash obekant för de flesta. 693 00:31:28,300 --> 00:31:30,430 Det betyder bara, punktorgan den aktuella katalogen. 694 00:31:30,430 --> 00:31:33,120 Så om du någonsin använt DOS eller Linux eller Unix 695 00:31:33,120 --> 00:31:35,410 du kanske har gjort något som cd dot dot, där 696 00:31:35,410 --> 00:31:39,220 dot dot betyder gå bakåt i tid, eller gå bakåt eller högre upp 697 00:31:39,220 --> 00:31:40,370 i din katalog. 698 00:31:40,370 --> 00:31:43,090 Dot betyder bara titta i den aktuella katalogen. 699 00:31:43,090 --> 00:31:45,670 Jag vill hej, vilket är rätt här. 700 00:31:45,670 --> 00:31:47,750 Och faktiskt, nu hälsar Hannah. 701 00:31:47,750 --> 00:31:51,120 Och om jag ändrar det igen Maria, kompilera 702 00:31:51,120 --> 00:31:55,650 det skulle göra hej, pricka snedstreck hej, håller programmet förändras. 703 00:31:55,650 --> 00:31:58,060 >> Men detta är fortfarande en ganska dumt program. 704 00:31:58,060 --> 00:32:00,972 Om jag vill skicka det här programmet, eller ge den till en vän, 705 00:32:00,972 --> 00:32:03,430 eller ge den till Maria eller Hannah för den delen, det är bra. 706 00:32:03,430 --> 00:32:07,300 Jag kan skräddarsy den för dem båda, men det kommer aldrig att vara dynamisk. 707 00:32:07,300 --> 00:32:10,870 De kan inte ändra det när det är sammanställt ner i dessa nollor och ettor. 708 00:32:10,870 --> 00:32:12,350 Så vad vi gjorde något smartare? 709 00:32:12,350 --> 00:32:17,100 Tänk om, i stället för hårdkodning i programmet denna personens namn, 710 00:32:17,100 --> 00:32:20,890 vad händer om vi får bara strängen på begäran? 711 00:32:20,890 --> 00:32:22,430 >> Så med andra ord, låt mig göra det här. 712 00:32:22,430 --> 00:32:24,030 Jag kommer att kompilera programmet. 713 00:32:24,030 --> 00:32:25,710 Och låt mig zooma in längst ner nu. 714 00:32:25,710 --> 00:32:29,920 Gör hej punkt snedstreck hej. 715 00:32:29,920 --> 00:32:31,710 Nu ingenting händer. 716 00:32:31,710 --> 00:32:35,860 Kan vi få en snabb volontär att få något att hända? 717 00:32:35,860 --> 00:32:36,360 Kom upp. 718 00:32:36,360 --> 00:32:37,020 Vad heter du? 719 00:32:37,020 --> 00:32:37,445 >> PANCHO: Pancho. 720 00:32:37,445 --> 00:32:38,361 >> David J. MALAN: Pacho? 721 00:32:38,361 --> 00:32:39,609 Kom upp. 722 00:32:39,609 --> 00:32:42,150 När du får upp här, är detta kommer att bli mycket underwhelming, 723 00:32:42,150 --> 00:32:44,060 men det är mer intressant än mig att skriva det. 724 00:32:44,060 --> 00:32:49,007 Om du vill gå vidare och skriva ditt namn, jag gjorde detta program just för dig. 725 00:32:49,007 --> 00:32:49,840 Skriv bara ditt namn. 726 00:32:49,840 --> 00:32:52,380 727 00:32:52,380 --> 00:32:53,900 Enter. 728 00:32:53,900 --> 00:32:54,489 Underbart. 729 00:32:54,489 --> 00:32:55,780 Okej, tack så mycket. 730 00:32:55,780 --> 00:32:56,708 >> PANCHO: Tack så mycket. 731 00:32:56,708 --> 00:32:57,636 >> David J. MALAN: OK. 732 00:32:57,636 --> 00:32:59,028 >> [Applåder] 733 00:32:59,028 --> 00:33:00,884 734 00:33:00,884 --> 00:33:01,840 >> Det var mycket vänlig. 735 00:33:01,840 --> 00:33:03,145 Här får du. 736 00:33:03,145 --> 00:33:03,770 Vad gjorde vi? 737 00:33:03,770 --> 00:33:05,930 Så vi slutligen, åtminstone, gjorde detta program dynamisk. 738 00:33:05,930 --> 00:33:08,400 Nu är det fortfarande säkert avsiktligt underwhelming, 739 00:33:08,400 --> 00:33:11,480 men vi har äntligen möjlighet nu att skriva kod i förväg, mycket 740 00:33:11,480 --> 00:33:13,770 som författarna printf, och sedan dynamiskt 741 00:33:13,770 --> 00:33:17,550 att anpassa sin beroende på insignalen är vi handed, antingen av programmeraren, 742 00:33:17,550 --> 00:33:20,610 eller av det mänskliga som är faktiskt interagerar med programmet. 743 00:33:20,610 --> 00:33:22,990 Så låt oss faktiskt nu försöka att göra några andra konstruktioner 744 00:33:22,990 --> 00:33:26,625 och se om vi inte kan göra programmen sig mer sofistikerade. 745 00:33:26,625 --> 00:33:29,250 Så låt oss gå vidare och istället för skriver detta en från grunden, 746 00:33:29,250 --> 00:33:31,540 Jag kommer att gå in i dagens källkod, och allt detta 747 00:33:31,540 --> 00:33:34,290 finns på kursens webbplats, och du kan dra och släppa den 748 00:33:34,290 --> 00:33:36,590 i din egen miljö komma fredag ​​gång problemet 749 00:33:36,590 --> 00:33:38,506 set 1 ger dig instruktioner, eller du kan 750 00:33:38,506 --> 00:33:41,200 gör det på kommandoraden som bra, men mer att komma in p set 1. 751 00:33:41,200 --> 00:33:44,940 >> Låt oss se vad som finns i det här programmet här kallas, adderaren punkt c. 752 00:33:44,940 --> 00:33:47,970 Nu har jag redan kommenterat det, men vad är nytt? 753 00:33:47,970 --> 00:33:51,230 Vid första anblicken, vilken linje kod är helt nytt? 754 00:33:51,230 --> 00:33:53,930 755 00:33:53,930 --> 00:33:56,780 Förmodligen inte i grunden obekant nu. 756 00:33:56,780 --> 00:33:58,417 >> PUBLIK: [OHÖRBAR] 757 00:33:58,417 --> 00:34:00,250 DAVID J. MALAN: Ja, så int x lika få n. 758 00:34:00,250 --> 00:34:03,760 Vi har aldrig sett något av detta tidigare, men int är förmodligen 759 00:34:03,760 --> 00:34:08,179 symbolen för vilken typ av variabel, [? ifrån?] ett heltal. 760 00:34:08,179 --> 00:34:09,040 Så int för heltal. 761 00:34:09,040 --> 00:34:11,420 Det är bara att vara mer kortfattad. x är bara godtyckligt. 762 00:34:11,420 --> 00:34:13,920 X och y och z är fortfarande ganska rimligt för siffror, 763 00:34:13,920 --> 00:34:16,790 men generellt vi kommer att använda ord en gång våra program får mer komplex. 764 00:34:16,790 --> 00:34:18,940 Få int, naturligtvis, likt få sträng, 765 00:34:18,940 --> 00:34:21,629 är förmodligen kommer att få en int från användaren, 766 00:34:21,629 --> 00:34:23,670 och sedan ska vi göra samma sak med y. 767 00:34:23,670 --> 00:34:27,610 Och tydligen, även om det sista raden, 24, ser mer komplex, 768 00:34:27,610 --> 00:34:32,679 det kommer att säga summan av detta och det är det annan sak. 769 00:34:32,679 --> 00:34:35,840 >> Och tillkännagivande procent i förmodligen betecknar vad? 770 00:34:35,840 --> 00:34:38,190 Vilken roll spelar procent Jag tydligen tjäna? 771 00:34:38,190 --> 00:34:40,739 772 00:34:40,739 --> 00:34:41,719 Det är bara platshållare. 773 00:34:41,719 --> 00:34:42,219 Höger? 774 00:34:42,219 --> 00:34:45,149 Procent s var för sträng, procent i är för heltal. 775 00:34:45,149 --> 00:34:47,690 Det kommer att bli procent f för flyttalsvärde, vilket 776 00:34:47,690 --> 00:34:49,273 är bara ett nummer med ett decimalkomma. 777 00:34:49,273 --> 00:34:50,590 Med andra ord, ett reellt tal. 778 00:34:50,590 --> 00:34:55,270 Så låt oss faktiskt sammanställa denna programmera riktigt snabbt och gör huggorm. 779 00:34:55,270 --> 00:34:57,962 Hoppsan. 780 00:34:57,962 --> 00:34:58,670 Bra tillfälle. 781 00:34:58,670 --> 00:35:02,970 Så märker här, hela tiden mitt användarnamn namn för detta konto jharvard. 782 00:35:02,970 --> 00:35:06,620 Jag är i CS50 IDE, aka IDE50. 783 00:35:06,620 --> 00:35:11,030 Och nu i blått här är ett omnämnande, men från omgivningen, där jag är. 784 00:35:11,030 --> 00:35:16,050 Och faktiskt, om jag zooma upp till toppen Här märker att jag har en IDE50 785 00:35:16,050 --> 00:35:19,490 och jag ser detta ord, om du typ av vända huvudet åt sidan, arbetsytan. 786 00:35:19,490 --> 00:35:23,890 I ett nötskal, det faktum att Jag ser tilde snedstreck arbetsyta 787 00:35:23,890 --> 00:35:26,910 betyder att i denna text baserade kommando miljö, 788 00:35:26,910 --> 00:35:32,300 Jag är i text motsvarande Denna grafiska mapp upp här. 789 00:35:32,300 --> 00:35:35,730 Så när jag gör dot slash huggorm, det säger ingen regel 790 00:35:35,730 --> 00:35:37,372 att göra mål huggorm stopp. 791 00:35:37,372 --> 00:35:39,830 Jag vet inte vad det betyder, men det är dåligt av någon anledning. 792 00:35:39,830 --> 00:35:43,310 Ingen sådan fil eller katalog är ännu mer tydlig. 793 00:35:43,310 --> 00:35:45,670 Var är det då? 794 00:35:45,670 --> 00:35:47,820 Baserat på var jag klickade att öppna filen tidigare. 795 00:35:47,820 --> 00:35:49,442 Var kan det vara? 796 00:35:49,442 --> 00:35:52,050 >> Det är förmodligen i källan en vikt, för onsdagen 797 00:35:52,050 --> 00:35:53,960 och jag kan se det, ja, om jag öppnar det upp. 798 00:35:53,960 --> 00:35:57,220 Det finns huggorm dot c, men i denna text-baserad miljö, 799 00:35:57,220 --> 00:35:59,380 igen, jag måste vara super explicit. 800 00:35:59,380 --> 00:36:03,950 Om jag vill ändra kataloger i källa en onsdag, jag måste skriva, 801 00:36:03,950 --> 00:36:07,210 cd utrymme källan en Onsdag ange och nu 802 00:36:07,210 --> 00:36:09,810 mina snabba förändringar ge mig en visuell kö som 803 00:36:09,810 --> 00:36:12,330 Jag är verkligen någon annanstans i min omgivning, 804 00:36:12,330 --> 00:36:15,710 men nu kan jag gör huggorm, verkar det att fungera, 805 00:36:15,710 --> 00:36:18,190 dot slash huggorm, ge mig ett heltal. 806 00:36:18,190 --> 00:36:19,080 En. 807 00:36:19,080 --> 00:36:20,070 Två. 808 00:36:20,070 --> 00:36:21,630 Summan av ett och två är tre. 809 00:36:21,630 --> 00:36:24,140 Men om jag inte samarbetar, låt oss se vad får int gör. 810 00:36:24,140 --> 00:36:25,200 Ge mig ett heltal. 811 00:36:25,200 --> 00:36:26,590 Nej. 812 00:36:26,590 --> 00:36:27,350 Försök. 813 00:36:27,350 --> 00:36:29,060 OK. 814 00:36:29,060 --> 00:36:30,520 Fine. 815 00:36:30,520 --> 00:36:32,130 50. 816 00:36:32,130 --> 00:36:32,680 50. 817 00:36:32,680 --> 00:36:33,010 Okej. 818 00:36:33,010 --> 00:36:34,055 Så det äntligen samverkar. 819 00:36:34,055 --> 00:36:36,430 Och det är en del av funktionalitet som dessa funktioner 820 00:36:36,430 --> 00:36:37,760 kan ha byggt åt dig. 821 00:36:37,760 --> 00:36:43,330 >> Så inne genomförandet av får int, vad programmering 822 00:36:43,330 --> 00:36:47,990 konstruera från förra veckan är förmodligen i där för att tvinga detta beteende av retry, 823 00:36:47,990 --> 00:36:49,962 Försök igen, försök igen? 824 00:36:49,962 --> 00:36:51,670 Ja, det är nog något slags slinga. 825 00:36:51,670 --> 00:36:54,160 Det kommer att se syntaktiskt skiljer sig från Scratch s block, 826 00:36:54,160 --> 00:36:55,880 men det är verkligen vad som finns inuti filen. 827 00:36:55,880 --> 00:36:58,505 Och i ett par veckor vi ska faktiskt titta på CS50 biblioteket 828 00:36:58,505 --> 00:37:02,000 om vad som finns inuti, men det finns en loop om införande av just detta. 829 00:37:02,000 --> 00:37:04,840 >> Låt oss spela en dum liten spel här med den här filen. 830 00:37:04,840 --> 00:37:06,550 Condition Zero dot c. 831 00:37:06,550 --> 00:37:08,960 Vi ska bara allmänt börja räkna på noll. 832 00:37:08,960 --> 00:37:11,220 Och jag håller rulla förbi några av de saker på toppen. 833 00:37:11,220 --> 00:37:15,390 I blått här, avgränsade med alla av dessa stjärnor och snedstreck, 834 00:37:15,390 --> 00:37:17,310 de av er som programmerar innan, vad är det? 835 00:37:17,310 --> 00:37:18,690 Varför håller vi hoppa över det? 836 00:37:18,690 --> 00:37:19,110 Va? 837 00:37:19,110 --> 00:37:19,490 >> PUBLIK: Det är en kommentar. 838 00:37:19,490 --> 00:37:19,800 >> DAVID J. MALAN: Ja. 839 00:37:19,800 --> 00:37:20,633 Det är bara en kommentar. 840 00:37:20,633 --> 00:37:24,160 Detta är en kommentar till människor att läsa, som i vårt fall, 841 00:37:24,160 --> 00:37:27,120 berättar vad namnet på filen är, som skrev det, och vad den gör, 842 00:37:27,120 --> 00:37:28,610 så att du inte har att läsa igenom koden 843 00:37:28,610 --> 00:37:30,110 att veta vad den här filen handlar om. 844 00:37:30,110 --> 00:37:33,110 Det är bara en beskrivning, men funktionellt är det irrelevant. 845 00:37:33,110 --> 00:37:35,930 Och jag kan även ta bort den från min fil och det har ingen inverkan. 846 00:37:35,930 --> 00:37:38,740 Saftiga linjer är dessa första två här, nu. 847 00:37:38,740 --> 00:37:41,405 int main void motsvarar av vår när grön flagg klickade, 848 00:37:41,405 --> 00:37:44,030 så vi kommer att lämna det vara för i dag, och vi kommer att komma tillbaka, 849 00:37:44,030 --> 00:37:46,940 slutligen, om vad int och ogiltig, men nu, 850 00:37:46,940 --> 00:37:49,500 märke till vad jag har gjort Även här kan du också, 851 00:37:49,500 --> 00:37:51,736 Om du har en in-line kommentera, om du har 852 00:37:51,736 --> 00:37:54,670 a trodde du vill dela om en viss kodrad, 853 00:37:54,670 --> 00:37:58,910 konvent i C är att göra snedstreck snedstreck, och sedan ett par kortfattade ord, 854 00:37:58,910 --> 00:38:01,500 inte en hel mening, i allmänhet inte ett stycke, 855 00:38:01,500 --> 00:38:05,310 som bara förklarar för dig eller din TF, eller andra läsare eller kollegor, 856 00:38:05,310 --> 00:38:06,990 vad din kod gör. 857 00:38:06,990 --> 00:38:10,150 Så i stället för att behöva titta på detta och sluta från ledningarna 858 00:38:10,150 --> 00:38:12,550 nio och 10, vad är Detta gör, i linje åtta 859 00:38:12,550 --> 00:38:14,945 Jag bara ge en kommentar till uppmana användaren att ett heltal, 860 00:38:14,945 --> 00:38:17,820 då jag inte behöver tänka för hårt om vilka linjer nio och tio är. 861 00:38:17,820 --> 00:38:19,720 Jag vet bara att det är vad kollektivt de gör. 862 00:38:19,720 --> 00:38:20,460 >> Hur? 863 00:38:20,460 --> 00:38:22,060 Tja, här är uppmaningen. 864 00:38:22,060 --> 00:38:23,610 Här är det få av int. 865 00:38:23,610 --> 00:38:25,984 Och baserat på tidigare beteende, verkar det som få int 866 00:38:25,984 --> 00:38:29,080 är smart nog att se till att människan samarbetar och ger den 867 00:38:29,080 --> 00:38:30,090 ett heltal. 868 00:38:30,090 --> 00:38:32,270 Men nu ser vi redan. 869 00:38:32,270 --> 00:38:33,740 Och detta påminner om Scratch. 870 00:38:33,740 --> 00:38:36,140 Jag hävdar att jag är analysera användarens input, 871 00:38:36,140 --> 00:38:39,050 men något felaktigt. 872 00:38:39,050 --> 00:38:43,200 Och denna till synes i C är hur vi uttrycker en om annat, en filial, 873 00:38:43,200 --> 00:38:46,320 ett vägskäl, men jag säger något felaktigt. 874 00:38:46,320 --> 00:38:50,470 Vad är fel i det här programmet? 875 00:38:50,470 --> 00:38:51,610 Om ytterligare tillbaka? 876 00:38:51,610 --> 00:38:52,223 Yeah. 877 00:38:52,223 --> 00:38:53,150 >> PUBLIK: [OHÖRBAR] noll. 878 00:38:53,150 --> 00:38:54,025 >> DAVID J. MALAN: Ja. 879 00:38:54,025 --> 00:38:57,630 Så om jag skriver i noll, låt oss betrakta just detta fall, eller hörn fall 880 00:38:57,630 --> 00:38:58,450 om ni så vill. 881 00:38:58,450 --> 00:39:02,790 Så om jag skriver på noll, vilket i block kommer att uppenbarligen ta tag i det? 882 00:39:02,790 --> 00:39:04,660 If eller annat? 883 00:39:04,660 --> 00:39:07,340 Else, och det kommer att säga, du plockat ett negativt tal. 884 00:39:07,340 --> 00:39:10,476 Och faktiskt är noll inte tänkt att vara positivt eller negativt, 885 00:39:10,476 --> 00:39:11,850 och så det skulle vara felaktigt. 886 00:39:11,850 --> 00:39:12,930 Det skulle vara en bugg. 887 00:39:12,930 --> 00:39:14,580 Så hur kan vi fixa det här? 888 00:39:14,580 --> 00:39:16,360 Någon som aldrig har programmerat förut? 889 00:39:16,360 --> 00:39:16,570 Vill du-- 890 00:39:16,570 --> 00:39:17,480 >> PUBLIK: [OHÖRBAR] 891 00:39:17,480 --> 00:39:17,990 >> DAVID J. MALAN: Dra tillbaka? 892 00:39:17,990 --> 00:39:18,570 >> PUBLIK: [OHÖRBAR] 893 00:39:18,570 --> 00:39:18,930 >> DAVID J. MALAN: Åh, har du? 894 00:39:18,930 --> 00:39:20,350 Någon som aldrig har programmerat förut. 895 00:39:20,350 --> 00:39:21,750 Vill du prova på detta, i röd tröja? 896 00:39:21,750 --> 00:39:22,600 Kom upp. 897 00:39:22,600 --> 00:39:25,320 Oh yeah, kom igen, om du inte har något emot. 898 00:39:25,320 --> 00:39:27,586 Så aldrig har programmerat innan, vad heter du? 899 00:39:27,586 --> 00:39:28,210 LAUREN: Lauren. 900 00:39:28,210 --> 00:39:29,626 DAVID J. MALAN: Lauren, okej. 901 00:39:29,626 --> 00:39:31,150 Så fixa det här felet för oss. 902 00:39:31,150 --> 00:39:35,070 Du har inte sett C, förmodligen, och förmodligen inget annat språk. 903 00:39:35,070 --> 00:39:38,380 Så fixa det här programmet för oss. 904 00:39:38,380 --> 00:39:39,100 Trevligt att träffa dig. 905 00:39:39,100 --> 00:39:39,615 Ingen press. 906 00:39:39,615 --> 00:39:40,156 LAUREN: Ja. 907 00:39:40,156 --> 00:39:43,350 908 00:39:43,350 --> 00:39:46,270 >> DAVID J. MALAN: Men återigen, om detta gamble går enligt plan, 909 00:39:46,270 --> 00:39:48,350 takeaway här kommer vara, bara igen, för att starta 910 00:39:48,350 --> 00:39:51,080 att lägga märke till mönster och utläsa befintlig syntax 911 00:39:51,080 --> 00:39:55,420 hur annat du kan uttrycka själv, no pun intended, för 912 00:39:55,420 --> 00:39:58,410 att fånga några extra scenario. 913 00:39:58,410 --> 00:39:59,603 Så vi säger else if. 914 00:39:59,603 --> 00:40:04,040 915 00:40:04,040 --> 00:40:05,230 printf, bra. 916 00:40:05,230 --> 00:40:09,120 Och märker med CS50 IDE och frankly-- IDE 917 00:40:09,120 --> 00:40:11,110 står för Integrated Utvecklingsmiljö. 918 00:40:11,110 --> 00:40:14,110 Det är bara ett fint sätt att säga ett program som hjälper dig program. 919 00:40:14,110 --> 00:40:16,779 Den gör användarvänliga saker som när du skriver en parentes, 920 00:40:16,779 --> 00:40:18,320 det ger dig automatiskt den andra. 921 00:40:18,320 --> 00:40:20,760 Presumtionen är att du är småningom kommer att vilja skriva det, 922 00:40:20,760 --> 00:40:22,400 och det gör det också med citationstecken. 923 00:40:22,400 --> 00:40:24,190 >> Så jag gillar linje 23. 924 00:40:24,190 --> 00:40:26,400 99% av vägen dit. 925 00:40:26,400 --> 00:40:29,920 Någon vill chime med ett tips? 926 00:40:29,920 --> 00:40:31,420 Jag hörde semikolon från publiken. 927 00:40:31,420 --> 00:40:32,080 God. 928 00:40:32,080 --> 00:40:33,260 Så som kompletterar det. 929 00:40:33,260 --> 00:40:37,930 Och nu, jag har bara lite bestörtning med linje 21. 930 00:40:37,930 --> 00:40:41,370 Hur vill vi uttrycka detta? 931 00:40:41,370 --> 00:40:43,370 Vilken fråga vill vi fråga, tror du? 932 00:40:43,370 --> 00:40:46,870 933 00:40:46,870 --> 00:40:50,330 Så tidigare vi ställde frågan, om n är större än noll, gör detta. 934 00:40:50,330 --> 00:40:51,870 Annars gör det. 935 00:40:51,870 --> 00:40:54,317 Så vi måste välja en fråga att ställa här. 936 00:40:54,317 --> 00:40:55,192 PUBLIK: [OHÖRBAR] 937 00:40:55,192 --> 00:40:56,530 DAVID J. MALAN: Good. 938 00:40:56,530 --> 00:40:58,290 Så om n är lika med noll. 939 00:40:58,290 --> 00:41:01,140 940 00:41:01,140 --> 00:41:02,100 Utmärkt. 941 00:41:02,100 --> 00:41:03,080 Så låt oss stanna här. 942 00:41:03,080 --> 00:41:04,850 Tack så mycket för trotsar detta. 943 00:41:04,850 --> 00:41:10,890 Låt mig ge er lite välförtjänt stress boll, kanske det. 944 00:41:10,890 --> 00:41:11,900 Så vi är nästan där. 945 00:41:11,900 --> 00:41:14,790 I själva verket, Lauren, om du inte åtanke, låt mig göra en tweak här, 946 00:41:14,790 --> 00:41:17,850 bara för att vara i linje även med vad vi såg i Scratch, vad 947 00:41:17,850 --> 00:41:21,080 vill jag göra med linjer 21 och 24, bara igen, baserat 948 00:41:21,080 --> 00:41:23,290 om hur vi gjorde detta i Scratch, kanske? 949 00:41:23,290 --> 00:41:24,230 >> PUBLIK: Flytta upp. 950 00:41:24,230 --> 00:41:25,605 >> DAVID J. MALAN: Ja, flytta upp. 951 00:41:25,605 --> 00:41:30,260 Så annat tillstånd, den tredje, eller fjärde eller femte eller sista gren, 952 00:41:30,260 --> 00:41:34,100 bör verkligen komma efteråt, och det är bara genom konventionen, 953 00:41:34,100 --> 00:41:36,047 bara för att om ni så vill. 954 00:41:36,047 --> 00:41:37,380 Så jag behöver för att göra denna tweak. 955 00:41:37,380 --> 00:41:39,660 Och jag måste sätta min klammerparentes tillbaka hit. 956 00:41:39,660 --> 00:41:42,700 Och nu, kommer detta program kompilera. 957 00:41:42,700 --> 00:41:46,140 Vi är så nära, men det finns en mycket, mycket subtil bugg. 958 00:41:46,140 --> 00:41:47,200 Låt oss se vad som händer. 959 00:41:47,200 --> 00:41:49,660 >> Låt mig först gå vidare och zooma ut. 960 00:41:49,660 --> 00:41:53,405 Jag kommer att gå vidare och skriver att tillståndet noll. 961 00:41:53,405 --> 00:41:55,070 Åh, ljög jag. 962 00:41:55,070 --> 00:41:58,760 Nu kompilatorn är faktiskt ganska smart. 963 00:41:58,760 --> 00:42:00,950 Och jag förstår inte riktigt det felmeddelande. 964 00:42:00,950 --> 00:42:04,310 Med användning av resultatet av ett uppdrag som ett villkor utan parenteser, 965 00:42:04,310 --> 00:42:05,740 är uppenbarligen dåligt. 966 00:42:05,740 --> 00:42:07,100 Men vad betyder det? 967 00:42:07,100 --> 00:42:10,860 >> Bra igen, letar efter mönster i kod som vi har sett förut, 968 00:42:10,860 --> 00:42:16,640 vad är linje 17 faktiskt gör, även om Lauren avsedda något 969 00:42:16,640 --> 00:42:18,790 annars? 970 00:42:18,790 --> 00:42:19,290 Yeah. 971 00:42:19,290 --> 00:42:21,565 >> PUBLIK: [OHÖRBAR] 972 00:42:21,565 --> 00:42:22,440 DAVID J. MALAN: Ja. 973 00:42:22,440 --> 00:42:26,610 Så kom ihåg likhetstecknet, tydligen som vi har använt det tidigare, är inte lika. 974 00:42:26,610 --> 00:42:29,240 Dess uppdrag, från höger till vänster. 975 00:42:29,240 --> 00:42:33,810 Så linje 17 för tillfället är en förutsättning, och det är 976 00:42:33,810 --> 00:42:37,890 exekvera kod inom parentes, men när den kod körs, 977 00:42:37,890 --> 00:42:42,140 vad som händer med värdet noll? 978 00:42:42,140 --> 00:42:45,250 Vad händer med värdet på n? 979 00:42:45,250 --> 00:42:46,810 Att bli noll. 980 00:42:46,810 --> 00:42:50,520 Så om n blir noll, och återigen, enligt förra veckan, 981 00:42:50,520 --> 00:42:54,690 Vi brukar säga att noll är falskt och en är sant, 982 00:42:54,690 --> 00:42:57,410 eller ja är en och ingen är noll. 983 00:42:57,410 --> 00:42:59,590 Så sant och falskt, en och 0. 984 00:42:59,590 --> 00:43:06,090 Om n som linjen 17 har varit ges värdet 0, är ​​noll sant? 985 00:43:06,090 --> 00:43:06,590 Nej. 986 00:43:06,590 --> 00:43:08,280 Per definition är noll falsk. 987 00:43:08,280 --> 00:43:10,860 Det är konventionen vi är kommer att hålla fast vid att gå framåt. 988 00:43:10,860 --> 00:43:17,320 Så kommer linjerna 18, 19, och 20 någonsin gälla nu, logiskt? 989 00:43:17,320 --> 00:43:18,320 De kan inte. 990 00:43:18,320 --> 00:43:21,640 Så vi ställde frågan men inte helt exakt, 991 00:43:21,640 --> 00:43:25,620 och du skulle inte veta detta om du har sett det, lösningen i C 992 00:43:25,620 --> 00:43:29,610 är när du vill uttrycka jämlikhet, säger du jämlikar lika. 993 00:43:29,610 --> 00:43:33,140 Så likhetstecken redan förbrukats genom överlåtelse, från höger till vänster. 994 00:43:33,140 --> 00:43:35,110 Lika med lika organ jämlikar. 995 00:43:35,110 --> 00:43:37,950 Och om du verkligen vill ditt sinne som skall böjas, i JavaScript och PHP, 996 00:43:37,950 --> 00:43:40,490 det finns lika lika jämlikar, som betyda något helt annat, 997 00:43:40,490 --> 00:43:41,990 men vi kommer att lyckas inom kort. 998 00:43:41,990 --> 00:43:45,760 >> Så det här är en enkel fix, men inser super lätt att göra detta misstag, 999 00:43:45,760 --> 00:43:48,700 och sedan undrar och kamp för minuter, om inte en timme, 1000 00:43:48,700 --> 00:43:51,490 varför är min kod inte verkställande som jag tänker? 1001 00:43:51,490 --> 00:43:54,140 Det beror på att du inte berätta det just vad du menade. 1002 00:43:54,140 --> 00:43:56,450 Så det var nästan perfekt, var och det stora 1003 00:43:56,450 --> 00:44:00,760 att vi snubblat över dessa två små saker eftersom nu om vi rätta till dem, 1004 00:44:00,760 --> 00:44:06,240 och jag gör Condition Zero dot slash tillstånd noll, 1005 00:44:06,240 --> 00:44:07,490 Jag skulle vilja ett heltal tack. 1006 00:44:07,490 --> 00:44:08,090 Låt oss se. 1007 00:44:08,090 --> 00:44:09,160 Nej. 1008 00:44:09,160 --> 00:44:10,740 Det kommer att tvinga mig att göra det. 1009 00:44:10,740 --> 00:44:11,990 Så 42. 1010 00:44:11,990 --> 00:44:13,590 Jag valde ett positivt tal. 1011 00:44:13,590 --> 00:44:16,470 Så nu hur gör jag bevisa det här programmet korrekt? 1012 00:44:16,470 --> 00:44:19,990 Om du är en matematiker, kan du inte verkligen bevisa detta genom trial and error, 1013 00:44:19,990 --> 00:44:20,490 höger? 1014 00:44:20,490 --> 00:44:23,180 Du kan inte bara ett bevis av exempel, men åtminstone 1015 00:44:23,180 --> 00:44:25,494 som programmerare vi inte kommer att försöka bevisa för nu 1016 00:44:25,494 --> 00:44:27,660 att detta är faktiskt korrekt, men jag skulle förmodligen 1017 00:44:27,660 --> 00:44:29,470 testa några representativa fall. 1018 00:44:29,470 --> 00:44:31,070 >> Jag har testat 42. 1019 00:44:31,070 --> 00:44:33,030 Jag kunde testa 43. 1020 00:44:33,030 --> 00:44:34,910 Jag kunde testa 44. 1021 00:44:34,910 --> 00:44:35,640 Test 45. 1022 00:44:35,640 --> 00:44:36,140 Höger? 1023 00:44:36,140 --> 00:44:37,860 Men jag kunde göra detta en riktigt lång tid. 1024 00:44:37,860 --> 00:44:39,925 Vad skulle vara lite mer intressanta fall att prova? 1025 00:44:39,925 --> 00:44:41,050 PUBLIK: [OHÖRBAR] noll. 1026 00:44:41,050 --> 00:44:41,740 DAVID J. MALAN: Så noll. 1027 00:44:41,740 --> 00:44:42,297 Visst. 1028 00:44:42,297 --> 00:44:44,880 Och bra, vi har fått den här gången, tack vare Lauren ny kod. 1029 00:44:44,880 --> 00:44:46,213 Vad är ett annat bra fall att prova? 1030 00:44:46,213 --> 00:44:47,320 Publik: Negativ en. 1031 00:44:47,320 --> 00:44:50,070 >> David J. MALAN: Negativ en, och kanske något lite större, 1032 00:44:50,070 --> 00:44:52,617 så kanske negativ 42, men i allmänhet, när 1033 00:44:52,617 --> 00:44:54,450 testa dina program framåt, du är 1034 00:44:54,450 --> 00:44:56,325 kommer att vilja tänka för dig själv, precis vad 1035 00:44:56,325 --> 00:44:58,050 är de grundläggande olika fall. 1036 00:44:58,050 --> 00:45:01,720 Och jag vågar säga en negativ fall ett positivt fall, och en nolla fall 1037 00:45:01,720 --> 00:45:03,365 ganska mycket rundor ut dessa. 1038 00:45:03,365 --> 00:45:04,990 Låt oss titta på en variant av detta men. 1039 00:45:04,990 --> 00:45:06,930 Villkor ett. 1040 00:45:06,930 --> 00:45:11,224 Detta är en korrekt lösning här, så att du ser två och online, 1041 00:45:11,224 --> 00:45:13,390 Om du går igenom genomgångar, kommer i allmänhet 1042 00:45:13,390 --> 00:45:18,090 öka dessa stegvis tills vi får exakt rätt strategi. 1043 00:45:18,090 --> 00:45:20,070 Tänk om vi ville ställa två frågor på en gång? 1044 00:45:20,070 --> 00:45:22,200 >> Låt mig att öppna upp detta i stället. 1045 00:45:22,200 --> 00:45:26,740 Icke-omkopplare, av skäl som vi får se en annan tid. 1046 00:45:26,740 --> 00:45:29,610 Vad är nytt syntaktiskt här? 1047 00:45:29,610 --> 00:45:32,760 Jag är för närvarande spelar ett spel där datorn berättar 1048 00:45:32,760 --> 00:45:35,550 mig, ge mig ett heltal mellan en och 10, 1049 00:45:35,550 --> 00:45:37,180 och sedan jag bedöma användarens input. 1050 00:45:37,180 --> 00:45:39,180 På engelska, baserad på koden du ser här 1051 00:45:39,180 --> 00:45:41,530 i blått, vad är det här programmet gör? 1052 00:45:41,530 --> 00:45:44,256 1053 00:45:44,256 --> 00:45:46,380 PUBLIK: [OHÖRBAR] plockas ett stort eller litet antal. 1054 00:45:46,380 --> 00:45:46,484 DAVID J. MALAN: Ja. 1055 00:45:46,484 --> 00:45:49,450 Det är bara dömer huruvida Jag valde en stor, eller medium, 1056 00:45:49,450 --> 00:45:53,900 eller litet antal bygger på en mycket godtycklig definition av små, medelstora, 1057 00:45:53,900 --> 00:45:58,510 och stora här, men tillkännagivande syntax som är nytt är detta. 1058 00:45:58,510 --> 00:46:02,340 Det finns inte mindre än int eller lika med underteckna, eller större än eller lika med underteckna, 1059 00:46:02,340 --> 00:46:05,430 där man är över den andra, som du kan uttrycka i som Microsoft Word. 1060 00:46:05,430 --> 00:46:08,180 Så i ett programmeringsspråk du typiskt bara göra två tecken, 1061 00:46:08,180 --> 00:46:09,450 en efter den andra. 1062 00:46:09,450 --> 00:46:12,695 Och vad gör detta förmodligen representera,-tecken et-tecken. 1063 00:46:12,695 --> 00:46:13,570 PUBLIK: [OHÖRBAR] 1064 00:46:13,570 --> 00:46:13,680 DAVID J. MALAN: Ja. 1065 00:46:13,680 --> 00:46:16,910 Det betyder bara och eftersom det visar sig att författarna till C 1066 00:46:16,910 --> 00:46:19,120 använde en enda et-tecken, som du kanske tror 1067 00:46:19,120 --> 00:46:22,430 skulle vara perfekt för begreppet och är redan använt upp, 1068 00:46:22,430 --> 00:46:27,300 så et-tecken et-tecken som faktiskt fångar fall vi verkligen vill. 1069 00:46:27,300 --> 00:46:30,610 >> Så låt oss nu snubblar över två saker. 1070 00:46:30,610 --> 00:46:32,640 Låt mig gå vidare och öppna upp en. 1071 00:46:32,640 --> 00:46:36,590 Något som är lite oroande. 1072 00:46:36,590 --> 00:46:37,970 Imprecision dot c. 1073 00:46:37,970 --> 00:46:40,260 Låt mig presentera två saker här. 1074 00:46:40,260 --> 00:46:44,720 En, märker att vi kan göra math, som precis som tidigare när 1075 00:46:44,720 --> 00:46:47,797 vi gjorde plus på två tal, x och y. 1076 00:46:47,797 --> 00:46:49,380 Vad är det här programmet uppenbarligen gör? 1077 00:46:49,380 --> 00:46:52,140 Jag har inte kommenterat det ännu, och jag har infört procent f, 1078 00:46:52,140 --> 00:46:55,720 men jag sa snabbt tidigare procent f innebär flyttal 1079 00:46:55,720 --> 00:46:56,970 värde, som är reellt tal. 1080 00:46:56,970 --> 00:46:59,520 Något med en decimal punkt, som inte är ett heltal. 1081 00:46:59,520 --> 00:47:02,270 Vad tror du det här programmet är försöker visa mig på skärmen? 1082 00:47:02,270 --> 00:47:05,060 1083 00:47:05,060 --> 00:47:06,050 Yeah? 1084 00:47:06,050 --> 00:47:07,550 PUBLIK: Resultatet av en över 10. 1085 00:47:07,550 --> 00:47:07,780 DAVID J. MALAN: Ja. 1086 00:47:07,780 --> 00:47:09,680 Vad är resultatet av ett dividerat med 10. 1087 00:47:09,680 --> 00:47:12,721 Rätt, eftersom alla av er har förmodligen vuxit upp i vetskap om att en över 10 1088 00:47:12,721 --> 00:47:14,502 är vad? 1089 00:47:14,502 --> 00:47:16,220 Ja, det är bara 10/01 eller 0,1. 1090 00:47:16,220 --> 00:47:16,720 Höger? 1091 00:47:16,720 --> 00:47:19,010 Så låt oss se vad det egentligen är. 1092 00:47:19,010 --> 00:47:21,010 Så låt mig gå vidare och spara denna. 1093 00:47:21,010 --> 00:47:21,970 Låt mig gå här nere. 1094 00:47:21,970 --> 00:47:26,360 Gör inexakthet dot snedstreck vaghet och varsel också, 1095 00:47:26,360 --> 00:47:29,380 i en Linuxmiljö, behöver du inte måste skriva ut imprecision och ta 1096 00:47:29,380 --> 00:47:30,010 hela dagen. 1097 00:47:30,010 --> 00:47:32,910 Det i allmänhet, om du träffar Tab, det kommer att avsluta din tanke för dig, 1098 00:47:32,910 --> 00:47:36,660 baserat på de ord som är finns i den aktuella katalogen. 1099 00:47:36,660 --> 00:47:37,160 OK. 1100 00:47:37,160 --> 00:47:37,970 Så du hade rätt. 1101 00:47:37,970 --> 00:47:41,239 Ett delat med 10 är, i själva verket, 0,1. 1102 00:47:41,239 --> 00:47:42,280 Men jag är lite nyfiken. 1103 00:47:42,280 --> 00:47:44,196 Och det visar sig printf stöder vissa funktioner 1104 00:47:44,196 --> 00:47:48,700 där du kan ange fler än standard antalet decimaler. 1105 00:47:48,700 --> 00:47:52,140 Så om jag vill se 10 decimal punkter som jag kan göra procent, 1106 00:47:52,140 --> 00:47:55,510 för platshållare symbol, dot 10 för, ge mig 10 decimaler, 1107 00:47:55,510 --> 00:47:58,140 och då fortfarande flyttal värde, och som en sidoreplik, 1108 00:47:58,140 --> 00:48:01,550 vad är detta backslash n tydligen vi fortsätter att använda? 1109 00:48:01,550 --> 00:48:03,450 Det visar sig att det är en symbol för en ny linje. 1110 00:48:03,450 --> 00:48:05,970 Det är mycket tydligt sätt att säga till datorn, 1111 00:48:05,970 --> 00:48:08,759 flytta markören till nästa linje när du är klar. 1112 00:48:08,759 --> 00:48:10,800 Och vi får se vad som händer när vi inte gör det. 1113 00:48:10,800 --> 00:48:12,430 >> Låt mig kompilera göra imprecision. 1114 00:48:12,430 --> 00:48:15,320 1115 00:48:15,320 --> 00:48:18,356 Nu dot slash inexakthet. 1116 00:48:18,356 --> 00:48:18,930 OK. 1117 00:48:18,930 --> 00:48:19,780 Fortfarande rätt. 1118 00:48:19,780 --> 00:48:21,512 En dividerat med 10. 1119 00:48:21,512 --> 00:48:23,220 Nu ska jag få en lite nyfiken, men. 1120 00:48:23,220 --> 00:48:27,599 Vad händer om jag ser 20 decimal påpekar kompilera, repris, 1121 00:48:27,599 --> 00:48:29,390 och som en sidoreplik för hastighet, kan du också använda 1122 00:48:29,390 --> 00:48:31,800 din uppåt- och nedåtpilarna till bläddra igenom din historia, 1123 00:48:31,800 --> 00:48:35,476 så att du inte behöver hålla skriva om dessa kommandon, anger. 1124 00:48:35,476 --> 00:48:36,910 Va. 1125 00:48:36,910 --> 00:48:39,220 Jag lärde mig inte att i grundskolan. 1126 00:48:39,220 --> 00:48:43,260 Okej, så låt mig se som 29 platser ut. 1127 00:48:43,260 --> 00:48:44,300 Kanske är det bara en lyckträff. 1128 00:48:44,300 --> 00:48:46,907 Kanske min dator agerar konstigt. 1129 00:48:46,907 --> 00:48:47,990 Det är inte en sak, eller hur? 1130 00:48:47,990 --> 00:48:50,300 Det gör något deterministiskt. 1131 00:48:50,300 --> 00:48:53,410 Så gör vaghet. 1132 00:48:53,410 --> 00:48:54,890 OK, det är trasslat till. 1133 00:48:54,890 --> 00:48:57,620 Så vad är det som händer? 1134 00:48:57,620 --> 00:49:00,160 >> Så tydligen din Läraren har legat 1135 00:49:00,160 --> 00:49:03,900 till er alla för denna gång för anledningarna till att vi får se snart. 1136 00:49:03,900 --> 00:49:05,569 Men låt oss sluta med ett annat program. 1137 00:49:05,569 --> 00:49:07,860 Detta är en liten program någon skrev för några år sedan, 1138 00:49:07,860 --> 00:49:08,990 och det är faktiskt en del av en tävling. 1139 00:49:08,990 --> 00:49:11,198 Ingen faktiskt skriver kod så här, och om du gör, 1140 00:49:11,198 --> 00:49:12,880 detta är stilist ett problem. 1141 00:49:12,880 --> 00:49:14,660 Men människor gör detta för att skryta. 1142 00:49:14,660 --> 00:49:17,260 Att skriva den mest förvirrande ser program som 1143 00:49:17,260 --> 00:49:19,110 ändå gör något intressant. 1144 00:49:19,110 --> 00:49:23,930 Och tonen jag trodde att vi skulle lämna på idag, innan Colton spelar oss här, 1145 00:49:23,930 --> 00:49:27,840 är att köra det här programmet, som även i att bara använda 1146 00:49:27,840 --> 00:49:31,450 C i denna textbaserade miljö, ger oss detta. 1147 00:49:31,450 --> 00:49:32,264 Dammit. 1148 00:49:32,264 --> 00:49:34,930 >> [LAUGHTER] 1149 00:49:34,930 --> 00:49:36,800 >> Stand by. 1150 00:49:36,800 --> 00:49:39,340 [OHÖRBAR] c streck l m. 1151 00:49:39,340 --> 00:49:42,885 Du kommer att se den magiska besvärjelse som vi får se snart. 1152 00:49:42,885 --> 00:49:45,780 [OHÖRBAR] Okej. 1153 00:49:45,780 --> 00:49:51,592 Och nu kan du även göra saker som detta. 1154 00:49:51,592 --> 00:49:52,340 Det är allt. 1155 00:49:52,340 --> 00:49:56,410 För CS50 vi kommer att se dig på fredag. 1156 00:49:56,410 --> 00:49:58,910 >> [MUSIK SPELA] 1157 00:49:58,910 --> 00:52:38,390 1158 00:52:38,390 --> 00:52:41,440 >> [Applåder] 1159 00:52:41,440 --> 00:52:42,812