1 00:00:00,000 --> 00:00:11,952 2 00:00:11,952 --> 00:00:13,800 >> DAVID J. MALAN: Så detta är CS50. 3 00:00:13,800 --> 00:00:18,970 Och detta var CS50 egen Colton Ogden, för mer av vem som är musik som du kan 4 00:00:18,970 --> 00:00:22,820 hämta på soundcloud.com/cs50. 5 00:00:22,820 --> 00:00:26,690 >> Så idag fokuserar vi allt mer om konsten att programmeringen. 6 00:00:26,690 --> 00:00:28,980 Och vi tar när vi lämnade off i förra veckan, med fokus 7 00:00:28,980 --> 00:00:31,660 på Scratch, som var här grafiska programmeringsspråk. 8 00:00:31,660 --> 00:00:35,490 Och ta ner saker till en lägre nivå, med användning av en mer traditionell programmering 9 00:00:35,490 --> 00:00:38,420 språk kallas C. Men längs vägen, förverkliga 10 00:00:38,420 --> 00:00:40,730 att samma idéer som vi talade om i fredags 11 00:00:40,730 --> 00:00:44,390 återkommer inte bara i detta språket C, men i de flesta alla andra 12 00:00:44,390 --> 00:00:46,350 att vi tittar på den här terminen. 13 00:00:46,350 --> 00:00:50,247 >> Så vi kallade denna sak Här vad förra gången? 14 00:00:50,247 --> 00:00:51,830 Detta är representativt för ett uttalande. 15 00:00:51,830 --> 00:00:53,080 Så vi kallade detta ett uttalande. 16 00:00:53,080 --> 00:00:54,100 Och den gör något. 17 00:00:54,100 --> 00:00:56,910 Det är en instruktion om att en dator eller Scratch kan exekvera. 18 00:00:56,910 --> 00:00:59,910 Och hädanefter ska vi också börja ringer ungefär så här en funktion, 19 00:00:59,910 --> 00:01:02,070 skäl får vi snart se. 20 00:01:02,070 --> 00:01:03,681 >> Samtidigt såg vi saker som detta. 21 00:01:03,681 --> 00:01:05,680 Och dessa är i allmänhet känd som vad konstruera? 22 00:01:05,680 --> 00:01:06,240 >> PUBLIKEN: Loop. 23 00:01:06,240 --> 00:01:06,860 >> DAVID J. MALAN: Så en loop. 24 00:01:06,860 --> 00:01:07,943 Så ganska enkelt. 25 00:01:07,943 --> 00:01:09,470 Det gör bokstavligen vad den säger. 26 00:01:09,470 --> 00:01:12,210 Och i Scratch, om du vill klämma fler pusselbitar där, 27 00:01:12,210 --> 00:01:13,950 pjäsen kommer att växa för att passa den. 28 00:01:13,950 --> 00:01:16,790 Och vi får se i C som Vi kan göra samma sak. 29 00:01:16,790 --> 00:01:20,000 >> En annan typ av slinga, fast, i Scratch kan vara för evigt, 30 00:01:20,000 --> 00:01:21,820 eller finns det något nummer av andra metoder. 31 00:01:21,820 --> 00:01:24,150 Men låt oss ta en mer generalist look, med ett ansikte 32 00:01:24,150 --> 00:01:27,402 det är sannolikt ganska bekant, på loopar mer allmänt. 33 00:01:27,402 --> 00:01:29,110 Mark Zuckerberg: One sak som datorer 34 00:01:29,110 --> 00:01:31,860 är riktigt bra på är upprepa kommandon. 35 00:01:31,860 --> 00:01:33,910 Som person, skulle du få riktigt uttråkad om du 36 00:01:33,910 --> 00:01:36,730 var tvungen att göra samma sak massor av gånger i rad. 37 00:01:36,730 --> 00:01:40,530 Men en dator kan göra samma sak miljoner eller till och med miljarder gånger, 38 00:01:40,530 --> 00:01:43,290 och inte bli uttråkad, och kunna att utföra den riktigt bra. 39 00:01:43,290 --> 00:01:45,650 >> Så till exempel, om jag ville önska alla 40 00:01:45,650 --> 00:01:48,840 på Facebook på födelsedagen genom att skicka en e-post, 41 00:01:48,840 --> 00:01:51,550 det kan ta mig mer än en talet att faktiskt skriva ut 42 00:01:51,550 --> 00:01:53,000 alla dessa e-postmeddelanden till alla. 43 00:01:53,000 --> 00:01:57,780 Men med bara några rader kod, kan jag har ett system skicka ett mail till alla 44 00:01:57,780 --> 00:01:59,930 på Facebook önskar dem en trevlig födelsedag. 45 00:01:59,930 --> 00:02:02,730 Så det är vad loopar är och varför de är värdefulla och något 46 00:02:02,730 --> 00:02:04,740 att datorer kan göra mycket bra. 47 00:02:04,740 --> 00:02:05,630 >> DAVID J. MALAN: Så om du har varit mottagaren 48 00:02:05,630 --> 00:02:07,820 av några av CS50: s och Dropbox utrymme för sent, 49 00:02:07,820 --> 00:02:10,590 det är faktiskt precis vad vi gör, med hjälp av koden riktigt gillar det. 50 00:02:10,590 --> 00:02:12,600 Vi har i huvudsak en stor kalkylblad i vilken 51 00:02:12,600 --> 00:02:15,016 folk har mata in sina namn och e-postadresser. 52 00:02:15,016 --> 00:02:18,160 Och vi skrev en liten bit av kod som kan iterera över dessa adresser 53 00:02:18,160 --> 00:02:21,860 och spotta ut unika adresser i fall någon lämnat in flera gånger. 54 00:02:21,860 --> 00:02:25,120 Och därefter skickar vi en automatiserad e-post från CS50: s bot, 55 00:02:25,120 --> 00:02:27,190 inklusive kupongkod. 56 00:02:27,190 --> 00:02:29,290 >> Nu har vi också tittat på detta konstruera förra gången. 57 00:02:29,290 --> 00:02:33,100 Och detta är ett särskilt exempel på vad? 58 00:02:33,100 --> 00:02:35,050 Så, ja, ett booleskt uttryck. 59 00:02:35,050 --> 00:02:37,050 Och formen menas att fånga det också. 60 00:02:37,050 --> 00:02:39,966 Alla sådana frågor till bilda sant eller falskt i Scratch 61 00:02:39,966 --> 00:02:41,590 kommer att se ut ungefär så här. 62 00:02:41,590 --> 00:02:43,200 Och vi kallar detta ett booleskt uttryck. 63 00:02:43,200 --> 00:02:46,170 Det är förvisso sant eller falskt, ja eller nej. 64 00:02:46,170 --> 00:02:49,150 Det är ett sätt att svara på en fråga. 65 00:02:49,150 --> 00:02:52,420 >> Och tiden kan du använda dessa Boolean uttryck inuti konstruktioner 66 00:02:52,420 --> 00:02:54,720 som dessa, vilka av Naturligtvis finns förutsättningar 67 00:02:54,720 --> 00:02:57,259 eller grenar, ökända gafflar i vägen. 68 00:02:57,259 --> 00:02:59,550 Och de kan se inte bara så här, men de kan också 69 00:02:59,550 --> 00:03:02,080 har elses associerade med dem. 70 00:03:02,080 --> 00:03:05,820 Och du kan faktiskt ha en tre sätt vägskäl eller en fyra sätt gaffel 71 00:03:05,820 --> 00:03:08,340 i vägen, helt enkelt genom häckar dessa saker, 72 00:03:08,340 --> 00:03:10,510 som du ser i Scratch Om du inte redan har. 73 00:03:10,510 --> 00:03:13,550 Och som du kan göra i C också. 74 00:03:13,550 --> 00:03:16,810 >> Låt oss ta ett annat generalist titta på ett alumnist, liksom, som 75 00:03:16,810 --> 00:03:21,490 kan utgöra en annan strategi dessa saker som kallas villkor. 76 00:03:21,490 --> 00:03:24,060 >> BILL GATES: Människor gör beslut varje dag. 77 00:03:24,060 --> 00:03:27,530 Till exempel, innan du går utanför du typ av har en if-sats som säger, 78 00:03:27,530 --> 00:03:31,480 om det regnar då jag måste få min jacka. 79 00:03:31,480 --> 00:03:36,820 Och datorer är fantastiskt när du bestämma dessa typer av uttalanden, 80 00:03:36,820 --> 00:03:42,280 att de på ett tillförlitligt sätt kan utföra dessa saker på otrolig hastighet. 81 00:03:42,280 --> 00:03:48,240 Och så ett datorprogram egentligen är en liten bit av matematik och en del 82 00:03:48,240 --> 00:03:53,050 om uttalanden där beslutet skickas ut. 83 00:03:53,050 --> 00:03:55,020 >> DAVID J. MALAN: Så som ni kanske vet var det 84 00:03:55,020 --> 00:03:57,880 folk som Bill Gates, Paul Allen, m.fl. 85 00:03:57,880 --> 00:04:00,240 som verkligen sparkade igång s.k. persondator 86 00:04:00,240 --> 00:04:01,990 revolution för några år sedan. 87 00:04:01,990 --> 00:04:04,140 Jag trodde, innan vi dyker in några Administrivia, 88 00:04:04,140 --> 00:04:09,920 vi skulle relatera en berättelse från Albuquerque, New Mexico Museum of Natural History 89 00:04:09,920 --> 00:04:13,650 och vetenskap där några av Bill Gates och Paul Allen tidigaste berättelser 90 00:04:13,650 --> 00:04:17,470 berättas hur vi har nu dagens PC och Mac och mer. 91 00:04:17,470 --> 00:04:22,390 För detta, men vi behöver två frivilliga som har mycket bra berättande röster 92 00:04:22,390 --> 00:04:23,735 att läsa ett manus högt. 93 00:04:23,735 --> 00:04:25,530 >> Okej, vad sägs om på baksidan där. 94 00:04:25,530 --> 00:04:26,120 Kom upp. 95 00:04:26,120 --> 00:04:27,770 Och vad sägs om framför här. 96 00:04:27,770 --> 00:04:28,340 Kom ner. 97 00:04:28,340 --> 00:04:29,600 Ta dina platser här. 98 00:04:29,600 --> 00:04:32,444 Som ni kommer upp, ett par administrativa meddelanden. 99 00:04:32,444 --> 00:04:34,360 sektionering, processen att välja ett avsnitt, 100 00:04:34,360 --> 00:04:36,068 startar här Onsdag till fredag. 101 00:04:36,068 --> 00:04:38,400 Mer om det här kommer Onsdag i föreläsningen. 102 00:04:38,400 --> 00:04:41,770 >> Super sektioner, tiden är något som vi erbjuder nästa vecka 103 00:04:41,770 --> 00:04:45,310 varvid hela klassen är inbjuden att delta i ganska stor skala 104 00:04:45,310 --> 00:04:47,690 sektioner, en mer bekväm, en mindre bekväm. 105 00:04:47,690 --> 00:04:51,340 Och vi kommer att meddela de uppgifter av det, liksom, senare i veckan. 106 00:04:51,340 --> 00:04:53,310 >> Samtidigt sektioner själva, startar 107 00:04:53,310 --> 00:04:57,241 i vecka tre av kursen, noll index, vilket innebär de är ett par veckor 108 00:04:57,241 --> 00:04:57,740 ut. 109 00:04:57,740 --> 00:04:58,450 Så att inte oroa dig. 110 00:04:58,450 --> 00:05:01,014 Du har ännu inte missat något i den stilen. 111 00:05:01,014 --> 00:05:03,930 Under tiden i tiden, om du har några frågor administrativt, 112 00:05:03,930 --> 00:05:08,120 maila mig och Devon och Gabe och Rob på denna adress här. 113 00:05:08,120 --> 00:05:10,320 >> Slutligen, problembild 0 är naturligtvis ut. 114 00:05:10,320 --> 00:05:12,320 Du kanske har märkt det på kursens hemsida. 115 00:05:12,320 --> 00:05:14,840 Det borde ge dig alla svar på frågor 116 00:05:14,840 --> 00:05:18,250 du kan ha på vägen för komma igång med problemet set. 117 00:05:18,250 --> 00:05:21,430 Men om du befinner dig i behov av en hjälpande hand, 118 00:05:21,430 --> 00:05:25,020 med alla medel går kontorstid, Måndag, tisdag, onsdag, torsdag 119 00:05:25,020 --> 00:05:27,290 av denna vecka på kvällen i fyra matsalarna. 120 00:05:27,290 --> 00:05:31,650 Se den webbadressen där för de uppgifter var kontorstid ska vara. 121 00:05:31,650 --> 00:05:34,000 >> Nu Låt oss möta våra två gäster här i dag. 122 00:05:34,000 --> 00:05:34,740 Vad heter du? 123 00:05:34,740 --> 00:05:35,290 >> JAY PAUL: Jay Paul. 124 00:05:35,290 --> 00:05:36,880 >> DAVID J. MALAN: Jay Paul, trevligt att träffas. 125 00:05:36,880 --> 00:05:37,330 >> HIKARI: Hikari. 126 00:05:37,330 --> 00:05:37,975 >> DAVID J. MALAN: Hikari? 127 00:05:37,975 --> 00:05:38,250 >> HIKARI: Hikari. 128 00:05:38,250 --> 00:05:38,810 >> DAVID J. MALAN: Hikari. 129 00:05:38,810 --> 00:05:39,790 Trevligt att träffa dig också. 130 00:05:39,790 --> 00:05:42,123 Jay Paul och Hikari har i Framför dem på dessa musik 131 00:05:42,123 --> 00:05:45,100 står två manus som jag tryckt ut i morse från New Mexico 132 00:05:45,100 --> 00:05:46,692 Naturhistoriska museet och vetenskap. 133 00:05:46,692 --> 00:05:48,400 Och vad jag tyckte Jag skulle göra på overhead 134 00:05:48,400 --> 00:05:52,830 är följa din recitation av manus och denna historia 135 00:05:52,830 --> 00:05:54,700 med vissa visuella bilder, inga överraskningar. 136 00:05:54,700 --> 00:05:57,512 >> Och vad jag har gjort i förväg är prehighlight på ditt manus 137 00:05:57,512 --> 00:05:59,470 vad du ska läsa, och vad du bör läsa. 138 00:05:59,470 --> 00:06:00,920 Och vi kommer i huvudsak bara alternativa stycken. 139 00:06:00,920 --> 00:06:03,211 Så det är ungefär som du kanske har gjort i engelska klass. 140 00:06:03,211 --> 00:06:06,875 Det är verkligen tvinga publiken att tro på din berättelse här. 141 00:06:06,875 --> 00:06:07,600 Ska vi? 142 00:06:07,600 --> 00:06:13,272 Så historien här är, vi har en BASIC, och den börjar i Cambridge. 143 00:06:13,272 --> 00:06:18,750 >> JAY PAUL: Det var vinter, 1974, i Cambridge, Massachusetts 144 00:06:18,750 --> 00:06:20,240 där vintrarna kan vara kalla. 145 00:06:20,240 --> 00:06:22,800 En skäggig, långhårig college dropout namnges 146 00:06:22,800 --> 00:06:27,280 Paul Allen ades drudging tvärs Harvard Square, försjunken i sina tankar. 147 00:06:27,280 --> 00:06:31,050 Hans främsta intresse på den tiden var hur man får sin vän, Bill Gates, 148 00:06:31,050 --> 00:06:34,974 sluta skolan och gå in i affärer med honom. 149 00:06:34,974 --> 00:06:37,890 HIKARI: De två hade redan gått genom ett antal affärsprojekt 150 00:06:37,890 --> 00:06:40,850 tillsammans, med början vid Lakeside skola i Seattle där 151 00:06:40,850 --> 00:06:45,220 De betalades gratis dator tid testa en PDP-10 dator i lokal tid 152 00:06:45,220 --> 00:06:46,580 dela bolaget. 153 00:06:46,580 --> 00:06:50,930 Den senaste planen hade varit att sluta skola och bildar ett mjukvaruföretag. 154 00:06:50,930 --> 00:06:53,440 Allen hade lämnat Washington State University. 155 00:06:53,440 --> 00:06:58,380 Men i sista minuten, Gates beslutade att hålla fast vid Harvard. 156 00:06:58,380 --> 00:07:02,080 >> JAY PAUL: Den dagen, passerar Harvard Square, spotted Allen i januari 157 00:07:02,080 --> 00:07:07,530 1975 numret av Popular Electronics med jorden stopp rubriken, 158 00:07:07,530 --> 00:07:11,900 Världens första mini Kit att konkurrera Kommersiella modeller. 159 00:07:11,900 --> 00:07:14,430 Under rubriken var en bild av en liten låda 160 00:07:14,430 --> 00:07:16,160 prydd med ljus och switchar. 161 00:07:16,160 --> 00:07:19,770 Den kallades MITS Altair 8800. 162 00:07:19,770 --> 00:07:24,100 Och Allen visste att detta var vad Han hade letat efter. 163 00:07:24,100 --> 00:07:26,350 >> HIKARI: Days of diskussion följde. 164 00:07:26,350 --> 00:07:30,170 Allen och Gates förstått betydelsen av Altair. 165 00:07:30,170 --> 00:07:32,480 De hade talat ofta om mikroprocessorer 166 00:07:32,480 --> 00:07:35,250 och väntade för att se vad skulle göras med dem. 167 00:07:35,250 --> 00:07:39,770 Nu fanns det en minidator kit på omslaget till Popular Electronics. 168 00:07:39,770 --> 00:07:42,830 Den hade tydligen ingen programvara ännu. 169 00:07:42,830 --> 00:07:46,830 De föreställde sig en nation av programmerare fallande på MITS. 170 00:07:46,830 --> 00:07:49,590 Och så de kallade Ed Roberts, chefen för företaget, 171 00:07:49,590 --> 00:07:53,330 påstår sig ha en version av BASIC programmeringsspråk nästan klar 172 00:07:53,330 --> 00:07:54,710 för Altair. 173 00:07:54,710 --> 00:07:55,570 De gjorde det inte. 174 00:07:55,570 --> 00:07:58,910 Och Roberts måste ha vetat att de inte gjorde det. 175 00:07:58,910 --> 00:08:03,170 Han var att få 10 samtal om dagen från människor som hade en BASIC nästan klar. 176 00:08:03,170 --> 00:08:05,570 Och hans lager svar var, "Den första personen 177 00:08:05,570 --> 00:08:11,090 som dyker upp med en fungerande BASIC får kontraktet. " 178 00:08:11,090 --> 00:08:13,910 >> JAY PAUL: Gates och Allen hade aldrig sett en Altair. 179 00:08:13,910 --> 00:08:17,600 De hade aldrig ens sett Intel 8080 mikroprocessor 180 00:08:17,600 --> 00:08:19,060 i hjärtat av Altair. 181 00:08:19,060 --> 00:08:21,470 Men ett par år tidigare Allen hade skrivit ett program 182 00:08:21,470 --> 00:08:25,220 på en stordator som emuleras driften av en tidigare Intel 183 00:08:25,220 --> 00:08:26,217 mikroprocessor. 184 00:08:26,217 --> 00:08:28,300 Och den här gången de skulle göra samma sak. 185 00:08:28,300 --> 00:08:31,530 186 00:08:31,530 --> 00:08:34,380 >> HIKARI: Med en Intel 8080 manual vid sin sida, 187 00:08:34,380 --> 00:08:37,770 Allen satte sig vid ett Harvard PDP-10 dator 188 00:08:37,770 --> 00:08:42,010 och skrev emulatorn och programvara verktyg som behövs för att göra programmeringen. 189 00:08:42,010 --> 00:08:45,820 Samtidigt Gates slutat gå till klasser och ägnade sig 190 00:08:45,820 --> 00:08:48,120 att utforma BASIC, använda varje trick 191 00:08:48,120 --> 00:08:53,130 han visste att få storleken ned under 4 kilobyte. 192 00:08:53,130 --> 00:08:55,870 >> JAY PAUL: Ut i Albuquerque, Ed Roberts fick ett samtal från Gates 193 00:08:55,870 --> 00:08:59,754 ber om information om hur Altair hanterat specifika rutiner. 194 00:08:59,754 --> 00:09:01,170 Ingen hade någonsin frågat förut. 195 00:09:01,170 --> 00:09:02,670 Och Roberts började bli intresserad. 196 00:09:02,670 --> 00:09:05,240 197 00:09:05,240 --> 00:09:07,970 >> HIKARI: Med utvecklingen verktyg och designen klar, 198 00:09:07,970 --> 00:09:10,780 Gates och Allen skrev koden på PDP-10, 199 00:09:10,780 --> 00:09:16,060 värva en annan Harvard student, Monte Davidoff, att skriva matematiska rutiner. 200 00:09:16,060 --> 00:09:19,450 Efter en sista natten av programmering, Allen fick på ett plan 201 00:09:19,450 --> 00:09:22,970 att leverera sina BASIC till MITS. 202 00:09:22,970 --> 00:09:25,800 Han tillbringade planet rida ut oroande. 203 00:09:25,800 --> 00:09:28,490 Och tillbaka i Cambridge Gates var oroande. 204 00:09:28,490 --> 00:09:32,100 De hade testat sina BASIC och det hade fungerat på emulatorn. 205 00:09:32,100 --> 00:09:35,444 Men vad händer om emulatorn var fel? 206 00:09:35,444 --> 00:09:37,360 JAY PAUL: När planet närmade Albuquerque, 207 00:09:37,360 --> 00:09:40,070 Allen insåg att deras BASIC, nu prydligt inne 208 00:09:40,070 --> 00:09:42,460 på en liten rulle av stansade papperstejp, skulle 209 00:09:42,460 --> 00:09:44,970 vara värdelösa utan separat Programmet, som kallas en lastare, som 210 00:09:44,970 --> 00:09:47,550 skulle tala om Altair hur att läsa papperstejp varelse 211 00:09:47,550 --> 00:09:49,620 matas in i teletype maskinen. 212 00:09:49,620 --> 00:09:52,970 Han tog fram sin anteckningsbok och snabbt klottrat ner en hanteringsprogram 213 00:09:52,970 --> 00:09:56,819 i Assembler, sedan manuellt översatt det in i 1s och 0s 214 00:09:56,819 --> 00:09:57,985 Altair skulle förstå. 215 00:09:57,985 --> 00:10:00,530 216 00:10:00,530 --> 00:10:03,830 >> HIKARI: Allen väntade en rent, litet, högteknologiskt företag 217 00:10:03,830 --> 00:10:05,470 drivs av män i kostymer. 218 00:10:05,470 --> 00:10:09,210 Så han blev förvånad när Roberts träffades honom på flygplatsen ser ut som en ranch 219 00:10:09,210 --> 00:10:10,270 handen. 220 00:10:10,270 --> 00:10:12,070 Roberts var också förvånad. 221 00:10:12,070 --> 00:10:16,340 När han tappade Harvard programmerare på ett dyrt hotell, 222 00:10:16,340 --> 00:10:20,790 Allen hade att erkänna att Han hade inte råd rummet. 223 00:10:20,790 --> 00:10:24,510 >> JAY PAUL: MITS, själva var som ligger i en dammig remsor köpcentret. 224 00:10:24,510 --> 00:10:27,040 Inne på en rörig arbetsbänk var en Altair 225 00:10:27,040 --> 00:10:30,390 laddat upp med fem kilobyte minne och ansluten med en kabel 226 00:10:30,390 --> 00:10:32,030 till en teletype maskin. 227 00:10:32,030 --> 00:10:37,200 Roberts och chefsingenjör, Bill Yates, väntade förväntans 228 00:10:37,200 --> 00:10:40,660 såsom Allen växlas hans loader program i Altair. 229 00:10:40,660 --> 00:10:44,980 Den teletype började chugging som det dras papperstejp genom tejpen läsaren. 230 00:10:44,980 --> 00:10:47,215 Det tog kanske 15 minuter att ladda programmet. 231 00:10:47,215 --> 00:10:52,110 Då teletype plötsligt tryckt en minnes prompten, sedan en klar uppmaning, 232 00:10:52,110 --> 00:10:55,340 och Allen började skriva några prov kommandon. 233 00:10:55,340 --> 00:10:57,400 Till allas förvåning, mjukvaran arbetade. 234 00:10:57,400 --> 00:10:58,525 Det var fel, förstås. 235 00:10:58,525 --> 00:11:02,070 Men det viktigaste var att det fungerade. 236 00:11:02,070 --> 00:11:06,570 >> HIKARI: Senare, på väg till en $ 3,00 lunch på Pancho s, flög en geting 237 00:11:06,570 --> 00:11:10,470 i fönstret i pickup lastbil och sved Allen på armen. 238 00:11:10,470 --> 00:11:13,070 Men på den punkten inget kan förstöra stämningen. 239 00:11:13,070 --> 00:11:17,210 Altair hade nu sin BASIC, den första kommersiella mjukvara för ett hem 240 00:11:17,210 --> 00:11:23,260 dator, gjord av Paul Allen och Bill Gates, göra affärer som Microsoft. 241 00:11:23,260 --> 00:11:25,336 >> DAVID J. MALAN: Många tack vare våra två läsare. 242 00:11:25,336 --> 00:11:30,690 >> [Applåder] 243 00:11:30,690 --> 00:11:32,520 >> DAVID J. MALAN: Nu du har ditt val, 244 00:11:32,520 --> 00:11:35,880 innan du reser, en glittrig eller en glöd i dark-- oh, 245 00:11:35,880 --> 00:11:40,810 vänta en sekund, wait-- glittrig och en glöd i mörker elefant 246 00:11:40,810 --> 00:11:42,534 från CS50 egen Cheng Gong. 247 00:11:42,534 --> 00:11:43,450 HIKARI: AW, tack. 248 00:11:43,450 --> 00:11:45,324 DAVID J. MALAN: Alla rätt, tack så mycket. 249 00:11:45,324 --> 00:11:49,855 [Applåder] 250 00:11:49,855 --> 00:11:51,105 DAVID J. MALAN: Så sann historia. 251 00:11:51,105 --> 00:11:54,380 Detta är att säga att alla dessa maskiner och den lätthet med vilken vi 252 00:11:54,380 --> 00:11:56,270 använda dem nu och ta för givet, egentligen 253 00:11:56,270 --> 00:12:00,070 började här, bara några steg från denna faktiska teater. 254 00:12:00,070 --> 00:12:03,930 Och nu i dag, om du inte har varit, detta är Maxwell Dworkin, datorn 255 00:12:03,930 --> 00:12:05,810 Sciences Building, också runt hörnet. 256 00:12:05,810 --> 00:12:09,760 Och på andra våningen i denna Byggnaden gör hänger tre sidor 257 00:12:09,760 --> 00:12:12,740 från den ursprungliga källkoden som Bill Gates och Paul Allen skrev. 258 00:12:12,740 --> 00:12:14,770 I själva verket om användning du zooma in kan du inte bara se 259 00:12:14,770 --> 00:12:17,350 deras namn i originaltyp, men också 260 00:12:17,350 --> 00:12:22,100 sina underskrifter att de smyckade en några år tillbaka när de senast besökte. 261 00:12:22,100 --> 00:12:25,800 >> Men vad var särskilt övertygande om detta är vad de föresatt sig att göra 262 00:12:25,800 --> 00:12:29,760 var att skriva ett program som skulle göra det möjligt för andra att skriva 263 00:12:29,760 --> 00:12:30,950 sina egna program. 264 00:12:30,950 --> 00:12:34,280 På den tiden alla fanns med denna Altair maskin gjord av MITS. 265 00:12:34,280 --> 00:12:40,020 Och allt de behövde var en bit av vilket gör det enkelt för hobbyister och människor 266 00:12:40,020 --> 00:12:45,300 att vi i detta rum att faktiskt program som utan att nödvändigtvis förstå 267 00:12:45,300 --> 00:12:49,060 Assembly kod, eller maskin kod, eller Gud förbjude, 0 och 1. 268 00:12:49,060 --> 00:12:51,190 Vi programmerare, som de i det här rummet, vi 269 00:12:51,190 --> 00:12:54,070 vill kunna uttrycka oss mycket mer som pseudokod 270 00:12:54,070 --> 00:12:57,330 även om det är lite mer nit kräsen än vi pratade i förra veckan. 271 00:12:57,330 --> 00:13:00,970 Vi vill inte skriva kod som den här, som Paul Allen och Bill Gates gjorde. 272 00:13:00,970 --> 00:13:04,850 Vi, i stället vill skriva kod som ser lite mer användarvänlig. 273 00:13:04,850 --> 00:13:07,150 >> Nu är det här ett språk som kallas BASIC. 274 00:13:07,150 --> 00:13:11,497 Och radnummer det är vad du använda för att helt enkelt numrera alla kodrader 275 00:13:11,497 --> 00:13:12,330 som du skriver. 276 00:13:12,330 --> 00:13:14,038 Vi behöver inte ens att gör att dessa dagar. 277 00:13:14,038 --> 00:13:16,060 Men du kan se här hur PRINT "Hello, world" 278 00:13:16,060 --> 00:13:18,660 skulle faktiskt förmodligen skriva ut just det. 279 00:13:18,660 --> 00:13:22,710 Och så vad Bill och Paul gjorde var ge människor möjlighet att skriva kod som denna 280 00:13:22,710 --> 00:13:27,240 istället of-- om du tar en titt på den datavetenskap wall-- koden så här. 281 00:13:27,240 --> 00:13:29,290 >> Faktum CS50 nyligen haft möjlighet 282 00:13:29,290 --> 00:13:32,540 att sitta ner med professor Harry Lewis i datavetenskap avdelning, som 283 00:13:32,540 --> 00:13:34,640 faktiskt lärde Bill Gates några år sedan, 284 00:13:34,640 --> 00:13:38,460 och står här innan dessa tre sidor av utdrag. 285 00:13:38,460 --> 00:13:39,560 Låt oss ta en titt. 286 00:13:39,560 --> 00:13:45,520 >> HARRY LEWIS: Vad du har här är en notering av en tidig mjukvara 287 00:13:45,520 --> 00:13:50,240 skriven av Bill Gates och Paul Allen, grundarna av Microsoft. 288 00:13:50,240 --> 00:13:52,570 Så koden är intressant för två skäl. 289 00:13:52,570 --> 00:13:55,480 Först av allt, det blev Microsofts första produkt, 290 00:13:55,480 --> 00:14:01,810 som var tolk för BASIC programmeringsspråk. 291 00:14:01,810 --> 00:14:04,940 Och för det andra, var det ett av de första försöken 292 00:14:04,940 --> 00:14:10,580 att skapa en tolk så vanligt människor skulle kunna använda datorer. 293 00:14:10,580 --> 00:14:12,670 >> Så Bill Gates var en grundutbildning vid Harvard. 294 00:14:12,670 --> 00:14:14,820 Jag började undervisa vid Harvard 1974. 295 00:14:14,820 --> 00:14:16,560 Detta gjordes 1975. 296 00:14:16,560 --> 00:14:20,180 Så det var i början av sin karriär och i början av min karriär. 297 00:14:20,180 --> 00:14:23,790 Jag faktiskt lärt Bill in en kurs vid den här tiden. 298 00:14:23,790 --> 00:14:27,130 Paul Allen var inte en Harvard student, men han 299 00:14:27,130 --> 00:14:31,020 hade varit en skola klasskamrat till Bill Gates. 300 00:14:31,020 --> 00:14:33,740 Om ni komma och titta vid noteringen, du ska 301 00:14:33,740 --> 00:14:36,230 faktiskt hitta en tredje namn, Monte Davidoff, 302 00:14:36,230 --> 00:14:39,260 som var Gates klasskamrat här på Harvard. 303 00:14:39,260 --> 00:14:41,340 >> OK, här är så en intressant kommentar här uppe. 304 00:14:41,340 --> 00:14:47,150 Det står "I 4K kan radera kvadratroten men för slingor ändå bör fungera. " 305 00:14:47,150 --> 00:14:53,080 OK, så vad det betyder är att det var två sätt att kompilera programmet. 306 00:14:53,080 --> 00:14:57,860 Det ena var att köra på en version av denna Altair dator 307 00:14:57,860 --> 00:15:04,310 som bara hade 4K ord minne, 4,096 ord av minnet. 308 00:15:04,310 --> 00:15:07,050 Men den stora versionen hade 8K. 309 00:15:07,050 --> 00:15:09,770 Och så vad det säger är att i den 4K version 310 00:15:09,770 --> 00:15:12,770 du var tvungen att ta bort en del kod för att få det att passa. 311 00:15:12,770 --> 00:15:14,790 Och en av de saker som skulle utgå 312 00:15:14,790 --> 00:15:16,290 skulle vara kvadratroten rutin. 313 00:15:16,290 --> 00:15:20,360 Men tydligen loopar bör fortfarande 314 00:15:20,360 --> 00:15:26,392 fungerar även när du sammanställa ner för bara 4K version av datorn. 315 00:15:26,392 --> 00:15:29,350 DAVID J. MALAN: Så en av de teman, som vi får se i datavetenskap, 316 00:15:29,350 --> 00:15:31,430 är denna föreställning om skiktning och abstraktion, 317 00:15:31,430 --> 00:15:34,670 och verkligen står på axlarna av folk som har kommit före oss, inte 318 00:15:34,670 --> 00:15:37,890 till skillnad från vissa av Bill Gates och Paul Allen berättelse här. 319 00:15:37,890 --> 00:15:40,080 Och vad detta innebär är att vi i dag kan ta för 320 00:15:40,080 --> 00:15:43,490 givet att saker är faktiskt lättare för oss att skriva kod. 321 00:15:43,490 --> 00:15:47,170 Faktum kod, som vi sade på fredagen, är mer tekniskt kallas källkod. 322 00:15:47,170 --> 00:15:52,210 Och det är denna engelska liknande syntax det är mer korrekt och mer väldefinierat 323 00:15:52,210 --> 00:15:55,480 än något som pseudo-kod, för vilket det inte finns någon formell definition. 324 00:15:55,480 --> 00:15:58,320 >> Och idag vad vi ska att fokusera på är källkod 325 00:15:58,320 --> 00:16:01,010 som ser ut så här, vilket visserligen vid första anblicken 326 00:16:01,010 --> 00:16:02,690 ser helt kryptiska. 327 00:16:02,690 --> 00:16:08,540 Och ärligt talat, det är mycket mer estetiskt komplex än den underliggande programmet. 328 00:16:08,540 --> 00:16:13,300 Allt det här programmet gör, minns, är det som vi säger? 329 00:16:13,300 --> 00:16:14,990 Den skriver bara "hej världen." 330 00:16:14,990 --> 00:16:19,600 Och ändå titta på alla de saker vi behöver att linda runt den mycket enkel fras. 331 00:16:19,600 --> 00:16:21,750 Men snart alla dessa linjer och fler 332 00:16:21,750 --> 00:16:24,800 kommer att göra mycket bättre känsla för dig. 333 00:16:24,800 --> 00:16:26,940 >> Och flödet är som följer. 334 00:16:26,940 --> 00:16:31,220 Vad vi behöver till vårt förfogande är att ta koden, som källa 335 00:16:31,220 --> 00:16:32,340 kod som vi såg bara. 336 00:16:32,340 --> 00:16:35,060 Och vi behöver ett nytt program att köra igenom det. 337 00:16:35,060 --> 00:16:39,130 Vi behöver algoritmer som kan konvertera källkod, som den här, 338 00:16:39,130 --> 00:16:41,932 i objektkod, 0 och 1. 339 00:16:41,932 --> 00:16:43,890 Med andra ord, vad vi kommer att lära oss i dag 340 00:16:43,890 --> 00:16:46,620 är hur man gör detta, skriv källkod där uppe, 341 00:16:46,620 --> 00:16:49,930 ge det som indata till en särskild program som kallas en kompilator, 342 00:16:49,930 --> 00:16:52,140 och vi kommer att producera objektkod. 343 00:16:52,140 --> 00:16:54,600 Vilket är bara ett finare sätt att säger vi kommer att ta något 344 00:16:54,600 --> 00:16:58,350 som ser ut så här, ge det in i ett program som kallas en kompilator, 345 00:16:58,350 --> 00:17:01,210 producerande objektkod som ser ut så här. 346 00:17:01,210 --> 00:17:04,720 >> Så dessa är bokstav de mönster av 0 och 1 347 00:17:04,720 --> 00:17:08,550 som förstås av en Intel dator dessa dagar, 348 00:17:08,550 --> 00:17:12,480 att om den tolkas av CPU, hjärnorna insidan av en dator, 349 00:17:12,480 --> 00:17:16,130 kommer bokstavligen skriva ut, helt enkelt, "hello world." 350 00:17:16,130 --> 00:17:19,670 Nu finns det sätt fler 0s och 1s än du hoppas kan vara nödvändigt för detta. 351 00:17:19,670 --> 00:17:22,520 Men det beror på att vi bygger På en hel del av komplexiteten 352 00:17:22,520 --> 00:17:24,270 att vi hädanefter kan ta för givet. 353 00:17:24,270 --> 00:17:27,869 Med andra ord, en massa smarta människor har gett oss en massa häftiga verktyg 354 00:17:27,869 --> 00:17:32,480 och kraftfull programvara som vi kan nu göra projekt av våra egna. 355 00:17:32,480 --> 00:17:33,400 >> Så låt oss komma igång. 356 00:17:33,400 --> 00:17:36,640 Av följande skäl: i fredags, och för Problem Set 0 den här veckan, 357 00:17:36,640 --> 00:17:39,000 du kommer att spela i en värld som ser ut så här. 358 00:17:39,000 --> 00:17:42,180 Från och med idag och för problem Set 1 nästa vecka, koden 359 00:17:42,180 --> 00:17:45,410 kommer att se lite mer kryptiskt, men funktionellt är 360 00:17:45,410 --> 00:17:46,940 kommer att vara samma. 361 00:17:46,940 --> 00:17:50,770 Så varsel, toppen är Scratch, botten är C. Frankly Scratch 362 00:17:50,770 --> 00:17:52,780 är mycket mer användarvänlig vänliga och tillgängliga. 363 00:17:52,780 --> 00:17:56,890 Men om man nu jämför visuellt topp till botten, det är lite av en 00:59 364 00:17:56,890 --> 00:17:59,690 överensstämmelse mellan pusselbitar och språket 365 00:17:59,690 --> 00:18:00,870 vi håller på att spela med. 366 00:18:00,870 --> 00:18:04,420 I synnerhet säga, den blå pusselbit upp överst, 367 00:18:04,420 --> 00:18:08,370 är tydligen motsvarande vad sökord eller särskild fras i detta språk 368 00:18:08,370 --> 00:18:09,062 heter C? 369 00:18:09,062 --> 00:18:09,770 PUBLIKEN: Printf. 370 00:18:09,770 --> 00:18:10,728 DAVID J. MALAN: Printf. 371 00:18:10,728 --> 00:18:12,140 Det innebär formaterad utskrift. 372 00:18:12,140 --> 00:18:15,240 Och det är bara en fantasi sätt att säga printf i C 373 00:18:15,240 --> 00:18:18,615 kommer att bli ett uttalande eller en funktion som skriver ut något på skärmen. 374 00:18:18,615 --> 00:18:19,990 Vad innebär det att skriva ut på skärmen? 375 00:18:19,990 --> 00:18:23,627 Oavsett vad du säger till insidan av citat, inuti parenteser. 376 00:18:23,627 --> 00:18:25,460 Så återigen, visserligen, det finns massor av saker 377 00:18:25,460 --> 00:18:27,990 att du måste tänka på, parenteser, citationstecken, semikolon, 378 00:18:27,990 --> 00:18:28,656 och allt detta. 379 00:18:28,656 --> 00:18:30,600 Men allt detta är en slags av ovidkommande. 380 00:18:30,600 --> 00:18:33,660 Det intressanta takeaway för nu är att säga blocket i Scratch 381 00:18:33,660 --> 00:18:37,520 är ganska mycket motsvarar printf uttalande i C. 382 00:18:37,520 --> 00:18:41,390 >> Under tiden den gula pusselbit upp topp, när grön flagg klickade, 383 00:18:41,390 --> 00:18:44,736 är förmodligen likvärdigt vad sökord här? 384 00:18:44,736 --> 00:18:45,360 PUBLIKEN: Main. 385 00:18:45,360 --> 00:18:46,359 DAVID J. MALAN: Så main. 386 00:18:46,359 --> 00:18:47,410 Kanske int, kanske ogiltiga. 387 00:18:47,410 --> 00:18:51,280 Men huvud typ av ljud som det är viktigt, och det är verkligen. 388 00:18:51,280 --> 00:18:54,080 Så när grön flagga klickas är, återigen, den pusselbit 389 00:18:54,080 --> 00:18:56,390 som drar igång en Hela Scratch programmet. 390 00:18:56,390 --> 00:19:02,140 Men vi ska nu börja ringa det viktigaste, denna funktion kallas huvud. 391 00:19:02,140 --> 00:19:06,410 >> Nu under tiden vi kommer generalisera detta på följande sätt. 392 00:19:06,410 --> 00:19:08,780 Vi kan kalla säga en funktion. 393 00:19:08,780 --> 00:19:10,580 Och det kan se ut speciellt så här. 394 00:19:10,580 --> 00:19:11,770 Nå, hur är det med loopar? 395 00:19:11,770 --> 00:19:16,540 Om vi ​​vill börja konvertera eller översätta mer i Scratch till C, 396 00:19:16,540 --> 00:19:19,400 denna sak här tydligen bara säger "hello world" för alltid. 397 00:19:19,400 --> 00:19:23,060 Så om du associera dessa skript med en katt i Scratch, 398 00:19:23,060 --> 00:19:26,560 det bara kommer att fortsätta säga i någon form av tecknad bubbla, 399 00:19:26,560 --> 00:19:29,922 "Hallå världen, hallå världen, hello världen ", till leda, för alltid. 400 00:19:29,922 --> 00:19:33,130 Om vi ​​vill göra något liknande i C, det kommer att se lite kryptiskt. 401 00:19:33,130 --> 00:19:35,463 Men vi kan uppnå samma resultat, eftersom vi kommer så småningom 402 00:19:35,463 --> 00:19:36,861 reda, med syntax som denna. 403 00:19:36,861 --> 00:19:39,360 Jag kommer att använda printf igen, eftersom i slutet av dagen 404 00:19:39,360 --> 00:19:42,040 Jag vill skriva ut "hallå världen." 405 00:19:42,040 --> 00:19:45,610 Och jag tydligen med hjälp av en sökord som inte är för evigt. 406 00:19:45,610 --> 00:19:47,320 Det är i stället ordet samtidigt. 407 00:19:47,320 --> 00:19:49,650 Men bara semantiskt i English, medan typ av 408 00:19:49,650 --> 00:19:52,120 föreslår någon form av slinga eller cykel. 409 00:19:52,120 --> 00:19:55,070 >> Så det råkar vara det sökord som C använder. 410 00:19:55,070 --> 00:20:00,700 Och medan sant, varför inte samtidigt sant effektivt menar evigt? 411 00:20:00,700 --> 00:20:04,240 Tja, medan, som vi snart uppskattar allt mer, 412 00:20:04,240 --> 00:20:08,140 har detta parenteser bredvid där du kan sätta ett booleskt uttryck. 413 00:20:08,140 --> 00:20:11,360 Och så länge som det uttrycket är sant, denna kod, 414 00:20:11,360 --> 00:20:14,750 såsom betecknas mellan dessa två klamrar som vi kallar dem, 415 00:20:14,750 --> 00:20:16,880 kommer bara hålla igång igen och igen. 416 00:20:16,880 --> 00:20:18,410 >> Så sant är sant. 417 00:20:18,410 --> 00:20:20,900 Så medan riktiga medel bara göra det här för alltid. 418 00:20:20,900 --> 00:20:23,480 Det är nästan en dum konstruera för att uttrycka dig. 419 00:20:23,480 --> 00:20:26,590 Men det fanns ingen för evigt sökord i C. Det fanns samtidigt. 420 00:20:26,590 --> 00:20:29,390 Och det var en mycket enkel Booleskt uttryck som sant. 421 00:20:29,390 --> 00:20:32,210 Och så det här, vi får se, uppnår samma resultat. 422 00:20:32,210 --> 00:20:33,890 >> Hur annars kan du implementera en loop? 423 00:20:33,890 --> 00:20:36,980 Tja, i Scratch du kanske hårt kod ett visst antal 424 00:20:36,980 --> 00:20:39,430 iterationer i slingan här. 425 00:20:39,430 --> 00:20:43,210 Och så det är precis vad vi skulle kunna göra i denna version av C, 426 00:20:43,210 --> 00:20:46,140 där vi har en så kallad för slinga. 427 00:20:46,140 --> 00:20:49,850 Och för loop här kommer att iterera, något kryptiskt, 428 00:20:49,850 --> 00:20:54,100 från värdet 0 på upp till men mindre än 10. 429 00:20:54,100 --> 00:20:55,955 >> Nu variabler i Scratch. 430 00:20:55,955 --> 00:20:57,830 Du kanske inte har haft tillfälle att använda dessa. 431 00:20:57,830 --> 00:21:02,516 Men vad är poängen, i allmänhet, av en variabel vi säga förra veckan? 432 00:21:02,516 --> 00:21:03,015 Vad är det? 433 00:21:03,015 --> 00:21:03,780 >> Publik: Poäng. 434 00:21:03,780 --> 00:21:05,200 >> DAVID J. MALAN: Att peka? 435 00:21:05,200 --> 00:21:05,700 Åh, pekar. 436 00:21:05,700 --> 00:21:07,620 OK, hålla reda på punkter, till exempel, i ett spel. 437 00:21:07,620 --> 00:21:09,510 Eller mer allmänt göra vad med den rörliga? 438 00:21:09,510 --> 00:21:10,450 Vad är nyttan av dem? 439 00:21:10,450 --> 00:21:10,825 >> PUBLIKEN: Minne. 440 00:21:10,825 --> 00:21:11,750 >> DAVID J. MALAN: Ja, så minnet. 441 00:21:11,750 --> 00:21:13,000 Det är för att lagra något. 442 00:21:13,000 --> 00:21:17,336 Och den typ av fåniga visuella jag använt förra gången var så här glasskål. 443 00:21:17,336 --> 00:21:19,710 Och om vi ville att lagra något inne i en variabel, 444 00:21:19,710 --> 00:21:21,918 till exempel just nu värdet är sex eftersom det 445 00:21:21,918 --> 00:21:23,450 är sex pingisbollar i här. 446 00:21:23,450 --> 00:21:26,158 Det är bara någon form av lagring behållare som under huven 447 00:21:26,158 --> 00:21:30,030 genomförs med bitar, 0 och 1, Men en dator råkar göra det. 448 00:21:30,030 --> 00:21:32,900 >> Så i Scratch, om vi vill ha en variabel, 449 00:21:32,900 --> 00:21:34,840 Vi kan använda en orange-block som denna. 450 00:21:34,840 --> 00:21:37,050 Vi kallar det räknare i det här fallet. 451 00:21:37,050 --> 00:21:38,890 Jag initierade den till 0. 452 00:21:38,890 --> 00:21:41,080 Och vad det jag då göra? 453 00:21:41,080 --> 00:21:44,780 För alltid, säger disk, som om du spelar med det i Scratch, 454 00:21:44,780 --> 00:21:45,780 du ska bara se Scratch. 455 00:21:45,780 --> 00:21:49,920 Katten eller vad kostym du sätta på honom kommer att tala det aktuella numret. 456 00:21:49,920 --> 00:21:52,840 >> Byt disk av 1 är liknande uppräkning med 1. 457 00:21:52,840 --> 00:21:56,580 Och så detta kommer att räknas från det så vad? 458 00:21:56,580 --> 00:21:59,114 Från 0 til oändlighet, eller tills Scratch raster, 459 00:21:59,114 --> 00:22:01,030 eller tills du slags tappar intresset för att titta på 460 00:22:01,030 --> 00:22:02,650 hur högt han faktiskt kan räkna. 461 00:22:02,650 --> 00:22:04,800 >> Så hur kan vi omvandla denna till C? 462 00:22:04,800 --> 00:22:06,480 Det kommer att se lite kryptiskt. 463 00:22:06,480 --> 00:22:08,896 Men återigen, om man tittar på varje av dessa linjer var för sig 464 00:22:08,896 --> 00:22:10,410 De slags lineup allmänhet. 465 00:22:10,410 --> 00:22:13,526 Så tydligen int kommer att har någon speciell betydelse i C. 466 00:22:13,526 --> 00:22:14,400 Vi får se det igen. 467 00:22:14,400 --> 00:22:15,810 Som en parentes betyder heltal. 468 00:22:15,810 --> 00:22:16,990 Så det betyder bara nummer. 469 00:22:16,990 --> 00:22:18,920 Så det är den typ av glasskål jag vill, en 470 00:22:18,920 --> 00:22:21,120 som kan lagra nummer, inte bordtennisbollar. 471 00:22:21,120 --> 00:22:25,520 Och jag kommer att använda likhetstecken där för att tilldela den ett värde på 0. 472 00:22:25,520 --> 00:22:29,440 Så det är riktigt som set mot 0, men i C. 473 00:22:29,440 --> 00:22:32,840 >> Under tiden, medan sant, var att motsvarande, naturligtvis, för att för evigt, 474 00:22:32,840 --> 00:22:35,980 även om det är lite kryptiskt, och sedan inne i klammerparentes. 475 00:22:35,980 --> 00:22:39,188 Och du kan tänka på dessa klammerparenteser, som du kan skriva på tangentbordet, 476 00:22:39,188 --> 00:22:43,110 som verkligen vara som krökningen i Dessa gula slinga block i Scratch. 477 00:22:43,110 --> 00:22:45,700 Det omfattar flera rader kod. 478 00:22:45,700 --> 00:22:48,120 >> Printf är att få en lite skrämmande nu eftersom jag 479 00:22:48,120 --> 00:22:51,120 se inte bara citerar inom parentes. 480 00:22:51,120 --> 00:22:55,160 Men vad annat är nytt syntaktiskt i detta exempel? 481 00:22:55,160 --> 00:22:57,300 Det finns en procent d. 482 00:22:57,300 --> 00:22:58,551 Och sedan snedstreck n är där. 483 00:22:58,551 --> 00:23:00,883 Vi såg det innan, och med även om jag inte nämnde det. 484 00:23:00,883 --> 00:23:01,886 Sedan finns det ett kommatecken. 485 00:23:01,886 --> 00:23:03,010 Och sedan finns det en räknare. 486 00:23:03,010 --> 00:23:05,010 >> Men vi får se på bara ögonblick att detta bara 487 00:23:05,010 --> 00:23:09,080 en standard sätt att säga print a "Decimaltal," citat, unquote, 488 00:23:09,080 --> 00:23:10,500 några decimaltal. 489 00:23:10,500 --> 00:23:13,370 Men jag ska berätta senare vad det decimaltal är. 490 00:23:13,370 --> 00:23:16,835 Så det faktum att det finns ett kommatecken i denna linje säger printf, 491 00:23:16,835 --> 00:23:18,710 betyder gå vidare och skriva ut några decimaltal. 492 00:23:18,710 --> 00:23:23,110 Åh, och förresten, är antalet oavsett värdet på denna variabel är. 493 00:23:23,110 --> 00:23:25,880 Och så för att göra det mer klart, vi får se ett exempel 494 00:23:25,880 --> 00:23:30,930 snart involverar exakt printf inom ramen för verkliga C-program. 495 00:23:30,930 --> 00:23:33,472 >> Nu är det bara att slå in några av dessa konstruktioner. 496 00:23:33,472 --> 00:23:36,680 Booleska uttryck, kanske du inte har tillfälle att använda dessa i ditt program 497 00:23:36,680 --> 00:23:39,450 men du kanske mycket väl, speciellt om användning av betingelser. 498 00:23:39,450 --> 00:23:43,460 Varför dessa två exempel från Skrapa menar om x är mindre än y, 499 00:23:43,460 --> 00:23:48,770 eller om x är mindre än y och y är mindre än z, hur kan vi översätta det? 500 00:23:48,770 --> 00:23:50,810 >> Tja, i C är det bara kommer att se ut så här. 501 00:23:50,810 --> 00:23:55,300 Lite kryptiskt, fler parenteser, några konstiga et-tecken, men i grunden 502 00:23:55,300 --> 00:23:59,160 idéerna är så enkla som de är i pusselbit världen. 503 00:23:59,160 --> 00:24:02,690 Vi är helt enkelt kontrollera om något är mindre än något annat. 504 00:24:02,690 --> 00:24:03,910 >> Vad sägs om förhållanden? 505 00:24:03,910 --> 00:24:09,710 I ett nötskal på engelska, vad innebär det bit av Scratch kod do skulle du säga? 506 00:24:09,710 --> 00:24:11,050 >> Publik: Jämför två siffror. 507 00:24:11,050 --> 00:24:13,760 >> DAVID J. MALAN: Jämför två siffror, och om x är mindre än y 508 00:24:13,760 --> 00:24:14,860 den säger så mycket. 509 00:24:14,860 --> 00:24:18,080 Om x är större än y den säger så mycket, annars 510 00:24:18,080 --> 00:24:20,740 om x är lika med y det står så mycket. 511 00:24:20,740 --> 00:24:22,180 Var har x och y ifrån? 512 00:24:22,180 --> 00:24:22,680 Vem vet. 513 00:24:22,680 --> 00:24:25,380 Denna bit av Scratch kod är ur sitt sammanhang. 514 00:24:25,380 --> 00:24:29,050 Men vad vi vill göra nu är att översätta detta för bara ett ögonblick för att se. 515 00:24:29,050 --> 00:24:31,660 >> Så när du får bekväm denna vecka i Problem Set 516 00:24:31,660 --> 00:24:34,190 0 spelar i den här världen till vänster, inser 517 00:24:34,190 --> 00:24:36,940 att idéerna inte förändras denna vecka eller nästa eller därefter. 518 00:24:36,940 --> 00:24:38,690 Vi är helt enkelt att gå till börja skriva saker 519 00:24:38,690 --> 00:24:41,240 på ett annat sätt med våra tangentbord i stället för vår mus. 520 00:24:41,240 --> 00:24:44,577 >> Så om x är mindre än y, och det finns några parenteser där, 521 00:24:44,577 --> 00:24:47,160 så finns det några klammerparenteser igen för slags kapsla den 522 00:24:47,160 --> 00:24:48,970 precis som de gula pusselbitar gör. 523 00:24:48,970 --> 00:24:53,000 Och jag ska printf x är mindre än y, och så vidare. 524 00:24:53,000 --> 00:24:56,540 >> Vad är trevligt om C, som ni kan se här, 525 00:24:56,540 --> 00:25:00,480 är att du inte får denna häckning, häckande, häckande det är nödvändigtvis 526 00:25:00,480 --> 00:25:02,220 kommer att driva din kod till höger. 527 00:25:02,220 --> 00:25:04,990 Du kan i stället få allt lineup gillar prydligt här. 528 00:25:04,990 --> 00:25:08,960 Men det är bara en estetisk detalj vi får se igen snart. 529 00:25:08,960 --> 00:25:09,660 >> Okej. 530 00:25:09,660 --> 00:25:13,290 Så det för oss tillbaka till denna kryptiska ser programmet. 531 00:25:13,290 --> 00:25:15,180 Låt oss faktiskt skriva lite kod. 532 00:25:15,180 --> 00:25:16,830 Nu hur ska du gå om att skriva kod? 533 00:25:16,830 --> 00:25:21,310 Alla dessa år som du har ägs Mac eller PC, stationär eller bärbar dator, 534 00:25:21,310 --> 00:25:24,520 du faktiskt har haft möjlighet att börja skriva programkod. 535 00:25:24,520 --> 00:25:27,050 Men du är förmodligen saknar en speciell typ av program. 536 00:25:27,050 --> 00:25:28,470 Du kan säkert skriva kod. 537 00:25:28,470 --> 00:25:30,740 Men du kan inte nödvändigtvis, ur lådan, 538 00:25:30,740 --> 00:25:34,210 konvertera denna källkod till objektkod, 0 och 1 539 00:25:34,210 --> 00:25:35,619 utan vad på din dator? 540 00:25:35,619 --> 00:25:36,410 PUBLIKEN: Compiler. 541 00:25:36,410 --> 00:25:37,630 DAVID J. MALAN: Så en kompilator, höger. 542 00:25:37,630 --> 00:25:39,730 Nu har de flesta av er förmodligen äger inte en kompilator, 543 00:25:39,730 --> 00:25:41,259 har aldrig hämtat en kompilator. 544 00:25:41,259 --> 00:25:44,300 Men du kommer att se att du kan ladda ner den liksom de flesta andra mjukvara. 545 00:25:44,300 --> 00:25:47,470 I en värld av Mac OS, kanske du ladda ner eller har hämtat redan 546 00:25:47,470 --> 00:25:50,437 något som kallas Xcode eller GCC eller klang. 547 00:25:50,437 --> 00:25:52,270 Om du kommer från Windows värld du kanske 548 00:25:52,270 --> 00:25:56,190 har hämtat Visual Studio, Visual Basic, miljöer som. 549 00:25:56,190 --> 00:25:59,200 Det finns dussintals kompilatorer dessa dagar som du kan använda. 550 00:25:59,200 --> 00:26:01,940 Men korta av det här är att det skulle vara jobbigt 551 00:26:01,940 --> 00:26:04,480 och, ärligt talat, en teknisk mardröm för hundratals 552 00:26:04,480 --> 00:26:07,680 för människor med olika datorkonfigurationer för alla 553 00:26:07,680 --> 00:26:09,800 konfigurera sina maskiner på exakt samma sätt 554 00:26:09,800 --> 00:26:11,700 så att vi alla kan vara på samma sida. 555 00:26:11,700 --> 00:26:15,240 >> Så vad vi i stället göra i CS50 är vi ger dig 556 00:26:15,240 --> 00:26:18,349 en vanlig miljö, en Linux-miljö som är 557 00:26:18,349 --> 00:26:20,140 kommer att se lite ungefär så här. 558 00:26:20,140 --> 00:26:22,980 Du kommer att se mer av detta i Problem Set 1 specifikation som 559 00:26:22,980 --> 00:26:25,330 kommer att gå på nätet denna fredag ​​kväll. 560 00:26:25,330 --> 00:26:28,360 >> Och vad det innebär är att du hädan 561 00:26:28,360 --> 00:26:32,060 kommer att kunna ladda ner och installera ett program 562 00:26:32,060 --> 00:26:33,650 kallas CS50 Appliance. 563 00:26:33,650 --> 00:26:36,275 Och du ska ladda ner och installerar ett annat program som heter 564 00:26:36,275 --> 00:26:40,300 en hypervisor, som är bara en finare sätt att uppnå detta. 565 00:26:40,300 --> 00:26:44,600 Oavsett om du äger en Mac eller PC eller Linux-dator eller en Solaris-dator, 566 00:26:44,600 --> 00:26:46,830 eller vad galet drifts system du kör, 567 00:26:46,830 --> 00:26:49,820 du ska ladda ner ett program kallad hypervisor som är 568 00:26:49,820 --> 00:26:53,350 kommer att köra CS50 Appliance på datorn 569 00:26:53,350 --> 00:26:55,430 oavsett vad ditt operativsystem är. 570 00:26:55,430 --> 00:27:00,640 En hypervisor med andra ord omvandlar våra grejer till oavsett språk, 571 00:27:00,640 --> 00:27:03,850 oavsett instruktioner dina egen dator förstår. 572 00:27:03,850 --> 00:27:04,962 >> Så detta är en skiktning. 573 00:27:04,962 --> 00:27:06,920 Och återigen, är denna typ av tematisk i datorn 574 00:27:06,920 --> 00:27:08,722 vetenskap, byggnaden på toppen av saker. 575 00:27:08,722 --> 00:27:09,680 Du kanske har Windows. 576 00:27:09,680 --> 00:27:10,710 Du kanske har Mac OS. 577 00:27:10,710 --> 00:27:12,960 Men från och med nästa vecka är du kommer att ha hämtat 578 00:27:12,960 --> 00:27:14,980 en fri mjukvara kallad hypervisor. 579 00:27:14,980 --> 00:27:17,800 Du kommer att ha laddat ner en bit av programvara som kallas CS50 Appliance. 580 00:27:17,800 --> 00:27:21,050 >> Det kommer att köras i hypervisor, som kommer att köras på datorn. 581 00:27:21,050 --> 00:27:23,030 Och slutresultatet är att vi alla kommer 582 00:27:23,030 --> 00:27:26,220 har ett enkelt fönster som detta på din Mac eller PC 583 00:27:26,220 --> 00:27:30,160 som ger oss en illusion av alla kör samma operativsystem, 584 00:27:30,160 --> 00:27:32,800 utan någon annan inverkan på din dator. 585 00:27:32,800 --> 00:27:34,870 Och du kan helskärm den och i huvudsak beter 586 00:27:34,870 --> 00:27:37,550 som om du kör en operativsystem kallat Linux, 587 00:27:37,550 --> 00:27:40,270 vilket är vad CS50 Appliance är baserad på. 588 00:27:40,270 --> 00:27:42,930 >> Så låt oss verkligen använda detta nu att skriva ett program. 589 00:27:42,930 --> 00:27:45,450 Du kan skriva ett program Microsoft Word. 590 00:27:45,450 --> 00:27:48,160 Du kan skriva ett program använder Textedit eller Notepad, 591 00:27:48,160 --> 00:27:51,880 eller WordPad, eller ganska mycket ett ord bearbetningsprogram du någonsin använt. 592 00:27:51,880 --> 00:27:55,174 Men verkligheten är att du inte ska Använd egentligen något av dessa program. 593 00:27:55,174 --> 00:27:57,840 Du absolut inte bör använda något som Microsoft Word, vilket 594 00:27:57,840 --> 00:28:01,120 har fet riktade och kursiv stil, och större typsnitt och mindre typsnitt, 595 00:28:01,120 --> 00:28:03,560 eftersom datorn inte bryr sig om något av detta. 596 00:28:03,560 --> 00:28:05,600 Allt datorn är kommer att bry sig om är 597 00:28:05,600 --> 00:28:09,040 Engelska som instruktioner, skrivna i C. 598 00:28:09,040 --> 00:28:12,050 >> Så vad vi ska göra inne av CS50 Appliance 599 00:28:12,050 --> 00:28:14,290 är använda ett program fritt tillgängliga, det och det 600 00:28:14,290 --> 00:28:17,360 förinstallerad i detta apparat, som kallas Gedit. 601 00:28:17,360 --> 00:28:22,280 Och Gedit är bara en super enkel textredigerare som Mac OS s Textedit, 602 00:28:22,280 --> 00:28:26,200 som Windows Anteckningar som kommer att ser lite ut så här. 603 00:28:26,200 --> 00:28:28,910 >> Så låt oss faktiskt inte titta på diabilder på detta. 604 00:28:28,910 --> 00:28:32,580 Men låt oss faktiskt gå in i miljön i sig. 605 00:28:32,580 --> 00:28:36,090 Jag kommer att gå vidare och logga in, i denna andra fönstret, 606 00:28:36,090 --> 00:28:40,910 till min CS50 Appliance, som jag har förinstallerat på min laptop här. 607 00:28:40,910 --> 00:28:43,771 >> Lägg märke till att, som Windows och Mac OS, den har vissa menyer. 608 00:28:43,771 --> 00:28:45,520 Liksom Windows det sätter det där nere istället 609 00:28:45,520 --> 00:28:47,020 för Mac OS, vilket placerar den där nere. 610 00:28:47,020 --> 00:28:48,930 Men verkligheten är att det är alla typer av samma. 611 00:28:48,930 --> 00:28:50,770 Och här är ett helt massa programvara. 612 00:28:50,770 --> 00:28:51,770 Det finns Dropbox. 613 00:28:51,770 --> 00:28:54,780 Det finns en hel massa tillbehör, grafiska program som vi ska 614 00:28:54,780 --> 00:28:56,430 använda senare i termen för problemsamlingar. 615 00:28:56,430 --> 00:28:59,650 Det finns en webbläsare inbyggd så att detta är ett fullfjädrat dator 616 00:28:59,650 --> 00:29:01,240 insidan av en dator. 617 00:29:01,240 --> 00:29:04,170 >> Men jag kommer att klicka här längst till vänster vit ikon här, 618 00:29:04,170 --> 00:29:05,890 vilket är symbolen för Gedit. 619 00:29:05,890 --> 00:29:09,650 Och det kommer att öppna ett fönster som har tre paneler till den, 620 00:29:09,650 --> 00:29:12,590 en vänster ett, en övre en, och en botten ett. 621 00:29:12,590 --> 00:29:16,071 >> Nu är det i denna topp rätta som Jag ska faktiskt skriva lite kod. 622 00:29:16,071 --> 00:29:16,820 Så låt oss göra det här ,. 623 00:29:16,820 --> 00:29:19,040 Jag kommer att gå till Arkiv, Spara. 624 00:29:19,040 --> 00:29:22,100 Och du aldrig skulle ha sett detta fönster innan. 625 00:29:22,100 --> 00:29:23,620 Men detta är som Mac OS eller Windows. 626 00:29:23,620 --> 00:29:25,490 Det är bara ett fönster med alla mappar 627 00:29:25,490 --> 00:29:27,290 att jag har inuti datorn. 628 00:29:27,290 --> 00:29:30,320 >> Och jag kommer att spara filen som hej.c. 629 00:29:30,320 --> 00:29:32,690 Och jag ska gå vidare och klicka på Spara. 630 00:29:32,690 --> 00:29:36,364 Och nu märker jag en flik uppe till vänster heter hej.c. 631 00:29:36,364 --> 00:29:38,280 Så förmodligen ganska bekant även om du har inte 632 00:29:38,280 --> 00:29:40,240 använt detta program innan. 633 00:29:40,240 --> 00:29:44,890 >> Och nu ska jag skriva in dem ganska kryptisk sekvens av kommandon 634 00:29:44,890 --> 00:29:46,360 att vi såg för en stund sedan. 635 00:29:46,360 --> 00:29:49,330 Inkludera, standard I / O.h. 636 00:29:49,330 --> 00:29:50,600 Mer om det snart. 637 00:29:50,600 --> 00:29:55,670 Int main tomrum, öppen lockigt stag, stängt klammerparentes. 638 00:29:55,670 --> 00:30:01,570 Och så inne i det jag tycker är där vi hade "Hej världen" semikolon. 639 00:30:01,570 --> 00:30:03,100 Och nu spara. 640 00:30:03,100 --> 00:30:08,780 >> Så det här är ett program skrivet i C, skriven därför i källkoden. 641 00:30:08,780 --> 00:30:10,720 Men jag kan inte bara köra det här programmet. 642 00:30:10,720 --> 00:30:13,390 Jag liksom vill dubbla klicka på en ikon någonstans, 643 00:30:13,390 --> 00:30:16,390 men ingen ikon finns andra än källkoden filen. 644 00:30:16,390 --> 00:30:20,359 Vad, återigen, är processen nu att Jag måste köra den här filen igenom? 645 00:30:20,359 --> 00:30:21,150 PUBLIKEN: Compiler. 646 00:30:21,150 --> 00:30:22,399 DAVID J. MALAN: Så en kompilator. 647 00:30:22,399 --> 00:30:24,890 Så i olika datorer som du göra detta på olika sätt. 648 00:30:24,890 --> 00:30:27,480 Men vad vi har gjort här i den CS50 Appliance som är 649 00:30:27,480 --> 00:30:31,260 representativ för hur du kanske göra detta på många olika system, 650 00:30:31,260 --> 00:30:34,036 är jag helt enkelt gå till köra ett kommando som heter make. 651 00:30:34,036 --> 00:30:35,660 Och gör bokstavligen kommer att göra det. 652 00:30:35,660 --> 00:30:36,640 Gör mig ett program. 653 00:30:36,640 --> 00:30:39,060 >> Så gör kommer att köra en kompilator för mig. 654 00:30:39,060 --> 00:30:42,160 Och namnet på programmet Jag vill göra är hej. 655 00:30:42,160 --> 00:30:43,510 Nu gör är ett program. 656 00:30:43,510 --> 00:30:47,170 Och gör är smart nog att inse att om jag säger att hej, 657 00:30:47,170 --> 00:30:50,980 det kommer att se ut automatiskt efter en fil som heter hej.c 658 00:30:50,980 --> 00:30:53,420 bara för att det är det sätt den är konfigurerad. 659 00:30:53,420 --> 00:31:00,300 >> Så när jag nu slår in här, det här galet kryptisk linje fick just avrättades. 660 00:31:00,300 --> 00:31:02,720 Och tro mig, innan lång, inom bara några dagar, 661 00:31:02,720 --> 00:31:05,590 kommer du att förstå vad alla av detta nonsens medel. 662 00:31:05,590 --> 00:31:11,150 Men för nu, vet bara att göra utlöst utförandet av en kompilator. 663 00:31:11,150 --> 00:31:13,290 Med andra ord, fann det en kompilator på min dator 664 00:31:13,290 --> 00:31:14,820 det är förinstallerat på CS50 Appliance 665 00:31:14,820 --> 00:31:16,560 att vi ska lämna till dig i Problem Set 1. 666 00:31:16,560 --> 00:31:20,990 Och det tog sedan hej.c som ingång, och producerade tydligen 667 00:31:20,990 --> 00:31:23,040 0 och 1 som produktion. 668 00:31:23,040 --> 00:31:29,410 >> Och som standard vad den gör är det sparar dessa 0 och 1 i en fil som heter hej. 669 00:31:29,410 --> 00:31:33,180 Och även om denna syntax för kanske vara nytt för dig, helt enkelt genom att säga dot 670 00:31:33,180 --> 00:31:37,110 slash hej kommer att vara den menar med vilket jag kör det här programmet. 671 00:31:37,110 --> 00:31:40,360 >> För nu och för åtminstone ett par veckor, nästan alla av de program 672 00:31:40,360 --> 00:31:44,230 Vi skriver kommer att vara i svartvit textfönster. 673 00:31:44,230 --> 00:31:47,006 Ingen mus, inget klickande, inga fönster, inga ikoner. 674 00:31:47,006 --> 00:31:49,630 Vi kommer att hålla det enkelt och fokusera på de underliggande idéerna 675 00:31:49,630 --> 00:31:52,490 början innan vi kommer till något högre nivå, till exempel, 676 00:31:52,490 --> 00:31:56,410 liksom bryta ut spel som vi talat omkring i den första föreläsningen i förra veckan. 677 00:31:56,410 --> 00:32:00,820 >> Så när jag slog in här, det är motsvarande i en text bara miljö 678 00:32:00,820 --> 00:32:03,272 att dubbla klicka på en ikon som heter hej. 679 00:32:03,272 --> 00:32:05,480 Vad förväntar du vilja hända när jag slog in då? 680 00:32:05,480 --> 00:32:07,120 >> PUBLIK: Det ska skriva ut "hello world." 681 00:32:07,120 --> 00:32:10,000 >> DAVID J. MALAN: Förhoppningsvis Det kommer att skrivas ut "hello world." 682 00:32:10,000 --> 00:32:11,370 Och ja det gjorde. 683 00:32:11,370 --> 00:32:13,690 Nu det har varit en del kryptiska syntax här. 684 00:32:13,690 --> 00:32:15,950 Låt oss spola tillbaka för bara en stund och se om vi 685 00:32:15,950 --> 00:32:19,530 kan inte börja dra slutsatser bara genom knorra, försöker och misslyckas, 686 00:32:19,530 --> 00:32:21,130 om vad som händer här. 687 00:32:21,130 --> 00:32:23,609 Vad händer om jag bli av med backslash n? 688 00:32:23,609 --> 00:32:25,650 Nu några av er som har programmeras före förmodligen 689 00:32:25,650 --> 00:32:27,054 vet direkt vad det betyder. 690 00:32:27,054 --> 00:32:29,220 Men för de av er som har aldrig programmerat förut, 691 00:32:29,220 --> 00:32:34,052 åtminstone tror på dig själv vad som händer att ändras när jag kör det här programmet? 692 00:32:34,052 --> 00:32:37,010 Så jag kommer att gå tillbaka till min lite svart och vitt fönster, vilket 693 00:32:37,010 --> 00:32:39,290 är det fönster där Jag kan sammanställa denna. 694 00:32:39,290 --> 00:32:41,130 Jag kommer att kompilera hello. 695 00:32:41,130 --> 00:32:43,520 Vi kommer att se samma kryptisk sekvens av kommandon. 696 00:32:43,520 --> 00:32:45,719 Och jag kommer att göra punkt snedstreck hej. 697 00:32:45,719 --> 00:32:48,260 Och nu någon, om du skulle, som aldrig programmerat förut, 698 00:32:48,260 --> 00:32:49,770 vad som kan vara annorlunda den här gången? 699 00:32:49,770 --> 00:32:50,020 Yeah. 700 00:32:50,020 --> 00:32:51,840 >> PUBLIK: Det kommer inte att stoppa utskrift "hej världen." 701 00:32:51,840 --> 00:32:52,660 >> DAVID J. MALAN: Det kommer att-- ledsen? 702 00:32:52,660 --> 00:32:54,210 >> PUBLIK: Det kommer inte att sluta att skriva ut det? 703 00:32:54,210 --> 00:32:55,810 >> DAVID J. MALAN: Det kommer inte sluta skriva ut "hello world." 704 00:32:55,810 --> 00:32:56,560 Så inte en dålig idé. 705 00:32:56,560 --> 00:32:58,633 Andra idéer? 706 00:32:58,633 --> 00:32:59,132 Yeah. 707 00:32:59,132 --> 00:33:00,060 >> PUBLIK: Felmeddelande? 708 00:33:00,060 --> 00:33:01,750 >> DAVID J. MALAN: Fel meddelande, OK, kunde vara. 709 00:33:01,750 --> 00:33:02,250 Vad mer? 710 00:33:02,250 --> 00:33:05,479 PUBLIK: Det kan skriva ut konsolen med semikolon också? 711 00:33:05,479 --> 00:33:08,270 DAVID J. MALAN: Kan skriva ut konsolen med semikolon också. 712 00:33:08,270 --> 00:33:11,950 Så kanske det bakstreck då vissa typ av falla som är viktigt. 713 00:33:11,950 --> 00:33:14,860 Alla andra tankar? 714 00:33:14,860 --> 00:33:16,412 >> Så alla goda idéer. 715 00:33:16,412 --> 00:33:18,370 Och faktiskt, det kommer att vara ett felmeddelande. 716 00:33:18,370 --> 00:33:20,400 Det är nog mest troligt vara svaret i allmänhet 717 00:33:20,400 --> 00:33:22,420 för de närmaste veckorna som vi lär oss att koda här. 718 00:33:22,420 --> 00:33:27,680 >> Men för nu ihåg att datorer bara vad du säger till dem att göra. 719 00:33:27,680 --> 00:33:30,400 Ungefär som den löjliga jordnöt smör och gelé exempel. 720 00:33:30,400 --> 00:33:33,860 Våra mänskliga datorerna skulle bara att göra det du sa till dem att göra. 721 00:33:33,860 --> 00:33:36,250 Så i detta fall, om du inte tala om för datorn 722 00:33:36,250 --> 00:33:41,190 för att flytta den blinkande markören till nästa rad, det kommer inte att göra det. 723 00:33:41,190 --> 00:33:45,390 Så när jag kör det här programmet nu märker skillnaden. 724 00:33:45,390 --> 00:33:46,900 >> Ser ut som en bugg. 725 00:33:46,900 --> 00:33:49,190 Det är en estetisk bugg, kanske. 726 00:33:49,190 --> 00:33:53,310 Men det som är nytt med den här utgång kontra den sista tydligen? 727 00:33:53,310 --> 00:33:53,810 Yeah. 728 00:33:53,810 --> 00:33:54,920 >> PUBLIK: Det gjorde inte en ny rad. 729 00:33:54,920 --> 00:33:56,586 >> DAVID J. MALAN: Det gjorde inte en ny rad. 730 00:33:56,586 --> 00:33:58,740 Nu de av er som har kanske gjort webbsidor 731 00:33:58,740 --> 00:34:01,910 innan, kanske du känner till den BR tagg eller punkt taggen, 732 00:34:01,910 --> 00:34:03,120 mycket lika i anden. 733 00:34:03,120 --> 00:34:06,680 En webbläsare kommer att ignorera dig tills du berätta exakt vad du ska göra. 734 00:34:06,680 --> 00:34:10,020 På samma sätt är ett språk som C endast kommer att göra det du ber den om. 735 00:34:10,020 --> 00:34:12,730 >> Så anledningen till att alla dessa exempel, 736 00:34:12,730 --> 00:34:15,350 Hittills har sådan nonchalant hade denna bakstreck 737 00:34:15,350 --> 00:34:18,560 i det, det är de medel genom vilken man uttrycker sig 738 00:34:18,560 --> 00:34:21,380 som en ny rad tecken, så att säga. 739 00:34:21,380 --> 00:34:26,219 Och du kan sorts uppskatta, kanske, att det skulle se sådan dum 740 00:34:26,219 --> 00:34:27,070 om inte annat. 741 00:34:27,070 --> 00:34:29,150 Om jag ville ha en ny linje, precis slå in och sedan slag 742 00:34:29,150 --> 00:34:32,219 för styckning koden sånt borde egentligen inte gnida dig på rätt sätt. 743 00:34:32,219 --> 00:34:33,830 Och även om du inte verkligen bryr sig på denna punkt, 744 00:34:33,830 --> 00:34:35,830 kommer du att inse att Detta är inte en särskilt 745 00:34:35,830 --> 00:34:37,870 snygg bit kod. 746 00:34:37,870 --> 00:34:39,969 >> Och så vad världen beslutade år sedan är 747 00:34:39,969 --> 00:34:43,420 att när du vill placera markören till en ny rad explicit, 748 00:34:43,420 --> 00:34:46,332 måste du uttryckligen säga ny linje, bakstreck n. 749 00:34:46,332 --> 00:34:48,040 Och det finns något annat symboler som det. 750 00:34:48,040 --> 00:34:50,719 Men just nu vi ska bara fokusera på omvänt snedstreck n. 751 00:34:50,719 --> 00:34:53,790 >> Låt oss nu göra programmet lite mer intressant. 752 00:34:53,790 --> 00:34:59,200 Jag kommer att gå vidare och denna gång öppna upp en ny fil. 753 00:34:59,200 --> 00:35:02,520 Jag kommer att spara detta som hej-1.c. 754 00:35:02,520 --> 00:35:05,540 Och bara för sparkar, kommer jag att går stick den i min Dropbox-mappen. 755 00:35:05,540 --> 00:35:09,030 >> Som du ser i CS50 dokumentation för apparaten, 756 00:35:09,030 --> 00:35:11,210 senare i veckan för problem Set 1, vi uppmuntrar 757 00:35:11,210 --> 00:35:13,230 dig att använda Dropbox eller någon motsvarande tjänst, 758 00:35:13,230 --> 00:35:15,430 för då alla dina kodens ska säkerhetskopieras automatiskt. 759 00:35:15,430 --> 00:35:17,830 Och så det är därför jag har gått in i denna mapp här. 760 00:35:17,830 --> 00:35:20,230 >> Och nu ska jag skriva en något annat program. 761 00:35:20,230 --> 00:35:24,740 Inkludera, standard I / O.h, int main ogiltiga. 762 00:35:24,740 --> 00:35:29,660 Och sedan i här printf, hallå världen, vilket är exakt samma som tidigare. 763 00:35:29,660 --> 00:35:32,450 >> Men nu vill jag skriva ut något det är lite annorlunda. 764 00:35:32,450 --> 00:35:34,800 Jag vill skriva ut, säger, "Hej, David." 765 00:35:34,800 --> 00:35:37,590 Okej, så självklart, det ska förhoppningsvis 766 00:35:37,590 --> 00:35:40,360 vara så att om jag kompilera detta program, köra den, 767 00:35:40,360 --> 00:35:41,840 det kommer att säga "Hej, David." 768 00:35:41,840 --> 00:35:45,160 >> Men om jag vill presentera denna typ av variabel, 769 00:35:45,160 --> 00:35:49,240 begreppet en behållare som händer att lagra D-a-v-i-d och inte svårt koden det 770 00:35:49,240 --> 00:35:50,600 in i mitt program. 771 00:35:50,600 --> 00:35:53,430 Tja vad händer om jag börjar göra något sådant? 772 00:35:53,430 --> 00:35:57,120 >> String s, så detta är en variabel. 773 00:35:57,120 --> 00:36:00,250 Om du vill ha en sträng, alias ett ord eller en fras. 774 00:36:00,250 --> 00:36:03,485 En sekvens av tecken är det som Vi i programmering kallar en sträng. 775 00:36:03,485 --> 00:36:06,610 Vi ska bara allmänt samtal det s, eftersom det är en trevlig enkel namn. 776 00:36:06,610 --> 00:36:08,010 Men jag kan kalla det vad som helst. 777 00:36:08,010 --> 00:36:12,920 >> Jag kommer att säga sträng s jämlikar citat unquote, "David," semikolon. 778 00:36:12,920 --> 00:36:18,330 Och nu vill jag sätta in D-A-V-I-d in i vad jag är utskrift. 779 00:36:18,330 --> 00:36:23,720 Och innan vi såg en teaser på skärmen på någon speciell syntax 780 00:36:23,720 --> 00:36:26,050 som får oss att ersättning i ett värde. 781 00:36:26,050 --> 00:36:29,250 Vad var det speciella symbol för några diabilder sedan? 782 00:36:29,250 --> 00:36:30,040 >> Så procent. 783 00:36:30,040 --> 00:36:33,830 På den tiden var det procent d för decimaltal. 784 00:36:33,830 --> 00:36:35,850 Det betyder egentligen inte vara relevant här. 785 00:36:35,850 --> 00:36:38,650 Visar sig att det finns annan procenttecken, 786 00:36:38,650 --> 00:36:42,810 vilket är procent s, som står för en platshållare för en sträng. 787 00:36:42,810 --> 00:36:49,350 >> Så nu, mycket enkelt, jag är kommer att gå att göra hello-1, 788 00:36:49,350 --> 00:36:54,210 eftersom den här filen kallas hello-1.c, och tryck på Retur. 789 00:36:54,210 --> 00:36:56,230 Och jag klantade. 790 00:36:56,230 --> 00:36:57,394 Vad händer? 791 00:36:57,394 --> 00:37:00,560 Tja, här där vi måste börja uppskattar att vi är i det här kommandot 792 00:37:00,560 --> 00:37:02,810 line miljö, detta text bara miljö. 793 00:37:02,810 --> 00:37:06,114 Det finns ingen klicka på dem som mappar just nu. 794 00:37:06,114 --> 00:37:07,280 Och tänk tillbaka för en stund sedan. 795 00:37:07,280 --> 00:37:10,740 På vilket gjorde mapp jag säger Jag sparade min kod? 796 00:37:10,740 --> 00:37:11,657 Så mappen Dropbox. 797 00:37:11,657 --> 00:37:12,989 Kunde ha kallats något. 798 00:37:12,989 --> 00:37:14,530 Men det händer att kallas Dropbox. 799 00:37:14,530 --> 00:37:18,380 Så jag behöver något sätt att dubbelklicka på att Dropbox-mappen för att få 800 00:37:18,380 --> 00:37:21,657 in i det och få på mitt kod som kallas hello-1.c. 801 00:37:21,657 --> 00:37:24,490 Faktum är, låt mig gå vidare och minimerar detta fönster för bara ett ögonblick. 802 00:37:24,490 --> 00:37:27,560 Precis som Windows och Mac OS, mappar finns i Linux. 803 00:37:27,560 --> 00:37:29,410 Det finns mappar i CS50 Appliance. 804 00:37:29,410 --> 00:37:32,380 Det är bara just nu vi begränsa oss till denna text miljö. 805 00:37:32,380 --> 00:37:34,700 >> Men om jag dubbelklickar på Dropbox, märker det 806 00:37:34,700 --> 00:37:37,210 är den fil som jag vill kompilera. 807 00:37:37,210 --> 00:37:41,430 Men jag behöver den här svartvita terminalfönster, så att säga. 808 00:37:41,430 --> 00:37:45,750 Men jag behöver, därför att flytta in i den mappen eller katalogen. 809 00:37:45,750 --> 00:37:48,290 Så lite svårbegripliga, men du får använda till detta också. 810 00:37:48,290 --> 00:37:50,430 >> I en värld av Linux, som återigen är operativsystemet 811 00:37:50,430 --> 00:37:54,860 system vi kör inne i CS50 Appliance, det finns ett kommando som heter CD. 812 00:37:54,860 --> 00:37:58,310 Vilket betyder att jag kan göra CD, utrymme, Dropbox. 813 00:37:58,310 --> 00:37:59,900 CD, ändra katalog. 814 00:37:59,900 --> 00:38:00,400 Rätt. 815 00:38:00,400 --> 00:38:02,890 Tillbaka i dag när människor var uppfinna datorer och drift 816 00:38:02,890 --> 00:38:05,806 system som detta, de ville skriver minst antal knapptryckningar möjligt. 817 00:38:05,806 --> 00:38:08,760 Så det enklaste sättet att säga förändring katalogen var CD. 818 00:38:08,760 --> 00:38:13,910 >> Så om jag slog CD, utrymme Dropbox, märker vad som har förändrats här. 819 00:38:13,910 --> 00:38:16,480 Insida i parenteser apparaten är snäll 820 00:38:16,480 --> 00:38:19,360 av humoring mig och påminna mig var jag är. 821 00:38:19,360 --> 00:38:21,480 Så den öppna mappen är Dropbox. 822 00:38:21,480 --> 00:38:24,950 Om jag skriver nu ls för listan, återigen kortfattad, 823 00:38:24,950 --> 00:38:27,540 eftersom folk inte ville skriver tillbaka i dag l-i-s-t. 824 00:38:27,540 --> 00:38:29,300 Så de i stället gjorde det ls. 825 00:38:29,300 --> 00:38:30,110 >> Enter. 826 00:38:30,110 --> 00:38:35,740 Lägg märke Jag ser två saker, hello-1.c, och sedan det kryptiska sak, käll 1m. 827 00:38:35,740 --> 00:38:38,310 Det är bara mitt sätt att säga källkod för vecka 1 Måndag. 828 00:38:38,310 --> 00:38:42,020 Det är en mapp jag ner från CS50: s hemsida som jag gjorde tidigare i dag 829 00:38:42,020 --> 00:38:43,990 och bara sätta in den i apparaten i förväg. 830 00:38:43,990 --> 00:38:47,550 >> Men för tillfället det enda vi bryr sig om är att göra det här programmet. 831 00:38:47,550 --> 00:38:50,440 Så när jag skriver gör hello-1, Enter. 832 00:38:50,440 --> 00:38:51,320 Fan också. 833 00:38:51,320 --> 00:38:53,060 Något gick fel. 834 00:38:53,060 --> 00:38:54,580 Så låt oss retas här isär. 835 00:38:54,580 --> 00:38:58,489 Och tyvärr är där saker och ting blir lite stressigt i början, 836 00:38:58,489 --> 00:39:00,280 åtminstone om du har aldrig programmerat tidigare. 837 00:39:00,280 --> 00:39:00,980 >> Min Gud. 838 00:39:00,980 --> 00:39:04,990 Jag skrev en två line-programmet och Jag har fyra rader av felaktigheter. 839 00:39:04,990 --> 00:39:07,180 Så vad händer här. 840 00:39:07,180 --> 00:39:11,370 Först och främst alltid rulla tillbaka upp och hitta den första felmeddelandet, 841 00:39:11,370 --> 00:39:15,730 eftersom ofta kompilatorer bara förvirrad av vad du och jag gör. 842 00:39:15,730 --> 00:39:17,000 Kompilatorer är ganska dum. 843 00:39:17,000 --> 00:39:18,360 De kommer bara göra det som du berätta för dem att göra. 844 00:39:18,360 --> 00:39:21,484 Och om du blandar ihop dem, de är bara ska sorts kasta upp sina händer 845 00:39:21,484 --> 00:39:25,010 och kanske kasta mer felmeddelanden än faktiskt är relevanta. 846 00:39:25,010 --> 00:39:26,380 >> Så låt oss titta på den första. 847 00:39:26,380 --> 00:39:27,540 Super kryptiskt i början. 848 00:39:27,540 --> 00:39:31,050 Men varsel, här är namnet på fil där jag skruvade upp tydligen. 849 00:39:31,050 --> 00:39:36,570 Colon 5, kolon 5 innebär bara på linje 5 vid det femte tecknet. 850 00:39:36,570 --> 00:39:39,760 Så femte kolonn tecken, om du vill, fel. 851 00:39:39,760 --> 00:39:41,870 Användning av odeklarerat identifieringssträng. 852 00:39:41,870 --> 00:39:43,120 Menade du standard n? 853 00:39:43,120 --> 00:39:44,850 >> Nej, jag menade sträng. 854 00:39:44,850 --> 00:39:47,640 Och då är det slags kopiera och klistra 855 00:39:47,640 --> 00:39:50,700 vad jag skrev för att verkligen dra mitt uppmärksamhet där jag skruvade upp. 856 00:39:50,700 --> 00:39:54,260 Så någon anledning C, eller åtminstone kompilatorn 857 00:39:54,260 --> 00:39:56,470 förstår inte ordet strängen. 858 00:39:56,470 --> 00:39:57,890 Och det beror på att vi gjorde det. 859 00:39:57,890 --> 00:40:01,440 Så sträng existerar inte i C. Vad CS50 gör, 860 00:40:01,440 --> 00:40:03,380 för de första veckorna endast av klassen, 861 00:40:03,380 --> 00:40:05,700 är vi ge viss utbildning hjul, så att säga. 862 00:40:05,700 --> 00:40:11,160 Och vi sätter dessa stödhjul inne i en speciell fil som heter CS50.h. 863 00:40:11,160 --> 00:40:14,970 >> Så det här är den andra av två fil namn som synes slutar i dot tim. 864 00:40:14,970 --> 00:40:16,300 Låt oss spola tillbaka. 865 00:40:16,300 --> 00:40:19,360 Printf är ett uttalande eller en funktion som uppenbar skriver någonting 866 00:40:19,360 --> 00:40:20,580 till skärmen. 867 00:40:20,580 --> 00:40:23,470 Men du såg mig genomföra printf, höger. 868 00:40:23,470 --> 00:40:26,360 Någon år sedan implementeras printf. 869 00:40:26,360 --> 00:40:30,420 I vilken fil skulle du satsa han eller hon sätter genomförandet 870 00:40:30,420 --> 00:40:34,270 för printf, koden för printf? 871 00:40:34,270 --> 00:40:36,860 >> I en fil som heter standard I / O.h. 872 00:40:36,860 --> 00:40:39,930 I själva verket är det antagligen i två filer, standard I / O.h, 873 00:40:39,930 --> 00:40:42,650 vilket står för sidhuvudet fil, och standard I / O.c, 874 00:40:42,650 --> 00:40:44,060 som står för C källkod. 875 00:40:44,060 --> 00:40:48,220 Så han eller hon för några år sedan plopped den kod som de skrev in i filen 876 00:40:48,220 --> 00:40:51,240 så att människor som oss år senare kan inkludera det, 877 00:40:51,240 --> 00:40:53,040 så att säga, i våra egna program. 878 00:40:53,040 --> 00:40:56,320 >> Och faktiskt, det är vad nummertecken följt av ordet inkluderar gör. 879 00:40:56,320 --> 00:41:00,250 Det ser ut på den lokala hårddisken, finner fil som heter standard I / O.h, 880 00:41:00,250 --> 00:41:03,840 och sedan effektivt exemplar och klistras det inne i min egen fil. 881 00:41:03,840 --> 00:41:07,210 Så nu mitt program vet hur man skriver ut på skärmen. 882 00:41:07,210 --> 00:41:11,120 >> Så genom denna logik, där är sträng definieras? 883 00:41:11,120 --> 00:41:12,260 >> PUBLIK: CS50.h. 884 00:41:12,260 --> 00:41:13,290 >> DAVID J. MALAN: CS50.h. 885 00:41:13,290 --> 00:41:15,540 Och faktiskt, det är vad vi, den ordinarie personalen har gjort. 886 00:41:15,540 --> 00:41:19,590 Vi har uppfunnit några datatyper, så att säga, som en sträng, 887 00:41:19,590 --> 00:41:22,370 utöver de du få gratis, som en int. 888 00:41:22,370 --> 00:41:26,010 Och vi får se andra som en char för en karaktär och några fler. 889 00:41:26,010 --> 00:41:30,670 Inuti CS50.h tydligen är åtminstone några omnämnande av strängen. 890 00:41:30,670 --> 00:41:34,980 >> Så nu vill jag gå vidare och kör make hello-1. 891 00:41:34,980 --> 00:41:37,100 Jag ska zooma in igen och korsar mina fingrar. 892 00:41:37,100 --> 00:41:41,370 Nu genom att ha gjort en ändrar jag fast det mesta. 893 00:41:41,370 --> 00:41:42,100 Men damn it. 894 00:41:42,100 --> 00:41:44,290 Fler PROCENT än uppgifts argument. 895 00:41:44,290 --> 00:41:45,980 Vad gjorde jag för fel den här gången? 896 00:41:45,980 --> 00:41:47,420 >> Så det är fortfarande ganska kryptiskt. 897 00:41:47,420 --> 00:41:51,560 Men detta fel är på linje 7 och tecken 21. 898 00:41:51,560 --> 00:41:53,880 Så låt oss gå titta här uppe. 899 00:41:53,880 --> 00:41:55,350 Det är lite subtil. 900 00:41:55,350 --> 00:41:59,167 Men om man tänker på vad de grundläggande idéerna här är, 901 00:41:59,167 --> 00:42:00,500 kanske vi kan retas här isär. 902 00:42:00,500 --> 00:42:02,300 >> Så printf är namnet på funktionen. 903 00:42:02,300 --> 00:42:04,960 Parenteser, så här långt, är precis vad vi lägger runt 904 00:42:04,960 --> 00:42:07,005 grejer vi passerar som indata till en funktion. 905 00:42:07,005 --> 00:42:08,921 Okej, bara en godtycklig mänsklig konvention. 906 00:42:08,921 --> 00:42:09,919 Använd parenteser. 907 00:42:09,919 --> 00:42:12,460 Insida av dessa parenteser Vi har skjutit citationstecken, 908 00:42:12,460 --> 00:42:14,810 och sedan en sträng som "hallå världen." 909 00:42:14,810 --> 00:42:18,160 >> Men i det tidigare exemplet mycket kort gjorde vi tittar på med Scratch. 910 00:42:18,160 --> 00:42:22,590 Och vi hade procent d, vad annars var inne i dessa parenteser 911 00:42:22,590 --> 00:42:23,730 att jag ropade muntligt? 912 00:42:23,730 --> 00:42:24,230 Yeah. 913 00:42:24,230 --> 00:42:28,166 >> PUBLIK: Så det är vad du tar [Ohörbart] inifrån [ohörbart] 914 00:42:28,166 --> 00:42:30,200 vad dessa [ohörbart]? 915 00:42:30,200 --> 00:42:31,200 DAVID J. MALAN: Exakt. 916 00:42:31,200 --> 00:42:32,700 Så vi hade procent d. 917 00:42:32,700 --> 00:42:36,620 Men sedan hade vi ett nära citationstecken, kommatecken, disk. 918 00:42:36,620 --> 00:42:37,120 Rätt. 919 00:42:37,120 --> 00:42:40,680 Vi specificerade vad vi vill att göra som platshållare. 920 00:42:40,680 --> 00:42:44,621 Så vad jag ska göra här är kommatecken, vad vill du att jag ska sätta? 921 00:42:44,621 --> 00:42:45,120 PUBLIK: S. 922 00:42:45,120 --> 00:42:46,828 DAVID J. MALAN: S, eftersom s i detta fall 923 00:42:46,828 --> 00:42:48,700 är namnet på lagringsbehållaren. 924 00:42:48,700 --> 00:42:50,180 Det är namnet på denna glasskål. 925 00:42:50,180 --> 00:42:53,610 Om det tidigare var disk i det enkelt Scratch exempel vi tittat på. 926 00:42:53,610 --> 00:42:56,630 Så nu har gjort två förändringar, låt mig zooma in 927 00:42:56,630 --> 00:42:59,800 och försöka en gång till kompilera programmet. 928 00:42:59,800 --> 00:43:01,596 >> Nu ser jag att kryptisk linje. 929 00:43:01,596 --> 00:43:03,470 Men det är faktiskt den namn av kompilatorn. 930 00:43:03,470 --> 00:43:04,886 Klang är namnet på kompilatorn. 931 00:43:04,886 --> 00:43:07,100 Gör bara spara mig huvudvärk av allt 932 00:43:07,100 --> 00:43:09,830 skriva att långa galna kommandot ut. 933 00:43:09,830 --> 00:43:14,900 Så nu om jag dot slash hello-1, Jag skulle se "Hej, David." 934 00:43:14,900 --> 00:43:16,450 >> Ganska underwhelming, fast, eller hur? 935 00:43:16,450 --> 00:43:18,158 Vi kunde ha gjort detta mycket mer enkelt 936 00:43:18,158 --> 00:43:20,940 utan att tala om variabler och CS50.h och allt det. 937 00:43:20,940 --> 00:43:23,080 Så låt oss göra det till en lite mer intressant. 938 00:43:23,080 --> 00:43:31,010 >> Förutom CS50.h, att ha saker som sträng 939 00:43:31,010 --> 00:43:34,550 förklarade, att CS50 biblioteket också har ett par funktioner. 940 00:43:34,550 --> 00:43:38,520 Så precis som år sedan skrev någon printf och lägga den i standard-I / O.h 941 00:43:38,520 --> 00:43:39,530 och någon annan fil. 942 00:43:39,530 --> 00:43:44,010 >> Vi, CS50 personal, skrev en funktion kallas getchar, getDouble, getFloat, 943 00:43:44,010 --> 00:43:47,610 GetInt, GetLongLong, GetString, och vi lägger dem i en fil 944 00:43:47,610 --> 00:43:49,890 kallas CS50.h och CS50.c. 945 00:43:49,890 --> 00:43:51,880 Och vi sätter dem i av CS50 Appliance. 946 00:43:51,880 --> 00:43:53,880 Och folk kan också hämta dem på nätet om de 947 00:43:53,880 --> 00:43:55,880 vill sätta dem på deras egna datorer också. 948 00:43:55,880 --> 00:44:00,880 Vilket är att säga att vi har skapat funktioner som får input från användaren. 949 00:44:00,880 --> 00:44:02,930 Jag vet inte vad alla av dessa datatyper. 950 00:44:02,930 --> 00:44:06,490 GetInt är typ av okomplicerad, liksom få ett heltal på något sätt från användaren. 951 00:44:06,490 --> 00:44:09,980 Och GetString är nog som get ett ord eller en mening från användaren. 952 00:44:09,980 --> 00:44:11,770 >> Så låt oss fokusera på det. 953 00:44:11,770 --> 00:44:14,710 Och jag kommer att gå tillbaka in i apparaten och jag kommer att gå vidare 954 00:44:14,710 --> 00:44:20,790 och spara denna fil som, låt oss kalla Det hello-2.c som min andra versionen. 955 00:44:20,790 --> 00:44:23,030 Och låt oss göra ett par ändringar. 956 00:44:23,030 --> 00:44:25,800 >> Den här gången i stället för hårt kodning David, som 957 00:44:25,800 --> 00:44:29,120 gör en otroligt konsekvent men underwhelming programmet 958 00:44:29,120 --> 00:44:32,640 tänk om jag istället gör GetString? 959 00:44:32,640 --> 00:44:35,660 Nu märker GetString har en öppen parentes, 960 00:44:35,660 --> 00:44:38,500 sluten parentes, eftersom den inte behöver någon ingång. 961 00:44:38,500 --> 00:44:40,850 Det kommer bara att gå och hämta en sträng från användaren. 962 00:44:40,850 --> 00:44:42,460 >> Och nu ett ord om andra syntax. 963 00:44:42,460 --> 00:44:45,439 Semikolon bara sluta en rad kod. 964 00:44:45,439 --> 00:44:46,730 Du behöver inte dem överallt. 965 00:44:46,730 --> 00:44:48,896 Men det betyder bara att jag är gjort med denna kodrad. 966 00:44:48,896 --> 00:44:51,080 Låt mig gå till en annan uttalande eller funktion. 967 00:44:51,080 --> 00:44:53,010 String deklarerar en variabel. 968 00:44:53,010 --> 00:44:55,920 String är som att säga ge mig en skål, tack. 969 00:44:55,920 --> 00:44:57,940 Och låt mig uttrycka en sträng i den. 970 00:44:57,940 --> 00:44:59,430 >> Och nu likhetstecknet. 971 00:44:59,430 --> 00:45:03,510 Vad är likhetstecknet huvudsak motsvarar? 972 00:45:03,510 --> 00:45:04,500 >> PUBLIKEN: Tilldela. 973 00:45:04,500 --> 00:45:06,190 >> DAVID J. MALAN: Ja, tilldela ett värde. 974 00:45:06,190 --> 00:45:09,872 Så om jag till exempel samtal denna funktion GetString, 975 00:45:09,872 --> 00:45:12,830 och vi kommer att se i ett ögonblick som är kommer att uppmana användaren för en sträng. 976 00:45:12,830 --> 00:45:17,810 Det är som att låta mig sedan skriva D-A-V-I-d på en bit papper. 977 00:45:17,810 --> 00:45:21,060 Och när jag säger sträng ar lika GetString, 978 00:45:21,060 --> 00:45:24,140 lika egentligen inte betyder lika i C-programmering. 979 00:45:24,140 --> 00:45:27,880 Det betyder delar från höger sidan till den vänstra sidan. 980 00:45:27,880 --> 00:45:29,510 >> Så jag har fått en sträng. 981 00:45:29,510 --> 00:45:32,785 Och likhetstecknet innebär uttryckte det i lagringsbehållare som kallas s. 982 00:45:32,785 --> 00:45:36,730 Och sedan vidarebefordra detta iväg till printf att faktiskt göra sin sak. 983 00:45:36,730 --> 00:45:39,790 >> Så slutresultatet sedan går se lite annorlunda ut. 984 00:45:39,790 --> 00:45:40,840 Låt oss gör hello-2. 985 00:45:40,840 --> 00:45:43,940 986 00:45:43,940 --> 00:45:45,260 Antingen skulle kunna fungera. 987 00:45:45,260 --> 00:45:46,450 Du följer med. 988 00:45:46,450 --> 00:45:47,940 Gör hello-2 arbetade. 989 00:45:47,940 --> 00:45:52,640 Dot slash hello-2, Enter. 990 00:45:52,640 --> 00:45:54,620 >> Jag verkar ha en oändlig slinga eller något. 991 00:45:54,620 --> 00:45:55,453 Ingenting händer. 992 00:45:55,453 --> 00:45:56,134 Varför? 993 00:45:56,134 --> 00:45:57,805 >> PUBLIK: Det gör en oändlig slinga. 994 00:45:57,805 --> 00:45:59,430 DAVID J. MALAN: Det är en oändlig loop. 995 00:45:59,430 --> 00:46:02,710 Det är typ av som väntar för mig att faktiskt ge den med lite input. 996 00:46:02,710 --> 00:46:05,800 Så låt mig gå vidare och skriva i David, och tryck på Retur. 997 00:46:05,800 --> 00:46:07,230 Och nu står det "Hej, David." 998 00:46:07,230 --> 00:46:09,040 Om jag kör den igen. 999 00:46:09,040 --> 00:46:11,530 Låt oss skriva in Rob, "Hej, Rob." 1000 00:46:11,530 --> 00:46:13,900 >> Nu är detta den värsta användargränssnitt någonsin. 1001 00:46:13,900 --> 00:46:16,110 Användaren är tydligen kunna veta vad man ska göra. 1002 00:46:16,110 --> 00:46:17,120 Men oavsett. 1003 00:46:17,120 --> 00:46:19,570 Med hjälp av dessa samma byggnad blocken precis som i Scratch, 1004 00:46:19,570 --> 00:46:24,980 Vi kan lösa det problemet och säga något som ditt namn snälla, kolon, 1005 00:46:24,980 --> 00:46:27,820 utrymme, stängt citat, nära parentes, semikolon. 1006 00:46:27,820 --> 00:46:30,680 Så mycket av igen enfald med syntaxen. 1007 00:46:30,680 --> 00:46:34,040 >> Men märker jag har precis lagt till en pusselbit ovanför denna en 1008 00:46:34,040 --> 00:46:35,280 och ovanför denna. 1009 00:46:35,280 --> 00:46:38,870 Så nu om jag kör här, hello-2, Enter. 1010 00:46:38,870 --> 00:46:41,180 Vänta lite. 1011 00:46:41,180 --> 00:46:41,830 Vad är fel? 1012 00:46:41,830 --> 00:46:43,570 Det är inte beter sig annorlunda. 1013 00:46:43,570 --> 00:46:44,200 Yeah. 1014 00:46:44,200 --> 00:46:46,010 >> PUBLIK: Du körde inte göra igen. 1015 00:46:46,010 --> 00:46:47,968 >> DAVID J. MALAN: Jag gjorde inte kör make igen, eller hur. 1016 00:46:47,968 --> 00:46:49,430 Så jag har ändrat min källkod. 1017 00:46:49,430 --> 00:46:50,638 Men återigen, det är detta flöde. 1018 00:46:50,638 --> 00:46:54,530 Källkod genom kompilatorn ger du nya objektkod, eller 0 och 1. 1019 00:46:54,530 --> 00:47:00,209 Så jag behöver faktiskt repris make hello-2 Enter. 1020 00:47:00,209 --> 00:47:01,750 OK, verkar något ha hänt. 1021 00:47:01,750 --> 00:47:04,220 Dot slash hello-2. 1022 00:47:04,220 --> 00:47:05,390 Ditt namn tack. 1023 00:47:05,390 --> 00:47:09,990 Och för att vara tydlig nu, varför är markören på samma linje? 1024 00:47:09,990 --> 00:47:10,490 Exakt. 1025 00:47:10,490 --> 00:47:13,020 Jag satte inte det omvända snedstrecket n här uppe i min kod. 1026 00:47:13,020 --> 00:47:16,110 Så nu kan jag skriva något som Daven, Enter. 1027 00:47:16,110 --> 00:47:18,710 Jag kan köra den igen och skriv något som Gabe, Enter, 1028 00:47:18,710 --> 00:47:22,250 och vi får ett annat program igen och igen och igen. 1029 00:47:22,250 --> 00:47:28,940 >> Nu i slutändan ska vi behöva att använda några olika möjligheter. 1030 00:47:28,940 --> 00:47:32,860 Vi måste införa slutligen några förutsättningar att göra saker villkor. 1031 00:47:32,860 --> 00:47:35,550 Kanske loopar så att vi kan göra saker om och om igen. 1032 00:47:35,550 --> 00:47:38,220 >> Kanske det skulle vara trevligt om vi skulle kunna genomföra våra egna funktioner, 1033 00:47:38,220 --> 00:47:41,355 som vi skulle kunna genomföra vår egen printf eller vår egen version av GetString 1034 00:47:41,355 --> 00:47:45,870 och GetFlow, för i slutändan även använda denna kommandorad miljö 1035 00:47:45,870 --> 00:47:49,780 kan vi göra även de mest visuellt intressant saker. 1036 00:47:49,780 --> 00:47:51,950 >> Faktiskt avslutningsvis vill jag göra det här. 1037 00:47:51,950 --> 00:47:54,020 Jag kommer att gå vidare och stänger dessa fönster 1038 00:47:54,020 --> 00:47:57,400 och öppna den här ikonen här, som är bara en större 1039 00:47:57,400 --> 00:48:00,020 version av den inbäddade terminalfönster. 1040 00:48:00,020 --> 00:48:02,329 Så Gedit har inte bara platsen för min kod, 1041 00:48:02,329 --> 00:48:05,620 utan också en inbyggd terminalfönster, den svart och vitt fönster där jag kan köra 1042 00:48:05,620 --> 00:48:06,230 kommandon. 1043 00:48:06,230 --> 00:48:08,600 >> Jag råkade bara öppna en större version av denna. 1044 00:48:08,600 --> 00:48:11,170 Och nu ska jag gå in mappen som jag har redan 1045 00:48:11,170 --> 00:48:13,150 sätta på förhand på kursens hemsida. 1046 00:48:13,150 --> 00:48:16,720 Och jag ska gå vidare och öppna en fil som heter thadgavin.c, 1047 00:48:16,720 --> 00:48:18,710 som skrevs av någon annan. 1048 00:48:18,710 --> 00:48:21,220 >> Och om vi ser på det här, detta är inte den typ av kod 1049 00:48:21,220 --> 00:48:24,370 Vi kommer att skriva eftersom målet med denna kod 1050 00:48:24,370 --> 00:48:28,450 var att skriva den vackraste ser kod som han eller hon kunde, 1051 00:48:28,450 --> 00:48:31,290 oberoende av om annan människa någonsin kunde 1052 00:48:31,290 --> 00:48:33,660 förstå denna kod. 1053 00:48:33,660 --> 00:48:37,050 >> I själva verket varje år finns är vad som är kallas en förvrängd C tävling, som 1054 00:48:37,050 --> 00:48:39,570 är för riktiga nördar som skriver kod som ingen annan kan läsa, 1055 00:48:39,570 --> 00:48:42,050 men som gör något antingen riktigt enkelt eller verkligen fantastiskt. 1056 00:48:42,050 --> 00:48:43,890 Och vi trodde vi skulle avsluta med denna look 1057 00:48:43,890 --> 00:48:48,300 på något som är ganska häpnadsväckande du kanske har sett en gång tidigare. 1058 00:48:48,300 --> 00:48:52,650 Men vi ska sluta på det här notera, dot snedstreck, thadgavin. 1059 00:48:52,650 --> 00:48:53,860 Detta är då vad som väntar. 1060 00:48:53,860 --> 00:48:57,140 1061 00:48:57,140 --> 00:48:58,500 >> Det var allt för CS50. 1062 00:48:58,500 --> 00:48:59,935 Vi kommer att se dig på onsdag. 1063 00:48:59,935 --> 00:49:04,284 1064 00:49:04,284 --> 00:49:10,016 >> [MUSIK SPELA] 1065 00:49:10,016 --> 00:53:31,883