1 00:00:07,830 --> 00:00:12,200 [Powered by Google Translate] DAVID MALAN: Dette er CS50, og dette er starten på uke 1. 2 00:00:12,200 --> 00:00:15,520 Hva vi trodde vi skulle gjøre i dag er å ta en titt tilbake på 3 00:00:15,520 --> 00:00:18,290 noe mange av dere har sikkert gått forbi for noen 4 00:00:18,290 --> 00:00:20,570 tid nå og kan se litt kjent. 5 00:00:20,570 --> 00:00:23,720 Denne saken her, dette er selvfølgelig i - 6 00:00:23,720 --> 00:00:24,155 PUBLIKUM: Science. 7 00:00:24,155 --> 00:00:26,030 DAVID MALAN: Science center. 8 00:00:26,030 --> 00:00:28,940 Så dette er faktisk en av de tidligste datamaskiner 9 00:00:28,940 --> 00:00:30,220 tilbake fra 1940-tallet. 10 00:00:30,220 --> 00:00:33,790 Det var en av de første elektromekaniske datamaskinene 11 00:00:33,790 --> 00:00:35,730 som var i stand til spesielt lang, 12 00:00:35,730 --> 00:00:38,450 selvbærende beregninger, og hva vi faktisk ser i 13 00:00:38,450 --> 00:00:41,580 Vitensenteret er bare en liten del av denne tingen. 14 00:00:41,580 --> 00:00:44,170 Hva vi trodde vi skulle gjøre da er å ta en titt tilbake på en video 15 00:00:44,170 --> 00:00:46,670 som ble gjort for en tid siden, og introduserer dette 16 00:00:46,670 --> 00:00:47,520 tingen til verden. 17 00:00:47,520 --> 00:00:50,200 Og du vil se fra musikk og stemme som faktisk de 18 00:00:50,200 --> 00:00:52,070 var svært lykkelige tider. 19 00:00:54,885 --> 00:00:59,700 >> [VIDEOAVSPILLING] 20 00:00:59,700 --> 00:01:02,490 -En triumf av matematiske og mekaniske ferdigheter er dette 21 00:01:02,490 --> 00:01:06,340 flott ny automatisk kalkulator ved Harvard University. 22 00:01:06,340 --> 00:01:08,620 Intrikate problemer i matematikk, satt gjennom 23 00:01:08,620 --> 00:01:12,420 maskin i kodet form på tape, er nøyaktig løst på en 24 00:01:12,420 --> 00:01:15,200 minutters brøkdel av tiden nødvendig for menneskelig 25 00:01:15,200 --> 00:01:16,450 beregningen. 26 00:01:27,050 --> 00:01:30,600 Designet for å fremskynde alle former for matematiske og vitenskapelige 27 00:01:30,600 --> 00:01:34,610 forskning, vil det gigantiske mekaniske hjernen fungerer for United 28 00:01:34,610 --> 00:01:36,570 States Navy til krigens slutt. 29 00:01:50,280 --> 00:01:52,980 >> DAVID MALAN: Så det du kanskje ikke vet er at det var i 30 00:01:52,980 --> 00:01:56,310 dette samme enhet som et begrep vi alle nå ta ganske mye 31 00:01:56,310 --> 00:01:59,300 for gitt ble skapt, som en bug. 32 00:01:59,300 --> 00:02:01,140 Så en av ingeniørene som arbeider i denne datamaskinen 33 00:02:01,140 --> 00:02:05,280 bokstavelig talt funnet en liten møll i maskinen som resulterte 34 00:02:05,280 --> 00:02:07,580 i noen feilaktige beregninger. 35 00:02:07,580 --> 00:02:10,410 Og som historien går at møll ble tapet til denne loggen 36 00:02:10,410 --> 00:02:14,180 journal her, tilbake fra september 9 i 1940-noe, 37 00:02:14,180 --> 00:02:16,550 og dermed ble født for verden begrepet "bug". 38 00:02:16,550 --> 00:02:19,880 Så fra nå av vi vurdere feil å være noen form for feil i 39 00:02:19,880 --> 00:02:23,290 programmer, enten menneskeskapte eller, i dette tilfellet, insekter. 40 00:02:23,290 --> 00:02:25,030 >> Så noen kunngjøringer, som vi fortsetter. 41 00:02:25,030 --> 00:02:29,160 Så CS50 har tradisjon for å tilby lunsjer slags på 42 00:02:29,160 --> 00:02:31,600 de fleste fredager i løpet av semesteret, hvor vi tar 30 til 43 00:02:31,600 --> 00:02:34,650 40 studenter til ild og is in the Square for casual 44 00:02:34,650 --> 00:02:36,390 chitchat, snakke om informatikk, 45 00:02:36,390 --> 00:02:37,420 snakke om fremtiden. 46 00:02:37,420 --> 00:02:40,000 Vi inviterer studenter og venner fra industrien for å chatte opp 47 00:02:40,000 --> 00:02:40,690 studenter så vel. 48 00:02:40,690 --> 00:02:44,020 Virkelig mot en slutt for å gjøre hva som er en ganske stor klasse 49 00:02:44,020 --> 00:02:46,740 alle de mer intime, minst en gang i mens for 50 00:02:46,740 --> 00:02:47,710 undergrupper av studenter. 51 00:02:47,710 --> 00:02:50,940 Så hvis du ønsker å bli med oss ​​denne fredagen, 01:15, gå til 52 00:02:50,940 --> 00:02:53,340 CS50.net/lunch å RSVP. 53 00:02:53,340 --> 00:02:55,840 Og vi vil gjøre dette recurringly, så ikke bekymre deg hvis du ikke 54 00:02:55,840 --> 00:02:57,930 blant de første 30 eller så denne uken. 55 00:02:57,930 --> 00:02:59,070 >> Så skriftlærde notater. 56 00:02:59,070 --> 00:03:01,500 Et ord på de ressurser som vil nå begynne å være tilgjengelig 57 00:03:01,500 --> 00:03:03,040 til elever i klassen. 58 00:03:03,040 --> 00:03:05,540 Slik at hoder må ikke være nede under forelesninger 59 00:03:05,540 --> 00:03:08,560 skrible ned alt jeg sier og så videre, hva vi gjør 60 00:03:08,560 --> 00:03:10,765 i stedet er å gi fra lærerstaben en 61 00:03:10,765 --> 00:03:11,920 kanoniske sett med notater. 62 00:03:11,920 --> 00:03:14,850 Så vi har en av våre pedagogiske karer, Andrew Sellergren, 63 00:03:14,850 --> 00:03:17,830 som sitter ned hver uke, gjennomgår videoer, og deretter 64 00:03:17,830 --> 00:03:19,730 skriver ned hva vi tror er en ganske 65 00:03:19,730 --> 00:03:21,840 autoritativ sett med notater. 66 00:03:21,840 --> 00:03:24,180 Og Andrews glad, også, for å sette snarky fotnoter i 67 00:03:24,180 --> 00:03:24,820 bunnen. 68 00:03:24,820 --> 00:03:27,300 Så du vil forhåpentligvis nyte disse som et oppslagsverk for 69 00:03:27,300 --> 00:03:30,230 moro, og også komme quiz tid, som en mulighet til å vurdere 70 00:03:30,230 --> 00:03:31,830 hva som skjedde i enkelte forelesninger. 71 00:03:31,830 --> 00:03:33,580 Så de er knyttet til forelesninger siden. 72 00:03:33,580 --> 00:03:35,300 >> Oppgavesettet 0, i mellomtiden, er ute. 73 00:03:35,300 --> 00:03:37,470 Og i form av ressurser tilgjengelig for deg - 74 00:03:37,470 --> 00:03:38,020 walkthrough. 75 00:03:38,020 --> 00:03:39,730 Milo ledet den første på fredag. 76 00:03:39,730 --> 00:03:41,470 Det ble filmet, sette på nettet innen lørdag. 77 00:03:41,470 --> 00:03:44,030 Og så skjønner, hvis du ikke er helt sikker på hvor du skal begynne, 78 00:03:44,030 --> 00:03:47,280 for dette eller fremtidige p-sett, alltid slå først til 79 00:03:47,280 --> 00:03:49,300 gjennomgang eller video av dette. 80 00:03:49,300 --> 00:03:52,950 Seksjonering pågår, på cs50.net/section er der du 81 00:03:52,950 --> 00:03:54,540 skal sende dine preferanser, hvis du ikke har 82 00:03:54,540 --> 00:03:55,880 allerede, etter i dag. 83 00:03:55,880 --> 00:03:58,140 Fordi seksjoner vil starte førstkommende søndag, mandag, 84 00:03:58,140 --> 00:03:58,760 og tirsdag. 85 00:03:58,760 --> 00:04:02,470 Vi gjør seksjoner de tre dagene, hver uke i 86 00:04:02,470 --> 00:04:03,870 semester for det meste. 87 00:04:03,870 --> 00:04:06,600 Og vi også introdusere igjen, ulike spor. 88 00:04:06,600 --> 00:04:08,270 Så vil du bli spurt om dette seksjonering form, hvis du 89 00:04:08,270 --> 00:04:10,350 har ikke sett det allerede, hvis du er blant de mindre 90 00:04:10,350 --> 00:04:12,800 komfortabel, mer komfortabel, eller et sted i mellom. 91 00:04:12,800 --> 00:04:14,960 Og hvis du er liksom på gjerdet, vanligvis et sted i 92 00:04:14,960 --> 00:04:18,160 mellom er hva de fleste studenter ender opp med å sjekke. 93 00:04:18,160 --> 00:04:19,579 Kontortid begynner i kveld. 94 00:04:19,579 --> 00:04:23,020 >> Så Scratch er ganske lav nøkkel, selv om det er ganske naturlig 95 00:04:23,020 --> 00:04:25,300 å kjøre inn diverse bugs, eller være usikker på hvordan du 96 00:04:25,300 --> 00:04:26,550 gjennomføre noe. 97 00:04:26,550 --> 00:04:28,880 Så innse at vi vil starte kontortid denne uken. 98 00:04:28,880 --> 00:04:30,500 De vil være på Annenberg mandag, tirsdag, onsdag, 99 00:04:30,500 --> 00:04:34,300 Torsdag 20:00 til 11:00 under hjernen pause. 100 00:04:34,300 --> 00:04:38,160 Øvre classmen kan komme inn, og hvis du noen gang har problemer med å få 101 00:04:38,160 --> 00:04:40,720 i døren, fordi de vil være å dra, bare snakke din vei 102 00:04:40,720 --> 00:04:42,560 i og forklarer du med CS50. 103 00:04:42,560 --> 00:04:45,230 Vanligvis 20 til 30 av oss i staben vil være der for å hjelpe 104 00:04:45,230 --> 00:04:46,190 du en mot en. 105 00:04:46,190 --> 00:04:48,980 >> Ved ankomst ideen er dette: du ta med laptop, 106 00:04:48,980 --> 00:04:51,300 vil du ha din lader, vil vi ha ekstra strømledninger, 107 00:04:51,300 --> 00:04:53,320 spesielt langs sørveggen av Annenberg der 108 00:04:53,320 --> 00:04:55,080 det er massevis av stikkontakter. 109 00:04:55,080 --> 00:04:59,290 Og det viktigste inngangsporten til kontoret timer Q & A er å gå til 110 00:04:59,290 --> 00:05:01,690 cs50.net/discuss og å legge 111 00:05:01,690 --> 00:05:02,580 spørsmålet ditt der. 112 00:05:02,580 --> 00:05:05,600 Og for å merke det med pset 0 eller pset 1, uansett uke 113 00:05:05,600 --> 00:05:06,810 kan skje for å være. 114 00:05:06,810 --> 00:05:09,240 Og så hva vi skal gjøre er å ha en tabell av undervisning stipendiater 115 00:05:09,240 --> 00:05:12,040 og selvfølgelig assistenter, vanligvis 8 eller 10 eller så av oss, 116 00:05:12,040 --> 00:05:14,430 går gjennom, holde et våkent øye på tavlen, og 117 00:05:14,430 --> 00:05:16,810 plukker ut spørsmål egentlig så raskt vi kan, 118 00:05:16,810 --> 00:05:19,600 henvise deg til relaterte innlegg hvis du ikke har funnet dem 119 00:05:19,600 --> 00:05:22,220 dere, online referanser, som hensiktsmessig. 120 00:05:22,220 --> 00:05:24,280 Og hvis det er problemer, som det uunngåelig 121 00:05:24,280 --> 00:05:27,190 vil bli, eller det bare er mer fornuftig å sitte ned en mot en, 122 00:05:27,190 --> 00:05:28,660 arbeide gjennom problemer med noen. 123 00:05:28,660 --> 00:05:30,810 >> Eller du bare komme i kontortiden virkelig 124 00:05:30,810 --> 00:05:31,640 trenger den tankegangen. 125 00:05:31,640 --> 00:05:33,400 Du ønsker ikke å gå gjennom det elektroniske skjemaet, kan du 126 00:05:33,400 --> 00:05:34,410 virkelig ønsker å møte med noen. 127 00:05:34,410 --> 00:05:37,240 Kommunisere det til oss, og hva som vil skje er når 128 00:05:37,240 --> 00:05:40,620 Spørsmålet har blitt sett av en medarbeider, og vi 129 00:05:40,620 --> 00:05:43,660 bestemme, yup, bør dette bli sendt til en av de 20 eller 130 00:05:43,660 --> 00:05:47,800 30 gruppemedlemmer her lokalt, vil du se øverst til venstre dette 131 00:05:47,800 --> 00:05:51,590 Litt Angi kø begynner å blinke på cs50.net / 132 00:05:51,590 --> 00:05:52,165 diskutere. 133 00:05:52,165 --> 00:05:55,260 Og dette er å fortelle deg at du nå har blitt invitert, så 134 00:05:55,260 --> 00:05:56,880 å snakke, å gå inn i køen. 135 00:05:56,880 --> 00:05:59,090 Og ved å klikke på den knappen, vil navnet ditt deretter vises på 136 00:05:59,090 --> 00:06:02,660 en iPad at CS50 greeter, en av kursets hoder, vil 137 00:06:02,660 --> 00:06:05,250 være å holde i nærheten av inngangen Annenberg, som vil deretter 138 00:06:05,250 --> 00:06:08,630 se som avbildet her, de studentene som har spørsmål om 139 00:06:08,630 --> 00:06:11,630 venstre, for personalet som er til stede på høyre side. 140 00:06:11,630 --> 00:06:14,830 Og med et klikk på venstre og høyre, nettleseren vil 141 00:06:14,830 --> 00:06:18,610 begynne å blinke så snart, for eksempel, professor McGonnagal 142 00:06:18,610 --> 00:06:21,460 er klar til å se deg på et bestemt bord i Annenberg. 143 00:06:21,460 --> 00:06:23,340 >> Så vi gjorde noen av det siste året. 144 00:06:23,340 --> 00:06:25,430 Vi har restartet kontortid og 145 00:06:25,430 --> 00:06:26,980 re-implementert mye av programvaren. 146 00:06:26,980 --> 00:06:29,940 Så innser at dette vil bli varmet opp denne uken. 147 00:06:29,940 --> 00:06:32,970 Men også innse også i år tidligere, som du kanskje har hørt 148 00:06:32,970 --> 00:06:35,710 fra venner, hadde kontortid faktisk 50 til 149 00:06:35,710 --> 00:06:37,040 150 studenter på en gang. 150 00:06:37,040 --> 00:06:39,300 Og det er rett og slett ikke mulig for oss å håndtere at 151 00:06:39,300 --> 00:06:42,060 effektivt, en mot en, hele kvelden. 152 00:06:42,060 --> 00:06:44,570 Og så hva vi egentlig skal prøve å gjøre dette året er 153 00:06:44,570 --> 00:06:46,590 kapitalisere på det faktum at mange av spørsmålene er 154 00:06:46,590 --> 00:06:49,050 ofte spurt og kan ofte bli bedre besvart 155 00:06:49,050 --> 00:06:50,030 asynkront. 156 00:06:50,030 --> 00:06:52,140 Så du kan liksom tenke gjennom de ansatte svar, 157 00:06:52,140 --> 00:06:54,360 og vi kan tenke gjennom koden din, uten oppvarmet 158 00:06:54,360 --> 00:06:57,050 trykk på nødvendigvis sliter 159 00:06:57,050 --> 00:06:58,210 gjennom det side ved side. 160 00:06:58,210 --> 00:07:00,980 Så vi regner med at omtrent en tredjedel eller halvparten av spørsmålene 161 00:07:00,980 --> 00:07:03,500 vil bli sendt i person, og vi vil prøve å rive av som 162 00:07:03,500 --> 00:07:05,530 mange som en halv eller mer elektronisk, 163 00:07:05,530 --> 00:07:06,710 i kontortiden. 164 00:07:06,710 --> 00:07:08,070 Og vi vil fortsette å bruke Diskuter 165 00:07:08,070 --> 00:07:09,990 i løpet av uken også. 166 00:07:09,990 --> 00:07:12,680 >> Og til slutt, innser at dette kurset kan tas bestått / ikke bestått. 167 00:07:12,680 --> 00:07:16,230 Så hvis du er på gjerdet, eller bare tenke at du er virkelig 168 00:07:16,230 --> 00:07:18,650 ikke sikker på om dette er verden for deg, eller er dette virkelig 169 00:07:18,650 --> 00:07:21,310 ganske fremmed for deg, skjønner at dette er en flott måte 170 00:07:21,310 --> 00:07:24,840 for å få opp litt selvtillit som å gå inn i 171 00:07:24,840 --> 00:07:26,780 klasse, som jeg gjorde ærlig, år siden. 172 00:07:26,780 --> 00:07:28,630 Og så har fem uker til liksom finne ut for 173 00:07:28,630 --> 00:07:30,850 selv om du ønsker å bo bestått / ikke bestått, bytte til et brev 174 00:07:30,850 --> 00:07:31,800 klasse, eller lignende. 175 00:07:31,800 --> 00:07:34,050 Og vanligvis hva bestått / ikke bestått gjør, tror jeg, for studenter er 176 00:07:34,050 --> 00:07:36,700 at hvis du putter i at 10 timer, 20 timer, hva det 177 00:07:36,700 --> 00:07:38,830 kan være på noen problemer, og du stanger hodet 178 00:07:38,830 --> 00:07:39,690 mot veggen, 179 00:07:39,690 --> 00:07:41,750 og du egentlig bare ikke kan jage noe ned, og du 180 00:07:41,750 --> 00:07:44,230 har så mange andre ting du trenger å gjøre, ærlig, hva jeg 181 00:07:44,230 --> 00:07:46,070 tror bestått / ikke bestått er, tar det kanten av av 182 00:07:46,070 --> 00:07:47,250 situasjoner som det. 183 00:07:47,250 --> 00:07:49,350 Hvor du har tatt ting 90% av veien. 184 00:07:49,350 --> 00:07:50,830 Du vet, det er ikke helt perfekt. 185 00:07:50,830 --> 00:07:52,950 Men du fikk mye ut av det, likevel. 186 00:07:52,950 --> 00:07:55,440 Så vurdere bestått / ikke bestått som å gi deg som 187 00:07:55,440 --> 00:07:57,590 mental modell, kanskje. 188 00:07:57,590 --> 00:08:00,680 >> All right, så forrige uke vi due i Scratch, og vi 189 00:08:00,680 --> 00:08:03,610 snakket om programmering på en ganske høy grafisk nivå. 190 00:08:03,610 --> 00:08:05,340 Og i dag er vi gjøre overgangen til et språk 191 00:08:05,340 --> 00:08:08,300 kalles C, et lavere nivå programmeringsspråk oppå 192 00:08:08,300 --> 00:08:11,260 som mange moderne språk er nå bygget, inkludert noen 193 00:08:11,260 --> 00:08:13,010 av de som vi skal bruke mot begrepet slutt. 194 00:08:13,010 --> 00:08:15,530 Og syntaktisk, hvordan de ser ut 195 00:08:15,530 --> 00:08:17,330 er alle ganske like. 196 00:08:17,330 --> 00:08:19,080 Så la oss begynne å gjøre denne overgangen her. 197 00:08:19,080 --> 00:08:21,730 Så dette var et program i forrige uke som var den enkleste av 198 00:08:21,730 --> 00:08:22,910 Hello World programmer. 199 00:08:22,910 --> 00:08:25,560 Det rett og slett skrevet til skjermen hallo verden, med en 200 00:08:25,560 --> 00:08:27,650 lite snakkeboble kommer ut av katten. 201 00:08:27,650 --> 00:08:30,590 Vel, hvis vi begynner nå å oversette dette til en annen 202 00:08:30,590 --> 00:08:33,419 språk, innser at ideene i dag og på onsdag 203 00:08:33,419 --> 00:08:36,450 er identiske, men syntaksen begynner å endre. 204 00:08:36,450 --> 00:08:39,370 Så mens forrige uke hadde vi, når grønne flagget klikket, sier 205 00:08:39,370 --> 00:08:40,340 hallo verden. 206 00:08:40,340 --> 00:08:43,870 I dag skal vi ha int, viktigste, annullert, printf, 207 00:08:43,870 --> 00:08:46,350 avkastning, med en annen syntaks i der også. 208 00:08:46,350 --> 00:08:49,200 Klammeparentes og parenteser og sitater, og whatnot. 209 00:08:49,200 --> 00:08:54,520 Men innser at kjernen av ideen her er trykkteknikker, 210 00:08:54,520 --> 00:08:58,470 og til slutt det faktum at main er nå kommer til å være 211 00:08:58,470 --> 00:09:00,770 synonymt med starten av et program. 212 00:09:00,770 --> 00:09:04,250 Viktigste kommer til å være der det grønne flagget spark ting av. 213 00:09:04,250 --> 00:09:06,390 >> Så la oss nå erte hverandre noen av byggesteinene her 214 00:09:06,390 --> 00:09:08,650 før vi dykke inn noen konkrete eksempler. 215 00:09:08,650 --> 00:09:11,620 Så vi kalte dette en uttalelse i forrige uke, der det er bare 216 00:09:11,620 --> 00:09:12,470 en instruksjon. 217 00:09:12,470 --> 00:09:15,660 Gjør dette - i dette tilfellet, si hei verden. 218 00:09:15,660 --> 00:09:18,400 Vel i C, hvis vi ser på bare den linjen, dette er hvordan vi er 219 00:09:18,400 --> 00:09:20,920 kommer til å begynne å uttrykke den aktuelle puslespillbit: 220 00:09:20,920 --> 00:09:24,780 printf ("Hello World");. 221 00:09:24,780 --> 00:09:27,330 Og nå skal vi erte disse fra hverandre mer og mer over tid, 222 00:09:27,330 --> 00:09:29,330 men innser at det er et mønster her. 223 00:09:29,330 --> 00:09:31,870 Så en har vi denne tingen kalt printf, som er 224 00:09:31,870 --> 00:09:34,310 hovedsak analogt til ordet Say. 225 00:09:34,310 --> 00:09:35,800 Det er hva det kommer til å gjøre. 226 00:09:35,800 --> 00:09:37,870 Printf, betyr og f her "formatert". 227 00:09:37,870 --> 00:09:39,270 Så det betyr bare at du kan sette inn 228 00:09:39,270 --> 00:09:41,600 ulike estetiske detaljer. 229 00:09:41,600 --> 00:09:43,770 Så quote unquote er begynnelsen på hva vi skal 230 00:09:43,770 --> 00:09:45,340 å begynne å ringe en streng. 231 00:09:45,340 --> 00:09:47,110 Et ord, en setning, en setning. 232 00:09:47,110 --> 00:09:50,220 En streng i et programmeringsspråk er en sekvens av null 233 00:09:50,220 --> 00:09:51,330 eller flere tegn. 234 00:09:51,330 --> 00:09:54,390 So h-e-l-l-o, komma, og så videre er, 235 00:09:54,390 --> 00:09:56,290 sitat unquote, en streng. 236 00:09:56,290 --> 00:09:58,710 Og nå backslash n, litt syntaktisk merkelig, men vi 237 00:09:58,710 --> 00:10:01,780 allerede definert som forrige uke som betyr hva? 238 00:10:01,780 --> 00:10:02,630 Det er bare en ny linje. 239 00:10:02,630 --> 00:10:05,000 Det er bare en måte å formidle til datamaskinen du ønsker 240 00:10:05,000 --> 00:10:07,700 tilsvarende trykke Enter der, men du ikke 241 00:10:07,700 --> 00:10:10,460 vil faktisk trykke Enter, og derfor rotet opp alle 242 00:10:10,460 --> 00:10:12,130 formatering av selve programmet. 243 00:10:12,130 --> 00:10:15,500 Nå parentes vedlegge denne strengen, åpen paren og 244 00:10:15,500 --> 00:10:18,130 nær paren, og innsiden av det er vår streng. 245 00:10:18,130 --> 00:10:22,600 Fordi det er fordi i C, og andre programmeringsspråk 246 00:10:22,600 --> 00:10:27,510 språk, som ting printf ta argumenter, eller ta 247 00:10:27,510 --> 00:10:28,420 parametre. 248 00:10:28,420 --> 00:10:31,490 >> Så begynne å tenke nå på denne lilla Si blokk som en 249 00:10:31,490 --> 00:10:34,890 funksjon, som en metode, som en prosedyre. 250 00:10:34,890 --> 00:10:36,890 Du kan virkelig kalle det hva du vil for nå, men 251 00:10:36,890 --> 00:10:39,260 det er liksom en miniatyr program som bare gjør én 252 00:10:39,260 --> 00:10:41,480 ting, i en enkelt linje, ikke mindre. 253 00:10:41,480 --> 00:10:43,620 Så er printf også hva vi kommer til å begynne å kalle en 254 00:10:43,620 --> 00:10:46,680 funksjon, og funksjoner gjør noe - i dette tilfellet 255 00:10:46,680 --> 00:10:49,320 skriver en formatert streng på skjermen - 256 00:10:49,320 --> 00:10:53,220 men fungerer også ta argumenter eller parametere. 257 00:10:53,220 --> 00:10:55,880 Og ved argumenter eller parametere, takk, mener vi 258 00:10:55,880 --> 00:11:01,220 at deres atferd kan bli påvirket av hva du passerer i 259 00:11:01,220 --> 00:11:03,420 innsiden av parentesene. 260 00:11:03,420 --> 00:11:06,460 Så i dette tilfellet, skal printf behov fortalt hva de skal skrive ut, og vi 261 00:11:06,460 --> 00:11:09,520 bare pass på, i anførselstegn her, strengen som vi 262 00:11:09,520 --> 00:11:11,270 faktisk ønsker å skrive ut. 263 00:11:11,270 --> 00:11:14,060 Og semikolon på slutten av denne linjen er bare en 264 00:11:14,060 --> 00:11:18,020 historisk ordensforstyrrelser hvorved ved slutten av de fleste kodelinjer, 265 00:11:18,020 --> 00:11:21,170 du setter et semikolon for å gjøre super klar til datamaskinen 266 00:11:21,170 --> 00:11:23,020 at denne linjen med kode slutter her. 267 00:11:23,020 --> 00:11:25,600 Nå er dette bra fordi vi vil se som programmer får mer 268 00:11:25,600 --> 00:11:29,030 kompleks, vil semikolon gjør super klare til oss mennesker, 269 00:11:29,030 --> 00:11:32,280 og også datamaskinen hvor kodelinjer start og slutt. 270 00:11:32,280 --> 00:11:34,360 Innse at noen språk ikke har noen 271 00:11:34,360 --> 00:11:35,045 av disse samme detaljer. 272 00:11:35,045 --> 00:11:37,870 Og faktisk, i JavaScript, trenger du ikke alltid trenger noe 273 00:11:37,870 --> 00:11:38,670 som semikolon. 274 00:11:38,670 --> 00:11:40,210 Men mer om det som kommer. 275 00:11:40,210 --> 00:11:41,170 >> Så looper. 276 00:11:41,170 --> 00:11:43,520 Vi hadde noe sånt, veldig intuitivt, opplagt, gjør 277 00:11:43,520 --> 00:11:44,860 noe igjen og igjen og igjen. 278 00:11:44,860 --> 00:11:47,720 Liker å sette på sokker, eller si hei, i dette tilfellet. 279 00:11:47,720 --> 00:11:51,090 Vel, som starter i dag i C, kan vi uttrykke dette Scratch 280 00:11:51,090 --> 00:11:54,970 blokkere så while (true) printf ("Hello World"). 281 00:11:54,970 --> 00:11:57,630 Så merker vi begynner å bygge på bokstavelig puslespillet 282 00:11:57,630 --> 00:11:58,480 stykke fra før. 283 00:11:58,480 --> 00:12:01,310 Vi har samme lilla blokken, men det er på innsiden av dette 284 00:12:01,310 --> 00:12:04,880 hakeparentes Alltid blokk, og den beste måten å oversette det 285 00:12:04,880 --> 00:12:06,480 til C er som følger. 286 00:12:06,480 --> 00:12:08,130 Det er ingen Alltid søkeord. 287 00:12:08,130 --> 00:12:10,940 Du kan ikke bare skrive f-o-r-e-v-e-r i C. 288 00:12:10,940 --> 00:12:13,440 Så det nærmeste analog er stund. 289 00:12:13,440 --> 00:12:17,050 >> Nå while (true) virker litt dum fordi gjør verdien 290 00:12:17,050 --> 00:12:18,700 av ekte gang endres? 291 00:12:18,700 --> 00:12:19,810 Antagelig ikke. 292 00:12:19,810 --> 00:12:22,770 Det er som å si mens en, mens på, mens sant. 293 00:12:22,770 --> 00:12:25,430 Det er alt det samme, er sant alltid tilfelle. 294 00:12:25,430 --> 00:12:29,860 Så denne sløyfen er faktisk inducing hva slags loop? 295 00:12:29,860 --> 00:12:31,210 Bare en uendelig løkke, høyre. 296 00:12:31,210 --> 00:12:32,930 En Alltid loop eller som vi kalte det i forrige uke, 297 00:12:32,930 --> 00:12:33,870 bare en uendelig loop. 298 00:12:33,870 --> 00:12:35,250 Så noen ganger det er ille. 299 00:12:35,250 --> 00:12:37,060 Noen ganger det er en bug, noen ganger det er derfor du får 300 00:12:37,060 --> 00:12:39,340 spinning badeball eller timeglass eller lignende. 301 00:12:39,340 --> 00:12:41,260 Men i dette tilfellet har vi bevisst, uansett 302 00:12:41,260 --> 00:12:43,040 grunn, ønsket å skrive det samme igjen 303 00:12:43,040 --> 00:12:43,970 og igjen og igjen. 304 00:12:43,970 --> 00:12:45,900 Eller i tilfelle som en klokke, vil du gjøre 305 00:12:45,900 --> 00:12:47,470 noe igjen og igjen og igjen. 306 00:12:47,470 --> 00:12:49,070 Så uendelige løkker kan være fornuftig. 307 00:12:49,070 --> 00:12:53,560 Og dette er hvordan i C kan vi oversette Alltid til koden. 308 00:12:53,560 --> 00:12:55,570 >> Så nå dette er en litt mer konkret. 309 00:12:55,570 --> 00:12:58,880 Vi hadde gjenta 10 ganger med følgende utsagn. 310 00:12:58,880 --> 00:13:02,490 Så while (true) ikke fungerer helt der, fordi sann er 311 00:13:02,490 --> 00:13:03,590 alltid sant. 312 00:13:03,590 --> 00:13:07,060 Så hvis vi i stedet se på C versjon, nå syntaksen får en 313 00:13:07,060 --> 00:13:08,180 litt mer kryptisk. 314 00:13:08,180 --> 00:13:11,380 Men for å være ærlig når du begynner å se dette, blir det hele 315 00:13:11,380 --> 00:13:12,600 ganske kjent raskt. 316 00:13:12,600 --> 00:13:14,370 Så dette er det som kalles en for-løkke. 317 00:13:14,370 --> 00:13:17,210 En for loop kommer til å fortelle datamaskinen til å gjøre noe 318 00:13:17,210 --> 00:13:20,710 igjen og igjen og igjen så lenge 319 00:13:20,710 --> 00:13:21,850 disse tingene er sanne. 320 00:13:21,850 --> 00:13:23,370 Nå hva mener vi med det? 321 00:13:23,370 --> 00:13:25,470 Vel, det er tre deler til en for løkke, og vi kommer til å 322 00:13:25,470 --> 00:13:28,240 komme tilbake til dette i sammenheng med faktiske 323 00:13:28,240 --> 00:13:29,100 eksempler i et øyeblikk. 324 00:13:29,100 --> 00:13:31,650 Så ikke bekymre deg hvis det ikke synker helt i alt på en gang. 325 00:13:31,650 --> 00:13:35,400 Men int i = 0 er, lang historie kort, sier gi meg en 326 00:13:35,400 --> 00:13:38,290 variabel som er av typen heltall, så gi meg et nummer 327 00:13:38,290 --> 00:13:40,890 jeg ringte, og initialisere den til 0. 328 00:13:40,890 --> 00:13:43,460 Det er å gi meg som en algebraisk variabel x og 329 00:13:43,460 --> 00:13:44,580 initialisere den til 0. 330 00:13:44,580 --> 00:13:46,250 Men i dette tilfellet vi kalte det jeg. 331 00:13:46,250 --> 00:13:49,120 Så i midten, sier det jeg er mindre enn 10 år. 332 00:13:49,120 --> 00:13:52,150 Det forteller datamaskinen gjør følgende ting så lenge 333 00:13:52,150 --> 00:13:53,770 som jeg er mindre enn 10 år. 334 00:13:53,770 --> 00:13:55,370 Og selvsagt det begynner mindre enn 10 fordi 335 00:13:55,370 --> 00:13:56,550 den starter på 0. 336 00:13:56,550 --> 00:13:59,150 Så til slutt, kan du kanskje gjette hva jeg + + betyr. 337 00:13:59,150 --> 00:14:02,140 Det er en liten bit av syntaks som bare betyr øke i. 338 00:14:02,140 --> 00:14:05,270 Så legg 1 til i, igjen og igjen og igjen. 339 00:14:05,270 --> 00:14:09,260 >> Og slik som vi vil se denne sløyfen, denne syntaksen, heller, implementerer 340 00:14:09,260 --> 00:14:12,160 nøyaktig det samme som, ærlig, i Scratch var bare så 341 00:14:12,160 --> 00:14:13,250 mye lettere å uttrykke. 342 00:14:13,250 --> 00:14:15,170 Gjenta 10, og du er ferdig. 343 00:14:15,170 --> 00:14:17,690 I C, og i de fleste programmeringsspråk, må vi være en 344 00:14:17,690 --> 00:14:20,190 litt mer instruktivt for datamaskinen og faktisk 345 00:14:20,190 --> 00:14:21,630 angi noe sånt som dette. 346 00:14:21,630 --> 00:14:23,730 Men vi vil komme tilbake til dette og andre syntaks. 347 00:14:23,730 --> 00:14:24,780 >> Hva om variabler? 348 00:14:24,780 --> 00:14:26,940 I Scratch hadde vi noe som disse oransje blokker, 349 00:14:26,940 --> 00:14:28,180 hvor jeg kunne erklære en variabel. 350 00:14:28,180 --> 00:14:30,000 La oss vilkårlig kaller det teller. 351 00:14:30,000 --> 00:14:31,880 La oss starte den til 0, og deretter 352 00:14:31,880 --> 00:14:33,240 la oss alltid gjøre noe. 353 00:14:33,240 --> 00:14:35,760 I dette tilfellet i Scratch jeg sier telleren, slik at 354 00:14:35,760 --> 00:14:38,230 katt kommer til å ha en liten tale boble som taler 355 00:14:38,230 --> 00:14:40,010 nummeret som er i denne variabelen. 356 00:14:40,010 --> 00:14:42,460 Og da har vi endre teller med 1. 357 00:14:42,460 --> 00:14:45,760 Så alle dette er pakket inne i et Alltid lås. 358 00:14:45,760 --> 00:14:48,960 Så vi allerede nå har byggesteinene i C med 359 00:14:48,960 --> 00:14:50,040 å oversette dette. 360 00:14:50,040 --> 00:14:51,650 >> En måte vi kunne gjøre det er dette. 361 00:14:51,650 --> 00:14:53,890 Gi meg et heltall, kall det teller. 362 00:14:53,890 --> 00:14:55,190 Initialisere den til 0 363 00:14:55,190 --> 00:14:56,490 i første linje det. 364 00:14:56,490 --> 00:14:59,390 While (true), så jeg stjeler den ideen fra bare et øyeblikk 365 00:14:59,390 --> 00:15:01,300 siden, gå videre og gjøre følgende. 366 00:15:01,300 --> 00:15:04,880 Skriv ut disken, og deretter øke telleren, 367 00:15:04,880 --> 00:15:06,930 igjen og igjen og igjen. 368 00:15:06,930 --> 00:15:09,380 Eller igjen, + + betyr bare legge en til noe. 369 00:15:09,380 --> 00:15:11,030 Men det er et nytt stykke av syntaks her. 370 00:15:11,030 --> 00:15:15,730 Hva er hopping ut som ikke blant våre tidligere eksempler? 371 00:15:15,730 --> 00:15:17,190 Ja, dette% d. 372 00:15:17,190 --> 00:15:19,810 Så du kan kanskje antyde hva dette gjør, ærlig, basert 373 00:15:19,810 --> 00:15:21,410 på hva Scratch blokken gjør. 374 00:15:21,410 --> 00:15:24,510 Men igjen i C, vi må bare være litt mer bestemt 375 00:15:24,510 --> 00:15:25,990 når det gjelder å uttrykke oss selv. 376 00:15:25,990 --> 00:15:30,560 >> Så printf ("% d \ n"). 377 00:15:30,560 --> 00:15:32,320 Vel de fleste av at vi kan kaste bort så kjent. 378 00:15:32,320 --> 00:15:34,910 Sitatene betyr bare det er en streng, backslash n 379 00:15:34,910 --> 00:15:35,970 er bare en ny linje. 380 00:15:35,970 --> 00:15:38,860 Så den eneste nye er her% d. 381 00:15:38,860 --> 00:15:40,390 Og alt som er er en plassholder. 382 00:15:40,390 --> 00:15:43,510 % D skal betegne et desimaltall. 383 00:15:43,510 --> 00:15:47,820 Og% d betyr datamaskinen, sette et desimaltall her. 384 00:15:47,820 --> 00:15:49,450 Vel, hva du ønsker å sette det? 385 00:15:49,450 --> 00:15:52,400 Vel, som du kan kanskje antyde, etter kommaet si vi 386 00:15:52,400 --> 00:15:55,480 counter, som er navnet på en variabel som vi erklært eller 387 00:15:55,480 --> 00:15:57,260 skapte et par linjer tidligere. 388 00:15:57,260 --> 00:16:02,420 Så dette er bare C måte å plugge i en variabel i en 389 00:16:02,420 --> 00:16:04,480 string dynamisk. 390 00:16:04,480 --> 00:16:07,350 Fordi derimot, hvis jeg hadde i stedet gjort noe sånt 391 00:16:07,350 --> 00:16:12,470 dette, printf ("counter"), hva ville dette 392 00:16:12,470 --> 00:16:15,220 programmet i stedet gjøre, formodentlig? 393 00:16:15,220 --> 00:16:17,260 Det vil bokstavelig talt ut "counter". 394 00:16:17,260 --> 00:16:18,750 Som ikke er en effekt som jeg ønsker. 395 00:16:18,750 --> 00:16:20,920 Jeg trenger å erstatte i noen numerisk verdi. 396 00:16:20,920 --> 00:16:24,340 Så vi får se at funksjoner da, som printf kan ta ikke 397 00:16:24,340 --> 00:16:26,930 bare bare enkle argumenter, som 398 00:16:26,930 --> 00:16:28,150 "Hello World". 399 00:16:28,150 --> 00:16:32,050 De kan ta sitat unquote komma, og deretter noen variabler 400 00:16:32,050 --> 00:16:35,830 som vil få plugget inn, som vi skal se forrige strengen 401 00:16:35,830 --> 00:16:38,280 via disse% sign plassholdere. 402 00:16:38,280 --> 00:16:39,660 >> Vel hva om boolske uttrykk? 403 00:16:39,660 --> 00:16:42,200 Boolske uttrykk var disse verdiene, sanne eller usanne. 404 00:16:42,200 --> 00:16:42,830 Ja eller nei. 405 00:16:42,830 --> 00:16:44,020 1 eller 0. 406 00:16:44,020 --> 00:16:45,190 På eller av. 407 00:16:45,190 --> 00:16:47,570 Så i Scratch de ser ut som dette, og legge merke til at 408 00:16:47,570 --> 00:16:50,170 bunn blokk her er faktisk sammen 409 00:16:50,170 --> 00:16:51,500 av to mindre blokker. 410 00:16:51,500 --> 00:16:53,610 Så jeg slags dras og slapp tre biter i et puslespill 411 00:16:53,610 --> 00:16:56,450 sammen for å gjøre det lenger puslespillbit det slik at jeg 412 00:16:56,450 --> 00:17:00,420 kunne formidle ideen om at jeg ønsker x være mindre enn y og 413 00:17:00,420 --> 00:17:02,540 y til å være mindre enn z. 414 00:17:02,540 --> 00:17:05,790 Og så jeg kan oversette disse to separate linjer som følger. 415 00:17:05,790 --> 00:17:08,650 Den øverste kan være svært trivially oversatt til C, 416 00:17:08,650 --> 00:17:10,069 med bare x 00:17:11,990 Kanskje med noen parenteser for godt mål. 418 00:17:11,990 --> 00:17:15,520 Og deretter i C, trenger du ikke skrive og å betegne 419 00:17:15,520 --> 00:17:16,819 sammen av noe. 420 00:17:16,819 --> 00:17:19,585 Du i stedet skrive &&. 421 00:17:19,585 --> 00:17:22,849 Og som vi vil til slutt se, skjer en enkelt ampersand til 422 00:17:22,849 --> 00:17:23,880 bety noe annet. 423 00:17:23,880 --> 00:17:27,530 Så && betegner bare tanken på AND. 424 00:17:27,530 --> 00:17:30,040 >> Så igjen, selv om dette begynner å se ganske komplisert, 425 00:17:30,040 --> 00:17:32,560 ett av formålene med å innføre Scratch, foruten 426 00:17:32,560 --> 00:17:34,810 bare å ha en slags morsom på rampen der du kan gjøre 427 00:17:34,810 --> 00:17:36,590 noe som er veldig grafisk, og animerte, og 428 00:17:36,590 --> 00:17:39,000 shareable og lignende, er også å formidle ideen om at 429 00:17:39,000 --> 00:17:42,010 alle ideene vi begynner dykke inn i dag og fremover 430 00:17:42,010 --> 00:17:44,300 er nedfelt i selv så enkelt 431 00:17:44,300 --> 00:17:46,850 grensesnittet siden dag én. 432 00:17:46,850 --> 00:17:47,790 Hva med denne her? 433 00:17:47,790 --> 00:17:48,860 >> Slik at forholdene. 434 00:17:48,860 --> 00:17:50,590 Så Scratch blokken på venstre det ser 435 00:17:50,590 --> 00:17:51,610 litt mer komplisert. 436 00:17:51,610 --> 00:17:52,650 Men det er bare noen å dra og 437 00:17:52,650 --> 00:17:54,140 slippe av kjente stykker. 438 00:17:54,140 --> 00:17:56,690 Hvis x er mindre enn y, si det. 439 00:17:56,690 --> 00:17:59,900 Else if x er større enn y, si det. 440 00:17:59,900 --> 00:18:02,460 Else, kan vi logisk anta at det er inferred at 441 00:18:02,460 --> 00:18:03,580 de må være like. 442 00:18:03,580 --> 00:18:05,220 Så si at de er like. 443 00:18:05,220 --> 00:18:07,690 Nå i C på høyre, samme ting. 444 00:18:07,690 --> 00:18:09,730 Og legg merke til at klammeparentes kommer til å bli en 445 00:18:09,730 --> 00:18:12,190 funksjon i C og andre språk som gjør denne typen 446 00:18:12,190 --> 00:18:13,210 av innkapsling. 447 00:18:13,210 --> 00:18:15,470 Akkurat som om blokken er dette gule ting som er liksom 448 00:18:15,470 --> 00:18:17,770 flytte den lilla blokken inne i den. 449 00:18:17,770 --> 00:18:19,480 Tilsvarende er disse bukseseler - 450 00:18:19,480 --> 00:18:20,870 disse klammeparentes - 451 00:18:20,870 --> 00:18:24,710 ment å trylle frem den samme ideen til å omfavne en eller flere 452 00:18:24,710 --> 00:18:27,680 linjer med kode som er rykket inn i dem. 453 00:18:27,680 --> 00:18:31,270 Så på høyre side her, hvis x mindre enn y, printf 454 00:18:31,270 --> 00:18:32,270 ("X er mindre enn y"). 455 00:18:32,270 --> 00:18:34,980 Else if x er større enn y, skrive ut det samme. 456 00:18:34,980 --> 00:18:38,360 Else skrive ut at de er like. 457 00:18:38,360 --> 00:18:41,750 >> Så kort sagt, det er en ganske direkte kartlegging eller oversettelse 458 00:18:41,750 --> 00:18:44,720 av språket vi har sett så langt, inkludert for noen 459 00:18:44,720 --> 00:18:45,940 av de mer avanserte funksjonene. 460 00:18:45,940 --> 00:18:48,680 Så du ikke kan bruke dette for prosjektet, eller kanskje ikke 461 00:18:48,680 --> 00:18:51,150 skal bruke dette for prosjektet denne uken. 462 00:18:51,150 --> 00:18:54,650 Men vi har disse tingene kalt arrays i C. I Scratch, 463 00:18:54,650 --> 00:18:55,680 de heter lister. 464 00:18:55,680 --> 00:18:59,370 Og vi så disse med Fruitcraft RPG forrige uke. 465 00:18:59,370 --> 00:19:01,320 Den lille blå fyren som gikk rundt, plukke opp 466 00:19:01,320 --> 00:19:03,010 kirsebær og appelsiner og lignende. 467 00:19:03,010 --> 00:19:05,110 Vel i Scratch, som ble gjennomført med dette oransje 468 00:19:05,110 --> 00:19:09,000 blokkere som inneholder ord, i dette tilfellet, er vi bokstavelig talt 469 00:19:09,000 --> 00:19:10,800 legge "oransje" til en 470 00:19:10,800 --> 00:19:12,460 variabel kalt inventar. 471 00:19:12,460 --> 00:19:14,910 Så i C, er denne syntaksen kommer til å få litt mer kryptisk. 472 00:19:14,910 --> 00:19:17,250 Og vi vil komme tilbake til dette i neste uke, og gjøre mer 473 00:19:17,250 --> 00:19:21,060 interessante ting i verden av kryptografi med det. 474 00:19:21,060 --> 00:19:23,990 Men på bunnen her, disse to linjene hovedsak 475 00:19:23,990 --> 00:19:27,550 oversette til hva vi gjør i ett Scratch blokkere opp der. 476 00:19:27,550 --> 00:19:30,120 Men mer om det som kommer. 477 00:19:30,120 --> 00:19:34,120 >> Så setter det sammen, her er et program i C. Så la oss 478 00:19:34,120 --> 00:19:36,590 raskt erte hverandre noen av bitene av syntaks her, men 479 00:19:36,590 --> 00:19:40,300 så la oss faktisk begynne å skrive noen kode, gjøre 480 00:19:40,300 --> 00:19:42,440 deg med noen av verktøyene vi skal bruke, og se om vi 481 00:19:42,440 --> 00:19:45,400 kan bygge på nå noen av disse grunnleggende byggesteinene fra 482 00:19:45,400 --> 00:19:49,150 forrige uke, nå syntaktisk i C. Så på toppen her, dette 483 00:19:49,150 --> 00:19:51,380 er kanskje en av de mest kjedelige programmer du kunne 484 00:19:51,380 --> 00:19:53,130 skrive i de fleste noen programmeringsspråk. 485 00:19:53,130 --> 00:19:55,010 Men det er liksom har spesiell betydning fordi det er den 486 00:19:55,010 --> 00:19:58,120 kanoniske program som en hvilken som helst datamaskin vitenskapsmann skriver når 487 00:19:58,120 --> 00:19:59,620 undervisning noen et programmeringsspråk - 488 00:19:59,620 --> 00:20:01,230 Hallo verden program. 489 00:20:01,230 --> 00:20:05,120 >> Så på toppen, ser vi denne oppfatningen av # include 490 00:20:05,120 --> 00:20:08,180 og deretter, i festemateriell, stdio.h. 491 00:20:08,180 --> 00:20:10,580 Vi kommer til å komme tilbake til det, men egentlig hva som 492 00:20:10,580 --> 00:20:13,770 betyr at det er en fil i denne verden kalt standarden 493 00:20:13,770 --> 00:20:17,670 I / O, stdio dot h, og det er bare en tekstfil som 494 00:20:17,670 --> 00:20:19,240 noen skrev år siden. 495 00:20:19,240 --> 00:20:22,550 Og innsiden av denne tekstfilen er en hel haug med 496 00:20:22,550 --> 00:20:25,840 funksjoner, eller metoder eller prosedyrer, som noen andre 497 00:20:25,840 --> 00:20:28,970 skrev at vi nyter godt av fordi vi 498 00:20:28,970 --> 00:20:31,420 kan nå bruke denne personens kode. 499 00:20:31,420 --> 00:20:33,070 Funksjonene han eller hun skrev. 500 00:20:33,070 --> 00:20:36,320 I dette tilfellet, printf er ikke noe som jeg skrev, er det 501 00:20:36,320 --> 00:20:37,500 ikke noe som CS50 skrev. 502 00:20:37,500 --> 00:20:40,290 Det er noe som noen skrev år siden og satt i en 503 00:20:40,290 --> 00:20:43,450 fil som heter stdio.h og da, som en side, sette 504 00:20:43,450 --> 00:20:45,830 en annen del av funksjon i en annen fil. 505 00:20:45,830 --> 00:20:46,940 Men vi vil komme dit. 506 00:20:46,940 --> 00:20:50,070 >> Så # include er bare vår måte å si, i 507 00:20:50,070 --> 00:20:53,110 C, gi meg tilgang til funksjoner som noen andre skrev. 508 00:20:53,110 --> 00:20:55,490 Og i dette tilfellet bryr jeg fordi jeg vil printf. 509 00:20:55,490 --> 00:20:57,530 Nå får vi int main (void). 510 00:20:57,530 --> 00:21:00,160 Så dette er en av disse tingene, ærlig, at på dag 0, 511 00:21:00,160 --> 00:21:02,400 ganske mye jeg har å slags sone ut, fordi det er bare 512 00:21:02,400 --> 00:21:03,260 ikke interessant 513 00:21:03,260 --> 00:21:04,780 intellektuelt, noen av syntaksen. 514 00:21:04,780 --> 00:21:07,940 Men for nå vet at funksjoner, ellers kjent som 515 00:21:07,940 --> 00:21:11,660 prosedyrer, eller metoder, generelt produsere noen verdi. 516 00:21:11,660 --> 00:21:12,520 De gjør noe. 517 00:21:12,520 --> 00:21:13,810 De kommer opp med et svar. 518 00:21:13,810 --> 00:21:15,020 De produserer utgang. 519 00:21:15,020 --> 00:21:18,780 Så int neste to main er bare vår stenografi måte å si 520 00:21:18,780 --> 00:21:21,380 at denne funksjonen, denne prosedyren, til slutt kommer 521 00:21:21,380 --> 00:21:22,650 å gi deg tilbake et nummer. 522 00:21:22,650 --> 00:21:24,370 Og hvorfor det er, vil vi komme tilbake til. 523 00:21:24,370 --> 00:21:27,810 Viktigste er bare standard internasjonal standard for standard 524 00:21:27,810 --> 00:21:30,990 funksjon som kommer til å bli henrettet i et C-program når 525 00:21:30,990 --> 00:21:31,860 du kjører den. 526 00:21:31,860 --> 00:21:34,160 Void betyr bare denne tingen, viktigste, tar ikke 527 00:21:34,160 --> 00:21:35,270 argumenter, i dette tilfellet. 528 00:21:35,270 --> 00:21:36,400 Så jeg blir super eksplisitt. 529 00:21:36,400 --> 00:21:38,160 Det er ingen strenger i det, er det ingen komma. 530 00:21:38,160 --> 00:21:40,690 Void betyr ingen argumenter til main. 531 00:21:40,690 --> 00:21:44,350 >> Nå til slutt, heldigvis, de to siste linjene er kjent. 532 00:21:44,350 --> 00:21:46,160 Inne i klammeparentes har vi en printf 533 00:21:46,160 --> 00:21:47,620 og vi har en retur. 534 00:21:47,620 --> 00:21:50,450 Og avkastningen er slags uheldig at vi må 535 00:21:50,450 --> 00:21:53,510 sette det der, fordi i dette tilfellet ikke det gjør alt som 536 00:21:53,510 --> 00:21:54,600 mye av interesse. 537 00:21:54,600 --> 00:21:58,790 Men i et dataprogram, når en funksjon returnerer 0, 538 00:21:58,790 --> 00:22:00,610 som betyr alt er vel. 539 00:22:00,610 --> 00:22:01,820 Ingenting gikk galt. 540 00:22:01,820 --> 00:22:06,170 Derimot, hvis en funksjon returnerer 1, eller negativ 1, eller 541 00:22:06,170 --> 00:22:11,670 negative 1337, eller noen tilfeldige tall som det, at 542 00:22:11,670 --> 00:22:14,020 betyr vanligvis at en feil faktisk har oppstått. 543 00:22:14,020 --> 00:22:16,150 Så hvis du er på Mac eller PC, hvis du noen gang har sett 544 00:22:16,150 --> 00:22:18,590 noen irriterende melding fordi datamaskinen har krasjet eller 545 00:22:18,590 --> 00:22:20,660 frosset, og det er en kryptisk feilmelding, 546 00:22:20,660 --> 00:22:23,320 og deretter noen kode, som system kode 547 00:22:23,320 --> 00:22:25,110 1,2,3,4, noen nummer, 548 00:22:25,110 --> 00:22:29,270 som er generelt en unødvendig detalj å fortelle 549 00:22:29,270 --> 00:22:32,110 de fleste av oss mennesker, men det er det noen funksjon eller noen 550 00:22:32,110 --> 00:22:34,890 programmet har faktisk returnerte, en ikke-null verdi. 551 00:22:34,890 --> 00:22:38,540 Og fordelen med dette er at 0 betyr alle så vel, og 552 00:22:38,540 --> 00:22:40,470 da du egentlig har en uendelig rekke ting som 553 00:22:40,470 --> 00:22:41,130 kan gå galt. 554 00:22:41,130 --> 00:22:44,700 Som er grunnen til at de valgte 0 for god og en annen verdi enn null for 555 00:22:44,700 --> 00:22:46,450 dårlig, som vi skal snart se. 556 00:22:46,450 --> 00:22:47,870 >> Så la oss gå videre og skrive dette. 557 00:22:47,870 --> 00:22:51,610 Så husker at den andre dagen jeg brukte min Mac til å åpne opp en 558 00:22:51,610 --> 00:22:53,970 terminal-vinduet, og da jeg åpnet opp tekstprogram, som 559 00:22:53,970 --> 00:22:55,900 TextEdit, og jeg begynte å skrive noe kode. 560 00:22:55,900 --> 00:22:56,580 Vel det er greit. 561 00:22:56,580 --> 00:22:58,636 Men din erfaring kommer til å være annerledes på en Mac, eller 562 00:22:58,636 --> 00:23:01,220 på en Solaris maskin, en Linux-datamaskin, uansett operativsystem 563 00:23:01,220 --> 00:23:02,810 system du tilfeldigvis skal bruke. 564 00:23:02,810 --> 00:23:04,970 Og så i løpet, hva vi i stedet for å bruke er noe 565 00:23:04,970 --> 00:23:07,010 kalt CS50 Appliance. 566 00:23:07,010 --> 00:23:10,420 Så CS50 Appliance er et nedlastbart stykke programvare 567 00:23:10,420 --> 00:23:13,640 som lar deg kjøre et operativsystem som heter Linux, 568 00:23:13,640 --> 00:23:16,810 spesielt Fedora Linux, på din egen Mac eller PC. 569 00:23:16,810 --> 00:23:20,810 Og du gjør dette ved å laste ned noe som kalles en hypervisor. 570 00:23:20,810 --> 00:23:23,100 Så alt dette skal dokumenteres i oppgavesettet en. 571 00:23:23,100 --> 00:23:25,240 Og du vil bli guidet mot hva du trenger å laste ned. 572 00:23:25,240 --> 00:23:27,510 Men sluttresultatet, om du har en Mac eller PC, er du 573 00:23:27,510 --> 00:23:29,080 laste ned noen gratis programvare. 574 00:23:29,080 --> 00:23:32,340 Du kan deretter laste ned CS50 Appliance, og du fortelle at 575 00:23:32,340 --> 00:23:33,960 fri programvare - hypervisoren - 576 00:23:33,960 --> 00:23:38,080 å kjøre CS50 Appliance i et vindu på datamaskinen. 577 00:23:38,080 --> 00:23:39,490 Og det som skjer er dette. 578 00:23:39,490 --> 00:23:43,660 >> Jeg har nå, legge merke til her, synes det å være en stasjonær 579 00:23:43,660 --> 00:23:44,130 miljø. 580 00:23:44,130 --> 00:23:46,150 Og la meg faktisk krympe dette enkelt vindu. 581 00:23:46,150 --> 00:23:49,640 Så dette er nå min Mac, med et lite vindu her, og inne 582 00:23:49,640 --> 00:23:51,300 av dette vinduet skjer for å være en helt 583 00:23:51,300 --> 00:23:52,380 annet operativsystem. 584 00:23:52,380 --> 00:23:55,250 Faktisk er det denne startmenyen her nede, som minner om 585 00:23:55,250 --> 00:23:57,990 Vinduer, som har en hel haug med undermenyer, inkludert 586 00:23:57,990 --> 00:24:00,720 en link til CS50 manuell, Dropbox og lignende. 587 00:24:00,720 --> 00:24:03,480 Og hva dette miljøet er nå en standard miljø 588 00:24:03,480 --> 00:24:06,280 at alle av oss kan nå bruke, slik at uansett hva din 589 00:24:06,280 --> 00:24:08,960 datamaskinen er, hva du har installert på det, hva versjon 590 00:24:08,960 --> 00:24:11,430 av Mac OS eller Windows du kjører, vi alle har nå 591 00:24:11,430 --> 00:24:12,800 samme miljø. 592 00:24:12,800 --> 00:24:15,850 Og nå i dette miljøet kan vi begynne å skrive noe kode. 593 00:24:15,850 --> 00:24:18,480 >> Så jeg kommer til å gå videre og åpne et program som heter gedit. 594 00:24:18,480 --> 00:24:21,500 Dette kan sammenlignes med Notepad.exe eller 595 00:24:21,500 --> 00:24:22,790 TextEdit på Mac. 596 00:24:22,790 --> 00:24:25,390 Og dette er bare en super enkel tekstredigering program 597 00:24:25,390 --> 00:24:27,500 som ser ut som dette ved første øyekast. 598 00:24:27,500 --> 00:24:30,640 Nå på toppen, jeg har en hvit palett, nederst jeg 599 00:24:30,640 --> 00:24:33,860 har denne sorte vinduet som sier jharvard @ apparatet. 600 00:24:33,860 --> 00:24:36,440 Og det er fordi brukerkontoen som vi pre-laget 601 00:24:36,440 --> 00:24:38,430 for alle kalles John Harvard. 602 00:24:38,430 --> 00:24:41,490 Han har en mappe hvor alle sine filer kommer til å gå, og 603 00:24:41,490 --> 00:24:43,500 her er der vi kan begynne å skrive noe kode. 604 00:24:43,500 --> 00:24:45,810 Så la meg gå videre her og zoome inn bare litt, og jeg er 605 00:24:45,810 --> 00:24:51,550 kommer til å gjøre # include , int main (void), og 606 00:24:51,550 --> 00:24:57,470 så jeg kommer til å gjøre printf ("Hello World") 607 00:24:57,470 --> 00:24:59,490 , Tilbake 0. 608 00:24:59,490 --> 00:25:01,400 Nå er alle ganske svart og hvitt. 609 00:25:01,400 --> 00:25:03,830 >> La meg gå videre og gjøre en ting å lære gedit hva jeg 610 00:25:03,830 --> 00:25:04,510 faktisk gjør. 611 00:25:04,510 --> 00:25:06,140 La meg gå til Lagre som. 612 00:25:06,140 --> 00:25:08,560 Jeg kommer til å velge på venstre side her jharvard. 613 00:25:08,560 --> 00:25:11,010 Så igjen, selv om du aldri har brukt Linux før, ærlig 614 00:25:11,010 --> 00:25:13,680 disse dager, er alle av dem devolving inn hovedsak 615 00:25:13,680 --> 00:25:14,590 samme type grensesnitt - 616 00:25:14,590 --> 00:25:16,030 Mac OS, Windows og Linux. 617 00:25:16,030 --> 00:25:18,680 Så jeg valgte jharvard hjem-mappe her. 618 00:25:18,680 --> 00:25:21,120 Og jeg kommer til å lagre denne filen som hallo.c. 619 00:25:21,120 --> 00:25:24,260 Så på toppen, jeg skrev hallo.c; navngi en C 620 00:25:24,260 --> 00:25:26,520 program med. c utvidelsen er 621 00:25:26,520 --> 00:25:27,570 hva er vanlig praksis. 622 00:25:27,570 --> 00:25:28,650 Og jeg traff Lagre. 623 00:25:28,650 --> 00:25:32,510 Og nå hva som er hyggelig er at jeg har effektivt lært gedit, 624 00:25:32,510 --> 00:25:33,690 at dette er en C-program. 625 00:25:33,690 --> 00:25:36,470 Legg merke til at min svart og hvit tekst er nå fargekodet, eller 626 00:25:36,470 --> 00:25:39,330 syntaks markert, som bare trekker oppmerksomheten min til 627 00:25:39,330 --> 00:25:41,540 ulike semantiske deler av programmet. 628 00:25:41,540 --> 00:25:44,260 Øverst til venstre der, som mine programmer får mer komplisert, jeg 629 00:25:44,260 --> 00:25:47,060 kommer til å ha en oversikt over alle de tingene jeg har skrevet. 630 00:25:47,060 --> 00:25:48,050 Så det er det der oppe. 631 00:25:48,050 --> 00:25:52,350 Så la meg nå zoome ut og gå ned til denne terminalvindu. 632 00:25:52,350 --> 00:25:54,570 >> Så dette er kanskje nytt for mange mennesker. 633 00:25:54,570 --> 00:25:57,260 Hvis du aldri har brukt en kommandolinje miljø, har du aldri 634 00:25:57,260 --> 00:26:00,020 brukt DOS, eller du aldri har brukt Linux, eller du har aldri åpnet 635 00:26:00,020 --> 00:26:02,550 Mac OS terminal vindu, det er mange ting du 636 00:26:02,550 --> 00:26:04,820 kunne gjøre med GUI, som peker, og klikke, og 637 00:26:04,820 --> 00:26:07,080 å dra og slippe, og lignende, men generelt - 638 00:26:07,080 --> 00:26:09,360 sikkert i verden av informatikk - 639 00:26:09,360 --> 00:26:11,580 ved hjelp av en kommandolinje, der du ikke har musen 640 00:26:11,580 --> 00:26:14,220 generelt, du har bare tastaturet, er faktisk mye 641 00:26:14,220 --> 00:26:17,260 kraftigere enn grensesnitt, når du blir acclimated til 642 00:26:17,260 --> 00:26:18,580 ulike kommandoer. 643 00:26:18,580 --> 00:26:20,940 Og du liksom fri deg selv ønsker å peke og klikke 644 00:26:20,940 --> 00:26:21,690 på alt. 645 00:26:21,690 --> 00:26:23,890 Så i gedit vi liksom har det beste fra begge verdener. 646 00:26:23,890 --> 00:26:25,600 Vi kan dra og slippe tekst, kan vi se det 647 00:26:25,600 --> 00:26:26,840 hyggelig og fargekodet. 648 00:26:26,840 --> 00:26:29,630 Men når det gjelder tid til å kjøre programmet vårt, vil vi noen ganger 649 00:26:29,630 --> 00:26:31,750 bare bruke denne lille vinduet her. 650 00:26:31,750 --> 00:26:33,460 >> Så jeg kommer til å gå videre og gjøre dette. 651 00:26:33,460 --> 00:26:36,420 I bunnen svart og hvitt vindu, kommer jeg til å gå videre 652 00:26:36,420 --> 00:26:37,890 og skrive clang. 653 00:26:37,890 --> 00:26:40,130 Og clang er navnet på en kompilator. 654 00:26:40,130 --> 00:26:43,310 Det er et program som konverterer min kildekoden 655 00:26:43,310 --> 00:26:48,770 inn, så objektkode. 656 00:26:48,770 --> 00:26:51,270 0'er og 1'ere, som vi så kort forrige uke. 657 00:26:51,270 --> 00:26:53,700 Husker fra forrige uke, lovet vi at vi skulle 658 00:26:53,700 --> 00:26:55,920 gå fra noe sånt som dette - vi trengte å være 659 00:26:55,920 --> 00:26:57,010 noe sånt som dette - 660 00:26:57,010 --> 00:26:58,700 og dette er absolutt ikke noe som et menneske kommer 661 00:26:58,700 --> 00:26:59,690 å gjøre manuelt. 662 00:26:59,690 --> 00:27:01,980 Så i stedet vi kommer til å bruke et program, og at programmet i 663 00:27:01,980 --> 00:27:03,430 dette tilfellet kalles Clang. 664 00:27:03,430 --> 00:27:06,020 Og navnet på programmet mitt er hallo.c. 665 00:27:06,020 --> 00:27:09,670 Så for å kompilere hallo.c fra kildekoden til 666 00:27:09,670 --> 00:27:12,930 objekt-kode eller 0'er og 1'ere, bør det være nok å bare gjøre 667 00:27:12,930 --> 00:27:14,820 dette og trykker Enter. 668 00:27:14,820 --> 00:27:16,850 >> Ok, ingenting synes å ha skjedd. 669 00:27:16,850 --> 00:27:20,450 Men jeg vet nå, eller fra forrige uke, at standardnavnet 670 00:27:20,450 --> 00:27:24,920 et program, når skrevet i C, er tåpelig kalles a.out. 671 00:27:24,920 --> 00:27:26,610 Mest uinteressante navn du kan komme opp med. 672 00:27:26,610 --> 00:27:28,790 A er den første bokstaven i alfabetet, er ut hva som var 673 00:27:28,790 --> 00:27:29,960 outputted, men det får så være. 674 00:27:29,960 --> 00:27:33,570 Dette er mitt program, og nå dot slash, som vi skal se, er 675 00:27:33,570 --> 00:27:36,170 faktisk bare en slags sikkerhetsfunksjon, fordi 676 00:27:36,170 --> 00:27:38,250 a.out er et program jeg skrev. 677 00:27:38,250 --> 00:27:39,650 Det kom ikke med datamaskinen min, er det 678 00:27:39,650 --> 00:27:40,790 ikke i Programfiler. 679 00:27:40,790 --> 00:27:42,910 Det er ikke i Mac OS programmappa. 680 00:27:42,910 --> 00:27:45,740 Jeg trenger å være super eksplisitt med datamaskinen, og si 681 00:27:45,740 --> 00:27:49,030 dette programmet, a.out, er i gjeldende mappe, den 682 00:27:49,030 --> 00:27:50,260 gjeldende katalog. 683 00:27:50,260 --> 00:27:53,160 Og måten du representerer dette i et miljø som dette 684 00:27:53,160 --> 00:27:57,070 er prikk representerer hva mappen du er i. 685 00:27:57,070 --> 00:27:59,420 Og så. / Betyr bare kjøre a.out 686 00:27:59,420 --> 00:28:00,530 i gjeldende mappe. 687 00:28:00,530 --> 00:28:04,830 Og jeg kjører dette med Enter, og voila, min aller første program. 688 00:28:04,830 --> 00:28:05,990 >> Nå la meg ta et skritt tilbake. 689 00:28:05,990 --> 00:28:08,280 Dette vinduet er litt liten, og innse at bunnen 690 00:28:08,280 --> 00:28:10,340 igjen av apparatet her er et annet ikon. 691 00:28:10,340 --> 00:28:12,660 Det ene er Chrome, som bør være ganske kjent, bare en web 692 00:28:12,660 --> 00:28:14,350 Nettleseren innsiden av apparatet. 693 00:28:14,350 --> 00:28:16,340 Og svart og hvitt symbol er bare en 694 00:28:16,340 --> 00:28:17,720 større terminal-vinduet. 695 00:28:17,720 --> 00:28:19,830 Så hvis det blir litt irriterende å sortere av har bare 696 00:28:19,830 --> 00:28:22,270 denne lille lille bit av et vindu som å samhandle 697 00:28:22,270 --> 00:28:24,370 med programmer, kan vi i stedet gjøre dette. 698 00:28:24,370 --> 00:28:26,640 Og nå la meg begynne å skrive noen snart 699 00:28:26,640 --> 00:28:27,980 å være kjente kommandoer. 700 00:28:27,980 --> 00:28:28,900 ls. 701 00:28:28,900 --> 00:28:31,410 Så ls er kommandoen for notering. 702 00:28:31,410 --> 00:28:33,900 Så i en Mac OS eller Windows, vil du vanligvis dobbeltklikker en 703 00:28:33,900 --> 00:28:36,510 mappen, og voila, du ser alle de forskjellige filer 704 00:28:36,510 --> 00:28:37,210 og mapper. 705 00:28:37,210 --> 00:28:39,650 I en kommandolinje miljø, hvor du bare kan skrive 706 00:28:39,650 --> 00:28:42,390 kommandoer eller tekst, er ls tilsvarende. 707 00:28:42,390 --> 00:28:44,380 Så vis meg hva som er i denne katalogen. 708 00:28:44,380 --> 00:28:46,540 >> Nå er det en haug med ting her som er både litt 709 00:28:46,540 --> 00:28:48,190 kjent og litt ukjent. 710 00:28:48,190 --> 00:28:50,740 Men legg merke til at akkurat som Windows og Mac OS, jharvard 711 00:28:50,740 --> 00:28:52,190 har en stasjonær mappe. 712 00:28:52,190 --> 00:28:54,520 Så noen ikoner som er på skrivebordet mitt skje 713 00:28:54,520 --> 00:28:55,650 å være i den mappen. 714 00:28:55,650 --> 00:28:57,250 Det er en nedlastinger mappe, ting som 715 00:28:57,250 --> 00:28:58,890 Chrome kan sette der. 716 00:28:58,890 --> 00:28:59,250 Dropbox. 717 00:28:59,250 --> 00:29:01,820 Så apparatet kommer med innebygd støtte for Dropbox 718 00:29:01,820 --> 00:29:04,500 slik at over semesteret, kan du synkronisere med din Dropbox 719 00:29:04,500 --> 00:29:06,420 konto, slik at alle programmer er sikkerhetskopiert. 720 00:29:06,420 --> 00:29:08,050 De er tilgjengelig på den andre datamaskinen. 721 00:29:08,050 --> 00:29:09,780 Hvis noe noensinne går galt med apparatet, kan du 722 00:29:09,780 --> 00:29:11,340 veldig enkelt gjenopprette fra Dropbox. 723 00:29:11,340 --> 00:29:12,940 Slik at mappen er der for det. 724 00:29:12,940 --> 00:29:14,660 Det er to filer som jeg har gjort - hallo.c 725 00:29:14,660 --> 00:29:16,540 og a.out. 726 00:29:16,540 --> 00:29:18,530 Og deretter til høyre er det noen andre mapper som vi vil 727 00:29:18,530 --> 00:29:20,710 komme til mot slutten av semesteret, med web 728 00:29:20,710 --> 00:29:21,540 programmering. 729 00:29:21,540 --> 00:29:26,160 Så når jeg gjør. /, A.out, Enter, som sier gå 730 00:29:26,160 --> 00:29:29,460 i katalogen er jeg i, nåværende katalog, og kjør 731 00:29:29,460 --> 00:29:32,465 program kalt a.out rett der. 732 00:29:32,465 --> 00:29:35,810 >> All right, så det er fint og bra, men det er ikke alle som 733 00:29:35,810 --> 00:29:38,550 attraktivt å skrive et program som heter hjelpe a.out. 734 00:29:38,550 --> 00:29:40,790 Så vi kan faktisk gjøre dette litt annerledes. 735 00:29:40,790 --> 00:29:43,980 Så i stedet for bare å kjøre clang, hallo.c, la oss legge 736 00:29:43,980 --> 00:29:46,850 det som kalles en kommandolinje argument. 737 00:29:46,850 --> 00:29:50,730 Så en kommandolinje argument, eller en bryter i dette tilfellet, er bare 738 00:29:50,730 --> 00:29:54,930 et annet ord eller en frase som du skriver i en melding etter 739 00:29:54,930 --> 00:29:56,290 programmet du vil kjøre. 740 00:29:56,290 --> 00:29:59,970 Så i dette tilfellet, er clang programmet jeg ønsker å kjøre,-o 741 00:29:59,970 --> 00:30:03,480 betyr utgang til en fil som ikke lenger heter a.out. 742 00:30:03,480 --> 00:30:07,510 Utgang en fil som heter Hallo, og gjør det ved å kompilere den 743 00:30:07,510 --> 00:30:10,200 siste ord på linjen, hallo.c. 744 00:30:10,200 --> 00:30:13,200 Så kort sagt, er dette en svært marginal forbedring, der 745 00:30:13,200 --> 00:30:15,850 i stedet for å ha dette stupidly navngitt fil a.out, 746 00:30:15,850 --> 00:30:21,430 Jeg kan nå gjøre clang-o hello, så hallo.c, og 747 00:30:21,430 --> 00:30:22,530 trykk Enter. 748 00:30:22,530 --> 00:30:25,510 Ingenting ser ut til å skje, men igjen mye som med 0 - når 749 00:30:25,510 --> 00:30:28,510 ingenting synes å skje som betyr noe galt skjedde - 750 00:30:28,510 --> 00:30:31,460 så la oss gjøre ls nå, Enter, og faktisk jeg nå 751 00:30:31,460 --> 00:30:32,780 har en god dag program. 752 00:30:32,780 --> 00:30:38,510 Så hvis jeg skriver hei nå, kommando ikke funnet. 753 00:30:38,510 --> 00:30:39,440 OK,. /. 754 00:30:39,440 --> 00:30:40,220 Så helt riktig. 755 00:30:40,220 --> 00:30:43,170 Så fordi dette programmet skrev jeg, og det kom ikke med 756 00:30:43,170 --> 00:30:45,810 datamaskinen,. / hallo, Enter, betyr 757 00:30:45,810 --> 00:30:47,350 Jeg kjører nå hei. 758 00:30:47,350 --> 00:30:48,440 >> Så det er det der. 759 00:30:48,440 --> 00:30:51,070 Nå hva vi vil til slutt få til mer og mer kommandolinje 760 00:30:51,070 --> 00:30:54,110 argumenter som tillater oss å gjøre mer, men bare for dem for 761 00:30:54,110 --> 00:30:57,760 hvem dette kan være gamle lue, la meg faktisk gå inn i en 762 00:30:57,760 --> 00:31:01,910 katalog her og bare gi deg en teaser av hvordan ellers vi 763 00:31:01,910 --> 00:31:05,770 kunne gå om å implementere hallo verden. 764 00:31:05,770 --> 00:31:10,730 La meg gå inn på her, og jeg kommer til å åpne den. 765 00:31:10,730 --> 00:31:13,090 Så egentlig, jeg kommer til å forklare hva jeg gjør, så 766 00:31:13,090 --> 00:31:15,610 dette er nyttig. 767 00:31:15,610 --> 00:31:17,410 La meg opp igjen. 768 00:31:17,410 --> 00:31:19,620 >> Så jeg har gjort dette i lang tid. 769 00:31:19,620 --> 00:31:23,030 Så merker over på høyre er det et par av 770 00:31:23,030 --> 00:31:26,940 kataloger som er merkelig navn source1m og source1w. 771 00:31:26,940 --> 00:31:28,830 Dette er bare dumt konvensjonen vi bruker. 772 00:31:28,830 --> 00:31:31,825 Kilde betyr bare kildekoden, betyr en dette er uke én, og 773 00:31:31,825 --> 00:31:34,000 m betyr at det er mandag, og w betyr at det er onsdag. 774 00:31:34,000 --> 00:31:34,900 Så ingenting kryptisk der. 775 00:31:34,900 --> 00:31:37,830 Det er bare stenografi notasjon. 776 00:31:37,830 --> 00:31:39,860 Disse blå ting er mapper, ellers kjent som 777 00:31:39,860 --> 00:31:40,630 kataloger. 778 00:31:40,630 --> 00:31:43,870 Jeg ønsker å gå inn i den mappen nå, og på en vanlig datamaskin 779 00:31:43,870 --> 00:31:45,710 Jeg kunne bare dobbeltklikker på en mappe ikon og 780 00:31:45,710 --> 00:31:46,810 det er alle mine filer. 781 00:31:46,810 --> 00:31:49,270 Men i en kommandolinje miljø, kan jeg ikke helt gjøre 782 00:31:49,270 --> 00:31:52,640 det, så i stedet, må jeg endre kataloger manuelt. 783 00:31:52,640 --> 00:31:57,900 Så hvis jeg skriver cd og deretter source1m, Enter, legge merke til at 784 00:31:57,900 --> 00:32:01,180 min spør, ting i hvitt til venstre, nettopp endret. 785 00:32:01,180 --> 00:32:03,690 Og så ja, da det bare sa parenteser og deretter 786 00:32:03,690 --> 00:32:06,450 liten latter, tilde symbol, som bare mente jeg var 787 00:32:06,450 --> 00:32:08,800 i John Harvard hjemmekatalog, hans Mine dokumenter, 788 00:32:08,800 --> 00:32:10,390 hans personlige filer. 789 00:32:10,390 --> 00:32:14,000 Men nå i parentes står det ~ / source1m. 790 00:32:14,000 --> 00:32:17,090 Dette betyr bare jeg er i en mappe som heter source1m 791 00:32:17,090 --> 00:32:19,160 som er i John Harvard hjemmekatalog. 792 00:32:19,160 --> 00:32:22,030 Så hvis jeg nå ønsker å liste opp filene i denne mappen, lett 793 00:32:22,030 --> 00:32:25,300 spørsmålet, skriver jeg bare ls. 794 00:32:25,300 --> 00:32:28,860 Og nå ser jeg alle filene som jeg pre-laget for dagens 795 00:32:28,860 --> 00:32:31,020 foredrag, som alle, eller de fleste av dem, skjer 796 00:32:31,020 --> 00:32:32,740 å slutte på. c.. 797 00:32:32,740 --> 00:32:36,210 >> Så la meg gå videre nå og kjøre gedit av et program kalt 798 00:32:36,210 --> 00:32:39,140 holloway.c, som er skrevet av noen tilfeldige hacker 799 00:32:39,140 --> 00:32:42,920 på internett, ser det litt som dette. 800 00:32:42,920 --> 00:32:44,880 Og vi kommer ikke til å gå gjennom dette i noen 801 00:32:44,880 --> 00:32:48,530 detalj, men for de mer komfortable, spesielt hvis 802 00:32:48,530 --> 00:32:50,935 du ønsker å ta en gjetning på hva dette programmet gjør her. 803 00:32:57,950 --> 00:32:59,990 Trygg, uansett om du er mindre eller mer komfortabel, 804 00:32:59,990 --> 00:33:01,655 vi ikke engang komme til denne typen ting innen utgangen av 805 00:33:01,655 --> 00:33:02,160 dette semesteret. 806 00:33:02,160 --> 00:33:05,390 Dette er hva som er et eksempel på en uklar C konkurranse, som 807 00:33:05,390 --> 00:33:08,390 betyr skrive mest kryptiske ser programmet du muligens 808 00:33:08,390 --> 00:33:10,820 kan å overgå andre smarte mennesker, som er tilsvarende 809 00:33:10,820 --> 00:33:13,010 prøver å skrive ting og vise frem at de kan skrive 810 00:33:13,010 --> 00:33:14,280 mer kryptiske ting enn deg. 811 00:33:14,280 --> 00:33:17,290 Så dette er ikke et eksempel på en velskrevet programmet fra 812 00:33:17,290 --> 00:33:21,260 perspektiv av stil, er dette et eksempel på et program som 813 00:33:21,260 --> 00:33:22,860 vinner en konkurranse, for folk prøver å 814 00:33:22,860 --> 00:33:24,090 være vage og abstrakte. 815 00:33:24,090 --> 00:33:27,670 >> Så hvis vi kjører denne tingen, la meg gå inn i min terminal-vinduet, 816 00:33:27,670 --> 00:33:28,110 så å si. 817 00:33:28,110 --> 00:33:29,650 Så svart og hvitt miljø kalles 818 00:33:29,650 --> 00:33:31,160 terminalvindu generelt. 819 00:33:31,160 --> 00:33:32,600 La meg gå videre og kompilere den. 820 00:33:32,600 --> 00:33:34,440 Jeg har ikke tenkt å bruke clang, fordi dette programmet er en 821 00:33:34,440 --> 00:33:36,340 litt kryptisk og det er behov for en annen 822 00:33:36,340 --> 00:33:38,190 kompilator, en som heter GCC. 823 00:33:38,190 --> 00:33:39,200 Men det gjør det samme. 824 00:33:39,200 --> 00:33:41,130 Det tar kildekoden til objektkode. 825 00:33:41,130 --> 00:33:43,940 Og nå hvis jeg kjører a.out, det programmet du 826 00:33:43,940 --> 00:33:46,065 bare så gjør dette. 827 00:33:49,220 --> 00:33:51,170 Slik at fyren som året vant den konkurransen. 828 00:33:51,170 --> 00:33:54,020 Anyhow, vi ikke går i riktig retning, per se. 829 00:33:54,020 --> 00:33:57,400 >> Så la oss faktisk prøver å nå erte hverandre hva vi kan gjøre 830 00:33:57,400 --> 00:33:59,540 med disse grunnleggende byggesteinene for å gjøre mer og mer 831 00:33:59,540 --> 00:34:00,590 interessante programmer. 832 00:34:00,590 --> 00:34:02,800 Så vi har skrevet et program, har vi kjørt et program. 833 00:34:02,800 --> 00:34:05,780 Nå kan vi faktisk forenkle og ikke lenger trenger å skrive 834 00:34:05,780 --> 00:34:07,210 ordet clang ved ledeteksten. 835 00:34:07,210 --> 00:34:10,710 Det viser seg som våre programmer får mer kryptisk, vi kan, eller 836 00:34:10,710 --> 00:34:14,699 mer kompleks heller, kan vi faktisk kjøre denne kommandoen. 837 00:34:14,699 --> 00:34:17,610 Så la meg gå tilbake til mitt hjem katalog, så å si, la meg 838 00:34:17,610 --> 00:34:20,750 fjerne - rm er fjern kommandoen - jeg kommer til å fjerne 839 00:34:20,750 --> 00:34:23,060 filen som heter a.out og Hallo. 840 00:34:23,060 --> 00:34:25,489 Og nå merker i en kommandolinje miljø, mye som i 841 00:34:25,489 --> 00:34:27,800 en GUI, får du beskjed om det. Jeg kan ikke klikke på en knapp skjønt, jeg 842 00:34:27,800 --> 00:34:31,040 å skrive y for ja, y for ja. 843 00:34:31,040 --> 00:34:33,460 Og nå hvis jeg skriver ls igjen, legg merke til at de grønne 844 00:34:33,460 --> 00:34:35,469 programmer - a.out og hei - 845 00:34:35,469 --> 00:34:35,734 er borte. 846 00:34:35,734 --> 00:34:37,340 Pass rm. 847 00:34:37,340 --> 00:34:39,739 Det kan gjøre dårlige ting, akkurat som du kan ved å dra 848 00:34:39,739 --> 00:34:40,810 ting til papirkurven. 849 00:34:40,810 --> 00:34:43,989 >> Så la oss nå gå videre - og jeg kunne gjøre dette - clang-o 850 00:34:43,989 --> 00:34:45,139 hallo, hallo - 851 00:34:45,139 --> 00:34:46,884 Jeg er allerede lei skrive denne kommandoen. 852 00:34:46,884 --> 00:34:48,080 Selv om jeg skrev det litt raskt. 853 00:34:48,080 --> 00:34:51,870 Så vi kan i stedet gjør hei. 854 00:34:51,870 --> 00:34:53,880 Så sørg ikke en kompilator. 855 00:34:53,880 --> 00:34:57,720 Det er bare en vennlig program som følger med Linux, i dette 856 00:34:57,720 --> 00:34:59,070 tilfelle - operativsystemet - 857 00:34:59,070 --> 00:35:02,480 som automatiserer prosessen med å sette sammen programmer. 858 00:35:02,480 --> 00:35:05,555 Så i stedet for å huske clang-o filnavn og 859 00:35:05,555 --> 00:35:08,190 Deretter så videre, spesielt når disse linjene blir lengre og 860 00:35:08,190 --> 00:35:10,110 lenger, kan jeg bare skrive gjøre. 861 00:35:10,110 --> 00:35:12,030 Og dette kommer til å spytte ut en hel haug med ting som 862 00:35:12,030 --> 00:35:13,940 Vi vil til slutt se dette semesteret. 863 00:35:13,940 --> 00:35:17,500 Men legg merke nå hvis jeg skriver ls, hallo er tilbake i katalogen min. 864 00:35:17,500 --> 00:35:19,850 Og faktisk jeg kan kjøre den med. / Hallo. 865 00:35:19,850 --> 00:35:23,330 Så sørg bare automatiserer prosessen med å kjøre det som var, 866 00:35:23,330 --> 00:35:26,910 i dette tilfellet, en mye lengre, mer komplekse kommando. 867 00:35:26,910 --> 00:35:29,060 Så vi kommer til å begynne å bruke merke, bare fordi det er mye 868 00:35:29,060 --> 00:35:30,530 mer brukervennlig. 869 00:35:30,530 --> 00:35:32,770 >> Men la oss nå gjøre en mer interessant program 870 00:35:32,770 --> 00:35:34,650 enn bare si hei. 871 00:35:34,650 --> 00:35:38,680 Så i programmene vi har skrevet så langt det er viktigste. 872 00:35:38,680 --> 00:35:40,890 Det er bare standard ting som sparker alt av. 873 00:35:40,890 --> 00:35:43,340 Men det er andre funksjoner der ute også, og 874 00:35:43,340 --> 00:35:45,890 stdio.h er ting som vi så på toppen av vår 875 00:35:45,890 --> 00:35:48,480 filen før, og at det som er kjent som standard bibliotek. 876 00:35:48,480 --> 00:35:51,300 Innsiden av standard biblioteket er en hel haug av funksjoner 877 00:35:51,300 --> 00:35:53,850 at noen andre skrev, og vi kan begynne å bruke disse 878 00:35:53,850 --> 00:35:55,050 funksjoner for å skrive mer 879 00:35:55,050 --> 00:35:56,760 interessante programmer oss selv. 880 00:35:56,760 --> 00:35:58,370 >> Så la meg gå tilbake til apparatet. 881 00:35:58,370 --> 00:35:59,820 Jeg kommer til å lukke dette terminalvinduet. 882 00:35:59,820 --> 00:36:02,630 Jeg kommer til å lukke de tingene vi skrev tidligere, og bare gå 883 00:36:02,630 --> 00:36:07,350 inn hallo.c, og legge merke til nå kan jeg gjøre følgende. 884 00:36:07,350 --> 00:36:09,730 Hei verden er ikke alle som interessant, jeg vil gjerne 885 00:36:09,730 --> 00:36:11,770 tilpasse dette programmet for meg selv. 886 00:36:11,770 --> 00:36:13,440 Så i stedet for å si verden, kommer jeg til å 887 00:36:13,440 --> 00:36:14,830 gå foran og si - 888 00:36:14,830 --> 00:36:16,880 Jeg kunne skrive David - men dette virkelig er liksom 889 00:36:16,880 --> 00:36:18,050 fundamentalt den samme. 890 00:36:18,050 --> 00:36:19,970 Men la oss prøve ut dette plassholder idé. 891 00:36:19,970 --> 00:36:24,460 Husk at i C, heller i printf, hadde vi disse 892 00:36:24,460 --> 00:36:28,110 plassholdere, og det er mer enn bare% d. 893 00:36:28,110 --> 00:36:31,150 Så% d var rask tilregnelighet sjekk. 894 00:36:31,150 --> 00:36:32,310 Ok, desimaltall, det er det. 895 00:36:32,310 --> 00:36:33,860 Desimalsifre, det er alt. 896 00:36:33,860 --> 00:36:37,755 Så% c, som vi vil møte, kommer til å være et tegn. 897 00:36:37,755 --> 00:36:40,530 Sett en karakter her, en bokstav a til z, 898 00:36:40,530 --> 00:36:41,600 eller tegnsetting symbol. 899 00:36:41,600 --> 00:36:45,590 En enkelt karakter,% f, noen som vet fra andre språk? 900 00:36:45,590 --> 00:36:47,020 Så et flyttall. 901 00:36:47,020 --> 00:36:47,880 Et reelt tall. 902 00:36:47,880 --> 00:36:51,550 Så det er ikke et desimaltall - dette er faktisk et reelt tall med 903 00:36:51,550 --> 00:36:54,130 desimaltegn, og noen flere sifre til venstre 904 00:36:54,130 --> 00:36:55,520 og høyre for det. 905 00:36:55,520 --> 00:36:58,060 % S, streng. 906 00:36:58,060 --> 00:36:59,530 Som vi kommer til å se ganske ofte. 907 00:36:59,530 --> 00:37:02,140 En streng, igjen, er bare et ord, en setning, en sekvens av 908 00:37:02,140 --> 00:37:03,330 individuelle tegn. 909 00:37:03,330 --> 00:37:06,730 Og til slutt, LLD? 910 00:37:06,730 --> 00:37:08,210 Så dette er mer av et hjørne sak. 911 00:37:08,210 --> 00:37:09,850 Lang, lang desimal. 912 00:37:09,850 --> 00:37:12,035 Så hvis du ønsker ikke bare et tall som er denne store, du 913 00:37:12,035 --> 00:37:14,160 ønsker et større antall, er du nødt til å oppgi til 914 00:37:14,160 --> 00:37:16,400 datamaskinen som det er av en bestemt størrelse. 915 00:37:16,400 --> 00:37:17,610 >> Så la oss finpusse dette litt. 916 00:37:17,610 --> 00:37:20,610 Snarere enn bare hardt kode i David, la meg litt 917 00:37:20,610 --> 00:37:22,460 dynamisk si% s. 918 00:37:22,460 --> 00:37:25,790 Så satt% s her, som er en plassholder for en streng. 919 00:37:25,790 --> 00:37:30,500 Så la meg gjøre komma, og deretter "David" over her. 920 00:37:30,500 --> 00:37:32,770 Nå er ikke alle som intellektuelt interessant, 921 00:37:32,770 --> 00:37:35,060 fordi alt jeg har gjort nå er å lage virkelig mer arbeid for 922 00:37:35,060 --> 00:37:35,790 maskinen. 923 00:37:35,790 --> 00:37:39,660 Heller enn å fortelle datamaskinen gjør alt dette på en gang, er jeg nå 924 00:37:39,660 --> 00:37:43,760 sier gjør dette og sette inn en streng her til slutt, komma, 925 00:37:43,760 --> 00:37:44,950 her er at strengen. 926 00:37:44,950 --> 00:37:47,220 Så dette er ikke en bedre forbedring, men det er minst 927 00:37:47,220 --> 00:37:49,010 et skritt mot en mer interessant program. 928 00:37:49,010 --> 00:37:51,240 Fordi nå, la meg gå videre og gjøre dette vinduet litt 929 00:37:51,240 --> 00:37:56,850 større, la meg gå videre og kjør make hallo. 930 00:37:56,850 --> 00:38:01,340 Og nå,. / A.out ikke fungerer, hvorfor? 931 00:38:03,880 --> 00:38:05,570 Greit, nå det heter hei. 932 00:38:05,570 --> 00:38:09,400 Så igjen gjøre, og også clang med a-o, omdøpt 933 00:38:09,400 --> 00:38:11,120 program for å være noe mer interessant. 934 00:38:11,120 --> 00:38:13,060 Og voila: Nå står det hei David. 935 00:38:13,060 --> 00:38:14,590 >> Greit, fortsatt en dum program. 936 00:38:14,590 --> 00:38:18,070 Så la oss nå faktisk gå tilbake hit og introdusere begrepet 937 00:38:18,070 --> 00:38:18,810 av en variabel. 938 00:38:18,810 --> 00:38:21,600 Ville det ikke vært fint om jeg kunne erklære en variabel 939 00:38:21,600 --> 00:38:23,150 hvis typen er streng? 940 00:38:23,150 --> 00:38:26,720 Og variabelens verdi kommer egentlig fra brukeren 941 00:38:26,720 --> 00:38:27,810 ham eller henne selv. 942 00:38:27,810 --> 00:38:30,240 Så vilkårlig, jeg kommer til å ringe min variable s, som er 943 00:38:30,240 --> 00:38:32,410 bare en vanlig konvensjon når du har en variabel kalt 944 00:38:32,410 --> 00:38:33,250 strengen. 945 00:38:33,250 --> 00:38:35,670 Jeg kommer til å gjøre likhetstegn, og da kommer jeg til å kalle en 946 00:38:35,670 --> 00:38:38,030 funksjon kalt GetString. 947 00:38:38,030 --> 00:38:40,830 Så GetString er ikke noe som kommer innebygd i C. Det er 948 00:38:40,830 --> 00:38:43,330 en funksjon som CS50 personalet skrev egentlig bare for 949 00:38:43,330 --> 00:38:45,670 disse første par ukene, for å forenkle prosessen med 950 00:38:45,670 --> 00:38:49,450 få brukerundersøkelser og få brukerens input i form 951 00:38:49,450 --> 00:38:51,960 av strenger eller tall, og slikt. 952 00:38:51,960 --> 00:38:55,520 Så GetString er som printf, men tydeligvis heller enn 953 00:38:55,520 --> 00:38:58,700 skrive det kommer til å gjøre hva navnet sier, får en streng. 954 00:38:58,700 --> 00:39:00,970 Men å bruke GetString, vi nødt til å gjøre en endring 955 00:39:00,970 --> 00:39:03,180 her, utover dette. 956 00:39:03,180 --> 00:39:07,170 Så intuitivt, dette programmet, forhåpentligvis, skal liksom 957 00:39:07,170 --> 00:39:09,700 få en streng fra brukeren, og deretter hva det kommer til å gjøre 958 00:39:09,700 --> 00:39:11,460 med strengen, kalt s? 959 00:39:15,060 --> 00:39:16,470 Det er bare kommer til å skrive den ut, ikke sant? 960 00:39:16,470 --> 00:39:18,870 Fortsatt ikke et stimulerende program fordi alt det som skjer 961 00:39:18,870 --> 00:39:22,160 å gjøre er å plugge i den verdien i hvor% s 962 00:39:22,160 --> 00:39:23,750 sier det skal gå. 963 00:39:23,750 --> 00:39:25,290 >> Så la oss se minst dette i aksjon. 964 00:39:25,290 --> 00:39:27,040 La meg spare og zoome ut. 965 00:39:27,040 --> 00:39:30,280 Nå i min terminal-vinduet her nede, den lille bit av en, 966 00:39:30,280 --> 00:39:32,760 la meg igjen gjør hei. 967 00:39:32,760 --> 00:39:35,160 Ok, og ah, pokker, jeg fikk en hel haug med feil. 968 00:39:35,160 --> 00:39:38,020 La meg rulle opp, og vi ser vår første - 969 00:39:38,020 --> 00:39:40,430 så la oss faktisk gjør dette i en enda større vindu, slik at du 970 00:39:40,430 --> 00:39:42,110 kan se hvor dårlig jeg skrudd opp - 971 00:39:42,110 --> 00:39:44,460 så sørg hei. 972 00:39:44,460 --> 00:39:46,540 Ok, det er en katastrofe, ikke sant? 973 00:39:46,540 --> 00:39:48,740 Jeg har skrevet tre linjer med kode, og 974 00:39:48,740 --> 00:39:50,070 Det har gitt meg 12 feil. 975 00:39:50,070 --> 00:39:51,980 Så hvorfor er dette? 976 00:39:51,980 --> 00:39:55,720 Så heldigvis, ofte når du ser mange, mange feil 977 00:39:55,720 --> 00:39:57,730 spytter ut med en gang, det er egentlig bare fordi du har 978 00:39:57,730 --> 00:39:59,760 forvirret maskinen opp her. 979 00:39:59,760 --> 00:40:02,330 Og det er fortsatt forvirret av den tiden det kommer ned her. 980 00:40:02,330 --> 00:40:04,400 Og så begynner det bare snubler, og snubler, og 981 00:40:04,400 --> 00:40:07,310 spytter ut mer skremmende ting enn faktisk gjelder. 982 00:40:07,310 --> 00:40:10,120 Så generelt, alltid starte med det øverste. 983 00:40:10,120 --> 00:40:13,320 >> Så den aller øverste forekomst av rødt, 984 00:40:13,320 --> 00:40:14,740 feilmelding er dette. 985 00:40:14,740 --> 00:40:17,750 Bruk av svart identifikator streng, jeg 986 00:40:17,750 --> 00:40:19,160 mener standard i? 987 00:40:19,160 --> 00:40:19,900 Jeg gjorde ikke det. 988 00:40:19,900 --> 00:40:24,180 Jeg mente streng, men dette er på grunn, også, ordet strengen 989 00:40:24,180 --> 00:40:26,020 at jeg fortsette å bruke verbalt faktisk 990 00:40:26,020 --> 00:40:27,240 finnes ikke i C heller. 991 00:40:27,240 --> 00:40:29,470 Det er noe vi kommer til å bruke bare for den første uken eller to 992 00:40:29,470 --> 00:40:34,500 her, men det finnes i en fil som heter cs50.h. 993 00:40:34,500 --> 00:40:37,110 Så for nå, vet at det er denne andre bibliotek som 994 00:40:37,110 --> 00:40:39,330 Personalet skrev, så det er blitt skrevet mer nylig enn 995 00:40:39,330 --> 00:40:40,510 stdio.h. 996 00:40:40,510 --> 00:40:45,020 Men innsiden av cs50.h er en definisjon, et synonym for 997 00:40:45,020 --> 00:40:48,310 sorterer, skaper det dette ordet streng. 998 00:40:48,310 --> 00:40:50,890 >> Så nå la meg gå tilbake til min terminal-vinduet. 999 00:40:50,890 --> 00:40:53,200 Jeg kommer til å fjerne hele dette rotet ved Ctrl-L. Vi vil bare 1000 00:40:53,200 --> 00:40:55,700 tørk alt rent, og jeg kommer til å gå videre og gjøre 1001 00:40:55,700 --> 00:40:57,860 Hei igjen, Enter. 1002 00:40:57,860 --> 00:40:59,440 Så hva har skjedd nå? 1003 00:40:59,440 --> 00:41:01,150 Nå er alle disse feilene gikk bort. 1004 00:41:01,150 --> 00:41:02,230 Så hva har jeg egentlig gjort? 1005 00:41:02,230 --> 00:41:05,920 Jeg har nettopp lært datamaskinen som strengen finnes, og det er 1006 00:41:05,920 --> 00:41:07,890 i den filen som heter cs50.h. 1007 00:41:07,890 --> 00:41:10,930 Så stoppe klagende, fordi du nå vet hvor du finner 1008 00:41:10,930 --> 00:41:13,220 den funksjonen erklæring så å si. 1009 00:41:13,220 --> 00:41:15,200 Hvor det eksisterer i verden. 1010 00:41:15,200 --> 00:41:18,820 >> Så nå er jeg kommer til å gå videre og kjøre hallo. 1011 00:41:18,820 --> 00:41:22,300 Jeg synes å ha en uendelig løkke, ingenting skjer. 1012 00:41:25,530 --> 00:41:26,870 Så jeg trenger å skrive noe her, ikke sant. 1013 00:41:26,870 --> 00:41:29,650 Den første linjen med kode i programmet mitt var GetString. 1014 00:41:29,650 --> 00:41:31,750 Så det er bokstavelig talt venter for meg å få en streng. 1015 00:41:31,750 --> 00:41:33,680 Så i den forstand ja, det er en uendelig loop. 1016 00:41:33,680 --> 00:41:36,520 Tilsynelatende i GetString er standard oppførsel at vi 1017 00:41:36,520 --> 00:41:37,510 skrev - de ansatte - 1018 00:41:37,510 --> 00:41:39,550 som sier bare vente og vente og vente og vente og vente, 1019 00:41:39,550 --> 00:41:42,550 inntil brukeren gir deg en streng ved å skrive noe i. 1020 00:41:42,550 --> 00:41:46,000 Så la meg gå videre og skriv inn D-a-v - i-d, Enter. 1021 00:41:46,000 --> 00:41:47,420 Og det er det, hallo David. 1022 00:41:47,420 --> 00:41:50,430 >> Nå virker dette som det er bare en handling? 1023 00:41:50,430 --> 00:41:52,810 La meg gå videre og skrive Tommy. 1024 00:41:52,810 --> 00:41:54,740 Inn, ok, synes å bli arbeider. 1025 00:41:54,740 --> 00:41:59,130 Arbeider for Rob, arbeider for Zamyla, fungerer for - OK. 1026 00:41:59,130 --> 00:42:01,000 Så det kommer til å fungere, mest sannsynlig. 1027 00:42:01,000 --> 00:42:05,030 Så det bør skrive ut hva vi faktisk gi det, 1028 00:42:05,030 --> 00:42:07,830 og vi kan være litt vanskelig her. 1029 00:42:07,830 --> 00:42:12,130 La oss se om vi gjør noe sånt hello. 1030 00:42:12,130 --> 00:42:18,000 Kan gå over her, la oss se, kopiere, lime. 1031 00:42:18,000 --> 00:42:19,950 Jeg har ikke tenkt å være i stand til å lime det mange ganger her. 1032 00:42:19,950 --> 00:42:24,410 Lim, ok, Shift + Ctrl + V. Så hva kunne 1033 00:42:24,410 --> 00:42:26,970 skje det er ille her? 1034 00:42:26,970 --> 00:42:27,770 >> Ok, så segfaults. 1035 00:42:27,770 --> 00:42:29,710 Så noen av dere med tidligere bakgrunn vil vite at 1036 00:42:29,710 --> 00:42:32,710 generelt, noe som gir datamaskiner mange innganger når de er 1037 00:42:32,710 --> 00:42:36,140 sannsynligvis ikke ment å motta lange navn som dette - dårlig 1038 00:42:36,140 --> 00:42:36,740 ting skjer. 1039 00:42:36,740 --> 00:42:39,230 Faktisk, i en verden av nettet også, skjer dette ganske mye, 1040 00:42:39,230 --> 00:42:41,000 slik at når du designer en nettside, når du er 1041 00:42:41,000 --> 00:42:43,850 utforme Facebook, må du gjøre vilkårlige beslutninger opp 1042 00:42:43,850 --> 00:42:45,370 front, som hvor lenge vil noens 1043 00:42:45,370 --> 00:42:46,360 Facebook brukernavn være? 1044 00:42:46,360 --> 00:42:48,050 Eller hvor lenge vil noen fornavn være? 1045 00:42:48,050 --> 00:42:50,110 Hvor lenge vil noens telefonnummer være og lignende. 1046 00:42:50,110 --> 00:42:53,580 Og hvis programmerere gjør dårlige forutsetninger, programmer bryte 1047 00:42:53,580 --> 00:42:56,640 fordi du prøver å gi dem mer effekt, mer input 1048 00:42:56,640 --> 00:42:58,330 snarere enn de har hukommelse. 1049 00:42:58,330 --> 00:43:01,860 Eller RAM tildelt for det, og så hvis jeg nå trykker på Enter, 1050 00:43:01,860 --> 00:43:04,640 at programmet faktisk fungerte, fordi vi var på biblioteket 1051 00:43:04,640 --> 00:43:06,790 og vi faktisk forventet denne spesielle saken. 1052 00:43:06,790 --> 00:43:10,900 Men utvilsomt dette semesteret, vil du skrive minst én 1053 00:43:10,900 --> 00:43:13,280 program som vil si disse ordene. 1054 00:43:13,280 --> 00:43:16,520 Husk dette uker fra nå, kanskje to dager fra nå. 1055 00:43:16,520 --> 00:43:18,760 Segmentering feil er en dårlig ting. 1056 00:43:18,760 --> 00:43:21,920 Det vil se i å gjøre noe som datamaskinen 1057 00:43:21,920 --> 00:43:23,310 forutså ikke. 1058 00:43:23,310 --> 00:43:25,810 Og i så fall, du, programmerer, ikke hadde forutsett. 1059 00:43:25,810 --> 00:43:27,720 Mye som hva denne haug med sokker, det var ulike 1060 00:43:27,720 --> 00:43:29,520 hjørne saker vi kunne ha møtt. 1061 00:43:29,520 --> 00:43:32,340 Tilsvarende i programmer hvis du ikke forventer hvor lenge er 1062 00:43:32,340 --> 00:43:33,310 noens navn kommer til å bli. 1063 00:43:33,310 --> 00:43:35,890 Eller hva om jeg har en ondsinnet bruker, og hans eller hennes navn er 1064 00:43:35,890 --> 00:43:37,230 faktisk ganske kort, men de prøver bare 1065 00:43:37,230 --> 00:43:37,960 å rote med meg? 1066 00:43:37,960 --> 00:43:40,490 Hva kommer til å bli oppførselen av mitt program? 1067 00:43:40,490 --> 00:43:43,930 Vel, i så fall kan noe faktisk krasje. 1068 00:43:43,930 --> 00:43:44,750 >> Så la oss gjøre dette. 1069 00:43:44,750 --> 00:43:46,860 I 90 minutter er dette en forferdelig lang tid 1070 00:43:46,860 --> 00:43:47,780 å gjøre informatikk. 1071 00:43:47,780 --> 00:43:49,550 Hvorfor ikke vi komme inn i vanen med å ta en fem minutters 1072 00:43:49,550 --> 00:43:51,520 pause her, og når vi kommer tilbake, vil vi dykke inn i noen 1073 00:43:51,520 --> 00:43:53,430 mer komplekse og overbevisende programmer? 1074 00:43:53,430 --> 00:43:54,680 Fem minutter. 1075 00:43:56,910 --> 00:43:58,160 >> OK. 1076 00:44:01,138 --> 00:44:02,780 Så en rask kommentar. 1077 00:44:02,780 --> 00:44:05,590 Jeg fortalte at selv om dette var på skjermen før, hva 1078 00:44:05,590 --> 00:44:08,880 kom ut av munnen min var cs50.net/rsvp. 1079 00:44:08,880 --> 00:44:11,670 Dette er riktig. cs50.net/lunch. 1080 00:44:11,670 --> 00:44:16,030 Så nå kan du prøve RSVPing for dette på / lunsj. 1081 00:44:16,030 --> 00:44:16,980 Men la oss gjøre dette nå. 1082 00:44:16,980 --> 00:44:20,150 Så dette har vært super rask, super nytt for mange folk. 1083 00:44:20,150 --> 00:44:21,560 Gammelt hat for noen folk. 1084 00:44:21,560 --> 00:44:24,930 Så la oss spole tilbake for bare et øyeblikk, og se hvordan vi kom til 1085 00:44:24,930 --> 00:44:29,350 Dette hello world utgang bare et øyeblikk siden. 1086 00:44:29,350 --> 00:44:31,780 >> Så først, er det denne CS50 Appliance. 1087 00:44:31,780 --> 00:44:34,270 Igjen, stykke programvare, problem sett 1 kommer til å fortelle 1088 00:44:34,270 --> 00:44:36,610 deg hvordan du laster ned den, hvor du laste den ned, hva du skal klikke 1089 00:44:36,610 --> 00:44:37,430 og så videre. 1090 00:44:37,430 --> 00:44:39,670 Og så når du følger disse instruksjonene, vil du kunne 1091 00:44:39,670 --> 00:44:42,840 å maksimere vinduet, og en Mac eller PC vil se en 1092 00:44:42,840 --> 00:44:43,910 litt noe sånt som dette. 1093 00:44:43,910 --> 00:44:47,170 En svart bakgrunn, et hjem-mappe på toppen der alle 1094 00:44:47,170 --> 00:44:49,850 filene dine går, en papirkurv kan øverst til venstre, 1095 00:44:49,850 --> 00:44:51,130 en meny nederst. 1096 00:44:51,130 --> 00:44:54,010 Så igjen, ganske lik i ånden til Mac OS eller Windows, 1097 00:44:54,010 --> 00:44:56,040 selv om det skjer for å være Linux. 1098 00:44:56,040 --> 00:44:58,120 Så hva gjorde vi neste gjøre? 1099 00:44:58,120 --> 00:44:59,580 Vel, vi begynte å skrive programmer. 1100 00:44:59,580 --> 00:45:02,260 Og husker fra forrige uke at alt som trengs for å skrive en 1101 00:45:02,260 --> 00:45:04,970 Programmet er en enkel tekst editor, 1102 00:45:04,970 --> 00:45:06,550 som Notisblokk eller TextEdit. 1103 00:45:06,550 --> 00:45:08,360 Oppriktig, kan du også bruke Microsoft Word. 1104 00:45:08,360 --> 00:45:11,170 Men dårlige ting til slutt vil skje, fordi det er en veldig 1105 00:45:11,170 --> 00:45:13,930 hardhendte løsning for å skrive et program, pluss det vil 1106 00:45:13,930 --> 00:45:15,400 lagre den i feil fil format. 1107 00:45:15,400 --> 00:45:18,150 Men det er bare en tekst editor, en tekstbehandler, er alt som er 1108 00:45:18,150 --> 00:45:19,390 for å skrive et program. 1109 00:45:19,390 --> 00:45:23,420 >> Så i CS50 Appliance, kan vi gjøre dette på en enkel måte. 1110 00:45:23,420 --> 00:45:25,580 Vi kan bare klikke på dette ikonet nederst til venstre. 1111 00:45:25,580 --> 00:45:28,790 Og igjen, satt problem 1 vil råde deg om dette, og voila - 1112 00:45:28,790 --> 00:45:31,210 du får svart og hvitt grensesnitt hvor vi kan begynne 1113 00:45:31,210 --> 00:45:32,160 skrive kode. 1114 00:45:32,160 --> 00:45:34,960 Så la oss begynne å skrive en super enkelt program igjen. 1115 00:45:34,960 --> 00:45:38,890 Jeg kommer til å gå opp til Fil, Lagre, og jeg kommer til å ringe 1116 00:45:38,890 --> 00:45:42,870 dette, la oss si, hello2.c. 1117 00:45:42,870 --> 00:45:45,410 Og jeg bare forteller den ved å klikke på jharvard, legg den 1118 00:45:45,410 --> 00:45:46,750 i sin hjemmekatalog, jeg gjør egentlig ikke bryr 1119 00:45:46,750 --> 00:45:47,980 hvor dette går. 1120 00:45:47,980 --> 00:45:49,090 Og deretter Lagre. 1121 00:45:49,090 --> 00:45:50,880 Og nå kan jeg begynne å skrive mitt program. 1122 00:45:50,880 --> 00:45:53,560 Og jeg husker fra tidligere at jeg må skrive int 1123 00:45:53,560 --> 00:45:55,400 main (void). 1124 00:45:55,400 --> 00:45:57,000 Zoom inn på øverst til venstre. 1125 00:45:57,000 --> 00:46:02,670 Og da vil jeg si printf, ta to. 1126 00:46:02,670 --> 00:46:05,690 Og nå et linjeskift, nær sitat, lukker 1127 00:46:05,690 --> 00:46:07,820 parentes, semikolon. 1128 00:46:07,820 --> 00:46:10,560 Og så går jeg ned hit til min terminal vindu som er 1129 00:46:10,560 --> 00:46:12,840 innebygd i gedit, bare for enkelhets skyld. 1130 00:46:12,840 --> 00:46:15,200 Og jeg kommer til å gå videre og skrive gjør hallo, men ikke 1131 00:46:15,200 --> 00:46:17,500 hei alene, hello2. 1132 00:46:17,500 --> 00:46:20,490 >> Så min fil heter hello2.c. Filen min derfor 1133 00:46:20,490 --> 00:46:23,510 skal kalles hello2, i dette tilfellet. 1134 00:46:23,510 --> 00:46:26,490 Dammit, hva gjorde jeg galt? 1135 00:46:26,490 --> 00:46:29,490 All right, så jeg tydelig utelatt en linje, hvis du husker hva 1136 00:46:29,490 --> 00:46:31,020 tidligere programmer ser ut. 1137 00:46:31,020 --> 00:46:32,480 Men la oss se om vi ikke kan erte dette fra hverandre. 1138 00:46:32,480 --> 00:46:35,310 Dessverre har de fleste mennesker som skriver programmene som 1139 00:46:35,310 --> 00:46:38,820 vi skriver ikke programmer ikke forenkle ting så bra. 1140 00:46:38,820 --> 00:46:41,520 Så vi må slags skumme over hva som ikke helt gjøre 1141 00:46:41,520 --> 00:46:44,050 ane her og se om vi kan finne ut hva som er galt. 1142 00:46:44,050 --> 00:46:46,700 Den aller første linjen der sier implisitt erklære C 1143 00:46:46,700 --> 00:46:49,310 biblioteket funksjon printf med type int. 1144 00:46:49,310 --> 00:46:51,210 OK, jeg forsto en del av det. 1145 00:46:51,210 --> 00:46:54,570 Men det synes å være alluding til det faktum at jeg brukte printf 1146 00:46:54,570 --> 00:46:55,700 feil, liksom. 1147 00:46:55,700 --> 00:46:56,930 Og hvilken måte er det galt? 1148 00:46:56,930 --> 00:46:59,970 Jeg visste bare ikke lære datamaskinen som det er i en fil 1149 00:46:59,970 --> 00:47:01,420 kalt stdio.h. 1150 00:47:01,420 --> 00:47:04,120 Nå er det bare å bare huske nå at printf er 1151 00:47:04,120 --> 00:47:06,540 i stdio.h, og faktisk det vil være andre 1152 00:47:06,540 --> 00:47:08,900 funksjoner i den samme filen som vi blir vant til. 1153 00:47:08,900 --> 00:47:12,490 >> Så nå la meg gå videre og traff Ctrl-L å bare klart at 1154 00:47:12,490 --> 00:47:16,050 bort, kjører gjøre hello2, og voila. 1155 00:47:16,050 --> 00:47:19,490 Og denne kommandoen igjen, mer komplisert enn vi vil forklare for 1156 00:47:19,490 --> 00:47:20,520 dagens formål. 1157 00:47:20,520 --> 00:47:23,570 Men det ble kjørt clang, og clang tar kildekode og 1158 00:47:23,570 --> 00:47:24,870 spytter ut 0'er og 1'ere. 1159 00:47:24,870 --> 00:47:28,610 Og de 0'er og 1'ere i dette tilfellet kalles det? 1160 00:47:28,610 --> 00:47:29,470 Ok, objektkoden. 1161 00:47:29,470 --> 00:47:32,210 Og filen som de er i er kalt, så, 1162 00:47:32,210 --> 00:47:33,820 hello2, i dette tilfellet. 1163 00:47:33,820 --> 00:47:37,040 Fordi min tekstfil var hello2.c, Enter. 1164 00:47:37,040 --> 00:47:39,820 Og nå har jeg ta to utropstegn, utropstegn 1165 00:47:39,820 --> 00:47:41,880 punkt, utropstegn. 1166 00:47:41,880 --> 00:47:45,430 All right, så vi har nå muligheten til å få strenger, 1167 00:47:45,430 --> 00:47:46,280 tilsynelatende. 1168 00:47:46,280 --> 00:47:48,190 Vel, hva annet kan vi få fra brukerne? 1169 00:47:48,190 --> 00:47:51,010 >> Vel i CS50 biblioteket, det er andre funksjoner som 1170 00:47:51,010 --> 00:47:53,300 kommer til å forenkle våre liv i disse første dagene. 1171 00:47:53,300 --> 00:47:56,350 Getchar, GetDouble, GetFloat, GetInt, 1172 00:47:56,350 --> 00:47:57,290 GetLongLong, GetString. 1173 00:47:57,290 --> 00:47:59,550 Vel, la oss rive av den enkleste av disse først. 1174 00:47:59,550 --> 00:48:01,430 GetString gjør bokstavelig talt det. 1175 00:48:01,430 --> 00:48:04,210 Det sitter bare der og venter på at brukeren skriver noe i, 1176 00:48:04,210 --> 00:48:07,170 og så snart jeg skriver noe i og trykk Enter, det 1177 00:48:07,170 --> 00:48:08,860 gjør noe med den verdien. 1178 00:48:08,860 --> 00:48:11,700 Så la oss gå tilbake til det eksemplet for å se nøyaktig hva 1179 00:48:11,700 --> 00:48:12,950 GetString gjorde. 1180 00:48:12,950 --> 00:48:17,445 La meg gå videre og åpne opp i gedit, hallo.c, og husker 1181 00:48:17,445 --> 00:48:20,590 som rett før pause, er dette der vi slapp. 1182 00:48:20,590 --> 00:48:23,240 >> Så la oss nå erte dette fra hverandre i litt mer detalj. 1183 00:48:23,240 --> 00:48:27,190 Så på linje 6, er det to ting 1184 00:48:27,190 --> 00:48:28,450 skjer i øyeblikket. 1185 00:48:28,450 --> 00:48:32,630 Likhetstegnet skiller første halvår og andre halvår. 1186 00:48:32,630 --> 00:48:34,670 Så på venstre side av likhetstegnet, vi 1187 00:48:34,670 --> 00:48:35,580 sier streng s. 1188 00:48:35,580 --> 00:48:37,580 Og så, bare lekmann vilkår, hva er streng s 1189 00:48:37,580 --> 00:48:41,040 gjør, tror du? 1190 00:48:41,040 --> 00:48:42,990 Det er å skape en hva? 1191 00:48:42,990 --> 00:48:44,930 Så det er å lage en streng som heter s. 1192 00:48:44,930 --> 00:48:46,370 Nå hva betyr det egentlig? 1193 00:48:46,370 --> 00:48:51,540 Vel, det å reservere plass for en streng som heter s. 1194 00:48:51,540 --> 00:48:52,490 Det er ikke helt riktig. 1195 00:48:52,490 --> 00:48:53,120 Hva er dette å gjøre? 1196 00:48:53,120 --> 00:48:55,400 Vel datamaskiner, som dere vet, har harddisker, det er der 1197 00:48:55,400 --> 00:48:56,300 filene er lagret. 1198 00:48:56,300 --> 00:48:59,100 Datamaskiner har RAM, og det er der programmene er lastet 1199 00:48:59,100 --> 00:49:00,240 mens de kjører. 1200 00:49:00,240 --> 00:49:02,470 Så når du dobbeltklikker på et ikon og Microsoft Word åpner 1201 00:49:02,470 --> 00:49:06,380 opp, er Microsoft Word kjører, så å si, i RAM, som er 1202 00:49:06,380 --> 00:49:08,160 den elektroniske delen av datamaskinen. 1203 00:49:08,160 --> 00:49:10,660 Ikke det fysiske, mekaniske delen som er spinning, hvor 1204 00:49:10,660 --> 00:49:12,640 blir vanligvis lagret lang sikt. 1205 00:49:12,640 --> 00:49:15,810 Så streng s er ganske mye å fortelle datamaskinen gi meg 1206 00:49:15,810 --> 00:49:18,150 nok RAM til å passe en streng. 1207 00:49:18,150 --> 00:49:20,450 Nå det er en bit av en overforenkling, fordi 1208 00:49:20,450 --> 00:49:22,300 hvor stor er strengen skal? 1209 00:49:22,300 --> 00:49:24,410 Vel vi faktisk ikke vet ennå, så i ukene som kommer 1210 00:49:24,410 --> 00:49:27,290 vi vil faktisk trekke tilbake laget som er streng og 1211 00:49:27,290 --> 00:49:28,510 Vi vil fortelle deg hva det egentlig er. 1212 00:49:28,510 --> 00:49:31,050 Streng, for nå, er bare en fin forenkling av vår verden. 1213 00:49:31,050 --> 00:49:35,700 Men string s erklærer en streng kalt s, for nå. 1214 00:49:35,700 --> 00:49:36,520 Erklærer en streng. 1215 00:49:36,520 --> 00:49:39,310 Det forbeholder noen plass i RAM for strengen brukeren er 1216 00:49:39,310 --> 00:49:40,150 i ferd med å skrive. 1217 00:49:40,150 --> 00:49:41,840 >> La oss nå se på høyre side av likhetstegnet. 1218 00:49:41,840 --> 00:49:44,110 Så det sier GetString (). 1219 00:49:44,110 --> 00:49:45,070 Og en liten mental helse sjekk. 1220 00:49:45,070 --> 00:49:47,940 Det faktum at det er ingenting inne i parentesen 1221 00:49:47,940 --> 00:49:50,810 antyder hva om GetString? 1222 00:49:50,810 --> 00:49:52,180 Det tar ingen argumenter. 1223 00:49:52,180 --> 00:49:55,290 Det vil si, du kan ikke påvirke sin atferd på noen måte. 1224 00:49:55,290 --> 00:49:58,940 Hver gang du bruker den, vil det bli en streng og det er det. 1225 00:49:58,940 --> 00:50:02,210 Derimot, printf, forhåpentligvis sin oppførsel gjør 1226 00:50:02,210 --> 00:50:03,010 endres hver gang. 1227 00:50:03,010 --> 00:50:05,230 Ellers er det en ganske ubrukelig utskrift funksjonen hvis 1228 00:50:05,230 --> 00:50:06,480 det gjør det samme. 1229 00:50:06,480 --> 00:50:07,970 Hvis det skrives ut alltid David eller noe 1230 00:50:07,970 --> 00:50:09,500 vilkårlig hele tiden. 1231 00:50:09,500 --> 00:50:11,540 Så gjør printf fornuftig å ha et argument. 1232 00:50:11,540 --> 00:50:14,240 GetString ikke virkelig trenger et argument, fordi jeg ønsket 1233 00:50:14,240 --> 00:50:16,700 å få en streng fra brukeren, og det er brukeren som kommer 1234 00:50:16,700 --> 00:50:19,580 å forsyne dynamikk ved å skrive i ulike bokstaver 1235 00:50:19,580 --> 00:50:20,850 hver gang ved tastaturet. 1236 00:50:20,850 --> 00:50:23,140 >> Så hva gjør GetString gjør slutt? 1237 00:50:23,140 --> 00:50:25,080 Tenk på det som denne lille svarte boksen. 1238 00:50:25,080 --> 00:50:29,340 Og dette svarte boksen tar ingen inngang, men når du banke på 1239 00:50:29,340 --> 00:50:33,240 det, spytter det ut en streng som brukeren har skrevet inn 1240 00:50:33,240 --> 00:50:36,660 Og det faktum at det er et likhetstegn det betyr å ta 1241 00:50:36,660 --> 00:50:39,890 hva er spytte ut på høyre side og lagre den i 1242 00:50:39,890 --> 00:50:41,390 hva som skjer på venstre side. 1243 00:50:41,390 --> 00:50:43,470 Så likhetstegn her, er det faktisk ikke betyr 1244 00:50:43,470 --> 00:50:46,490 likestilling, det heller teknisk betyr oppdraget. 1245 00:50:46,490 --> 00:50:49,330 Ta verdien på høyre side, og sette den i 1246 00:50:49,330 --> 00:50:51,050 variabelen på venstre. 1247 00:50:51,050 --> 00:50:52,820 Så det er alt som skjer der. 1248 00:50:52,820 --> 00:50:55,640 >> Nå i linje 7, vi ringer printf. 1249 00:50:55,640 --> 00:50:58,170 Så printf forhåpentligvis blir litt kjedelig nå. 1250 00:50:58,170 --> 00:50:59,530 Så ut en formatert streng. 1251 00:50:59,530 --> 00:51:00,440 Hva streng? 1252 00:51:00,440 --> 00:51:05,460 Skrive ut, "h-e-l-l-o,% s 1253 00:51:05,460 --> 00:51:07,840 ! \ N ". 1254 00:51:07,840 --> 00:51:10,470 Greit, så hva ønsker jeg å plug-in for% s? 1255 00:51:10,470 --> 00:51:12,960 Bokstavelig talt, hva er lagret i s. 1256 00:51:12,960 --> 00:51:15,570 Så i dette tilfellet, lite sunn fornuft sjekk, hvor mange argumenter gjør 1257 00:51:15,570 --> 00:51:16,820 printf ta? 1258 00:51:19,860 --> 00:51:21,110 Ok, jeg hørte en. 1259 00:51:23,840 --> 00:51:26,330 Jeg hørte en gang. 1260 00:51:26,330 --> 00:51:27,730 To, hørte jeg to. 1261 00:51:27,730 --> 00:51:29,920 Og hva med tre? 1262 00:51:29,920 --> 00:51:30,450 Ok, tre? 1263 00:51:30,450 --> 00:51:30,930 Utmerket. 1264 00:51:30,930 --> 00:51:33,170 Tre mulige svar, er bare én av dem riktig. 1265 00:51:33,170 --> 00:51:36,390 Så argumenter igjen påvirke atferden til en funksjon. 1266 00:51:36,390 --> 00:51:39,380 I det siste, gjorde printf bare ta ett argument. 1267 00:51:39,380 --> 00:51:42,260 "Hello World" var et enkelt argument. 1268 00:51:42,260 --> 00:51:45,190 Men nå, legge merke til hvor denne komma er. 1269 00:51:45,190 --> 00:51:49,600 Dette komma er utenfor sitat / unquote, noe som betyr 1270 00:51:49,600 --> 00:51:52,170 hei printf, her kommer et annet argument. 1271 00:51:52,170 --> 00:51:54,240 >> Så komma i de fleste programmeringsspråk 1272 00:51:54,240 --> 00:51:57,300 skill flere argumenter. 1273 00:51:57,300 --> 00:51:59,600 Så svaret her er definitivt ikke en, fordi 1274 00:51:59,600 --> 00:52:00,390 det er denne komma. 1275 00:52:00,390 --> 00:52:03,680 Så minimalt, er printf tilsynelatende tar to 1276 00:52:03,680 --> 00:52:04,940 argumenter denne gangen. 1277 00:52:04,940 --> 00:52:07,050 Men muligheten for et lurespørsmål her er hva 1278 00:52:07,050 --> 00:52:07,990 om dette komma? 1279 00:52:07,990 --> 00:52:11,260 Betyr dette at det er faktisk tre argumenter? 1280 00:52:11,260 --> 00:52:13,820 Dette, dette, og dette. 1281 00:52:13,820 --> 00:52:18,820 Så nei, fordi det komma er inne i anførselstegn, som 1282 00:52:18,820 --> 00:52:20,890 betyr at det er egentlig bare et estetisk av engelsk. 1283 00:52:20,890 --> 00:52:23,180 Det har ingenting å gjøre med antall 1284 00:52:23,180 --> 00:52:24,890 argumenter i dette programmet. 1285 00:52:24,890 --> 00:52:27,670 Så dette komma er utenfor de doble anførselstegn. 1286 00:52:27,670 --> 00:52:28,850 Og deretter tilbake 0. 1287 00:52:28,850 --> 00:52:30,980 For nå la oss bare slags ta dette på tro for 1288 00:52:30,980 --> 00:52:34,460 i dag, og bare vet at når funksjonene er ferdig utfører 1289 00:52:34,460 --> 00:52:37,950 linjer med kode, bør de generelt returnere noen verdi. 1290 00:52:37,950 --> 00:52:42,010 I dette tilfellet, bare fordi viktigste må returnere en int, 1291 00:52:42,010 --> 00:52:44,320 det er bare måten språket C fungerer. 1292 00:52:44,320 --> 00:52:47,040 >> Så fordi noe gikk galt, føles som dette programmet 1293 00:52:47,040 --> 00:52:49,960 fint, jeg bare hardkodet i retur 0. 1294 00:52:49,960 --> 00:52:52,980 Men i kontrast, og jeg kommer til å skrive dette i pseudokode 1295 00:52:52,980 --> 00:52:55,020 nå, gjorde mye som Josef da vi gjorde sokken 1296 00:52:55,020 --> 00:52:56,220 eksempel forrige uke. 1297 00:52:56,220 --> 00:53:00,440 Hvis noe gikk galt - dette er ikke selve koden - gikk 1298 00:53:00,440 --> 00:53:06,570 galt, og deretter gå tilbake, la oss si, en. 1299 00:53:06,570 --> 00:53:08,770 Else tilbake 0. 1300 00:53:08,770 --> 00:53:10,070 Så dette er hvor vi skal med dette. 1301 00:53:10,070 --> 00:53:12,090 Dette er ikke faktiske C-kode, bare pseudokode. 1302 00:53:12,090 --> 00:53:14,010 Men dette er hvordan du kan returnere 1303 00:53:14,010 --> 00:53:15,580 forskjellige mulige verdier. 1304 00:53:15,580 --> 00:53:19,520 Men for nå er jeg bare kommer til å gå videre og returnere 0. 1305 00:53:19,520 --> 00:53:24,410 Greit, noen spørsmål så langt på syntaks, funksjonalitet, 1306 00:53:24,410 --> 00:53:25,000 eller lignende? 1307 00:53:25,000 --> 00:53:26,280 Ja, i ryggen. 1308 00:53:26,280 --> 00:53:27,530 >> PUBLIKUM: [uhørlig] 1309 00:53:30,510 --> 00:53:32,210 DAVID MALAN: Kan du snakke litt høyere? 1310 00:53:32,210 --> 00:53:34,325 Hvorfor gjorde dette programmet return 0, og? 1311 00:53:34,325 --> 00:53:35,575 PUBLIKUM: [uhørlig] 1312 00:53:39,910 --> 00:53:43,450 DAVID MALAN: Å, det er fordi jeg fikk lat, beklager. 1313 00:53:43,450 --> 00:53:48,290 Ingen god faglig respons, returnere 0. 1314 00:53:48,290 --> 00:53:52,690 Jeg kan slags berge dette, ved å si teknisk C, hvis viktigste 1315 00:53:52,690 --> 00:53:55,900 ikke eksplisitt returnere en verdi, vil 0 bli returnert 1316 00:53:55,900 --> 00:53:57,730 automatisk for deg. 1317 00:53:57,730 --> 00:54:00,290 Som er sant, jeg er ikke bare dekker opp. 1318 00:54:00,290 --> 00:54:03,270 Men, jeg burde ha gjort det på denne måten. 1319 00:54:03,270 --> 00:54:05,250 Ingen interessant takeaway enn at andre enn min feil. 1320 00:54:05,250 --> 00:54:06,170 Ja? 1321 00:54:06,170 --> 00:54:08,470 >> PUBLIKUM: Vanligvis når du skriver i tomrommet, betyr at du 1322 00:54:08,470 --> 00:54:10,770 ikke tilbake noe. 1323 00:54:10,770 --> 00:54:11,420 DAVID MALAN: Riktig. 1324 00:54:11,420 --> 00:54:15,800 Hvis du i stedet angir du før navnet på en funksjon, for 1325 00:54:15,800 --> 00:54:18,590 forekomst her, ugyldig, deretter funksjonen 1326 00:54:18,590 --> 00:54:20,480 returnerer ikke noe. 1327 00:54:20,480 --> 00:54:25,210 Og derfor vil jeg bare si, retur eller ingenting i det hele tatt, 1328 00:54:25,210 --> 00:54:26,730 og det ville være konsekvent. 1329 00:54:26,730 --> 00:54:27,750 Og vi vil komme tilbake til det. 1330 00:54:27,750 --> 00:54:31,030 Og bare FYI, en av fangstene med å lære 1331 00:54:31,030 --> 00:54:33,450 programmering i en verden som har hundrevis av bøker og 1332 00:54:33,450 --> 00:54:36,180 hundrevis av nettsteder der ute er at du vil alltid 1333 00:54:36,180 --> 00:54:38,220 se annen syntaks i forskjellige bøker 1334 00:54:38,220 --> 00:54:40,220 av forskjellige personer. 1335 00:54:40,220 --> 00:54:42,100 Innser vi vil gjøre vårt beste i seksjoner og foredrag for å være 1336 00:54:42,100 --> 00:54:42,960 konsekvent. 1337 00:54:42,960 --> 00:54:46,660 Men noen ganger vil du se motstridende syntaks. 1338 00:54:46,660 --> 00:54:48,540 Så når du er i tvil, bare spør. 1339 00:54:48,540 --> 00:54:51,100 Og generelt, vil vi ta vare på forelesninger og seksjoner til 1340 00:54:51,100 --> 00:54:53,710 nesten alltid presentere det på den riktige måten. 1341 00:54:53,710 --> 00:54:56,070 Og jeg sier nesten alltid, fordi sak. 1342 00:54:56,070 --> 00:54:56,860 Andre spørsmål? 1343 00:54:56,860 --> 00:55:01,590 >> PUBLIKUM: Eksisterer% s utsiden av apparatet? 1344 00:55:01,590 --> 00:55:03,710 DAVID MALAN: Har% s eksisterer utenfor enheten? 1345 00:55:03,710 --> 00:55:04,180 Ja. 1346 00:55:04,180 --> 00:55:07,760 Så% s har å gjøre med C. Det faktum at vi bruker den i 1347 00:55:07,760 --> 00:55:10,290 apparatet har fundamentalt ingenting å gjøre med 1348 00:55:10,290 --> 00:55:12,080 funksjonene i språket vi bruker. 1349 00:55:12,080 --> 00:55:15,990 Faktisk, forrige uke da vi brukte min Mac, skrev jeg 1350 00:55:15,990 --> 00:55:17,160 C-kode på min Mac. 1351 00:55:17,160 --> 00:55:20,020 Jeg kunne ha brukt% s på min Mac, og du kan bruke den på 1352 00:55:20,020 --> 00:55:22,400 Windows-datamaskinen hvis du installerer en kompilator, som 1353 00:55:22,400 --> 00:55:24,070 Visual Studio fra Microsoft. 1354 00:55:24,070 --> 00:55:24,990 Så% s. 1355 00:55:24,990 --> 00:55:27,860 Alt vi gjør inne i dette vinduet i dag har til 1356 00:55:27,860 --> 00:55:31,140 gjøre med C. Og fundamentalt ingenting å gjøre med 1357 00:55:31,140 --> 00:55:33,450 operativsystemet i spørsmålet. 1358 00:55:33,450 --> 00:55:35,900 Derimot, den svarte og hvite terminal-vinduet - når 1359 00:55:35,900 --> 00:55:40,160 Jeg skriver ting som ls, og rm, og cd - 1360 00:55:40,160 --> 00:55:42,020 som har å gjøre med operativsystemet og 1361 00:55:42,020 --> 00:55:43,562 navigere rundt. 1362 00:55:43,562 --> 00:55:44,546 Ja. 1363 00:55:44,546 --> 00:55:46,520 PUBLIKUM: Jeg mente biblioteket, CS50 biblioteket. 1364 00:55:46,520 --> 00:55:49,960 DAVID MALAN: Ok, så hvis du mener søkeordet streng, at 1365 00:55:49,960 --> 00:55:52,460 bare eksisterer i CS50 biblioteket, riktig. 1366 00:55:52,460 --> 00:55:55,350 Som ikke finnes i C selv, og faktisk i et par 1367 00:55:55,350 --> 00:55:58,220 uker vil vi kaste bort CS50 biblioteket og starte 1368 00:55:58,220 --> 00:56:02,290 å gjøre ting fra bunnen selv, så å si. 1369 00:56:02,290 --> 00:56:02,940 Andre spørsmål? 1370 00:56:02,940 --> 00:56:04,577 Ja. 1371 00:56:04,577 --> 00:56:05,827 >> PUBLIKUM: [uhørlig] 1372 00:56:09,470 --> 00:56:10,160 DAVID MALAN: Godt spørsmål. 1373 00:56:10,160 --> 00:56:11,720 Er kommandoene store og små bokstaver? 1374 00:56:11,720 --> 00:56:13,710 Og la meg gjøre en forskjell her. 1375 00:56:13,710 --> 00:56:15,840 Så kommandoer er generelt de tingene vi skal skrive på 1376 00:56:15,840 --> 00:56:17,940 bunnen av vinduet, i terminal-vinduet. 1377 00:56:17,940 --> 00:56:21,770 Noe opp her vil være uttalelser eller C-kode. 1378 00:56:21,770 --> 00:56:24,490 Men i begge tilfeller, er svaret den samme, ja. 1379 00:56:24,490 --> 00:56:27,800 Begge disse miljøene, C kode øverst og 1380 00:56:27,800 --> 00:56:29,910 operativsystem kommandolinjen på 1381 00:56:29,910 --> 00:56:31,440 bunn, er case sensitive. 1382 00:56:31,440 --> 00:56:33,830 Så du må kapitalisere GetString med stor G, 1383 00:56:33,830 --> 00:56:37,050 kapital S. Du må skrive printf i alle små bokstaver. 1384 00:56:37,050 --> 00:56:39,520 Du må skrive ls i alle små bokstaver. 1385 00:56:39,520 --> 00:56:43,260 Så i nesten enhver situasjon dette semesteret, sak vil i 1386 00:56:43,260 --> 00:56:44,820 Faktisk saken. 1387 00:56:44,820 --> 00:56:46,148 Ja. 1388 00:56:46,148 --> 00:56:47,398 >> PUBLIKUM: [uhørlig] 1389 00:56:54,770 --> 00:56:56,480 DAVID MALAN: Ah, så greit, hva om vi hadde en fil 1390 00:56:56,480 --> 00:56:57,840 kalt hello.d. 1391 00:56:57,840 --> 00:57:00,090 Så det viser seg D er et programmeringsspråk. 1392 00:57:00,090 --> 00:57:02,790 Og så i noen tilfeller kan vi faktisk skrive et program i 1393 00:57:02,790 --> 00:57:06,190 filen og få den samlet på den måten. 1394 00:57:06,190 --> 00:57:09,090 Vi kan, og faktisk, korte svaret er, vet jeg ikke. 1395 00:57:09,090 --> 00:57:10,440 Så vi kommer til å gjøre dette. 1396 00:57:10,440 --> 00:57:13,040 La meg gå videre og opprette en ny fil. 1397 00:57:13,040 --> 00:57:15,580 Og spin her, ærlig generelt, er når noen tvil 1398 00:57:15,580 --> 00:57:18,130 dette semesteret, og du har apparatet eller datamaskinen 1399 00:57:18,130 --> 00:57:20,030 åpne, gå videre og prøve noe. 1400 00:57:20,030 --> 00:57:23,740 Så jeg kommer til å lagre en fil som heter hello.d. 1401 00:57:23,740 --> 00:57:25,010 Lagre dette. 1402 00:57:25,010 --> 00:57:29,070 Og jeg kommer til å kjøre gjøre hallo Enter. 1403 00:57:29,070 --> 00:57:31,660 Det syntes å antyde at c var mer sannsynlig 1404 00:57:31,660 --> 00:57:35,920 enn d, i dette tilfellet. 1405 00:57:35,920 --> 00:57:38,046 Andre spørsmål. 1406 00:57:38,046 --> 00:57:40,456 Ja. 1407 00:57:40,456 --> 00:57:41,706 >> PUBLIKUM: [uhørlig] 1408 00:57:48,170 --> 00:57:49,837 DAVID MALAN: Ok, si at når mer. 1409 00:57:49,837 --> 00:57:51,087 PUBLIKUM: [uhørlig] 1410 00:58:04,250 --> 00:58:05,780 DAVID MALAN: Hvordan vil du gå om diagnostisering som eller 1411 00:58:05,780 --> 00:58:06,380 feilsøking det? 1412 00:58:06,380 --> 00:58:08,800 Så mest sannsynlig, fordi de er forskjellige språk, 1413 00:58:08,800 --> 00:58:10,280 mest sannsynlig at du vil få en helt 1414 00:58:10,280 --> 00:58:11,580 annet program outputted. 1415 00:58:11,580 --> 00:58:14,140 Du vil få helt forskjellige feilmeldinger. 1416 00:58:14,140 --> 00:58:16,750 Og også bare i form av design, ville det uten tvil være en 1417 00:58:16,750 --> 00:58:19,140 dårlig design beslutning om å skrive to forskjellige 1418 00:58:19,140 --> 00:58:21,510 språk med nesten identiske navn filer, i 1419 00:58:21,510 --> 00:58:23,000 nøyaktig samme katalog, ved hjelp av en 1420 00:58:23,000 --> 00:58:24,550 automatisk verktøy som gjør. 1421 00:58:24,550 --> 00:58:27,750 Så jeg kan også trekke tilbake og si i 15 år med å gjøre dette, 1422 00:58:27,750 --> 00:58:29,190 aldri gjort den feilen. 1423 00:58:29,190 --> 00:58:30,030 Kunne skje. 1424 00:58:30,030 --> 00:58:31,190 Men det er bare forskjellige, tror jeg, 1425 00:58:31,190 --> 00:58:33,180 logistiske forsvar på plass. 1426 00:58:33,180 --> 00:58:35,440 Pluss feilmeldingene som ville følge, som ville 1427 00:58:35,440 --> 00:58:37,260 slutt avsløre hva problemet er. 1428 00:58:37,260 --> 00:58:39,120 Men en mulig hjørne tilfelle. 1429 00:58:39,120 --> 00:58:41,730 >> All right, så la oss introdusere bare et par andre 1430 00:58:41,730 --> 00:58:45,600 funksjoner her nå, så vi kan begynne å bygge opp i mer 1431 00:58:45,600 --> 00:58:47,140 og mer komplekst program. 1432 00:58:47,140 --> 00:58:49,000 Så først av alt, matematikk. 1433 00:58:49,000 --> 00:58:51,520 Så matematiske eksempler er bare slags lett i den første uken. 1434 00:58:51,520 --> 00:58:53,560 Dette er ikke å si at all programmering er om 1435 00:58:53,560 --> 00:58:54,390 matematikk. 1436 00:58:54,390 --> 00:58:57,890 Absolutt, forstå ulike funksjoner i 1437 00:58:57,890 --> 00:58:59,610 matematikk, algebra spesielt, er 1438 00:58:59,610 --> 00:59:00,330 ganske relevant her. 1439 00:59:00,330 --> 00:59:03,010 I høyere nivå CS klasser, lineær algebra, 1440 00:59:03,010 --> 00:59:03,920 kalkulus og lignende. 1441 00:59:03,920 --> 00:59:06,500 Men innser det meste av hva vi skal gjøre dette semesteret reduserer ikke 1442 00:59:06,500 --> 00:59:09,230 til matematikk, og absolutt ikke til aritmetikk, per se, men egentlig 1443 00:59:09,230 --> 00:59:11,570 å bare logikk og nøye tenking. 1444 00:59:11,570 --> 00:59:14,310 Og så denne koblingen som informatikk har lenge hatt, 1445 00:59:14,310 --> 00:59:16,570 spesielt på videregående skole nivå, med matematikk, er en 1446 00:59:16,570 --> 00:59:17,370 litt misvisende. 1447 00:59:17,370 --> 00:59:20,090 Fordi de fleste av programmene som vi skal skrive, egentlig, er 1448 00:59:20,090 --> 00:59:23,290 slags høyere nivå og fokus på å løse problemer som, 1449 00:59:23,290 --> 00:59:26,410 sikker, kan bruke noen addisjon, subtraksjon, og ulike 1450 00:59:26,410 --> 00:59:28,650 matematiske formler eller lignende, 1451 00:59:28,650 --> 00:59:30,860 men på slutten av dagen, det handler om å tenke og ikke 1452 00:59:30,860 --> 00:59:33,240 bare gjennomføre det du kanskje har gjort på som en TI 1453 00:59:33,240 --> 00:59:35,050 kalkulator i videregående skole. 1454 00:59:35,050 --> 00:59:38,410 >> Så med det sagt, la oss nå gjøre noe med disse 1455 00:59:38,410 --> 00:59:40,980 matematiske operatorer som finnes, slik at vi kan reise 1456 00:59:40,980 --> 00:59:43,950 over noen av de underliggende ved programmering, eller i 1457 00:59:43,950 --> 00:59:48,930 dette tilfellet C. Så det er, som CS50 biblioteket foreslått, 1458 00:59:48,930 --> 00:59:51,520 og i dag er vi bare bruker GetString - og i et øyeblikk 1459 00:59:51,520 --> 00:59:52,940 kanskje en annen funksjon - 1460 00:59:52,940 --> 00:59:55,380 men det er forskjellige datatyper i en datamaskin. 1461 00:59:55,380 --> 00:59:58,550 På slutten av dagen, datamaskiner vet bare 0'er og 1'ere. 1462 00:59:58,550 --> 01:00:01,880 Men husker at forrige uke snakket vi om det binære systemet 1463 01:00:01,880 --> 01:00:05,000 å representere tall, som tallet 0 og 1, og 2, 1464 01:00:05,000 --> 01:00:07,480 hele veien på opp til 8, som i Nates video. 1465 01:00:07,480 --> 01:00:08,840 Og så kan vi telle mye høyere som vi 1466 01:00:08,840 --> 01:00:10,000 gjorde på scenen her. 1467 01:00:10,000 --> 01:00:15,660 Men hvis du ønsker å representere ikke bare tall, men bokstaver, 1468 01:00:15,660 --> 01:00:18,240 vi, menneskene, måtte komme opp med noen vilkårlig 1469 01:00:18,240 --> 01:00:21,180 konvensjoner, der hvis på slutten av dagen i hele mitt datamaskin 1470 01:00:21,180 --> 01:00:24,260 har er evnen til å uttrykke 0'er og 1'ere, godt vi hadde bedre 1471 01:00:24,260 --> 01:00:27,990 begynne standardisere mønstre av 0'er og 1'ere som representerer 1472 01:00:27,990 --> 01:00:28,800 forskjellige ting. 1473 01:00:28,800 --> 01:00:32,370 Et mønster av 0'er og 1'ere som representerer bokstaven a. 1474 01:00:32,370 --> 01:00:34,840 Mønstre av 0'er og 1'ere som representerer bokstaven z. 1475 01:00:34,840 --> 01:00:37,600 Mønstre av 0'er og 1'ere som representerer fargen blå, eller 1476 01:00:37,600 --> 01:00:38,600 rød, eller lignende. 1477 01:00:38,600 --> 01:00:42,360 Vi må bruke alle disse 0'er og 1'ere å uttrykke oss i 1478 01:00:42,360 --> 01:00:45,140 forskjellige sammenhenger, i forskjellige måter som ikke er 1479 01:00:45,140 --> 01:00:46,470 nødvendigvis numerisk. 1480 01:00:46,470 --> 01:00:51,150 >> Så i form av representasjon, har C ulike datatyper, 1481 01:00:51,150 --> 01:00:52,550 og vi har sett en av disse så langt. 1482 01:00:52,550 --> 01:00:54,940 Vi så int, og legg merke til hva som er ikke er på skjermen 1483 01:00:54,940 --> 01:00:56,140 akkurat nå er streng. 1484 01:00:56,140 --> 01:00:58,550 String ikke, faktisk, eksisterer i C. Igjen, det er en 1485 01:00:58,550 --> 01:01:00,610 forenkling vi presenterer for første 1486 01:01:00,610 --> 01:01:01,570 par uker. 1487 01:01:01,570 --> 01:01:03,770 En røye er en individuell karakter. 1488 01:01:03,770 --> 01:01:07,050 En flottør er et reelt tall, med et desimaltegn og numre til 1489 01:01:07,050 --> 01:01:09,066 venstre og høyre for det. 1490 01:01:09,066 --> 01:01:16,040 En dobbel er hva, for de med tilbake før bakgrunn? 1491 01:01:16,040 --> 01:01:19,720 Så en dobbel er dobbelt noe. 1492 01:01:19,720 --> 01:01:21,240 Legger dobbelt så mye presisjon. 1493 01:01:21,240 --> 01:01:22,440 Så hva betyr dette? 1494 01:01:22,440 --> 01:01:26,090 Så i hver av disse tilfellene har verdens slags standardisert 1495 01:01:26,090 --> 01:01:27,960 hvor mange biter som brukes for å representere 1496 01:01:27,960 --> 01:01:29,160 hver av disse tingene. 1497 01:01:29,160 --> 01:01:31,590 Så hvis du har sett Nates ASCII video allerede for en del 1498 01:01:31,590 --> 01:01:36,170 av pset 0, eller senere denne uken vil du, vil du sannsynligvis vet 1499 01:01:36,170 --> 01:01:37,450 som ASCII - 1500 01:01:37,450 --> 01:01:38,610 karakter representasjoner - 1501 01:01:38,610 --> 01:01:40,670 bruke hvor mange biter? 1502 01:01:40,670 --> 01:01:43,410 Og du kan selv husker fra vår demo forrige uke om hvordan 1503 01:01:43,410 --> 01:01:45,500 mange mennesker var på scenen. 1504 01:01:45,500 --> 01:01:46,840 Så 7 eller 8, typisk. 1505 01:01:46,840 --> 01:01:49,230 Så 8 generelt, og det er noe som heter som utvidet 1506 01:01:49,230 --> 01:01:51,240 ASCII som bruker alle 8 bits, i stedet for 7. 1507 01:01:51,240 --> 01:01:54,710 Men generelt, snakker vi i potenser av 2, slik at i dette tilfellet, 8. 1508 01:01:54,710 --> 01:01:58,900 Så en røye i et programmeringsspråk er vanligvis 8 biter. 1509 01:01:58,900 --> 01:02:02,550 Så en int er generelt 32 biter. 1510 01:02:02,550 --> 01:02:04,810 En flottør er generelt 32 biter. 1511 01:02:04,810 --> 01:02:08,060 En dobbel er generelt 64 bits. 1512 01:02:08,060 --> 01:02:08,870 Og hva betyr det? 1513 01:02:08,870 --> 01:02:11,500 Det betyr at du kan representere større tall, eller i tilfelle 1514 01:02:11,500 --> 01:02:15,490 av reelle tall, kan du ha mye flere tall etter 1515 01:02:15,490 --> 01:02:16,240 desimal. 1516 01:02:16,240 --> 01:02:18,980 Mye mer presisjon, i så fall. 1517 01:02:18,980 --> 01:02:21,780 Nå er en lang lang er dessverre navngitt. 1518 01:02:21,780 --> 01:02:24,340 Så det er en int som er 32 bits. 1519 01:02:24,340 --> 01:02:29,800 Det er en lang som er, nope, 32 biter. 1520 01:02:29,800 --> 01:02:32,610 Og en lang lang som er 64 bits. 1521 01:02:32,610 --> 01:02:34,830 Men noen av dem er kontekstsensitive, det avhenger 1522 01:02:34,830 --> 01:02:36,190 hva slags datamaskin du har. 1523 01:02:36,190 --> 01:02:40,510 Så generelt, vil vi angir i en lekser eller i en quiz når 1524 01:02:40,510 --> 01:02:41,180 det teller faktisk. 1525 01:02:41,180 --> 01:02:43,080 Men poenget er at det er alle disse forskjellige 1526 01:02:43,080 --> 01:02:44,250 representasjoner her. 1527 01:02:44,250 --> 01:02:45,950 >> Så la oss faktisk dykke inn i et program. 1528 01:02:45,950 --> 01:02:48,300 Snarere enn å skrive dette fra scratch, la meg gå videre 1529 01:02:48,300 --> 01:02:50,940 og åpne opp fra dagens kildekoden - som alle er 1530 01:02:50,940 --> 01:02:54,980 online - hvis du ønsker å tinker rundt på nettet, eller avkastning på 1531 01:02:54,980 --> 01:02:57,120 Onsdag med apparatet på datamaskinen, instruksjoner 1532 01:02:57,120 --> 01:02:59,160 som vil koble på kurset hjemmeside. 1533 01:02:59,160 --> 01:03:00,830 Her er en super enkelt program. 1534 01:03:00,830 --> 01:03:02,520 Men det har en liten noe nytt på toppen som 1535 01:03:02,520 --> 01:03:03,650 vi ikke hadde før. 1536 01:03:03,650 --> 01:03:05,800 En hel masse blå linjer med tekst. 1537 01:03:05,800 --> 01:03:08,410 Så disse blå linjene representerer kommentarer. 1538 01:03:08,410 --> 01:03:10,620 Så det er ganske nyttig i et program for å kunne skrive 1539 01:03:10,620 --> 01:03:13,160 noen kommentarer til deg selv, eller til kolleger eller venner, eller 1540 01:03:13,160 --> 01:03:15,700 undervisning stipendiater, den slags beskrive hva som skjer i 1541 01:03:15,700 --> 01:03:18,500 denne filen, men har ingenting å gjøre med C-kode selv. 1542 01:03:18,500 --> 01:03:20,860 Ingenting å gjøre med programmet funksjonelt, det er bare 1543 01:03:20,860 --> 01:03:21,760 estetikk. 1544 01:03:21,760 --> 01:03:24,580 Så på den måten du gjør dette i C er du vanligvis starter 1545 01:03:24,580 --> 01:03:29,860 kommentarer med / *, og du ender dine kommentarer med 1546 01:03:29,860 --> 01:03:31,270 * /. 1547 01:03:31,270 --> 01:03:34,140 Og hvis du er virkelig anal og liker å tegne slags bilder, 1548 01:03:34,140 --> 01:03:35,870 så du ville sette en hel masse stjerner, vil du gjøre en 1549 01:03:35,870 --> 01:03:36,970 liten boks som dette. 1550 01:03:36,970 --> 01:03:37,990 Men ingen av som teller. 1551 01:03:37,990 --> 01:03:40,230 Det eneste som betyr noe er den aller første 1552 01:03:40,230 --> 01:03:41,620 og den aller siste. 1553 01:03:41,620 --> 01:03:43,820 Dette er det som kalles en multi-line kommentar. 1554 01:03:43,820 --> 01:03:46,610 Og det er bare menneskelig konvensjonen til ofte gjør stjernene og boksen 1555 01:03:46,610 --> 01:03:48,420 ting i som dette hvis du har mye ledig tid. 1556 01:03:48,420 --> 01:03:51,550 >> Så etter at du har skrevet i noen kommentarer, generelt, kommer 1557 01:03:51,550 --> 01:03:53,160 de faktiske guts av programmet. 1558 01:03:53,160 --> 01:03:55,630 Her er vår velkjente # include . 1559 01:03:55,630 --> 01:04:00,410 Og bare rask, dette er nødvendig eller ikke nødvendig? 1560 01:04:00,410 --> 01:04:02,860 PUBLIKUM: Nødvendig. 1561 01:04:02,860 --> 01:04:04,390 DAVID MALAN: Så det er faktisk ikke nødvendig. 1562 01:04:04,390 --> 01:04:07,070 Så hvorfor, skjønt, er det ikke nødvendig? 1563 01:04:07,070 --> 01:04:08,170 Så det er ingen printf. 1564 01:04:08,170 --> 01:04:08,510 Faktisk. 1565 01:04:08,510 --> 01:04:10,470 Alt vi gjør i dette programmet er matematikk. 1566 01:04:10,470 --> 01:04:11,640 Så jeg kan faktisk slette det. 1567 01:04:11,640 --> 01:04:14,330 Så du trenger ikke alltid å inkludere noe som helst 1568 01:04:14,330 --> 01:04:15,420 toppen av et program. 1569 01:04:15,420 --> 01:04:17,020 >> Så la oss forenkle dette litt. 1570 01:04:17,020 --> 01:04:18,650 Og nå merke til hva dette programmet gjør. 1571 01:04:18,650 --> 01:04:19,920 Ikke mye av interesse. 1572 01:04:19,920 --> 01:04:21,410 int x = 1. 1573 01:04:21,410 --> 01:04:22,550 Vel, hva er dette gjort? 1574 01:04:22,550 --> 01:04:25,130 Vel, tenker tilbake til den mentale modellen fra før. 1575 01:04:25,130 --> 01:04:27,500 Den venstre side av dette uttrykket gjør hva? 1576 01:04:31,440 --> 01:04:32,830 Skape rom for et heltall. 1577 01:04:32,830 --> 01:04:33,930 Så hvor mye plass? 1578 01:04:33,930 --> 01:04:36,980 Vel, skjedde vi å vite nå at det er 32 biter. 1579 01:04:36,980 --> 01:04:40,070 Tidligere var en streng teknisk 32 bits, men mer 1580 01:04:40,070 --> 01:04:40,950 på at det i fremtiden. 1581 01:04:40,950 --> 01:04:42,240 Men en int er 32 bits. 1582 01:04:42,240 --> 01:04:45,590 Så dette uttrykket på venstre her, int x bare sier hei 1583 01:04:45,590 --> 01:04:48,490 operativsystem, gi meg 32 biter av RAM - 1584 01:04:48,490 --> 01:04:50,450 ellers kjent som 4 byte RAM - 1585 01:04:50,450 --> 01:04:53,930 slik at jeg kan sette et heltall i det rommet. 1586 01:04:53,930 --> 01:04:55,330 Hva heltall ville du satt? 1587 01:04:55,330 --> 01:04:56,640 Vel, bare nummer 1. 1588 01:04:56,640 --> 01:04:59,530 int y får 2, gjør akkurat det samme selv om 1589 01:04:59,530 --> 01:05:02,160 nummer er større, i forhold til sin størrelse. 1590 01:05:02,160 --> 01:05:04,790 Selve nummeret er fortsatt bare 32 bits. 1591 01:05:04,790 --> 01:05:06,520 Det er bare mønsteret av biter er annerledes 1592 01:05:06,520 --> 01:05:08,260 Representerer en mot 2. 1593 01:05:08,260 --> 01:05:11,980 int z sier nå gi meg en annen 32 biter, kall det z, og sette 1594 01:05:11,980 --> 01:05:14,210 summering av 1 og 2 i det. 1595 01:05:14,210 --> 01:05:18,050 Så nå z er antagelig lagring verdien 3, 1596 01:05:18,050 --> 01:05:19,360 og deretter tilbake 0. 1597 01:05:19,360 --> 01:05:23,020 >> Nå er dette programmet, det gjør noe av interesse? 1598 01:05:23,020 --> 01:05:26,170 Slik at det faktisk ikke gjør noe interessant, i alle 1599 01:05:26,170 --> 01:05:28,450 forstand, fordi hvorfor? Det gjør litt matematikk. 1600 01:05:28,450 --> 01:05:30,590 Men det er ikke returnere svaret, ikke sant. 1601 01:05:30,590 --> 01:05:31,790 Den returnerer 0. 1602 01:05:31,790 --> 01:05:33,440 Det er ikke ut svaret. 1603 01:05:33,440 --> 01:05:35,760 Så dette programmet er fundamentalt verdiløse, som det 1604 01:05:35,760 --> 01:05:36,350 står nå. 1605 01:05:36,350 --> 01:05:37,220 Det gjør noe arbeid. 1606 01:05:37,220 --> 01:05:39,530 Det kommer til å ta litt flere sekunder, eller mikrosekunder, til 1607 01:05:39,530 --> 01:05:41,510 kjøre, men det er faktisk ikke gjør noe 1608 01:05:41,510 --> 01:05:42,770 nyttig for den menneskelige. 1609 01:05:42,770 --> 01:05:46,810 >> Så la oss faktisk nå åpne math2, hvor nå er jeg faktisk 1610 01:05:46,810 --> 01:05:48,250 utskrift resultatet. 1611 01:05:48,250 --> 01:05:51,260 Så dette også kan utledes fra våre tidligere eksempler. 1612 01:05:51,260 --> 01:05:54,320 Hvis jeg ønsker å gjøre noen enkle matematikk, int x = 1, y 1613 01:05:54,320 --> 01:05:56,820 = 2. z er en pluss to nå. 1614 01:05:56,820 --> 01:05:59,240 Hva dette kommer til å skrive ut åpenbart? 1615 01:05:59,240 --> 01:06:00,120 Bare 3. 1616 01:06:00,120 --> 01:06:01,590 Så rask tilregnelighet sjekk. 1617 01:06:01,590 --> 01:06:03,830 La meg flytte inn i denne katalogen. 1618 01:06:03,830 --> 01:06:06,480 Så cd source1m. 1619 01:06:06,480 --> 01:06:09,370 La meg gå videre og skrive gjør math2. 1620 01:06:09,370 --> 01:06:11,510 Ingen feilmeldinger kom ut, så la meg kjøre - 1621 01:06:11,510 --> 01:06:14,800 ikke a.out--la meg kjøre math2. Enter. 1622 01:06:14,800 --> 01:06:16,750 Og faktisk, skrives det ut tre. 1623 01:06:16,750 --> 01:06:18,460 Vel la oss ta en titt på en variant av dette. 1624 01:06:18,460 --> 01:06:23,870 I math3.c har vi nå dette eksempelet her. 1625 01:06:23,870 --> 01:06:26,540 >> Så dette er litt interessant. 1626 01:06:26,540 --> 01:06:32,000 Så i dette her, er svaret kommer til å få en delt 10, 1627 01:06:32,000 --> 01:06:33,910 og merker jeg har erklært det som en dupp. 1628 01:06:33,910 --> 01:06:35,200 Hvorfor vil jeg at det skal være en flåte? 1629 01:06:35,200 --> 01:06:36,110 Vel, det er en brøkdel. 1630 01:06:36,110 --> 01:06:37,140 Det kommer til å være et reelt tall. 1631 01:06:37,140 --> 01:06:40,970 Så det kommer til å bli 0,1, forhåpentligvis - 10%, i dette tilfellet. 1632 01:06:40,970 --> 01:06:42,610 Og hva gjør jeg da vil skrive ut? 1633 01:06:42,610 --> 01:06:43,440 Vel, dette svaret. 1634 01:06:43,440 --> 01:06:44,760 Vel, la oss erte disse fra hverandre først. 1635 01:06:44,760 --> 01:06:47,020 Så på venstre side, erklærer en 1636 01:06:47,020 --> 01:06:49,410 flyte, kall det svarer. 1637 01:06:49,410 --> 01:06:52,280 På høyre side, gjør en dividert med 10 og sette det 1638 01:06:52,280 --> 01:06:54,370 answer innsiden av variabelen. 1639 01:06:54,370 --> 01:06:56,410 Nå ser denne linjen litt mer kryptisk. 1640 01:06:56,410 --> 01:06:59,440 Men legg merke noen kjente funksjoner. % Betyr her kommer en 1641 01:06:59,440 --> 01:07:00,490 plassholder. 1642 01:07:00,490 --> 01:07:03,230 f betyr her er et flyttall, bare en ekte 1643 01:07:03,230 --> 01:07:05,490 nummer, noe med et desimaltegn. 1644 01:07:05,490 --> 01:07:07,330 0,2 betyr hva? 1645 01:07:07,330 --> 01:07:10,740 Noen som vet fra tidligere erfaring? 1646 01:07:10,740 --> 01:07:12,010 To desimaler. 1647 01:07:12,010 --> 01:07:14,050 Så vi ikke har sett dette før, men det er bare en måte å 1648 01:07:14,050 --> 01:07:16,360 trene litt mer kontroll over printf og 1649 01:07:16,360 --> 01:07:20,840 ordtaket ikke gi meg 30 poeng etter desimaltegnet, 1650 01:07:20,840 --> 01:07:22,490 i stedet gi meg bare to. 1651 01:07:22,490 --> 01:07:23,960 >> Og så la oss gå videre og kjøre denne. 1652 01:07:23,960 --> 01:07:30,160 Så sørg for matematikk 3, og nå la meg kjøre matte 3, Enter. 1653 01:07:30,160 --> 01:07:34,630 Og det er ikke riktig. 1654 01:07:34,630 --> 01:07:37,390 Vi synes å ha oppdaget vår første ekte bug. 1655 01:07:37,390 --> 01:07:39,400 Vel, kanskje jeg bare ikke ser godt nok etter. 1656 01:07:39,400 --> 01:07:41,960 Så la meg gå opp her, og la meg sette 20 desimal 1657 01:07:41,960 --> 01:07:43,300 punkt steder der. 1658 01:07:43,300 --> 01:07:47,950 Og la meg kompilere dette, må math3, kjøre. 1659 01:07:47,950 --> 01:07:50,960 Ganske sikker på at en delt på 10 er ikke 0.. 1660 01:07:50,960 --> 01:07:54,270 Så hva er det som skjer? 1661 01:07:54,270 --> 01:07:56,740 Vel OK, så egentlig er det ikke har å gjøre med dette. 1662 01:07:56,740 --> 01:07:57,600 Det er en god tanke. 1663 01:07:57,600 --> 01:07:59,140 Dette er egentlig bare en tilfeldighet 1664 01:07:59,140 --> 01:08:00,220 at vi gjør dette. 1665 01:08:00,220 --> 01:08:02,010 Men bare for å bevise at dette ikke er det, vil jeg 1666 01:08:02,010 --> 01:08:03,160 returnere noe tilfeldig. 1667 01:08:03,160 --> 01:08:05,160 Ikke gjør dette hjemme, fordi det er bare galt. 1668 01:08:05,160 --> 01:08:08,000 Men gjør math3, la meg kjøre den. 1669 01:08:08,000 --> 01:08:10,690 Så har ingenting å gjøre med hva jeg er tilbake, har bare å gjøre 1670 01:08:10,690 --> 01:08:11,940 med hva jeg skriver. 1671 01:08:11,940 --> 01:08:14,150 Men jeg hørte det her nede. 1672 01:08:14,150 --> 01:08:15,270 Hva? 1673 01:08:15,270 --> 01:08:17,524 PUBLIKUM: Så vi trenger å skrive tallene i 1674 01:08:17,524 --> 01:08:19,680 divisjonen som - 1675 01:08:19,680 --> 01:08:20,319 >> DAVID MALAN: Ok bra. 1676 01:08:20,319 --> 01:08:22,810 Så vi trenger å skrive tallene som deltar i 1677 01:08:22,810 --> 01:08:25,979 divisjon her som flytpunktverdier selv. 1678 01:08:25,979 --> 01:08:29,359 Så problemet er her som før: C, som med mye 1679 01:08:29,359 --> 01:08:31,819 språk, har ulike datatyper. 1680 01:08:31,819 --> 01:08:34,600 Og disse datatyper, for eksempel, er disse her. 1681 01:08:34,600 --> 01:08:37,430 Og datatyper i spørsmålet her, når jeg skriver en og da jeg 1682 01:08:37,430 --> 01:08:40,870 Type 10, er trolig hva datatyper? 1683 01:08:40,870 --> 01:08:42,170 Så det er nok en int, ikke sant? 1684 01:08:42,170 --> 01:08:44,149 Det er definitivt ikke en flåte fordi det er ingen desimal 1685 01:08:44,149 --> 01:08:45,460 punkt eller noe sånt. 1686 01:08:45,460 --> 01:08:48,270 Så egentlig har jeg en int delt av et int. 1687 01:08:48,270 --> 01:08:52,160 >> Så interessant ting om matematikk og en datamaskin er at 1688 01:08:52,160 --> 01:08:54,840 Hvis du gjør divisjon med heltall - 1689 01:08:54,840 --> 01:08:57,310 1 delt på 10, er ja 0,1. 1690 01:08:57,310 --> 01:09:01,420 Men når du dele et heltall ved et heltall, den 1691 01:09:01,420 --> 01:09:06,859 Svaret må også være et heltall bare fordi, for nå. 1692 01:09:06,859 --> 01:09:08,630 Og hva er konsekvensen da? 1693 01:09:08,630 --> 01:09:13,640 Vel, lik hvis svaret er 1 delt på 10 0,1, hva 1694 01:09:13,640 --> 01:09:15,680 datamaskinen skal gjøre er har jeg ingen anelse om hvordan å 1695 01:09:15,680 --> 01:09:19,270 representerer 0,1, fordi det er et flyttall, ikke en 1696 01:09:19,270 --> 01:09:21,910 heltall, det kommer til å hogge av alt etter 1697 01:09:21,910 --> 01:09:27,470 desimaltegn og bare vise deg 0 i begynnelsen. 1698 01:09:27,470 --> 01:09:29,540 Og det faktum at det som skrives som et flyttall 1699 01:09:29,540 --> 01:09:31,200 verdi, det er bare et estetisk ting. 1700 01:09:31,200 --> 01:09:34,279 Det er fordi jeg tvinge datamaskinen til å skrive ut dette som en 1701 01:09:34,279 --> 01:09:35,229 flytpunktverdi. 1702 01:09:35,229 --> 01:09:37,720 Og faktisk har jeg erklært det som en dupp, men regnestykket er 1703 01:09:37,720 --> 01:09:39,010 skjer over her. 1704 01:09:39,010 --> 01:09:41,859 >> Så la meg faktisk fikse dette i en ganske enkel måte. 1705 01:09:41,859 --> 01:09:45,250 Hvorfor kan jeg ikke bare gjøre 10,0 og 1,0, men 1706 01:09:45,250 --> 01:09:47,609 teknisk jeg kunne komme unna med bare å gjøre en av disse. 1707 01:09:47,609 --> 01:09:50,630 Nå la meg gå videre og gjøre math3. 1708 01:09:50,630 --> 01:09:56,350 La meg gå videre og nå kjøre math3, Enter. 1709 01:09:56,350 --> 01:09:57,500 Og nå, oh boy. 1710 01:09:57,500 --> 01:10:00,050 Nå har vi et nytt problem helt. 1711 01:10:00,050 --> 01:10:05,600 Så bedre, rett, vi er nærmere 0,1, men hva tydelig er 1712 01:10:05,600 --> 01:10:06,240 galt her? 1713 01:10:06,240 --> 01:10:08,260 Med mindre vi har løyet for deg i år, ikke sant? 1714 01:10:08,260 --> 01:10:13,660 1 delt på 10 er faktisk ikke helt 0,1, så hva er 1715 01:10:13,660 --> 01:10:14,700 virkelig skjer her? 1716 01:10:14,700 --> 01:10:16,420 Vel du kan slags grunn gjennom dette logisk. 1717 01:10:16,420 --> 01:10:19,200 Hvis en datamaskin har bare en begrenset mengde RAM for å begynne 1718 01:10:19,200 --> 01:10:23,530 med, og faktisk en datamaskin bare bruker 32 bits for en 1719 01:10:23,530 --> 01:10:26,200 flytpunktverdi, står det til grunn at med en 1720 01:10:26,200 --> 01:10:29,870 endelig antall biter, 32 i dette tilfellet, ja, det kan du 1721 01:10:29,870 --> 01:10:31,050 representerer en masse ting. 1722 01:10:31,050 --> 01:10:33,220 Det er faktisk fire milliarder ulike verdier kan være 1723 01:10:33,220 --> 01:10:38,040 representert med 32 biter, 2 til 32, men det er fortsatt begrenset. 1724 01:10:38,040 --> 01:10:40,730 Så problemet er at det er et uendelig antall ekte 1725 01:10:40,730 --> 01:10:41,370 tall, ikke sant. 1726 01:10:41,370 --> 01:10:43,560 Hvis du gir meg et reelt tall, kan jeg alltid finne deg en 1727 01:10:43,560 --> 01:10:46,080 litt større, litt mindre, ved bare å tilpasse 1728 01:10:46,080 --> 01:10:47,970 tall som er etter desimaltegnet. 1729 01:10:47,970 --> 01:10:50,870 Så hvis du ikke har et uendelig antall bits, du 1730 01:10:50,870 --> 01:10:52,940 kan umulig representere en uendelig 1731 01:10:52,940 --> 01:10:54,800 antall reelle tall. 1732 01:10:54,800 --> 01:10:58,090 >> Så det er denne iboende unøyaktighet i datamaskiner, og 1733 01:10:58,090 --> 01:11:00,930 dette blir utløst over hele tiden, selv i de enkleste 1734 01:11:00,930 --> 01:11:02,260 programmer som dette. 1735 01:11:02,260 --> 01:11:05,640 Men også i noen svært reelle problemstillinger så vel. 1736 01:11:05,640 --> 01:11:07,790 Faktisk, la oss ta et øyeblikk å bare ta en titt på 1737 01:11:07,790 --> 01:11:09,530 noe som faktisk har skjedd i virkeligheten. 1738 01:11:09,530 --> 01:11:11,620 Vi vil se bare de første par minutter, og deretter 1739 01:11:11,620 --> 01:11:13,270 vi vil poste linken på nettet. 1740 01:11:13,270 --> 01:11:16,700 Men dette er testament til hva som kan gå galt, ganske 1741 01:11:16,700 --> 01:11:19,680 ærlig, i en svært tragisk måte når disse tingene er ikke 1742 01:11:19,680 --> 01:11:23,870 verdsatt eller bare vi mennesker gjør feil når det gjelder 1743 01:11:23,870 --> 01:11:26,792 slike gjennomføringen detaljer av moderne datamaskiner. 1744 01:11:26,792 --> 01:11:27,284 >> [Video spiller] 1745 01:11:27,284 --> 01:11:30,730 -Vi har nå tilbake til tekniske katastrofer på moderne Marvels. 1746 01:11:30,730 --> 01:11:32,200 Datamaskiner. 1747 01:11:32,200 --> 01:11:34,920 Vi har alle kommet til å akseptere de ofte frustrerende problemene 1748 01:11:34,920 --> 01:11:36,750 som går med dem. 1749 01:11:36,750 --> 01:11:40,690 Bugs, virus og programvare glitches er små priser til 1750 01:11:40,690 --> 01:11:42,550 betale for enkelhets skyld. 1751 01:11:42,550 --> 01:11:45,170 Men i high tech og høy hastighet militære og plass 1752 01:11:45,170 --> 01:11:48,450 program-applikasjoner, kan den minste problemet være 1753 01:11:48,450 --> 01:11:52,220 foredles til katastrofe. 1754 01:11:52,220 --> 01:11:56,780 4. juni 1996, utarbeidet forskere å lansere en ubemannet 1755 01:11:56,780 --> 01:11:58,430 Ariane 5-raketten. 1756 01:11:58,430 --> 01:12:00,750 Det var bærer vitenskapelige satellitter konstruert for å 1757 01:12:00,750 --> 01:12:03,580 etablere nøyaktig hvordan jordens magnetfelt 1758 01:12:03,580 --> 01:12:06,900 samhandler med solvinder. 1759 01:12:06,900 --> 01:12:10,330 Raketten ble bygget for den europeiske romfartsorganisasjonen ESA og 1760 01:12:10,330 --> 01:12:13,450 tok av fra sitt anlegg på kysten av Fransk Guyana. 1761 01:12:13,450 --> 01:12:16,970 >> -At om ca 37 sekunder inn i flyturen, først de 1762 01:12:16,970 --> 01:12:19,700 lagt merke til noe gikk galt, at dysene var 1763 01:12:19,700 --> 01:12:21,590 svingbare på en måte de virkelig ikke burde. 1764 01:12:21,590 --> 01:12:25,020 40 sekunder inn i flyturen, tydelig kjøretøy 1765 01:12:25,020 --> 01:12:27,340 var i trøbbel, og det er da de tok beslutningen om å 1766 01:12:27,340 --> 01:12:28,136 ødelegge det. 1767 01:12:28,136 --> 01:12:31,450 En rekke verneleder med enorm guts trykket på 1768 01:12:31,450 --> 01:12:34,160 knappen, sprengte raketten før det kan bli en 1769 01:12:34,160 --> 01:12:37,470 fare for offentlig sikkerhet. 1770 01:12:37,470 --> 01:12:40,750 >> -Dette var jomfruturen av Ariane 5, og 1771 01:12:40,750 --> 01:12:43,990 ødeleggelse fant sted på grunn av en feil innebygd i 1772 01:12:43,990 --> 01:12:45,480 rakett programvare. 1773 01:12:45,480 --> 01:12:47,660 >> -Problemet på Ariane var at det var et tall som 1774 01:12:47,660 --> 01:12:51,245 krever 64 bits til å uttrykke og de ønsket å konvertere den 1775 01:12:51,245 --> 01:12:53,010 til et 16 bits tall. 1776 01:12:53,010 --> 01:12:54,900 De antok at antallet var aldri 1777 01:12:54,900 --> 01:12:56,280 kommer til å bli veldig stor, 1778 01:12:56,280 --> 01:12:59,920 at de fleste av disse sifrene i 64 bit nummer var 0s. 1779 01:12:59,920 --> 01:13:01,860 De var galt. 1780 01:13:01,860 --> 01:13:04,550 >> -Den manglende evne til ett program for å godta 1781 01:13:04,550 --> 01:13:07,730 slags tall generert av en annen var i roten av 1782 01:13:07,730 --> 01:13:08,930 svikt. 1783 01:13:08,930 --> 01:13:11,490 Programvareutvikling hadde blitt en svært kostbar del av 1784 01:13:11,490 --> 01:13:13,280 ny teknologi. 1785 01:13:13,280 --> 01:13:16,530 Ariane 4 raketten hadde vært veldig vellykket. 1786 01:13:16,530 --> 01:13:19,100 Så mye av programvare laget for det ble også brukt 1787 01:13:19,100 --> 01:13:21,050 i Ariane 5. 1788 01:13:21,050 --> 01:13:25,530 >> -Det grunnleggende problemet var at Ariane 5 var raskere, 1789 01:13:25,530 --> 01:13:27,280 akselerert raskere. 1790 01:13:27,280 --> 01:13:30,590 Og programvaren ikke hadde stått for det. 1791 01:13:30,590 --> 01:13:33,060 >> -Ødeleggelsen av raketten var en stor økonomisk 1792 01:13:33,060 --> 01:13:37,670 katastrofe, alt på grunn av et minutt programvarefeil. 1793 01:13:37,670 --> 01:13:40,750 Men dette var ikke første gang datakonvertering problemer hadde 1794 01:13:40,750 --> 01:13:43,680 plaget moderne rakett-teknologi. 1795 01:13:43,680 --> 01:13:44,390 >> DAVID MALAN: Vi lar det bli med det. 1796 01:13:44,390 --> 01:13:46,870 Men dette er testament til hvor aktuelt med noen av 1797 01:13:46,870 --> 01:13:48,750 disse laveste nivået detaljer som vi har begynt å 1798 01:13:48,750 --> 01:13:50,040 utforske dag er. 1799 01:13:50,040 --> 01:13:52,510 Så selv om du får litt distrahert kanskje av noen av 1800 01:13:52,510 --> 01:13:55,240 syntaksen og arcaneness her, innser at over 1801 01:13:55,240 --> 01:13:57,690 Begrepet vi være fokusert bare på hvordan gjeldende dette er å 1802 01:13:57,690 --> 01:13:59,530 verdener langt utover CS. 1803 01:13:59,530 --> 01:14:00,780 Vi vil se deg på onsdag.