1 00:00:00,000 --> 00:00:02,742 >> [MUSIC SPILLE] 2 00:00:02,742 --> 00:00:05,030 3 00:00:05,030 --> 00:00:09,090 >> ANDI PENG: Dette er CS50, og Velkommen til uke to av seksjonen. 4 00:00:09,090 --> 00:00:11,740 Dette er faktisk mens uke to av våre class-- faktisk, 5 00:00:11,740 --> 00:00:14,550 den første uken vi har hatt delen. 6 00:00:14,550 --> 00:00:18,897 Håndsopprekning, hvor mange av dere alle kom til super-delen i forrige uke? 7 00:00:18,897 --> 00:00:19,480 OK, det er OK. 8 00:00:19,480 --> 00:00:20,020 Det er greit. 9 00:00:20,020 --> 00:00:23,110 Hvor mange av dere har sett super-delen i forrige uke? 10 00:00:23,110 --> 00:00:23,610 OK. 11 00:00:23,610 --> 00:00:25,702 Og dere gjorde fint på oppgavesettet en? 12 00:00:25,702 --> 00:00:28,660 Så jeg kommer til å ta det som vi har en haug med virkelig intelligente barn 13 00:00:28,660 --> 00:00:32,310 i denne klassen, og ting vil bli bra. 14 00:00:32,310 --> 00:00:33,180 OK. 15 00:00:33,180 --> 00:00:33,980 Så first-- 16 00:00:33,980 --> 00:00:37,900 17 00:00:37,900 --> 00:00:41,090 >> Først skal vi bare kommer til kort gå over agendaen for i dag. 18 00:00:41,090 --> 00:00:42,700 Vi skal snakke om kurs logistikk. 19 00:00:42,700 --> 00:00:45,480 Mange av dere sannsynligvis har spørsmål om 20 00:00:45,480 --> 00:00:46,920 hvordan ting kjører i dette kurset. 21 00:00:46,920 --> 00:00:47,897 Vi vil svare på dem. 22 00:00:47,897 --> 00:00:49,730 Vi kommer til kort gå over løkker i saken 23 00:00:49,730 --> 00:00:51,410 noen av dere savnet super delen. 24 00:00:51,410 --> 00:00:53,240 Vi skal snakke om ASCII kartlegging. 25 00:00:53,240 --> 00:00:56,180 Vi skal snakke om matriser, funksjoner, kommandolinjeargumenter. 26 00:00:56,180 --> 00:01:00,210 Og til slutt, hva dere sannsynligvis alle virkelig ønsker å være her for å lære om, 27 00:01:00,210 --> 00:01:01,270 er din pset2. 28 00:01:01,270 --> 00:01:04,209 Vi vil ha noen fine triks og tips for hvordan du gjør det. 29 00:01:04,209 --> 00:01:07,910 30 00:01:07,910 --> 00:01:08,690 >> OK. 31 00:01:08,690 --> 00:01:11,450 Også, for det andre har vi masse godteri her. 32 00:01:11,450 --> 00:01:13,583 Alle som liker godteri, bare komme opp her. 33 00:01:13,583 --> 00:01:14,430 Hente noen. 34 00:01:14,430 --> 00:01:15,100 Jeg har en haug. 35 00:01:15,100 --> 00:01:16,390 Vi har massevis på kontoret. 36 00:01:16,390 --> 00:01:18,230 Jeg vet egentlig ikke ønsker å spise godteri hele dagen. 37 00:01:18,230 --> 00:01:20,300 Dere bør spise alt godteri, fordi jeg tok det her for dere. 38 00:01:20,300 --> 00:01:20,990 Bare spise godteri. 39 00:01:20,990 --> 00:01:24,080 Det vil være godteri hver seksjon. 40 00:01:24,080 --> 00:01:25,330 >> Så først, hvem er jeg? 41 00:01:25,330 --> 00:01:27,080 Mitt navn er Andi Peng. 42 00:01:27,080 --> 00:01:30,270 Jeg er leder TA av CS50 her på Yale. 43 00:01:30,270 --> 00:01:32,540 Og i tillegg til det, vil jeg også be-- 44 00:01:32,540 --> 00:01:35,600 hvis noen skulle like-- løpe kompis, skulderen å gråte på. 45 00:01:35,600 --> 00:01:39,140 Hvis natten før PSet grunnet, du aner ikke hva som skjer, 46 00:01:39,140 --> 00:01:40,080 slo meg opp. 47 00:01:40,080 --> 00:01:42,770 Vi vil uttrykke medfølelse sammen, et cetera. 48 00:01:42,770 --> 00:01:46,100 Bare vet at jeg er her som en ressurs for deg som frontlinjen 49 00:01:46,100 --> 00:01:51,830 i å hjelpe dere å finne ut hvordan å løse problemer i CS50 og utover. 50 00:01:51,830 --> 00:01:54,590 >> Min e-post er andi.peng@yale.edu. 51 00:01:54,590 --> 00:01:58,390 Jeg vil også sende ut en enkeltperson send en epost med telefonnummeret mitt i det 52 00:01:58,390 --> 00:02:01,860 slik at ikke alle på Internett kan se telefonnummeret mitt. 53 00:02:01,860 --> 00:02:03,640 Føl deg fri til å ringe meg når som helst. 54 00:02:03,640 --> 00:02:07,510 Seriøst, er telefonen min vanligvis festet til hånden min. 55 00:02:07,510 --> 00:02:10,240 Jeg kan ikke svare i løpet av et par minutter. 56 00:02:10,240 --> 00:02:11,984 Jeg kan ikke svare innen et par timer. 57 00:02:11,984 --> 00:02:14,400 Men jeg kan garantere deg, hvis du e-post meg, hvis du ringer meg, 58 00:02:14,400 --> 00:02:17,404 tekst meg, vil jeg svare innen 24 timer. 59 00:02:17,404 --> 00:02:19,820 Ofte vil jeg svare før det, fordi jeg forstår 60 00:02:19,820 --> 00:02:23,900 at alle har noen problemer, og du vil svarene 61 00:02:23,900 --> 00:02:26,110 skal besvares svært raskt. 62 00:02:26,110 --> 00:02:28,945 >> Men hvis du ringer meg 30 minutter før 63 00:02:28,945 --> 00:02:31,570 det stykke som skyldes torsdag kvelden-- være like, Andi, hjelpe meg, 64 00:02:31,570 --> 00:02:35,380 Jeg har ikke started-- jeg kan gi du som skulder å gråte på. 65 00:02:35,380 --> 00:02:41,520 Men det kan være på tide å tenke på hvordan å ikke gjøre det neste gang. 66 00:02:41,520 --> 00:02:44,040 OK. 67 00:02:44,040 --> 00:02:44,944 Oops. 68 00:02:44,944 --> 00:02:45,850 Hvordan kan jeg gå tilbake på? 69 00:02:45,850 --> 00:02:48,140 Det vi går. 70 00:02:48,140 --> 00:02:52,310 >> Så i dette kurset, har vi en massevis av støtte for alle. 71 00:02:52,310 --> 00:02:54,640 I tillegg til å bare seksjoner her, som du 72 00:02:54,640 --> 00:02:57,000 hver uke kommer til å tilbringe 90 fantastiske minutter med meg, 73 00:02:57,000 --> 00:02:58,330 vi har også kontortid. 74 00:02:58,330 --> 00:03:01,021 Hvor mange av dere har allerede vært til kontortiden for å få hjelp? 75 00:03:01,021 --> 00:03:01,520 Flott. 76 00:03:01,520 --> 00:03:05,700 Det er virkelig godt å se, fordi vi har en stab på over 45 TAs og instanser 77 00:03:05,700 --> 00:03:11,780 trent for dette kurset som er her for å hjelpe dere med psets. 78 00:03:11,780 --> 00:03:14,580 >> Mandager de er holdt i TEAL klasserom i 17 Hill House her 79 00:03:14,580 --> 00:03:15,350 ved Yale. 80 00:03:15,350 --> 00:03:17,349 Tirsdager og torsdager, de er holdt i commons. 81 00:03:17,349 --> 00:03:20,010 08:00 til 11:00 ganske mye hver ukedag. 82 00:03:20,010 --> 00:03:21,620 Kom inn, kom ut. 83 00:03:21,620 --> 00:03:24,030 Alle problem, ingen problem-- bare kom inn, 84 00:03:24,030 --> 00:03:26,650 og så skal vi hjelpe deg med det. 85 00:03:26,650 --> 00:03:31,640 >> Dernest, i tillegg til kontortiden og seksjoner, vi har også shorts. 86 00:03:31,640 --> 00:03:35,930 Har noen sett et par av shorts eller walkthroughs i videoene 87 00:03:35,930 --> 00:03:36,750 på nettsiden? 88 00:03:36,750 --> 00:03:37,250 OK. 89 00:03:37,250 --> 00:03:39,510 Så de er veldig, veldig nyttig. 90 00:03:39,510 --> 00:03:42,470 Vår herlige Harvard produksjon teamet der borte på den skolen 91 00:03:42,470 --> 00:03:47,910 oppe i nord, de har filmet og produsert disse utrowalkthrough videoer. 92 00:03:47,910 --> 00:03:52,290 >> De tar deg trinn for trinn gjennom hvordan du skal gå om å løse et problem. 93 00:03:52,290 --> 00:03:56,340 Ofte, hvis du er forvirret om et enkelt konsept, en enestående konsept, 94 00:03:56,340 --> 00:03:59,780 ta en titt, fordi vi trolig ha et kort på den et sted på våre nettsider. 95 00:03:59,780 --> 00:04:03,800 Og det er som regel en stor ressurs skal se etter når du er først 96 00:04:03,800 --> 00:04:06,510 tapt på hvordan man skal håndtere et problem. 97 00:04:06,510 --> 00:04:09,750 >> For det tredje har vi også study50 og reference50. 98 00:04:09,750 --> 00:04:15,650 Så studere 50 på Nettstedet er bare en link. 99 00:04:15,650 --> 00:04:21,500 Det er, tror jeg, study.cs50.net eller noe sånt. 100 00:04:21,500 --> 00:04:22,860 Bare Google det. 101 00:04:22,860 --> 00:04:24,229 Vi har mange lysbilder forberedt. 102 00:04:24,229 --> 00:04:26,770 Vi har massevis av shorts og walkthroughs-- ting hele kompilerte 103 00:04:26,770 --> 00:04:31,070 veldig fint og ryddig for dere alle å bla gjennom, ser noen begreper 104 00:04:31,070 --> 00:04:32,860 at du er forvirret om. 105 00:04:32,860 --> 00:04:35,920 Det vil nok bli dekket der borte i study50. 106 00:04:35,920 --> 00:04:37,640 >> Reference50-- lignende. 107 00:04:37,640 --> 00:04:41,510 Vi har mange ulike notene lett tilgjengelig for din disposisjon. 108 00:04:41,510 --> 00:04:44,450 Og til slutt, har vi det er kalt CS50 Diskuter, 109 00:04:44,450 --> 00:04:48,082 et forum der, hvis kvelden før du gjør dine problemer, sier 110 00:04:48,082 --> 00:04:49,880 Har du et spørsmål. 111 00:04:49,880 --> 00:04:52,340 Logg inn for å CS50 Diskuter. 112 00:04:52,340 --> 00:04:53,190 Legge inn spørsmålet ditt. 113 00:04:53,190 --> 00:04:55,820 Og deretter ett av hundreds-- kanskje, thousands-- av jevnaldrende 114 00:04:55,820 --> 00:04:57,960 ta denne klassen på nettet vil logge inn. 115 00:04:57,960 --> 00:05:01,182 Og kanskje noen kan få ditt svar før en TA kan. 116 00:05:01,182 --> 00:05:03,390 Det er egentlig bare en online forum som vi kan alle 117 00:05:03,390 --> 00:05:04,556 bruke til å diskutere våre problemer. 118 00:05:04,556 --> 00:05:06,483 Det er greit. 119 00:05:06,483 --> 00:05:10,660 120 00:05:10,660 --> 00:05:11,550 >> OK. 121 00:05:11,550 --> 00:05:13,220 Så problem setter. 122 00:05:13,220 --> 00:05:17,840 Vi er i ferd med rett i tykke av oppgavesettet to. 123 00:05:17,840 --> 00:05:20,570 Mange av oss har allerede kjempet gjennom oppgavesettet en. 124 00:05:20,570 --> 00:05:24,460 Vi vet allerede at kanskje venter for den siste natten for å gjøre din PSet 125 00:05:24,460 --> 00:05:28,170 er ikke den smarteste tingen å gjøre i CS50. 126 00:05:28,170 --> 00:05:32,380 >> Tips og tips essensielt for Suksessen blir lest hele spec. 127 00:05:32,380 --> 00:05:36,270 Hvor mange av dere har allerede lese spec for PSet 2? 128 00:05:36,270 --> 00:05:36,770 OK. 129 00:05:36,770 --> 00:05:39,840 Det er et solid beløp. 130 00:05:39,840 --> 00:05:43,210 Jeg vet dere har sikkert gjenkjent nå spesifikasjoner er veldig lang. 131 00:05:43,210 --> 00:05:45,700 De er veldig, veldig lenge. 132 00:05:45,700 --> 00:05:49,630 >> Det er veldig vanskelig å lese hver linje av at nøye ord for ord. 133 00:05:49,630 --> 00:05:52,780 Du ønsker å bare skumme til der den forteller deg å gjøre noe. 134 00:05:52,780 --> 00:05:54,459 Jeg kan garantere deg, ikke gjør det. 135 00:05:54,459 --> 00:05:56,750 Hvis du gjør det, er du sannsynligvis kommer til å savne et sted 136 00:05:56,750 --> 00:05:58,458 hvor den forteller deg hvordan du starter et problem 137 00:05:58,458 --> 00:06:01,140 eller den forteller deg hva du skal navn problemet eller den forteller deg, 138 00:06:01,140 --> 00:06:03,720 Dette er sannsynligvis den beste måten å begynne å gjøre ditt problem. 139 00:06:03,720 --> 00:06:05,050 Og da vil du være tapt. 140 00:06:05,050 --> 00:06:08,219 >> Når du prøver å lese spec halvveis gjennom, 141 00:06:08,219 --> 00:06:10,510 mange av de viktige information-- i at du ikke er 142 00:06:10,510 --> 00:06:12,260 skal være i stand til å virkelig tilgang. 143 00:06:12,260 --> 00:06:13,219 Så les hele spec. 144 00:06:13,219 --> 00:06:15,468 Prøv å lese hele spec før du kommer til delen, 145 00:06:15,468 --> 00:06:17,360 fordi da, når vi snakke om PSet, 146 00:06:17,360 --> 00:06:21,070 Vi kan alle ha en idé av hva som skjer. 147 00:06:21,070 --> 00:06:25,169 >> For det andre er dette et konsept at jeg liker å referere 148 00:06:25,169 --> 00:06:26,710 mye gjennom hele kurset semesteret. 149 00:06:26,710 --> 00:06:30,070 Men i hovedsak, møte oss halvveis, ikke sant? 150 00:06:30,070 --> 00:06:33,970 Meg, som TA og Jason som selvfølgelig Lederen og Scaz som professor 151 00:06:33,970 --> 00:06:37,120 og David som professor og alle de andre vakre TAs i dette kurset, 152 00:06:37,120 --> 00:06:39,830 assistenter i denne course-- Vi vil gjøre vårt beste 153 00:06:39,830 --> 00:06:42,965 for å sikre at du er satt opp for å lykkes i dette kurset. 154 00:06:42,965 --> 00:06:43,840 Vi vil holde oversikten. 155 00:06:43,840 --> 00:06:44,870 Vi vil holde kontortid. 156 00:06:44,870 --> 00:06:47,087 Vi vil svare telefonen samtaler, svare på e-poster, 157 00:06:47,087 --> 00:06:49,670 gjøre alt vi kan for å gjøre for at dine spørsmål blir besvart. 158 00:06:49,670 --> 00:06:51,460 >> Men hjelpe oss også. 159 00:06:51,460 --> 00:06:52,450 Møt oss halvveis. 160 00:06:52,450 --> 00:06:56,040 Hvis du kommer til kontortid ikke å ha gått til del, ikke 161 00:06:56,040 --> 00:07:02,060 etter å ha sett forelesninger, har ingen anelse om hva som skjer, være like, hjelpe meg. 162 00:07:02,060 --> 00:07:04,350 Jeg kommer til å være som, vel, jeg beklager. 163 00:07:04,350 --> 00:07:06,410 Det kan være på tide å låne som skulder å gråte på, 164 00:07:06,410 --> 00:07:08,959 fordi jeg er ikke sikker hva jeg kan gjøre for å hjelpe deg 165 00:07:08,959 --> 00:07:12,000 hvis du ikke prøver å i det minste hjelpe selv litt i begynnelsen. 166 00:07:12,000 --> 00:07:12,910 Møt oss halvveis. 167 00:07:12,910 --> 00:07:15,020 Du vet, kan du komme forberedt på å svare og få 168 00:07:15,020 --> 00:07:16,353 klar til å engasjere seg i materialet. 169 00:07:16,353 --> 00:07:19,342 Det gjør ting så mye enklere for alle involverte. 170 00:07:19,342 --> 00:07:22,970 Ja, det er ganske mye det. 171 00:07:22,970 --> 00:07:23,720 >> Gradering. 172 00:07:23,720 --> 00:07:29,250 Så på pensum, er det ganske inngående om hvordan vi klasse. 173 00:07:29,250 --> 00:07:32,440 Men i hovedsak, nedbryting i dette er 50% av karakteren 174 00:07:32,440 --> 00:07:34,530 vil være de, som psets er nydelig, fordi det er 175 00:07:34,530 --> 00:07:37,400 hvor du tilbringer den enorme Flertallet av kurset tid på. 176 00:07:37,400 --> 00:07:39,854 Quizer 40%, og din endelige prosjektet vil være 10%. 177 00:07:39,854 --> 00:07:42,520 Det vil være to quizer gjennom løpet av semesteret. 178 00:07:42,520 --> 00:07:47,050 Jeg tror vil dato og klokkeslett er også oppført på pensum. 179 00:07:47,050 --> 00:07:49,210 >> Måten vi vil bli gradering dine psets 180 00:07:49,210 --> 00:07:53,930 er at vi har egentlig fire verdier som vi tilordner til hvert klassetrinn. 181 00:07:53,930 --> 00:07:57,250 Vi har en verdi på omfang, korrekthet, design og stil. 182 00:07:57,250 --> 00:08:01,530 Så som du ser, er den slags vår formelen for beregning psets. 183 00:08:01,530 --> 00:08:03,640 Tre gir vi mest vekt på nøyaktighet, 184 00:08:03,640 --> 00:08:06,140 fordi åpenbart din coach skal teste for sakene 185 00:08:06,140 --> 00:08:08,480 at vi vil at den skal teste for. 186 00:08:08,480 --> 00:08:11,000 >> Dere har alle check50 til din disposisjon. 187 00:08:11,000 --> 00:08:13,730 Det er en svært nyttig funksjon at dere kan alle 188 00:08:13,730 --> 00:08:17,560 laste opp koden din til våre servere, hvor vi skal sjekke det for deg. 189 00:08:17,560 --> 00:08:20,800 Og du har sett dem Frowny ansikter, smilefjes. 190 00:08:20,800 --> 00:08:22,119 De er veldig, veldig nyttig. 191 00:08:22,119 --> 00:08:23,910 Vennligst ikke være student som liker tries 192 00:08:23,910 --> 00:08:26,230 å hardcode i alle svarene på dem. 193 00:08:26,230 --> 00:08:30,050 Jeg har definitivt sett en PSet der noen så alle verdier av check50 194 00:08:30,050 --> 00:08:33,429 og de bare hard kodet in-- hvis dette nummeret, skrive ut dette nummeret. 195 00:08:33,429 --> 00:08:35,080 Hvis det nummeret, skrive ut det antallet. 196 00:08:35,080 --> 00:08:36,090 Ikke gjør det. 197 00:08:36,090 --> 00:08:39,360 >> Selv om teknisk check50 er riktig, 198 00:08:39,360 --> 00:08:41,809 din måte å løse Problemet er ikke riktig. 199 00:08:41,809 --> 00:08:45,770 Så bare bruke check50 sparsomt. 200 00:08:45,770 --> 00:08:48,497 Men også sørge for at du forstå hvordan det fungerer, 201 00:08:48,497 --> 00:08:50,580 programmet fungerer i tillegg til check50, 202 00:08:50,580 --> 00:08:53,120 fordi vi ikke kan teste hver mulig tilfelle av check50. 203 00:08:53,120 --> 00:08:55,440 Vi skal teste noen av dem. 204 00:08:55,440 --> 00:09:00,390 >> Design er egentlig, hvordan godt designet er koden din? 205 00:09:00,390 --> 00:09:04,150 Hvis du er kopi lime multippel linjer med kode mange, mange ganger. 206 00:09:04,150 --> 00:09:06,960 Kanskje du ikke har helt den beste design i koden. 207 00:09:06,960 --> 00:09:09,470 Kanskje det er på tide å legge til at loop. 208 00:09:09,470 --> 00:09:12,090 Hovedsak, her er det bare alle om å prøve å gjøre koden din, 209 00:09:12,090 --> 00:09:17,010 prøver å skrive koden din så effektivt som mulig, slik at programmet kjører 210 00:09:17,010 --> 00:09:19,630 så fort som mulig. 211 00:09:19,630 --> 00:09:20,996 >> Endelig har vi stil. 212 00:09:20,996 --> 00:09:24,360 Så stilen er litt av en vilkårlig, subjektivt begrep. 213 00:09:24,360 --> 00:09:27,470 Jeg vet at vi offisielt har en stil 50 guide for CS50, 214 00:09:27,470 --> 00:09:30,050 hvor det forteller deg, oh, du bør ha en plass her. 215 00:09:30,050 --> 00:09:32,220 Du bør slags format koden på denne måten. 216 00:09:32,220 --> 00:09:34,070 Du bør nevne ting på denne måten. 217 00:09:34,070 --> 00:09:38,180 >> Jeg vet egentlig ikke bryr seg, per se, hvordan du velger å style koden din, 218 00:09:38,180 --> 00:09:39,840 bare så lenge du holder deg konsekvent. 219 00:09:39,840 --> 00:09:43,732 For eksempel, hvis du liker å igjen en plass etter den fire 220 00:09:43,732 --> 00:09:45,690 før fire loop, bare gjøre det hver gang. 221 00:09:45,690 --> 00:09:46,523 Ikke slags gjøre det. 222 00:09:46,523 --> 00:09:47,730 Ikke gjør det andre tider. 223 00:09:47,730 --> 00:09:51,046 Hvis du liker å holde krøllete bukseseler plass en bestemt måte, 224 00:09:51,046 --> 00:09:52,170 bare alltid gjøre det på den måten. 225 00:09:52,170 --> 00:09:54,628 Ikke slags gjøre det et sted her og et sted ikke der. 226 00:09:54,628 --> 00:09:57,010 Når vi gradering, det er virkelig vanskelig 227 00:09:57,010 --> 00:09:59,420 hvis jeg har ingen anelse om hvordan du formaterer koden din, 228 00:09:59,420 --> 00:10:02,064 ting er sprø og malplassert. 229 00:10:02,064 --> 00:10:04,980 Hvis du bare holde det konsekvent, er det mye lettere for meg som den større 230 00:10:04,980 --> 00:10:06,310 å kunne lese koden din. 231 00:10:06,310 --> 00:10:09,393 Det er mye enklere for deg som student å være i stand til å se gjennom koden din 232 00:10:09,393 --> 00:10:11,720 og se hva som er galt med det slash hvorfor det er problemer. 233 00:10:11,720 --> 00:10:15,740 Stilen er en av de enkleste tingene dere kan gjøre for å få full score. 234 00:10:15,740 --> 00:10:18,770 Egentlig, hvis du bare bryr seg om du betale fem minutter av oppmerksomhet 235 00:10:18,770 --> 00:10:22,760 til koden din hver uke, bør du være å få fulle stil poeng. 236 00:10:22,760 --> 00:10:26,020 >> Til slutt har vi det som kalles multiplikatoren av omfang. 237 00:10:26,020 --> 00:10:28,890 Scope-- Jeg vet det er en stor ord, spesielt i denne klassen. 238 00:10:28,890 --> 00:10:31,030 Men omfang, alt som betyr er at du forsøker 239 00:10:31,030 --> 00:10:33,670 de psets til beste evne. 240 00:10:33,670 --> 00:10:37,180 Hvis du slår på tre av fire problemer 241 00:10:37,180 --> 00:10:39,460 og ikke engang forsøke siste, er du sannsynligvis 242 00:10:39,460 --> 00:10:41,630 kommer til å miste noen poeng på omfang. 243 00:10:41,630 --> 00:10:44,560 >> Selv om du bare starte problemet, gjør ditt beste for å gå gjennom den. 244 00:10:44,560 --> 00:10:47,691 Selv om det ikke fungerer, slå den på, fordi det viser og demonstrerer 245 00:10:47,691 --> 00:10:50,190 for oss at du prøver, som du forsøkte oppgavesettet 246 00:10:50,190 --> 00:10:51,430 etter beste evne. 247 00:10:51,430 --> 00:10:53,800 Og så kan vi gi deg full poeng for omfang. 248 00:10:53,800 --> 00:10:58,715 >> Omfanget er også svært viktig for når vi snakke om den laveste PSet poengsum dråpe. 249 00:10:58,715 --> 00:11:02,010 Så i løpet av semester, dere har ni psets. 250 00:11:02,010 --> 00:11:05,340 Og vi vil faktisk være slippe lavest poengsum av de ni, 251 00:11:05,340 --> 00:11:07,670 men bare hvis du har fulle omfanget poeng. 252 00:11:07,670 --> 00:11:11,120 >> Så hvis du slår i en ufullstendig PSet, dessverre kan vi ikke slippe at man, 253 00:11:11,120 --> 00:11:13,540 fordi omfanget punkter ble ikke fullført. 254 00:11:13,540 --> 00:11:16,570 Så selv om du har det forferdelig uke hvor du er døende, og du er syk 255 00:11:16,570 --> 00:11:20,040 eller hunden din dør, dør katten din, og du er overlesset med lekser, 256 00:11:20,040 --> 00:11:21,074 bare forsøke PSet. 257 00:11:21,074 --> 00:11:22,490 Gjør det til beste evne. 258 00:11:22,490 --> 00:11:23,840 Hvis det ikke fungerer, spiller det ingen rolle. 259 00:11:23,840 --> 00:11:24,506 Bare skru den på. 260 00:11:24,506 --> 00:11:26,590 I det minste kan vi gi du poeng for innsatsen. 261 00:11:26,590 --> 00:11:28,510 >> En for innsats i denne klassen. 262 00:11:28,510 --> 00:11:30,170 Minst laveste poengsum dråpe for innsatsen. 263 00:11:30,170 --> 00:11:32,354 Så ja. 264 00:11:32,354 --> 00:11:33,270 Det er ganske mye det. 265 00:11:33,270 --> 00:11:36,521 Har noen spørsmål så langt på hvordan vi karakter i klassen? 266 00:11:36,521 --> 00:11:37,187 Eller noen av disse? 267 00:11:37,187 --> 00:11:41,220 Noen av disse så far-- seksjoner, kontortid? 268 00:11:41,220 --> 00:11:41,720 Kjølig. 269 00:11:41,720 --> 00:11:46,720 270 00:11:46,720 --> 00:11:47,800 OK. 271 00:11:47,800 --> 00:11:51,260 >> Så dette er et tema som ikke man virkelig liker å snakke om. 272 00:11:51,260 --> 00:11:53,084 Jeg har egentlig ikke lyst til å snakke om det. 273 00:11:53,084 --> 00:11:55,250 Dere har egentlig ikke lyst å høre meg snakke om det. 274 00:11:55,250 --> 00:11:57,690 Men dessverre, vi alle må snakke om det. 275 00:11:57,690 --> 00:12:00,110 Brukte 20 minutter en David foredrag snakke om det. 276 00:12:00,110 --> 00:12:02,580 Og som er gjenstand akademisk redelighet. 277 00:12:02,580 --> 00:12:08,110 >> Så vi alle her har sikkert skrevet et essay gang i vår Yale karriere. 278 00:12:08,110 --> 00:12:11,800 Vi har sikkert fått en diskusjon der vi har fått beskjed om å ikke plagiere vår essay, 279 00:12:11,800 --> 00:12:13,940 fordi at arbeidet er ikke vår. 280 00:12:13,940 --> 00:12:18,109 I informatikk, har vi samme type konsept. 281 00:12:18,109 --> 00:12:20,150 Alt arbeid som du sender, all kode som du skriver 282 00:12:20,150 --> 00:12:21,900 bør være kode som du har skrevet. 283 00:12:21,900 --> 00:12:24,280 Bør ikke være kode som du har kopiert fra et annet sted. 284 00:12:24,280 --> 00:12:26,777 Bør ikke være kode som du har googlet og plopped 285 00:12:26,777 --> 00:12:28,360 og du ikke vet om det fungerer. 286 00:12:28,360 --> 00:12:32,440 Du slags har en følelse av hva det gjør, men egentlig ikke. 287 00:12:32,440 --> 00:12:36,562 Når du er i tvil, i hovedsak, det er bare å være rimelig. 288 00:12:36,562 --> 00:12:38,520 På vår pensum, har vi en hel liste over ting 289 00:12:38,520 --> 00:12:40,560 vi ser på som rimelig versus ikke rimelig. 290 00:12:40,560 --> 00:12:43,820 >> For eksempel, rimelig er du og din venn 291 00:12:43,820 --> 00:12:47,360 diskutere hva den beste måten å gå om logisk å løse et problem. 292 00:12:47,360 --> 00:12:48,910 Det er ganske rimelig. 293 00:12:48,910 --> 00:12:53,244 Hva ville ikke være fornuftig er hvis du Gutta fikk sammen, skrev den samme koden, 294 00:12:53,244 --> 00:12:54,410 og slått i den samme koden. 295 00:12:54,410 --> 00:12:56,302 Det er ikke rimelig. 296 00:12:56,302 --> 00:12:57,510 Samme, form av et essay. 297 00:12:57,510 --> 00:12:59,290 Hvis du ønsker å diskutere med din venn, hei, 298 00:12:59,290 --> 00:13:00,220 dette er hva jeg ønsker å skrive om. 299 00:13:00,220 --> 00:13:02,500 Dette er fremgangsmåten jeg vil ta å skrive om det, flott. 300 00:13:02,500 --> 00:13:03,208 Det er flott. 301 00:13:03,208 --> 00:13:04,790 Vennligst samarbeide med hverandre. 302 00:13:04,790 --> 00:13:06,540 Hvis dere starter skriver det samme, 303 00:13:06,540 --> 00:13:10,020 slår i samme essay, er at mindre OK. 304 00:13:10,020 --> 00:13:13,200 Så når du er i tvil, bare ikke gjør det. 305 00:13:13,200 --> 00:13:16,940 >> Her har vi i CS50, har vi skript som løp for å automatisere for å teste 306 00:13:16,940 --> 00:13:21,740 ikke bare riktigheten av koden din, men også det unike koden din. 307 00:13:21,740 --> 00:13:25,920 Så vennligst ikke sette oss i posisjon mot å henvise saken til excomm. 308 00:13:25,920 --> 00:13:31,110 Vennligst bare for alle, la oss bare gjør dette til en fantastisk opplevelse. 309 00:13:31,110 --> 00:13:33,600 Alle lærer bedre, vi alle er lykkeligere, 310 00:13:33,600 --> 00:13:37,926 og vi er alle satt opp til lykkes i dette kurset. 311 00:13:37,926 --> 00:13:39,800 Noe som er veldig unikt med denne klassen 312 00:13:39,800 --> 00:13:42,660 som jeg tror alle burde virkelig ta hensyn til er at vi har 313 00:13:42,660 --> 00:13:44,930 det som kalles beklagelsen klausul i vårt pensum. 314 00:13:44,930 --> 00:13:50,010 Så egentlig, innen 72 timer, hvis du tror du har gjort noe 315 00:13:50,010 --> 00:13:53,240 du ikke er helt sikker på var hensiktsmessig, kan du komme til oss. 316 00:13:53,240 --> 00:13:57,220 Vi lover deg at innen 72 timer vi vil håndtere saken selv 317 00:13:57,220 --> 00:13:59,820 uten å henvise til en høyere myndighet i administrasjonen. 318 00:13:59,820 --> 00:14:03,100 >> Så hvis du kommer til meg og sier: Andi, hei, jeg er virkelig lei meg, 319 00:14:03,100 --> 00:14:07,620 men jeg tror det er et par linjer i min kode i går kveld at jeg slags googlet, 320 00:14:07,620 --> 00:14:10,120 fikk ut av Stack Overløp, kopiere og lime, 321 00:14:10,120 --> 00:14:13,680 og jeg er veldig, veldig lei meg om det, gi meg beskjed. 322 00:14:13,680 --> 00:14:16,900 Vennligst ikke bare la det fester og bare håper at jeg fange den. 323 00:14:16,900 --> 00:14:17,784 Vi vil fange den. 324 00:14:17,784 --> 00:14:18,450 Bare komme til meg. 325 00:14:18,450 --> 00:14:20,520 Gi meg beskjed innen 72 timer. 326 00:14:20,520 --> 00:14:22,240 Vi skal finne en løsning. 327 00:14:22,240 --> 00:14:26,679 Og vi lover at vi ikke vil referere til universitets myndigheter hovedsak. 328 00:14:26,679 --> 00:14:29,220 Så det er i din beste interesse å bare være ærlig med alle 329 00:14:29,220 --> 00:14:31,720 involvert i kurset. 330 00:14:31,720 --> 00:14:34,630 >> OK. 331 00:14:34,630 --> 00:14:35,240 OK. 332 00:14:35,240 --> 00:14:37,800 Så nå, raskt før Jeg går videre, er det noen 333 00:14:37,800 --> 00:14:42,670 har spørsmål om logistikk på hvordan kursene vi kommer til å kjøre, 334 00:14:42,670 --> 00:14:45,982 hvordan seksjonene skal å kjøre, noe av det? 335 00:14:45,982 --> 00:14:46,711 OK. 336 00:14:46,711 --> 00:14:47,210 Yeah. 337 00:14:47,210 --> 00:14:48,126 >> PUBLIKUM: [uhørbart]? 338 00:14:48,126 --> 00:14:50,414 339 00:14:50,414 --> 00:14:51,080 ANDI PENG: Yeah. 340 00:14:51,080 --> 00:14:54,850 Så quizzes-- hvor mange av dere er i mandag / onsdag delen? 341 00:14:54,850 --> 00:14:56,700 Hvor mange av dere er i tirsdag / torsdag? 342 00:14:56,700 --> 00:14:58,550 OK, så det er en solid split her. 343 00:14:58,550 --> 00:15:00,900 Så måten vi driver det ved Yale er at vi 344 00:15:00,900 --> 00:15:04,040 kommer til å ha to separate quizzes-- en for hver section-- som 345 00:15:04,040 --> 00:15:06,160 vil bli tatt i løpet av klassen. 346 00:15:06,160 --> 00:15:09,310 Jeg tror det er oktober slutten av oktober, noe sånt, som i uke én 347 00:15:09,310 --> 00:15:10,794 av quizen. 348 00:15:10,794 --> 00:15:11,960 Ja, så bare kommer til klassen. 349 00:15:11,960 --> 00:15:13,920 På at mandag eller onsdag, du tar quizen. 350 00:15:13,920 --> 00:15:16,336 På den tirsdag eller torsdag, du vil ta en annen quiz. 351 00:15:16,336 --> 00:15:18,570 Men det samme materiale vil bli dekket. 352 00:15:18,570 --> 00:15:19,160 Yeah. 353 00:15:19,160 --> 00:15:20,660 Godt spørsmål. 354 00:15:20,660 --> 00:15:21,160 Yeah. 355 00:15:21,160 --> 00:15:23,260 >> PUBLIKUM: Hvor skal vi går for å sjekke våre karakterer? 356 00:15:23,260 --> 00:15:23,926 >> ANDI PENG: Yeah. 357 00:15:23,926 --> 00:15:28,420 Så jeg skal sende ut en e-post uansett hver uke 358 00:15:28,420 --> 00:15:31,460 når quizer er graded-- eller, sorry, når psets er gradert. 359 00:15:31,460 --> 00:15:34,120 Psets er vanligvis slått i etter middag eller fredag. 360 00:15:34,120 --> 00:15:37,540 Så jeg lover at jeg vil prøv å få dem tilbake til deg 361 00:15:37,540 --> 00:15:40,000 ved middagstid av følgende fredag. 362 00:15:40,000 --> 00:15:44,950 >> Når jeg grade en PSet, vil jeg sende ut en melding på karakterboken 363 00:15:44,950 --> 00:15:47,070 som forteller deg poengsummen din kan sees på nettet. 364 00:15:47,070 --> 00:15:52,022 Så akkurat denne uken, etter at jeg føre gradering forrige ukes psets, 365 00:15:52,022 --> 00:15:54,230 dere vil få en e-post varsling fortelle deg, 366 00:15:54,230 --> 00:15:55,870 hei dette er hvor du gå å se dine karakterer. 367 00:15:55,870 --> 00:15:57,680 Og du kan se hver Fordelingen av karakterene dine. 368 00:15:57,680 --> 00:15:58,555 Du kan se kommentarer. 369 00:15:58,555 --> 00:16:00,360 Oh, rask ting også. 370 00:16:00,360 --> 00:16:03,060 Kommentarfeltet i den store Boken er der jeg vil sannsynligvis 371 00:16:03,060 --> 00:16:05,300 tilbringer mesteparten av tiden min gradering. 372 00:16:05,300 --> 00:16:07,094 Så en ting som er veldig viktig når 373 00:16:07,094 --> 00:16:09,010 dere ser karakterene dine på dine psets 374 00:16:09,010 --> 00:16:11,400 er ikke bare på jakt på det fysiske stillingen 375 00:16:11,400 --> 00:16:14,630 men også tar deg tid til å virkelig lese mine kommentarer. 376 00:16:14,630 --> 00:16:17,820 >> Ofte som gir deg tilbakemelding om hvordan du løser et problem. 377 00:16:17,820 --> 00:16:20,480 Hvis du trenger å gjøre noe litt bedre, 378 00:16:20,480 --> 00:16:24,080 konstruktiv kritikk vanligvis er best gitt i de kommentarfeltet. 379 00:16:24,080 --> 00:16:26,950 Så vær så snill, vær så snill, jeg kommer å bruke tid på å skrive kommentarer. 380 00:16:26,950 --> 00:16:30,440 Vær så snill, ville jeg virkelig pris på det hvis dere vil lese disse kommentarene. 381 00:16:30,440 --> 00:16:31,170 OK. 382 00:16:31,170 --> 00:16:34,150 Kjølig. 383 00:16:34,150 --> 00:16:34,680 >> Greit. 384 00:16:34,680 --> 00:16:40,680 Så vi kommer til å begynne å snakke og bare se gjennom raskt 385 00:16:40,680 --> 00:16:45,040 noe av materialet fra uke null bare så vi er 386 00:16:45,040 --> 00:16:48,760 på høyre side for starter denne ukens problemer. 387 00:16:48,760 --> 00:16:52,600 Så mens loop er en av de tre typer av løkker 388 00:16:52,600 --> 00:16:54,510 vi diskutert tidligere i denne klassen. 389 00:16:54,510 --> 00:16:57,060 >> En stund løkke hovedsak er skrevet i syntaks 390 00:16:57,060 --> 00:17:00,666 der, mens en bestemt tilstand, gjøre dette gjentatte ganger, ikke sant? 391 00:17:00,666 --> 00:17:02,040 Tenk på det i denne grafikken her. 392 00:17:02,040 --> 00:17:04,780 Du kommer til å begynne på en visst punkt i koden. 393 00:17:04,780 --> 00:17:09,030 Du kommer til å gå inn i løkken tilstand if-- jeg ikke know-- x er mindre enn én. 394 00:17:09,030 --> 00:17:11,677 >> Hvis det er sant, du kommer å utføre sløyfen kroppen. 395 00:17:11,677 --> 00:17:14,010 Og du kommer til å fortsette å gjøre som igjen, igjen, igjen, 396 00:17:14,010 --> 00:17:17,900 over og over-- som er grunnen til at det er en loop-- inntil tilstanden blir 397 00:17:17,900 --> 00:17:19,079 falsk. 398 00:17:19,079 --> 00:17:22,140 Så på denne måten, en stund løkke er en av de enklere måter 399 00:17:22,140 --> 00:17:25,619 å skrive noen form for tilstand som må gjenta igjen og igjen og igjen. 400 00:17:25,619 --> 00:17:28,109 Bare vær forsiktig når du skriver noen form for løkke 401 00:17:28,109 --> 00:17:32,140 at du har en exit tilstand som samt en oppdatering til hva det 402 00:17:32,140 --> 00:17:36,714 er slik at løkken ikke bare kjøre over og over uendelig. 403 00:17:36,714 --> 00:17:38,630 I alle fall, du kommer å ønske å være sikker 404 00:17:38,630 --> 00:17:42,670 at du endrer noen aspekter av en kode eller ved slutten av sløyfen 405 00:17:42,670 --> 00:17:46,680 bare for å være sikker på at du har en måte av framdrift mot tilstanden 406 00:17:46,680 --> 00:17:48,400 at du ønsker å møte til slutt. 407 00:17:48,400 --> 00:17:50,239 Betyr det fornuftig for alle? 408 00:17:50,239 --> 00:17:52,530 Vi ønsker ikke å være fanget opp i denne spiralen der 409 00:17:52,530 --> 00:17:55,710 vi går rundt og rundt og det er ingen måte å bryte sløyfen. 410 00:17:55,710 --> 00:17:58,844 Og hver sløyfe hovedsak har en måte å gjøre det. 411 00:17:58,844 --> 00:17:59,344 OK. 412 00:17:59,344 --> 00:18:03,030 413 00:18:03,030 --> 00:18:06,060 >> Dernest mange av dere i dine Mario psets 414 00:18:06,060 --> 00:18:08,910 sannsynligvis måtte ansette denne type av sløyfen. 415 00:18:08,910 --> 00:18:11,802 Det kalles en gjør mens loop. 416 00:18:11,802 --> 00:18:14,510 Først av alt, kan noen fortelle meg hva er forskjellen mellom en gjør 417 00:18:14,510 --> 00:18:16,586 mens loop og en stund loop er? 418 00:18:16,586 --> 00:18:17,086 Yeah. 419 00:18:17,086 --> 00:18:21,030 >> PUBLIKUM: The do mens loop kjører på første [uhørbart]. 420 00:18:21,030 --> 00:18:22,120 >> ANDI PENG: Ja, akkurat. 421 00:18:22,120 --> 00:18:27,130 Så en gjør mens loop alltid gjør hva er inne i do, inne i parentesene 422 00:18:27,130 --> 00:18:30,520 der og gjør at tilstanden før du sjekker om the-- beklager, 423 00:18:30,520 --> 00:18:32,940 gjør at koden før kontrollere for tilstanden. 424 00:18:32,940 --> 00:18:37,200 Og dette er spesielt relevant for oss her i denne klassen, fordi de fleste ganger 425 00:18:37,200 --> 00:18:41,450 vi kommer til å ønske å be brukeren for noen form for innspill. 426 00:18:41,450 --> 00:18:43,520 Og så, avhengig av inngangs de gir oss, 427 00:18:43,520 --> 00:18:46,150 så kan vi evaluere, oh, gjør vi trenger å be dem igjen? 428 00:18:46,150 --> 00:18:49,930 >> Så i Mario, hvis brukeren ga deg en negativ høyde, f.eks 429 00:18:49,930 --> 00:18:52,990 du kommer til første ledetekst og gjøre det som er inni. 430 00:18:52,990 --> 00:18:54,820 Da kommer du til å sjekke stund. 431 00:18:54,820 --> 00:18:57,570 Du vet, er negativ en, er at et positivt tall? 432 00:18:57,570 --> 00:19:00,680 Hvis det ikke er det, kommer jeg til å gå tilbake og gjenta do og gjenta 433 00:19:00,680 --> 00:19:03,950 og gjenta og gjenta til de endelig gi deg et nummer som du liker, 434 00:19:03,950 --> 00:19:07,002 at vi alle kan benytte i vår kode. 435 00:19:07,002 --> 00:19:09,210 Det er ganske viktig for hovedsak noen brukerundersøkelser. 436 00:19:09,210 --> 00:19:11,760 Jeg kan garantere deg noen tid i en PSet der 437 00:19:11,760 --> 00:19:15,070 Vi ber deg legge inn noen form for kode, er vi 438 00:19:15,070 --> 00:19:17,540 sannsynligvis kommer til å gi deg en test der vi er 439 00:19:17,540 --> 00:19:21,200 skal gi deg noe dårlig det er kommer til å prøve å bryte koden din. 440 00:19:21,200 --> 00:19:25,044 >> Hvis vi prøver å be deg om å legge inn en heltall, kan vi bare gi deg en streng 441 00:19:25,044 --> 00:19:26,460 og se hvordan du skulle håndtere det. 442 00:19:26,460 --> 00:19:30,610 Hvis vi ber deg om å ansette en alder, Vi kan gi deg et negativt tall 443 00:19:30,610 --> 00:19:32,340 å se hvordan du skulle håndtere det. 444 00:19:32,340 --> 00:19:37,260 Bare sørg for at dere skal teste for tilfeller der du ikke får det beste 445 00:19:37,260 --> 00:19:38,590 input, la oss bare si. 446 00:19:38,590 --> 00:19:40,510 Og en gjør mens loop er ofte det beste 447 00:19:40,510 --> 00:19:45,260 måte å designe din kode så at det oppfyller det omfang. 448 00:19:45,260 --> 00:19:45,760 OK. 449 00:19:45,760 --> 00:19:48,930 450 00:19:48,930 --> 00:19:49,470 >> OK. 451 00:19:49,470 --> 00:19:53,270 Så dette er trolig den mest kompleks sløyfe ut av de tre 452 00:19:53,270 --> 00:19:54,990 som vi har sett på så langt. 453 00:19:54,990 --> 00:19:56,689 Og det virker veldig skummelt i begynnelsen. 454 00:19:56,689 --> 00:19:59,730 Men jeg kan garantere deg, når dere få taket på hvordan du bruker en for loop, 455 00:19:59,730 --> 00:20:03,320 det er en av de mest nyttige ting, de fleste nyttige verktøy i arsenal 456 00:20:03,320 --> 00:20:05,300 for fremover i denne klassen. 457 00:20:05,300 --> 00:20:09,920 >> Så for eksempel i Scratch, vi hadde dette veldig enkelt blokk 458 00:20:09,920 --> 00:20:13,180 som bare sa gjenta denne bestemte setninger visst antall ganger. 459 00:20:13,180 --> 00:20:16,260 Forresten, SAJ-- det er Scaz Andi Jason. 460 00:20:16,260 --> 00:20:18,740 Vi ofte signere vår e-post SAJ. 461 00:20:18,740 --> 00:20:20,360 Hvis vi sier SAJ, ikke bli forvirret. 462 00:20:20,360 --> 00:20:22,630 Det er bare oss. 463 00:20:22,630 --> 00:20:28,600 >> Så i Scratch, kunne vi ha en blokk som sagt, jeg gjentar gjerne SAJ! 464 00:20:28,600 --> 00:20:29,430 10 ganger. 465 00:20:29,430 --> 00:20:30,130 Veldig enkelt. 466 00:20:30,130 --> 00:20:32,302 Logikken bak det er en veldig, veldig enkelt, ikke sant? 467 00:20:32,302 --> 00:20:35,260 Jeg vil først gå gjennom den første gang, og at, den andre gangen 468 00:20:35,260 --> 00:20:38,510 og ser at, for tredje gang, slik at videre og så videre, helt til du treffer til 10. 469 00:20:38,510 --> 00:20:41,960 >> Og måten vi ville representere det i kode er bare gjennom en enkelt for løkke. 470 00:20:41,960 --> 00:20:45,440 Så for, du kommer til å erklære variabelen her, i dette tilfellet 471 00:20:45,440 --> 00:20:46,349 med en int. 472 00:20:46,349 --> 00:20:47,390 Vi kommer til å gi det et navn jeg. 473 00:20:47,390 --> 00:20:49,500 Vi kommer til å initialisere den til 0. 474 00:20:49,500 --> 00:20:52,490 Og stopp utgaven er kommer til å være i er mindre enn 10. 475 00:20:52,490 --> 00:20:54,622 Og oppdateringen kommer til å være i ++. 476 00:20:54,622 --> 00:20:57,750 >> Og i sløyfen, det kommer å kjøre til slutt det 477 00:20:57,750 --> 00:21:01,490 treffer enden av condition-- der tilfellet, det kommer til å bryte sløyfen. 478 00:21:01,490 --> 00:21:04,600 Det bør være ting som du Gutta har all slags sett før 479 00:21:04,600 --> 00:21:07,270 og måtte gjøre for din oppgavesettet en. 480 00:21:07,270 --> 00:21:12,310 Er det noen som har noen spørsmål om etter looper akkurat nå? 481 00:21:12,310 --> 00:21:12,930 OK. 482 00:21:12,930 --> 00:21:13,430 Flott. 483 00:21:13,430 --> 00:21:17,520 484 00:21:17,520 --> 00:21:18,620 >> OK. 485 00:21:18,620 --> 00:21:22,270 Så for de av dere som har lese PSet spec for denne uken 486 00:21:22,270 --> 00:21:27,690 vet at vi er nødt til å ansette noe som kalles ASCII og ASCII-tabellen. 487 00:21:27,690 --> 00:21:32,380 Så David i foredraget gikk over kort hvordan datamaskiner essentially-- alt 488 00:21:32,380 --> 00:21:35,410 er kodet i en datamaskin i binære, i nuller og enere. 489 00:21:35,410 --> 00:21:39,740 Og måten at datamaskiner er i stand til å lagre forskjellige verdier i tillegg 490 00:21:39,740 --> 00:21:44,360 til nuller og enere er gjennom kartlegging disse tallene til å representere andre sifre 491 00:21:44,360 --> 00:21:47,220 eller vesentlig andre tegn. 492 00:21:47,220 --> 00:21:49,810 >> Slik at i dette tilfellet, en ASCII table-- alt den gjør 493 00:21:49,810 --> 00:21:53,600 er kart tegn, eller tegn, til tall. 494 00:21:53,600 --> 00:21:57,385 Så kildekoden filen i din computer-- den ser, 495 00:21:57,385 --> 00:22:00,010 hei, en haug med nuller og enere, nuller og enere, nuller og enere. 496 00:22:00,010 --> 00:22:02,350 Det er det som er lagret i faktiske minnet på datamaskinen. 497 00:22:02,350 --> 00:22:04,750 >> Men når vi mennesker ønsker å kommunisere med datamaskinen, 498 00:22:04,750 --> 00:22:08,249 vi want-- si, for eksempel, hvis jeg vil ha den store bokstaver A, 499 00:22:08,249 --> 00:22:10,540 Jeg kommer til å trenge noen måte for å fortelle datamaskinen, oh, 500 00:22:10,540 --> 00:22:16,300 når jeg skriver med store bokstaver A, mener jeg denne representasjonen i binær. 501 00:22:16,300 --> 00:22:22,260 >> Og så den måten vi gjør det blir kastet en vilkårlig tingen kalt en ASCII-tabellen, 502 00:22:22,260 --> 00:22:25,020 hvor vi, som mennesker, som programmerere, for en tid siden, 503 00:22:25,020 --> 00:22:28,660 vi vilkårlig besluttet at vi skulle tildele disse tall 504 00:22:28,660 --> 00:22:30,960 verdier til disse tegnene. 505 00:22:30,960 --> 00:22:32,720 >> Så dere kan google dette på nettet. 506 00:22:32,720 --> 00:22:37,120 Jeg tror det er en link til den i pset-- bare en ASCII kartet bordet, ASCII 507 00:22:37,120 --> 00:22:37,720 tabell. 508 00:22:37,720 --> 00:22:40,722 Det betyr bare binære numre i tegn. 509 00:22:40,722 --> 00:22:42,930 Og det kommer til å bli veldig nyttig for ditt problem sett 510 00:22:42,930 --> 00:22:45,470 når du vil beregne noe, eller hvis du 511 00:22:45,470 --> 00:22:47,880 vil vise viss tegn eller heltall 512 00:22:47,880 --> 00:22:50,327 eller manipulere visse tegn. 513 00:22:50,327 --> 00:22:52,160 Det kommer til å bli veldig viktig at dere alle 514 00:22:52,160 --> 00:22:55,140 vet hvordan du skal navigere en ASCII-tabellen. 515 00:22:55,140 --> 00:23:01,260 >> Så for eksempel den store bokstaver A er representert ved nummer 65. 516 00:23:01,260 --> 00:23:04,207 Og små bokstaver en er representert ved 97. 517 00:23:04,207 --> 00:23:07,040 Derfor er det viktig å vite at Forskjellen mellom de to verdiene 518 00:23:07,040 --> 00:23:08,320 er 32. 519 00:23:08,320 --> 00:23:13,210 Ofte, hvis du trenger å konvertere fra den ene til den annen, er forskjellen 32. 520 00:23:13,210 --> 00:23:15,710 Og ikke bekymre deg hvis du er snill forvirret på dette først. 521 00:23:15,710 --> 00:23:20,230 Vi vil gå over hvordan vi ville ansette dette i selve koden. 522 00:23:20,230 --> 00:23:24,700 523 00:23:24,700 --> 00:23:26,380 >> OK. 524 00:23:26,380 --> 00:23:30,770 Så for de av dere med bærbare datamaskiner ut, gjerne trekke opp en ASCII-tabellen, 525 00:23:30,770 --> 00:23:36,030 fordi disse vil trolig krever dere å referere 526 00:23:36,030 --> 00:23:38,100 hva tegnene er. 527 00:23:38,100 --> 00:23:38,640 OK. 528 00:23:38,640 --> 00:23:42,840 >> Så å vite at visse tegn kartlegge bestemte numre, 529 00:23:42,840 --> 00:23:47,240 hvis jeg skulle kjøre bare den første linje som code-- printf en, 530 00:23:47,240 --> 00:23:50,900 små bokstaver a, minus store bokstaver A. Er det noen 531 00:23:50,900 --> 00:23:55,880 har en gjetning på hva som ville være skrive ut på skjermen akkurat nå? 532 00:23:55,880 --> 00:23:58,190 >> Så først av alt, hva gjør Små bokstaver en representerer? 533 00:23:58,190 --> 00:24:00,990 Hvilket nummer er at kodet i ASCII-tabellen. 534 00:24:00,990 --> 00:24:01,490 Sorry? 535 00:24:01,490 --> 00:24:02,630 >> PUBLIKUM: 97? 536 00:24:02,630 --> 00:24:03,630 >> ANDI PENG: 97, stor. 537 00:24:03,630 --> 00:24:05,077 Og hva er store bokstaver A? 538 00:24:05,077 --> 00:24:06,330 >> PUBLIKUM: 65. 539 00:24:06,330 --> 00:24:08,255 >> ANDI PENG: Så hva er 97 minus 65? 540 00:24:08,255 --> 00:24:09,227 >> PUBLIKUM: 32. 541 00:24:09,227 --> 00:24:09,810 ANDI PENG: OK. 542 00:24:09,810 --> 00:24:13,530 Så hva tror dere kommer til å skje når jeg innspill som kodelinje 543 00:24:13,530 --> 00:24:14,670 inn i datamaskinen min? 544 00:24:14,670 --> 00:24:17,981 545 00:24:17,981 --> 00:24:19,896 >> PUBLIKUM: [uhørlig]. 546 00:24:19,896 --> 00:24:21,020 ANDI PENG: Beklager, si opp. 547 00:24:21,020 --> 00:24:22,520 Ingen bekymringer. 548 00:24:22,520 --> 00:24:25,750 Dette er et veldig trygt miljø, minus kameraet. 549 00:24:25,750 --> 00:24:27,550 Vi er alle kommer to-- ingen bekymringer. 550 00:24:27,550 --> 00:24:30,940 Bare vi alle kommer til å late som det er bare oss chilling i dette rommet. 551 00:24:30,940 --> 00:24:31,480 Ingen bekymringer. 552 00:24:31,480 --> 00:24:33,410 Ingen spørsmål er for dumme. 553 00:24:33,410 --> 00:24:35,300 Ingen svar er en dum svar. 554 00:24:35,300 --> 00:24:38,260 Jeg sannsynligvis kommer til å gjøre feil i løpet av min undervisning. 555 00:24:38,260 --> 00:24:40,740 Seriøst, folkens, bare blurt den ut. 556 00:24:40,740 --> 00:24:43,092 Vær trygg på deg selv, vet du? 557 00:24:43,092 --> 00:24:43,800 Så hva var det? 558 00:24:43,800 --> 00:24:47,990 Hvem sa at siste svaret? 559 00:24:47,990 --> 00:24:48,540 OK. 560 00:24:48,540 --> 00:24:50,380 Rope at fint og klart. 561 00:24:50,380 --> 00:24:51,220 >> PUBLIKUM: 32? 562 00:24:51,220 --> 00:24:51,850 >> ANDI PENG: 32. 563 00:24:51,850 --> 00:24:54,141 OK, la oss kjøre denne koden og se om det er det som skjer. 564 00:24:54,141 --> 00:25:00,260 565 00:25:00,260 --> 00:25:00,760 OK. 566 00:25:00,760 --> 00:25:03,300 567 00:25:03,300 --> 00:25:06,360 Så som dere kan slags se, den typiske notasjonen jeg har 568 00:25:06,360 --> 00:25:12,250 satt opp her for hvordan vi ville ansette noen form for program på datamaskinen vår. 569 00:25:12,250 --> 00:25:14,770 Vi har vår viktigste funksjon innenfor vår viktigste funksjon. 570 00:25:14,770 --> 00:25:17,265 Jeg skal bare kopiere og lim inn denne linjen med kode. 571 00:25:17,265 --> 00:25:21,082 572 00:25:21,082 --> 00:25:23,540 Vær også forsiktig når dere kopierer og limer inn koden. 573 00:25:23,540 --> 00:25:28,750 Noen ganger visse operatører ikke lime over på riktig måte. 574 00:25:28,750 --> 00:25:31,397 I så fall minus skiltet var faktisk en strek. 575 00:25:31,397 --> 00:25:32,980 Og slik at maskinen ikke plukke den opp. 576 00:25:32,980 --> 00:25:35,870 Så jeg måtte gå tilbake og fysisk skrive inn det. 577 00:25:35,870 --> 00:25:37,846 Bare vær forsiktig når du dere gjør det. 578 00:25:37,846 --> 00:25:41,178 579 00:25:41,178 --> 00:25:42,660 >> OK. 580 00:25:42,660 --> 00:25:43,980 Vi kommer til å kjøre dette her. 581 00:25:43,980 --> 00:25:45,670 Så vi kommer til å cd inn i vår section2. 582 00:25:45,670 --> 00:25:50,470 583 00:25:50,470 --> 00:25:52,030 Jeg har kalt dette programmet asciimath. 584 00:25:52,030 --> 00:25:55,690 Så husk, når vi kjøre noen program, ønsker vi først å kompilere den 585 00:25:55,690 --> 00:25:57,150 ved å kjøre det gjennom vår make. 586 00:25:57,150 --> 00:26:00,030 Og så ønsker vi å faktisk kjøre programmet ved å gjøre dot-slash. 587 00:26:00,030 --> 00:26:01,280 Så vi kommer til å ./asciimath. 588 00:26:01,280 --> 00:26:05,780 589 00:26:05,780 --> 00:26:06,590 >> Høyre, der vi går. 590 00:26:06,590 --> 00:26:07,410 Og vi ser 32. 591 00:26:07,410 --> 00:26:07,930 Bra gjort. 592 00:26:07,930 --> 00:26:10,340 Du fortjener et sukkertøy. 593 00:26:10,340 --> 00:26:11,160 Godteri for deg. 594 00:26:11,160 --> 00:26:11,900 Unnskyld. 595 00:26:11,900 --> 00:26:13,100 Greit. 596 00:26:13,100 --> 00:26:13,670 OK. 597 00:26:13,670 --> 00:26:18,070 Så vi kan gå tilbake til vårt eksempel her. 598 00:26:18,070 --> 00:26:23,530 599 00:26:23,530 --> 00:26:24,345 Aah, nei. 600 00:26:24,345 --> 00:26:29,147 601 00:26:29,147 --> 00:26:31,090 Aah. 602 00:26:31,090 --> 00:26:32,490 OK. 603 00:26:32,490 --> 00:26:34,610 Jeg skal bare holde det sånn. 604 00:26:34,610 --> 00:26:48,520 605 00:26:48,520 --> 00:26:51,240 OK. 606 00:26:51,240 --> 00:26:51,740 OK. 607 00:26:51,740 --> 00:26:55,340 Så som dere ser, kan vi gjøre mange svært interessante ting, 608 00:26:55,340 --> 00:26:58,880 mange svært kule ting, mye veldig kompliserte ting som involverer 609 00:26:58,880 --> 00:27:02,720 ASCII-tegn og tall. 610 00:27:02,720 --> 00:27:05,890 Når du kommer ned til linje fem, det er mye å følge med. 611 00:27:05,890 --> 00:27:07,640 Vi kommer ikke til å gå gjennom seksjonen. 612 00:27:07,640 --> 00:27:10,720 Gjerne, hvis du kan, resonnere den ut på papir 613 00:27:10,720 --> 00:27:14,750 først på hva som skal skje når du innspill slik en rekke verdier. 614 00:27:14,750 --> 00:27:19,720 For eksempel i den siste linje, har vi z-- som representerer en viss number-- 615 00:27:19,720 --> 00:27:24,740 a-- som også representerer en visse number-- pluss 1 modulo 26 616 00:27:24,740 --> 00:27:26,750 pluss små bokstaver en. 617 00:27:26,750 --> 00:27:29,220 >> Hvis dere holde lesing gjennom disse, 618 00:27:29,220 --> 00:27:34,009 kan se et mønster komme opp i hvordan vi manipulerer koden. 619 00:27:34,009 --> 00:27:36,050 Jeg høyt, foreslår etter § dere alle 620 00:27:36,050 --> 00:27:38,160 gutta gå videre og innspill de alle i datamaskinen 621 00:27:38,160 --> 00:27:40,060 og se hva slags tallene kommer ut 622 00:27:40,060 --> 00:27:43,090 og resonnement gjennom hvorfor de er skjer, fordi for dine psets 623 00:27:43,090 --> 00:27:45,060 det vil være veldig viktig for deg å forstå 624 00:27:45,060 --> 00:27:47,132 hvorfor visse ting skjer. 625 00:27:47,132 --> 00:27:48,590 Alle disse slides vil være online. 626 00:27:48,590 --> 00:27:51,510 Så ingen bekymringer om å prøve å fysisk kopiere ned notater. 627 00:27:51,510 --> 00:27:52,510 Alt er online. 628 00:27:52,510 --> 00:27:54,050 Denne delen i seg selv vil være online. 629 00:27:54,050 --> 00:27:57,500 All min kildekoden som Jeg kjører vil være online. 630 00:27:57,500 --> 00:27:58,180 Yeah. 631 00:27:58,180 --> 00:27:59,430 Visste du fortsatt har spørsmål? 632 00:27:59,430 --> 00:28:00,587 PUBLIKUM: Hva er modulo? 633 00:28:00,587 --> 00:28:01,170 ANDI PENG: OK. 634 00:28:01,170 --> 00:28:05,620 Så modulo er en operatør som kommer til å være ganske viktig for gutta sin PSet 635 00:28:05,620 --> 00:28:06,690 her. 636 00:28:06,690 --> 00:28:12,280 Så den måten at operatørene i C og i programmering arbeid 637 00:28:12,280 --> 00:28:16,360 er at du har det som kalles divisjon symbol og modulus symbol, 638 00:28:16,360 --> 00:28:18,350 som er akkurat som den prosenttegnet. 639 00:28:18,350 --> 00:28:24,840 >> Så i C, når du gjør et heltall dividert med et heltall med en skråstrek, 640 00:28:24,840 --> 00:28:27,720 C har en tendens til å ønske å kutte av alle de desimaler, 641 00:28:27,720 --> 00:28:30,290 fordi et heltall ønsker å konvertere til et helt tall. 642 00:28:30,290 --> 00:28:33,550 Det kommer ikke til å ønske å være en dobbel med en haug med desimaler alt etter det. 643 00:28:33,550 --> 00:28:39,322 >> Så hvis jeg gjør 3 delt på to, kommer det til å kutte 0,5 og bare gi deg en. 644 00:28:39,322 --> 00:28:41,530 Så det er noe å være svært forsiktig med når du er 645 00:28:41,530 --> 00:28:45,294 gjøre noen form for matematikk i programmering, er at tallene du får 646 00:28:45,294 --> 00:28:47,210 ikke kan være tallene at du tenkte, 647 00:28:47,210 --> 00:28:50,190 som er grunnen til avrunding i din siste PSet er så viktig. 648 00:28:50,190 --> 00:28:51,980 >> Modulo gir deg resten. 649 00:28:51,980 --> 00:28:56,200 Så for eksempel, hvis jeg gjorde tre modulo 2-- så tre prosenttegn 2-- 650 00:28:56,200 --> 00:28:58,020 det vil gi deg resten av det. 651 00:28:58,020 --> 00:29:00,460 Så 3 delt på to er 1.5. 652 00:29:00,460 --> 00:29:01,410 Det er en rest av en. 653 00:29:01,410 --> 00:29:04,600 Det vil gi deg en, som er resten av det. 654 00:29:04,600 --> 00:29:07,361 >> Så når dere er i bevegelse gjennom ASCII-tabellen, 655 00:29:07,361 --> 00:29:09,735 modulo vil ende opp med å bli noe som er veldig viktig, 656 00:29:09,735 --> 00:29:11,240 og vi vil diskutere det senere. 657 00:29:11,240 --> 00:29:17,750 658 00:29:17,750 --> 00:29:19,040 >> OK. 659 00:29:19,040 --> 00:29:27,300 Så noe som er pen, ganske ny og ganske unik 660 00:29:27,300 --> 00:29:31,920 at vi har diskutert denne uken begrepet hva en matrise er. 661 00:29:31,920 --> 00:29:34,370 Slik matrise er det først type datastruktur 662 00:29:34,370 --> 00:29:36,320 at vi kommer til å støter på i denne klassen. 663 00:29:36,320 --> 00:29:40,010 All data strukturen er en slags vilkårlig, 664 00:29:40,010 --> 00:29:43,370 bokstavelig ting som struktur at vi som programmerere har skapt, 665 00:29:43,370 --> 00:29:47,890 at vi har satt i vår kode som kan inneholde andre deler av koden. 666 00:29:47,890 --> 00:29:51,090 >> Så i denne forstand, en array-- Tenk på det som et arkivskap, 667 00:29:51,090 --> 00:29:53,470 der hvis du åpner annerledes hyller av arkivskap, 668 00:29:53,470 --> 00:29:55,630 du kan få tilgang til forskjellige ting. 669 00:29:55,630 --> 00:29:58,630 I minnet, er en matrise bare å gjøre det samme på din datamaskin. 670 00:29:58,630 --> 00:30:01,730 Du kan ha forskjellig blocks-- vi kalle dem indices-- av en matrise. 671 00:30:01,730 --> 00:30:04,210 Det er akkurat som en blokk, en hylle minne 672 00:30:04,210 --> 00:30:07,580 at vi har skapt i din datamaskin som du kan legge inn 673 00:30:07,580 --> 00:30:10,270 visse ting i forskjellige områder. 674 00:30:10,270 --> 00:30:18,000 >> Så med en matrise, du alltid må specify-- 675 00:30:18,000 --> 00:30:22,360 du må spesifisere erklære en array i følgende format. 676 00:30:22,360 --> 00:30:24,290 Du kommer til å først angi datatype 677 00:30:24,290 --> 00:30:25,831 som du ønsker å lage av tabellen. 678 00:30:25,831 --> 00:30:28,870 Hvis jeg vil ha en rekke heltall, Jeg kommer til å sette int rett der. 679 00:30:28,870 --> 00:30:32,079 Hvis jeg vil ha en rekke strenger, Jeg kommer til å sette strenger der, 680 00:30:32,079 --> 00:30:34,995 navnet på array, og deretter du kommer til å ha hakeparenteser. 681 00:30:34,995 --> 00:30:39,580 Og inne i hakeparentes, er du nødt til størrelsen på array. 682 00:30:39,580 --> 00:30:42,900 >> Noe som er veldig viktig for huske på når du oppretter matriser er 683 00:30:42,900 --> 00:30:46,530 at når du oppretter en array, kan denne størrelsen ikke endres. 684 00:30:46,530 --> 00:30:50,180 Så hvis du vet at akkurat nå man har en rekke av størrelse 10, 685 00:30:50,180 --> 00:30:54,550 du vet at jeg kommer til å ha 10 celler innenfor eller 10 indekser i denne matrisen, 686 00:30:54,550 --> 00:30:56,830 og det er aldri kommer for å utvide eller redusere 687 00:30:56,830 --> 00:30:59,850 uansett hva, og at det er for tiden bare 10 blokker av plass 688 00:30:59,850 --> 00:31:04,490 bevilget i minne som kan lagre opp til 10 ting av det du har satt. 689 00:31:04,490 --> 00:31:08,790 >> Så på denne måten en rekke datatype den datastruktur som er en matrise 690 00:31:08,790 --> 00:31:13,392 er svært forskjellig fra noen andre som vi vil bli dekket senere i dette kurset. 691 00:31:13,392 --> 00:31:15,170 Yeah. 692 00:31:15,170 --> 00:31:20,080 For eksempel, hvis du ønsket å skaper en matrise av størrelse 3 som 693 00:31:20,080 --> 00:31:23,670 inneholdt variabler av integer-- Åh, beklager, av temperature-- 694 00:31:23,670 --> 00:31:25,640 og temperatur, av Selvfølgelig er et helt tall. 695 00:31:25,640 --> 00:31:28,710 >> Så vi ville skape int, som er den Datatypen for hva vi ønsker å lagre. 696 00:31:28,710 --> 00:31:32,680 Vi kommer til å kalle dette temperaturer av hensyn til nomenklatur av navngiving 697 00:31:32,680 --> 00:31:34,200 noe som vi alle forstår. 698 00:31:34,200 --> 00:31:35,900 Og vi kommer til å ha hakeparenteser. 699 00:31:35,900 --> 00:31:37,200 Og vi ønsker tre tall. 700 00:31:37,200 --> 00:31:39,000 Så vi kommer til å sette tre på innsiden av det. 701 00:31:39,000 --> 00:31:41,041 >> Noe som er virkelig viktig å huske på 702 00:31:41,041 --> 00:31:43,530 er at arrays er null indeksert. 703 00:31:43,530 --> 00:31:46,410 Alt det betyr er at du starter med indeksen fra 0, 704 00:31:46,410 --> 00:31:49,800 og du kjører opp gjennom størrelsen på matrisen minus en. 705 00:31:49,800 --> 00:31:52,730 Så for eksempel her, vi har en rekke størrelse 3. 706 00:31:52,730 --> 00:31:54,680 Det kommer til å være i stand å holde tre verdier. 707 00:31:54,680 --> 00:31:57,450 Men tallene themselves-- som nummer, matrisen, som indeks, 708 00:31:57,450 --> 00:32:00,271 matrisen, er 0 til 2. 709 00:32:00,271 --> 00:32:03,520 Så folkens, være veldig, veldig forsiktig når du går gjennom dine problemer fastsatt 710 00:32:03,520 --> 00:32:06,500 og skape noen form for array, fordi mye av ganger er det 711 00:32:06,500 --> 00:32:08,490 veldig, veldig lett å glemme det. 712 00:32:08,490 --> 00:32:11,840 Jeg faktisk ikke har indeksen av tre, som jeg for tiden bare 713 00:32:11,840 --> 00:32:13,130 har indeks på 2. 714 00:32:13,130 --> 00:32:16,046 Og hvis du prøver å tilgang til tredje indeksen, 715 00:32:16,046 --> 00:32:18,170 det kommer til å være det som er kalt null terminator. 716 00:32:18,170 --> 00:32:19,990 Det kommer ikke til å faktisk finnes i tabellen. 717 00:32:19,990 --> 00:32:21,781 Og datamaskinen er ikke kommer til å like det. 718 00:32:21,781 --> 00:32:24,570 Så vær forsiktig når du får tilgang ting bare 719 00:32:24,570 --> 00:32:28,070 for å sikre at du husker som arrays er null-indeksert. 720 00:32:28,070 --> 00:32:28,880 >> OK. 721 00:32:28,880 --> 00:32:34,030 Slik det første eksempelet er bare en måte for å skape en matrise. 722 00:32:34,030 --> 00:32:36,790 Det andre eksemplet jeg har Nedenfor er bare en måte separat 723 00:32:36,790 --> 00:32:40,210 for å skape det som er det samme data struktur som vi nettopp har lagt inn. 724 00:32:40,210 --> 00:32:44,347 Så i stedet for fysisk å kjøre gjennom og sette i temperatur fra 0 725 00:32:44,347 --> 00:32:47,180 er lik uansett, temperatur 1 er lik uansett, temperatur 2 equals 726 00:32:47,180 --> 00:32:50,950 uansett, kunne jeg faktisk bare direkte skape alt på én linje 727 00:32:50,950 --> 00:32:53,010 inn temperaturhakeparenteser er lik. 728 00:32:53,010 --> 00:32:56,536 >> Og legg merke til i dette tilfellet, trenger du ikke å angi hvor stor matrise er, 729 00:32:56,536 --> 00:32:59,160 fordi datamaskinen kommer til å gå gjennom og se at det er 730 00:32:59,160 --> 00:33:01,570 tre elementer i disse klammeparentes. 731 00:33:01,570 --> 00:33:04,000 Og det kommer til å vite, OK, Jeg trenger en rekke størrelse 3. 732 00:33:04,000 --> 00:33:07,440 Du kommer ikke til å trenge å innspill den på følgende måte. 733 00:33:07,440 --> 00:33:10,170 >> Og også, ja, på den måten. 734 00:33:10,170 --> 00:33:12,610 Har noen spørsmål om hvordan vi gjør arrays 735 00:33:12,610 --> 00:33:17,391 eller hvor strukturen av en matrise virker? 736 00:33:17,391 --> 00:33:17,890 Yeah. 737 00:33:17,890 --> 00:33:18,806 >> PUBLIKUM: [uhørbart]? 738 00:33:18,806 --> 00:33:21,649 739 00:33:21,649 --> 00:33:22,690 ANDI PENG: Ja, akkurat. 740 00:33:22,690 --> 00:33:26,150 Så hvis du var å erklære og initial en matrise følgende metode, 741 00:33:26,150 --> 00:33:28,477 som er den andre veien, kan du bare la dem. 742 00:33:28,477 --> 00:33:30,310 Og datamaskinen vet automatisk at det 743 00:33:30,310 --> 00:33:33,950 må telle hvor mange elementer er i disse klammeparentes, atskilt 744 00:33:33,950 --> 00:33:34,930 med komma. 745 00:33:34,930 --> 00:33:37,517 >> Så her ser de 65, 87, 30. 746 00:33:37,517 --> 00:33:39,600 Slik at maskinen vet, oh, det er tre heltall. 747 00:33:39,600 --> 00:33:45,960 Jeg vet å skape en rekke navn temperatur med tre elementer i den. 748 00:33:45,960 --> 00:33:46,590 Godt spørsmål. 749 00:33:46,590 --> 00:33:47,090 Yeah. 750 00:33:47,090 --> 00:33:51,590 >> PUBLIKUM: Er det ikke mulig å opprette en matrise med ulike typer data 751 00:33:51,590 --> 00:33:53,021 som kan legges inn i det? 752 00:33:53,021 --> 00:33:56,746 For eksempel, med heltall [uhørbart]? 753 00:33:56,746 --> 00:33:59,120 ANDI PENG: Med henblikk i denne klassen, nei, akkurat nå. 754 00:33:59,120 --> 00:34:03,070 Når du oppretter en data strukturere som en matrise, 755 00:34:03,070 --> 00:34:04,990 du forteller datamaskin, hei, jeg trenger deg 756 00:34:04,990 --> 00:34:08,159 å bevilge så mye minne i harddisken min, 757 00:34:08,159 --> 00:34:10,690 med hver celle er en visst antall bits. 758 00:34:10,690 --> 00:34:13,429 >> Husk at vi har lært i uken null så forskjellig data 759 00:34:13,429 --> 00:34:15,300 typer har forskjellige størrelser? 760 00:34:15,300 --> 00:34:17,630 Slik at for eksempel en streng er et annet beløp 761 00:34:17,630 --> 00:34:20,719 plass enn en røye, som er en annen mengde plass 762 00:34:20,719 --> 00:34:21,830 fra et heltall. 763 00:34:21,830 --> 00:34:25,534 Og så hvis du ikke spesifiserer, og du mikse og matche hva slags variabler 764 00:34:25,534 --> 00:34:27,659 du har, datamaskinens kommer til å bli veldig forvirret. 765 00:34:27,659 --> 00:34:29,950 Og det er ikke til å kjenne hvor mye minne til å gi deg. 766 00:34:29,950 --> 00:34:32,480 Så for formål høyre nå, datamaskiner kan bare 767 00:34:32,480 --> 00:34:36,120 gjenkjenner en type av en matrise. 768 00:34:36,120 --> 00:34:37,940 Godt spørsmål. 769 00:34:37,940 --> 00:34:38,440 OK. 770 00:34:38,440 --> 00:34:45,179 771 00:34:45,179 --> 00:34:47,120 >> Så naturlig, den andre spørsmålet vi har 772 00:34:47,120 --> 00:34:50,760 er, vel, nå som vi har opprettet en matrise, og vi har satt alle disse tingene 773 00:34:50,760 --> 00:34:54,190 i matrisen, hvor er vi kommer til å være i stand til å få tilgang til det? 774 00:34:54,190 --> 00:34:59,710 Så typisk struktur som vi alltid tilgang til en matrise er vår herlige for loop. 775 00:34:59,710 --> 00:35:03,830 Jeg lover dere at vi vil være ser mye av denne karen her. 776 00:35:03,830 --> 00:35:06,470 >> I hovedsak, når du vil å skrive inn verdier i en matrise 777 00:35:06,470 --> 00:35:09,940 eller du vil ha tilgang til dem, beste måten å gjøre dette er en for loop, 778 00:35:09,940 --> 00:35:13,730 fordi i en for loop, du hvor mange ganger du er 779 00:35:13,730 --> 00:35:17,290 skal du ønsker å kjøre gjennom array, fordi du har en stopp utgave, ikke sant? 780 00:35:17,290 --> 00:35:19,680 Og hver gang du kjører gjennom, kan du få tilgang 781 00:35:19,680 --> 00:35:21,310 et annet element i matrisen. 782 00:35:21,310 --> 00:35:26,920 >> Og også, dette er en grunn til at vanligvis vi starter vår for løkker på 0 verdi, 783 00:35:26,920 --> 00:35:30,080 fordi når du åpner arrays, du kan få tilgang til null indeksen. 784 00:35:30,080 --> 00:35:32,070 Og så det paralleller veldig pent. 785 00:35:32,070 --> 00:35:35,295 Dere kan ha ønsket å skrive for int i lik 1. 786 00:35:35,295 --> 00:35:37,330 i er mindre enn eller lik tre. 787 00:35:37,330 --> 00:35:39,890 >> Men det ville ikke fungere helt som godt her, fordi du bare 788 00:35:39,890 --> 00:35:42,010 ha elementer av 0, 1, 2 og. 789 00:35:42,010 --> 00:35:45,815 Og så hvis du skulle starte inn i ved element 1, 2 og 3, 790 00:35:45,815 --> 00:35:48,440 du kommer til å ende opp med å løpe ut av grensene for din array, 791 00:35:48,440 --> 00:35:50,440 og dårlige ting kommer til å skje. 792 00:35:50,440 --> 00:35:54,480 >> Så jeg håper dere se naturlig overgang hvorfor i tidligere klasser 793 00:35:54,480 --> 00:35:58,560 vi lærte dere hvordan du skal kjøre og formatere en for loop slik at vi var. 794 00:35:58,560 --> 00:36:01,900 Det er fordi, nå har vi overført til matriser, 795 00:36:01,900 --> 00:36:06,760 Du kan se hvorfor de 0 låner seg veldig pent å få tilgang. 796 00:36:06,760 --> 00:36:09,880 >> Så måten vi gjør det er at-- jeg er bare å skrive den ut her for moro skyld 797 00:36:09,880 --> 00:36:10,830 med å skrive den ut. 798 00:36:10,830 --> 00:36:13,750 Men jeg har min plassholder, komma. 799 00:36:13,750 --> 00:36:15,645 Og selve aksess del som skjer. 800 00:36:15,645 --> 00:36:17,520 Navnet på matrisen het temperatur. 801 00:36:17,520 --> 00:36:21,570 Så det er temperatur og i-te element i gruppen. 802 00:36:21,570 --> 00:36:24,400 >> Så som for loop går gjennom, det kommer til å starte på 0. 803 00:36:24,400 --> 00:36:27,640 Det kommer til å skrive ut 0. indeks over denne matrisen. 804 00:36:27,640 --> 00:36:29,599 Så det kommer til å skrive ut ut det første elementet. 805 00:36:29,599 --> 00:36:31,431 Så det kommer til å skrive ut ut den andre. 806 00:36:31,431 --> 00:36:32,880 Og så skal vi bryte. 807 00:36:32,880 --> 00:36:36,718 Er alle klare på hvordan det skjer? 808 00:36:36,718 --> 00:36:37,217 Flott. 809 00:36:37,217 --> 00:36:43,230 810 00:36:43,230 --> 00:36:44,100 >> Greit. 811 00:36:44,100 --> 00:36:47,270 Så her har vi en måte å si, hvis vi ikke ønsker 812 00:36:47,270 --> 00:36:50,020 til hard-kode in-- meg som programmerer. 813 00:36:50,020 --> 00:36:53,320 Jeg hadde ikke lyst til å faktisk fysisk satt i hver enkelt element 814 00:36:53,320 --> 00:36:54,020 i denne tabellen. 815 00:36:54,020 --> 00:36:56,500 Hvis jeg ønsket å i stedet har brukeren oppgi verdier, 816 00:36:56,500 --> 00:36:58,100 hva er den beste måten å gjøre det? 817 00:36:58,100 --> 00:37:00,920 >> Vel, her har jeg laget denne herlige funksjon, 818 00:37:00,920 --> 00:37:03,560 der jeg kan erklære en matrise. 819 00:37:03,560 --> 00:37:06,210 Så int scores-- la oss bare si at vi ønsker å gjøre 820 00:37:06,210 --> 00:37:10,660 en matrise som holdt karakterene av alle 18 av studentene her i denne delen. 821 00:37:10,660 --> 00:37:12,670 Jeg tror vi har fått en bit mer enn 18 barn i dag. 822 00:37:12,670 --> 00:37:16,460 Men for eksempel skyld, la oss bare anta at vi hadde 18. 823 00:37:16,460 --> 00:37:21,580 Jeg ville skape en rekke navne score med typen int, fordi score, selvfølgelig, 824 00:37:21,580 --> 00:37:22,987 er tall. 825 00:37:22,987 --> 00:37:24,820 Og jeg kommer til å ha 18 i hakeparentes, 826 00:37:24,820 --> 00:37:29,900 fordi det er hvor mange studenter jeg ønsker å være i stand til å lagre score til. 827 00:37:29,900 --> 00:37:32,206 >> Og måten jeg vil befolke matrisen er at jeg hadde 828 00:37:32,206 --> 00:37:35,572 kjøre det gjennom en for loop, av Selvfølgelig, der 0 er min 0. indeksen. 829 00:37:35,572 --> 00:37:38,030 Og deretter med 18 blir min stoppe utgave, fordi det er 830 00:37:38,030 --> 00:37:39,690 18 elementer i tabellen. 831 00:37:39,690 --> 00:37:44,620 Og så kommer jeg til å gjøre printf, Enter scorer for student-- yada yada yada. 832 00:37:44,620 --> 00:37:51,171 >> Kan noen fortelle meg hvorfor her er jeg utskrift i pluss 1 og ikke jeg? 833 00:37:51,171 --> 00:37:52,920 Det er en slags triks spørsmålet, egentlig ikke. 834 00:37:52,920 --> 00:37:56,020 Det gjør faktisk ikke fysisk påvirke driften av koden. 835 00:37:56,020 --> 00:37:56,520 Yeah. 836 00:37:56,520 --> 00:37:57,909 >> PUBLIKUM: [uhørbart] 0? 837 00:37:57,909 --> 00:37:58,950 ANDI PENG: Ja, akkurat. 838 00:37:58,950 --> 00:38:02,620 Det er litt vanskelig å si, hei, du er den 0. student i denne klassen. 839 00:38:02,620 --> 00:38:03,780 Det er litt rart. 840 00:38:03,780 --> 00:38:08,340 Så vi, som mennesker, har egentlig ikke liker å tenke på hvordan datamaskiner tror. 841 00:38:08,340 --> 00:38:10,930 Så selv om i datamaskin, er det lagring av verdier 842 00:38:10,930 --> 00:38:13,310 i 0-th indeksen, når vi er mennesker, vi gjør egentlig ikke 843 00:38:13,310 --> 00:38:15,520 liker å referere til oss som null. 844 00:38:15,520 --> 00:38:18,119 Så når jeg bare skrive det, Jeg kommer til å skrive ut og legge 845 00:38:18,119 --> 00:38:19,410 En bare for ordens skyld. 846 00:38:19,410 --> 00:38:22,447 Så når jeg skriver ut, kommer jeg til å være kunne skrive ut studenter 1 til 18. 847 00:38:22,447 --> 00:38:24,530 Det spiller egentlig ikke påvirke driften av koden 848 00:38:24,530 --> 00:38:27,110 på noen måte, slik jeg skriver ut. 849 00:38:27,110 --> 00:38:30,380 >> Men vær forsiktig når du er faktisk tilgang til matrisen. 850 00:38:30,380 --> 00:38:32,780 Når du ser resultatet I, merke til her er jeg faktisk 851 00:38:32,780 --> 00:38:38,200 tilgang til den 0. indeksen og ikke en pluss 0-- eller 1 pluss 1, 852 00:38:38,200 --> 00:38:45,530 i dette tilfellet, slik at indeksen at det er faktisk klart. 853 00:38:45,530 --> 00:38:48,870 Er alle slags OK på hvordan dette går gjennom 854 00:38:48,870 --> 00:38:51,470 og med hver indeks er jeg å sette en verdi i matrisen 855 00:38:51,470 --> 00:38:55,340 og skape en matrise med 18 tall at brukeren skal innspill? 856 00:38:55,340 --> 00:38:58,780 857 00:38:58,780 --> 00:38:59,821 OK. 858 00:38:59,821 --> 00:39:00,321 Kjølig. 859 00:39:00,321 --> 00:39:05,380 860 00:39:05,380 --> 00:39:07,400 >> OK. 861 00:39:07,400 --> 00:39:12,220 Vi beveger oss nå inn i noe som er ganske relevant for dette stykket satt også. 862 00:39:12,220 --> 00:39:15,020 Jeg vet i foredrag, David-- sorry, hadde du et spørsmål? 863 00:39:15,020 --> 00:39:16,840 >> PUBLIKUM: Kan du forstørre det? 864 00:39:16,840 --> 00:39:18,080 >> ANDI PENG: Ja, så jeg prøvde. 865 00:39:18,080 --> 00:39:18,788 Men jeg vet ikke. 866 00:39:18,788 --> 00:39:21,437 Av en eller annen grunn, denne versjon av PowerPoint 867 00:39:21,437 --> 00:39:23,270 er egentlig ikke fungerer godt med skjermen. 868 00:39:23,270 --> 00:39:25,260 Så vi bare skal å holde det slik. 869 00:39:25,260 --> 00:39:27,280 Alle disse vil bli lastet opp på nettet. 870 00:39:27,280 --> 00:39:28,218 Sorry, folkens. 871 00:39:28,218 --> 00:39:30,090 Yeah. 872 00:39:30,090 --> 00:39:30,980 OK. 873 00:39:30,980 --> 00:39:35,530 >> Så vi kan også ha strenger. 874 00:39:35,530 --> 00:39:39,320 Så hvis dere faktisk notice-- jeg vet Rob gikk over dette i at foredraget 875 00:39:39,320 --> 00:39:43,652 at han did-- en streng er faktisk bare en rekke tegn, 876 00:39:43,652 --> 00:39:44,860 hvis du tenker på det, ikke sant? 877 00:39:44,860 --> 00:39:47,500 En streng er et navn eller en setning eller et ord, ikke sant? 878 00:39:47,500 --> 00:39:52,975 >> Hvis jeg skulle lage en streng som heter Andi-- bare navnet mitt, A-N-D-I. 879 00:39:52,975 --> 00:39:55,460 Du tenker på det som bare en variabel. 880 00:39:55,460 --> 00:39:58,630 Men faktisk, det er brutt ned til bare en rekke tegn. 881 00:39:58,630 --> 00:40:01,910 Så det har en karakter et som er lagret i en matrise verdi. 882 00:40:01,910 --> 00:40:05,420 Det fikk en karakter av n lagret i andre indeks og så videre og så videre. 883 00:40:05,420 --> 00:40:08,660 >> Så på en slik måte, vi faktisk har denne typen 884 00:40:08,660 --> 00:40:10,970 av struktur satt i plassere for våre strenger. 885 00:40:10,970 --> 00:40:14,660 Så her, hvis jeg skulle legge inn Ordet "spise" - så streng ord lik 886 00:40:14,660 --> 00:40:15,540 får streng. 887 00:40:15,540 --> 00:40:19,260 Hvis jeg skulle skrive ordet "spise", som er fysisk den måten at datamaskinen min 888 00:40:19,260 --> 00:40:21,870 lagrer denne strengen i min hukommelse. 889 00:40:21,870 --> 00:40:27,140 >> Og hvis jeg ønsket å kjøre gjennom det og print som out-- så for inn i 890 00:40:27,140 --> 00:40:30,890 lik null, husk, i foredrag, vi dekket noe som heter strlen, 891 00:40:30,890 --> 00:40:32,990 eller lengden av strengen. 892 00:40:32,990 --> 00:40:36,520 Fordi jeg gjør faktisk ikke vet hvor stor matrise er 893 00:40:36,520 --> 00:40:38,210 av hva brukerens inputting-- 894 00:40:38,210 --> 00:40:40,370 >> For eksempel, matet jeg ordet "spiser", og jeg vet 895 00:40:40,370 --> 00:40:41,870 det er tre tegn, ikke sant? 896 00:40:41,870 --> 00:40:44,700 Så jeg kunne sette i et tre der og alt vil være i orden. 897 00:40:44,700 --> 00:40:49,290 Men hvis din brukerundersøkelser noe at det er et ulikt antall verdier, 898 00:40:49,290 --> 00:40:52,760 du kommer til å ikke være i stand til å virkelig vet at når du programmere koden din. 899 00:40:52,760 --> 00:40:56,040 >> Så måten vi håndterer testtilfeller som det er at vi har noe 900 00:40:56,040 --> 00:41:00,070 kalt strlen, som er bare en funksjon som forteller deg hvor lenge en streng er. 901 00:41:00,070 --> 00:41:02,080 Så strlen av ordet. 902 00:41:02,080 --> 00:41:03,470 Mitt ord er å spise. 903 00:41:03,470 --> 00:41:05,990 n er lik strlen av ordet. 904 00:41:05,990 --> 00:41:08,930 Kan noen fortelle meg hva som verdien faktisk er der? 905 00:41:08,930 --> 00:41:12,550 Hva gjør n representerer retten Nå, i dette eksempel, hvis jeg hadde spise? 906 00:41:12,550 --> 00:41:13,530 >> PUBLIKUM: 3. 907 00:41:13,530 --> 00:41:14,520 >> ANDI PENG: 3, akkurat. 908 00:41:14,520 --> 00:41:18,820 Så vi har for int i lik null, lik n tre, egentlig. 909 00:41:18,820 --> 00:41:22,355 Og jeg kommer til å kjøre før det er mindre enn 3i ++. 910 00:41:22,355 --> 00:41:24,980 Og det kommer til å egentlig gå gjennom og gjøre det samme. 911 00:41:24,980 --> 00:41:26,979 Det kommer til å skrive ut hver verdi og gi deg 912 00:41:26,979 --> 00:41:29,700 E-A-T. Det er bare betegner en annen måte å skrive den. 913 00:41:29,700 --> 00:41:31,170 Det kommer til å være svært nyttig. 914 00:41:31,170 --> 00:41:31,670 Yeah. 915 00:41:31,670 --> 00:41:35,174 PUBLIKUM: Hva er fordelene med å sette n lik strlen ord inne som 916 00:41:35,174 --> 00:41:36,894 for loop [uhørbart]? 917 00:41:36,894 --> 00:41:37,560 ANDI PENG: Yeah. 918 00:41:37,560 --> 00:41:44,880 Så hvis jeg skulle to-- si, for eksempel, hvis jeg skulle gjøre det og deretter 919 00:41:44,880 --> 00:41:51,935 do-- oop-- at i min kode, det ville faktisk være å gjøre som det samme. 920 00:41:51,935 --> 00:41:55,060 Men måten at David forklart det under forelesning, hvis noen av dere 921 00:41:55,060 --> 00:41:57,854 huske, var at, som mennesker, som programmerere, 922 00:41:57,854 --> 00:42:00,270 vi virkelig prøver å programmere vår koden slik at vår datamaskin har 923 00:42:00,270 --> 00:42:04,070 å jobbe så minimal som mulig, slik at at koden vår er svært effektiv. 924 00:42:04,070 --> 00:42:06,850 >> Så hvis jeg hadde det der, hva ville skje gjennom min for loop 925 00:42:06,850 --> 00:42:10,790 er at jeg vil først erklære en variabel kalt jeg kommer til å være 0. 926 00:42:10,790 --> 00:42:13,350 Jeg skal sjekke, oh, hva er de strlen av ordet? 927 00:42:13,350 --> 00:42:15,000 Oh, er strlen tre. 928 00:42:15,000 --> 00:42:16,191 Så er jeg mindre enn tre? 929 00:42:16,191 --> 00:42:16,690 Ja det er det. 930 00:42:16,690 --> 00:42:17,870 Jeg kommer til å kjøre. 931 00:42:17,870 --> 00:42:21,130 >> Og så den andre gangen tilbake rundt løkken, jeg kommer til å øke i. 932 00:42:21,130 --> 00:42:22,550 Jeg kommer til å være ett. 933 00:42:22,550 --> 00:42:25,600 Og jeg kommer til å sjekke, oh, men hva er strlen av ordet? 934 00:42:25,600 --> 00:42:26,839 Å, det er tre. 935 00:42:26,839 --> 00:42:29,880 Og gjør det synes slags sløsing, hver gang du kjører gjennom løkken, 936 00:42:29,880 --> 00:42:33,340 å sjekke funksjonen selv om strlen av ordet 937 00:42:33,340 --> 00:42:35,490 endres aldri egentlig? 938 00:42:35,490 --> 00:42:38,590 >> Så det er ekstra strøm til en datamaskin. 939 00:42:38,590 --> 00:42:42,180 Når du begynner å snakke om ting som er milliarder og milliarder 940 00:42:42,180 --> 00:42:44,431 og milliarder av steder lang, tenk datamaskinen 941 00:42:44,431 --> 00:42:47,430 å måtte fysisk gå gjennom og sjekke alle at hver eneste gang. 942 00:42:47,430 --> 00:42:53,170 Det er derfor, for å gjøre bare av hensyn til effektivitet, 943 00:42:53,170 --> 00:42:57,620 vi har en tendens til å bare gjøre dette, fordi denne måten vi er bare 944 00:42:57,620 --> 00:42:59,850 kalle funksjonen en gang i begynnelsen, 945 00:42:59,850 --> 00:43:01,766 og at hver gang den går gjennom det som skjer 946 00:43:01,766 --> 00:43:03,789 for å lagre verdien 3 der, at du ikke 947 00:43:03,789 --> 00:43:05,330 må kontinuerlig sjekke hver gang. 948 00:43:05,330 --> 00:43:05,743 Yeah. 949 00:43:05,743 --> 00:43:06,409 >> PUBLIKUM: Sorry. 950 00:43:06,409 --> 00:43:09,070 Bare [uhørbart]. 951 00:43:09,070 --> 00:43:13,985 Kunne du int n er lik strlen og sette at over utsiden av for loop 952 00:43:13,985 --> 00:43:15,364 også? 953 00:43:15,364 --> 00:43:16,030 ANDI PENG: Yeah. 954 00:43:16,030 --> 00:43:17,100 Du kan gjøre det, absolutt. 955 00:43:17,100 --> 00:43:19,970 Grunnen til at vi har det her er fordi måten en for løkke verk 956 00:43:19,970 --> 00:43:23,500 er at det kalles en lokal variabel i den forstand 957 00:43:23,500 --> 00:43:26,150 at alt du er å skape inne i for loop 958 00:43:26,150 --> 00:43:27,890 kun eksisterer inne i for loop. 959 00:43:27,890 --> 00:43:31,530 >> Så variabelen jeg bare eksisterer i disse parentes. 960 00:43:31,530 --> 00:43:35,260 Og her variablene n også bare finnes i de parentes. 961 00:43:35,260 --> 00:43:39,350 Så hvis du skulle bruke strlen av ordet flere ganger der nede, 962 00:43:39,350 --> 00:43:42,230 absolutt den beste måten å gjøre det ville være å erklære den opp toppen 963 00:43:42,230 --> 00:43:43,563 slik at du ikke trenger å gjøre det en gang. 964 00:43:43,563 --> 00:43:45,420 Yeah. 965 00:43:45,420 --> 00:43:47,670 PUBLIKUM: Hvorfor har du en ny linje etter prosent 966 00:43:47,670 --> 00:43:51,300 se om du ønsker å sette alle bokstavene ved siden av det skille? 967 00:43:51,300 --> 00:43:54,140 >> ANDI PENG: Åh, jeg ønsket å skrive dem alle på hver linje. 968 00:43:54,140 --> 00:43:54,890 Det spiller ingen rolle. 969 00:43:54,890 --> 00:43:55,890 Ja, det er en formatering. 970 00:43:55,890 --> 00:43:57,181 Det er et godt spørsmål, men. 971 00:43:57,181 --> 00:43:59,360 Ja, hvis jeg ønsket å skrive ut alt på bare en linje, 972 00:43:59,360 --> 00:44:02,731 Jeg ville ikke ha bindestrek i. 973 00:44:02,731 --> 00:44:03,230 OK. 974 00:44:03,230 --> 00:44:06,880 Alle gode? 975 00:44:06,880 --> 00:44:07,500 OK. 976 00:44:07,500 --> 00:44:08,000 Kjølig. 977 00:44:08,000 --> 00:44:12,080 978 00:44:12,080 --> 00:44:14,750 >> Så jeg tror jeg har snakket nok. 979 00:44:14,750 --> 00:44:20,040 Dere tur til å kjøre gjennom kode og fortelle meg hva som er galt her. 980 00:44:20,040 --> 00:44:21,560 Hvor er feilen? 981 00:44:21,560 --> 00:44:26,920 Så som du kan se, har jeg erklært nye utvalget av type string heter klasse. 982 00:44:26,920 --> 00:44:30,220 Og jeg har matet Sam, Jess og Kim inn i den. 983 00:44:30,220 --> 00:44:33,400 Og jeg forsøker å skrive ut alle elementene i matrisen. 984 00:44:33,400 --> 00:44:36,796 Kan noen fortelle meg hvorfor dette kommer til å gi meg problemer? 985 00:44:36,796 --> 00:44:39,320 Jeg skal gi dere 10 sekunder på å tenke på dette. 986 00:44:39,320 --> 00:44:55,490 987 00:44:55,490 --> 00:44:56,619 >> OK. 988 00:44:56,619 --> 00:44:57,118 Yeah? 989 00:44:57,118 --> 00:45:01,972 >> PUBLIKUM: Er venstre sentrum lik 3 eller [uhørbart]? 990 00:45:01,972 --> 00:45:02,680 ANDI PENG: Høyre. 991 00:45:02,680 --> 00:45:06,784 Så hvor mange ganger dette er faktisk kommer til å kjøre gjennom dette loop? 992 00:45:06,784 --> 00:45:07,620 >> PUBLIKUM: Four. 993 00:45:07,620 --> 00:45:08,070 >> ANDI PENG: Nettopp. 994 00:45:08,070 --> 00:45:09,445 Det kommer til gjennom fire ganger. 995 00:45:09,445 --> 00:45:12,250 Det kommer til å kjøre gjennom på 0, 1, 2, og 3, 996 00:45:12,250 --> 00:45:15,200 fordi deres element er jeg er mindre enn eller lik tre. 997 00:45:15,200 --> 00:45:16,960 Det kommer ikke til å stoppe når det er to. 998 00:45:16,960 --> 00:45:18,800 Det kommer til å holde kommer til den treffer tre. 999 00:45:18,800 --> 00:45:21,720 Og som vi vet, er det bare tre elementer i vår faktiske utvalg. 1000 00:45:21,720 --> 00:45:27,260 >> Hvis vi prøver å få tilgang til den fjerde element eller indeksen av tre, 1001 00:45:27,260 --> 00:45:30,357 du kommer til å treffe et sted i minnet som ikke eksisterer. 1002 00:45:30,357 --> 00:45:31,690 Den kalles null terminator. 1003 00:45:31,690 --> 00:45:32,856 Ingenting kommer til å være der. 1004 00:45:32,856 --> 00:45:35,324 Datamaskinen er ikke til å være veldig fornøyd med deg. 1005 00:45:35,324 --> 00:45:36,170 Yeah. 1006 00:45:36,170 --> 00:45:38,430 Har noen spørsmål på hvorfor det skjedde? 1007 00:45:38,430 --> 00:45:39,679 Det er et felles område for å unngå. 1008 00:45:39,679 --> 00:45:40,712 Yeah. 1009 00:45:40,712 --> 00:45:45,777 >> PUBLIKUM: Betyr ikke det første skyver også ha en streng med 2? 1010 00:45:45,777 --> 00:45:46,360 ANDI PENG: No. 1011 00:45:46,360 --> 00:45:49,610 Så egentlig, når du gjør en matrise, 1012 00:45:49,610 --> 00:45:51,540 at braketten til høyre der, som number-- alle 1013 00:45:51,540 --> 00:45:53,480 det forteller deg er hvordan mange elementer jeg har. 1014 00:45:53,480 --> 00:45:55,840 Det er faktisk ikke fortelle meg indeksene av noe. 1015 00:45:55,840 --> 00:45:58,760 Så i dette tilfellet, jeg vet jeg vil ha å skrive med tre steder, 1016 00:45:58,760 --> 00:46:02,690 med tre fysiske steder å hold hva jeg ønsker å holde. 1017 00:46:02,690 --> 00:46:04,510 Så det er derfor det nummer tre er der. 1018 00:46:04,510 --> 00:46:06,560 Men hvis jeg ville å faktisk få tilgang til det, 1019 00:46:06,560 --> 00:46:11,220 hvis jeg ønsket å si, printf klasse brakett nummer, deretter 1020 00:46:11,220 --> 00:46:14,560 du kommer til å faktisk sette den fysiske indeksen der. 1021 00:46:14,560 --> 00:46:16,330 Ja, godt spørsmål. 1022 00:46:16,330 --> 00:46:20,065 >> PUBLIKUM: Så er den fysiske indeksen skulle være [uhørbart]? 1023 00:46:20,065 --> 00:46:20,940 ANDI PENG: Jeg beklager. 1024 00:46:20,940 --> 00:46:21,500 Kan du snakke opp litt? 1025 00:46:21,500 --> 00:46:24,208 >> PUBLIKUM: Så er det fysiske index [Uhørbart] hver av boksene? 1026 00:46:24,208 --> 00:46:25,260 [Uhørbart]? 1027 00:46:25,260 --> 00:46:26,040 >> ANDI PENG: Yeah. 1028 00:46:26,040 --> 00:46:28,970 Så jeg kommer til å gå tilbake til høyre her. 1029 00:46:28,970 --> 00:46:31,120 Tenke på akkurat her. 1030 00:46:31,120 --> 00:46:32,820 Vi har en rekke størrelse 3. 1031 00:46:32,820 --> 00:46:35,540 Det er tre steder, som, fysiske plassholdere i her. 1032 00:46:35,540 --> 00:46:37,620 Men de er oppkalt 0, 1 og 2. 1033 00:46:37,620 --> 00:46:40,700 Så hvis jeg ønsket å få tilgang til dem, den måten at jeg tilgang til dem 1034 00:46:40,700 --> 00:46:43,480 er printf av hva jeg ville her. 1035 00:46:43,480 --> 00:46:45,485 Du må skrive ut ut navnet på det, 1036 00:46:45,485 --> 00:46:47,610 fordi da datamaskinen vet, oh, jeg trenger å se 1037 00:46:47,610 --> 00:46:51,391 i denne matrisen for den 0. indeksen. 1038 00:46:51,391 --> 00:46:51,890 Yeah. 1039 00:46:51,890 --> 00:46:53,306 Men størrelsen på den ikke endrer seg. 1040 00:46:53,306 --> 00:46:55,492 Størrelsen er 3, uavhengig hvordan du merke dem. 1041 00:46:55,492 --> 00:46:58,321 1042 00:46:58,321 --> 00:46:58,820 OK. 1043 00:46:58,820 --> 00:47:01,387 Alle gode? 1044 00:47:01,387 --> 00:47:02,970 PUBLIKUM: Så hver gang jeg [uhørbart]? 1045 00:47:02,970 --> 00:47:06,357 1046 00:47:06,357 --> 00:47:06,940 ANDI PENG: OK. 1047 00:47:06,940 --> 00:47:13,270 Så i dette tilfellet gjør vi egentlig ikke komme inn i det akkurat nå i kurset. 1048 00:47:13,270 --> 00:47:16,760 Men vet at en string-- som jeg sagt før, en streng er egentlig 1049 00:47:16,760 --> 00:47:18,440 en rekke tegn. 1050 00:47:18,440 --> 00:47:21,430 Så hvis jeg oppretter en matrise av strenger, jeg slags 1051 00:47:21,430 --> 00:47:24,430 har en rekke utvalg tegn, ikke sant? 1052 00:47:24,430 --> 00:47:27,720 >> Så i dette tilfelle, fordi jeg har en rekke strenger, 1053 00:47:27,720 --> 00:47:31,340 hvis du skulle legge inn en veldig lang ord, som fortsatt tar opp bare én plass, 1054 00:47:31,340 --> 00:47:33,230 fordi det er den ene strengen. 1055 00:47:33,230 --> 00:47:37,492 Men hvis du skulle tenke på tegnene på at matrisen, 1056 00:47:37,492 --> 00:47:40,450 så det tar opp mye mer tegn enn noen av de andre ordene 1057 00:47:40,450 --> 00:47:41,372 er. 1058 00:47:41,372 --> 00:47:42,830 Ikke veldig viktig for akkurat nå. 1059 00:47:42,830 --> 00:47:44,921 Men det er bare generelt hvordan det fungerer. 1060 00:47:44,921 --> 00:47:49,750 1061 00:47:49,750 --> 00:47:50,560 >> OK. 1062 00:47:50,560 --> 00:47:55,840 Så dette er noe jeg skal la deg gjøre mye i løpet av semesteret. 1063 00:47:55,840 --> 00:47:57,500 Jeg trenger å hvile stemmen min. 1064 00:47:57,500 --> 00:47:59,530 Dere trenger å stimulere dere selv. 1065 00:47:59,530 --> 00:48:02,300 Mange av dere sannsynligvis må sove akkurat nå. 1066 00:48:02,300 --> 00:48:05,960 Jeg taster inn tilfeldige problemer hvor vi som en klasse eller du 1067 00:48:05,960 --> 00:48:09,480 med en partner ved siden av deg kommer å tilbringe et par minutter å diskutere 1068 00:48:09,480 --> 00:48:14,980 om hvordan vi skulle gå om å løse eller lage et program som dette. 1069 00:48:14,980 --> 00:48:17,100 >> Så akkurat nå, vi ønsker for å lage en program-- 1070 00:48:17,100 --> 00:48:19,560 vi kommer til å kalle det upper.c-- at konvertitter 1071 00:48:19,560 --> 00:48:24,787 en små ord til en overklasse string-- store bokstaver, beklager. 1072 00:48:24,787 --> 00:48:26,370 Ord i strenger, beklager, er synonymt. 1073 00:48:26,370 --> 00:48:28,370 Jeg kommer til å endre dem å bety det samme. 1074 00:48:28,370 --> 00:48:32,270 1075 00:48:32,270 --> 00:48:33,499 >> Yeah. 1076 00:48:33,499 --> 00:48:34,540 Ta et par minutter. 1077 00:48:34,540 --> 00:48:37,130 Det trenger ikke å være skrevet på alle språk. 1078 00:48:37,130 --> 00:48:39,890 Bare i pseudokode eller logisk hvordan vi ville selv 1079 00:48:39,890 --> 00:48:42,083 gå om du gjør et slikt problem. 1080 00:48:42,083 --> 00:48:42,583 Yeah. 1081 00:48:42,583 --> 00:48:49,881 1082 00:48:49,881 --> 00:48:52,780 >> [SIDE SAMTALE] 1083 00:48:52,780 --> 00:49:18,680 1084 00:49:18,680 --> 00:49:22,130 >> Jeg la også merke til at dere can-- Jeg slags ser allerede programmet. 1085 00:49:22,130 --> 00:49:24,600 Jeg antar at min mangel på programleder modus er et problem. 1086 00:49:24,600 --> 00:49:27,410 Men det er greit. 1087 00:49:27,410 --> 00:49:30,410 >> [SIDE SAMTALE] 1088 00:49:30,410 --> 00:50:03,589 1089 00:50:03,589 --> 00:50:04,380 Ja, takk, folkens. 1090 00:50:04,380 --> 00:50:05,400 Komme til å få godteri. 1091 00:50:05,400 --> 00:50:06,372 Komme til å få godteri. 1092 00:50:06,372 --> 00:50:07,698 >> PUBLIKUM: Ja! 1093 00:50:07,698 --> 00:50:09,958 >> [SIDE SAMTALE] 1094 00:50:09,958 --> 00:50:16,101 1095 00:50:16,101 --> 00:50:18,100 ANDI PENG: Også, ja, Jeg skal begynne å kaste godteri 1096 00:50:18,100 --> 00:50:20,280 på folk som ikke svarer på spørsmål. 1097 00:50:20,280 --> 00:50:22,260 Så du bør alle svar på spørsmål. 1098 00:50:22,260 --> 00:50:24,895 Eller jeg antar at folk som svarer på spørsmål. 1099 00:50:24,895 --> 00:50:26,070 Ja, omvendt. 1100 00:50:26,070 --> 00:50:28,570 >> [SIDE SAMTALE] 1101 00:50:28,570 --> 00:51:13,399 1102 00:51:13,399 --> 00:51:14,274 PUBLIKUM: [uhørbart] 1103 00:51:14,274 --> 00:51:17,300 1104 00:51:17,300 --> 00:51:18,340 >> ANDI PENG: Yeah. 1105 00:51:18,340 --> 00:51:19,340 Yeah. 1106 00:51:19,340 --> 00:51:22,840 >> [SIDE SAMTALE] 1107 00:51:22,840 --> 00:51:40,700 1108 00:51:40,700 --> 00:51:41,590 >> Greit, folkens. 1109 00:51:41,590 --> 00:51:44,731 Ta ut, 10 flere sekunder. 1110 00:51:44,731 --> 00:51:48,210 >> [SIDE SAMTALE] 1111 00:51:48,210 --> 00:52:10,600 1112 00:52:10,600 --> 00:52:11,750 >> OK, folkens. 1113 00:52:11,750 --> 00:52:14,920 Så før vi begynner å prøve å faktisk fysisk skrive kode, 1114 00:52:14,920 --> 00:52:20,650 en god vane å utvikle er at vi vil først slags grunn 1115 00:52:20,650 --> 00:52:22,737 logisk hvordan vi ville gjøre det. 1116 00:52:22,737 --> 00:52:24,570 Du ønsker å være sikker, før du fysisk 1117 00:52:24,570 --> 00:52:27,210 begynner å prøve å kode i Mario, at du gjør 1118 00:52:27,210 --> 00:52:28,870 Kontroller at du har din pseudokode. 1119 00:52:28,870 --> 00:52:31,235 Som tar deg gjennom det du trenger for å lage så 1120 00:52:31,235 --> 00:52:33,360 at når du fysisk skrive programmet senere, 1121 00:52:33,360 --> 00:52:36,640 du er bedre i stand til å fange feil i din kode og sånt. 1122 00:52:36,640 --> 00:52:40,460 >> Så vi kommer til å bare begynne by-- på engelsk, i pseudokode, 1123 00:52:40,460 --> 00:52:43,320 er det noen som ønsker å gi meg en generisk forklaring 1124 00:52:43,320 --> 00:52:46,250 om hvordan vi skulle gå om du gjør dette? 1125 00:52:46,250 --> 00:52:48,102 Yeah. 1126 00:52:48,102 --> 00:52:49,664 >> PUBLIKUM: [uhørlig]. 1127 00:52:49,664 --> 00:52:50,830 ANDI PENG: Jada, ingen bekymringer. 1128 00:52:50,830 --> 00:52:57,233 PUBLIKUM: Kan du be den eller be noen for å få streng 1-- yeah, streng, 1129 00:52:57,233 --> 00:52:58,160 og så-- 1130 00:52:58,160 --> 00:52:59,826 >> ANDI PENG: Ja, så dette er en god start. 1131 00:52:59,826 --> 00:53:01,972 Jeg skal begynne å skrive, beklager, som du snakker. 1132 00:53:01,972 --> 00:53:02,471 So-- 1133 00:53:02,471 --> 00:53:05,698 >> PUBLIKUM: --Det små bokstaver tallene er høyere, ikke sant? 1134 00:53:05,698 --> 00:53:08,519 Eller små bokstaver har høye tall? 1135 00:53:08,519 --> 00:53:09,310 ANDI PENG: Nettopp. 1136 00:53:09,310 --> 00:53:16,156 PUBLIKUM: Så da vi trekker 32 fra hva [uhørbart]. 1137 00:53:16,156 --> 00:53:28,600 1138 00:53:28,600 --> 00:53:29,870 >> ANDI PENG: Great. 1139 00:53:29,870 --> 00:53:35,020 Så vi slags har en generell følelse av hvordan jobbe med dette problemet. 1140 00:53:35,020 --> 00:53:40,060 Å vite at vi har på en måte lært den fysiske måten strenger 1141 00:53:40,060 --> 00:53:43,320 er lagret i minnet, hva gjør du allerede 1142 00:53:43,320 --> 00:53:45,920 vet at du kommer til å sannsynligvis må skrive inn koden 1143 00:53:45,920 --> 00:53:48,288 for å gå gjennom streng? 1144 00:53:48,288 --> 00:53:49,259 >> PUBLIKUM: For loop. 1145 00:53:49,259 --> 00:53:50,550 ANDI PENG: A for loop, akkurat. 1146 00:53:50,550 --> 00:53:56,540 1147 00:53:56,540 --> 00:53:57,220 Flott. 1148 00:53:57,220 --> 00:54:00,539 Så vi slags har en generisk pseudokode nedskrevet 1149 00:54:00,539 --> 00:54:02,330 den slags gir du notater på hvordan du 1150 00:54:02,330 --> 00:54:03,900 ville flytte om å løse problemet. 1151 00:54:03,900 --> 00:54:06,150 Nå som du har dette, du kan referere til den for senere 1152 00:54:06,150 --> 00:54:08,233 på når du prøver å faktisk skrive koden din. 1153 00:54:08,233 --> 00:54:10,240 Så vi kan faktisk gå her. 1154 00:54:10,240 --> 00:54:25,130 Og jeg har en funksjon som heter upper.c-- der det er-- av bare en blank mal 1155 00:54:25,130 --> 00:54:28,510 akkurat nå som dere kommer til å hjelpe meg å finne ut om hvordan du skriver 1156 00:54:28,510 --> 00:54:30,430 denne linjen av code-- ikke kodelinje. 1157 00:54:30,430 --> 00:54:32,890 Det vil være flere linjer med kode. 1158 00:54:32,890 --> 00:54:35,710 >> Når du starter noen form blank PSet, hva er 1159 00:54:35,710 --> 00:54:37,418 det første jeg trenger å huske å gjøre? 1160 00:54:37,418 --> 00:54:39,290 >> PUBLIKUM: [uhørlig]. 1161 00:54:39,290 --> 00:54:41,000 >> ANDI PENG: Great Jepp. 1162 00:54:41,000 --> 00:54:41,500 Inkluder. 1163 00:54:41,500 --> 00:54:44,850 1164 00:54:44,850 --> 00:54:47,130 stdio.h. 1165 00:54:47,130 --> 00:54:49,640 Ofte er dette en av de mest enkle feil folk 1166 00:54:49,640 --> 00:54:51,598 vil gjøre når de er skriver, er at de vil 1167 00:54:51,598 --> 00:54:54,180 Husk å inkludere en viktig bibliotek de trenger. 1168 00:54:54,180 --> 00:54:57,689 Så hvis det er kontortiden, og du er like, Jeg vet ikke hvorfor min kode ikke fungerer. 1169 00:54:57,689 --> 00:54:59,230 Kan du fortelle meg hvorfor det ikke fungerer? 1170 00:54:59,230 --> 00:55:00,730 Vi kommer til å si gjorde du #include? 1171 00:55:00,730 --> 00:55:02,520 Du bør #include det. 1172 00:55:02,520 --> 00:55:03,270 OK. 1173 00:55:03,270 --> 00:55:07,230 >> Så vi har fått standard I / O her. 1174 00:55:07,230 --> 00:55:10,740 Er at den eneste biblioteket vi kommer til å trenge her? 1175 00:55:10,740 --> 00:55:12,681 Hva annet skal vi gjøre? 1176 00:55:12,681 --> 00:55:13,180 Unnskyld. 1177 00:55:13,180 --> 00:55:14,562 Noen bare skrike det ut? 1178 00:55:14,562 --> 00:55:15,666 >> PUBLIKUM: [uhørlig]. 1179 00:55:15,666 --> 00:55:16,666 ANDI PENG: Det du går. 1180 00:55:16,666 --> 00:55:20,320 1181 00:55:20,320 --> 00:55:21,440 OK. 1182 00:55:21,440 --> 00:55:26,070 Og hvordan går jeg om å starte noen form av funksjon, noen form for hovedfunksjon 1183 00:55:26,070 --> 00:55:28,760 innenfor vårt program? 1184 00:55:28,760 --> 00:55:30,020 Int main. 1185 00:55:30,020 --> 00:55:34,531 1186 00:55:34,531 --> 00:55:35,030 OK. 1187 00:55:35,030 --> 00:55:35,970 Hva satt jeg inne her? 1188 00:55:35,970 --> 00:55:37,640 Hva er det første du vil gjøre? 1189 00:55:37,640 --> 00:55:39,910 Hvis vi ønsker å få en strengen fra brukeren, 1190 00:55:39,910 --> 00:55:43,870 hva skal vi ha å gjøre på denne første linjen? 1191 00:55:43,870 --> 00:55:46,120 Sorry, dere bare føler fri til å snakke opp og høyt. 1192 00:55:46,120 --> 00:55:47,123 Bare rope ut uansett. 1193 00:55:47,123 --> 00:55:48,772 >> PUBLIKUM: Be brukeren? 1194 00:55:48,772 --> 00:55:49,980 ANDI PENG: Hvordan gjør vi det? 1195 00:55:49,980 --> 00:55:51,873 Ask-- jeg kommer til å skrive "spør brukeren"? 1196 00:55:51,873 --> 00:55:52,600 >> PUBLIKUM: printf. 1197 00:55:52,600 --> 00:55:54,341 >> ANDI PENG: OK. 1198 00:55:54,341 --> 00:55:54,840 Printf. 1199 00:55:54,840 --> 00:55:57,372 Hva ønsker jeg å printf? 1200 00:55:57,372 --> 00:55:58,776 >> PUBLIKUM: Skriv inn noe. 1201 00:55:58,776 --> 00:56:02,760 1202 00:56:02,760 --> 00:56:03,840 >> ANDI PENG: Sånn? 1203 00:56:03,840 --> 00:56:05,430 Guys, late som om jeg er en datamaskin. 1204 00:56:05,430 --> 00:56:08,475 Fysisk fortelle meg hvert skritt at jeg må skrive inn her? 1205 00:56:08,475 --> 00:56:09,600 Gjør jeg noe galt? 1206 00:56:09,600 --> 00:56:10,743 Bør jeg har skrevet noe? 1207 00:56:10,743 --> 00:56:11,690 >> PUBLIKUM: Du trenger anførselstegn. 1208 00:56:11,690 --> 00:56:12,380 >> ANDI PENG: Jeg trenger sitater? 1209 00:56:12,380 --> 00:56:12,880 OK. 1210 00:56:12,880 --> 00:56:15,520 1211 00:56:15,520 --> 00:56:16,297 OK. 1212 00:56:16,297 --> 00:56:17,698 >> PUBLIKUM: Og så ny linje. 1213 00:56:17,698 --> 00:56:21,434 1214 00:56:21,434 --> 00:56:22,465 Semikolon. 1215 00:56:22,465 --> 00:56:23,340 ANDI PENG: Semikolon? 1216 00:56:23,340 --> 00:56:24,060 OK. 1217 00:56:24,060 --> 00:56:24,560 Good. 1218 00:56:24,560 --> 00:56:27,060 >> PUBLIKUM: Og kanskje spesifisere at du vil ha den i små bokstaver? 1219 00:56:27,060 --> 00:56:30,120 1220 00:56:30,120 --> 00:56:31,415 >> ANDI PENG: Great. 1221 00:56:31,415 --> 00:56:33,540 Dere ler av meg glemme å sette et semikolon. 1222 00:56:33,540 --> 00:56:36,350 Jeg kan garantere deg et sted I løpet av denne klassen, 1223 00:56:36,350 --> 00:56:38,260 du glemmer å sette semikolon, og det 1224 00:56:38,260 --> 00:56:41,116 vil ta deg tre timer å finne ut hvorfor koden ikke fungerer. 1225 00:56:41,116 --> 00:56:42,240 Det har skjedd med oss ​​alle. 1226 00:56:42,240 --> 00:56:43,950 Det vil trolig skje med deg. 1227 00:56:43,950 --> 00:56:46,352 Komme i en god vane å bruke semikolon. 1228 00:56:46,352 --> 00:56:46,852 OK. 1229 00:56:46,852 --> 00:56:49,010 >> PUBLIKUM: Ønsker å gjøre den skråstrek? 1230 00:56:49,010 --> 00:56:50,398 >> ANDI PENG: Sure. 1231 00:56:50,398 --> 00:56:51,856 Ønsker du å gjøre den skråstrek? 1232 00:56:51,856 --> 00:56:53,020 >> PUBLIKUM: Ja. 1233 00:56:53,020 --> 00:56:54,330 >> ANDI PENG: Great. 1234 00:56:54,330 --> 00:56:54,830 OK. 1235 00:56:54,830 --> 00:56:57,872 Hva gjør jeg nå? 1236 00:56:57,872 --> 00:56:58,964 >> PUBLIKUM: Få streng. 1237 00:56:58,964 --> 00:56:59,880 ANDI PENG: Få streng. 1238 00:56:59,880 --> 00:57:03,080 1239 00:57:03,080 --> 00:57:03,830 Så hva skriver jeg? 1240 00:57:03,830 --> 00:57:04,233 Noen? 1241 00:57:04,233 --> 00:57:05,040 >> PUBLIKUM: String s. 1242 00:57:05,040 --> 00:57:05,873 >> ANDI PENG: String s. 1243 00:57:05,873 --> 00:57:07,251 PUBLIKUM: GetString. 1244 00:57:07,251 --> 00:57:09,000 ANDI PENG: Somebody, kan du fortelle meg hvor 1245 00:57:09,000 --> 00:57:12,000 denne funksjonen GetString kommer fra? 1246 00:57:12,000 --> 00:57:13,660 >> PUBLIKUM: String.h. 1247 00:57:13,660 --> 00:57:15,256 >> ANDI PENG: String.h? 1248 00:57:15,256 --> 00:57:16,715 Du tror det er fra string.h? 1249 00:57:16,715 --> 00:57:17,830 >> PUBLIKUM: [uhørlig]. 1250 00:57:17,830 --> 00:57:18,830 >> ANDI PENG: Det du går. 1251 00:57:18,830 --> 00:57:21,280 Det er fra CS50.h. 1252 00:57:21,280 --> 00:57:24,530 Hvis du alltid forvirret av hvor en bibliotekfilen er eller en header fil, 1253 00:57:24,530 --> 00:57:28,450 google bokstavelig string.h, og jeg skal fortelle deg 1254 00:57:28,450 --> 00:57:30,450 hva er alle funksjoner som er i string.h. 1255 00:57:30,450 --> 00:57:31,340 OK. 1256 00:57:31,340 --> 00:57:35,210 >> Så nå som jeg har laget en streng og jeg har be brukeren for det, 1257 00:57:35,210 --> 00:57:38,770 Jeg har lagret det i en variabel navngitte s, hva må jeg gjøre nå? 1258 00:57:38,770 --> 00:57:40,652 >> PUBLIKUM: Sjekk om det er i små bokstaver. 1259 00:57:40,652 --> 00:57:41,360 ANDI PENG: Sorry? 1260 00:57:41,360 --> 00:57:42,545 PUBLIKUM: Sjekk om det er i små bokstaver. 1261 00:57:42,545 --> 00:57:44,045 ANDI PENG: Greit, la oss gjøre det. 1262 00:57:44,045 --> 00:57:45,857 Hvordan gjør jeg det? 1263 00:57:45,857 --> 00:57:47,940 Faktisk, for formålene av klassen akkurat nå, 1264 00:57:47,940 --> 00:57:50,330 vi skal bare anta at alt 1265 00:57:50,330 --> 00:57:52,620 at vi innspill er allerede i små bokstaver. 1266 00:57:52,620 --> 00:57:55,430 Hvis du ønsker å sjekke, ville du bare legge til et betinget utsagn 1267 00:57:55,430 --> 00:57:59,640 som sjekket, som kjørte gjennom hver enkelt array element 1268 00:57:59,640 --> 00:58:02,540 og sjekket om det er mellom visse verdier. 1269 00:58:02,540 --> 00:58:05,627 Jeg glemmer hva antall verdier av små bokstaver er. 1270 00:58:05,627 --> 00:58:07,210 Du kan slå det opp på ASCII-tabellen. 1271 00:58:07,210 --> 00:58:08,800 Men ja, det er et veldig godt poeng. 1272 00:58:08,800 --> 00:58:11,758 Men akkurat nå er vi bare nødt til å anta at alle strenger vi innspill 1273 00:58:11,758 --> 00:58:13,130 er små bokstaver. 1274 00:58:13,130 --> 00:58:13,870 OK. 1275 00:58:13,870 --> 00:58:18,069 >> Så hvordan skulle jeg gå om dette problemet neste? 1276 00:58:18,069 --> 00:58:18,860 PUBLIKUM: For loop. 1277 00:58:18,860 --> 00:58:19,340 ANDI PENG: For loop? 1278 00:58:19,340 --> 00:58:19,839 OK. 1279 00:58:19,839 --> 00:58:20,847 Fortell meg hva jeg skal skrive. 1280 00:58:20,847 --> 00:58:25,230 >> PUBLIKUM: For int i lik 0. 1281 00:58:25,230 --> 00:58:27,230 >> ANDI PENG: OK. 1282 00:58:27,230 --> 00:58:36,350 >> PUBLIKUM: Oh, faktisk, så du gjøre et komma og gjøre n er lik strlen. 1283 00:58:36,350 --> 00:58:38,940 >> ANDI PENG: Så viktig ting at jeg tror hun la merke til her 1284 00:58:38,940 --> 00:58:42,936 er at vi ikke trengte å si int n andre gang vi gjorde dette. 1285 00:58:42,936 --> 00:58:45,060 Bare vet at i en for loop når du erklære, 1286 00:58:45,060 --> 00:58:47,934 du faktisk ikke trenger den int av den andre gangen du gjør en variabel. 1287 00:58:47,934 --> 00:58:51,202 Du kan si n strlen. 1288 00:58:51,202 --> 00:58:52,620 >> PUBLIKUM: Of s. 1289 00:58:52,620 --> 00:58:53,510 >> ANDI PENG: s. 1290 00:58:53,510 --> 00:58:54,706 OK. 1291 00:58:54,706 --> 00:58:58,370 >> PUBLIKUM: Så et semikolon. 1292 00:58:58,370 --> 00:59:00,130 >> ANDI PENG: Sure. 1293 00:59:00,130 --> 00:59:04,050 >> PUBLIKUM: Og så [uhørbart] n. 1294 00:59:04,050 --> 00:59:07,480 1295 00:59:07,480 --> 00:59:09,460 Så i ++. 1296 00:59:09,460 --> 00:59:11,780 >> ANDI PENG: Great. 1297 00:59:11,780 --> 00:59:12,280 Greit. 1298 00:59:12,280 --> 00:59:14,690 Hva ønsker vi inne av dette for loop nå? 1299 00:59:14,690 --> 00:59:17,820 Husk, hvis vi kommer til å kjøre gjennom en streng, og kjøres gjennom en matrise, 1300 00:59:17,820 --> 00:59:19,287 vi ønsker å sjekke ting i den. 1301 00:59:19,287 --> 00:59:20,370 Hva er det vi kommer til å trenge? 1302 00:59:20,370 --> 00:59:23,070 1303 00:59:23,070 --> 00:59:26,900 Dette er slags den vanskelige delen nå. 1304 00:59:26,900 --> 00:59:27,960 Alle som har en gjetning? 1305 00:59:27,960 --> 00:59:34,160 1306 00:59:34,160 --> 00:59:34,690 >> OK. 1307 00:59:34,690 --> 00:59:37,830 Så først, hvordan vi selv få tilgang? 1308 00:59:37,830 --> 00:59:41,610 Hvordan gjør vi selv først sjekk eller tilgang til et element i matrisen? 1309 00:59:41,610 --> 00:59:42,920 Hvordan gjør vi det? 1310 00:59:42,920 --> 00:59:47,120 Hva er notasjonen vi bruker å gjøre det? 1311 00:59:47,120 --> 00:59:50,920 Hva er navnet på denne matrisen kalt? 1312 00:59:50,920 --> 00:59:52,400 Det kalles s, ikke sant? 1313 00:59:52,400 --> 00:59:54,850 >> Husk, noen streng er alltid en matrise. 1314 00:59:54,850 --> 00:59:58,210 Så s braketten jeg, ikke sant? 1315 00:59:58,210 --> 01:00:01,360 Fordi det er nåverdien eller indeksverdien vi sjekker. 1316 01:00:01,360 --> 01:00:05,156 Og vi kommer til å stille som lik to-- vi ønsker en små bokstaver verdi, ikke sant? 1317 01:00:05,156 --> 01:00:07,530 Vi vil slå det lower-- Beklager, vi ønsker en stor bokstav. 1318 01:00:07,530 --> 01:00:10,014 Vi ønsker å snu små bokstaver verdi i store bokstaver. 1319 01:00:10,014 --> 01:00:11,805 Og så like-- Jeg beklager, hva er ditt navn? 1320 01:00:11,805 --> 01:00:12,580 >> PUBLIKUM: Heidi. 1321 01:00:12,580 --> 01:00:12,940 >> ANDI PENG: Sorry? 1322 01:00:12,940 --> 01:00:13,280 >> PUBLIKUM: Heidi. 1323 01:00:13,280 --> 01:00:13,988 >> ANDI PENG: Heidi. 1324 01:00:13,988 --> 01:00:15,850 Som Heidi sa utgangspunktet, er vi sannsynligvis 1325 01:00:15,850 --> 01:00:20,330 kommer til å trenge the-- vi er sannsynligvis nødt til å trekke 1326 01:00:20,330 --> 01:00:22,630 32 fra hva charc det er, ikke sant? 1327 01:00:22,630 --> 01:00:24,680 Fordi på en ASCII bord, forskjellen 1328 01:00:24,680 --> 01:00:27,790 mellom en liten bokstav og en stor bokstav er 32. 1329 01:00:27,790 --> 01:00:31,290 Så når vi gjør dette, er vi sannsynligvis kommer til å ønske å trekke 32, ikke sant? 1330 01:00:31,290 --> 01:00:33,910 >> Så vi kommer til å gjøre s jeg. 1331 01:00:33,910 --> 01:00:37,590 1332 01:00:37,590 --> 01:00:41,200 Har alle forstå hvorfor jeg gjorde det? 1333 01:00:41,200 --> 01:00:45,760 Fordi akkurat nå, i vår array, vi sjekker den 0. indeksen, ikke sant? 1334 01:00:45,760 --> 01:00:49,190 Og i den 0. indeksen til streng, det er det første tegnet. 1335 01:00:49,190 --> 01:00:51,820 Og det tegnet vi skal å anta at det er små bokstaver. 1336 01:00:51,820 --> 01:00:55,980 Hvis vi ønsker å gjøre det med store bokstaver, vi må trekke fra 32 fra sin verdi, 1337 01:00:55,980 --> 01:00:58,620 fordi i vår ASCII bord, det er hvordan vi får det 1338 01:00:58,620 --> 01:01:01,600 til neste tilsvar verdi som gjør det med store bokstaver. 1339 01:01:01,600 --> 01:01:03,714 Har alle forstår det? 1340 01:01:03,714 --> 01:01:04,213 Yeah. 1341 01:01:04,213 --> 01:01:06,530 >> PUBLIKUM: Kunne du også gjør små bokstaver et minus 1342 01:01:06,530 --> 01:01:08,080 >> ANDI PENG: Ja, så det er faktisk veldig bra. 1343 01:01:08,080 --> 01:01:10,455 Jeg kommer til å komme tilbake til det Spørsmålet etter at vi gjør dette. 1344 01:01:10,455 --> 01:01:11,060 Yeah. 1345 01:01:11,060 --> 01:01:13,940 Og så hvis jeg vil se hva som skjer, 1346 01:01:13,940 --> 01:01:16,180 Jeg sannsynligvis kommer til å ønsker å skrive ut, ikke sant? 1347 01:01:16,180 --> 01:01:19,930 Noen fortelle meg hva Jeg ønsker å skrive her. 1348 01:01:19,930 --> 01:01:29,160 >> PUBLIKUM: printf prosent c backslash [uhørbart]. 1349 01:01:29,160 --> 01:01:33,570 Det er verdien av [uhørbart] s jeg. 1350 01:01:33,570 --> 01:01:34,614 >> ANDI PENG: s jeg, sorry? 1351 01:01:34,614 --> 01:01:35,530 PUBLIKUM: [uhørlig]. 1352 01:01:35,530 --> 01:01:38,550 1353 01:01:38,550 --> 01:01:39,550 ANDI PENG: Jeg vet ikke. 1354 01:01:39,550 --> 01:01:40,600 Hva synes du? 1355 01:01:40,600 --> 01:01:44,016 >> PUBLIKUM: Vel, wouldn't-- jeg Jeg tror jeg ville ikke bring-- 1356 01:01:44,016 --> 01:01:46,944 Jeg ville ta det ut inne, fordi [uhørbart]. 1357 01:01:46,944 --> 01:01:49,726 1358 01:01:49,726 --> 01:01:51,392 ANDI PENG: Å, ville du ha gjort det? 1359 01:01:51,392 --> 01:01:53,867 PUBLIKUM: Yeah. 1360 01:01:53,867 --> 01:01:56,700 ANDI PENG: La oss la det veien det er, og jeg skal forklare hvorfor senere. 1361 01:01:56,700 --> 01:01:58,533 Husk, selv når du har et sted holder, 1362 01:01:58,533 --> 01:02:00,701 du ønsker å sette parentes rundt det. 1363 01:02:00,701 --> 01:02:01,200 Greit. 1364 01:02:01,200 --> 01:02:04,810 Så dette bør være en solid funksjon her. 1365 01:02:04,810 --> 01:02:06,370 La oss kjøre den og se om det kompilerer. 1366 01:02:06,370 --> 01:02:08,750 Gjør øvre. 1367 01:02:08,750 --> 01:02:09,250 UH oh. 1368 01:02:09,250 --> 01:02:12,030 1369 01:02:12,030 --> 01:02:13,340 Det ser ikke så bra. 1370 01:02:13,340 --> 01:02:14,507 Hvorfor skjer dette? 1371 01:02:14,507 --> 01:02:17,340 Som med alle feil, ønsker du å gå tilbake og starte med den første, 1372 01:02:17,340 --> 01:02:20,630 fordi vanligvis én feilårsaker mange andre feil etter det. 1373 01:02:20,630 --> 01:02:26,700 Her ser vi upper.c: 18: 25, som forteller meg i dette programmet heter upper.c, 1374 01:02:26,700 --> 01:02:33,800 på linje 18, feil implisitt erklære bibliotek med funksjoner strlen med type 1375 01:02:33,800 --> 01:02:36,330 unassigned-- blah, jeg vet ikke hva som skjer etter det. 1376 01:02:36,330 --> 01:02:39,990 >> Alt som forteller meg akkurat nå er at noe skjer på strlen. 1377 01:02:39,990 --> 01:02:43,520 Og datamaskinen er forvirret, fordi Det er som, jeg vet ikke hva strlen er? 1378 01:02:43,520 --> 01:02:45,520 Hva gjør det sannsynligvis fortelle deg at du går glipp av? 1379 01:02:45,520 --> 01:02:46,490 >> PUBLIKUM: Du mangler [uhørbart]. 1380 01:02:46,490 --> 01:02:47,630 >> ANDI PENG: Du har rett. 1381 01:02:47,630 --> 01:02:49,510 Nettopp. 1382 01:02:49,510 --> 01:02:52,140 Så det er her det er viktig å sørge for 1383 01:02:52,140 --> 01:02:56,970 at hver funksjon du bruker i din kode er å ha den korrekte overskriften 1384 01:02:56,970 --> 01:02:59,660 fil for biblioteket, eller annet du kommer til å få masse feil 1385 01:02:59,660 --> 01:03:01,150 og koden din ikke kommer å vite hva som skjer. 1386 01:03:01,150 --> 01:03:03,050 Så vi kommer til å omfatte string.h her. 1387 01:03:03,050 --> 01:03:06,270 >> Nå når vi prøver å kompilere øvre. 1388 01:03:06,270 --> 01:03:08,410 Kompilere riktig. 1389 01:03:08,410 --> 01:03:09,960 La oss kjøre dette programmet. 1390 01:03:09,960 --> 01:03:12,000 Så skriver du noe med små bokstaver. 1391 01:03:12,000 --> 01:03:14,920 Hva gjør dere ønsker å skrive? 1392 01:03:14,920 --> 01:03:16,546 Rope ut noe. 1393 01:03:16,546 --> 01:03:17,920 Greit, Charly bare gikk inn. 1394 01:03:17,920 --> 01:03:18,990 Vi vil skrive Charly navn. 1395 01:03:18,990 --> 01:03:21,670 1396 01:03:21,670 --> 01:03:22,840 >> Charly med små bokstaver. 1397 01:03:22,840 --> 01:03:27,742 Og forhåpentligvis, forhåpentligvis, er dette kommer til å rope ut og spytte ut 1398 01:03:27,742 --> 01:03:28,575 Charly med store bokstaver. 1399 01:03:28,575 --> 01:03:30,830 Jippi! 1400 01:03:30,830 --> 01:03:33,430 forstår alle hvor Jeg gikk om å løse det? 1401 01:03:33,430 --> 01:03:36,190 Måten jeg kan manipulere ved hjelp av heltall 1402 01:03:36,190 --> 01:03:39,410 å løse noe som Jeg ønsker å gjøre i strenger, 1403 01:03:39,410 --> 01:03:44,390 fordi tegn og tall kan refereres på samme måte fordi 1404 01:03:44,390 --> 01:03:45,540 av ASCII kartlegging. 1405 01:03:45,540 --> 01:03:52,890 >> Så for å gå tilbake til poenget, hvis jeg ønsket å sette her i stedet for 32 1406 01:03:52,890 --> 01:03:58,959 store bokstaver A minus små bokstaver en akkurat som det, ville det fungere like bra, 1407 01:03:58,959 --> 01:04:01,750 fordi det er rett og slett bare Forskjellen mellom disse to verdier. 1408 01:04:01,750 --> 01:04:09,570 Hvis jeg ønsker å gjøre dette igjen-- charly. 1409 01:04:09,570 --> 01:04:10,320 Å nei. 1410 01:04:10,320 --> 01:04:11,820 Jeg tror vi gikk feil vei, ja? 1411 01:04:11,820 --> 01:04:13,260 >> PUBLIKUM: [uhørbart] små bokstaver en. 1412 01:04:13,260 --> 01:04:14,260 >> ANDI PENG: Det du går. 1413 01:04:14,260 --> 01:04:22,380 1414 01:04:22,380 --> 01:04:22,880 Jepp. 1415 01:04:22,880 --> 01:04:24,920 Og ut spytter charly. 1416 01:04:24,920 --> 01:04:28,020 Så vær forsiktig når du du trekke verdier 1417 01:04:28,020 --> 01:04:30,400 å huske hvilken som er er større enn den andre. 1418 01:04:30,400 --> 01:04:35,220 For eksempel, her oppe jeg glemte at små bokstaver en er faktisk 1419 01:04:35,220 --> 01:04:38,540 større enn store bokstaver A. Så når jeg forsøkt å trekke dem den andre veien 1420 01:04:38,540 --> 01:04:40,600 rundt, fikk jeg negativ 32. 1421 01:04:40,600 --> 01:04:42,800 Og maskinen min var like, Jeg vet ikke hva det er. 1422 01:04:42,800 --> 01:04:45,810 Det er sannsynligheten bare noen tilfeldige verdi som ikke er veldig bra. 1423 01:04:45,810 --> 01:04:48,760 Og så sørg for at du er trekke i riktig lengde 1424 01:04:48,760 --> 01:04:52,831 å finne tegnet du ønsker. 1425 01:04:52,831 --> 01:04:53,330 OK. 1426 01:04:53,330 --> 01:04:58,550 Er noen forvirret på hvordan vi gikk om å skrive denne funksjonen? 1427 01:04:58,550 --> 01:04:59,180 OK. 1428 01:04:59,180 --> 01:05:04,830 Så egentlig, en funksjon allerede finnes i biblioteket heter ctype.h. 1429 01:05:04,830 --> 01:05:06,417 Bibliotekets kalt ctype.h. 1430 01:05:06,417 --> 01:05:08,500 Denne funksjonen faktisk er allerede skrevet for deg. 1431 01:05:08,500 --> 01:05:10,820 Det kalles å over. 1432 01:05:10,820 --> 01:05:13,027 >> Og så for det formål dette PSet, du kommer 1433 01:05:13,027 --> 01:05:15,860 å oppdage at du virkelig ønsker å bruke mange av funksjonene som finnes 1434 01:05:15,860 --> 01:05:17,390 innenfor CTast biblioteket. 1435 01:05:17,390 --> 01:05:21,040 Til øvre, lavere, er øvre, er lower-- de er alle funksjoner 1436 01:05:21,040 --> 01:05:24,914 at du vil være i stand til å bruke veldig, svært raskt i din egen kode som 1437 01:05:24,914 --> 01:05:26,080 gjør akkurat hva dette betyr. 1438 01:05:26,080 --> 01:05:28,941 Vi skrev ut hvordan å konvertere en streng til store bokstaver. 1439 01:05:28,941 --> 01:05:31,440 Men dette er faktisk koden at noen andre har skrevet 1440 01:05:31,440 --> 01:05:33,800 og at du kan få tilgang til via en annen funksjon. 1441 01:05:33,800 --> 01:05:34,300 Yeah? 1442 01:05:34,300 --> 01:05:39,570 >> PUBLIKUM: Så du bare kopiere en er der inne og gjøre det for hver enkelt bokstav? 1443 01:05:39,570 --> 01:05:42,070 >> ANDI PENG: Ja, fordi jeg ikke bryr seg om verdier av en. 1444 01:05:42,070 --> 01:05:44,540 Jeg bare bryr seg at forskjellen mellom dem er 32, ikke sant? 1445 01:05:44,540 --> 01:05:48,210 Forskjellen mellom små b og store bokstaver B er også 32. 1446 01:05:48,210 --> 01:05:50,860 Og forskjellen mellom c og store bokstaver C er alltid 32. 1447 01:05:50,860 --> 01:05:53,235 >> Jeg må bare bry seg om Forskjellen mellom de to, 1448 01:05:53,235 --> 01:05:56,666 fordi alle bokstavene følger samme mønster, ikke sant? 1449 01:05:56,666 --> 01:05:58,540 Hvis jeg har forskjellen mellom ett av dem, 1450 01:05:58,540 --> 01:06:01,050 Jeg vet hva forskjellen mellom dem er. 1451 01:06:01,050 --> 01:06:01,740 Godt spørsmål. 1452 01:06:01,740 --> 01:06:04,090 Yeah. 1453 01:06:04,090 --> 01:06:06,660 Alle gode? 1454 01:06:06,660 --> 01:06:09,080 OK. 1455 01:06:09,080 --> 01:06:09,580 Oop. 1456 01:06:09,580 --> 01:06:14,380 1457 01:06:14,380 --> 01:06:15,270 >> OK. 1458 01:06:15,270 --> 01:06:20,310 Så en annen konsept som er kommer til å være svært nyttig når du 1459 01:06:20,310 --> 01:06:22,570 fortsette å utvikle koden er denne ideen 1460 01:06:22,570 --> 01:06:25,430 å skape funksjoner eller abstraksjon. 1461 01:06:25,430 --> 01:06:28,479 Så akkurat nå, har vi alle tatt algebra. 1462 01:06:28,479 --> 01:06:31,770 I algebra, er du lært at det er denne fantastiske tingen kalt en funksjon 1463 01:06:31,770 --> 01:06:35,300 maskin, der hvis du inngang én slags tall, 1464 01:06:35,300 --> 01:06:38,720 det går gjennom denne fantastiske funksjonen og ut kommer en annen utgang, ikke sant? 1465 01:06:38,720 --> 01:06:42,220 I kode, skjer det samme i alle slags funksjon. 1466 01:06:42,220 --> 01:06:48,230 >> Så jeg kunne fysisk skrive i kroppen min av min kode 1467 01:06:48,230 --> 01:06:52,357 en hoved uttalelse som faktisk gjør uansett legeme av koden gjør. 1468 01:06:52,357 --> 01:06:54,940 Men utenom det, kan jeg også skrive mange forskjellige funksjoner 1469 01:06:54,940 --> 01:06:56,320 som gjør mange forskjellige ting. 1470 01:06:56,320 --> 01:06:58,570 For eksempel har vi allerede begynte å bruke noen av dem. 1471 01:06:58,570 --> 01:07:00,610 Printf-- som er en funksjon som noen andre 1472 01:07:00,610 --> 01:07:02,870 har allerede skrevet at vi kan ringe inn koden vår. 1473 01:07:02,870 --> 01:07:05,410 Å upper-- i dette tilfellet, upper-- er en annen funksjon 1474 01:07:05,410 --> 01:07:07,330 Vi har skrevet at vi kan ringe inn koden vår. 1475 01:07:07,330 --> 01:07:09,520 Og så jeg antar hvorfor vi selv har funksjoner? 1476 01:07:09,520 --> 01:07:12,100 Hvorfor kan ikke vi bare slenger det alle i samme linje med kode? 1477 01:07:12,100 --> 01:07:13,730 Det gjør det enkelt for alle. 1478 01:07:13,730 --> 01:07:19,200 >> Vel, begrunnelsen bak det er, først av alt, organisasjon. 1479 01:07:19,200 --> 01:07:21,880 Det er veldig irriterende å gå gjennom noen kode 1480 01:07:21,880 --> 01:07:25,110 og en funksjon som printf. 1481 01:07:25,110 --> 01:07:28,570 Hvis dere faktisk visste hva funksjonen printf innebar å skrive, 1482 01:07:28,570 --> 01:07:30,530 det er liksom 1000 linjer med kode. 1483 01:07:30,530 --> 01:07:32,357 >> Hvis hver gang jeg ønsket til printf noe, 1484 01:07:32,357 --> 01:07:35,440 Jeg måtte skrive 1000 linjer med kode, det ville være veldig irriterende å lese, 1485 01:07:35,440 --> 01:07:36,290 ikke sant? 1486 01:07:36,290 --> 01:07:38,860 Det er derfor vi har bare opprettet dette abstrakte funksjonen 1487 01:07:38,860 --> 01:07:41,670 at vi har allerede noen andre har skrevet et annet sted. 1488 01:07:41,670 --> 01:07:44,920 Og hver gang vi trenger å bruke det i koden vår, vi må bare si printf. 1489 01:07:44,920 --> 01:07:48,070 Og det er i stand til å bruke funksjonen noen andre har skrevet i vår kode. 1490 01:07:48,070 --> 01:07:51,020 Det gjør det lettere organisatorisk å lese koden. 1491 01:07:51,020 --> 01:07:53,460 >> Dernest er det forenkling. 1492 01:07:53,460 --> 01:07:56,750 Det forenkler trinnene vi har å ta for å løse vårt problem. 1493 01:07:56,750 --> 01:07:59,300 Printf, funksjoner som printf, funksjoner som å over 1494 01:07:59,300 --> 01:08:03,560 er alle ting som lar oss forenkle vår kode ned slik at det er enklere. 1495 01:08:03,560 --> 01:08:05,830 Og siste ting er gjenbruk. 1496 01:08:05,830 --> 01:08:08,710 >> Så det faktum at vi har en funksjon kalt printf 1497 01:08:08,710 --> 01:08:11,990 som vi kan kalle mange forskjellige ganger, og gjør at den kan være gjenbrukbare. 1498 01:08:11,990 --> 01:08:14,980 Hvis jeg skulle skrive printf, Jeg bare skrive det en gang. 1499 01:08:14,980 --> 01:08:16,439 Det eksisterer bare i at ett sted. 1500 01:08:16,439 --> 01:08:19,890 Hvis jeg ønsket å gjøre det igjen, ville jeg må kopiere og lime inn alt dette 1501 01:08:19,890 --> 01:08:21,760 inn i min andre linje med kode. 1502 01:08:21,760 --> 01:08:24,880 Det er derfor om vi oppretter en funksjon som eksisterer utenfor vår viktigste, 1503 01:08:24,880 --> 01:08:26,880 Vi kan bare påkalle det og bruke det når 1504 01:08:26,880 --> 01:08:29,604 vi trenger, slik at det er mye enklere for oss som programmer for å skrive. 1505 01:08:29,604 --> 01:08:32,220 1506 01:08:32,220 --> 01:08:35,549 >> Så den måten at vi faktisk ville skrive en funksjon er svært lik, ikke sant? 1507 01:08:35,549 --> 01:08:37,590 Dette er slags første tilfellet der vi vil 1508 01:08:37,590 --> 01:08:42,830 se en funksjon ta på en stil annerledes enn vår int main annullert. 1509 01:08:42,830 --> 01:08:46,779 I dette tilfellet, hvis jeg ønsket å skrive en funksjon kalt q, ikke sant? 1510 01:08:46,779 --> 01:08:49,370 >> Og int verdi her er alle forteller meg, 1511 01:08:49,370 --> 01:08:51,649 hva jeg vil dette gjøre funksjon for å gå tilbake til meg? 1512 01:08:51,649 --> 01:08:54,484 Hvis jeg ønsker å kube et heltall, Jeg kommer til å ønske å legge inn. 1513 01:08:54,484 --> 01:08:55,525 Disse er de parametere. 1514 01:08:55,525 --> 01:08:58,490 Jeg kommer til å innganger en verdi av typen int. 1515 01:08:58,490 --> 01:09:01,300 Og jeg kommer til å gå tilbake en annen type verdi av int. 1516 01:09:01,300 --> 01:09:03,050 Og her inne, som du kan se, alt jeg gjør 1517 01:09:03,050 --> 01:09:07,300 er cubing hva mitt innspill er som min utgang og returnere den. 1518 01:09:07,300 --> 01:09:10,790 >> Så alt denne funksjonen gjør er tar noen form for heltall. 1519 01:09:10,790 --> 01:09:14,979 Det multipliserer det av seg selv to ganger slik at det i terninger virkning. 1520 01:09:14,979 --> 01:09:17,729 Og så returnerer uansett at produksjonen er. 1521 01:09:17,729 --> 01:09:20,540 Så i dette tilfellet, er det to linjer med kode som vi måtte skrive ekstra. 1522 01:09:20,540 --> 01:09:22,880 Men hvis vi ønsket å kalle på dette flere ganger, 1523 01:09:22,880 --> 01:09:26,210 det er mye lettere å skrive at man linjen her som er i kuben enn 1524 01:09:26,210 --> 01:09:28,830 må gå gjennom flere ganger. 1525 01:09:28,830 --> 01:09:34,180 >> Slik måte at den i det vesentlige en hvilken som helst formatering for alle slags funksjon 1526 01:09:34,180 --> 01:09:36,420 kommer til å eksistere er som her. 1527 01:09:36,420 --> 01:09:38,659 Så vi har funksjonsnavnet. 1528 01:09:38,659 --> 01:09:39,950 I dette tilfellet, det heter kube. 1529 01:09:39,950 --> 01:09:42,033 Og vi kaller det kube fordi det er lett å huske. 1530 01:09:42,033 --> 01:09:44,220 Du kan kalle det kvadrat og det kan faktisk være i terninger. 1531 01:09:44,220 --> 01:09:45,500 Spiller ingen rolle. 1532 01:09:45,500 --> 01:09:48,020 Bare et navn som du er tildele din funksjon. 1533 01:09:48,020 --> 01:09:51,660 >> Denne retten her, int, er det type parameteren du trenger. 1534 01:09:51,660 --> 01:09:54,149 Så hva gjør denne funksjonen trenger for å operere? 1535 01:09:54,149 --> 01:09:55,990 Vel, det er behov en inngang. 1536 01:09:55,990 --> 01:09:56,704 Jeg kalte det inngang. 1537 01:09:56,704 --> 01:09:58,120 Du kan kalle det hva du vil. 1538 01:09:58,120 --> 01:10:00,500 Men jeg trenger noe av type int. 1539 01:10:00,500 --> 01:10:03,730 Det kommer til å faktisk utføre hva er inni her, 1540 01:10:03,730 --> 01:10:04,990 kroppen av funksjon. 1541 01:10:04,990 --> 01:10:07,847 Og deretter returtypen rett her, dette int-- 1542 01:10:07,847 --> 01:10:09,680 alt det forteller meg er at denne funksjonen er 1543 01:10:09,680 --> 01:10:11,250 kommer til å returnere til meg i int. 1544 01:10:11,250 --> 01:10:14,460 Så det kommer til å ta i et int, og det kommer til å gi deg tilbake en int. 1545 01:10:14,460 --> 01:10:17,750 Har alle forstår hvordan formatering av denne typen fungerer? 1546 01:10:17,750 --> 01:10:18,250 Kjølig. 1547 01:10:18,250 --> 01:10:24,690 1548 01:10:24,690 --> 01:10:25,740 >> OK. 1549 01:10:25,740 --> 01:10:31,770 Så ikke vær bekymret hvis dette virker litt abstrakt akkurat nå. 1550 01:10:31,770 --> 01:10:33,450 Dette er noe som vi skal snakke om. 1551 01:10:33,450 --> 01:10:36,310 Vi vil dykke i dypere senere i kurset. 1552 01:10:36,310 --> 01:10:41,170 Måten noen form for høyere nivå abstraksjon av disse tingene arbeid 1553 01:10:41,170 --> 01:10:43,530 er det, i minnet, i datamaskinen, alt 1554 01:10:43,530 --> 01:10:47,660 er lagret i denne typen av stabelen, skal jeg si. 1555 01:10:47,660 --> 01:10:49,070 >> Så der oppe på toppen. 1556 01:10:49,070 --> 01:10:50,861 Jeg vet ikke om du Gutta kan se at godt. 1557 01:10:50,861 --> 01:10:52,590 Jeg skal prøve å zoome inn. 1558 01:10:52,590 --> 01:10:55,111 Her på toppen, vi har den fysiske tekst 1559 01:10:55,111 --> 01:10:57,860 av hva maskinen er interpreting-- alle nuller og enere som 1560 01:10:57,860 --> 01:10:59,540 eksistere innenfor vår datamaskin. 1561 01:10:59,540 --> 01:11:03,390 Og så har vi den initialisert data og initialisert data, 1562 01:11:03,390 --> 01:11:05,340 det vi kaller globale variabler. 1563 01:11:05,340 --> 01:11:08,200 Så variabler som eksisterer tvers av alle programmer 1564 01:11:08,200 --> 01:11:11,815 og på tvers av hele, hovedsak, kode. 1565 01:11:11,815 --> 01:11:13,940 Ingen grunn til bekymring hvis dere er slags uklar på dette. 1566 01:11:13,940 --> 01:11:16,060 Det spiller egentlig ingen rolle akkurat nå. 1567 01:11:16,060 --> 01:11:18,680 >> Og så har vi det er kalt en haug i en stabel. 1568 01:11:18,680 --> 01:11:21,140 Tenk på en stabel bokstavelig som akkurat som en stabel av ting, 1569 01:11:21,140 --> 01:11:23,098 en stabel av forskjellig ting blir skjøvet på toppen 1570 01:11:23,098 --> 01:11:27,870 av hverandre, som lagrer de forskjellige variabler og syntaks i koden din. 1571 01:11:27,870 --> 01:11:31,460 Og så her helt nederst, vi har de miljøvariabler 1572 01:11:31,460 --> 01:11:35,480 av hva du utfører innenfor bare din lille linje med kode. 1573 01:11:35,480 --> 01:11:40,510 >> Og vi bare kommer til å zoome inn på selve stakken delen. 1574 01:11:40,510 --> 01:11:43,880 Så akkurat her, hvis vi skulle zoome på akkurat dette området av stabelen, 1575 01:11:43,880 --> 01:11:45,140 Dette er hva det ser ut. 1576 01:11:45,140 --> 01:11:48,590 Og dette er faktisk ganske viktig når dere snakker om funksjoner, 1577 01:11:48,590 --> 01:11:52,330 fordi merke til at minne på datamaskinen 1578 01:11:52,330 --> 01:11:55,600 lagrer variablene og funksjonene 1579 01:11:55,600 --> 01:11:58,790 og parameterne for både funksjon og dine viktigste variablene 1580 01:11:58,790 --> 01:12:00,190 på forskjellige steder. 1581 01:12:00,190 --> 01:12:03,390 >> Så akkurat nå, er hoved den faktiske funksjon 1582 01:12:03,390 --> 01:12:04,780 som du utfører i en kode. 1583 01:12:04,780 --> 01:12:08,050 Du har sine parametre lagret her og dets lokale variabler lagret her. 1584 01:12:08,050 --> 01:12:12,270 Lokal variabel betyr bare en variabel som eksisterer kun innenfor den funksjonen. 1585 01:12:12,270 --> 01:12:15,610 Og på toppen av det, har du dette egen funksjon kalt kube. 1586 01:12:15,610 --> 01:12:18,240 Du har som er parametere samt de lokalbefolkningen. 1587 01:12:18,240 --> 01:12:21,540 >> Og grunnen til at du kan se her er at det 1588 01:12:21,540 --> 01:12:25,030 skjer når kube tar i et verdi fra din viktigste funksjon 1589 01:12:25,030 --> 01:12:27,640 er at faktisk det er å kopiere det over. 1590 01:12:27,640 --> 01:12:31,470 Så hvis jeg ønsket å cube To og returnere 8, som to 1591 01:12:31,470 --> 01:12:33,730 faktisk er matet inn som en parameter, og det er 1592 01:12:33,730 --> 01:12:37,690 kopiert over slik at du har det eksisterende på to forskjellige steder i minnet. 1593 01:12:37,690 --> 01:12:40,520 Og du må være veldig forsiktig på å huske hvilken av dem 1594 01:12:40,520 --> 01:12:42,520 du faktisk manipulere. 1595 01:12:42,520 --> 01:12:47,170 Og et eksempel på hva som skjedde det ville være veldig, veldig dårlig 1596 01:12:47,170 --> 01:12:48,050 finnes akkurat her. 1597 01:12:48,050 --> 01:12:50,760 1598 01:12:50,760 --> 01:12:58,650 >> Så akkurat her, har jeg fått, i teorien, et program akkurat her, en hovedfunksjon 1599 01:12:58,650 --> 01:13:02,180 at jeg erklære en int x lik 1. 1600 01:13:02,180 --> 01:13:04,505 Jeg erklærer en annen int y lik 2. 1601 01:13:04,505 --> 01:13:06,380 Og så jeg kjører det gjennom denne funksjonen 1602 01:13:06,380 --> 01:13:09,647 kalles swap, der jeg antar at det er å bytte de to verdiene. 1603 01:13:09,647 --> 01:13:11,480 Og så kommer jeg til å skrive dem ut, ikke sant? 1604 01:13:11,480 --> 01:13:13,220 Det er det jeg ønsker dette programmet å gjøre. 1605 01:13:13,220 --> 01:13:15,180 >> Så la oss komme ned og ta en titt. 1606 01:13:15,180 --> 01:13:18,200 Så hvis jeg faktisk skrive en annen funksjon, som du kan se, 1607 01:13:18,200 --> 01:13:19,750 vi har vår viktigste funksjon her. 1608 01:13:19,750 --> 01:13:22,860 Og så har vi vår andre funksjonen her. 1609 01:13:22,860 --> 01:13:24,520 Void swap. 1610 01:13:24,520 --> 01:13:27,090 Void betyr bare at det er ikke kommer til å returnere noe. 1611 01:13:27,090 --> 01:13:28,930 Funksjonen heter kalles swap, og det er 1612 01:13:28,930 --> 01:13:33,730 kommer til inntak to variabler, int en og int b, fra [uhørbart] -funksjonen. 1613 01:13:33,730 --> 01:13:39,010 >> Så egentlig her inne, vi er passerer x og y inn i denne funksjonen. 1614 01:13:39,010 --> 01:13:40,760 Og hvis vi skulle skape dette-- så vi ønsker 1615 01:13:40,760 --> 01:13:42,420 å opprette en midlertidig verdi, ikke sant? 1616 01:13:42,420 --> 01:13:43,930 Vi kommer til å tildele det til en. 1617 01:13:43,930 --> 01:13:45,388 Og deretter en kommer til å nå lik b. 1618 01:13:45,388 --> 01:13:47,660 Og b kommer til å være tilbake hvor temp verdien var, 1619 01:13:47,660 --> 01:13:51,070 som er en, fordi når du ønsker å bytte ting, 1620 01:13:51,070 --> 01:13:52,320 du kan ikke bare liker bytte dem. 1621 01:13:52,320 --> 01:13:54,360 >> Du må holde en ut her slik at det husker 1622 01:13:54,360 --> 01:13:56,485 hva det er, fordi når du bytte en, du glemmer 1623 01:13:56,485 --> 01:13:58,200 hva det opprinnelige verdien var, ikke sant? 1624 01:13:58,200 --> 01:14:00,990 Så i teorien, dette programmet skal fungere, ikke sant? 1625 01:14:00,990 --> 01:14:03,630 Hvis jeg ønsket å bytte to, bør de bytte. 1626 01:14:03,630 --> 01:14:05,490 Så la oss kjøre den og se om det fungerer. 1627 01:14:05,490 --> 01:14:11,130 1628 01:14:11,130 --> 01:14:16,940 >> Så som dere kan se, x var en gang en og y var en gang to. 1629 01:14:16,940 --> 01:14:21,475 Og hvis jeg skrive den ut, x er fortsatt 1 og y er 2. 1630 01:14:21,475 --> 01:14:25,970 Hmm, dette programmet ikke synes å være fungerer slik at jeg vil ha det til å fungere. 1631 01:14:25,970 --> 01:14:29,950 Er det noen som ønsker å ta en sjanse på gjette hvorfor dette skjedde? 1632 01:14:29,950 --> 01:14:34,430 Det har å gjøre med måten at ulike ting er 1633 01:14:34,430 --> 01:14:38,172 lagret på forskjellige steder i minnet. 1634 01:14:38,172 --> 01:14:39,377 >> OK. 1635 01:14:39,377 --> 01:14:41,960 Så dere trenger ikke å bekymre deg for mye om dette akkurat nå. 1636 01:14:41,960 --> 01:14:46,610 Men vet at kuben lokale variabler var a og b, 1637 01:14:46,610 --> 01:14:49,230 fordi her i vår funksjon, vi har erklært a og b 1638 01:14:49,230 --> 01:14:53,570 som variablene som eksisterer innen kube, som funksjon. 1639 01:14:53,570 --> 01:14:59,490 Men som du kan se, er parametrene som det er å ta i ble lagret her. 1640 01:14:59,490 --> 01:15:01,370 Men vi var faktisk ikke returnere noe. 1641 01:15:01,370 --> 01:15:03,120 Vi var ikke faktisk endrer x og y. 1642 01:15:03,120 --> 01:15:04,440 Vi ble bare endre a og b. 1643 01:15:04,440 --> 01:15:08,340 >> Vi hadde kopiert x og y inn noe som kalles a og b. 1644 01:15:08,340 --> 01:15:11,092 Men vi aldri manipulert x og y selv. 1645 01:15:11,092 --> 01:15:12,800 Er dere ser hvordan det skjer? 1646 01:15:12,800 --> 01:15:16,140 Er at vi har rett og slett kopiert det over, men vi har faktisk ikke holdt 1647 01:15:16,140 --> 01:15:18,030 rede på hvor de var i minnet. 1648 01:15:18,030 --> 01:15:20,127 >> Og så nå datamaskinen ser, oh, har jeg 1649 01:15:20,127 --> 01:15:21,960 kjøre denne saken gjennom denne herlige funksjonen. 1650 01:15:21,960 --> 01:15:23,690 Men x og y er fortsatt x og y. 1651 01:15:23,690 --> 01:15:26,240 Ingenting har skjedd med dem på grunn av det faktum 1652 01:15:26,240 --> 01:15:28,340 at disse parametrene og lokale variabler 1653 01:15:28,340 --> 01:15:30,150 er lagret i en annen sted i minnet. 1654 01:15:30,150 --> 01:15:32,030 Og dette er et høyere nivå konsept som vi vil 1655 01:15:32,030 --> 01:15:34,300 begynner å se senere i kurset. 1656 01:15:34,300 --> 01:15:36,950 Men bare vet at dette er et problem som kan skje 1657 01:15:36,950 --> 01:15:41,400 og at vi vil finne ut måter å håndtere dette senere i kurset. 1658 01:15:41,400 --> 01:15:41,900 OK. 1659 01:15:41,900 --> 01:15:47,750 1660 01:15:47,750 --> 01:15:48,250 Greit. 1661 01:15:48,250 --> 01:15:51,780 Så den siste konseptet vi er virkelig kommer til å dekke 1662 01:15:51,780 --> 01:15:53,880 som kommer til å være nyttig for PSet denne uken 1663 01:15:53,880 --> 01:15:56,060 er det som kalles kommandolinjeargumenter. 1664 01:15:56,060 --> 01:16:00,820 Så Rob i sitt foredrag gikk gjennom slags kort på hvordan disse fungerer. 1665 01:16:00,820 --> 01:16:02,770 Hovedsak vet at når du skriver 1666 01:16:02,770 --> 01:16:06,280 som en hovedfunksjon, når vi skrev funksjoner før i det siste, 1667 01:16:06,280 --> 01:16:07,804 vi hadde int main annullert. 1668 01:16:07,804 --> 01:16:10,470 Og grunnen til at vi hadde annullert det var fordi våre programmer gjorde ikke 1669 01:16:10,470 --> 01:16:12,520 trenger å oppgi verdier for å kjøre, ikke sant? 1670 01:16:12,520 --> 01:16:16,020 Når jeg kjørte Mario, det gjorde jeg ikke trenger å faktisk bare skrive inn noe 1671 01:16:16,020 --> 01:16:16,970 når jeg kjørte Mario. 1672 01:16:16,970 --> 01:16:20,170 Jeg kunne be brukeren senere. 1673 01:16:20,170 --> 01:16:22,450 Men det vil ikke alltid være tilfelle. 1674 01:16:22,450 --> 01:16:24,980 >> For eksempel, i denne ukes problem setter, 1675 01:16:24,980 --> 01:16:28,365 du kommer til å bli spurt om det, i tillegg til å kjøre programmet, 1676 01:16:28,365 --> 01:16:30,990 du kommer til å ønske å legge inn visse ting i rett som deg 1677 01:16:30,990 --> 01:16:32,050 kjøre programmet. 1678 01:16:32,050 --> 01:16:34,720 Så måten vi gjør som kalles en kommandolinje argument, som 1679 01:16:34,720 --> 01:16:37,280 er som et argument du kan legge inn direkte 1680 01:16:37,280 --> 01:16:39,260 som du prøver å kjøre programmet. 1681 01:16:39,260 --> 01:16:44,680 >> Så notasjonen for dette, det er ganske komplisert utseende, 1682 01:16:44,680 --> 01:16:47,320 men det er egentlig ikke så vanskelig. Så int main-- 1683 01:16:47,320 --> 01:16:48,910 det er bare din viktigste funksjon. 1684 01:16:48,910 --> 01:16:52,110 Into argc komma streng argv parentes. 1685 01:16:52,110 --> 01:16:56,040 Så alt som er å si er at dette int argc-- alt som forteller deg 1686 01:16:56,040 --> 01:17:00,560 er at de er antallet argumenter i maskinen, bør forvente. 1687 01:17:00,560 --> 01:17:03,130 >> Så en ting som er virkelig viktig å holde orden på 1688 01:17:03,130 --> 01:17:07,080 er den fysiske navnet på programmet teller som en av disse argumentene. 1689 01:17:07,080 --> 01:17:11,080 Så hvis jeg ønsket å ha mitt program kjøre pluss en ekstra kommandolinje 1690 01:17:11,080 --> 01:17:13,310 argument, jeg er faktisk kommer til å ha to. 1691 01:17:13,310 --> 01:17:15,080 Argc som faktisk kommer til å være to. 1692 01:17:15,080 --> 01:17:18,010 Og så streng argv bracket-- alle som gjør, 1693 01:17:18,010 --> 01:17:20,410 det gir meg en tabell med strenger som er 1694 01:17:20,410 --> 01:17:24,870 kommer til å bare vise og lagre det alle disse kommandolinjeargumentene er. 1695 01:17:24,870 --> 01:17:34,090 >> Så for eksempel, hvis jeg ønsket å ha dette program, ./copy INFILE outfile, ikke sant? 1696 01:17:34,090 --> 01:17:37,330 Det er bare en vanlig Linux-kommando. 1697 01:17:37,330 --> 01:17:38,830 Hva som faktisk er argc? 1698 01:17:38,830 --> 01:17:41,320 Hvor mange kommandolinjeargumentene er det egentlig i dette? 1699 01:17:41,320 --> 01:17:45,130 Alt dette gjør er å lage en kopi av en infile av navnet på en fil 1700 01:17:45,130 --> 01:17:47,070 og den kopierer den inn en annen fil, ikke sant? 1701 01:17:47,070 --> 01:17:48,700 Det er alt dette gjør. 1702 01:17:48,700 --> 01:17:53,080 Som du kan se, jeg gjør det på en linje uten egentlig å måtte programmet. 1703 01:17:53,080 --> 01:17:55,380 >> Hva er vår argc i dette tilfellet? 1704 01:17:55,380 --> 01:17:58,968 Hvor mange argumenter har vi? 1705 01:17:58,968 --> 01:17:59,634 PUBLIKUM: Tre? 1706 01:17:59,634 --> 01:18:01,200 ANDI PENG: Vi har tre, akkurat. 1707 01:18:01,200 --> 01:18:05,030 Så det er veldig intuitivt å bare tenke at det er bare 1708 01:18:05,030 --> 01:18:06,290 den infile og outfile. 1709 01:18:06,290 --> 01:18:10,190 Men vet at det fysiske navn program du kjører teller som én. 1710 01:18:10,190 --> 01:18:13,220 Så i dette tilfellet, er argc faktisk tre. 1711 01:18:13,220 --> 01:18:15,860 Hva med, hva er argv 0? 1712 01:18:15,860 --> 01:18:18,180 Husk, alle kommandolinjeargumentene 1713 01:18:18,180 --> 01:18:20,500 ble lagret i en rekke strenger. 1714 01:18:20,500 --> 01:18:24,140 Så hvis jeg prøver å få tilgang til det, hva ville argv brakett 0 gi meg? 1715 01:18:24,140 --> 01:18:25,364 >> PUBLIKUM: [uhørlig]. 1716 01:18:25,364 --> 01:18:26,155 ANDI PENG: Nettopp. 1717 01:18:26,155 --> 01:18:28,550 Det ville gi meg dot slash kopi, fordi det er 1718 01:18:28,550 --> 01:18:31,070 den 0. element, første element i matrisen min. 1719 01:18:31,070 --> 01:18:33,236 Hva om argv en? 1720 01:18:33,236 --> 01:18:33,945 >> PUBLIKUM: INFILE. 1721 01:18:33,945 --> 01:18:35,070 ANDI PENG: INFILE, akkurat. 1722 01:18:35,070 --> 01:18:36,272 Hva om argv 2? 1723 01:18:36,272 --> 01:18:37,022 PUBLIKUM: utfil. 1724 01:18:37,022 --> 01:18:38,190 ANDI PENG: outfile. 1725 01:18:38,190 --> 01:18:39,290 Dette er litt vanskelig nå. 1726 01:18:39,290 --> 01:18:42,630 Hva tror dere argv 3 kommer til å være å gi meg 1727 01:18:42,630 --> 01:18:45,522 hvis jeg prøvde å skrive det ut? 1728 01:18:45,522 --> 01:18:48,260 >> PUBLIKUM: [uhørbart]? 1729 01:18:48,260 --> 01:18:50,164 >> ANDI PENG: Hadde du en hånd opp? 1730 01:18:50,164 --> 01:18:50,663 Yeah. 1731 01:18:50,663 --> 01:18:51,550 >> PUBLIKUM: Et alternativ. 1732 01:18:51,550 --> 01:18:52,341 >> ANDI PENG: Nettopp. 1733 01:18:52,341 --> 01:18:55,440 Så husk på forelesning at vi har ved enden av et løp noe 1734 01:18:55,440 --> 01:18:56,640 kalt en null terminator? 1735 01:18:56,640 --> 01:18:58,890 Vi vil komme inn i dette også videre på i klassen. 1736 01:18:58,890 --> 01:19:02,472 Men vet at i notasjon, måten datamaskinen 1737 01:19:02,472 --> 01:19:04,430 vet at det er slutten i matrisen er at den 1738 01:19:04,430 --> 01:19:07,310 setter noe som kalles en null terminator eller en dash null. 1739 01:19:07,310 --> 01:19:12,047 >> Så hvis du prøver å få tilgang argv 3, du kommer til å treffe denne dash 0. 1740 01:19:12,047 --> 01:19:13,630 Dette er enda mer av et lurespørsmål. 1741 01:19:13,630 --> 01:19:17,020 Hva om argv 4? 1742 01:19:17,020 --> 01:19:20,920 Så dette er fortid null terminator, forbi grensene for vår array. 1743 01:19:20,920 --> 01:19:24,380 Hva tror du kommer til å skje når vi prøver å gjøre det? 1744 01:19:24,380 --> 01:19:25,842 >> PUBLIKUM: [uhørbart]? 1745 01:19:25,842 --> 01:19:26,550 ANDI PENG: Sorry? 1746 01:19:26,550 --> 01:19:28,025 Si at en litt høyere? 1747 01:19:28,025 --> 01:19:29,086 >> PUBLIKUM: [uhørlig]. 1748 01:19:29,086 --> 01:19:29,710 ANDI PENG: Ja. 1749 01:19:29,710 --> 01:19:32,420 Som er navnet på den Området du vil mest sannsynlig få. 1750 01:19:32,420 --> 01:19:36,610 Men vet at argv 4-- som lar deg tilgang 1751 01:19:36,610 --> 01:19:38,610 steder i din datamaskin minne som du virkelig 1752 01:19:38,610 --> 01:19:41,650 bør ikke være rørende, fordi akkurat nå vet du hva argv er. 1753 01:19:41,650 --> 01:19:46,220 Du vet at det er en rekke størrelse 3 som har dot kopi, infile og outfile. 1754 01:19:46,220 --> 01:19:50,200 >> Hvis du prøver å gå så langt utover det at du er forbi null terminator, 1755 01:19:50,200 --> 01:19:53,050 datamaskinen din har sannsynligvis lagret noe i argv 4. 1756 01:19:53,050 --> 01:19:55,790 Og du bør ikke være adgang til argv 4, 1757 01:19:55,790 --> 01:19:58,130 fordi du har en fil kabinett og du er bare 1758 01:19:58,130 --> 01:19:59,790 adgang til disse tre hyller. 1759 01:19:59,790 --> 01:20:02,870 Men hvis du prøver å nå langt utover sokkelen av hvor du får lov, 1760 01:20:02,870 --> 01:20:04,930 du kommer til å begynne å rote med andre ting i datamaskinens minne. 1761 01:20:04,930 --> 01:20:06,690 Det kommer til å bli virkelig, virkelig ille. 1762 01:20:06,690 --> 01:20:07,440 Så bare vet det. 1763 01:20:07,440 --> 01:20:10,370 Vær svært forsiktig at du ikke bare tilfeldig start 1764 01:20:10,370 --> 01:20:14,772 tilgang til elementer i en matrise som var ikke i hva du ønsket å lage. 1765 01:20:14,772 --> 01:20:17,114 Jepp. 1766 01:20:17,114 --> 01:20:18,430 >> OK. 1767 01:20:18,430 --> 01:20:26,360 Så vi kommer til å gjøre en annen terminal eksempel her. 1768 01:20:26,360 --> 01:20:27,300 OK. 1769 01:20:27,300 --> 01:20:29,900 Så Rob raskt i forelesning den andre dagen gikk 1770 01:20:29,900 --> 01:20:35,040 gjennom dette eksempel, hvor han hadde int main int argc streng argv 1771 01:20:35,040 --> 01:20:39,090 braketter, som er å fortelle meg at jeg er kommer til å ha kommandolinjeargumentene. 1772 01:20:39,090 --> 01:20:41,860 >> Han har, hvis argc lik lik 2-- huske, 1773 01:20:41,860 --> 01:20:45,070 tilsvarer equals betyr sammenligning. 1774 01:20:45,070 --> 01:20:47,980 Hvis det er lik 2, da er jeg gikk i trykken hallo, 1775 01:20:47,980 --> 01:20:51,190 uansett først element i matrisen er. 1776 01:20:51,190 --> 01:20:54,100 Else print, hallo verden. 1777 01:20:54,100 --> 01:20:56,300 Hva er dette kommer til skje egentlig? 1778 01:20:56,300 --> 01:21:00,570 Kan noen bare forklare i Engelsk hva dette programmet gjør? 1779 01:21:00,570 --> 01:21:01,272 Yeah. 1780 01:21:01,272 --> 01:21:08,160 >> PUBLIKUM: Hvis noen har skrevet i en kommando og sa at deres fornavn og etternavn, 1781 01:21:08,160 --> 01:21:12,096 det vil ikke bare skrive ut første og si hei, 1782 01:21:12,096 --> 01:21:14,090 hva fornavnet ditt er. 1783 01:21:14,090 --> 01:21:15,410 >> ANDI PENG: OK, la oss kjøre den. 1784 01:21:15,410 --> 01:21:22,470 Så for eksempel, hvis jeg skulle gjøre denne filen gjør hallo to-- hallo 1785 01:21:22,470 --> 01:21:24,500 to-- hva vil du jeg skal skrive? 1786 01:21:24,500 --> 01:21:25,900 >> PUBLIKUM: Først og etternavn. 1787 01:21:25,900 --> 01:21:27,280 >> ANDI PENG: Fornavn og etternavn? 1788 01:21:27,280 --> 01:21:28,180 Spaces? 1789 01:21:28,180 --> 01:21:29,690 >> PUBLIKUM: Yeah. 1790 01:21:29,690 --> 01:21:33,490 >> ANDI PENG: Kan noen fortelle meg akkurat nå, hva er argc? 1791 01:21:33,490 --> 01:21:35,630 Akkurat der? 1792 01:21:35,630 --> 01:21:36,290 Oops, beklager. 1793 01:21:36,290 --> 01:21:37,920 La meg gå tilbake. 1794 01:21:37,920 --> 01:21:40,740 Hvor mange kommandolinjeargumentene are-- dere kan egentlig ikke se. 1795 01:21:40,740 --> 01:21:43,760 Men jeg skal prøve å zoome inn. 1796 01:21:43,760 --> 01:21:44,290 Jeg prøver. 1797 01:21:44,290 --> 01:21:45,414 Ja, det er tre, ikke sant? 1798 01:21:45,414 --> 01:21:48,750 Det er dot slash hallo, det er Andi, og det er Peng. 1799 01:21:48,750 --> 01:21:51,870 >> Så hva tror dere dette Programmet skal skrive ut? 1800 01:21:51,870 --> 01:21:55,550 1801 01:21:55,550 --> 01:21:56,060 Oh. 1802 01:21:56,060 --> 01:21:57,120 Åh unnskyld. 1803 01:21:57,120 --> 01:21:57,810 Feil navn. 1804 01:21:57,810 --> 01:22:03,630 1805 01:22:03,630 --> 01:22:06,130 Det å skrive ut, hallo verden. 1806 01:22:06,130 --> 01:22:09,603 Er det noen som ønsker å forklare hvorfor det skjer? 1807 01:22:09,603 --> 01:22:10,103 Yeah? 1808 01:22:10,103 --> 01:22:11,019 >> PUBLIKUM: [uhørlig]. 1809 01:22:11,019 --> 01:22:14,439 1810 01:22:14,439 --> 01:22:15,230 ANDI PENG: Nettopp. 1811 01:22:15,230 --> 01:22:19,940 Så her, er betinget er, hvis argc tilsvarer tilsvarer to. 1812 01:22:19,940 --> 01:22:23,650 Så bare i tilfelle at det er to kommandolinjeargumenter. 1813 01:22:23,650 --> 01:22:25,850 Så jeg kommer til å skrive ut, hallo, det er uansett. 1814 01:22:25,850 --> 01:22:28,210 Men ellers, jeg kommer til å skrive ut bare, hallo verden. 1815 01:22:28,210 --> 01:22:30,040 Så ikke noen ønsker å gi meg et eksempel 1816 01:22:30,040 --> 01:22:35,050 på hvordan jeg ville være i stand til å faktisk få det til å skrive ut verdien av argv en? 1817 01:22:35,050 --> 01:22:38,600 >> Hva skulle jeg ha for å legge inn her? 1818 01:22:38,600 --> 01:22:39,840 Bare en ting, ikke sant? 1819 01:22:39,840 --> 01:22:42,900 Fordi dot hei til allerede teller som det første argumentet. 1820 01:22:42,900 --> 01:22:43,930 Jeg har bare ett mer. 1821 01:22:43,930 --> 01:22:46,470 Så dot hei hvis jeg bare gjøre Andi. 1822 01:22:46,470 --> 01:22:47,270 Hei, Andi. 1823 01:22:47,270 --> 01:22:49,186 Har alle forstår hvorfor det skjer? 1824 01:22:49,186 --> 01:22:49,602 Yeah. 1825 01:22:49,602 --> 01:22:52,500 >> PUBLIKUM: Så mellomrommet mellom kommandoen line-- er det [uhørbart]? 1826 01:22:52,500 --> 01:22:56,247 1827 01:22:56,247 --> 01:22:56,830 ANDI PENG: No. 1828 01:22:56,830 --> 01:23:03,810 Slik at plassen i en kommandolinje argument, x, for å fortelle datamaskinen 1829 01:23:03,810 --> 01:23:06,820 at dette er starten av en ny streng. 1830 01:23:06,820 --> 01:23:11,130 Så streng argv her-- det butikker alle dine kommandoer argumentene 1831 01:23:11,130 --> 01:23:13,110 i strenger. 1832 01:23:13,110 --> 01:23:17,420 Og så plassen i kommandolinjen argument-- alt som gjør er å fortelle deg, 1833 01:23:17,420 --> 01:23:21,030 dette er ved enden av en streng og det er på tide å gå videre til en annen. 1834 01:23:21,030 --> 01:23:21,990 >> Yeah. 1835 01:23:21,990 --> 01:23:23,530 Dette er ganske viktig for din PSet, fordi du er 1836 01:23:23,530 --> 01:23:24,613 kommer til å teste disse. 1837 01:23:24,613 --> 01:23:29,300 Så er det noen som har noen spørsmål om dette? 1838 01:23:29,300 --> 01:23:30,016 Ok kult. 1839 01:23:30,016 --> 01:23:30,515 Yeah? 1840 01:23:30,515 --> 01:23:35,008 >> PUBLIKUM: Så grunnen til at du ville sette heltall argument calc stedet 1841 01:23:35,008 --> 01:23:40,059 av [uhørbart] ville være når du vil å skrive inn tilleggsinformasjon til 1842 01:23:40,059 --> 01:23:41,030 [Uhørbart]? 1843 01:23:41,030 --> 01:23:42,090 >> ANDI PENG: Ja, akkurat. 1844 01:23:42,090 --> 01:23:45,370 Noen programmer krever at du å legge inn en kommandolinje argument 1845 01:23:45,370 --> 01:23:47,732 som passerer inn og som bruker det. 1846 01:23:47,732 --> 01:23:49,035 Yeah. 1847 01:23:49,035 --> 01:23:50,410 PUBLIKUM: Så hva om [uhørbart]? 1848 01:23:50,410 --> 01:23:55,440 1849 01:23:55,440 --> 01:23:58,870 >> ANDI PENG: Vel, hva gjør jeg å endre deretter i mitt program? 1850 01:23:58,870 --> 01:23:59,870 >> PUBLIKUM: Bare tre. 1851 01:23:59,870 --> 01:24:12,460 1852 01:24:12,460 --> 01:24:15,020 >> ANDI PENG: Hvorfor er det skjer, tror du? 1853 01:24:15,020 --> 01:24:18,940 >> PUBLIKUM: Fordi [uhørbart]. 1854 01:24:18,940 --> 01:24:22,370 >> PUBLIKUM: Du må endre det til 2 [uhørbart]. 1855 01:24:22,370 --> 01:24:23,484 >> PUBLIKUM: 1 og 2. 1856 01:24:23,484 --> 01:24:24,650 ANDI PENG: 1 og 2, nøyaktig. 1857 01:24:24,650 --> 01:24:29,150 Så i dette tilfellet, ville du sannsynligvis ønsker å ha to printf statements-- 1858 01:24:29,150 --> 01:24:32,601 en som trykt argv 1 og den som skrives argv to. 1859 01:24:32,601 --> 01:24:33,100 Her. 1860 01:24:33,100 --> 01:24:34,516 Jeg kan faktisk gjøre det virkelig rask. 1861 01:24:34,516 --> 01:24:46,720 1862 01:24:46,720 --> 01:24:47,320 Det du går. 1863 01:24:47,320 --> 01:24:48,287 Oh. 1864 01:24:48,287 --> 01:24:49,370 Ikke helt det du ville. 1865 01:24:49,370 --> 01:24:52,590 Men hvis dere rotet rundt med formateringen, vil den komme ut. 1866 01:24:52,590 --> 01:24:54,981 Yeah. 1867 01:24:54,981 --> 01:24:55,480 Kjølig. 1868 01:24:55,480 --> 01:24:57,670 Jeg vet at vi er en litt kort tid. 1869 01:24:57,670 --> 01:25:02,469 Men jeg skal bare raskt tilbringe en par minutter går gjennom helpful-- 1870 01:25:02,469 --> 01:25:03,760 PUBLIKUM: Du har to minutter. 1871 01:25:03,760 --> 01:25:05,010 ANDI PENG: Jeg har to minutter? 1872 01:25:05,010 --> 01:25:06,340 Takk. 1873 01:25:06,340 --> 01:25:09,180 Noen raske PSet tips. 1874 01:25:09,180 --> 01:25:13,100 Så for denne PSet, jeg anbefaler, som jeg sa, til alle lese spec. 1875 01:25:13,100 --> 01:25:16,804 Du skal skrive tre programs-- én kalt initials.c, en som heter caesar.c, 1876 01:25:16,804 --> 01:25:17,720 en som heter vigenere.c. 1877 01:25:17,720 --> 01:25:20,465 1878 01:25:20,465 --> 01:25:22,340 Noen viktige tips som dere virkelig ønsker 1879 01:25:22,340 --> 01:25:25,040 å holde i mind-- så det er denne funksjonen 1880 01:25:25,040 --> 01:25:27,770 kalt atoi-- som jeg liker å si, en trois. 1881 01:25:27,770 --> 01:25:29,520 Uklart om det er faktisk hvordan du sier det. 1882 01:25:29,520 --> 01:25:32,510 Men alt det gjør, det er å legge inn. 1883 01:25:32,510 --> 01:25:34,320 Den konverterer en streng til en int. 1884 01:25:34,320 --> 01:25:37,490 Så en representerer ASCII til jeg heltall. 1885 01:25:37,490 --> 01:25:40,310 Det er bare å konvertere ASCII Verdiene til heltalls verdier. 1886 01:25:40,310 --> 01:25:44,510 Så husk argv, matrisen som lagrer alle dine kommandoer linje arguments-- 1887 01:25:44,510 --> 01:25:46,300 den lagrer dem alle som strenger. 1888 01:25:46,300 --> 01:25:50,010 Og så hvis du ønsker å være i stand til å har en av dem til å bli et helt tall, 1889 01:25:50,010 --> 01:25:52,750 du kommer til å ha å bruke denne verdien her. 1890 01:25:52,750 --> 01:25:56,690 >> Modulo, som vi dekket tidligere i klassen i dag, 1891 01:25:56,690 --> 01:25:59,550 kan du ha den Resten av det du har. 1892 01:25:59,550 --> 01:26:03,620 Så hvis vi har virkelig, virkelig store tall i Caesar, 1893 01:26:03,620 --> 01:26:06,117 hva om vi har slutten av en rekke Vigenère? 1894 01:26:06,117 --> 01:26:08,450 Hvordan har du tenkt å være i stand å få det til å bryte rundt? 1895 01:26:08,450 --> 01:26:11,330 Hvis jeg treffer z og jeg vil ha det å gå tilbake til en, 1896 01:26:11,330 --> 01:26:13,650 hvordan skal jeg få at for å vikle rundt? 1897 01:26:13,650 --> 01:26:15,960 Sannsynligvis vil bruke modulo der inne et sted. 1898 01:26:15,960 --> 01:26:19,190 >> Dernest, bla rundt biblioteket. ctype.h. 1899 01:26:19,190 --> 01:26:20,680 Det er et nytt bibliotek vi har. 1900 01:26:20,680 --> 01:26:25,270 Du finner en rekke virkelig, virkelig nyttig functions-- isupper, islower, 1901 01:26:25,270 --> 01:26:27,681 toupper, tolower, isalpha, et cetera. 1902 01:26:27,681 --> 01:26:30,680 Alle funksjoner som vil være svært nyttig når du prøver å finne ut, 1903 01:26:30,680 --> 01:26:33,780 er dette tegnet en liten bokstav? 1904 01:26:33,780 --> 01:26:35,730 Hvordan konverterer jeg dette strengen til store bokstaver? 1905 01:26:35,730 --> 01:26:38,146 Alle disse tingene vil være veldig, svært nyttig for din PSet. 1906 01:26:38,146 --> 01:26:42,720 1907 01:26:42,720 --> 01:26:45,500 OK. 1908 01:26:45,500 --> 01:26:49,644 >> Kontortid i kveld er 08:00 til 11.00 i TEAL klasserommet i morgen 1909 01:26:49,644 --> 01:26:51,310 samt onsdag og torsdag kveld. 1910 01:26:51,310 --> 01:26:53,280 Arbeidstid er i commons. 1911 01:26:53,280 --> 01:26:56,180 Svært foreslår dere alle komme i gang med en gang, 1912 01:26:56,180 --> 01:27:00,490 fordi du ikke ønsker å være at gutt som torsdag kveld har problemer 1913 01:27:00,490 --> 01:27:03,870 sender PSet og liker, jeg vet ikke hva jeg skal gjøre. 1914 01:27:03,870 --> 01:27:05,870 Jeg begynte, jeg er ferdig, har jeg sendt inn. 1915 01:27:05,870 --> 01:27:09,737 Prøv å gi deg selv litt rom, fordi i alltid oppstå kodeproblemer. 1916 01:27:09,737 --> 01:27:11,570 Du ønsker å være sikker at du gir deg selv 1917 01:27:11,570 --> 01:27:14,810 mye tid til å være i stand å fullføre psets. 1918 01:27:14,810 --> 01:27:15,310 Kjølig. 1919 01:27:15,310 --> 01:27:16,720 Jeg skal henge rundt her. 1920 01:27:16,720 --> 01:27:18,226 >> PUBLIKUM: Er dette nettet allerede? 1921 01:27:18,226 --> 01:27:20,850 ANDI PENG: Jeg vet ikke om det er online allerede, men det vil bli. 1922 01:27:20,850 --> 01:27:23,500 Jeg skal henge rundt her hvis noen har noen spørsmål allerede. 1923 01:27:23,500 --> 01:27:25,390 Takk for at du kom. 1924 01:27:25,390 --> 01:27:27,105