1 00:00:00,000 --> 00:00:11,952 2 00:00:11,952 --> 00:00:13,800 >> DAVID J. MALAN: Så dette er CS50. 3 00:00:13,800 --> 00:00:18,970 Og dette var CS50 egen Colton Ogden, for mer av hvem som er musikk du kan 4 00:00:18,970 --> 00:00:22,820 nedlasting på soundcloud.com/cs50. 5 00:00:22,820 --> 00:00:26,690 >> Så i dag fokuserer vi alle mer på kunsten programmering. 6 00:00:26,690 --> 00:00:28,980 Og vi tar der vi slapp av forrige uke, med fokus 7 00:00:28,980 --> 00:00:31,660 på Scratch, som var dette grafisk programmeringsspråk. 8 00:00:31,660 --> 00:00:35,490 Og ta ting ned til et lavere nivå, ved hjelp av en mer tradisjonell programmering 9 00:00:35,490 --> 00:00:38,420 språket kjent som C. Men underveis, innser 10 00:00:38,420 --> 00:00:40,730 at de samme ideene vi snakket om sist fredag 11 00:00:40,730 --> 00:00:44,390 vil gjenta seg ikke bare i denne språket C, men i de fleste hver annen 12 00:00:44,390 --> 00:00:46,350 at vi ser på dette semesteret. 13 00:00:46,350 --> 00:00:50,247 >> Så vi kalte denne tingen her hva siste gang? 14 00:00:50,247 --> 00:00:51,830 Dette er representativt for en uttalelse. 15 00:00:51,830 --> 00:00:53,080 Så vi kalte dette en uttalelse. 16 00:00:53,080 --> 00:00:54,100 Og det gjør noe. 17 00:00:54,100 --> 00:00:56,910 Det er en instruksjon som en datamaskin eller Scratch kan utføre. 18 00:00:56,910 --> 00:00:59,910 Og fra nå av, la oss også starte kalle noe sånt som dette en funksjon, 19 00:00:59,910 --> 00:01:02,070 grunner skal vi snart se. 20 00:01:02,070 --> 00:01:03,681 >> I mellomtiden, så vi ting som dette. 21 00:01:03,681 --> 00:01:05,680 Og disse er generelt kjent som hva konstruere? 22 00:01:05,680 --> 00:01:06,240 >> PUBLIKUM: 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å ganske grei. 25 00:01:07,943 --> 00:01:09,470 Det bokstavelig talt gjør det de sier. 26 00:01:09,470 --> 00:01:12,210 Og i Scratch, hvis du ønsker å stappe flere puslebiter i det, 27 00:01:12,210 --> 00:01:13,950 stykket vil vokse til å passe den. 28 00:01:13,950 --> 00:01:16,790 Og vi vil se i C som vi kan gjøre det samme. 29 00:01:16,790 --> 00:01:20,000 >> En annen type av løkken, selv om, i Scratch kan være for alltid, 30 00:01:20,000 --> 00:01:21,820 eller det er noen tall andre tilnærminger. 31 00:01:21,820 --> 00:01:24,150 Men la oss ta en mer genera utseende, med et ansikt 32 00:01:24,150 --> 00:01:27,402 det er sannsynlig ganske kjent, på looper mer generelt. 33 00:01:27,402 --> 00:01:29,110 Mark Zuckerberg: One ting som datamaskiner 34 00:01:29,110 --> 00:01:31,860 er virkelig god til er gjenta kommandoer. 35 00:01:31,860 --> 00:01:33,910 Som en person, vil du få virkelig lei hvis du 36 00:01:33,910 --> 00:01:36,730 måtte gjøre det samme mange ganger på rad. 37 00:01:36,730 --> 00:01:40,530 Men en datamaskin kan gjøre det samme millioner eller milliarder av ganger, 38 00:01:40,530 --> 00:01:43,290 og ikke gå lei, og kunne til å utføre den veldig bra. 39 00:01:43,290 --> 00:01:45,650 >> Så for eksempel, hvis jeg ønsket å ønske alle 40 00:01:45,650 --> 00:01:48,840 på Facebook en happy birthday ved å sende dem en e-post, 41 00:01:48,840 --> 00:01:51,550 det kan ta meg mer enn en tallet for å faktisk skrive ut 42 00:01:51,550 --> 00:01:53,000 alle disse e-post til alle. 43 00:01:53,000 --> 00:01:57,780 Men med bare noen få linjer med kode, kan jeg ha et system send en e-post til alle 44 00:01:57,780 --> 00:01:59,930 på Facebook som ønsker dem en happy birthday. 45 00:01:59,930 --> 00:02:02,730 Så det er hva løkker er og hvorfor de er verdifulle og noe 46 00:02:02,730 --> 00:02:04,740 at datamaskiner kan gjøre det veldig bra. 47 00:02:04,740 --> 00:02:05,630 >> DAVID J. MALAN: Så hvis du har vært mottaker 48 00:02:05,630 --> 00:02:07,820 av noen av CS50 og Dropbox sin plass i det siste, 49 00:02:07,820 --> 00:02:10,590 det er faktisk nettopp det vi gjør det, ved hjelp av kode ganske sånn. 50 00:02:10,590 --> 00:02:12,600 Vi hovedsak har en stor regneark der 51 00:02:12,600 --> 00:02:15,016 folk har vært å legge inn sin navn og e-postadresser. 52 00:02:15,016 --> 00:02:18,160 Og vi skrev en liten bit kode som kan iterere over disse adressene 53 00:02:18,160 --> 00:02:21,860 og spytte ut unike adresser i tilfelle noen sendt inn flere ganger. 54 00:02:21,860 --> 00:02:25,120 Og etterpå, sender vi en automatisert e-post fra CS50 sin bot, 55 00:02:25,120 --> 00:02:27,190 herunder kupongkode. 56 00:02:27,190 --> 00:02:29,290 >> Nå har vi også sett på Dette konstruere siste gang. 57 00:02:29,290 --> 00:02:33,100 Og dette er en spesiell eksempel på hva? 58 00:02:33,100 --> 00:02:35,050 Så, ja, en boolsk uttrykk. 59 00:02:35,050 --> 00:02:37,050 Og formen menes for å fange opp det også. 60 00:02:37,050 --> 00:02:39,966 Alle slike spørsmål av danne sant eller usant i Scratch 61 00:02:39,966 --> 00:02:41,590 vil se litt noe sånt som dette. 62 00:02:41,590 --> 00:02:43,200 Og vi kaller dette en boolsk uttrykk. 63 00:02:43,200 --> 00:02:46,170 Det er faktisk sant eller usant, ja eller nei. 64 00:02:46,170 --> 00:02:49,150 Det er en måte å svare på et spørsmål. 65 00:02:49,150 --> 00:02:52,420 >> Og i mellomtiden kan du bruke disse boolsk uttrykk inne i konstruksjoner 66 00:02:52,420 --> 00:02:54,720 som disse, hvilke av Kurset er forhold 67 00:02:54,720 --> 00:02:57,259 eller greiner, velkjente gafler i veien. 68 00:02:57,259 --> 00:02:59,550 Og de kan ikke bare se som dette, men de kan også 69 00:02:59,550 --> 00:03:02,080 har andens assosiert med dem. 70 00:03:02,080 --> 00:03:05,820 Og du kan faktisk ha en treveis gaffel i veien eller en fire måte gaffel 71 00:03:05,820 --> 00:03:08,340 i veien, bare ved hekkende disse tingene, 72 00:03:08,340 --> 00:03:10,510 som du ser i Scratch hvis du ikke har allerede. 73 00:03:10,510 --> 00:03:13,550 Og som du kan gjøre i C også. 74 00:03:13,550 --> 00:03:16,810 >> La oss ta et annet generalist se på et alumnist, så vel som 75 00:03:16,810 --> 00:03:21,490 kan utgjøre en annen tilnærming til disse tingene heter forhold. 76 00:03:21,490 --> 00:03:24,060 >> BILL GATES: Folk gjør avgjørelser hver dag. 77 00:03:24,060 --> 00:03:27,530 For eksempel, før du går utenfor du slags har en if setning som sier: 78 00:03:27,530 --> 00:03:31,480 hvis det regner så jeg trenger å få jakken min. 79 00:03:31,480 --> 00:03:36,820 Og datamaskiner er fantastisk når du avgjøre slike uttalelser, 80 00:03:36,820 --> 00:03:42,280 at de kan sikkert utføre disse tingene på utrolig hastighet. 81 00:03:42,280 --> 00:03:48,240 Og så et dataprogram virkelig er litt matte og noen 82 00:03:48,240 --> 00:03:53,050 hvis uttalelser der beslutningen blir gjort. 83 00:03:53,050 --> 00:03:55,020 >> DAVID J. MALAN: Så som du kanskje vet, det var 84 00:03:55,020 --> 00:03:57,880 folk som Bill Gates, Paul Allen, og andre 85 00:03:57,880 --> 00:04:00,240 som virkelig sparket av såkalt personlig datamaskin 86 00:04:00,240 --> 00:04:01,990 revolusjon for noen år siden. 87 00:04:01,990 --> 00:04:04,140 Tenkte jeg, før vi dykke inn i noen administrivia, 88 00:04:04,140 --> 00:04:09,920 vi vil forholde en fortelling fra Albuquerque, New Mexico Museum of Natural History 89 00:04:09,920 --> 00:04:13,650 og vitenskap hvor noen av Bill Gates ' og Paul Allen tidligste historiene 90 00:04:13,650 --> 00:04:17,470 blir fortalte hvordan vi har nå dagens PC-er og Mac-er og mer. 91 00:04:17,470 --> 00:04:22,390 For dette, men vi trenger to frivillige som har svært gode fortellerstemmer 92 00:04:22,390 --> 00:04:23,735 å lese et manus høyt. 93 00:04:23,735 --> 00:04:25,530 >> Greit, hva med bak der. 94 00:04:25,530 --> 00:04:26,120 Kom opp. 95 00:04:26,120 --> 00:04:27,770 Og hva med foran her. 96 00:04:27,770 --> 00:04:28,340 Kom ned. 97 00:04:28,340 --> 00:04:29,600 Ta dine steder her. 98 00:04:29,600 --> 00:04:32,444 Som dere kommer opp, et par av administrative kunngjøringer. 99 00:04:32,444 --> 00:04:34,360 seksjonering, prosessen av å velge en seksjon, 100 00:04:34,360 --> 00:04:36,068 vil starte dette Onsdag til fredag. 101 00:04:36,068 --> 00:04:38,400 Mer på at dette kommer Onsdag i forelesning. 102 00:04:38,400 --> 00:04:41,770 >> Super seksjoner, i mellomtiden, er noe som vi tilbyr neste uke 103 00:04:41,770 --> 00:04:45,310 der hele klassen er invitert for å delta i relativt stor målestokk 104 00:04:45,310 --> 00:04:47,690 seksjoner, en mer skjegg, en mindre komfortabel. 105 00:04:47,690 --> 00:04:51,340 Og vi vil kunngjøre opplysningene av at, i tillegg, senere i uken. 106 00:04:51,340 --> 00:04:53,310 >> I mellomtiden seksjoner, seg, blir igang 107 00:04:53,310 --> 00:04:57,241 i uke tre av kurset, null indeksen, noe som betyr at de er av et par uker 108 00:04:57,241 --> 00:04:57,740 ut. 109 00:04:57,740 --> 00:04:58,450 Så ikke bekymre deg. 110 00:04:58,450 --> 00:05:01,014 Du har ennå ikke savnet noe langs disse linjene. 111 00:05:01,014 --> 00:05:03,930 I mellomtiden i mellomtiden, hvis du har noen spørsmål administrativt, 112 00:05:03,930 --> 00:05:08,120 email meg selv og Devon og Gabe og Rob på denne adressen her. 113 00:05:08,120 --> 00:05:10,320 >> Til slutt, oppgavesettet 0 er, selvfølgelig, ut. 114 00:05:10,320 --> 00:05:12,320 Du har kanskje lagt merke til det på kurset hjemmeside. 115 00:05:12,320 --> 00:05:14,840 Det bør gi deg alle svar på spørsmål 116 00:05:14,840 --> 00:05:18,250 du kan ha på veien for komme i gang med problemet sett. 117 00:05:18,250 --> 00:05:21,430 Men hvis du finner deg selv behov for en hjelpende hånd, 118 00:05:21,430 --> 00:05:25,020 for all del delta kontortid, Mandag, tirsdag, onsdag, torsdag 119 00:05:25,020 --> 00:05:27,290 av denne uken i kveld i fire spisesaler. 120 00:05:27,290 --> 00:05:31,650 Se denne nettadressen der for oppføring av hvor kontortid skal være. 121 00:05:31,650 --> 00:05:34,000 >> Nå la oss møte våre to gjester her i dag. 122 00:05:34,000 --> 00:05:34,740 Hva 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, hyggelig å møte deg. 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 Hyggelig å møte deg også. 130 00:05:39,790 --> 00:05:42,123 Jay Paul og Hikari har i Foran dem på disse musikk 131 00:05:42,123 --> 00:05:45,100 står to skript som jeg trykte ut i morges fra New Mexico 132 00:05:45,100 --> 00:05:46,692 Museum of Natural History og Science. 133 00:05:46,692 --> 00:05:48,400 Og det jeg trodde Jeg vil gjøre på overhead 134 00:05:48,400 --> 00:05:52,830 er følge din resitasjon av skriptet og denne historien 135 00:05:52,830 --> 00:05:54,700 med noen visuelle bilder, ingen overraskelser. 136 00:05:54,700 --> 00:05:57,512 >> Og hva jeg har gjort på forhånd er prehighlight på skriptet 137 00:05:57,512 --> 00:05:59,470 hva du bør lese, og hva du bør lese. 138 00:05:59,470 --> 00:06:00,920 Og vi vil i hovedsak bare alternative avsnitt. 139 00:06:00,920 --> 00:06:03,211 Så det er mye som du kanskje har gjort i engelsk klassen. 140 00:06:03,211 --> 00:06:06,875 Som virkelig tvinge publikum å tro på din historie her. 141 00:06:06,875 --> 00:06:07,600 Skal vi? 142 00:06:07,600 --> 00:06:13,272 Så historien her er at vi har en BASIC, og det begynner 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 hvor vintrene kan være kalde. 145 00:06:20,240 --> 00:06:22,800 En skjeggete, langhåret college dropout oppkalt 146 00:06:22,800 --> 00:06:27,280 Paul Allen var drudging over Harvard Square, absorbert i hans tanker. 147 00:06:27,280 --> 00:06:31,050 Hans hovedanliggende i disse dager var hvordan å få sin venn, Bill Gates, 148 00:06:31,050 --> 00:06:34,974 slutte på skolen og gå inn i forretninger med ham. 149 00:06:34,974 --> 00:06:37,890 HIKARI: De to hadde allerede gått gjennom en rekke forretningsprosjekter 150 00:06:37,890 --> 00:06:40,850 sammen, som begynner på Lakeside skole i Seattle hvor 151 00:06:40,850 --> 00:06:45,220 de ble betalt i gratis datamaskin tid til teste en PDP-10 maskin på en lokal tid 152 00:06:45,220 --> 00:06:46,580 deling selskapet. 153 00:06:46,580 --> 00:06:50,930 Den siste planen hadde vært å slutte skole og danne et programvareselskap. 154 00:06:50,930 --> 00:06:53,440 Allen hadde forlatt Washington State University. 155 00:06:53,440 --> 00:06:58,380 Men i siste øyeblikk, Gates besluttet å holde fast med Harvard. 156 00:06:58,380 --> 00:07:02,080 >> JAY PAUL: Den dagen krysset Harvard Square, Allen fikk øye på januar 157 00:07:02,080 --> 00:07:07,530 1975 utgaven av Popular Electronics med jorden stoppe overskrift, 158 00:07:07,530 --> 00:07:11,900 Verdens første minidatamaskin Kit til rivaliserende kommersielle modeller. 159 00:07:11,900 --> 00:07:14,430 Under overskriften var et bilde av en liten boks 160 00:07:14,430 --> 00:07:16,160 utsmykket med lys og brytere. 161 00:07:16,160 --> 00:07:19,770 Det ble kalt MITS Altair 8800. 162 00:07:19,770 --> 00:07:24,100 Og Allen visste at dette var hva han hadde vært på jakt etter. 163 00:07:24,100 --> 00:07:26,350 >> HIKARI: Days of diskusjon fulgte. 164 00:07:26,350 --> 00:07:30,170 Allen og Gates forstått betydningen av Altair. 165 00:07:30,170 --> 00:07:32,480 De hadde snakket ofte om mikroprosessorer 166 00:07:32,480 --> 00:07:35,250 og ventet for å se hva ville bli gjort med dem. 167 00:07:35,250 --> 00:07:39,770 Nå var det en minidatamaskin kit på dekselet av Popular Electronics. 168 00:07:39,770 --> 00:07:42,830 Det hadde tydeligvis ingen programvare ennå. 169 00:07:42,830 --> 00:07:46,830 De forestilte en nasjon av programmerere synkende på MITS. 170 00:07:46,830 --> 00:07:49,590 Og så de kalte Ed Roberts, leder av selskapet, 171 00:07:49,590 --> 00:07:53,330 hevder å ha en versjon av BASIC programmeringsspråk nesten klar 172 00:07:53,330 --> 00:07:54,710 for Altair. 173 00:07:54,710 --> 00:07:55,570 De gjorde det ikke. 174 00:07:55,570 --> 00:07:58,910 Og Roberts må ha visst at de ikke gjorde det. 175 00:07:58,910 --> 00:08:03,170 Han fikk 10 samtaler om dagen fra folk som hadde en BASIC nesten klar. 176 00:08:03,170 --> 00:08:05,570 Og hans lager svar var: "Den første personen 177 00:08:05,570 --> 00:08:11,090 som dukker opp med en arbeidsgruppe BASIC får kontrakten. " 178 00:08:11,090 --> 00:08:13,910 >> JAY PAUL: Gates og Allen hadde aldri sett en Altair. 179 00:08:13,910 --> 00:08:17,600 De hadde aldri sett den Intel 8080 mikroprosessor 180 00:08:17,600 --> 00:08:19,060 i hjertet av Altair. 181 00:08:19,060 --> 00:08:21,470 Men et par år tidligere Allen hadde skrevet et program 182 00:08:21,470 --> 00:08:25,220 på en stormaskin som emulert drift av et tidligere Intel 183 00:08:25,220 --> 00:08:26,217 mikroprosessor. 184 00:08:26,217 --> 00:08:28,300 Og denne gangen rundt de ville gjøre det samme. 185 00:08:28,300 --> 00:08:31,530 186 00:08:31,530 --> 00:08:34,380 >> HIKARI: Med en Intel 8080 manuell ved sin side, 187 00:08:34,380 --> 00:08:37,770 Allen satte seg ved et Harvard PDP-10 datamaskin 188 00:08:37,770 --> 00:08:42,010 og skrev emulator og programvare nødvendige verktøy for å gjøre programmeringen. 189 00:08:42,010 --> 00:08:45,820 I mellomtiden Gates sluttet å gå til klasser og viet seg 190 00:08:45,820 --> 00:08:48,120 til utformingen av BASIC, bruker alle triks 191 00:08:48,120 --> 00:08:53,130 han visste å få størrelsen ned under 4 kilobyte. 192 00:08:53,130 --> 00:08:55,870 >> JAY PAUL: Ut i Albuquerque, Ed Roberts fikk en telefon fra Gates 193 00:08:55,870 --> 00:08:59,754 ber om opplysninger om hvordan Altair håndteres bestemte rutiner. 194 00:08:59,754 --> 00:09:01,170 Ingen hadde bedt om det før. 195 00:09:01,170 --> 00:09:02,670 Og Roberts begynte å bli interessert. 196 00:09:02,670 --> 00:09:05,240 197 00:09:05,240 --> 00:09:07,970 >> HIKARI: Med utviklingen verktøy og design klar, 198 00:09:07,970 --> 00:09:10,780 Gates og Allen skrev koden på PDP-10, 199 00:09:10,780 --> 00:09:16,060 verve en annen Harvard student, Monte Davidoff, å skrive matematiske rutiner. 200 00:09:16,060 --> 00:09:19,450 Etter en siste natt med programmering, Allen fikk på et fly 201 00:09:19,450 --> 00:09:22,970 til å levere sitt BASIC til MITS. 202 00:09:22,970 --> 00:09:25,800 Han tilbrakte flyet ri ut bekymringsfull. 203 00:09:25,800 --> 00:09:28,490 Og tilbake i Cambridge Gates var foruroligende. 204 00:09:28,490 --> 00:09:32,100 De hadde testet sine grunnleggende og det hadde fungert på emulator. 205 00:09:32,100 --> 00:09:35,444 Men hva om emulator var galt? 206 00:09:35,444 --> 00:09:37,360 JAY PAUL: Da flyet nærmet Albuquerque, 207 00:09:37,360 --> 00:09:40,070 Allen innså at deres BASIC, nå pent inneholdt 208 00:09:40,070 --> 00:09:42,460 på en liten rull hullet papir tape, ville 209 00:09:42,460 --> 00:09:44,970 være ubrukelig uten en separat program, kalt en lastemaskin, som 210 00:09:44,970 --> 00:09:47,550 ville fortelle Altair hvordan å lese avisen tape vesen 211 00:09:47,550 --> 00:09:49,620 mates inn i fjernskriver-maskin. 212 00:09:49,620 --> 00:09:52,970 Han tok ut sin bærbare og raskt skriblet ned en loader program 213 00:09:52,970 --> 00:09:56,819 i Assembler, deretter manuelt oversatt til å 1s og 0s 214 00:09:56,819 --> 00:09:57,985 Altair ville forstå. 215 00:09:57,985 --> 00:10:00,530 216 00:10:00,530 --> 00:10:03,830 >> HIKARI: Allen var ventet en ren, lite, høyteknologisk selskap 217 00:10:03,830 --> 00:10:05,470 drevet av menn i business dresser. 218 00:10:05,470 --> 00:10:09,210 Så han ble overrasket da Roberts møtte ham på flyplassen ser ut som en ranch 219 00:10:09,210 --> 00:10:10,270 hånd. 220 00:10:10,270 --> 00:10:12,070 Roberts ble også overrasket. 221 00:10:12,070 --> 00:10:16,340 Da han droppet Harvard programmerer på et dyrt hotell, 222 00:10:16,340 --> 00:10:20,790 Allen måtte tilstå at Han hadde ikke råd til rommet. 223 00:10:20,790 --> 00:10:24,510 >> JAY Paul: MITS, seg selv, var ligger i en støvete stripe mall. 224 00:10:24,510 --> 00:10:27,040 Inne på en rotete arbeidsbenk var en Altair 225 00:10:27,040 --> 00:10:30,390 lastet opp med fem kilobyte av hukommelse og forbundet med en kabel 226 00:10:30,390 --> 00:10:32,030 til en fjernmaskin. 227 00:10:32,030 --> 00:10:37,200 Roberts og Chief Engineer, Bill Yates, ventet forventningsfullt 228 00:10:37,200 --> 00:10:40,660 som Allen toggled hans loader programmet i Altair. 229 00:10:40,660 --> 00:10:44,980 Den fjernskriver begynte tøffer som trakk papirbånd gjennom båndleser. 230 00:10:44,980 --> 00:10:47,215 Det tok kanskje 15 minutter å laste programmet. 231 00:10:47,215 --> 00:10:52,110 Da fjernskriver brått skrevet ut en minneteksten, deretter en klar ledeteksten, 232 00:10:52,110 --> 00:10:55,340 og Allen begynte å skrive noen test kommandoer. 233 00:10:55,340 --> 00:10:57,400 Til alles forbauselse, programvaren fungerte. 234 00:10:57,400 --> 00:10:58,525 Det var feil, selvfølgelig. 235 00:10:58,525 --> 00:11:02,070 Men det viktigste var det fungerte. 236 00:11:02,070 --> 00:11:06,570 >> HIKARI: Senere, på vei til en $ 3,00 lunsj på Pancho, en veps fløy 237 00:11:06,570 --> 00:11:10,470 i vinduet av pickup lastebil og stukket Allen på armen. 238 00:11:10,470 --> 00:11:13,070 Men på det tidspunktet ingenting kunne ødelegge stemningen. 239 00:11:13,070 --> 00:11:17,210 Altair nå hadde sin grunnleggende, første kommersielle programvare for et hjem 240 00:11:17,210 --> 00:11:23,260 datamaskin, laget av Paul Allen og Bill Gates, driver virksomhet som Microsoft. 241 00:11:23,260 --> 00:11:25,336 >> DAVID J. MALAN: Mange takket være våre to lesere. 242 00:11:25,336 --> 00:11:30,690 >> [APPLAUSE] 243 00:11:30,690 --> 00:11:32,520 >> DAVID J. MALAN: Nå du har ditt valg, 244 00:11:32,520 --> 00:11:35,880 før du forlater, en sparkly eller en glød i dark-- oh, 245 00:11:35,880 --> 00:11:40,810 vent ett sek, wait-- sparkly og en glød i mørket elefant 246 00:11:40,810 --> 00:11:42,534 fra CS50 egen Cheng Gong. 247 00:11:42,534 --> 00:11:43,450 HIKARI: Aw, takk. 248 00:11:43,450 --> 00:11:45,324 DAVID J. MALAN: All Greit, takk så mye. 249 00:11:45,324 --> 00:11:49,855 [APPLAUSE] 250 00:11:49,855 --> 00:11:51,105 DAVID J. MALAN: Så sann historie. 251 00:11:51,105 --> 00:11:54,380 Dette er for å si at alle disse maskiner og brukervennligheten som vi 252 00:11:54,380 --> 00:11:56,270 bruke dem nå og ta for gitt, egentlig 253 00:11:56,270 --> 00:12:00,070 startet her, bare noen få skritt fra denne faktiske teater. 254 00:12:00,070 --> 00:12:03,930 Og nå i dag, hvis du ikke har vært, dette er Maxwell Dworkin, datamaskinen 255 00:12:03,930 --> 00:12:05,810 Sciences Building, også rundt hjørnet. 256 00:12:05,810 --> 00:12:09,760 Og i andre etasje av dette bygningen ikke henger tre sider 257 00:12:09,760 --> 00:12:12,740 fra den opprinnelige kildekoden som Bill Gates og Paul Allen skrev. 258 00:12:12,740 --> 00:12:14,770 Faktisk, hvis bruken du zoome i kan du se ikke bare 259 00:12:14,770 --> 00:12:17,350 navnene deres i originaltype, men også 260 00:12:17,350 --> 00:12:22,100 sine signaturer som de prydet en noen år tilbake da de sist besøkte. 261 00:12:22,100 --> 00:12:25,800 >> Men hva var spesielt overbevisende om dette er hva de ønsket å gjøre 262 00:12:25,800 --> 00:12:29,760 var å skrive et program som ville at andre mennesker til å skrive 263 00:12:29,760 --> 00:12:30,950 sine egne programmer. 264 00:12:30,950 --> 00:12:34,280 På det tidspunkt da alle var der med dette Altair maskin laget av MITS. 265 00:12:34,280 --> 00:12:40,020 Og alt de trengte var noen måte å noe som gjør det enkelt for amatører og folk 266 00:12:40,020 --> 00:12:45,300 liker oss i dette rommet å faktisk program at uten nødvendigvis å forstå 267 00:12:45,300 --> 00:12:49,060 Assemblerkoden eller maskin kode, eller Gud forby, 0'er og 1'ere. 268 00:12:49,060 --> 00:12:51,190 Vi programmerere, som de i dette rommet, vi 269 00:12:51,190 --> 00:12:54,070 ønsker å være i stand til å uttrykke oss mye mer som pseudo-kode 270 00:12:54,070 --> 00:12:57,330 selv om det er litt mer nit kresen enn vi snakket forrige uke. 271 00:12:57,330 --> 00:13:00,970 Vi ønsker ikke å skrive kode som dette, som Paul Allen og Bill Gates gjorde. 272 00:13:00,970 --> 00:13:04,850 Vi, i stedet, ønsker å skrive kode som ser litt mer brukervennlig. 273 00:13:04,850 --> 00:13:07,150 >> Nå er dette et språk kjent som BASIC. 274 00:13:07,150 --> 00:13:11,497 Og linjenumrene er det hva du bruker å bare telle linjer med kode 275 00:13:11,497 --> 00:13:12,330 som du skriver. 276 00:13:12,330 --> 00:13:14,038 Vi trenger ikke engang å gjør at disse dager. 277 00:13:14,038 --> 00:13:16,060 Men du kan se her Hvordan skriver "Hello, World" 278 00:13:16,060 --> 00:13:18,660 faktisk ville formodentlig ut nettopp det. 279 00:13:18,660 --> 00:13:22,710 Og så hva Bill og Paul gjorde var hjelpe mennesker til å skrive kode som dette 280 00:13:22,710 --> 00:13:27,240 i stedet of-- hvis du tar en titt på informatikk wall-- kode som dette. 281 00:13:27,240 --> 00:13:29,290 >> Faktisk, CS50 nylig hadde en mulighet 282 00:13:29,290 --> 00:13:32,540 å sette seg ned med professor Harry Lewis i datavitenskapsavdelingen, som 283 00:13:32,540 --> 00:13:34,640 faktisk lærte Bill Gates noen år siden, 284 00:13:34,640 --> 00:13:38,460 og står her før disse tre sider med utdrag. 285 00:13:38,460 --> 00:13:39,560 La oss ta en titt. 286 00:13:39,560 --> 00:13:45,520 >> HARRY LEWIS: Det du har her er en en oversikt over en tidlig del av programvaren 287 00:13:45,520 --> 00:13:50,240 skrevet av Bill Gates og Paul Allen, grunnleggerne av Microsoft. 288 00:13:50,240 --> 00:13:52,570 Så koden er interessant av to grunner. 289 00:13:52,570 --> 00:13:55,480 Først av alt ble det Microsofts første produkt, 290 00:13:55,480 --> 00:14:01,810 som var tolk for BASIC programmeringsspråk. 291 00:14:01,810 --> 00:14:04,940 Og for det andre, var dette en av de første forsøk 292 00:14:04,940 --> 00:14:10,580 for å lage en tolk så vanlig folk kunne bruke personlige datamaskiner. 293 00:14:10,580 --> 00:14:12,670 >> Så Bill Gates var en student ved Harvard. 294 00:14:12,670 --> 00:14:14,820 Jeg begynte å undervise ved Harvard i 1974. 295 00:14:14,820 --> 00:14:16,560 Dette ble gjort i 1975. 296 00:14:16,560 --> 00:14:20,180 Så det var tidlig i karrieren og tidlig i min karriere. 297 00:14:20,180 --> 00:14:23,790 Jeg faktisk lært Bill i et kurs rundt denne tiden. 298 00:14:23,790 --> 00:14:27,130 Paul Allen var ikke en Harvard student, men han 299 00:14:27,130 --> 00:14:31,020 hadde vært en videregående skole klassekamerat av Bill Gates. 300 00:14:31,020 --> 00:14:33,740 Hvis du komme og se ved oppføringen, vil du 301 00:14:33,740 --> 00:14:36,230 faktisk finne en tredje navn, Monte Davidoff, 302 00:14:36,230 --> 00:14:39,260 som var Gates klassevenninne her ved Harvard. 303 00:14:39,260 --> 00:14:41,340 >> OK, så her er en interessant kommentar her oppe. 304 00:14:41,340 --> 00:14:47,150 Det står "I 4K kan slette kvadratrot men etter looper skal fortsatt fungere. " 305 00:14:47,150 --> 00:14:53,080 OK, så hva det betyr er at det var to måter å kompilere dette programmet. 306 00:14:53,080 --> 00:14:57,860 Den ene var å kjøre på en versjon av denne Altair datamaskin 307 00:14:57,860 --> 00:15:04,310 som bare hadde 4K ord minne, 4096 ord minne. 308 00:15:04,310 --> 00:15:07,050 Men den store versjonen hadde 8K. 309 00:15:07,050 --> 00:15:09,770 Og så hva dette sier er at i 4K versjon 310 00:15:09,770 --> 00:15:12,770 du måtte slette noen kode for å gjøre det skikket. 311 00:15:12,770 --> 00:15:14,790 Og en av de tingene som vil bli slettet 312 00:15:14,790 --> 00:15:16,290 ville være kvadratroten rutine. 313 00:15:16,290 --> 00:15:20,360 Men tilsynelatende etter looper bør fortsatt 314 00:15:20,360 --> 00:15:26,392 jobbe selv når du kompilere ned for bare 4K versjon av data. 315 00:15:26,392 --> 00:15:29,350 DAVID J. MALAN: Så et av temaene, som vi skal se i informatikk, 316 00:15:29,350 --> 00:15:31,430 er denne oppfatningen av lagdeling og abstraksjon, 317 00:15:31,430 --> 00:15:34,670 og virkelig stått på skuldrene av folk som har kommet før oss, ikke 318 00:15:34,670 --> 00:15:37,890 i motsetning til noen av Bill Gates og Paul Allen fortelling her. 319 00:15:37,890 --> 00:15:40,080 Og hva dette betyr er at vi i dag kan ta for 320 00:15:40,080 --> 00:15:43,490 gitt at ting er faktisk lettere for oss å skrive kode. 321 00:15:43,490 --> 00:15:47,170 Faktisk kode, som vi sa på fredag, er mer teknisk kjent som kildekoden. 322 00:15:47,170 --> 00:15:52,210 Og det er denne engelsk som syntaks det er mer riktig og mer veldefinert 323 00:15:52,210 --> 00:15:55,480 enn noe sånt som pseudo-kode, for der er det ingen formelle definisjonen. 324 00:15:55,480 --> 00:15:58,320 >> Og i dag hva vi skal å fokusere på er kildekoden 325 00:15:58,320 --> 00:16:01,010 som ser ut som dette, som riktignok ved første øyekast 326 00:16:01,010 --> 00:16:02,690 ser helt kryptisk. 327 00:16:02,690 --> 00:16:08,540 Og ærlig talt, det er veien mer estetisk kompleks enn den underliggende programmet er. 328 00:16:08,540 --> 00:16:13,300 Alt dette programmet gjør, tilbakekalling, er hva vi sier? 329 00:16:13,300 --> 00:16:14,990 Den skriver bare "hello world". 330 00:16:14,990 --> 00:16:19,600 Og likevel se på alle de ting vi trenger å vikle rundt at svært enkle setninger. 331 00:16:19,600 --> 00:16:21,750 Men før lenge alle disse linjer og mer 332 00:16:21,750 --> 00:16:24,800 vil gjøre mye bedre følelse for deg. 333 00:16:24,800 --> 00:16:26,940 >> Og strømmen er som følger. 334 00:16:26,940 --> 00:16:31,220 Hva vi trenger til rådighet er å ta kode, som kilden 335 00:16:31,220 --> 00:16:32,340 kode som vi nettopp så. 336 00:16:32,340 --> 00:16:35,060 Og vi trenger et nytt program å kjøre den gjennom. 337 00:16:35,060 --> 00:16:39,130 Vi trenger algoritmer som kan konvertere kildekoden, som dette, 338 00:16:39,130 --> 00:16:41,932 til objektkode, 0'er og 1'ere. 339 00:16:41,932 --> 00:16:43,890 Med andre ord, hva Vi kommer til å lære i dag 340 00:16:43,890 --> 00:16:46,620 er hvordan du gjør dette, skriver kildekoden opp toppen, 341 00:16:46,620 --> 00:16:49,930 gi det som input til en spesiell program kalt en kompilator, 342 00:16:49,930 --> 00:16:52,140 og vi kommer til å produsere objektkode. 343 00:16:52,140 --> 00:16:54,600 Som er bare en fancy måte sier vi vil ta noe 344 00:16:54,600 --> 00:16:58,350 som ser ut som dette, passerer det inn i et program som kalles en kompilator, 345 00:16:58,350 --> 00:17:01,210 produsere objektkode som ser ut som dette. 346 00:17:01,210 --> 00:17:04,720 >> Så dette er bokstavelig talt mønstre av 0'er og 1'ere 347 00:17:04,720 --> 00:17:08,550 som er forstått av en Intel datamaskin i disse dager, 348 00:17:08,550 --> 00:17:12,480 at hvis tolket av CPU, hjernen innsiden av en datamaskin, 349 00:17:12,480 --> 00:17:16,130 vil bokstavelig talt skrive ut, ganske enkelt, "hello world". 350 00:17:16,130 --> 00:17:19,670 Nå er det måten flere 0'er og 1'ere enn deg håper kan være nødvendig for det. 351 00:17:19,670 --> 00:17:22,520 Men det er fordi vi bygger på en god del av kompleksitet 352 00:17:22,520 --> 00:17:24,270 at vi heretter kan ta for gitt. 353 00:17:24,270 --> 00:17:27,869 Med andre ord, mange smarte folk har gitt oss mange kule verktøy 354 00:17:27,869 --> 00:17:32,480 og kraftig programvare som vi kan nå lage prosjekter av vår egen. 355 00:17:32,480 --> 00:17:33,400 >> Så la oss komme i gang. 356 00:17:33,400 --> 00:17:36,640 Mens sist fredag, og for Problem Set 0 denne uken, 357 00:17:36,640 --> 00:17:39,000 du kommer til å spille i en verden som ser ut som dette. 358 00:17:39,000 --> 00:17:42,180 Fra i dag og for Problem Sett 1 neste uke, koden 359 00:17:42,180 --> 00:17:45,410 kommer til å se litt mer kryptisk, men funksjonelt er 360 00:17:45,410 --> 00:17:46,940 kommer til å være den samme. 361 00:17:46,940 --> 00:17:50,770 Så varsel, toppen er Scratch, Bunnen er C. Frankly Scratch 362 00:17:50,770 --> 00:17:52,780 er mye mer brukervennlig vennlig og tilgjengelig. 363 00:17:52,780 --> 00:17:56,890 Men hvis du nå sammenligne visuelt topp til bunn, det er litt av en 12:59 364 00:17:56,890 --> 00:17:59,690 korrespondanse mellom puslespillbrikker og språket 365 00:17:59,690 --> 00:18:00,870 vi er i ferd med å spille med. 366 00:18:00,870 --> 00:18:04,420 Spesielt si, blå puslespillbrikke opp toppen, 367 00:18:04,420 --> 00:18:08,370 er tilsynelatende tilsvarer det søkeordet eller spesielle uttrykk i dette språket 368 00:18:08,370 --> 00:18:09,062 kalt C? 369 00:18:09,062 --> 00:18:09,770 PUBLIKUM: Printf. 370 00:18:09,770 --> 00:18:10,728 DAVID J. MALAN: Printf. 371 00:18:10,728 --> 00:18:12,140 Det betyr formatert utskrift. 372 00:18:12,140 --> 00:18:15,240 Og det er bare et fancy måte å si printf i C 373 00:18:15,240 --> 00:18:18,615 kommer til å være et utsagn eller en funksjon som skriver ut noe til skjermen. 374 00:18:18,615 --> 00:18:19,990 Hva blir skrevet ut det til skjermen? 375 00:18:19,990 --> 00:18:23,627 Uansett hva du forteller det til inne sitater, innsiden av parenteser. 376 00:18:23,627 --> 00:18:25,460 Så igjen, riktignok, det er en masse ting 377 00:18:25,460 --> 00:18:27,990 at du må huske på, parentes, sitater, semikolon, 378 00:18:27,990 --> 00:18:28,656 og alt dette. 379 00:18:28,656 --> 00:18:30,600 Men alt dette er liksom av poenget. 380 00:18:30,600 --> 00:18:33,660 Det interessante takeaway for nå er at si blokk i Scratch 381 00:18:33,660 --> 00:18:37,520 er ganske mye tilsvarer printf uttalelse i C. 382 00:18:37,520 --> 00:18:41,390 >> I mellomtiden, den gule puslespill brikke opp toppen, når grønne flagget klikket, 383 00:18:41,390 --> 00:18:44,736 er trolig tilsvarende til hva nøkkelord her? 384 00:18:44,736 --> 00:18:45,360 PUBLIKUM: Main. 385 00:18:45,360 --> 00:18:46,359 DAVID J. MALAN: Så hoved. 386 00:18:46,359 --> 00:18:47,410 Kanskje int, kanskje annullert. 387 00:18:47,410 --> 00:18:51,280 Men hoved slags lyder som det er viktig, og faktisk er det. 388 00:18:51,280 --> 00:18:54,080 Så når grønne flagget klikket er, igjen, puslespill brikke 389 00:18:54,080 --> 00:18:56,390 som starter en Hele Scratch program. 390 00:18:56,390 --> 00:19:02,140 Men vi kommer til å nå begynne å ringe at hoved, denne funksjonen er kjent som hoved. 391 00:19:02,140 --> 00:19:06,410 >> Nå i mellomtiden vi vil generalisere dette på følgende måte. 392 00:19:06,410 --> 00:19:08,780 Vi kan kalle si en funksjon. 393 00:19:08,780 --> 00:19:10,580 Og det kan se spesielt som dette. 394 00:19:10,580 --> 00:19:11,770 Vel, hva med sløyfer? 395 00:19:11,770 --> 00:19:16,540 Hvis vi ønsker å begynne å konvertere eller sette mer i Scratch til C, 396 00:19:16,540 --> 00:19:19,400 denne tingen her tilsynelatende bare sier "hello world" for alltid. 397 00:19:19,400 --> 00:19:23,060 Så hvis du forbinder disse skript med en katt i Scratch, 398 00:19:23,060 --> 00:19:26,560 det bare kommer til å fortsette å si i en slags tegnefilm boble, 399 00:19:26,560 --> 00:19:29,922 "Hello world, hello world, hallo verden, "ad nauseum, for alltid. 400 00:19:29,922 --> 00:19:33,130 Hvis vi ønsker å gjøre noe lignende i C, det kommer til å se litt kryptisk. 401 00:19:33,130 --> 00:19:35,463 Men vi kan oppnå det samme resultater, som vi vil til slutt 402 00:19:35,463 --> 00:19:36,861 finne ut, med syntaks som dette. 403 00:19:36,861 --> 00:19:39,360 Jeg kommer til å bruke printf igjen, fordi ved slutten av dagen 404 00:19:39,360 --> 00:19:42,040 Jeg ønsker å skrive ut "hello world". 405 00:19:42,040 --> 00:19:45,610 Og jeg tydeligvis bruker en søkeord som ikke er evig. 406 00:19:45,610 --> 00:19:47,320 Det er i stedet ordet stund. 407 00:19:47,320 --> 00:19:49,650 Men bare semantisk i Engelsk, mens slags 408 00:19:49,650 --> 00:19:52,120 antyder en slags løkke eller syklus. 409 00:19:52,120 --> 00:19:55,070 >> Så det skjer for å være søkeordet som C bruker. 410 00:19:55,070 --> 00:20:00,700 Og mens sant, hvorfor gjør mens sant effektivt bety for alltid? 411 00:20:00,700 --> 00:20:04,240 Vel, mens, som vi snart setter pris på alle de mer, 412 00:20:04,240 --> 00:20:08,140 har denne parentes ved siden av det hvor du kan sette en boolsk uttrykk. 413 00:20:08,140 --> 00:20:11,360 Og så lenge som uttrykket er sant, denne kode 414 00:20:11,360 --> 00:20:14,750 som betegnet mellom disse to klammeparentes som vi kaller dem, 415 00:20:14,750 --> 00:20:16,880 vil bare fortsette å kjøre igjen og igjen. 416 00:20:16,880 --> 00:20:18,410 >> Så sant er sant. 417 00:20:18,410 --> 00:20:20,900 Så mens sanne midler bare gjøre dette for alltid. 418 00:20:20,900 --> 00:20:23,480 Det er nesten en dum konstruere å uttrykke deg. 419 00:20:23,480 --> 00:20:26,590 Men det var ikke alltid søkeord i C. Det var mens. 420 00:20:26,590 --> 00:20:29,390 Og det var en veldig enkel Boolsk uttrykk som ekte. 421 00:20:29,390 --> 00:20:32,210 Og så dette, vi får se, oppnår det samme resultat. 422 00:20:32,210 --> 00:20:33,890 >> Hvordan ellers kan du implementere en loop? 423 00:20:33,890 --> 00:20:36,980 Vel, i Scratch du kanskje vanskelig kode et bestemt antall 424 00:20:36,980 --> 00:20:39,430 iterasjoner i sløyfen her. 425 00:20:39,430 --> 00:20:43,210 Og så det er akkurat det vi kan gjøre i denne versjonen av C, 426 00:20:43,210 --> 00:20:46,140 der vi har en såkalt for loop. 427 00:20:46,140 --> 00:20:49,850 Og for loop her kommer å reagere, noe kryptisk, 428 00:20:49,850 --> 00:20:54,100 fra verdien 0 på opp til, men mindre enn 10. 429 00:20:54,100 --> 00:20:55,955 >> Nå variabler i bunnen av. 430 00:20:55,955 --> 00:20:57,830 Du har kanskje ikke hatt anledning til å bruke disse. 431 00:20:57,830 --> 00:21:02,516 Men hva er poenget, generelt, av en variabel vi si i forrige uke? 432 00:21:02,516 --> 00:21:03,015 Hva er det? 433 00:21:03,015 --> 00:21:03,780 >> Målgruppe: Points. 434 00:21:03,780 --> 00:21:05,200 >> DAVID J. MALAN: Å peke? 435 00:21:05,200 --> 00:21:05,700 Oh, påpeker. 436 00:21:05,700 --> 00:21:07,620 OK, holde styr på poeng, For eksempel, i et spill. 437 00:21:07,620 --> 00:21:09,510 Eller mer generelt å gjøre hva med variabel? 438 00:21:09,510 --> 00:21:10,450 Hva er nytten av dem? 439 00:21:10,450 --> 00:21:10,825 >> PUBLIKUM: 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 er for lagring av noe. 442 00:21:13,000 --> 00:21:17,336 Og den slags dum visuell jeg brukte siste gang var som denne glassbolle. 443 00:21:17,336 --> 00:21:19,710 Og hvis vi ønsket å lagre noe på innsiden av en variabel, 444 00:21:19,710 --> 00:21:21,918 for eksempel akkurat nå verdi er seks fordi det 445 00:21:21,918 --> 00:21:23,450 er seks ping pong-baller i her. 446 00:21:23,450 --> 00:21:26,158 Det er bare en slags lagringsplass container som under panseret 447 00:21:26,158 --> 00:21:30,030 er implementert med biter, 0'er og 1'ere, men en datamaskin skjer for å gjøre det. 448 00:21:30,030 --> 00:21:32,900 >> Så i Scratch, hvis vi vil ha en variabel, 449 00:21:32,900 --> 00:21:34,840 vi kan bruke en oransje blokk som dette. 450 00:21:34,840 --> 00:21:37,050 Vi kaller det teller i dette tilfellet. 451 00:21:37,050 --> 00:21:38,890 Jeg initialisert den til 0. 452 00:21:38,890 --> 00:21:41,080 Og hva det jeg da gjøre? 453 00:21:41,080 --> 00:21:44,780 For alltid, sier telleren, som hvis du spiller med det i Scratch, 454 00:21:44,780 --> 00:21:45,780 vil du bare se Scratch. 455 00:21:45,780 --> 00:21:49,920 Katten eller hva kostyme du sette på ham vil snakke tallet i spørsmålet. 456 00:21:49,920 --> 00:21:52,840 >> Endre teller med 1 er som økes med 1. 457 00:21:52,840 --> 00:21:56,580 Og så dette kommer til å telle fra hva så hva? 458 00:21:56,580 --> 00:21:59,114 Fra 0 Til uendelig, eller inntil Skrape pauser, 459 00:21:59,114 --> 00:22:01,030 eller til du liksom mister interessen for å se på 460 00:22:01,030 --> 00:22:02,650 hvor høyt han kan faktisk telle. 461 00:22:02,650 --> 00:22:04,800 >> Så hvordan kan vi konvertere dette til C? 462 00:22:04,800 --> 00:22:06,480 Det kommer til å se litt kryptisk. 463 00:22:06,480 --> 00:22:08,896 Men igjen, hvis du ser på hver av disse linjene individuelt 464 00:22:08,896 --> 00:22:10,410 de slags lineup generelt. 465 00:22:10,410 --> 00:22:13,526 Så tilsynelatende int kommer til å har noen spesiell betydning i C. 466 00:22:13,526 --> 00:22:14,400 Vi får se det igjen. 467 00:22:14,400 --> 00:22:15,810 Som en side betyr det heltall. 468 00:22:15,810 --> 00:22:16,990 Så det betyr bare tall. 469 00:22:16,990 --> 00:22:18,920 Så det er typen glassbolle jeg vil, ett 470 00:22:18,920 --> 00:22:21,120 som kan lagre numre, ikke ping pong baller. 471 00:22:21,120 --> 00:22:25,520 Og jeg kommer til å bruke likhetstegnet der for å tilordne den en verdi på 0. 472 00:22:25,520 --> 00:22:29,440 Så det er ganske like sett telleren til 0, men i C. 473 00:22:29,440 --> 00:22:32,840 >> I mellomtiden, mens sant, det var tilsvarende, selvfølgelig, for alltid, 474 00:22:32,840 --> 00:22:35,980 selv om det er litt kryptisk, og deretter inne i klammeparentes. 475 00:22:35,980 --> 00:22:39,188 Og du kan tenke på disse klammeparentes, som du kan skrive på tastaturet, 476 00:22:39,188 --> 00:22:43,110 som virkelig blir som krumningen i disse gule sløyfe blokker i bunnen av. 477 00:22:43,110 --> 00:22:45,700 Det omfatter flere linjer med kode. 478 00:22:45,700 --> 00:22:48,120 >> Printf er å få en litt skummelt nå fordi jeg 479 00:22:48,120 --> 00:22:51,120 se ikke bare siterer i parentes. 480 00:22:51,120 --> 00:22:55,160 Men hva annet er nytt syntaktisk i dette eksempelet? 481 00:22:55,160 --> 00:22:57,300 Det er en prosent d. 482 00:22:57,300 --> 00:22:58,551 Og så backslash n er der. 483 00:22:58,551 --> 00:23:00,883 Vi fikk se at før, selv selv om jeg ikke nevne det. 484 00:23:00,883 --> 00:23:01,886 Så er det et komma. 485 00:23:01,886 --> 00:23:03,010 Og så er det en teller. 486 00:23:03,010 --> 00:23:05,010 >> Men vi får se i løpet av et øyeblikk at dette er bare 487 00:23:05,010 --> 00:23:09,080 en standard måte å si print en "Desimaltall," sitat, unquote, 488 00:23:09,080 --> 00:23:10,500 noen desimaltall. 489 00:23:10,500 --> 00:23:13,370 Men jeg skal fortelle deg senere hva som desimaltall er. 490 00:23:13,370 --> 00:23:16,835 Så det faktum at det er et komma i denne linjen ordtak printf, 491 00:23:16,835 --> 00:23:18,710 betyr gå videre og print noen desimaltall. 492 00:23:18,710 --> 00:23:23,110 Oh, og forresten, er antall uansett verdien av denne variabelen er. 493 00:23:23,110 --> 00:23:25,880 Og så for å gjøre dette mer klart, vil vi se et eksempel 494 00:23:25,880 --> 00:23:30,930 før lenge involverer nøyaktig printf i sammenheng med virkelige C-programmer. 495 00:23:30,930 --> 00:23:33,472 >> Nå bare å bryte opp noen av disse konstruerer. 496 00:23:33,472 --> 00:23:36,680 Boolske uttrykk, har du kanskje ikke anledning til å bruke disse i programmet 497 00:23:36,680 --> 00:23:39,450 men du kan godt, spesielt hvis du bruker forhold. 498 00:23:39,450 --> 00:23:43,460 Og så disse to eksempler fra Skrap mener hvis x er mindre enn y, 499 00:23:43,460 --> 00:23:48,770 eller når x er mindre enn y og y er mindre enn z, hvordan kan vi oversette det? 500 00:23:48,770 --> 00:23:50,810 >> Vel, i C er det bare kommer til å se slik ut. 501 00:23:50,810 --> 00:23:55,300 Litt kryptiske, flere parentes, noen rare-tegn, men fundamentalt 502 00:23:55,300 --> 00:23:59,160 ideene er så enkelt som de er i puslespill brikke verden. 503 00:23:59,160 --> 00:24:02,690 Vi er rett og slett å sjekke om noe er mindre enn noe annet sted. 504 00:24:02,690 --> 00:24:03,910 >> Hva med forholdene? 505 00:24:03,910 --> 00:24:09,710 I et nøtteskall på engelsk, hva betyr dette blings av Scratch kode gjøre ville du si? 506 00:24:09,710 --> 00:24:11,050 >> PUBLIKUM: Sammenligner to tall. 507 00:24:11,050 --> 00:24:13,760 >> DAVID J. MALAN: Sammenligner to tall, og hvis x er mindre enn y 508 00:24:13,760 --> 00:24:14,860 det sier så mye. 509 00:24:14,860 --> 00:24:18,080 Hvis x er større enn y det sier så mye, annet 510 00:24:18,080 --> 00:24:20,740 hvis x er lik y det står like mye. 511 00:24:20,740 --> 00:24:22,180 Nå der gjorde x og y kommer fra? 512 00:24:22,180 --> 00:24:22,680 Hvem vet. 513 00:24:22,680 --> 00:24:25,380 Denne del av Scratch kode er ute av kontekst. 514 00:24:25,380 --> 00:24:29,050 Men hva vi ønsker å gjøre nå er å oversette dette for bare et øyeblikk å se. 515 00:24:29,050 --> 00:24:31,660 >> Så som du blir komfortabel denne uken i oppgavesettet 516 00:24:31,660 --> 00:24:34,190 0 spiller i denne verden til venstre, skjønner 517 00:24:34,190 --> 00:24:36,940 at ideene ikke er i endring denne uken eller neste eller utover. 518 00:24:36,940 --> 00:24:38,690 Vi er rett og slett kommer til å begynner å skrive ting 519 00:24:38,690 --> 00:24:41,240 på en annen måte med vår tastaturet i stedet for vår musen. 520 00:24:41,240 --> 00:24:44,577 >> Så hvis x er mindre enn y, og det er noen parentes der, 521 00:24:44,577 --> 00:24:47,160 så er det noen klammeparentes igjen å slags kapsle det 522 00:24:47,160 --> 00:24:48,970 akkurat som de gule brikkene gjør. 523 00:24:48,970 --> 00:24:53,000 Og jeg kommer til å printf x er mindre enn y, og så videre. 524 00:24:53,000 --> 00:24:56,540 >> Hva er fint om C, som du kan se her, 525 00:24:56,540 --> 00:25:00,480 er at du ikke får dette hekkende, hekkende, hekker det er nødvendigvis 526 00:25:00,480 --> 00:25:02,220 skal skyve koden til høyre. 527 00:25:02,220 --> 00:25:04,990 Du kan i stedet ha alt lineup pent liker dette. 528 00:25:04,990 --> 00:25:08,960 Men det er bare en estetisk detaljer vi får se igjen før lenge. 529 00:25:08,960 --> 00:25:09,660 >> Greit. 530 00:25:09,660 --> 00:25:13,290 Så det bringer oss tilbake til denne kryptiske ser programmet. 531 00:25:13,290 --> 00:25:15,180 La oss faktisk skrive noen kode. 532 00:25:15,180 --> 00:25:16,830 Nå hvordan du går om å skrive kode på? 533 00:25:16,830 --> 00:25:21,310 Alle disse årene du har eid Mac eller PC, stasjonær eller bærbar PC, 534 00:25:21,310 --> 00:25:24,520 du har faktisk hatt evnen å begynne å skrive programmeringskode. 535 00:25:24,520 --> 00:25:27,050 Men er du sannsynligvis mangler en spesiell type program. 536 00:25:27,050 --> 00:25:28,470 Du kan sikkert skrive kode. 537 00:25:28,470 --> 00:25:30,740 Men du kan ikke nødvendigvis, ut av boksen, 538 00:25:30,740 --> 00:25:34,210 konvertere at kildekoden til objektkode, 0'er og 1'ere 539 00:25:34,210 --> 00:25:35,619 uten det på datamaskinen? 540 00:25:35,619 --> 00:25:36,410 PUBLIKUM: Compiler. 541 00:25:36,410 --> 00:25:37,630 DAVID J. MALAN: Så en kompilator, ikke sant. 542 00:25:37,630 --> 00:25:39,730 Nå er de fleste av dere sikkert eier ikke en kompilator, 543 00:25:39,730 --> 00:25:41,259 har aldri lastet ned en kompilator. 544 00:25:41,259 --> 00:25:44,300 Men du vil se at du kan laste den ned som de fleste andre stykke programvare. 545 00:25:44,300 --> 00:25:47,470 I en verden av Mac OS, kan du laste ned eller har lastet ned allerede 546 00:25:47,470 --> 00:25:50,437 noe som heter Xcode eller GCC eller Clang. 547 00:25:50,437 --> 00:25:52,270 Hvis du kommer fra Windows verden du kanskje 548 00:25:52,270 --> 00:25:56,190 har lastet ned Visual Studio, Visual Basic, miljøer sånn. 549 00:25:56,190 --> 00:25:59,200 Det er dusinvis av kompilatorer disse dager som du kan bruke. 550 00:25:59,200 --> 00:26:01,940 Men den korte av det her er at det ville være en smerte 551 00:26:01,940 --> 00:26:04,480 og, ærlig, en teknologisk mareritt for hundrevis 552 00:26:04,480 --> 00:26:07,680 av mennesker med ulik datamaskinkonfigureringer til alle 553 00:26:07,680 --> 00:26:09,800 konfigurere sine maskiner på nøyaktig samme måte 554 00:26:09,800 --> 00:26:11,700 slik at vi alle kan være på samme side. 555 00:26:11,700 --> 00:26:15,240 >> Det vi i stedet gjør i CS50 er vi gi deg 556 00:26:15,240 --> 00:26:18,349 en standard miljø, et Linux-miljø som er 557 00:26:18,349 --> 00:26:20,140 kommer til å se litt noe sånt som dette. 558 00:26:20,140 --> 00:26:22,980 Du vil se mer av dette i Problem Set 1 spesifikasjon som 559 00:26:22,980 --> 00:26:25,330 vil gå online dette fredag ​​kveld. 560 00:26:25,330 --> 00:26:28,360 >> Og hva dette betyr er at du heretter 561 00:26:28,360 --> 00:26:32,060 kommer til å være i stand til å laste ned og installere et program 562 00:26:32,060 --> 00:26:33,650 kalt CS50 Appliance. 563 00:26:33,650 --> 00:26:36,275 Og du kommer til å laste ned og installere et annet program som heter 564 00:26:36,275 --> 00:26:40,300 en hypervisor, som er bare en fancy måte å oppnå dette. 565 00:26:40,300 --> 00:26:44,600 Enten du eier en Mac eller PC eller en Linux-datamaskin eller en Solaris maskin, 566 00:26:44,600 --> 00:26:46,830 eller hva gal drifts systemet du kjører, 567 00:26:46,830 --> 00:26:49,820 du kommer til å laste ned et program kalt hypervisor som er 568 00:26:49,820 --> 00:26:53,350 kommer til å kjøre CS50 Apparatet på datamaskinen 569 00:26:53,350 --> 00:26:55,430 uansett hva operativsystemet er. 570 00:26:55,430 --> 00:27:00,640 En hypervisor med andre ord konverterer våre ting til uansett språk, 571 00:27:00,640 --> 00:27:03,850 Uansett instruksjoner dine egen datamaskin forstår. 572 00:27:03,850 --> 00:27:04,962 >> Så dette er en lagdeling. 573 00:27:04,962 --> 00:27:06,920 Og igjen, er denne typen av tematisk i datamaskinen 574 00:27:06,920 --> 00:27:08,722 vitenskap, bygningen på toppen av ting. 575 00:27:08,722 --> 00:27:09,680 Du har kanskje Windows. 576 00:27:09,680 --> 00:27:10,710 Du har kanskje Mac OS. 577 00:27:10,710 --> 00:27:12,960 Men fra neste uke du er kommer til å ha lastet ned 578 00:27:12,960 --> 00:27:14,980 en gratis stykke programvare kalt hypervisor. 579 00:27:14,980 --> 00:27:17,800 Du kommer til å ha lastet ned et stykke av programvare kalt CS50 Appliance. 580 00:27:17,800 --> 00:27:21,050 >> Det kommer til å kjøre i hypervisor, som kommer til å kjøre på din datamaskin. 581 00:27:21,050 --> 00:27:23,030 , Og sluttresultatet er at alle av oss vil 582 00:27:23,030 --> 00:27:26,220 har et enkelt vindu som dette på din Mac eller PC 583 00:27:26,220 --> 00:27:30,160 som gir oss illusjonen av alt kjører samme operativsystem, 584 00:27:30,160 --> 00:27:32,800 uten noen annen innvirkning på din datamaskin. 585 00:27:32,800 --> 00:27:34,870 Og du kan fullskjerm det og i hovedsak oppfører seg 586 00:27:34,870 --> 00:27:37,550 som om du kjører en operativsystem kalt Linux, 587 00:27:37,550 --> 00:27:40,270 som er hva CS50 Apparatet er basert på. 588 00:27:40,270 --> 00:27:42,930 >> Så la oss faktisk bruker dette nå å skrive et program. 589 00:27:42,930 --> 00:27:45,450 Du kan skrive et program ved hjelp av Microsoft Word. 590 00:27:45,450 --> 00:27:48,160 Du kan skrive et program bruker TextEdit, eller Notepad, 591 00:27:48,160 --> 00:27:51,880 eller WordPad, eller stort sett alle ord prosessering program du noen gang har brukt. 592 00:27:51,880 --> 00:27:55,174 Men realiteten er at du ikke bør bruker virkelig noen av disse programmene. 593 00:27:55,174 --> 00:27:57,840 Du absolutt ikke bør bruke noe som Microsoft Word, som 594 00:27:57,840 --> 00:28:01,120 har fet vendt og kursiv, og større fonter og mindre skrifter, 595 00:28:01,120 --> 00:28:03,560 fordi datamaskinen ikke bryr seg om noe av det. 596 00:28:03,560 --> 00:28:05,600 Hele maskinen er kommer til å bry seg om er 597 00:28:05,600 --> 00:28:09,040 Engelsk som instruksjoner skrevet i C. 598 00:28:09,040 --> 00:28:12,050 >> Så hva skal vi gjøre inne av CS50 Appliance 599 00:28:12,050 --> 00:28:14,290 er å bruke et program fritt tilgjengelig, er og det 600 00:28:14,290 --> 00:28:17,360 pre-installert i denne apparatet, kalt Gedit. 601 00:28:17,360 --> 00:28:22,280 Og Gedit er bare en super enkel tekstredigeringsprogram som Mac OS er TextEdit, 602 00:28:22,280 --> 00:28:26,200 som Windows Notepad som kommer til å ser litt noe sånt som dette. 603 00:28:26,200 --> 00:28:28,910 >> Så la oss faktisk ikke se på lysbilder av dette. 604 00:28:28,910 --> 00:28:32,580 Men la oss faktisk gå inn miljøet selv. 605 00:28:32,580 --> 00:28:36,090 Jeg kommer til å gå videre og logg inn, i denne andre vinduet, 606 00:28:36,090 --> 00:28:40,910 til min CS50 Appliance, som jeg har pre-installert på min laptop her. 607 00:28:40,910 --> 00:28:43,771 >> Legg merke til at, som Windows og Mac OS, det har noen menyer. 608 00:28:43,771 --> 00:28:45,520 Som Windows det setter det der nede i stedet 609 00:28:45,520 --> 00:28:47,020 av Mac OS, noe som plasserer den der nede. 610 00:28:47,020 --> 00:28:48,930 Men realiteten er at det er alle slags samme. 611 00:28:48,930 --> 00:28:50,770 Og her er en hel haug med programvare. 612 00:28:50,770 --> 00:28:51,770 Det er Dropbox. 613 00:28:51,770 --> 00:28:54,780 Det er en hel haug med tilbehør, grafiske programmer som vi vil 614 00:28:54,780 --> 00:28:56,430 bruke senere i begrepet for oppgavesett. 615 00:28:56,430 --> 00:28:59,650 Det er en nettleser innebygd slik at dette er en fullverdig datamaskin 616 00:28:59,650 --> 00:29:01,240 innsiden av en datamaskin. 617 00:29:01,240 --> 00:29:04,170 >> Men jeg kommer til å klikke på denne lengst til venstre hvite ikonet her, 618 00:29:04,170 --> 00:29:05,890 som er ikonet for Gedit. 619 00:29:05,890 --> 00:29:09,650 Og det kommer til å åpne et vindu som har tre paneler til det, 620 00:29:09,650 --> 00:29:12,590 en venstre ene, en topp en, og en nederste. 621 00:29:12,590 --> 00:29:16,071 >> Nå er det i denne topp rette som Jeg kommer til å faktisk skrive noe kode. 622 00:29:16,071 --> 00:29:16,820 Så la oss gjøre dette ,. 623 00:29:16,820 --> 00:29:19,040 Jeg kommer til å gå til Fil, Lagre. 624 00:29:19,040 --> 00:29:22,100 Og du kanskje ikke noensinne har sett dette spesielle vinduet før. 625 00:29:22,100 --> 00:29:23,620 Men dette er som Mac OS eller Windows. 626 00:29:23,620 --> 00:29:25,490 Det er bare et vindu med alle mappene 627 00:29:25,490 --> 00:29:27,290 at jeg har inne i denne maskinen. 628 00:29:27,290 --> 00:29:30,320 >> Og jeg kommer til å spare filen som hello.c. 629 00:29:30,320 --> 00:29:32,690 Og jeg kommer til å gå videre og klikk på Lagre. 630 00:29:32,690 --> 00:29:36,364 Og nå merker jeg har en fane øverst til venstre som heter hello.c. 631 00:29:36,364 --> 00:29:38,280 Så sannsynligvis ganske kjent selv om du har ikke 632 00:29:38,280 --> 00:29:40,240 brukt dette programmet før. 633 00:29:40,240 --> 00:29:44,890 >> Og nå kommer jeg til å skrive inn de ganske kryptisk sekvens av kommandoer 634 00:29:44,890 --> 00:29:46,360 at vi så et øyeblikk siden. 635 00:29:46,360 --> 00:29:49,330 Inkluderer 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 ugyldig, åpen krøllete brace, lukket klammeparentes. 638 00:29:55,670 --> 00:30:01,570 Og så innsiden av det jeg tror er hvor vi hadde "hello world", semikolon. 639 00:30:01,570 --> 00:30:03,100 Og nå lagre. 640 00:30:03,100 --> 00:30:08,780 >> Så dette er et program skrevet i C, skrevet derfor i kildekoden. 641 00:30:08,780 --> 00:30:10,720 Men jeg kan ikke bare kjøre dette programmet. 642 00:30:10,720 --> 00:30:13,390 Jeg slags ønsker å doble klikk på et ikon et sted, 643 00:30:13,390 --> 00:30:16,390 men ikke noe ikon finnes andre enn kildekoden filen. 644 00:30:16,390 --> 00:30:20,359 Hva, igjen, er prosessen nå at Jeg trenger å kjøre denne filen gjennom? 645 00:30:20,359 --> 00:30:21,150 PUBLIKUM: 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 forskjellige datamaskiner du gjøre dette på forskjellige måter. 648 00:30:24,890 --> 00:30:27,480 Men det vi har gjort her i den CS50 Appliance som er 649 00:30:27,480 --> 00:30:31,260 representativ for hvordan du kan gjøre dette på mange forskjellige systemer, 650 00:30:31,260 --> 00:30:34,036 er jeg bare kommer til å kjøre en kommando som heter make. 651 00:30:34,036 --> 00:30:35,660 Og make er bokstavelig talt kommer til å gjøre det. 652 00:30:35,660 --> 00:30:36,640 Gjør meg et program. 653 00:30:36,640 --> 00:30:39,060 >> Så gjør kommer til å kjøre en kompilator for meg. 654 00:30:39,060 --> 00:30:42,160 Og navnet på programmet Jeg ønsker å gjøre er hei. 655 00:30:42,160 --> 00:30:43,510 Nå gjør er et program. 656 00:30:43,510 --> 00:30:47,170 Og gjør er smart nok til å innse at hvis jeg sier at hei, 657 00:30:47,170 --> 00:30:50,980 det kommer til å se automatisk for en fil som heter hello.c 658 00:30:50,980 --> 00:30:53,420 bare fordi det er den Måten det er konfigurert. 659 00:30:53,420 --> 00:31:00,300 >> Så når jeg nå trykker Enter her, dette gal kryptiske linjen bare fikk henrettet. 660 00:31:00,300 --> 00:31:02,720 Og stol på meg, før lang, i løpet av bare dager, 661 00:31:02,720 --> 00:31:05,590 vil du forstå hva alle av det tullet midler. 662 00:31:05,590 --> 00:31:11,150 Men for nå, bare vet at gjør utløst gjennomføring av en kompilator. 663 00:31:11,150 --> 00:31:13,290 Med andre ord, det finnes en kompilator på min datamaskin 664 00:31:13,290 --> 00:31:14,820 som er forhåndsinstallert på CS50 Appliance 665 00:31:14,820 --> 00:31:16,560 at vi vil overlate til deg i oppgave Set 1. 666 00:31:16,560 --> 00:31:20,990 Og det tok hello.c som input, og produserte tilsynelatende 667 00:31:20,990 --> 00:31:23,040 0'er og 1'ere som utgang. 668 00:31:23,040 --> 00:31:29,410 >> Og som standard hva den gjør er det sparer disse 0'er og 1'ere i en fil som heter hei. 669 00:31:29,410 --> 00:31:33,180 Og selv om denne syntaksen også kunne være nye for deg, rett og slett ved å si prikk 670 00:31:33,180 --> 00:31:37,110 slash hei kommer til å være den midler som jeg kjører dette programmet. 671 00:31:37,110 --> 00:31:40,360 >> For nå og i minst et par uker, nesten alle programmene 672 00:31:40,360 --> 00:31:44,230 vi skriver kommer til å være i svart og hvit tekst vinduer. 673 00:31:44,230 --> 00:31:47,006 Ingen mus, ingen klikking, ingen vinduer, ingen ikoner. 674 00:31:47,006 --> 00:31:49,630 Vi kommer til å holde det enkelt og fokusere på de underliggende ideene 675 00:31:49,630 --> 00:31:52,490 utgangspunktet før vi kommer til noe høyere nivå, for eksempel, 676 00:31:52,490 --> 00:31:56,410 som bryte ut spillet som vi snakket om på første forelesning i forrige uke. 677 00:31:56,410 --> 00:32:00,820 >> Så når jeg trykker Enter her, det er tilsvarende i en tekst bare miljø 678 00:32:00,820 --> 00:32:03,272 å dobbeltklikke på et ikon som heter hei. 679 00:32:03,272 --> 00:32:05,480 Hva forventer du vilje skje når jeg trykker Enter da? 680 00:32:05,480 --> 00:32:07,120 >> PUBLIKUM: Det vil skrive ut "hello world". 681 00:32:07,120 --> 00:32:10,000 >> DAVID J. MALAN: Forhåpentligvis det vil skrive "hello world". 682 00:32:10,000 --> 00:32:11,370 Og faktisk det gjorde. 683 00:32:11,370 --> 00:32:13,690 Nå har det vært noen kryptisk syntaks her. 684 00:32:13,690 --> 00:32:15,950 La oss spole tilbake for bare et øyeblikk og se om vi 685 00:32:15,950 --> 00:32:19,530 kan ikke begynne å dedusere bare ved fiksing og triksing, prøving og feiling, 686 00:32:19,530 --> 00:32:21,130 om hva som skjer her. 687 00:32:21,130 --> 00:32:23,609 Hva om jeg kvitt backslash n? 688 00:32:23,609 --> 00:32:25,650 Nå er noen av dere som har programmert før trolig 689 00:32:25,650 --> 00:32:27,054 vet umiddelbart hva det betyr. 690 00:32:27,054 --> 00:32:29,220 Men for de av dere som har aldri programmert før, 691 00:32:29,220 --> 00:32:34,052 minst tenke deg selv hva som skjer å endre seg når jeg kjøre dette programmet? 692 00:32:34,052 --> 00:32:37,010 Så jeg kommer til å gå ned igjen til min lille sorte og hvite vinduet, som 693 00:32:37,010 --> 00:32:39,290 er vinduet i hvilken Jeg kan kompilere dette. 694 00:32:39,290 --> 00:32:41,130 Jeg kommer til å rekompilere hei. 695 00:32:41,130 --> 00:32:43,520 Vi kommer til å se det samme kryptisk sekvens av kommandoer. 696 00:32:43,520 --> 00:32:45,719 Og jeg kommer til å gjøre dot slash hallo. 697 00:32:45,719 --> 00:32:48,260 Og nå noen, hvis du ville, som aldri har programmert før, 698 00:32:48,260 --> 00:32:49,770 hva som kan være annerledes denne gangen? 699 00:32:49,770 --> 00:32:50,020 Yeah. 700 00:32:50,020 --> 00:32:51,840 >> PUBLIKUM: Det vil ikke stoppe utskrift "hello world". 701 00:32:51,840 --> 00:32:52,660 >> DAVID J. MALAN: Det kommer til-- beklager? 702 00:32:52,660 --> 00:32:54,210 >> PUBLIKUM: Det vil ikke slutte å skrive den? 703 00:32:54,210 --> 00:32:55,810 >> DAVID J. MALAN: Det vil ikke stoppe utskriften "hello world". 704 00:32:55,810 --> 00:32:56,560 Så ikke en dårlig idé. 705 00:32:56,560 --> 00:32:58,633 Andre ideer? 706 00:32:58,633 --> 00:32:59,132 Yeah. 707 00:32:59,132 --> 00:33:00,060 >> PUBLIKUM: Feilmelding? 708 00:33:00,060 --> 00:33:01,750 >> DAVID J. MALAN: Feil melding, OK, kunne være. 709 00:33:01,750 --> 00:33:02,250 Hva mer? 710 00:33:02,250 --> 00:33:05,479 PUBLIKUM: Det kan skrive ut brakett med semikolon også? 711 00:33:05,479 --> 00:33:08,270 DAVID J. MALAN: Kan skrive ut brakett med semikolon også. 712 00:33:08,270 --> 00:33:11,950 Så kanskje det backslash er da noen slags terminous som er viktig. 713 00:33:11,950 --> 00:33:14,860 Noen andre tanker? 714 00:33:14,860 --> 00:33:16,412 >> Så alle gode ideer. 715 00:33:16,412 --> 00:33:18,370 Og faktisk, det kommer å være en feilmelding. 716 00:33:18,370 --> 00:33:20,400 Det er nok mest sannsynlig å være svaret generelt 717 00:33:20,400 --> 00:33:22,420 for de neste ukene når vi lærer å kode her. 718 00:33:22,420 --> 00:33:27,680 >> Men for nå husker at datamaskiner bare gjøre det du ber dem om å gjøre. 719 00:33:27,680 --> 00:33:30,400 Mye som latterlig peanut smør og gelé eksempel. 720 00:33:30,400 --> 00:33:33,860 Våre menneskelige datamaskiner var bare ment til å gjøre hva du fortalte dem om å gjøre. 721 00:33:33,860 --> 00:33:36,250 Så i dette tilfellet, hvis du ikke fortelle datamaskinen 722 00:33:36,250 --> 00:33:41,190 å flytte den blinkende markøren til neste linje, er det ikke kommer til å gjøre det. 723 00:33:41,190 --> 00:33:45,390 Så når jeg kjører dette programmet nå, merker forskjellen. 724 00:33:45,390 --> 00:33:46,900 >> Ser ut som en bug. 725 00:33:46,900 --> 00:33:49,190 Det er en estetisk bug, kanskje. 726 00:33:49,190 --> 00:33:53,310 Men hva er annerledes med denne utgangs versus den siste åpenbart? 727 00:33:53,310 --> 00:33:53,810 Yeah. 728 00:33:53,810 --> 00:33:54,920 >> PUBLIKUM: Det gjorde ikke en ny linje. 729 00:33:54,920 --> 00:33:56,586 >> DAVID J. MALAN: Det gjorde ikke en ny linje. 730 00:33:56,586 --> 00:33:58,740 Nå de av dere som har kanskje gjort nettsider 731 00:33:58,740 --> 00:34:01,910 før, kanskje du vet om BR tag eller avsnittet tag, 732 00:34:01,910 --> 00:34:03,120 veldig lik i ånden. 733 00:34:03,120 --> 00:34:06,680 En nettleser vil ignorere deg inntil du forteller det nøyaktig hva du skal gjøre. 734 00:34:06,680 --> 00:34:10,020 Tilsvarende er et språk som C bare kommer til å gjøre det du ber den om. 735 00:34:10,020 --> 00:34:12,730 >> Så grunnen til at alle disse eksemplene 736 00:34:12,730 --> 00:34:15,350 så langt, har en slags casually hadde denne backslash 737 00:34:15,350 --> 00:34:18,560 der inne, er at midlene der uttrykke deg selv 738 00:34:18,560 --> 00:34:21,380 som en ny linje karakter, så å si. 739 00:34:21,380 --> 00:34:26,219 Og du kan slags sette pris på, kanskje, at dette ville se litt dumt 740 00:34:26,219 --> 00:34:27,070 hvis ingenting annet. 741 00:34:27,070 --> 00:34:29,150 Hvis jeg ønsket en ny linje, bare trykket inn og deretter slag 742 00:34:29,150 --> 00:34:32,219 av slakte koden sånn burde egentlig ikke gni deg den rette veien. 743 00:34:32,219 --> 00:34:33,830 Og selv om du ikke gjør det virkelig bryr seg på dette punktet, 744 00:34:33,830 --> 00:34:35,830 vil du innse at Dette er ikke et særlig 745 00:34:35,830 --> 00:34:37,870 god jakt stykke kode. 746 00:34:37,870 --> 00:34:39,969 >> Og så hva verden besluttet år siden er 747 00:34:39,969 --> 00:34:43,420 at når du ønsker å sette markøren til en ny linje eksplisitt, 748 00:34:43,420 --> 00:34:46,332 du må eksplisitt si ny linje, backslash n. 749 00:34:46,332 --> 00:34:48,040 Og det er noen andre symboler sånn. 750 00:34:48,040 --> 00:34:50,719 Men for nå vil vi bare fokusere på backslash n. 751 00:34:50,719 --> 00:34:53,790 >> Nå la oss gjøre programmet litt mer interessant. 752 00:34:53,790 --> 00:34:59,200 Jeg kommer til å gå videre og denne tid åpner en ny fil. 753 00:34:59,200 --> 00:35:02,520 Jeg kommer til å lagre dette som hallo-1.c. 754 00:35:02,520 --> 00:35:05,540 Og bare for morro skyld, kommer jeg til å gå sette det inn i min Dropbox-mappen. 755 00:35:05,540 --> 00:35:09,030 >> Som du vil se i CS50 dokumentasjon for apparatet, 756 00:35:09,030 --> 00:35:11,210 senere denne uken for Problem Sett 1, vil vi oppmuntre 757 00:35:11,210 --> 00:35:13,230 deg å bruke Dropbox eller noen tilsvarende tjeneste, 758 00:35:13,230 --> 00:35:15,430 fordi da alle dine normens kommer til å bli støttet opp automatisk. 759 00:35:15,430 --> 00:35:17,830 Og så det er derfor jeg har gått inn i denne mappen her. 760 00:35:17,830 --> 00:35:20,230 >> Og nå kommer jeg til å skrive et litt annerledes program. 761 00:35:20,230 --> 00:35:24,740 Inkluderer standard I / O.h, int main annullert. 762 00:35:24,740 --> 00:35:29,660 Og så her printf, hello world, som er nøyaktig det samme som før. 763 00:35:29,660 --> 00:35:32,450 >> Men nå vil jeg skrive ut noe som er litt annerledes. 764 00:35:32,450 --> 00:35:34,800 Jeg ønsker å skrive ut, si: "Hei, David." 765 00:35:34,800 --> 00:35:37,590 Greit, så åpenbart, det skal forhåpentligvis 766 00:35:37,590 --> 00:35:40,360 være slik at hvis jeg rekompilere dette programmet, kjører den, 767 00:35:40,360 --> 00:35:41,840 det kommer til å si "Hei, David." 768 00:35:41,840 --> 00:35:45,160 >> Men hva om jeg ønsker å introdusere denne typen variable, 769 00:35:45,160 --> 00:35:49,240 oppfatningen av en container som kommer å lagre D-a-v-i-d, og det er ikke vanskelig kode 770 00:35:49,240 --> 00:35:50,600 inn i mitt program. 771 00:35:50,600 --> 00:35:53,430 Vel hva om jeg starter gjøre noe som dette? 772 00:35:53,430 --> 00:35:57,120 >> String s, så dette er en variabel. 773 00:35:57,120 --> 00:36:00,250 Hvis du vil ha en streng, a.k.a. et ord eller en setning. 774 00:36:00,250 --> 00:36:03,485 En sekvens av tegn er hva vi i programmering kaller en streng. 775 00:36:03,485 --> 00:36:06,610 Vi skal bare generisk samtale det s, fordi det er en fin enkel navn. 776 00:36:06,610 --> 00:36:08,010 Men jeg kan kalle det noe. 777 00:36:08,010 --> 00:36:12,920 >> Jeg kommer til å si streng s equals quote unquote "David," semikolon. 778 00:36:12,920 --> 00:36:18,330 Og nå vil jeg sette D-a-v-i-d inn i hva jeg er utskrift. 779 00:36:18,330 --> 00:36:23,720 Og før vi så en teaser på skjermen av noen spesiell syntaks 780 00:36:23,720 --> 00:36:26,050 som tillot oss å erstatning i en verdi. 781 00:36:26,050 --> 00:36:29,250 Hva var spesielt symbol noen lysbilder siden? 782 00:36:29,250 --> 00:36:30,040 >> Så prosent. 783 00:36:30,040 --> 00:36:33,830 På den tiden var det prosent d for desimaltall. 784 00:36:33,830 --> 00:36:35,850 Det betyr egentlig ikke synes relevant her. 785 00:36:35,850 --> 00:36:38,650 Det viser seg at det er en annen prosent symbol, 786 00:36:38,650 --> 00:36:42,810 som er prosent s, som står for en plassholder for en streng. 787 00:36:42,810 --> 00:36:49,350 >> Så nå, veldig enkelt, jeg er kommer til å gå gjøre hallo-1, 788 00:36:49,350 --> 00:36:54,210 fordi denne filen heter hallo-1.c, og trykk Enter. 789 00:36:54,210 --> 00:36:56,230 Og jeg skrudd opp. 790 00:36:56,230 --> 00:36:57,394 Hva er det som skjer? 791 00:36:57,394 --> 00:37:00,560 Vel, her er der vi må begynne å setter pris på at vi er i denne kommandoen 792 00:37:00,560 --> 00:37:02,810 linje miljø, denne tekst bare miljø. 793 00:37:02,810 --> 00:37:06,114 Det er ingen klikke på ikoner som mapper akkurat nå. 794 00:37:06,114 --> 00:37:07,280 Og tenke tilbake et øyeblikk siden. 795 00:37:07,280 --> 00:37:10,740 I det som gjorde mappe jeg si Jeg var redde koden min? 796 00:37:10,740 --> 00:37:11,657 Så Dropbox-mappen. 797 00:37:11,657 --> 00:37:12,989 Kunne ha blitt kalt noe. 798 00:37:12,989 --> 00:37:14,530 Men det skjer for å bli kalt Dropbox. 799 00:37:14,530 --> 00:37:18,380 Så jeg liksom trenger å dobbeltklikke på at Dropbox-mappen for å få 800 00:37:18,380 --> 00:37:21,657 inn i det og få på min kode som kalles hallo-1.c. 801 00:37:21,657 --> 00:37:24,490 Faktisk, la meg gå videre og minimere dette vinduet for bare et øyeblikk. 802 00:37:24,490 --> 00:37:27,560 Akkurat som Windows og Mac OS, det er mapper i Linux. 803 00:37:27,560 --> 00:37:29,410 Det er mapper i CS50 Appliance. 804 00:37:29,410 --> 00:37:32,380 Det er akkurat nå vi avgrense oss til denne teksten miljøet. 805 00:37:32,380 --> 00:37:34,700 >> Men hvis jeg dobbeltklikker på Dropbox, merke det 806 00:37:34,700 --> 00:37:37,210 er filen som jeg ønsker å kompilere. 807 00:37:37,210 --> 00:37:41,430 Men jeg trenger svart og hvitt terminalvindu, så å si. 808 00:37:41,430 --> 00:37:45,750 Men jeg trenger derfor å flytte i den mappen eller katalogen. 809 00:37:45,750 --> 00:37:48,290 Så litt uforståelige, men Du blir vant til dette også. 810 00:37:48,290 --> 00:37:50,430 >> I en verden av Linux, som igjen er drifts 811 00:37:50,430 --> 00:37:54,860 systemet vi kjører innsiden av CS50 Apparatet, det er en kommando som heter CD. 812 00:37:54,860 --> 00:37:58,310 Som betyr at jeg kan gjøre CD, mellomrom, Dropbox. 813 00:37:58,310 --> 00:37:59,900 CD, endre katalogen. 814 00:37:59,900 --> 00:38:00,400 Høyre. 815 00:38:00,400 --> 00:38:02,890 Tilbake i dag da folk var inventing datamaskiner og drift 816 00:38:02,890 --> 00:38:05,806 systemer som dette, ønsket de å skriver færrest tastetrykk mulig. 817 00:38:05,806 --> 00:38:08,760 Så den enkleste måten å si Endre katalog var CD. 818 00:38:08,760 --> 00:38:13,910 >> Så hvis jeg treffer CD, plass Dropbox, legge merke til hva som er endret her. 819 00:38:13,910 --> 00:38:16,480 Innsiden av parenteser apparatet er snill 820 00:38:16,480 --> 00:38:19,360 av humoring meg og minner meg hvor jeg er. 821 00:38:19,360 --> 00:38:21,480 Så den åpne mappen er Dropbox. 822 00:38:21,480 --> 00:38:24,950 Hvis jeg nå skriver ls for liste, igjen fyndig, 823 00:38:24,950 --> 00:38:27,540 fordi folk ikke ønsker å skrive tilbake i dag l-i-s-t. 824 00:38:27,540 --> 00:38:29,300 Så de i stedet gjort det Ls. 825 00:38:29,300 --> 00:38:30,110 >> Enter. 826 00:38:30,110 --> 00:38:35,740 Merker jeg ser to ting, hallo-1.c, og så denne kryptiske ting, kilde 1m. 827 00:38:35,740 --> 00:38:38,310 Det er bare min måte å si kildekoden for uke 1 mandag. 828 00:38:38,310 --> 00:38:42,020 Det er en mappe jeg lastet ned fra CS50 hjemmeside som jeg gjorde tidligere i dag 829 00:38:42,020 --> 00:38:43,990 og bare sette den inn i apparatet på forhånd. 830 00:38:43,990 --> 00:38:47,550 >> Men for nå det eneste vi bryr seg om er å lage dette programmet. 831 00:38:47,550 --> 00:38:50,440 Så når jeg skriver at hallo-1, Enter. 832 00:38:50,440 --> 00:38:51,320 Pokker. 833 00:38:51,320 --> 00:38:53,060 Noe gikk galt. 834 00:38:53,060 --> 00:38:54,580 Så la oss erte dette fra hverandre. 835 00:38:54,580 --> 00:38:58,489 Og dessverre er dette hvor ting bli litt stressende i starten, 836 00:38:58,489 --> 00:39:00,280 i hvert fall hvis du har aldri programmert før. 837 00:39:00,280 --> 00:39:00,980 >> Min gud. 838 00:39:00,980 --> 00:39:04,990 Jeg skrev en to linjers program og Jeg har fire linjer med feil. 839 00:39:04,990 --> 00:39:07,180 Så hva er det som skjer her. 840 00:39:07,180 --> 00:39:11,370 Først og fremst alltid bla tilbake opp og finne den første feilmeldingen, 841 00:39:11,370 --> 00:39:15,730 fordi ofte kompilatorer bare bli forvirret av hva du og jeg gjør. 842 00:39:15,730 --> 00:39:17,000 Kompilatorer er ganske dum. 843 00:39:17,000 --> 00:39:18,360 De vil bare gjøre det du forteller dem å gjøre. 844 00:39:18,360 --> 00:39:21,484 Og hvis du forvirre dem, de er bare kommer til å slags kaste opp hendene 845 00:39:21,484 --> 00:39:25,010 og kanskje kaste flere feilmeldinger enn er faktisk relevant. 846 00:39:25,010 --> 00:39:26,380 >> Så la oss se på den første. 847 00:39:26,380 --> 00:39:27,540 Super kryptisk i begynnelsen. 848 00:39:27,540 --> 00:39:31,050 Men legg merke til, her er navnet på fil der jeg skrudd opp tilsynelatende. 849 00:39:31,050 --> 00:39:36,570 Colon 5, tykktarm 5 betyr bare på linje 5 på femte tegn. 850 00:39:36,570 --> 00:39:39,760 Så femte kolonne av tegn, om du vil, feil. 851 00:39:39,760 --> 00:39:41,870 Bruk av svart identifikator streng. 852 00:39:41,870 --> 00:39:43,120 Mente du standard n? 853 00:39:43,120 --> 00:39:44,850 >> Nei, jeg mente streng. 854 00:39:44,850 --> 00:39:47,640 Og da er det slags kopiere og lime inn 855 00:39:47,640 --> 00:39:50,700 hva jeg skrev å virkelig trekke min hensyn til hvor jeg skrudd opp. 856 00:39:50,700 --> 00:39:54,260 Så annen grunn C, eller i det minste kompilatoren 857 00:39:54,260 --> 00:39:56,470 ikke forstår ordet streng. 858 00:39:56,470 --> 00:39:57,890 Og det er fordi vi har gjort det opp. 859 00:39:57,890 --> 00:40:01,440 Så streng eksisterer ikke i C. Hva CS50 gjør, 860 00:40:01,440 --> 00:40:03,380 for de første ukene bare av klassen, 861 00:40:03,380 --> 00:40:05,700 er vi gi noen opplæring hjulene, så å si. 862 00:40:05,700 --> 00:40:11,160 Og vi sette disse trening hjul innsiden av en spesiell fil som heter CS50.h. 863 00:40:11,160 --> 00:40:14,970 >> Så dette er den andre av to fil navn som tilsynelatende slutter på dot h. 864 00:40:14,970 --> 00:40:16,300 La oss spole tilbake. 865 00:40:16,300 --> 00:40:19,360 Printf er en uttalelse eller funksjon som tilsynelatende skriver noe 866 00:40:19,360 --> 00:40:20,580 til skjermen. 867 00:40:20,580 --> 00:40:23,470 Men du ser ikke meg implementere printf, ikke sant. 868 00:40:23,470 --> 00:40:26,360 Someone år siden implementert printf. 869 00:40:26,360 --> 00:40:30,420 I hvilken fil du ville satse han eller hun sette gjennomføringen 870 00:40:30,420 --> 00:40:34,270 for printf, koden for printf? 871 00:40:34,270 --> 00:40:36,860 >> I en fil kalt standard I / O.h. 872 00:40:36,860 --> 00:40:39,930 Faktisk er det sannsynligvis i to filer, standard I / O.h, 873 00:40:39,930 --> 00:40:42,650 som står for header filen, og standard I / O.c, 874 00:40:42,650 --> 00:40:44,060 som står for C kildekoden. 875 00:40:44,060 --> 00:40:48,220 Så han eller hun for noen år siden plopped koden som de skrev i denne filen 876 00:40:48,220 --> 00:40:51,240 slik at folk som oss år senere kan inkludere det, 877 00:40:51,240 --> 00:40:53,040 så å si, i våre egne programmer. 878 00:40:53,040 --> 00:40:56,320 >> Og ja, det er hva firkanttegn etterfulgt av ordet omfatter gjør. 879 00:40:56,320 --> 00:41:00,250 Det ser ut på den lokale harddisken, finner filen som heter standard I / O.h, 880 00:41:00,250 --> 00:41:03,840 og deretter effektivt kopier og limer det inne i min egen fil. 881 00:41:03,840 --> 00:41:07,210 Så nå mitt program vet hvordan du skriver ut til skjermen. 882 00:41:07,210 --> 00:41:11,120 >> Så ved den logikken, der er streng definert? 883 00:41:11,120 --> 00:41:12,260 >> PUBLIKUM: 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 Og ja, det er hva vi, kjernen ansatte, har gjort. 886 00:41:15,540 --> 00:41:19,590 Vi har oppfunnet noen datatyper, så å si, som en streng, 887 00:41:19,590 --> 00:41:22,370 i tillegg til de du får gratis, som en int. 888 00:41:22,370 --> 00:41:26,010 Og vi vil se andre som en char for en karakter og noen flere. 889 00:41:26,010 --> 00:41:30,670 Innsiden av CS50.h tilsynelatende er i det minste noen omtale av strengen. 890 00:41:30,670 --> 00:41:34,980 >> Så nå la meg gå videre og reprise make hallo-1. 891 00:41:34,980 --> 00:41:37,100 Jeg skal zoome inn igjen og krysse fingrene. 892 00:41:37,100 --> 00:41:41,370 Nå etter å ha gjort en endrer jeg fikset det meste. 893 00:41:41,370 --> 00:41:42,100 Men damn it. 894 00:41:42,100 --> 00:41:44,290 Flere prosentene enn data argumenter. 895 00:41:44,290 --> 00:41:45,980 Hva har jeg gjort galt denne gangen? 896 00:41:45,980 --> 00:41:47,420 >> Så det er fortsatt ganske kryptisk. 897 00:41:47,420 --> 00:41:51,560 Men denne feilen er på linje 7 og karakter 21. 898 00:41:51,560 --> 00:41:53,880 Så la oss gå se opp her. 899 00:41:53,880 --> 00:41:55,350 Det er litt subtil. 900 00:41:55,350 --> 00:41:59,167 Men hvis du tenker på hva de grunnleggende ideer her er, 901 00:41:59,167 --> 00:42:00,500 kanskje vi kan erte dette fra hverandre. 902 00:42:00,500 --> 00:42:02,300 >> Så printf er navnet på funksjonen. 903 00:42:02,300 --> 00:42:04,960 Parentes, så langt, er akkurat som hva vi legger rundt 904 00:42:04,960 --> 00:42:07,005 ting vi passerer som input til en funksjon. 905 00:42:07,005 --> 00:42:08,921 Greit, bare en vilkårlig menneskelig konvensjonen. 906 00:42:08,921 --> 00:42:09,919 Bruke parenteser. 907 00:42:09,919 --> 00:42:12,460 Innsiden av disse parentes vi har vært å sette anførselstegn, 908 00:42:12,460 --> 00:42:14,810 og deretter en streng som "hello world". 909 00:42:14,810 --> 00:42:18,160 >> Men i det tidligere eksempel svært kort gjorde vi ser på med Scratch. 910 00:42:18,160 --> 00:42:22,590 Og vi hadde prosent d, hva annet var inne i disse parentes 911 00:42:22,590 --> 00:42:23,730 at jeg ringte ut verbalt? 912 00:42:23,730 --> 00:42:24,230 Yeah. 913 00:42:24,230 --> 00:42:28,166 >> PUBLIKUM: Så det er hva du tar [Uhørbart] innenfra [uhørbart] 914 00:42:28,166 --> 00:42:30,200 hva disse [uhørbart]? 915 00:42:30,200 --> 00:42:31,200 DAVID J. MALAN: Nettopp. 916 00:42:31,200 --> 00:42:32,700 Så vi hadde prosent d. 917 00:42:32,700 --> 00:42:36,620 Men da vi hadde nær sitat, komma, teller. 918 00:42:36,620 --> 00:42:37,120 Høyre. 919 00:42:37,120 --> 00:42:40,680 Vi spesifisert hva vi ønsker å gjøre som plassholder. 920 00:42:40,680 --> 00:42:44,621 Så det jeg skal gjøre her er komma, hva vil du at jeg skal sette? 921 00:42:44,621 --> 00:42:45,120 PUBLIKUM: S. 922 00:42:45,120 --> 00:42:46,828 DAVID J. MALAN: S, fordi s i dette tilfellet 923 00:42:46,828 --> 00:42:48,700 er navnet på lagringsbeholderen. 924 00:42:48,700 --> 00:42:50,180 Det er navnet på den glassbolle. 925 00:42:50,180 --> 00:42:53,610 Mens før det var telleren i at enkel Scratch eksempel har vi sett på. 926 00:42:53,610 --> 00:42:56,630 Så nå har gjort to endringer, la meg zoome inn 927 00:42:56,630 --> 00:42:59,800 og prøve en gang til kompilere dette programmet. 928 00:42:59,800 --> 00:43:01,596 >> Nå ser jeg at kryptisk linje. 929 00:43:01,596 --> 00:43:03,470 Men det er faktisk den navn av kompilatoren. 930 00:43:03,470 --> 00:43:04,886 Clang er navnet på kompilatoren. 931 00:43:04,886 --> 00:43:07,100 Gjør er bare å spare meg hodepine av noen gang 932 00:43:07,100 --> 00:43:09,830 å skrive så lang gal kommando ut. 933 00:43:09,830 --> 00:43:14,900 Så nå hvis ikke jeg dot slash hallo-1, Jeg burde se "hallo, David." 934 00:43:14,900 --> 00:43:16,450 >> Ganske uimponerende, skjønt, ikke sant? 935 00:43:16,450 --> 00:43:18,158 Vi kunne ha gjort dette mye enklere 936 00:43:18,158 --> 00:43:20,940 uten å snakke om variabler og CS50.h og alt det. 937 00:43:20,940 --> 00:43:23,080 Så la oss gjøre det en litt mer interessant. 938 00:43:23,080 --> 00:43:31,010 >> I tillegg til CS50.h, å ha ting som streng 939 00:43:31,010 --> 00:43:34,550 erklærte den CS50 biblioteket har også noen funksjoner. 940 00:43:34,550 --> 00:43:38,520 Så akkurat som år siden, skrev noen printf og legg den i standard I / O.h 941 00:43:38,520 --> 00:43:39,530 og en annen fil. 942 00:43:39,530 --> 00:43:44,010 >> Vi, CS50 ansatte, skrev en funksjon kalt getchar, GetDouble, GetFloat, 943 00:43:44,010 --> 00:43:47,610 GetInt, GetLongLong, GetString, og vi putte dem i en fil 944 00:43:47,610 --> 00:43:49,890 kalt CS50.h og CS50.c. 945 00:43:49,890 --> 00:43:51,880 Og vi setter dem inne av CS50 Appliance. 946 00:43:51,880 --> 00:43:53,880 Og folk kan også laste dem ned på nettet hvis de 947 00:43:53,880 --> 00:43:55,880 ønsker å sette dem på deres egne datamaskiner også. 948 00:43:55,880 --> 00:44:00,880 Som er å si at vi har skapt funksjoner som får input fra brukeren. 949 00:44:00,880 --> 00:44:02,930 Jeg vet ikke hva alle av disse datatypene. 950 00:44:02,930 --> 00:44:06,490 GetInt er slags grei, som få et heltall eller annen måte fra brukeren. 951 00:44:06,490 --> 00:44:09,980 Og GetString er sannsynligvis like get et ord eller en setning fra brukeren. 952 00:44:09,980 --> 00:44:11,770 >> Så la oss fokusere på det. 953 00:44:11,770 --> 00:44:14,710 Og jeg kommer til å gå tilbake til apparatet og jeg kommer til å gå videre 954 00:44:14,710 --> 00:44:20,790 og lagre filen som, la oss kalle det hallo-2.c som min andre versjonen. 955 00:44:20,790 --> 00:44:23,030 Og la oss gjøre et par endringer. 956 00:44:23,030 --> 00:44:25,800 >> Denne gangen i stedet for hardt koding David, som 957 00:44:25,800 --> 00:44:29,120 gjør en utrolig konsekvent men uimponerende program, 958 00:44:29,120 --> 00:44:32,640 hva om jeg i stedet gjøre GetString? 959 00:44:32,640 --> 00:44:35,660 Nå merker GetString har en åpen parentes, 960 00:44:35,660 --> 00:44:38,500 lukket parentes, fordi det trenger ikke noen innspill. 961 00:44:38,500 --> 00:44:40,850 Det er bare kommer til å gå får en streng fra brukeren. 962 00:44:40,850 --> 00:44:42,460 >> Og nå et ord på annen syntaks. 963 00:44:42,460 --> 00:44:45,439 Semikolon bare avslutte en linje med kode. 964 00:44:45,439 --> 00:44:46,730 Du trenger ikke dem overalt. 965 00:44:46,730 --> 00:44:48,896 Men som bare betyr at jeg er ferdig med denne linjen med kode. 966 00:44:48,896 --> 00:44:51,080 La meg flytte til en annen uttalelse eller funksjon. 967 00:44:51,080 --> 00:44:53,010 String erklærer en variabel. 968 00:44:53,010 --> 00:44:55,920 String er som å si gi meg en bolle, takk. 969 00:44:55,920 --> 00:44:57,940 Og la meg si en streng i den. 970 00:44:57,940 --> 00:44:59,430 >> Og nå likhetstegnet. 971 00:44:59,430 --> 00:45:03,510 Hva er likhetstegnet i hovedsak tilsvarende? 972 00:45:03,510 --> 00:45:04,500 >> PUBLIKUM: Tildel. 973 00:45:04,500 --> 00:45:06,190 >> DAVID J. MALAN: Yeah, tildele en verdi. 974 00:45:06,190 --> 00:45:09,872 Så hvis jeg for eksempel samtale denne funksjonen GetString, 975 00:45:09,872 --> 00:45:12,830 og vi vil se i et øyeblikk som er kommer til å be brukeren om en streng. 976 00:45:12,830 --> 00:45:17,810 Dette er som å la meg deretter skrive D-a-v-i-d på et stykke papir. 977 00:45:17,810 --> 00:45:21,060 Og når jeg sier streng s tilsvarer GetString, 978 00:45:21,060 --> 00:45:24,140 lik betyr egentlig ikke lik i C programmering. 979 00:45:24,140 --> 00:45:27,880 Det betyr tilordne fra høyre side til den venstre side. 980 00:45:27,880 --> 00:45:29,510 >> Så jeg har fått en streng. 981 00:45:29,510 --> 00:45:32,785 Og likhetstegnet betyr sette det i oppbevaringsbeholderen kalt s. 982 00:45:32,785 --> 00:45:36,730 Og så sende denne ut til printf å faktisk gjøre sin ting. 983 00:45:36,730 --> 00:45:39,790 >> Så sluttresultatet deretter kommer å se litt annerledes ut. 984 00:45:39,790 --> 00:45:40,840 La oss gjør hallo-2. 985 00:45:40,840 --> 00:45:43,940 986 00:45:43,940 --> 00:45:45,260 Enten kunne fungere. 987 00:45:45,260 --> 00:45:46,450 Du følger med. 988 00:45:46,450 --> 00:45:47,940 Gjør hallo-2 virket. 989 00:45:47,940 --> 00:45:52,640 Dot slash hallo-2, Enter. 990 00:45:52,640 --> 00:45:54,620 >> I synes å ha en uendelig løkke eller noe. 991 00:45:54,620 --> 00:45:55,453 Ingenting skjer. 992 00:45:55,453 --> 00:45:56,134 Hvorfor? 993 00:45:56,134 --> 00:45:57,805 >> PUBLIKUM: Det gjør en uendelig loop. 994 00:45:57,805 --> 00:45:59,430 DAVID J. MALAN: Det er en uendelig løkke. 995 00:45:59,430 --> 00:46:02,710 Det er slags venter for meg å faktisk gi det med noen innspill. 996 00:46:02,710 --> 00:46:05,800 Så la meg gå videre og skriv i David, og trykk Enter. 997 00:46:05,800 --> 00:46:07,230 Og nå står det "hallo, David." 998 00:46:07,230 --> 00:46:09,040 Hvis jeg kjøre den på nytt. 999 00:46:09,040 --> 00:46:11,530 La oss skrive inn Rob, "hallo, Rob." 1000 00:46:11,530 --> 00:46:13,900 >> Nå er dette den verste brukergrensesnitt noensinne. 1001 00:46:13,900 --> 00:46:16,110 Brukeren er tydeligvis skal vite hva de skal gjøre. 1002 00:46:16,110 --> 00:46:17,120 Men uansett. 1003 00:46:17,120 --> 00:46:19,570 Ved hjelp av disse samme bygning blokker akkurat som i Scratch, 1004 00:46:19,570 --> 00:46:24,980 vi kan løse det problemet, og si noe som ditt navn please, tykktarm, 1005 00:46:24,980 --> 00:46:27,820 plass, lukket sitat, nær parentes, semikolon. 1006 00:46:27,820 --> 00:46:30,680 Så mye igjen dumhet med syntaksen. 1007 00:46:30,680 --> 00:46:34,040 >> Men merker jeg har nettopp lagt en puslespillbiten over dette 1008 00:46:34,040 --> 00:46:35,280 og over denne. 1009 00:46:35,280 --> 00:46:38,870 Så nå hvis jeg kjøre dette, hallo-2, Enter. 1010 00:46:38,870 --> 00:46:41,180 Vent et minutt. 1011 00:46:41,180 --> 00:46:41,830 Hva er galt? 1012 00:46:41,830 --> 00:46:43,570 Det er ikke oppfører seg annerledes. 1013 00:46:43,570 --> 00:46:44,200 Yeah. 1014 00:46:44,200 --> 00:46:46,010 >> PUBLIKUM: Du ble ikke kjørt gjøre igjen. 1015 00:46:46,010 --> 00:46:47,968 >> DAVID J. MALAN: Jeg gjorde ikke kjøre gjøre igjen, ikke sant. 1016 00:46:47,968 --> 00:46:49,430 Så jeg har forandret meg kildekoden. 1017 00:46:49,430 --> 00:46:50,638 Men igjen, det er som flyter. 1018 00:46:50,638 --> 00:46:54,530 Kildekode gjennom kompilatoren gir du ny objektkode, eller 0'er og 1'ere. 1019 00:46:54,530 --> 00:47:00,209 Så jeg må faktisk reprise make hallo-2 Enter. 1020 00:47:00,209 --> 00:47:01,750 OK, synes noe å ha skjedd. 1021 00:47:01,750 --> 00:47:04,220 Dot slash hallo-2. 1022 00:47:04,220 --> 00:47:05,390 Ditt navn takk. 1023 00:47:05,390 --> 00:47:09,990 Og for å være klart nå, hvorfor er markøren på samme linje? 1024 00:47:09,990 --> 00:47:10,490 Nettopp. 1025 00:47:10,490 --> 00:47:13,020 Jeg la ikke backslash n her oppe i min kode. 1026 00:47:13,020 --> 00:47:16,110 Så nå kan jeg skrive noe sånt Daven, Enter. 1027 00:47:16,110 --> 00:47:18,710 Jeg kan kjøre den på nytt, og skriv noe sånt som Gabe, Enter, 1028 00:47:18,710 --> 00:47:22,250 og vi får et annet program igjen og igjen og igjen. 1029 00:47:22,250 --> 00:47:28,940 >> Nå til slutt skal vi trenger å bruke noen forskjellige evner. 1030 00:47:28,940 --> 00:47:32,860 Vi trenger å innføre slutt noen forhold til å gjøre ting betinget. 1031 00:47:32,860 --> 00:47:35,550 Kanskje looper slik at vi kan gjøre ting igjen og igjen. 1032 00:47:35,550 --> 00:47:38,220 >> Kanskje det ville være fint om vi kunne gjennomføre våre egne funksjoner, 1033 00:47:38,220 --> 00:47:41,355 at vi kunne gjennomføre vår egen printf eller vår egen versjon av GetString 1034 00:47:41,355 --> 00:47:45,870 og GetFlow, fordi slutt selv ved hjelp av denne kommandolinjen miljøet 1035 00:47:45,870 --> 00:47:49,780 kan vi gjøre selv de mest visuelt interessant ting. 1036 00:47:49,780 --> 00:47:51,950 >> Faktisk i konklusjonen la meg gjøre dette. 1037 00:47:51,950 --> 00:47:54,020 Jeg kommer til å gå videre og lukke disse vinduene 1038 00:47:54,020 --> 00:47:57,400 og åpne dette ikonet her, som er bare en større 1039 00:47:57,400 --> 00:48:00,020 versjon av det innebygde terminalvindu. 1040 00:48:00,020 --> 00:48:02,329 Så Gedit har ikke bare stedet for min kode, 1041 00:48:02,329 --> 00:48:05,620 men også en innebygd terminalvindu, den svart og hvitt vindu hvor jeg kan kjøre 1042 00:48:05,620 --> 00:48:06,230 kommandoer. 1043 00:48:06,230 --> 00:48:08,600 >> Jeg skjedd bare å åpne en større versjon av denne. 1044 00:48:08,600 --> 00:48:11,170 Og nå kommer jeg til å gå inn mappen som jeg allerede har 1045 00:48:11,170 --> 00:48:13,150 satt på forhånd på kurset hjemmeside. 1046 00:48:13,150 --> 00:48:16,720 Og jeg kommer til å gå videre og åpne en fil som heter thadgavin.c, 1047 00:48:16,720 --> 00:48:18,710 som ble skrevet av noen andre. 1048 00:48:18,710 --> 00:48:21,220 >> Og hvis vi ser på dette, dette er ikke hva slags kode 1049 00:48:21,220 --> 00:48:24,370 vi skal skrive siden målet med denne koden 1050 00:48:24,370 --> 00:48:28,450 var å skrive den peneste ser kode som han eller hun kunne, 1051 00:48:28,450 --> 00:48:31,290 uavhengig av hvorvidt et annet menneske kan noensinne 1052 00:48:31,290 --> 00:48:33,660 forstå denne koden. 1053 00:48:33,660 --> 00:48:37,050 >> Faktisk, hvert år er det er det som er kalt en maskeres C konkurranse, som 1054 00:48:37,050 --> 00:48:39,570 er for ekte nerder som skriver kode som ingen andre kan lese, 1055 00:48:39,570 --> 00:48:42,050 men det gjør noe heller veldig enkelt eller virkelig fantastisk. 1056 00:48:42,050 --> 00:48:43,890 Og vi trodde vi skulle konkludere med dette utseende 1057 00:48:43,890 --> 00:48:48,300 på noe som er ganske utrolig du kanskje har sett en gang før. 1058 00:48:48,300 --> 00:48:52,650 Men vi vil ende på dette notat, dot slash, thadgavin. 1059 00:48:52,650 --> 00:48:53,860 Dette er da hva som venter. 1060 00:48:53,860 --> 00:48:57,140 1061 00:48:57,140 --> 00:48:58,500 >> Det er det for CS50. 1062 00:48:58,500 --> 00:48:59,935 Vi vil se deg på onsdag. 1063 00:48:59,935 --> 00:49:04,284 1064 00:49:04,284 --> 00:49:10,016 >> [Musikk spilles] 1065 00:49:10,016 --> 00:53:31,883