1 00:00:00,000 --> 00:00:11,736 2 00:00:11,736 --> 00:00:16,626 >> [VIDEO PLAYBACK] 3 00:00:16,626 --> 00:00:19,410 >> -En Triumf av matematisk og mekaniske ferdigheter 4 00:00:19,410 --> 00:00:23,270 dette er flott ny automatisk kalkulator ved Harvard University. 5 00:00:23,270 --> 00:00:27,140 Intrikate problemer i matematikk gjennom maskinen i kodet form 6 00:00:27,140 --> 00:00:31,710 på båndet blir nøyaktig løst i en minutt brøkdel av den tiden som kreves 7 00:00:31,710 --> 00:00:32,819 for menneskelig beregning. 8 00:00:32,819 --> 00:00:44,280 9 00:00:44,280 --> 00:00:48,220 Designet for å ekspedere alle former for matematisk og vitenskapelig forskning, 10 00:00:48,220 --> 00:00:53,840 den gigantiske mekaniske hjernen vil arbeide for United States Navy før krigens slutt. 11 00:00:53,840 --> 00:01:03,620 12 00:01:03,620 --> 00:01:06,570 >> [END PLAYBACK] 13 00:01:06,570 --> 00:01:08,590 >> DAVID J. MALAN: Dette er CS50. 14 00:01:08,590 --> 00:01:10,590 Den siste var en magisk sted, men hvis du noen gang 15 00:01:10,590 --> 00:01:13,366 lurte på hva som enheten er i Harvard Science Center, 16 00:01:13,366 --> 00:01:16,150 det er faktisk en del av Harvard Mark I, og det er 17 00:01:16,150 --> 00:01:18,710 utstilt der nå for de siste mange år. 18 00:01:18,710 --> 00:01:20,590 Og hva du vil se innebygd i Oppgavesettet 19 00:01:20,590 --> 00:01:24,416 en er en titt bak kulissene på hva den enheten gjorde, og gjør, 20 00:01:24,416 --> 00:01:27,540 fra professor Harry Lewis, som er i datavitenskapsavdelingen her. 21 00:01:27,540 --> 00:01:29,440 Så mer på det om en liten bit. 22 00:01:29,440 --> 00:01:33,990 >> Men i dag begynner vi å overgang fra forrige uke til denne, 23 00:01:33,990 --> 00:01:37,290 og vi vil bringe omtale av ett bilde her 24 00:01:37,290 --> 00:01:38,630 det er faktisk ganske kjent. 25 00:01:38,630 --> 00:01:42,270 Vet noen hva dette her er på skjermen? 26 00:01:42,270 --> 00:01:43,880 I hvert fall ifølge myten. 27 00:01:43,880 --> 00:01:44,837 Yeah. 28 00:01:44,837 --> 00:01:45,920 PUBLIKUM: Det første viruset. 29 00:01:45,920 --> 00:01:49,570 DAVID J. MALAN: Så det var visstnok den aller første faktiske feil i en datamaskin. 30 00:01:49,570 --> 00:01:52,490 Nå i realiteten ordet bug, for en feil i et program, 31 00:01:52,490 --> 00:01:55,250 har vært med oss ​​i noen tid i den fysiske verden, 32 00:01:55,250 --> 00:01:58,190 og dette var en av de første dokumentert ganger hvor noen faktisk 33 00:01:58,190 --> 00:02:02,280 plukket en stor møll ut av Mark II datamaskin, sette den i bindemiddelet, 34 00:02:02,280 --> 00:02:05,006 og da spilte det som den første kjente bug 35 00:02:05,006 --> 00:02:06,630 å har faktisk blitt funnet fysisk. 36 00:02:06,630 --> 00:02:10,104 Så dermed ble det inngått som i dagens lore. 37 00:02:10,104 --> 00:02:12,020 Alt fra forrige uke er tilgjengelig på nettet. 38 00:02:12,020 --> 00:02:14,840 I spesielle ressurser som kanskje du ikke nødvendigvis legger merke til, spesielt 39 00:02:14,840 --> 00:02:15,881 Hvis kommer her i person. 40 00:02:15,881 --> 00:02:20,230 Så en av de pedagogiske fellows hver år gjør en kanonisk sett av notater, 41 00:02:20,230 --> 00:02:22,010 så du trenger ikke holde hodet ned, prøver 42 00:02:22,010 --> 00:02:24,410 å transkribere de fleste noe som kan skje her i klassen. 43 00:02:24,410 --> 00:02:25,940 Så skjønner at de såkalt [? Scribd?] Notater 44 00:02:25,940 --> 00:02:29,350 er online, absolutt lysbildene og kildekode som vi bruker i undervisningen. 45 00:02:29,350 --> 00:02:31,436 Vi gjør fulltekst transkripsjoner også tilgjengelig. 46 00:02:31,436 --> 00:02:34,310 Så hvis du vagt husker noen sikt, og ønsker å slå det opp litt 47 00:02:34,310 --> 00:02:37,280 lettere, skjønner at alt av det er søkbare på nettet. 48 00:02:37,280 --> 00:02:38,930 Samt walkthroughs også. 49 00:02:38,930 --> 00:02:42,710 Ja, i dag begynner vi å se på et lavere nivå programmeringsspråk, 50 00:02:42,710 --> 00:02:45,290 snart å bli kjent med oss som C, og det er veldig lett 51 00:02:45,290 --> 00:02:48,820 å liksom gå seg vill etter bare noen få øyeblikkene tid, og deretter sortere av undring 52 00:02:48,820 --> 00:02:52,370 hvordan vi faktisk fikk til noe mer komplekse eksempel fra de enkleste. 53 00:02:52,370 --> 00:02:54,975 Og så innser vi vil kirsebær plukke i timene noen 54 00:02:54,975 --> 00:02:57,850 av representative eksempler, men innse at så mye mer er også 55 00:02:57,850 --> 00:03:01,140 tilgjengelig på nettet, slik at du kan jobbe gjennom det i ditt eget tempo, 56 00:03:01,140 --> 00:03:02,950 men du er mest komfortabel. 57 00:03:02,950 --> 00:03:05,200 >> Men vi slapp med programmer som var nettopp dette. 58 00:03:05,200 --> 00:03:09,690 Så jeg klikker på den grønne flagg, og hva betyr dette programmet gjøre? 59 00:03:09,690 --> 00:03:10,710 Sier, hallo, verden. 60 00:03:10,710 --> 00:03:13,180 Det gjør katten si hallo i sin lille verden 61 00:03:13,180 --> 00:03:15,990 på øverste venstre side av Scratch brukergrensesnitt. 62 00:03:15,990 --> 00:03:18,810 Men vi begynte å introdusere noen terminologi forrige uke. 63 00:03:18,810 --> 00:03:23,614 Og så, ting som dette vi kalte det? 64 00:03:23,614 --> 00:03:25,280 Hva som kan være den generelle termen for dette? 65 00:03:25,280 --> 00:03:26,266 Yeah. 66 00:03:26,266 --> 00:03:28,210 En metode eller en uttalelse. 67 00:03:28,210 --> 00:03:29,280 Jada, det er en handling. 68 00:03:29,280 --> 00:03:30,140 Gjøre dette. 69 00:03:30,140 --> 00:03:32,400 Og likevel var det andre former til scratch, 70 00:03:32,400 --> 00:03:35,360 foruten disse såkalte uttalelse, var de også 71 00:03:35,360 --> 00:03:38,221 ting som dette, som vi kalte det? 72 00:03:38,221 --> 00:03:38,720 Yeah. 73 00:03:38,720 --> 00:03:39,634 Så en sløyfe. 74 00:03:39,634 --> 00:03:42,050 Og i dette tilfelle denne tingen gjentas, selvsagt, 10 ganger. 75 00:03:42,050 --> 00:03:43,040 Det er en evig blokk. 76 00:03:43,040 --> 00:03:44,164 Det er et par andre. 77 00:03:44,164 --> 00:03:48,309 Og i dag skal vi se hvordan du oversette dette til en mer moderne verden, 78 00:03:48,309 --> 00:03:50,850 om du vil, selv om det er kommer til å vises ved første øyekast 79 00:03:50,850 --> 00:03:52,024 å være mye mer uforståelige. 80 00:03:52,024 --> 00:03:53,190 Men de var faktisk looper. 81 00:03:53,190 --> 00:03:56,182 Og så har vi ting som denne, som hadde denne form, 82 00:03:56,182 --> 00:03:57,515 og i hovedsak spørsmål. 83 00:03:57,515 --> 00:03:58,890 Og vi henvist til disse som hva? 84 00:03:58,890 --> 00:03:59,762 >> PUBLIKUM: boolsk uttrykk. 85 00:03:59,762 --> 00:04:00,320 >> DAVID J. MALAN: Yeah. 86 00:04:00,320 --> 00:04:01,340 Boolsk uttrykk. 87 00:04:01,340 --> 00:04:04,502 Noe som er enten sann eller usant, ja eller nei, ett eller null, 88 00:04:04,502 --> 00:04:05,960 men du ønsker å se i verden. 89 00:04:05,960 --> 00:04:08,335 Men vi kalte dem boolsk uttrykk, og vi plugge dem 90 00:04:08,335 --> 00:04:09,900 inn i forhold, eller grener. 91 00:04:09,900 --> 00:04:12,170 Og i en verden av Scratch, alt pent 92 00:04:12,170 --> 00:04:15,460 sperrer i form av sin form, om det er logisk fornuftig å gjøre det, 93 00:04:15,460 --> 00:04:18,490 men du trenger ikke å stoppe på bare gjøre én ting betinget, 94 00:04:18,490 --> 00:04:20,450 du kan ha en ordspråklig veiskille 95 00:04:20,450 --> 00:04:24,040 og gjøre enten det ene eller det hvis betingelsen er sann eller ikke. 96 00:04:24,040 --> 00:04:26,040 Og så, som du ser, hvis du ikke allerede har, 97 00:04:26,040 --> 00:04:27,480 Du kan også hekker disse blokkene. 98 00:04:27,480 --> 00:04:32,110 Så Scratch vokser til å fylle formene som du kanskje ønsker å sette inn i den, 99 00:04:32,110 --> 00:04:35,330 slik at du faktisk kan uttrykke mest noen logikk som du kanskje ønsker å gjøre. 100 00:04:35,330 --> 00:04:38,220 >> Nå noen ord kunngjøring for både her og New Haven. 101 00:04:38,220 --> 00:04:39,370 Så seksjonering begynner i dag. 102 00:04:39,370 --> 00:04:42,120 Nettadressen for dette er på kursets nettside, for dem ukjent. 103 00:04:42,120 --> 00:04:43,970 Seksjoner vil være en mulighet til å komme sammen 104 00:04:43,970 --> 00:04:46,553 i en mye mer intimt miljø enn [? Sanders?] Tillater, 105 00:04:46,553 --> 00:04:50,347 med 10 til 20 klassekamerater med en undervisning stipendiat ved ulike spor, 106 00:04:50,347 --> 00:04:51,930 og ulike skritt, hvis du ønsker det. 107 00:04:51,930 --> 00:04:54,080 Faktisk kurstilbud forskjellige seksjoner 108 00:04:54,080 --> 00:04:57,340 for de mindre komfortable, mer komfortable, og et sted i mellom, 109 00:04:57,340 --> 00:04:59,860 og rollen tommelfinger her, er det er ingen formell definisjon, 110 00:04:59,860 --> 00:05:04,600 men hvis du er mindre komfortable, du slags vet det. 111 00:05:04,600 --> 00:05:07,470 Du er litt uforferdet om Ideen om stepping foten, kanskje, tilbake 112 00:05:07,470 --> 00:05:10,130 i klasserommet, eller vise opp til en mellom-delen. 113 00:05:10,130 --> 00:05:12,770 Hvis du har vært programmering siden du var seks år gammel, mer komfortabel, 114 00:05:12,770 --> 00:05:13,400 kanskje til deg. 115 00:05:13,400 --> 00:05:16,150 Og hvis det er slags en kaste opp, det er akkurat hva i mellom 116 00:05:16,150 --> 00:05:17,190 er ment å være. 117 00:05:17,190 --> 00:05:18,410 >> Nå, i mellomtiden, for en klasse av denne størrelse, 118 00:05:18,410 --> 00:05:21,326 det tar oss litt tid for å seksjonen alle, så vi har såkalte, 119 00:05:21,326 --> 00:05:24,030 super seksjoner, kommer opp dette helgen og tidlig neste uke, 120 00:05:24,030 --> 00:05:26,570 så ta en titt på kurset hjemmeside for de som er selvfølgelig brede, 121 00:05:26,570 --> 00:05:28,610 og også filmet for dem som ikke kan gjøre dem. 122 00:05:28,610 --> 00:05:33,470 Og seksjoner selv vil starte i uke tre av CS50 null indeksen. 123 00:05:33,470 --> 00:05:35,880 Problemet satt 0 er allerede på kursets hjemmeside. 124 00:05:35,880 --> 00:05:40,010 Og innse at du har ni sene dager dette semesteret. 125 00:05:40,010 --> 00:05:43,240 Så dette er en oppgradering fra fjor år, når vi hadde fem sene dager. 126 00:05:43,240 --> 00:05:46,210 >> Så hvis du lurer på, Vi har ni oppgavesett. 127 00:05:46,210 --> 00:05:53,200 Du har ni sene dager, som hver du kan bare bruke én per uke på. 128 00:05:53,200 --> 00:05:56,089 Som effektivt gjør alle problemet setter grunn fredag, 129 00:05:56,089 --> 00:05:58,630 men målet er å sette en liten litt av psykologisk press 130 00:05:58,630 --> 00:06:01,100 på deg til å prøve å få ting i på torsdag 131 00:06:01,100 --> 00:06:03,960 fordi som du snart vil oppdage, for bedre eller verre, de fleste 132 00:06:03,960 --> 00:06:07,820 alt i programvaren verden ender opp tar mye lengre tid enn du forventer. 133 00:06:07,820 --> 00:06:10,620 Så anser det som en slags av muligheten til å hjelpe 134 00:06:10,620 --> 00:06:13,880 selv å målrette torsdag, men trøste deg med at, ja, 135 00:06:13,880 --> 00:06:14,950 alt er på grunn fredag. 136 00:06:14,950 --> 00:06:17,590 Og hvis du sender dem på Torsdag, det er fantastisk. 137 00:06:17,590 --> 00:06:21,020 Det finnes ingen bonuspoeng eller ekstra kreditt for å møte denne fristen. 138 00:06:21,020 --> 00:06:23,250 Det er ment å være en krykke bare. 139 00:06:23,250 --> 00:06:25,810 >> Og arbeidstid, både her og i New Haven, 140 00:06:25,810 --> 00:06:28,840 i person, hvis du ønsker å møte med noen av våre kurs 141 00:06:28,840 --> 00:06:31,060 undervisning stipendiater og instanser for å få hjelp. 142 00:06:31,060 --> 00:06:31,640 >> Greit. 143 00:06:31,640 --> 00:06:33,110 Så nå, la oss gjøre dette mer ekte. 144 00:06:33,110 --> 00:06:35,470 Og for et øyeblikk det kommer til å starte for å få litt mer uforståelige, men svært 145 00:06:35,470 --> 00:06:37,310 raskt på fredag ​​og neste uke vil vi være 146 00:06:37,310 --> 00:06:41,230 i stand til å gjøre så mye mer enn vi kunne hittil i Scratch. 147 00:06:41,230 --> 00:06:44,350 Så vi introdusert kode siste uke, riktignok pictoral. 148 00:06:44,350 --> 00:06:45,620 Det var puslebiter. 149 00:06:45,620 --> 00:06:48,800 Og vi formalisert at den er noe som kalles kildekoden, 150 00:06:48,800 --> 00:06:50,330 men ville ser ut? 151 00:06:50,330 --> 00:06:52,550 Vel, det så litt noe sånt som dette. 152 00:06:52,550 --> 00:06:55,410 Og, faktisk bare til slags erte hvor vi kan gå med dette. 153 00:06:55,410 --> 00:06:57,800 Jeg kommer til å gå videre og åpne opp et vindu her, 154 00:06:57,800 --> 00:06:59,810 og jeg bare kommer til å velge ny fil. 155 00:06:59,810 --> 00:07:03,200 Og jeg kommer til å lagre denne filen som noe som hallo dot c. 156 00:07:03,200 --> 00:07:05,700 Mer om det valget av ord i bare et øyeblikk. 157 00:07:05,700 --> 00:07:08,630 Og dette er hvordan noen kanskje gå om å skrive et program. 158 00:07:08,630 --> 00:07:13,990 Inkluder standard I / O dot h, int main ugyldig, og deretter åpne klammeparentes, nær 159 00:07:13,990 --> 00:07:19,430 klammeparentes, printf hallo komma verden, backslash n, semikolon, Lagre, gjort. 160 00:07:19,430 --> 00:07:19,930 OK. 161 00:07:19,930 --> 00:07:21,670 Jeg har skrevet min første program, men det kommer 162 00:07:21,670 --> 00:07:23,878 å være utrolig imponert fordi når jeg faktisk 163 00:07:23,878 --> 00:07:27,352 kjøre dette program er selvfølgelig ved først å skrive gjøre hallo, 164 00:07:27,352 --> 00:07:30,310 og deretter dot slash hei, og vi vil gå gjennom dette i mye mer detalj 165 00:07:30,310 --> 00:07:31,730 i et øyeblikk, det er alt den gjør. 166 00:07:31,730 --> 00:07:33,270 Betyr pop ikke åpne noen vinduer. 167 00:07:33,270 --> 00:07:35,070 Det gjør ikke noe spesielt fancy. 168 00:07:35,070 --> 00:07:38,830 Alt den gjør er det jeg fortalte det til gjør, men hvordan får vi til det? 169 00:07:38,830 --> 00:07:40,560 Og hvordan bygger vi på det? 170 00:07:40,560 --> 00:07:43,430 Vel, la oss introdusere noen ulike konsepter her. 171 00:07:43,430 --> 00:07:47,170 >> Så en, vi er i ferd med å starte ved hjelp av et program kalt en kompilator. 172 00:07:47,170 --> 00:07:51,470 En kompilator finnes for Mac OS, Windows, Linux, en rekke operativsystemer, 173 00:07:51,470 --> 00:07:54,540 og vi vil snart introdusere deg til miljø som vi skal bruke, 174 00:07:54,540 --> 00:07:57,410 men en kompilator er bare en generell betegnelse på et stykke programvare 175 00:07:57,410 --> 00:08:01,940 som tar kildekoden og produserer objektkode fra den. 176 00:08:01,940 --> 00:08:03,940 Med andre ord, hvis du har som input din kilde 177 00:08:03,940 --> 00:08:08,250 kode, noe som det jeg nettopp skrev, det til slutt produserer objektkode. 178 00:08:08,250 --> 00:08:11,780 Og objektkode er egentlig bare en fancy måte å si det utganger 179 00:08:11,780 --> 00:08:12,926 null og ens. 180 00:08:12,926 --> 00:08:14,800 Med andre ord, kilde kode, selv om det er 181 00:08:14,800 --> 00:08:17,240 kommer til å se litt uforståelige, og litt mindre vennlig 182 00:08:17,240 --> 00:08:19,590 enn Scratch ved første øyekast, det er i hvert fall noe 183 00:08:19,590 --> 00:08:21,120 at vi mennesker kan forstå. 184 00:08:21,120 --> 00:08:24,360 Den slags ser ut og høres ut som Engelsk, selv om det er veldig konsis. 185 00:08:24,360 --> 00:08:28,040 Mens programmering i null og ens, som våre forgjengere hadde å gjøre, 186 00:08:28,040 --> 00:08:30,920 noen år siden, var ikke en spesielt morsom utfordring. 187 00:08:30,920 --> 00:08:33,710 Og likevel, er dette hva datamaskinen forstår fortsatt. 188 00:08:33,710 --> 00:08:37,010 Så kompilatoren får oss fra kildekoden til objektkoden. 189 00:08:37,010 --> 00:08:39,860 Det er som å åpne en fil med kompilator, og når du lagrer den, 190 00:08:39,860 --> 00:08:41,419 du får disse nuller og enere. 191 00:08:41,419 --> 00:08:43,419 Så vi får se hvordan du gjør at i bare et øyeblikk. 192 00:08:43,419 --> 00:08:47,400 >> Men la oss nå prøve å gi en bygge bro mellom forrige uke og denne, 193 00:08:47,400 --> 00:08:50,660 slik at selv når vi får hengt opp på ting som klammeparentes, 194 00:08:50,660 --> 00:08:54,100 og semikolon og parenteser og alle disse intellektuelt interessant 195 00:08:54,100 --> 00:08:57,620 aspekter av programmering, at svært forståelig reise folk opp tidlig, 196 00:08:57,620 --> 00:09:00,930 innser at alle ideene i dag, er de samme som sist. 197 00:09:00,930 --> 00:09:03,975 Så i går, så vi dette eksemplet her, Hello World-programmet. 198 00:09:03,975 --> 00:09:07,500 Vel, som starter i dag, hvis vi ønsker å gjennomføre det samme programmet, 199 00:09:07,500 --> 00:09:10,800 det kommer til å se en litt noe sånt som dette. 200 00:09:10,800 --> 00:09:14,040 Og vi vil forklare før lenge hva int, og viktigste, og tom, og alle som 201 00:09:14,040 --> 00:09:18,770 er, men minst jeg ser her allerede kjent Hello World. 202 00:09:18,770 --> 00:09:20,860 >> I mellomtiden, ting som funksjon, si hei, 203 00:09:20,860 --> 00:09:23,570 er veldig enkelt kommer til å bli en svært enkle utsagn som dette. 204 00:09:23,570 --> 00:09:26,930 Printf hello world, med noen siterer, med en omvendt skråstrek, 205 00:09:26,930 --> 00:09:29,780 med et semikolon, men mer om det som kommer. 206 00:09:29,780 --> 00:09:34,066 Loops, i mellomtiden, er dette en loop som, selvfølgelig, sier hei verden for alltid, 207 00:09:34,066 --> 00:09:36,690 og dette kommer til å se en litt sprøere enn i det siste, 208 00:09:36,690 --> 00:09:39,530 men hvis jeg sier noe aktig, mens sant, jeg 209 00:09:39,530 --> 00:09:44,050 Deretter kan du skrive ut Hello world igjen og igjen og igjen og igjen. 210 00:09:44,050 --> 00:09:46,660 Og så du kan slags av begynner å antyde her, 211 00:09:46,660 --> 00:09:49,070 denne konvensjonen for å bruke klammeparentes er snill 212 00:09:49,070 --> 00:09:52,050 som å omfavne innrykket linje med kode der. 213 00:09:52,050 --> 00:09:55,840 Printf kodelinje mye som den gule puslespill brikke opp ovenfor. 214 00:09:55,840 --> 00:09:58,740 Slik at vi ikke kommer til å si alltid, vi kommer til å si når sant, 215 00:09:58,740 --> 00:10:01,020 men vi får se hvorfor det er på bare litt. 216 00:10:01,020 --> 00:10:04,210 >> I mellomtiden, hvis vi har en løkke som dette, hvor du gjentar noe begrenset 217 00:10:04,210 --> 00:10:07,730 antall ganger, dette også det er kommer til å ta litt tid å bli vant 218 00:10:07,730 --> 00:10:12,820 til, men det kommer til å si for int jeg får null, jeg mindre enn 10, i ++, 219 00:10:12,820 --> 00:10:14,056 og deretter printf igjen. 220 00:10:14,056 --> 00:10:15,430 Men det kommer til å bli mønstre. 221 00:10:15,430 --> 00:10:18,434 Og for de av dere som er kjent med AP Computer Science, eller Java, 222 00:10:18,434 --> 00:10:21,100 eller hvilket som helst antall av andre språk nesten alle disse konstruksjoner 223 00:10:21,100 --> 00:10:23,820 så langt bør se mest kjent. 224 00:10:23,820 --> 00:10:24,680 >> Så variabel. 225 00:10:24,680 --> 00:10:29,270 Så her er en enkel Scratch utdrag som setter en variabel kalt telleren til null, 226 00:10:29,270 --> 00:10:33,150 og deretter alltid sier telleren, og da det forandrer telleren ved en. 227 00:10:33,150 --> 00:10:37,030 Så det begynner med null, og deretter en, to, tre. 228 00:10:37,030 --> 00:10:42,560 Vel, hvordan kan vi presentere det i dette nye språket litt på samme måte? 229 00:10:42,560 --> 00:10:45,460 Int teller lik null, mens sant, som 230 00:10:45,460 --> 00:10:48,100 er den samme ideen fra før for å gjøre noe for alltid, 231 00:10:48,100 --> 00:10:49,530 og jeg skal bare printf. 232 00:10:49,530 --> 00:10:53,310 Og nå er det å bli litt rart, prosent i, men mer om det som kommer, 233 00:10:53,310 --> 00:10:55,140 men disse ideene er akkurat det samme. 234 00:10:55,140 --> 00:10:58,820 Vi må nå forholde seg til syntaksen at datamaskinen er 235 00:10:58,820 --> 00:11:00,010 kommer til å kreve av oss. 236 00:11:00,010 --> 00:11:04,620 >> Boolsk uttrykk, noe som sx mindre enn y, x eller mindre enn y, 237 00:11:04,620 --> 00:11:06,354 og y mindre enn z. 238 00:11:06,354 --> 00:11:09,270 Det kommer til å se litt noe som dette, med parentes bare 239 00:11:09,270 --> 00:11:13,020 som i matematikk for godt mål å bare sikre at rekkefølgen av operasjoner 240 00:11:13,020 --> 00:11:14,750 er som vi har tenkt. 241 00:11:14,750 --> 00:11:15,600 Og nå, forhold. 242 00:11:15,600 --> 00:11:21,220 Så hvis x mindre enn y, si x er mindre enn y, annet hvis x er større enn y, 243 00:11:21,220 --> 00:11:26,020 si at x er større enn y, ellers logisk, må x være lik y. 244 00:11:26,020 --> 00:11:28,710 Så du kan implementere noe som dette i Scratch, 245 00:11:28,710 --> 00:11:31,230 eller du kan implementere det i denne syntaksen. 246 00:11:31,230 --> 00:11:35,090 Og igjen, klammeparentes er slags gi oss den samme formen som i puslespillet 247 00:11:35,090 --> 00:11:40,750 stykker, men syntaksen, nå, er kanskje begynner å følge noen mønstre. 248 00:11:40,750 --> 00:11:42,910 >> Så, hva betyr dette gir oss her? 249 00:11:42,910 --> 00:11:45,260 Så vi er tilbake så i hovedprogrammet. 250 00:11:45,260 --> 00:11:47,930 La oss faktisk, nå, gjøre noe med det. 251 00:11:47,930 --> 00:11:50,660 Så i denne aller første linjen vi ser skarp omfatter, 252 00:11:50,660 --> 00:11:53,160 standard I / O, dot h, og deretter litt merkelig vinkel 253 00:11:53,160 --> 00:11:57,330 parentes nedenfor som. int main ugyldig, og deretter printf hello world. 254 00:11:57,330 --> 00:11:58,200 Så bare ta et skritt. 255 00:11:58,200 --> 00:12:02,440 Noen som aldri har programmert før, minst forklare en av disse linjene. 256 00:12:02,440 --> 00:12:04,490 Ved hjelp av kanskje noen av sjargong av forrige uke. 257 00:12:04,490 --> 00:12:06,942 Hva er printf, for eksempel? 258 00:12:06,942 --> 00:12:07,442 Yeah. 259 00:12:07,442 --> 00:12:08,410 >> PUBLIKUM: [uhørbart] 260 00:12:08,410 --> 00:12:08,610 >> DAVID J. MALAN: Yeah. 261 00:12:08,610 --> 00:12:11,380 Det er en funksjon, eller en uttalelse, fra forrige ukes terminologi. 262 00:12:11,380 --> 00:12:13,470 Og det er en handling som gjør noe. 263 00:12:13,470 --> 00:12:15,855 Nå er denne funksjonen, eller denne uttalelsen, gjør 264 00:12:15,855 --> 00:12:17,550 det ser ut til å ta noen form for innspill? 265 00:12:17,550 --> 00:12:20,080 266 00:12:20,080 --> 00:12:24,380 Og i hvilken forstand gjør det ser ut til å ta inn, i så fall? 267 00:12:24,380 --> 00:12:26,180 Input, hva mener jeg med det? 268 00:12:26,180 --> 00:12:26,720 Yeah. 269 00:12:26,720 --> 00:12:27,595 >> PUBLIKUM: [uhørbart] 270 00:12:27,595 --> 00:12:30,565 271 00:12:30,565 --> 00:12:31,440 DAVID J. MALAN: Yeah. 272 00:12:31,440 --> 00:12:34,890 Så Skrap ut noen puslespillbrikker hvor du kan parametrize det. 273 00:12:34,890 --> 00:12:37,980 Du kan fortelle gjentakelses blokkere hvor mange ganger å gjenta, 274 00:12:37,980 --> 00:12:40,320 slik det var en inngang av sorterer, og akkurat som Scratch 275 00:12:40,320 --> 00:12:43,060 hadde en liten hvit plassholder for nummeret du vil skrive inn, 276 00:12:43,060 --> 00:12:45,810 så gjør vi bruker i denne tekst verdens parentes 277 00:12:45,810 --> 00:12:49,910 for å gi oss det sirkulær form inn der vi kan koble våre innspill. 278 00:12:49,910 --> 00:12:53,180 Tross alt, titalls år siden når dette språket, kalles C, 279 00:12:53,180 --> 00:12:55,950 ble oppfunnet ingen forventet det er en av oss, 280 00:12:55,950 --> 00:12:59,420 disse noen år senere, ville vi vil ha en funksjon som sier hei. 281 00:12:59,420 --> 00:12:59,920 Høyre? 282 00:12:59,920 --> 00:13:02,880 Det ville være fint om det var en puslespill brikke, eller et stikkord, 283 00:13:02,880 --> 00:13:05,502 som kalles hallo, at bokstavelig talt bare sier hei. 284 00:13:05,502 --> 00:13:06,460 Men vi trenger ikke det. 285 00:13:06,460 --> 00:13:09,320 Vi kan ha noe mye lavere nivå, som en generisk print 286 00:13:09,320 --> 00:13:12,760 kommando, som tar input, og skriver hva vi ønsker. 287 00:13:12,760 --> 00:13:14,960 Så oppdager nå mønsteret som vil begynne å dukke opp. 288 00:13:14,960 --> 00:13:19,310 Åpne paren, i nærheten paren tilsynelatende omfavner input, 289 00:13:19,310 --> 00:13:21,770 og da ser jeg dobbelt sitater på begge ender. 290 00:13:21,770 --> 00:13:25,110 Det er fortsatt rart backslash n, men forhåpentligvis nå du 291 00:13:25,110 --> 00:13:29,900 kan begynne å visualisere i det minste at printf tar i noen form for innspill. 292 00:13:29,900 --> 00:13:31,850 Ikke så brukervennlig som Scratch, men det er bare 293 00:13:31,850 --> 00:13:34,920 som å ha plugget i noen verdi der. 294 00:13:34,920 --> 00:13:38,306 >> Greit, nå la oss faktisk gjøre noe med dette. 295 00:13:38,306 --> 00:13:40,930 Så noen av dere kanskje vet fra ha handlet klassen før, 296 00:13:40,930 --> 00:13:42,638 chattet med venner, at i mange år 297 00:13:42,638 --> 00:13:44,590 vi brukte noe som heter den CS50 apparatet. 298 00:13:44,590 --> 00:13:49,160 Dette var et begrep som beskriver en teknologi kalles den virtuelle maskin, som 299 00:13:49,160 --> 00:13:51,870 er et stykke programvare som din forgjengere ville laste off 300 00:13:51,870 --> 00:13:53,360 kursets nettside gratis. 301 00:13:53,360 --> 00:13:56,550 De ville også laste ned en gratis stykke programvare kalt en hypervisor, 302 00:13:56,550 --> 00:14:00,590 noe som kalles som VMware, eller VirtualBox, eller en rekke 303 00:14:00,590 --> 00:14:04,450 andre verktøy, og på sin Mac eller PC eller hva datamaskinen de hadde i fjor 304 00:14:04,450 --> 00:14:06,620 og i år tidligere, de ville dobbeltklikke på et ikon 305 00:14:06,620 --> 00:14:08,860 å kjøre denne programvaren kalt hypervisor. 306 00:14:08,860 --> 00:14:12,220 Og da på innsiden av det programmet de skulle åpne CS50 apparatet. 307 00:14:12,220 --> 00:14:14,710 Og effekten var at om en forgjenger av deg 308 00:14:14,710 --> 00:14:17,780 kjørte Mac OS eller Windows, vil han eller hun deretter 309 00:14:17,780 --> 00:14:22,910 senere hadde et nytt vindu på deres skjermen kjører CS50 miljø. 310 00:14:22,910 --> 00:14:27,370 Så en virtuell maskin kan du kjøre én operativsystem på innsiden av en annen, 311 00:14:27,370 --> 00:14:28,785 og det er akkurat det vi gjorde. 312 00:14:28,785 --> 00:14:31,410 Gjennom det meste av kurset vi bruke et operativsystem kalt 313 00:14:31,410 --> 00:14:34,070 Linux, spesielt Ubuntu Linux, og dette 314 00:14:34,070 --> 00:14:37,590 er en veldig fin måte i år tidligere av å sørge for at alle i løpet 315 00:14:37,590 --> 00:14:38,840 hadde det samme miljøet. 316 00:14:38,840 --> 00:14:41,339 Og du kan bruke noen form for datamaskin som du faktisk ønsker. 317 00:14:41,339 --> 00:14:43,930 Blant ulempene, skjønt, var det var som to gigabyte 318 00:14:43,930 --> 00:14:45,480 for å laste ned denne tingen. 319 00:14:45,480 --> 00:14:50,310 Det gjorde ikke nødvendigvis fungere super bra på folk som har datamaskiner som kanskje bare 320 00:14:50,310 --> 00:14:54,570 hadde en gig eller så av RAM, eller ikke for mange gigahertz av CPU-hastighet, 321 00:14:54,570 --> 00:14:56,750 og så dette året, for dette og andre årsaker, 322 00:14:56,750 --> 00:14:59,140 har vi vært overgangen i dette miljøet. 323 00:14:59,140 --> 00:15:03,730 Den såkalte CS50 IDE, som er basert på åpen kildekode, 324 00:15:03,730 --> 00:15:07,380 og en støttet plattform at et selskap som heter Cloud9 325 00:15:07,380 --> 00:15:11,110 støtter i Europa, så tillater oss å ha vesentlig 326 00:15:11,110 --> 00:15:15,770 at nøyaktig samme miljø som i år tidligere, men i den såkalte nettskyen. 327 00:15:15,770 --> 00:15:17,532 >> Så hva er den skyen? 328 00:15:17,532 --> 00:15:20,480 Du har sikkert klikket ikonet på din Mac eller PC. 329 00:15:20,480 --> 00:15:22,210 Hva er skyen? 330 00:15:22,210 --> 00:15:22,709 Yeah? 331 00:15:22,709 --> 00:15:25,880 332 00:15:25,880 --> 00:15:26,780 En litt høyere. 333 00:15:26,780 --> 00:15:30,510 334 00:15:30,510 --> 00:15:31,010 Yeah. 335 00:15:31,010 --> 00:15:33,770 Det er bare en haug med datamaskiner andre steder som lagrer data og løp 336 00:15:33,770 --> 00:15:34,880 programvaren og lignende. 337 00:15:34,880 --> 00:15:39,390 Så det er egentlig bare til ordet de jure beskrive [? utleies?] 338 00:15:39,390 --> 00:15:40,930 datamaskiner som bor andre steder. 339 00:15:40,930 --> 00:15:42,810 At du, selv, ikke nødvendigvis eier. 340 00:15:42,810 --> 00:15:45,256 Så når dine data, eller din programmer, er i skyen, 341 00:15:45,256 --> 00:15:47,630 det betyr bare det er på noen andres datamaskiner andre steder, 342 00:15:47,630 --> 00:15:50,510 og ikke, mest sannsynlig, på fysisk bærbar eller stasjonær. 343 00:15:50,510 --> 00:15:52,990 Og så det er hva CS50 IDE nå er. 344 00:15:52,990 --> 00:15:55,670 >> Heretter vil du gå til en bestemt URL som vil introdusere deg 345 00:15:55,670 --> 00:16:00,090 til, i oppgavesettet 1, senere i uke, som vil da, ved å logge deg inn, 346 00:16:00,090 --> 00:16:01,480 gi deg dette miljøet. 347 00:16:01,480 --> 00:16:03,896 Og mye som Scratch hadde en noen forskjellige paneler involvert, 348 00:16:03,896 --> 00:16:06,030 så gjør CS50 IDE har akkurat det. 349 00:16:06,030 --> 00:16:09,480 I øverste venstre side her, er du kommer til å se et kjent filbehandleren. 350 00:16:09,480 --> 00:16:11,930 Så noen av filene som du sette inn i dette miljøet 351 00:16:11,930 --> 00:16:13,346 bare skal være oppført der. 352 00:16:13,346 --> 00:16:14,350 Filer og mapper. 353 00:16:14,350 --> 00:16:16,790 Øverst til høyre her, du kommer til å se et sted 354 00:16:16,790 --> 00:16:18,420 hvor du faktisk kan skrive koden din. 355 00:16:18,420 --> 00:16:21,860 Først i C, senere i begrep i PHP og Javascript, 356 00:16:21,860 --> 00:16:24,739 og, kanskje for endelig prosjekter, Ruby eller Java eller Python 357 00:16:24,739 --> 00:16:27,280 eller en rekke språk er understøttet i dette miljøet. 358 00:16:27,280 --> 00:16:30,130 Det er ikke i det hele tatt bundet til CS50 spesifikt. 359 00:16:30,130 --> 00:16:33,390 >> Og så i nedre hjørne her, spesielt for de mer komfortable, 360 00:16:33,390 --> 00:16:35,590 du har noe kalles et terminalvindu. 361 00:16:35,590 --> 00:16:38,770 Og dette terminalvindu tillater du å utføre en kommando som du 362 00:16:38,770 --> 00:16:40,860 ønsker i denne skyen miljøet. 363 00:16:40,860 --> 00:16:42,860 Den lar deg installere noen ekstra programvare 364 00:16:42,860 --> 00:16:46,810 som du vil fordi du har såkalt rot, eller administratorrettigheter. 365 00:16:46,810 --> 00:16:49,930 Så med andre ord, selv om denne er slutt vert i skyen, 366 00:16:49,930 --> 00:16:52,400 og selv om vi har forenklet det til en viss grad 367 00:16:52,400 --> 00:16:57,110 som standard, bokstavelig talt innføre, takket være Dan Armendariz, og Dino, 368 00:16:57,110 --> 00:17:01,070 og Dan Bradley på CS50 team over forbi mange måneder, en mindre behagelig 369 00:17:01,070 --> 00:17:05,140 modus som skjuler mye av utgangspunktet forvirrende distraksjoner. 370 00:17:05,140 --> 00:17:10,119 Alt det eksisterer for å representerer et typisk datamaskinsystem 371 00:17:10,119 --> 00:17:12,319 som du kan bruke i den virkelige verden. 372 00:17:12,319 --> 00:17:15,640 >> Så hva betyr alt dette, og hva kan vi egentlig gjøre med det? 373 00:17:15,640 --> 00:17:19,124 La oss faktisk ta en titt på et program. 374 00:17:19,124 --> 00:17:21,290 Så jeg kommer til å åpne opp Selve miljøet her, 375 00:17:21,290 --> 00:17:23,894 som er bare vår Chrome leseren, noe som kan være Firefox, 376 00:17:23,894 --> 00:17:26,640 kan være Internet Explorer, eller noen annen nettleser også. 377 00:17:26,640 --> 00:17:28,400 Det er fullt skjermet her for øyeblikket. 378 00:17:28,400 --> 00:17:31,580 Og jeg ønsker å faktisk erte hverandre hva dette programmet var. 379 00:17:31,580 --> 00:17:36,170 Så la oss ta en titt, ved å zoome inn opp toppen, hva jeg gjorde, og hvordan jeg kom hit. 380 00:17:36,170 --> 00:17:38,315 Så her er de eksakte samme linjer med kode. 381 00:17:38,315 --> 00:17:40,440 Så dette er den uttalelsen, som du nevnte tidligere. 382 00:17:40,440 --> 00:17:42,580 Funksjonen som sier hei. 383 00:17:42,580 --> 00:17:45,870 Klammeparentes, på linje fire og seks, 384 00:17:45,870 --> 00:17:49,290 formodentlig slags innhylle den linjen å assosiere det 385 00:17:49,290 --> 00:17:50,890 med essensen av mitt program. 386 00:17:50,890 --> 00:17:54,890 Så ja, dette søkeordet viktigste, det er der oppe på linje tre, 387 00:17:54,890 --> 00:17:59,450 du kan tenke på det som tilsvarer av at når grønt flagg klikket, 388 00:17:59,450 --> 00:18:01,080 blokkere i Scratch. 389 00:18:01,080 --> 00:18:05,280 Så det er alt vi har her, er når grønne flagget klikket, print, eller si, 390 00:18:05,280 --> 00:18:06,700 Hallo verden. 391 00:18:06,700 --> 00:18:11,210 >> Men la oss ta en gjetning, nå, på hvilket denne første, mer uforståelige linje, er. 392 00:18:11,210 --> 00:18:15,100 Sharp omfatter, åpen vinklet brakett, standard I / O dot h, 393 00:18:15,100 --> 00:18:17,320 lukke vinklet brakett. 394 00:18:17,320 --> 00:18:19,850 Hva er det kanskje gjør, spesielt hvis du har programmert 395 00:18:19,850 --> 00:18:21,390 før i et annet språk. 396 00:18:21,390 --> 00:18:21,890 Yeah? 397 00:18:21,890 --> 00:18:22,765 >> PUBLIKUM: [uhørbart] 398 00:18:22,765 --> 00:18:25,095 399 00:18:25,095 --> 00:18:25,970 DAVID J. MALAN: Yeah. 400 00:18:25,970 --> 00:18:26,470 Nøyaktig. 401 00:18:26,470 --> 00:18:29,455 Så dette er noe som gir deg tilgang til en bibliotek, så å si, av funksjoner. 402 00:18:29,455 --> 00:18:31,830 Og et bibliotek med funksjoner er funksjoner som noen andre 403 00:18:31,830 --> 00:18:34,406 skrev, enten nylig eller for lenge siden, slik at du 404 00:18:34,406 --> 00:18:35,780 trenger ikke å finne opp hjulet. 405 00:18:35,780 --> 00:18:39,020 For eksempel, gjør vi ikke må vite, i 2015, 406 00:18:39,020 --> 00:18:42,280 hvordan å skrive kode som setter et tegn på skjermen min. 407 00:18:42,280 --> 00:18:44,820 Noen andre har funnet at ut med printf funksjonen 408 00:18:44,820 --> 00:18:47,280 slik at jeg kan sortere abstrakt bort fra det, eller laget 409 00:18:47,280 --> 00:18:49,350 på toppen av hans eller hennes kode, og nå bare ta 410 00:18:49,350 --> 00:18:52,760 for gitt at ethvert program jeg skriver kan skrive noe til skjermen. 411 00:18:52,760 --> 00:18:58,150 Så denne første linjen der i trinn én inkluderer den såkalte header fil 412 00:18:58,150 --> 00:18:59,980 for standardbibliotek. 413 00:18:59,980 --> 00:19:02,630 Så se, språket i som vi nå jobber 414 00:19:02,630 --> 00:19:05,010 hadde en standard bibliotek med mange funksjoner. 415 00:19:05,010 --> 00:19:07,240 Printf er en av dem, og den første linje med kode 416 00:19:07,240 --> 00:19:10,040 betyr gi meg tilgang til disse funksjonene, slik at jeg 417 00:19:10,040 --> 00:19:12,300 trenger ikke å gjenoppfinne hjulet. 418 00:19:12,300 --> 00:19:15,940 >> Nå la oss gå til det nederste vinduet og gjøre akkurat hva jeg gjorde før. 419 00:19:15,940 --> 00:19:18,520 Et øyeblikk siden, da jeg var suser gjennom koden, 420 00:19:18,520 --> 00:19:24,540 skrive det ut for første gang, Jeg veldig raskt skrevet, gjør hallo. 421 00:19:24,540 --> 00:19:28,250 Hva var det handler om ville du gjette? 422 00:19:28,250 --> 00:19:29,150 Hva skulle jeg gjøre? 423 00:19:29,150 --> 00:19:29,649 Yeah? 424 00:19:29,649 --> 00:19:31,810 425 00:19:31,810 --> 00:19:32,310 Bare glem det. 426 00:19:32,310 --> 00:19:32,970 Det er greit. 427 00:19:32,970 --> 00:19:33,492 Yeah. 428 00:19:33,492 --> 00:19:34,450 PUBLIKUM: Kompilering det. 429 00:19:34,450 --> 00:19:34,700 DAVID J. MALAN: Yeah. 430 00:19:34,700 --> 00:19:35,770 Det var bare å kompilere den. 431 00:19:35,770 --> 00:19:36,270 Høyre? 432 00:19:36,270 --> 00:19:39,280 Selv om dette er helt ukjent til deg, det er ganske engelsk ut. 433 00:19:39,280 --> 00:19:41,155 Det er absolutt ikke nuller og enere, så jeg fortsatt 434 00:19:41,155 --> 00:19:44,220 må kjøre det gjennom at såkalte program, en kompilator, er at å gå 435 00:19:44,220 --> 00:19:46,060 å ta det som input og produserer output. 436 00:19:46,060 --> 00:19:48,270 Og i hvert fall, for nå, i denne Linux-miljø, 437 00:19:48,270 --> 00:19:51,030 men dette er ikke en forutsetning, dette er bare hvor vi skal begynne, 438 00:19:51,030 --> 00:19:53,960 du vanligvis samhandle med datasystemer som dette 439 00:19:53,960 --> 00:19:55,770 av en såkalt kommandolinje. 440 00:19:55,770 --> 00:19:57,790 Så med en blinkende rask og tastaturet, 441 00:19:57,790 --> 00:20:01,630 og ikke så mye på musen, og ikke så mye vinduer og ikoner og menyer, 442 00:20:01,630 --> 00:20:02,980 snarere alt er tekstlig. 443 00:20:02,980 --> 00:20:06,180 Og selv om dette føles, først øyekast, kanskje, som et skritt bakover, 444 00:20:06,180 --> 00:20:08,437 det er faktisk en mye mer kraftig og uttrykksfull måte 445 00:20:08,437 --> 00:20:10,270 kontrollere en datamaskin spesielt som deg, 446 00:20:10,270 --> 00:20:12,950 selv, bli mer komfortabel fra mindre. 447 00:20:12,950 --> 00:20:16,790 Det kommer til å tillate deg å gjøre en masse flere ting enn akkurat hva Microsoft 448 00:20:16,790 --> 00:20:20,390 eller Apple lar deg gjøre med deres grafiske operativsystem. 449 00:20:20,390 --> 00:20:23,270 >> Så når jeg trykker Enter, nå, ingenting skjer denne gangen 450 00:20:23,270 --> 00:20:25,960 fordi tilsynelatende Programmet hallo er oppdatert. 451 00:20:25,960 --> 00:20:28,250 Og hva var lede Jeg løp etter det? 452 00:20:28,250 --> 00:20:32,370 Dot slash hei, og hei verden. 453 00:20:32,370 --> 00:20:34,350 La oss nå ta et skritt tilbake for bare et øyeblikk. 454 00:20:34,350 --> 00:20:39,510 Det viser seg at få hallo er bare en forenklet måte å kompilere et program. 455 00:20:39,510 --> 00:20:41,670 La oss bare introdusere ett stykke sjargong, 456 00:20:41,670 --> 00:20:43,470 men deretter bevege seg bort fra det, siden det ikke 457 00:20:43,470 --> 00:20:46,640 alle som interessant for dagens formål. 458 00:20:46,640 --> 00:20:51,000 Kompilatoren vi kommer til å begynne å bruke kalles klang, for C-språk. 459 00:20:51,000 --> 00:20:54,280 Og dette er et program som kjøres bare som vi gjorde på kommandolinjen der. 460 00:20:54,280 --> 00:20:56,580 Og så hvis jeg vil kompilere et program som jeg 461 00:20:56,580 --> 00:21:00,790 har skrevet i en fil kalt hallo dot c, jeg bokstavelig talt bare skriver klang hei c 462 00:21:00,790 --> 00:21:02,100 enter. 463 00:21:02,100 --> 00:21:04,880 >> Det morsomme er, av historiske årsaker, 464 00:21:04,880 --> 00:21:07,750 hvis jeg ikke angir navnet på programmet 465 00:21:07,750 --> 00:21:11,690 som jeg ønsker å sende ut, hvis jeg ikke gjør det angi et filnavn for de nuller 466 00:21:11,690 --> 00:21:14,990 og enere, en veldig merkelig Konvensjonen ble vedtatt år siden 467 00:21:14,990 --> 00:21:17,390 hvor det føltes slags godt svar på den tiden, 468 00:21:17,390 --> 00:21:21,650 vel la oss bare vilkårlig ringe første programmet vi kompilere en prikk ut. 469 00:21:21,650 --> 00:21:22,900 En kommer først i alfabetet. 470 00:21:22,900 --> 00:21:23,920 Ut, er det utgang. 471 00:21:23,920 --> 00:21:26,210 Så vi vil kalle programmet som standard en prikk ut. 472 00:21:26,210 --> 00:21:29,550 Og det er bra, fordi hvis jeg vil kjøre programmet i denne tekst basert 473 00:21:29,550 --> 00:21:33,590 miljø, jeg bare skriver dot slash en prikk ut skriv. 474 00:21:33,590 --> 00:21:35,250 Og det ville kjøre akkurat som før. 475 00:21:35,250 --> 00:21:36,880 Så la oss se at virkelig fort. 476 00:21:36,880 --> 00:21:40,370 >> Så hvis jeg går tilbake til min kildekode i CS50 IDE, 477 00:21:40,370 --> 00:21:47,860 og jeg i stedet gjøre dette, klang hallo barneseng c gå inn, synes varsel ingenting til å skje, 478 00:21:47,860 --> 00:21:49,790 men nesten alltid i denne Linux-miljø, 479 00:21:49,790 --> 00:21:53,310 når noe dårlig ser ut til å skje, at betyr noe godt faktisk skjedde. 480 00:21:53,310 --> 00:21:56,270 Hvis du ikke ser en feil budskap, er alle sikkert godt. 481 00:21:56,270 --> 00:22:01,930 Og faktisk, hvis jeg nå gjør dot slash en prikk ut skriv, jeg har kjørt min samme program. 482 00:22:01,930 --> 00:22:04,610 Jeg har fortsatt hallo program fra tidligere fordi ja, det er 483 00:22:04,610 --> 00:22:07,430 kommer til å bli så mye bedre bare skriv gjøre i stedet for å huske 484 00:22:07,430 --> 00:22:10,240 disse besvergelser av kommandoer, men la oss se hvordan vi 485 00:22:10,240 --> 00:22:12,890 kan forbedre denne, likevel. 486 00:22:12,890 --> 00:22:15,340 >> Så, dette er kommandoen å kompilere koden. 487 00:22:15,340 --> 00:22:19,100 Dette er kommandoen for å kjøre den kompilerte koden etterpå. 488 00:22:19,100 --> 00:22:20,546 Hvordan kan jeg angi et filnavn? 489 00:22:20,546 --> 00:22:22,670 Vel la oss bare introdusere ett stykke sjargong. 490 00:22:22,670 --> 00:22:24,461 Når du er i denne tekst basert miljø, 491 00:22:24,461 --> 00:22:27,400 du kommer til å ønske å spesifisere ting som kalles kommandolinjeargumenter. 492 00:22:27,400 --> 00:22:31,380 Som er bare en fancy måte å si: Med andre ord på meldingen som 493 00:22:31,380 --> 00:22:33,860 justere oppførselen til uansett program du kjører. 494 00:22:33,860 --> 00:22:37,320 Så spesielt program jeg er kjører, ved å skrive navnet klang, 495 00:22:37,320 --> 00:22:38,504 er programmet heter klang. 496 00:22:38,504 --> 00:22:40,920 Så dette er, eller den gamle skolen tilsvarende dobbeltklikke 497 00:22:40,920 --> 00:22:42,860 på Microsoft Word eller noen programmets ikon. 498 00:22:42,860 --> 00:22:46,360 Jeg istedenfor bare å skrive navnet sitt, men i denne versjonen av kommandoen 499 00:22:46,360 --> 00:22:51,334 Jeg så må dash o plass hei plass hallo dot c. 500 00:22:51,334 --> 00:22:53,500 Så selv om du har aldri spilt i denne verden før, 501 00:22:53,500 --> 00:22:58,160 bare ta en gjetning på hva ikke dash o hallo gjøre? 502 00:22:58,160 --> 00:23:00,620 Eller hva forteller det klang å gjøre? 503 00:23:00,620 --> 00:23:01,386 Yeah. 504 00:23:01,386 --> 00:23:02,455 >> PUBLIKUM: [uhørbart] 505 00:23:02,455 --> 00:23:03,330 DAVID J. MALAN: Yeah. 506 00:23:03,330 --> 00:23:08,614 Det setter bare filens utgang til å være hei i stedet for sillier en prikk ut. 507 00:23:08,614 --> 00:23:09,780 Og, ja, la oss prøve dette. 508 00:23:09,780 --> 00:23:14,250 Så hvis jeg nå gjør, først la oss gjøre dette, r m hei. 509 00:23:14,250 --> 00:23:15,590 Det er fjern. 510 00:23:15,590 --> 00:23:18,450 Og det kommer til å si remove vanlig fil hallo, som 511 00:23:18,450 --> 00:23:22,210 er unødvendig uforståelige, men det er bare betyr at du vil slette filen, 512 00:23:22,210 --> 00:23:23,230 og jeg skriver y for ja. 513 00:23:23,230 --> 00:23:27,340 Og legg merke til, hvis du var skotter på topp igjen, forsvant den fra der oppe. 514 00:23:27,340 --> 00:23:32,180 La meg nå gjøre klang dash o, og Jeg kommer til å gå videre og gjøre hallo, 515 00:23:32,180 --> 00:23:34,890 i store bokstaver, hallo dot c. 516 00:23:34,890 --> 00:23:37,775 Nå, hvis jeg gjør dot slash hallo, hva forventer du? 517 00:23:37,775 --> 00:23:41,240 518 00:23:41,240 --> 00:23:42,430 >> Kanskje det er store og små bokstaver. 519 00:23:42,430 --> 00:23:43,070 Kanskje er det ikke. 520 00:23:43,070 --> 00:23:44,030 La oss se. 521 00:23:44,030 --> 00:23:45,230 Ingen slik fil eller katalog. 522 00:23:45,230 --> 00:23:47,438 Og vi kan slags jukse ved bare se på øverst til venstre. 523 00:23:47,438 --> 00:23:49,630 Hva gjorde jeg tydeligvis lagre programmet som? 524 00:23:49,630 --> 00:23:51,070 All caps hei. 525 00:23:51,070 --> 00:23:53,020 Så ja, det går å gjøre en forskjell. 526 00:23:53,020 --> 00:23:54,540 Så nå hello world er tilbake. 527 00:23:54,540 --> 00:23:56,969 Nå er alt fint og bra, og alle veldig mind-lammende, 528 00:23:56,969 --> 00:23:59,760 å slags overbelastes ned i disse detaljer, men å forstå dem 529 00:23:59,760 --> 00:24:00,500 er bra. 530 00:24:00,500 --> 00:24:02,675 >> Å skrive ut disse stadig lange besvergelser 531 00:24:02,675 --> 00:24:05,980 er ikke til å være spesielt moro, så folk i verden 532 00:24:05,980 --> 00:24:08,260 oppfunnet et annet program, noen år siden, kalt 533 00:24:08,260 --> 00:24:12,190 gjøre, som ganske enkelt kan du skrive make, 534 00:24:12,190 --> 00:24:14,530 navnet på programmet du ønsker å gjøre, og gjøre 535 00:24:14,530 --> 00:24:18,580 er smart ved at det vil se ut i gjeldende mappe, aka katalog, 536 00:24:18,580 --> 00:24:21,440 og hvis du har en fil kalt hallo dot c, 537 00:24:21,440 --> 00:24:25,800 som er filen det vil kompilere for deg inn i et program som heter hei. 538 00:24:25,800 --> 00:24:29,950 Så det er en mye enklere måte gjøre de mer kryptiske kommandoer 539 00:24:29,950 --> 00:24:30,800 at vi gjorde tidligere. 540 00:24:30,800 --> 00:24:34,080 Og vi har pre-konfigurerte CS50 IDE å vite 541 00:24:34,080 --> 00:24:38,560 at den skal gjøre strek o, og en rekke andre flagg, eller kommandolinjeargumenter, 542 00:24:38,560 --> 00:24:40,670 at vi vil se før lenge. 543 00:24:40,670 --> 00:24:43,700 >> Men la oss nå faktisk gjøre noe mer interessant. 544 00:24:43,700 --> 00:24:46,950 Bare å skrive ut hello world alle tiden er ikke alle som overbevisende. 545 00:24:46,950 --> 00:24:52,280 Så la meg gå videre og endring dette programmet og si hei David. 546 00:24:52,280 --> 00:24:54,120 Nå kommer jeg til å gå ned her. 547 00:24:54,120 --> 00:24:57,360 Jeg kommer til å gå videre og gjør hei. 548 00:24:57,360 --> 00:25:00,652 Og igjen nå du ser gjør viser deg lenger 549 00:25:00,652 --> 00:25:03,360 sekvens av kommandoer som det er gjør fordi vi har pre-konfigurerte 550 00:25:03,360 --> 00:25:05,200 det på den måten, men vi trenger ikke bekymre deg for nå 551 00:25:05,200 --> 00:25:10,735 hva det gjør annet enn det er kompilering dot slash hallo, hallo verden. 552 00:25:10,735 --> 00:25:14,969 553 00:25:14,969 --> 00:25:15,510 Hva er galt? 554 00:25:15,510 --> 00:25:16,177 Yeah. 555 00:25:16,177 --> 00:25:17,370 >> PUBLIKUM: [uhørbart] 556 00:25:17,370 --> 00:25:18,203 >> DAVID J. MALAN: Ja. 557 00:25:18,203 --> 00:25:19,600 Så, noobie feil. 558 00:25:19,600 --> 00:25:22,394 Jeg merker dette er super subtil, men stjernen her, i den kategorien, 559 00:25:22,394 --> 00:25:25,060 betyr bare at du ikke har lagret det, og nettlesere og andre programmer 560 00:25:25,060 --> 00:25:25,930 gjøre dette noen ganger. 561 00:25:25,930 --> 00:25:27,939 Så kontroll sy eller kommando s bør lagre det. 562 00:25:27,939 --> 00:25:29,730 Nå la meg gå videre og re-kjøre programmet. 563 00:25:29,730 --> 00:25:33,360 564 00:25:33,360 --> 00:25:34,260 Rekompileres. 565 00:25:34,260 --> 00:25:36,050 Høyre, så det er en multi-trinns prosess. 566 00:25:36,050 --> 00:25:39,400 Ingen av dem er særlig komplisert, men helst vi endre filen, 567 00:25:39,400 --> 00:25:43,450 vi må endre den resulterende nuller og enere, og dot slash hei. 568 00:25:43,450 --> 00:25:43,950 Wow. 569 00:25:43,950 --> 00:25:46,450 Så dette er veldig uimponerende at vi bare skrevet ut dette. 570 00:25:46,450 --> 00:25:48,360 La oss gjøre ting litt mer dynamisk, nå. 571 00:25:48,360 --> 00:25:52,280 >> Vel det viser seg, at liker Scratch, støtter C variabler. 572 00:25:52,280 --> 00:25:54,790 Og det viser seg hvis du vil å ha en variabel som lagrer, 573 00:25:54,790 --> 00:25:57,300 ikke et tall som vi vanligvis gjorde med Scratch, 574 00:25:57,300 --> 00:26:01,300 men som et ord, eller en setning, eller et navn, du 575 00:26:01,300 --> 00:26:04,837 kan angi en variabel være av type streng. 576 00:26:04,837 --> 00:26:06,670 Så vi får se mer av disse i bare et øyeblikk, 577 00:26:06,670 --> 00:26:09,090 men det viser seg at C, og en rekke språk som det, 578 00:26:09,090 --> 00:26:11,240 har svært spesifikke typer av variable. 579 00:26:11,240 --> 00:26:13,810 Det er ikke akkurat som algebra, hvor du får en x, en y og z 580 00:26:13,810 --> 00:26:16,940 og de er bare alltid tall, i et programmeringsspråk 581 00:26:16,940 --> 00:26:20,030 du kan lagre numre, kan du lagre individuelle tegn, 582 00:26:20,030 --> 00:26:24,619 du kan lagre hele ord, du kan lagre hele bilder, hele lydfiler, 583 00:26:24,619 --> 00:26:25,160 og lignende. 584 00:26:25,160 --> 00:26:28,362 Så vi trenger å spesifisere hva typen av vår er variabel. 585 00:26:28,362 --> 00:26:31,570 Og etter konvensjonen skal jeg ringe min variable s bare fordi det er kortfattet, 586 00:26:31,570 --> 00:26:33,510 og s står for streng. 587 00:26:33,510 --> 00:26:36,400 >> Og så kommer jeg til å lagre innsiden av denne variable, 588 00:26:36,400 --> 00:26:39,570 akkurat som med Scratch når jeg bruker settet blokken, 589 00:26:39,570 --> 00:26:41,950 Jeg kommer til å bruke den oppdrag operatør i C, 590 00:26:41,950 --> 00:26:45,290 som pent nok er den lik signere, men likhetstegnet gjør dette. 591 00:26:45,290 --> 00:26:53,220 Den beveger seg noe fra høyre inn den venstre side av uttrykket. 592 00:26:53,220 --> 00:26:57,170 Så det jeg har gjort, for å være klar i linje fem, er jeg har erklært en variabel. 593 00:26:57,170 --> 00:27:01,284 Jeg har fortalt datamaskinen, gi meg minne for en variabel, kaller det s, 594 00:27:01,284 --> 00:27:03,950 og vet på forhånd at jeg kommer å være å sette en streng på den. 595 00:27:03,950 --> 00:27:05,950 Og en streng er bare en sekvens av tegn. 596 00:27:05,950 --> 00:27:09,190 Det er et ord eller en setning eller avsnitt, men det er en sekvens av tegn. 597 00:27:09,190 --> 00:27:10,610 Det er ikke tall. 598 00:27:10,610 --> 00:27:13,800 Hva string jeg kommer til å være sette inn den variabelen? 599 00:27:13,800 --> 00:27:16,185 Vel, tydeligvis sitere unquote, "Hannah". 600 00:27:16,185 --> 00:27:17,810 Nå legger merke til mønsteret som er voksende. 601 00:27:17,810 --> 00:27:19,260 Det er en venstre uttrykk. 602 00:27:19,260 --> 00:27:21,810 Det er en høyre hånd uttrykk, adskilt av likhetstegnet. 603 00:27:21,810 --> 00:27:24,390 Og bare ta en gjetning, hvis ukjente likevel, 604 00:27:24,390 --> 00:27:27,430 med hva semikolon gjør. 605 00:27:27,430 --> 00:27:28,865 Hva er det antagelig gjør for oss? 606 00:27:28,865 --> 00:27:29,365 Yeah? 607 00:27:29,365 --> 00:27:29,840 >> PUBLIKUM: [uhørbart] 608 00:27:29,840 --> 00:27:29,980 >> DAVID J. MALAN: Yeah. 609 00:27:29,980 --> 00:27:31,170 Det er bare å avslutte linjen. 610 00:27:31,170 --> 00:27:31,669 Høyre? 611 00:27:31,669 --> 00:27:34,260 Datamaskinene ønsker å være rett ut fortalt, bokstavelig talt, hva du skal gjøre. 612 00:27:34,260 --> 00:27:36,343 I likhet med peanøttsmør og gelé sandwich eksempel 613 00:27:36,343 --> 00:27:39,360 Hvis du ikke angir nøyaktig hva du har tenkt, 614 00:27:39,360 --> 00:27:42,190 det kan bli overlatt til dom eller feil. 615 00:27:42,190 --> 00:27:44,890 Semikolon betyr, det er det for denne kommandoen. 616 00:27:44,890 --> 00:27:48,310 Det er å være super presis, og det er en veldig enkel ting å la være. 617 00:27:48,310 --> 00:27:52,240 Så nå dette programmet ser ikke ut til skal oppføre seg noe annerledes før jeg 618 00:27:52,240 --> 00:27:53,500 gjøre den mer dynamisk. 619 00:27:53,500 --> 00:27:57,107 Så i stedet for hardt kunne min egen navn, la meg sette en plassholder verdi. 620 00:27:57,107 --> 00:28:00,190 Og det viser seg at, og jeg vet dette fra å ha lest dokumentasjonen, 621 00:28:00,190 --> 00:28:04,080 og brukt funksjon i mange år, som printf er designet for å være dynamisk. 622 00:28:04,080 --> 00:28:07,510 Du trenger ikke å vite på forhånd hvilke ord du vil legge i det. 623 00:28:07,510 --> 00:28:11,290 Du kan i stedet ha en plassholder, som prosent s, noe som 624 00:28:11,290 --> 00:28:15,500 kommer til å fortelle datamaskinen, sette en streng her. 625 00:28:15,500 --> 00:28:17,740 >> Hvilke string ønsker vi å sette det? 626 00:28:17,740 --> 00:28:22,430 Will viser seg at mellom disse parentes, som huskes, avgrense 627 00:28:22,430 --> 00:28:28,020 inngangen til en funksjon, hvis du har kommaseparert liste over ting her, 628 00:28:28,020 --> 00:28:31,790 vi faktisk passere i flere innganger til en funksjon. 629 00:28:31,790 --> 00:28:33,901 Så bare liker noen Scratch blokker, kan du ikke 630 00:28:33,901 --> 00:28:36,150 har spilt med dem for prosjektene ennå, eller i det hele tatt, 631 00:28:36,150 --> 00:28:38,250 noen skrape blokkene har to innganger. 632 00:28:38,250 --> 00:28:41,220 To hvite bokser du kan skrive inn tall eller ord i. 633 00:28:41,220 --> 00:28:45,210 Så for å ikke C har funksjoner som printf som kan ta to innganger. 634 00:28:45,210 --> 00:28:48,050 Og igjen, dette komma er å skille dem. 635 00:28:48,050 --> 00:28:51,070 Så i engelsk, igjen selv om du aldri har programmert før, 636 00:28:51,070 --> 00:28:55,320 ved at logikken printf er en funksjon, tar to innganger, hvorav den ene 637 00:28:55,320 --> 00:28:58,810 er en plassholder, hva ville du håper printf kommer til å gjøre med denne inngangen? 638 00:28:58,810 --> 00:29:01,470 639 00:29:01,470 --> 00:29:03,220 Det kommer til å si hei Hannah, forhåpentligvis. 640 00:29:03,220 --> 00:29:05,274 Så for å gjøre dette trenger vi å lagre det. 641 00:29:05,274 --> 00:29:06,190 Jeg kommer til å zoome ut. 642 00:29:06,190 --> 00:29:10,701 Jeg kommer til å gå ned igjen her og si, gjøre hei enter. 643 00:29:10,701 --> 00:29:11,200 Oh. 644 00:29:11,200 --> 00:29:14,830 Noe er galt, og faktisk dette er ganske overveldende. 645 00:29:14,830 --> 00:29:18,400 Jeg har seks linjer med kode og som 12 linjer med feil. 646 00:29:18,400 --> 00:29:22,120 Så, ser frem til dette. 647 00:29:22,120 --> 00:29:24,260 Så hva er det som skjer her? 648 00:29:24,260 --> 00:29:27,370 Så den beste tommelfingerregel her, spesielt når du starter opp, 649 00:29:27,370 --> 00:29:29,370 ikke bli distrahert av ting på bunnen. 650 00:29:29,370 --> 00:29:31,220 Faktisk, jeg veldig bevisst bare rulles opp 651 00:29:31,220 --> 00:29:33,930 fordi svært ofte, er en datamaskin ikke alle som lys av en enhet. 652 00:29:33,930 --> 00:29:35,054 Det kommer til å bli forvirret. 653 00:29:35,054 --> 00:29:37,220 Hvis det ser en ting som den ikke forstår, 654 00:29:37,220 --> 00:29:40,030 det kanskje feil andre linjer med kode som er feil, 655 00:29:40,030 --> 00:29:41,649 selv om de er helt greit. 656 00:29:41,649 --> 00:29:43,940 Slik at du alltid vil jobbe ovenfra og ned gjennom feilene. 657 00:29:43,940 --> 00:29:47,850 Og riktignok er dette super uforståelige for øyeblikket. 658 00:29:47,850 --> 00:29:50,830 >> Feil, bruk av svart identifikator streng. 659 00:29:50,830 --> 00:29:52,130 Sa jeg mener standard i? 660 00:29:52,130 --> 00:29:53,720 Nei, jeg mente streng. 661 00:29:53,720 --> 00:29:55,830 Og det er å peke på, kanskje det er en skrivefeil. 662 00:29:55,830 --> 00:30:00,570 Liksom som, stavekontroll i en veldig nerdete måte, men årsaken her, 663 00:30:00,570 --> 00:30:02,840 og du vet dette bare i praksis, er 664 00:30:02,840 --> 00:30:06,390 at det viser seg at strengen ikke finnes i C. Faktisk C 665 00:30:06,390 --> 00:30:08,820 er en spesielt gammel språk, og det er veldig lavt nivå, 666 00:30:08,820 --> 00:30:11,361 og det gjør ikke en masse funksjoner som du kanskje har vokst opp 667 00:30:11,361 --> 00:30:14,620 med hvis du har, faktisk, programmert i Java, som noen av dere har, 668 00:30:14,620 --> 00:30:16,980 men du kan lære den nye ting. 669 00:30:16,980 --> 00:30:20,900 Og ja, vi har gjort dette CS50, selv om ved slutten av semesteret, 670 00:30:20,900 --> 00:30:23,512 alle disse trening hjul skal ha blitt tatt av, 671 00:30:23,512 --> 00:30:25,220 hva vi gjør i disse første par ukene 672 00:30:25,220 --> 00:30:29,830 utgangspunktet er vi også du inkluderer CS50 dot h. 673 00:30:29,830 --> 00:30:31,230 Som er en header fil. 674 00:30:31,230 --> 00:30:32,440 Mer om det i fremtiden. 675 00:30:32,440 --> 00:30:36,430 >> Det er en fil som inneholder funksjoner at vi har skrevet for deg. 676 00:30:36,430 --> 00:30:39,180 Og blant disse funksjonene er funksjoner for å få innspill 677 00:30:39,180 --> 00:30:43,520 fra brukeren, som strenger, og tall og reelle tall, og mer. 678 00:30:43,520 --> 00:30:45,550 Men det har også noen snarveier. 679 00:30:45,550 --> 00:30:48,200 Den definerer en boolsk som en datatype. 680 00:30:48,200 --> 00:30:50,340 C har ikke sant eller usant. 681 00:30:50,340 --> 00:30:53,880 Men vi kan gi den oppfatningen av sann eller usann ved hjelp av dette biblioteket. 682 00:30:53,880 --> 00:30:57,670 Og det heller ikke har en streng bygget inn før vi inkludere denne linjen. 683 00:30:57,670 --> 00:31:01,090 Så denne linjen med kode forteller kompilatoren, hei, klang, se 684 00:31:01,090 --> 00:31:03,570 inn for en hel denne filen haug med kode som CS50 685 00:31:03,570 --> 00:31:06,330 har skrevet slik at alle som bruker denne filen 686 00:31:06,330 --> 00:31:09,330 kan ta for gitt funksjoner de har lagt. 687 00:31:09,330 --> 00:31:11,220 >> Så nå la meg gå videre og klare skjermen, 688 00:31:11,220 --> 00:31:14,178 og hvis nysgjerrig jeg sier bare kontroll l hver gang for å tømme skjermen, 689 00:31:14,178 --> 00:31:15,500 eller du kan skrive klart. 690 00:31:15,500 --> 00:31:19,220 Jeg skal bare gå videre nå og typen gjør hallo, og alt er vel. 691 00:31:19,220 --> 00:31:22,550 Fortsatt en uforståelige utgang, men det er ikke en feilaktig melding. 692 00:31:22,550 --> 00:31:28,300 Men gjør jeg dot slash hei, og som en side, er dot slash ukjent for de fleste. 693 00:31:28,300 --> 00:31:30,430 Det betyr bare, prikk betyr gjeldende katalog. 694 00:31:30,430 --> 00:31:33,120 Så hvis du noen gang har brukt DOS eller Linux eller Unix 695 00:31:33,120 --> 00:31:35,410 du kanskje har gjort noe som cd dot dot, der 696 00:31:35,410 --> 00:31:39,220 dot dot betyr gå bakover i tid, eller gå bakover, eller høyere opp 697 00:31:39,220 --> 00:31:40,370 i katalogen din. 698 00:31:40,370 --> 00:31:43,090 Prikk betyr bare se på gjeldende katalog. 699 00:31:43,090 --> 00:31:45,670 Jeg ønsker hallo, som er rett her. 700 00:31:45,670 --> 00:31:47,750 Og ja, nå står det hallo Hannah. 701 00:31:47,750 --> 00:31:51,120 Og hvis jeg endrer den igjen til Maria, rekompilere 702 00:31:51,120 --> 00:31:55,650 det ville gjøre hallo, dot slash hei, holder programmet endring. 703 00:31:55,650 --> 00:31:58,060 >> Men dette er fortsatt en ganske dumt program. 704 00:31:58,060 --> 00:32:00,972 Hvis jeg ønsker å sende dette programmet, eller gi det til en venn, 705 00:32:00,972 --> 00:32:03,430 eller gi det til Maria eller Hannah for den saks skyld, er det helt greit. 706 00:32:03,430 --> 00:32:07,300 Jeg kan tilpasse den for dem begge, men det er aldri kommer til å være dynamisk. 707 00:32:07,300 --> 00:32:10,870 De kan ikke endre det når den er kompilert ned i de nuller og enere. 708 00:32:10,870 --> 00:32:12,350 Så det vi gjorde noe smartere? 709 00:32:12,350 --> 00:32:17,100 Hva om, i stedet for hard-koding inn i programmet denne personens navn, 710 00:32:17,100 --> 00:32:20,890 hva om vi bare får strengen på forespørsel? 711 00:32:20,890 --> 00:32:22,430 >> Så med andre ord, la meg gjøre dette. 712 00:32:22,430 --> 00:32:24,030 Jeg kommer til å rekompilere dette programmet. 713 00:32:24,030 --> 00:32:25,710 Og la meg zoome inn på bunnen nå. 714 00:32:25,710 --> 00:32:29,920 Gjør hallo dot slash hei. 715 00:32:29,920 --> 00:32:31,710 Nå ingenting skjer. 716 00:32:31,710 --> 00:32:35,860 Kan vi få en rask frivillig å gjøre noe skje? 717 00:32:35,860 --> 00:32:36,360 Kom opp. 718 00:32:36,360 --> 00:32:37,020 Hva er navnet ditt? 719 00:32:37,020 --> 00:32:37,445 >> PANCHO: Pancho. 720 00:32:37,445 --> 00:32:38,361 >> DAVID J. MALAN: Pacho? 721 00:32:38,361 --> 00:32:39,609 Kom opp. 722 00:32:39,609 --> 00:32:42,150 Når du får opp her, er dette kommer til å være veldig uimponerende, 723 00:32:42,150 --> 00:32:44,060 men det er mer interessant enn meg å skrive det. 724 00:32:44,060 --> 00:32:49,007 Hvis du ønsker å gå videre og skriv din navn, gjorde jeg dette programmet for deg. 725 00:32:49,007 --> 00:32:49,840 Bare skriv inn navnet ditt. 726 00:32:49,840 --> 00:32:52,380 727 00:32:52,380 --> 00:32:53,900 Enter. 728 00:32:53,900 --> 00:32:54,489 Fantastisk. 729 00:32:54,489 --> 00:32:55,780 Ok, takk skal du ha veldig mye. 730 00:32:55,780 --> 00:32:56,708 >> PANCHO: Tusen takk. 731 00:32:56,708 --> 00:32:57,636 >> DAVID J. MALAN: OK. 732 00:32:57,636 --> 00:32:59,028 >> [APPLAUSE] 733 00:32:59,028 --> 00:33:00,884 734 00:33:00,884 --> 00:33:01,840 >> Det var veldig snilt. 735 00:33:01,840 --> 00:33:03,145 Vær så god. 736 00:33:03,145 --> 00:33:03,770 Hva gjorde vi? 737 00:33:03,770 --> 00:33:05,930 Så vi endelig, minst, gjort dette programmet dynamisk. 738 00:33:05,930 --> 00:33:08,400 Nå er det fortsatt sikkert ved design uimponerende, 739 00:33:08,400 --> 00:33:11,480 men vi endelig har muligheten nå å skrive kode på forhånd, mye 740 00:33:11,480 --> 00:33:13,770 som forfatterne av printf, og deretter dynamisk 741 00:33:13,770 --> 00:33:17,550 ADAPT basert på innspill vi er levert, enten av programmerer, 742 00:33:17,550 --> 00:33:20,610 eller ved det menneskelige som faktisk samspill med programmet. 743 00:33:20,610 --> 00:33:22,990 Så la oss faktisk nå prøve å gjøre et par andre konstruksjoner 744 00:33:22,990 --> 00:33:26,625 og se om vi ikke kan gjøre programmene seg mer sofistikert. 745 00:33:26,625 --> 00:33:29,250 Så la oss gå videre og i stedet for skriver dette fra bunnen av, 746 00:33:29,250 --> 00:33:31,540 Jeg kommer til å gå inn i dagens kildekode, og all denne 747 00:33:31,540 --> 00:33:34,290 er tilgjengelig på kursets nettside, og du kan dra og slippe det 748 00:33:34,290 --> 00:33:36,590 inn i ditt eget miljø kommer fredag ​​gang problem 749 00:33:36,590 --> 00:33:38,506 sett 1 gir deg instruksjoner, eller du kan 750 00:33:38,506 --> 00:33:41,200 gjøre det på kommandolinjen som godt, men mer for å komme inn p sette en. 751 00:33:41,200 --> 00:33:44,940 >> La oss se hva som er i dette programmet her kalt, huggorm dot c. 752 00:33:44,940 --> 00:33:47,970 Nå har jeg allerede kommentert det, men hva er nytt? 753 00:33:47,970 --> 00:33:51,230 Ved første øyekast, hvilken linje kode er helt nytt? 754 00:33:51,230 --> 00:33:53,930 755 00:33:53,930 --> 00:33:56,780 Sannsynligvis ikke fundamentalt uvant nå. 756 00:33:56,780 --> 00:33:58,417 >> PUBLIKUM: [uhørbart] 757 00:33:58,417 --> 00:34:00,250 DAVID J. MALAN: Ja, så int x lik få n. 758 00:34:00,250 --> 00:34:03,760 Vi har aldri sett noe av dette før, men er sannsynligvis int 759 00:34:03,760 --> 00:34:08,179 symbolet for hva slags variabel, [? fra?] et heltall. 760 00:34:08,179 --> 00:34:09,040 Så int for heltall. 761 00:34:09,040 --> 00:34:11,420 Det er bare å være mer konsis. x er bare tilfeldig. 762 00:34:11,420 --> 00:34:13,920 x og y og z er fremdeles ganske rimelig for tall, 763 00:34:13,920 --> 00:34:16,790 men generelt vil vi bruke ordene en gang våre programmer blir mer komplekse. 764 00:34:16,790 --> 00:34:18,940 Få int, selvfølgelig, mye som get streng, 765 00:34:18,940 --> 00:34:21,629 er trolig kommer til å få en int fra brukeren, 766 00:34:21,629 --> 00:34:23,670 og så skal vi gjøre det samme med y. 767 00:34:23,670 --> 00:34:27,610 Og tilsynelatende, selv om denne siste linje, 24, ser mer kompleks, 768 00:34:27,610 --> 00:34:32,679 det kommer til å si summen av dette og at dette er andre ting. 769 00:34:32,679 --> 00:34:35,840 >> Og legg merke prosent i sannsynligvis betegner hva? 770 00:34:35,840 --> 00:34:38,190 Hvilken rolle spiller prosent Jeg tilsynelatende tjene? 771 00:34:38,190 --> 00:34:40,739 772 00:34:40,739 --> 00:34:41,719 Det er bare plassholdere. 773 00:34:41,719 --> 00:34:42,219 Høyre? 774 00:34:42,219 --> 00:34:45,149 Prosent s var for streng, prosent i er for heltall. 775 00:34:45,149 --> 00:34:47,690 Det kommer til å bli prosent f for flyttall, som 776 00:34:47,690 --> 00:34:49,273 er bare et tall med en desimal. 777 00:34:49,273 --> 00:34:50,590 Med andre ord, et reelt tall. 778 00:34:50,590 --> 00:34:55,270 Så la oss faktisk kompilere dette programmere virkelig rask og gjør huggorm. 779 00:34:55,270 --> 00:34:57,962 Uff da. 780 00:34:57,962 --> 00:34:58,670 God mulighet. 781 00:34:58,670 --> 00:35:02,970 Så legger merke til her, hele denne tiden min brukeren navn for denne kontoen er jharvard. 782 00:35:02,970 --> 00:35:06,620 Jeg er i CS50 IDE, aka IDE50. 783 00:35:06,620 --> 00:35:11,030 Og nå i blått her, er en omtale, men fra miljøet, hvor jeg er. 784 00:35:11,030 --> 00:35:16,050 Og faktisk, hvis jeg zoomer opp til toppen her, merker at jeg har en IDE50 785 00:35:16,050 --> 00:35:19,490 og jeg ser dette ordet, hvis du slags snu hodet til siden, arbeidsområdet. 786 00:35:19,490 --> 00:35:23,890 Kort sagt, det faktum at Jeg ser tilde slash arbeidsområde 787 00:35:23,890 --> 00:35:26,910 betyr at i denne teksten basert kommandolinje miljø, 788 00:35:26,910 --> 00:35:32,300 Jeg er i teksten tilsvarer Denne grafiske mappe opp her. 789 00:35:32,300 --> 00:35:35,730 Så når jeg gjør dot slash huggorm, det sier ingen regel 790 00:35:35,730 --> 00:35:37,372 for å gjøre målet huggorm stopp. 791 00:35:37,372 --> 00:35:39,830 Jeg vet ikke hva det betyr, men det er dårlig for noen grunn. 792 00:35:39,830 --> 00:35:43,310 Ingen slik fil eller katalog er enda mer tydelig. 793 00:35:43,310 --> 00:35:45,670 Hvor er det da? 794 00:35:45,670 --> 00:35:47,820 Basert på hvor jeg klikket å åpne filen tidligere. 795 00:35:47,820 --> 00:35:49,442 Der kan det være? 796 00:35:49,442 --> 00:35:52,050 >> Det er trolig i kilde ett m, for onsdag 797 00:35:52,050 --> 00:35:53,960 og jeg kan se det, ja, hvis jeg åpner det opp. 798 00:35:53,960 --> 00:35:57,220 Det er adderer dot c, men i denne teksten-basert miljø, 799 00:35:57,220 --> 00:35:59,380 igjen, må jeg være super eksplisitt. 800 00:35:59,380 --> 00:36:03,950 Hvis jeg ønsker å endre kataloger inn kilde én onsdag, trenger jeg å skrive, 801 00:36:03,950 --> 00:36:07,210 cd plass kilde én Onsdag gå inn og nå 802 00:36:07,210 --> 00:36:09,810 mine spør endringer gi meg et visuelt signal om at 803 00:36:09,810 --> 00:36:12,330 Jeg er faktisk andre steder i mitt miljø, 804 00:36:12,330 --> 00:36:15,710 men nå kan jeg gjør huggorm, synes det til å fungere, 805 00:36:15,710 --> 00:36:18,190 dot slash huggorm, gi meg et heltall. 806 00:36:18,190 --> 00:36:19,080 En. 807 00:36:19,080 --> 00:36:20,070 Two. 808 00:36:20,070 --> 00:36:21,630 Summen av en og to er tre. 809 00:36:21,630 --> 00:36:24,140 Men hvis jeg ikke samarbeider, la oss se hva får int gjør. 810 00:36:24,140 --> 00:36:25,200 Gi meg et heltall. 811 00:36:25,200 --> 00:36:26,590 Nei. 812 00:36:26,590 --> 00:36:27,350 Prøv på nytt. 813 00:36:27,350 --> 00:36:29,060 OK. 814 00:36:29,060 --> 00:36:30,520 Greit. 815 00:36:30,520 --> 00:36:32,130 50. 816 00:36:32,130 --> 00:36:32,680 50. 817 00:36:32,680 --> 00:36:33,010 Greit. 818 00:36:33,010 --> 00:36:34,055 Så det endelig samarbeider. 819 00:36:34,055 --> 00:36:36,430 Og det er noe av det funksjonalitet som disse funksjonene 820 00:36:36,430 --> 00:36:37,760 kan ha innebygd for deg. 821 00:36:37,760 --> 00:36:43,330 >> Så inne i gjennomføringen av få int, hva programmering 822 00:36:43,330 --> 00:36:47,990 konstruere fra forrige uke er trolig i det å tvinge denne oppførselen retry, 823 00:36:47,990 --> 00:36:49,962 prøve på nytt, prøve på nytt? 824 00:36:49,962 --> 00:36:51,670 Ja, det er nok en slags loop. 825 00:36:51,670 --> 00:36:54,160 Det kommer til å se syntaktisk forskjellig fra Scratch er blokker, 826 00:36:54,160 --> 00:36:55,880 men det er faktisk hva som er inne i filen. 827 00:36:55,880 --> 00:36:58,505 Og i et par ukers tid vil vi faktisk se på CS50 biblioteket 828 00:36:58,505 --> 00:37:02,000 med hensyn til hva som er inni, men det er en løkke imponerende akkurat det. 829 00:37:02,000 --> 00:37:04,840 >> La oss spille en dum liten spillet her med denne filen. 830 00:37:04,840 --> 00:37:06,550 Tilstand null dot c. 831 00:37:06,550 --> 00:37:08,960 Vi skal bare generelt begynner å telle på null. 832 00:37:08,960 --> 00:37:11,220 Og jeg holder rulle forbi noen av tingene på toppen. 833 00:37:11,220 --> 00:37:15,390 I blå her, avgrenset med alle av disse stjernene og skråstreker, 834 00:37:15,390 --> 00:37:17,310 de av dere som programmerer før, hva er det? 835 00:37:17,310 --> 00:37:18,690 Hvorfor fortsetter vi å hoppe over det? 836 00:37:18,690 --> 00:37:19,110 Hva? 837 00:37:19,110 --> 00:37:19,490 >> PUBLIKUM: Det er en kommentar. 838 00:37:19,490 --> 00:37:19,800 >> DAVID J. MALAN: Yeah. 839 00:37:19,800 --> 00:37:20,633 Det er bare en kommentar. 840 00:37:20,633 --> 00:37:24,160 Dette er en kommentar til mennesker å lese, som i vårt tilfelle, 841 00:37:24,160 --> 00:37:27,120 forteller oss hva navnet på filen er, som skrev den, og hva den gjør, 842 00:37:27,120 --> 00:37:28,610 slik at du ikke trenger å lese gjennom koden 843 00:37:28,610 --> 00:37:30,110 å vite hva denne filen handler om. 844 00:37:30,110 --> 00:37:33,110 Det er bare en beskrivelse, men funksjonelt det er irrelevant. 845 00:37:33,110 --> 00:37:35,930 Og jeg kan også slette det fra filen min og det har ingen innvirkning. 846 00:37:35,930 --> 00:37:38,740 De saftige linjene er disse to første her, nå. 847 00:37:38,740 --> 00:37:41,405 int main tomrommet er tilsvar av vår når grønt flagg klikket, 848 00:37:41,405 --> 00:37:44,030 så vi kommer til å la det være for i dag, og vi vil komme tilbake, 849 00:37:44,030 --> 00:37:46,940 til slutt, med hensyn til hva int og tomrommet er, men nå, 850 00:37:46,940 --> 00:37:49,500 Legg merke til hva jeg har gjort her også, kan du også, 851 00:37:49,500 --> 00:37:51,736 hvis du har en i kø kommentere, hvis du har 852 00:37:51,736 --> 00:37:54,670 en trodde du ønsker å dele om en bestemt linje med kode, 853 00:37:54,670 --> 00:37:58,910 stevne i C er å gjøre slash slash, og deretter noen få fyndig ord, 854 00:37:58,910 --> 00:38:01,500 ikke en hel setning, vanligvis ikke et avsnitt, 855 00:38:01,500 --> 00:38:05,310 som bare forklarer til deg, eller din TF eller andre lesere eller kolleger, 856 00:38:05,310 --> 00:38:06,990 hva koden gjør. 857 00:38:06,990 --> 00:38:10,150 Så i stedet for å lete på dette og slutte fra linjer 858 00:38:10,150 --> 00:38:12,550 ni og 10, hvilke er dette gjør, i tråd åtte 859 00:38:12,550 --> 00:38:14,945 Jeg bare gi en kommentar til spør brukeren om et heltall, 860 00:38:14,945 --> 00:38:17,820 så jeg ikke trenger å tenke for hardt om hvilke linjer ni og 10 er. 861 00:38:17,820 --> 00:38:19,720 Jeg bare vet at det er det kollektivt de gjør. 862 00:38:19,720 --> 00:38:20,460 >> Hvordan? 863 00:38:20,460 --> 00:38:22,060 Vel, her er spørsmålet. 864 00:38:22,060 --> 00:38:23,610 Her er det få av int. 865 00:38:23,610 --> 00:38:25,984 Og basert på den tidligere atferd, virker det som get int 866 00:38:25,984 --> 00:38:29,080 er smart nok til å sørge for at det menneskelige samvirker og gir det 867 00:38:29,080 --> 00:38:30,090 et heltall. 868 00:38:30,090 --> 00:38:32,270 Men nå ser vi dette. 869 00:38:32,270 --> 00:38:33,740 Og dette minner om Scratch. 870 00:38:33,740 --> 00:38:36,140 Jeg påstår at jeg er analysere brukerens input, 871 00:38:36,140 --> 00:38:39,050 men noe unøyaktig. 872 00:38:39,050 --> 00:38:43,200 Og dette tilsynelatende i C er hvordan uttrykker vi en if annet, en gren, 873 00:38:43,200 --> 00:38:46,320 en gaffel i veien, men jeg si noe unøyaktig. 874 00:38:46,320 --> 00:38:50,470 Hva er feil i dette programmet? 875 00:38:50,470 --> 00:38:51,610 Om lenger bak? 876 00:38:51,610 --> 00:38:52,223 Yeah. 877 00:38:52,223 --> 00:38:53,150 >> PUBLIKUM: [uhørlig] null. 878 00:38:53,150 --> 00:38:54,025 >> DAVID J. MALAN: Yeah. 879 00:38:54,025 --> 00:38:57,630 Så hvis jeg skriver i null, la oss vurdere akkurat dette tilfellet, eller hjørne tilfellet, 880 00:38:57,630 --> 00:38:58,450 Hvis du vil. 881 00:38:58,450 --> 00:39:02,790 Så hvis jeg skriver i null, som av blokker skal tilsynelatende ta tak i det? 882 00:39:02,790 --> 00:39:04,660 If eller annet? 883 00:39:04,660 --> 00:39:07,340 Den andre, og det kommer til å si, du plukket et negativt tall. 884 00:39:07,340 --> 00:39:10,476 Og ja, er null ikke ment for å være positiv eller negativ, 885 00:39:10,476 --> 00:39:11,850 og så det ville være feilaktig. 886 00:39:11,850 --> 00:39:12,930 Det ville være en feil. 887 00:39:12,930 --> 00:39:14,580 Så hvordan kan vi fikse dette? 888 00:39:14,580 --> 00:39:16,360 Noen som aldri har programmert før? 889 00:39:16,360 --> 00:39:16,570 Vil du ha-- 890 00:39:16,570 --> 00:39:17,480 >> PUBLIKUM: [uhørbart] 891 00:39:17,480 --> 00:39:17,990 >> DAVID J. MALAN: Trekke? 892 00:39:17,990 --> 00:39:18,570 >> PUBLIKUM: [uhørbart] 893 00:39:18,570 --> 00:39:18,930 >> DAVID J. MALAN: Oh, har du? 894 00:39:18,930 --> 00:39:20,350 Noen som aldri har programmert før. 895 00:39:20,350 --> 00:39:21,750 Lyst til å prøve deg på Dette, i rød skjorte? 896 00:39:21,750 --> 00:39:22,600 Kom opp. 897 00:39:22,600 --> 00:39:25,320 Oh yeah, kom opp, hvis du ikke har noe imot. 898 00:39:25,320 --> 00:39:27,586 Så aldri har programmert før, hva heter du? 899 00:39:27,586 --> 00:39:28,210 LAUREN: Lauren. 900 00:39:28,210 --> 00:39:29,626 DAVID J. MALAN: Lauren, all right. 901 00:39:29,626 --> 00:39:31,150 Så fikse denne feilen for oss. 902 00:39:31,150 --> 00:39:35,070 Du har ikke sett C, formodentlig, og sannsynligvis ingen andre språk. 903 00:39:35,070 --> 00:39:38,380 Så fikse dette programmet for oss. 904 00:39:38,380 --> 00:39:39,100 Hyggelig å møte ya. 905 00:39:39,100 --> 00:39:39,615 Ikke noe press. 906 00:39:39,615 --> 00:39:40,156 LAUREN: Yeah. 907 00:39:40,156 --> 00:39:43,350 908 00:39:43,350 --> 00:39:46,270 >> DAVID J. MALAN: Men igjen, hvis dette gamble går etter planen, 909 00:39:46,270 --> 00:39:48,350 takeaway her vil være bare en gang, for å starte 910 00:39:48,350 --> 00:39:51,080 å legge merke til mønstre og slutte fra eksisterende syntaks 911 00:39:51,080 --> 00:39:55,420 hvordan du ellers måtte uttrykke selv, no pun intended, for 912 00:39:55,420 --> 00:39:58,410 å fange noen ekstra scenario. 913 00:39:58,410 --> 00:39:59,603 Så vi sier annet hvis. 914 00:39:59,603 --> 00:40:04,040 915 00:40:04,040 --> 00:40:05,230 printf, bra. 916 00:40:05,230 --> 00:40:09,120 Og legg merke til med CS50 IDE, og frankly-- IDE 917 00:40:09,120 --> 00:40:11,110 står for Integrated Development Environment. 918 00:40:11,110 --> 00:40:14,110 Det er bare en fancy måte å si et program som hjelper deg program. 919 00:40:14,110 --> 00:40:16,779 Det gjør brukervennlige ting som Når du skriver en parentes, 920 00:40:16,779 --> 00:40:18,320 det automatisk gir deg den andre. 921 00:40:18,320 --> 00:40:20,760 Antakelsen er at du er til slutt kommer til å ønske å skrive det, 922 00:40:20,760 --> 00:40:22,400 og det også gjør det med sitater. 923 00:40:22,400 --> 00:40:24,190 >> Så jeg liker linje 23. 924 00:40:24,190 --> 00:40:26,400 99% av veien dit. 925 00:40:26,400 --> 00:40:29,920 Noen ønsker å kiming i med et tips? 926 00:40:29,920 --> 00:40:31,420 Jeg hørte semikolon fra publikum. 927 00:40:31,420 --> 00:40:32,080 Good. 928 00:40:32,080 --> 00:40:33,260 Så det helt. 929 00:40:33,260 --> 00:40:37,930 Og nå vil jeg bare ha en liten bestyrtelse med linje 21. 930 00:40:37,930 --> 00:40:41,370 Hvordan ønsker vi å uttrykke dette? 931 00:40:41,370 --> 00:40:43,370 Hvilket spørsmål ønsker vi å spørre, tror du? 932 00:40:43,370 --> 00:40:46,870 933 00:40:46,870 --> 00:40:50,330 Så tidligere vi stilte spørsmålet, dersom n er større enn null, gjør dette. 934 00:40:50,330 --> 00:40:51,870 Else, gjør det. 935 00:40:51,870 --> 00:40:54,317 Så vi må velge en spørsmål å stille her. 936 00:40:54,317 --> 00:40:55,192 PUBLIKUM: [uhørbart] 937 00:40:55,192 --> 00:40:56,530 DAVID J. MALAN: Good. 938 00:40:56,530 --> 00:40:58,290 Slik at hvis n er lik null. 939 00:40:58,290 --> 00:41:01,140 940 00:41:01,140 --> 00:41:02,100 Utmerket. 941 00:41:02,100 --> 00:41:03,080 Så la oss ta en pause her. 942 00:41:03,080 --> 00:41:04,850 Takk så mye for trosset dette. 943 00:41:04,850 --> 00:41:10,890 La meg gi deg litt velfortjent stress ball, kanskje det. 944 00:41:10,890 --> 00:41:11,900 Så vi er nesten der. 945 00:41:11,900 --> 00:41:14,790 Faktisk Lauren, hvis du ikke gjør det tankene, la meg gjøre en tweak her, 946 00:41:14,790 --> 00:41:17,850 bare for å være i samsvar med enda hva vi så i Scratch, hva 947 00:41:17,850 --> 00:41:21,080 ønsker jeg å gjøre med linjer 21 og 24, bare igjen basert 948 00:41:21,080 --> 00:41:23,290 om hvordan vi gjorde dette i Scratch, kanskje? 949 00:41:23,290 --> 00:41:24,230 >> PUBLIKUM: Flytt den opp. 950 00:41:24,230 --> 00:41:25,605 >> DAVID J. MALAN: Ja, flytte den opp. 951 00:41:25,605 --> 00:41:30,260 Så ellers tilstand, den tredje, eller fjerde eller femte, eller endelig gren, 952 00:41:30,260 --> 00:41:34,100 bør faktisk kommet etterpå, og det er bare ved konvensjon, 953 00:41:34,100 --> 00:41:36,047 bare fordi hvis du vil. 954 00:41:36,047 --> 00:41:37,380 Så jeg trenger å gjøre denne tweak. 955 00:41:37,380 --> 00:41:39,660 Og jeg må sette min curly brace tilbake hit. 956 00:41:39,660 --> 00:41:42,700 Og nå, vil dette programmet kompilere. 957 00:41:42,700 --> 00:41:46,140 Vi er så nær, men det er en veldig, veldig subtil bug. 958 00:41:46,140 --> 00:41:47,200 La oss se hva som skjer. 959 00:41:47,200 --> 00:41:49,660 >> Først, la meg gå videre og zoome ut. 960 00:41:49,660 --> 00:41:53,405 Jeg kommer til å gå videre og skriv gjøre tilstanden null. 961 00:41:53,405 --> 00:41:55,070 Oh, løy jeg. 962 00:41:55,070 --> 00:41:58,760 Nå kompilatoren er faktisk ganske smart. 963 00:41:58,760 --> 00:42:00,950 Og jeg forstår ikke helt det er feilmelding. 964 00:42:00,950 --> 00:42:04,310 Bruke et resultat av et oppdrag som en tilstand uten parentes, 965 00:42:04,310 --> 00:42:05,740 er tydeligvis dårlig. 966 00:42:05,740 --> 00:42:07,100 Men hva betyr det? 967 00:42:07,100 --> 00:42:10,860 >> Vel igjen, på jakt etter mønstre i koden som vi har sett før, 968 00:42:10,860 --> 00:42:16,640 hva er linje 17 faktisk gjør, selv om Lauren ment litt 969 00:42:16,640 --> 00:42:18,790 ellers? 970 00:42:18,790 --> 00:42:19,290 Yeah. 971 00:42:19,290 --> 00:42:21,565 >> PUBLIKUM: [uhørbart] 972 00:42:21,565 --> 00:42:22,440 DAVID J. MALAN: Yeah. 973 00:42:22,440 --> 00:42:26,610 Så husk likhetstegnet, tilsynelatende som vi har brukt det før, er ikke lik. 974 00:42:26,610 --> 00:42:29,240 Dens oppdrag, fra høyre til venstre. 975 00:42:29,240 --> 00:42:33,810 Slik at linje 17 i øyeblikket er en tilstand, og det er 976 00:42:33,810 --> 00:42:37,890 utføring kode inne i parentes, men når den koden utfører, 977 00:42:37,890 --> 00:42:42,140 hva som skjer med verdien null? 978 00:42:42,140 --> 00:42:45,250 Hva som skjer med verdien av n? 979 00:42:45,250 --> 00:42:46,810 Å bli null. 980 00:42:46,810 --> 00:42:50,520 Så hvis n er blitt null, og igjen, som per i forrige uke, 981 00:42:50,520 --> 00:42:54,690 vi generelt si at null er falsk og en er sann, 982 00:42:54,690 --> 00:42:57,410 eller ja er ett og ingen er null. 983 00:42:57,410 --> 00:42:59,590 Så sant og usant, en og 0. 984 00:42:59,590 --> 00:43:06,090 Hvis n pr linje 17 har vært gitt verdien 0, er null sant? 985 00:43:06,090 --> 00:43:06,590 Nei. 986 00:43:06,590 --> 00:43:08,280 Per definisjon er null falsk. 987 00:43:08,280 --> 00:43:10,860 Det er stevnet vi er kommer til å klamre seg til fremover. 988 00:43:10,860 --> 00:43:17,320 Så vil linjene 18, 19 og 20 stadig søke nå, logisk? 989 00:43:17,320 --> 00:43:18,320 De kan ikke. 990 00:43:18,320 --> 00:43:21,640 Så vi spurte spørsmålet men ikke helt nøyaktig, 991 00:43:21,640 --> 00:43:25,620 og du ville ikke vite dette med mindre du har sett det, løsningen i C 992 00:43:25,620 --> 00:43:29,610 er når du ønsker å uttrykke likestilling, sier du likeverdige. 993 00:43:29,610 --> 00:43:33,140 Så likhetstegn var allerede brukt opp ved tildeling, fra høyre til venstre. 994 00:43:33,140 --> 00:43:35,110 Tilsvarer tilsvarer midler lik. 995 00:43:35,110 --> 00:43:37,950 Og hvis du virkelig vil hjernen din å være bøyd, i Javascript og PHP, 996 00:43:37,950 --> 00:43:40,490 det er lik lik lik, som bety noe helt annet, 997 00:43:40,490 --> 00:43:41,990 men vi får til det før lenge. 998 00:43:41,990 --> 00:43:45,760 >> Så dette er en enkel løsning, men innser super enkelt å gjøre denne feilen, 999 00:43:45,760 --> 00:43:48,700 og lurer på og kamp for minutter, hvis ikke en time, 1000 00:43:48,700 --> 00:43:51,490 hvorfor er min kode ikke utførende som jeg har tenkt? 1001 00:43:51,490 --> 00:43:54,140 Det er fordi du ikke forteller det nettopp det du mente. 1002 00:43:54,140 --> 00:43:56,450 Så det var nesten perfekt, og det var flott 1003 00:43:56,450 --> 00:44:00,760 at vi snublet over disse to litt ting fordi nå hvis vi fikse dem, 1004 00:44:00,760 --> 00:44:06,240 og jeg gjør tilstanden null dot slash tilstand null, 1005 00:44:06,240 --> 00:44:07,490 Jeg ønsker et heltall please. 1006 00:44:07,490 --> 00:44:08,090 La oss se. 1007 00:44:08,090 --> 00:44:09,160 Nei. 1008 00:44:09,160 --> 00:44:10,740 Det kommer til å tvinge meg til å gjøre det. 1009 00:44:10,740 --> 00:44:11,990 Så 42. 1010 00:44:11,990 --> 00:44:13,590 Jeg plukket et positivt tall. 1011 00:44:13,590 --> 00:44:16,470 Så nå hvordan kan jeg bevise dette programmet riktig? 1012 00:44:16,470 --> 00:44:19,990 Hvis du er en matematiker, kan du ikke virkelig bevise dette ved prøving og feiling, 1013 00:44:19,990 --> 00:44:20,490 ikke sant? 1014 00:44:20,490 --> 00:44:23,180 Du kan ikke bare bevis eksempel, men i det minste 1015 00:44:23,180 --> 00:44:25,494 som programmerer vi ikke skal prøve å bevise for nå 1016 00:44:25,494 --> 00:44:27,660 at dette er faktisk riktig, men jeg bør nok 1017 00:44:27,660 --> 00:44:29,470 teste noen representative tilfeller. 1018 00:44:29,470 --> 00:44:31,070 >> Jeg har testet 42. 1019 00:44:31,070 --> 00:44:33,030 Jeg kunne teste 43. 1020 00:44:33,030 --> 00:44:34,910 Jeg kunne teste 44. 1021 00:44:34,910 --> 00:44:35,640 Test 45. 1022 00:44:35,640 --> 00:44:36,140 Høyre? 1023 00:44:36,140 --> 00:44:37,860 Men jeg kunne gjøre dette en veldig lang tid. 1024 00:44:37,860 --> 00:44:39,925 Hva ville være litt mer interessante saker å prøve? 1025 00:44:39,925 --> 00:44:41,050 PUBLIKUM: [uhørlig] null. 1026 00:44:41,050 --> 00:44:41,740 DAVID J. MALAN: Så null. 1027 00:44:41,740 --> 00:44:42,297 Sikkert. 1028 00:44:42,297 --> 00:44:44,880 Og god, har vi det denne gangen, takket være Lauren ny kode. 1029 00:44:44,880 --> 00:44:46,213 Hva er en annen god sak å prøve? 1030 00:44:46,213 --> 00:44:47,320 PUBLIKUM: Negativ en. 1031 00:44:47,320 --> 00:44:50,070 >> DAVID J. MALAN: Negative en, og kanskje noe litt større, 1032 00:44:50,070 --> 00:44:52,617 så kanskje negative 42, men generelt, når 1033 00:44:52,617 --> 00:44:54,450 teste programmene dine fremover, er du 1034 00:44:54,450 --> 00:44:56,325 kommer til å ønske å tenke til deg selv, som hva 1035 00:44:56,325 --> 00:44:58,050 er de grunnleggende forskjellige tilfeller. 1036 00:44:58,050 --> 00:45:01,720 Og jeg tør si en negativ sak, en positiv tilfelle, og en null-sak 1037 00:45:01,720 --> 00:45:03,365 ganske mye runder disse ut. 1038 00:45:03,365 --> 00:45:04,990 La oss se på en variant av dette selv. 1039 00:45:04,990 --> 00:45:06,930 Forhold en. 1040 00:45:06,930 --> 00:45:11,224 Dette er en riktig løsning her, slik at du får se to og online, 1041 00:45:11,224 --> 00:45:13,390 Hvis du går gjennom walkthroughs, vil vanligvis 1042 00:45:13,390 --> 00:45:18,090 øke disse trinnvis inntil vi får akkurat den rette tilnærmingen. 1043 00:45:18,090 --> 00:45:20,070 Hva om vi ønsket å spørre to spørsmål på en gang? 1044 00:45:20,070 --> 00:45:22,200 >> La meg åpne opp dette i stedet. 1045 00:45:22,200 --> 00:45:26,740 Ikke-svitsj, av grunner vi får se en annen gang. 1046 00:45:26,740 --> 00:45:29,610 Hva er nytt syntaktisk her? 1047 00:45:29,610 --> 00:45:32,760 Jeg er for tiden spiller et spill der datamaskinen er å fortelle 1048 00:45:32,760 --> 00:45:35,550 meg, gi meg et heltall mellom ett og ti, 1049 00:45:35,550 --> 00:45:37,180 og så skal jeg bedømme brukerens input. 1050 00:45:37,180 --> 00:45:39,180 På engelsk, basert på koden du ser her 1051 00:45:39,180 --> 00:45:41,530 i blått, hva er dette programmet gjør? 1052 00:45:41,530 --> 00:45:44,256 1053 00:45:44,256 --> 00:45:46,380 PUBLIKUM: [uhørbart] plukket et stort eller lite antall. 1054 00:45:46,380 --> 00:45:46,484 DAVID J. MALAN: Yeah. 1055 00:45:46,484 --> 00:45:49,450 Det er bare dømmende om Jeg plukket en stor eller medium, 1056 00:45:49,450 --> 00:45:53,900 eller et lite antall basert på en svært vilkårlig definisjon av små, medium, 1057 00:45:53,900 --> 00:45:58,510 og store her, men varsel syntaksen som er nytt er dette. 1058 00:45:58,510 --> 00:46:02,340 Det er ikke mindre enn int eller lik signere, eller større enn eller lik signere, 1059 00:46:02,340 --> 00:46:05,430 hvor en er over den andre, at du kan uttrykke som Microsoft Word. 1060 00:46:05,430 --> 00:46:08,180 Så i et programmeringsspråk du vanligvis bare gjør to tegn, 1061 00:46:08,180 --> 00:46:09,450 ene etter den andre. 1062 00:46:09,450 --> 00:46:12,695 Og hva betyr dette sannsynligvis representere, tegnet tegnet. 1063 00:46:12,695 --> 00:46:13,570 PUBLIKUM: [uhørbart] 1064 00:46:13,570 --> 00:46:13,680 DAVID J. MALAN: Yeah. 1065 00:46:13,680 --> 00:46:16,910 Det betyr bare og fordi det viser seg at forfatterne av C 1066 00:46:16,910 --> 00:46:19,120 brukes en enkelt-tegn, som du kanskje tror 1067 00:46:19,120 --> 00:46:22,430 ville være perfekt for den oppfatningen av og er allerede brukt opp, 1068 00:46:22,430 --> 00:46:27,300 så tegnet ampersand faktisk fanger tilfelle vi faktisk ønsker. 1069 00:46:27,300 --> 00:46:30,610 >> Så la oss nå snuble over to ting. 1070 00:46:30,610 --> 00:46:32,640 La meg gå videre og åpne opp en. 1071 00:46:32,640 --> 00:46:36,590 Noe som er litt bekymringsfullt. 1072 00:46:36,590 --> 00:46:37,970 Unøyaktighet dot c. 1073 00:46:37,970 --> 00:46:40,260 La meg presentere to ting her. 1074 00:46:40,260 --> 00:46:44,720 One, merker at vi kan gjøre matematikk, som like før når 1075 00:46:44,720 --> 00:46:47,797 vi pluss to tall, x og y. 1076 00:46:47,797 --> 00:46:49,380 Hva er dette programmet tilsynelatende gjør? 1077 00:46:49,380 --> 00:46:52,140 Jeg har ikke kommentert det ennå, og jeg har introdusert prosent f, 1078 00:46:52,140 --> 00:46:55,720 men jeg sa raskt tidligere prosent f betyr flyttall 1079 00:46:55,720 --> 00:46:56,970 verdi, som er reelt tall. 1080 00:46:56,970 --> 00:46:59,520 Noe med en desimal punkt, som ikke er et heltall. 1081 00:46:59,520 --> 00:47:02,270 Hva synes du om dette programmet er prøver å vise meg på skjermen? 1082 00:47:02,270 --> 00:47:05,060 1083 00:47:05,060 --> 00:47:06,050 Yeah? 1084 00:47:06,050 --> 00:47:07,550 PUBLIKUM: Resultatet av en over 10. 1085 00:47:07,550 --> 00:47:07,780 DAVID J. MALAN: Yeah. 1086 00:47:07,780 --> 00:47:09,680 Hva er resultatet av ett dividert med 10. 1087 00:47:09,680 --> 00:47:12,721 Høyre, fordi alle du har sannsynligvis vokst opp vel vitende om at en over 10 1088 00:47:12,721 --> 00:47:14,502 er hva? 1089 00:47:14,502 --> 00:47:16,220 Ja, det er bare 1/10 eller 0,1. 1090 00:47:16,220 --> 00:47:16,720 Høyre? 1091 00:47:16,720 --> 00:47:19,010 Så la oss se hva dette faktisk er. 1092 00:47:19,010 --> 00:47:21,010 Så la meg gå videre og lagre dette. 1093 00:47:21,010 --> 00:47:21,970 La meg gå ned her. 1094 00:47:21,970 --> 00:47:26,360 Gjør unøyaktighet dot slash upresishet, og legger merke til også 1095 00:47:26,360 --> 00:47:29,380 i et Linux-miljø, trenger du ikke å skrive ut imprecision og ta 1096 00:47:29,380 --> 00:47:30,010 hele dagen. 1097 00:47:30,010 --> 00:47:32,910 Det generelt, hvis du treffer Tab, det vil fullføre din tanke for deg, 1098 00:47:32,910 --> 00:47:36,660 basert på ordene som er tilgjengelig i den gjeldende katalogen. 1099 00:47:36,660 --> 00:47:37,160 OK. 1100 00:47:37,160 --> 00:47:37,970 Så du hadde rett. 1101 00:47:37,970 --> 00:47:41,239 En dividert med 10 er, i virkeligheten, 0,1. 1102 00:47:41,239 --> 00:47:42,280 Men jeg er litt nysgjerrig. 1103 00:47:42,280 --> 00:47:44,196 Og det viser seg printf støtter noen funksjoner 1104 00:47:44,196 --> 00:47:48,700 der du kan angi mer enn standard antall desimaler. 1105 00:47:48,700 --> 00:47:52,140 Så hvis jeg ønsker å se 10 desimal poeng jeg kan gjøre prosent, 1106 00:47:52,140 --> 00:47:55,510 for plassholder symbol, dot 10 for, gi meg 10 desimaler, 1107 00:47:55,510 --> 00:47:58,140 og deretter fortsatt flytende punktet verdi, og, som en side, 1108 00:47:58,140 --> 00:48:01,550 hva er dette backslash n tilsynelatende vi fortsette å bruke? 1109 00:48:01,550 --> 00:48:03,450 Det viser seg at det er en symbol for en ny linje. 1110 00:48:03,450 --> 00:48:05,970 Det er veldig tydelig måte si til datamaskinen, 1111 00:48:05,970 --> 00:48:08,759 flytte markøren til neste linjen når du er ferdig. 1112 00:48:08,759 --> 00:48:10,800 Og vi får se hva som skjer når vi ikke gjør det. 1113 00:48:10,800 --> 00:48:12,430 >> La meg rekompilere gjøre unøyaktighet. 1114 00:48:12,430 --> 00:48:15,320 1115 00:48:15,320 --> 00:48:18,356 Nå dot slash unøyaktighet. 1116 00:48:18,356 --> 00:48:18,930 OK. 1117 00:48:18,930 --> 00:48:19,780 Fortsatt rett. 1118 00:48:19,780 --> 00:48:21,512 Én dividert med 10. 1119 00:48:21,512 --> 00:48:23,220 Nå har jeg fått en litt nysgjerrig, skjønt. 1120 00:48:23,220 --> 00:48:27,599 Hva om jeg ser 20 desimal påpeker, rekompilere, reprise, 1121 00:48:27,599 --> 00:48:29,390 og som en side for hastighet, kan du også bruke 1122 00:48:29,390 --> 00:48:31,800 opp og ned pilene til å bla gjennom din historie, 1123 00:48:31,800 --> 00:48:35,476 slik at du ikke trenger å holde retyping disse kommandoene, skriver. 1124 00:48:35,476 --> 00:48:36,910 He. 1125 00:48:36,910 --> 00:48:39,220 Jeg fikk ikke vite at i grunnskolen. 1126 00:48:39,220 --> 00:48:43,260 Greit, så la meg se ut som 29 steder ut. 1127 00:48:43,260 --> 00:48:44,300 Kanskje det er bare et lykketreff. 1128 00:48:44,300 --> 00:48:46,907 Kanskje min datamaskin opptrer merkelig. 1129 00:48:46,907 --> 00:48:47,990 Det er ikke en ting, ikke sant? 1130 00:48:47,990 --> 00:48:50,300 Det gjør noe deterministisk. 1131 00:48:50,300 --> 00:48:53,410 Så sørg for unøyaktighet. 1132 00:48:53,410 --> 00:48:54,890 OK, det er messed up. 1133 00:48:54,890 --> 00:48:57,620 Så hva er det som skjer? 1134 00:48:57,620 --> 00:49:00,160 >> Så tilsynelatende din Læreren har ligget 1135 00:49:00,160 --> 00:49:03,900 til dere alle for denne gangen for grunnene til at vi vil se før lenge. 1136 00:49:03,900 --> 00:49:05,569 Men la oss avslutte med et annet program. 1137 00:49:05,569 --> 00:49:07,860 Dette er et lite program noen skrev for noen år siden, 1138 00:49:07,860 --> 00:49:08,990 og det er faktisk en del av en konkurranse. 1139 00:49:08,990 --> 00:49:11,198 Ingen faktisk skriver kode som dette, og hvis du gjør det, 1140 00:49:11,198 --> 00:49:12,880 Dette er stil et problem. 1141 00:49:12,880 --> 00:49:14,660 Men folk gjør dette for å bli best. 1142 00:49:14,660 --> 00:49:17,260 Å skrive den mest forvirrende ser program som 1143 00:49:17,260 --> 00:49:19,110 likevel gjør noe interessant. 1144 00:49:19,110 --> 00:49:23,930 Og meldingen jeg trodde vi skulle forlate på i dag, før Colton spiller oss ut her, 1145 00:49:23,930 --> 00:49:27,840 er å kjøre dette programmet, som, selv i bare ved hjelp 1146 00:49:27,840 --> 00:49:31,450 C i denne tekstbasert miljø, gir oss dette. 1147 00:49:31,450 --> 00:49:32,264 Dammit. 1148 00:49:32,264 --> 00:49:34,930 >> [LAUGHTER] 1149 00:49:34,930 --> 00:49:36,800 >> Vent litt. 1150 00:49:36,800 --> 00:49:39,340 [Uhørbart] c dash l m. 1151 00:49:39,340 --> 00:49:42,885 Du kommer til å se den magiske besvergelse at vi får se før lenge. 1152 00:49:42,885 --> 00:49:45,780 [Uhørbart] Greit. 1153 00:49:45,780 --> 00:49:51,592 Og nå kan du til og med gjøre ting som dette. 1154 00:49:51,592 --> 00:49:52,340 Det er alt. 1155 00:49:52,340 --> 00:49:56,410 For CS50 vi vil se deg på fredag. 1156 00:49:56,410 --> 00:49:58,910 >> [MUSIC SPILLE] 1157 00:49:58,910 --> 00:52:38,390 1158 00:52:38,390 --> 00:52:41,440 >> [APPLAUSE] 1159 00:52:41,440 --> 00:52:42,812