1 00:00:00,000 --> 00:00:02,742 >> [MUSIK SPELA] 2 00:00:02,742 --> 00:00:05,030 3 00:00:05,030 --> 00:00:09,090 >> ANDI Peng: Detta är CS50, och Välkommen till vecka två avsnitt. 4 00:00:09,090 --> 00:00:11,740 Detta är faktiskt medan vecka två av våra class-- faktiskt, 5 00:00:11,740 --> 00:00:14,550 den första veckan har vi haft avsnitt. 6 00:00:14,550 --> 00:00:18,897 Handuppräckning, hur många av er alla kom till super avsnittet i förra veckan? 7 00:00:18,897 --> 00:00:19,480 OK, det är OK. 8 00:00:19,480 --> 00:00:20,020 Det är ok. 9 00:00:20,020 --> 00:00:23,110 Hur många av er såg super avsnitt förra veckan? 10 00:00:23,110 --> 00:00:23,610 OK. 11 00:00:23,610 --> 00:00:25,702 Och ni gjorde bra på problem ställa in ett? 12 00:00:25,702 --> 00:00:28,660 Så jag kommer att ta det att vi har ett gäng riktigt intelligenta barn 13 00:00:28,660 --> 00:00:32,310 i denna klass och saker och ting kommer att 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 ska vi bara gå till kort gå över dagordningen för idag. 18 00:00:41,090 --> 00:00:42,700 Vi pratar om kurs logistik. 19 00:00:42,700 --> 00:00:45,480 En hel del av er förmodligen har frågor om 20 00:00:45,480 --> 00:00:46,920 hur saker och ting fungerar i den här kursen. 21 00:00:46,920 --> 00:00:47,897 Vi kommer att besvara dem. 22 00:00:47,897 --> 00:00:49,730 Vi kommer att kortfattat gå över loopar i fallet 23 00:00:49,730 --> 00:00:51,410 någon av er missade super avsnitt. 24 00:00:51,410 --> 00:00:53,240 Vi pratar om ASCII kartläggning. 25 00:00:53,240 --> 00:00:56,180 Vi pratar om matriser, funktioner, kommandoradsargument. 26 00:00:56,180 --> 00:01:00,210 Och slutligen, vad ni förmodligen alla verkligen vill vara här för att lära sig om, 27 00:01:00,210 --> 00:01:01,270 är din pset2. 28 00:01:01,270 --> 00:01:04,209 Vi kommer att ha några trevliga trick och tips för hur man gö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 Också det andra, vi har massor av godis här. 32 00:01:11,450 --> 00:01:13,583 Alla som gillar godis, bara komma upp hit. 33 00:01:13,583 --> 00:01:14,430 Ta några. 34 00:01:14,430 --> 00:01:15,100 Jag har ett gäng. 35 00:01:15,100 --> 00:01:16,390 Vi har en ton på kontoret. 36 00:01:16,390 --> 00:01:18,230 Jag vill verkligen inte att äta godis hela dagen. 37 00:01:18,230 --> 00:01:20,300 Ni borde äta allt godis, eftersom jag tog den här för er. 38 00:01:20,300 --> 00:01:20,990 Bara äta godis. 39 00:01:20,990 --> 00:01:24,080 Det kommer att finnas godis varje avsnitt. 40 00:01:24,080 --> 00:01:25,330 >> Så först, vem är jag? 41 00:01:25,330 --> 00:01:27,080 Mitt namn är Andi Peng. 42 00:01:27,080 --> 00:01:30,270 Jag är chef TA CS50 här på Yale. 43 00:01:30,270 --> 00:01:32,540 Och förutom det kommer jag också be-- 44 00:01:32,540 --> 00:01:35,600 Om någon skulle like-- din löpning kompis, din axel att gråta på. 45 00:01:35,600 --> 00:01:39,140 Om natten innan din pset due, du har ingen aning om vad som händer, 46 00:01:39,140 --> 00:01:40,080 hit me up. 47 00:01:40,080 --> 00:01:42,770 Vi kommer att ömka tillsammans, et cetera. 48 00:01:42,770 --> 00:01:46,100 Bara vet att jag är här som en resurs för dig som frontlinjen 49 00:01:46,100 --> 00:01:51,830 hjälpa er räkna ut hur att lösa problem i CS50 och utanför. 50 00:01:51,830 --> 00:01:54,590 >> Min e-post är andi.peng@yale.edu. 51 00:01:54,590 --> 00:01:58,390 Jag ska också skicka ut en enskild e-post med mitt telefonnummer i det 52 00:01:58,390 --> 00:02:01,860 så att inte alla på Internet kan se mitt telefonnummer. 53 00:02:01,860 --> 00:02:03,640 Tveka inte att ringa mig när som helst. 54 00:02:03,640 --> 00:02:07,510 Allvarligt, är min telefon oftast knutna till min hand. 55 00:02:07,510 --> 00:02:10,240 Jag kan inte svara inom ett par minuter. 56 00:02:10,240 --> 00:02:11,984 Jag kan inte svara inom ett par timmar. 57 00:02:11,984 --> 00:02:14,400 Men jag kan garantera dig, om du e-maila mig, om du kallar mig, 58 00:02:14,400 --> 00:02:17,404 text mig, kommer jag att svara inom 24 timmar. 59 00:02:17,404 --> 00:02:19,820 Ofta kommer jag svara före att eftersom jag förstår 60 00:02:19,820 --> 00:02:23,900 att alla har fått en del problem, och du vill att dina svar 61 00:02:23,900 --> 00:02:26,110 besvaras mycket snabbt. 62 00:02:26,110 --> 00:02:28,945 >> Men om du ringer me 30 minuter innan 63 00:02:28,945 --> 00:02:31,570 den bit som beror torsdag night-- vara, Andi, hjälp mig, 64 00:02:31,570 --> 00:02:35,380 Jag har inte started-- jag kan ge du att axel att gråta på. 65 00:02:35,380 --> 00:02:41,520 Men det kan vara dags att tänka på hur man inte ska göra det nästa gång. 66 00:02:41,520 --> 00:02:44,040 OK. 67 00:02:44,040 --> 00:02:44,944 Oj. 68 00:02:44,944 --> 00:02:45,850 Hur går jag tillbaka? 69 00:02:45,850 --> 00:02:48,140 Det går vi. 70 00:02:48,140 --> 00:02:52,310 >> Så i den här kursen, vi har en ton stöd för alla. 71 00:02:52,310 --> 00:02:54,640 Förutom att bara sektioner här, som du 72 00:02:54,640 --> 00:02:57,000 varje vecka får spendera 90 underbara minuter med mig, 73 00:02:57,000 --> 00:02:58,330 Vi har också kontorstid. 74 00:02:58,330 --> 00:03:01,021 Hur många av er har redan varit kontorstid för att få hjälp? 75 00:03:01,021 --> 00:03:01,520 Bra. 76 00:03:01,520 --> 00:03:05,700 Det är riktigt bra att se, eftersom vi har en personalstyrka på över 45 resebyråerna och certifikatutfärdare 77 00:03:05,700 --> 00:03:11,780 utbildad för denna kurs som är här för att hjälpa er med era psets. 78 00:03:11,780 --> 00:03:14,580 >> Måndagar de är hålls i TEAL klassrum i 17 Hill House här 79 00:03:14,580 --> 00:03:15,350 vid Yale. 80 00:03:15,350 --> 00:03:17,349 Tisdagar och torsdagar, de är hålls i commons. 81 00:03:17,349 --> 00:03:20,010 8:00 till 11:00 ganska mycket varje vardag. 82 00:03:20,010 --> 00:03:21,620 Kom in, kom ut. 83 00:03:21,620 --> 00:03:24,030 Eventuella problem, nej problem-- just kommit in, 84 00:03:24,030 --> 00:03:26,650 och sedan ska vi hjälpa dig med det. 85 00:03:26,650 --> 00:03:31,640 >> För det andra, förutom att kontorstid och sektioner, har vi också shorts. 86 00:03:31,640 --> 00:03:35,930 Har någon någonsin sett ett par av shorts eller genomgångar i videor 87 00:03:35,930 --> 00:03:36,750 på hemsidan? 88 00:03:36,750 --> 00:03:37,250 OK. 89 00:03:37,250 --> 00:03:39,510 Så de är riktigt, riktigt bra. 90 00:03:39,510 --> 00:03:42,470 Vår härliga Harvard produktion laget där borta på den skolan 91 00:03:42,470 --> 00:03:47,910 norrut, har de filmade och producerade dessa otroliga genomgång videor. 92 00:03:47,910 --> 00:03:52,290 >> De tar dig steg för steg genom hur man ska gå om att lösa ett problem. 93 00:03:52,290 --> 00:03:56,340 Ofta, om du är förvirrad om ett enkelt koncept, en sällsam begrepp, 94 00:03:56,340 --> 00:03:59,780 ta en titt, eftersom vi förmodligen en kort om det någonstans på vår hemsida. 95 00:03:59,780 --> 00:04:03,800 Och det är oftast en stor resurs att leta efter när du först 96 00:04:03,800 --> 00:04:06,510 förlorat på hur man hanterar ett problem. 97 00:04:06,510 --> 00:04:09,750 >> För det tredje har vi också study50 och reference50. 98 00:04:09,750 --> 00:04:15,650 Så studera 50 på webbplats är bara en länk. 99 00:04:15,650 --> 00:04:21,500 Det är, tror jag, study.cs50.net eller något sådant. 100 00:04:21,500 --> 00:04:22,860 Bara Googla det. 101 00:04:22,860 --> 00:04:24,229 Vi har massor av bilder som framställts. 102 00:04:24,229 --> 00:04:26,770 Vi har massor av shorts och walkthroughs-- saker hela kompilerade 103 00:04:26,770 --> 00:04:31,070 mycket trevligt och snyggt för er alla att bläddra igenom, ser några begrepp 104 00:04:31,070 --> 00:04:32,860 att du är förvirrad om. 105 00:04:32,860 --> 00:04:35,920 Det skulle förmodligen vara täckt därborta i study50. 106 00:04:35,920 --> 00:04:37,640 >> Reference50-- liknande. 107 00:04:37,640 --> 00:04:41,510 Vi har en hel del olika anteckningar lätt tillgängliga för ditt förfogande. 108 00:04:41,510 --> 00:04:44,450 Och slutligen, har vi vad som är kallas CS50 Diskutera, 109 00:04:44,450 --> 00:04:48,082 ett forum där, om kvällen innan du gör dina problem, säger, 110 00:04:48,082 --> 00:04:49,880 du har en fråga. 111 00:04:49,880 --> 00:04:52,340 Logga in på CS50 Diskutera. 112 00:04:52,340 --> 00:04:53,190 Ställ din fråga. 113 00:04:53,190 --> 00:04:55,820 Och sedan något av hundreds-- kanske thousands-- av kamrater 114 00:04:55,820 --> 00:04:57,960 tar denna klass på nätet kommer att logga in. 115 00:04:57,960 --> 00:05:01,182 Och kanske någon kan få ditt svar innan TA burk. 116 00:05:01,182 --> 00:05:03,390 Det är i huvudsak bara en online-forum som vi kan alla 117 00:05:03,390 --> 00:05:04,556 använder för att diskutera våra problem. 118 00:05:04,556 --> 00:05:06,483 Det är coolt. 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å problemet sätter. 122 00:05:13,220 --> 00:05:17,840 Vi är på väg rätt i tjock problem ställa in två. 123 00:05:17,840 --> 00:05:20,570 Många av oss har redan kämpade genom problembild en. 124 00:05:20,570 --> 00:05:24,460 Vi vet redan att kanske väntar för den sista natten för att göra din pset 125 00:05:24,460 --> 00:05:28,170 är inte det smartaste man kan göra i CS50. 126 00:05:28,170 --> 00:05:32,380 >> Tips och tips i huvudsak för framgång läsa hela spec. 127 00:05:32,380 --> 00:05:36,270 Hur många av er har redan läs spec för pset 2? 128 00:05:36,270 --> 00:05:36,770 OK. 129 00:05:36,770 --> 00:05:39,840 Det är en fast mängd. 130 00:05:39,840 --> 00:05:43,210 Jag vet att ni har förmodligen erkänt nu specifikationer är riktigt långt. 131 00:05:43,210 --> 00:05:45,700 De är riktigt, riktigt länge. 132 00:05:45,700 --> 00:05:49,630 >> Det är verkligen svårt att läsa varje rad av det noggrant ord för ord. 133 00:05:49,630 --> 00:05:52,780 Du vill bara skumma där Det säger åt dig att göra något. 134 00:05:52,780 --> 00:05:54,459 Jag kan garantera er, gör inte det. 135 00:05:54,459 --> 00:05:56,750 Om du gör det, är du förmodligen kommer att sakna någonstans 136 00:05:56,750 --> 00:05:58,458 där det talar om för dig hur man startar ett problem 137 00:05:58,458 --> 00:06:01,140 eller det talar om för dig vad du ska namn ditt problem eller det talar om för dig, 138 00:06:01,140 --> 00:06:03,720 Detta är förmodligen det bästa sättet att börja göra ditt problem. 139 00:06:03,720 --> 00:06:05,050 Och då kommer du att gå förlorade. 140 00:06:05,050 --> 00:06:08,219 >> När du försöker läsa din spec halvvägs igenom, 141 00:06:08,219 --> 00:06:10,510 en hel del av den viktiga information-- att du inte 142 00:06:10,510 --> 00:06:12,260 kommer att kunna verkligen tillgång. 143 00:06:12,260 --> 00:06:13,219 Så läs hela spec. 144 00:06:13,219 --> 00:06:15,468 Försök att läsa hela spec innan du kommer till avsnittet, 145 00:06:15,468 --> 00:06:17,360 för då, när vi tala om pset, 146 00:06:17,360 --> 00:06:21,070 vi alla kan ha en idé om vad som händer på. 147 00:06:21,070 --> 00:06:25,169 >> Det andra är detta ett koncept att jag ska vilja referera 148 00:06:25,169 --> 00:06:26,710 en hel del under kursens gång termin. 149 00:06:26,710 --> 00:06:30,070 Men i huvudsak möta oss halvvägs, eller hur? 150 00:06:30,070 --> 00:06:33,970 Mig, din TA och Jason som kurs manager och SCAZ som din professor 151 00:06:33,970 --> 00:06:37,120 och David som din professor och alla de andra härliga resebyråerna i den här kursen, 152 00:06:37,120 --> 00:06:39,830 assistenter i denna course-- Vi kommer att göra vårt bästa 153 00:06:39,830 --> 00:06:42,965 att se till att du är inställda upp för att lyckas i denna kurs. 154 00:06:42,965 --> 00:06:43,840 Vi kommer att hålla avsnitt. 155 00:06:43,840 --> 00:06:44,870 Vi kommer att hålla kontorstid. 156 00:06:44,870 --> 00:06:47,087 Vi kommer att svara i telefonen samtal, svara på dina e-postmeddelanden, 157 00:06:47,087 --> 00:06:49,670 göra allt vi kan för att göra att dina frågor besvaras. 158 00:06:49,670 --> 00:06:51,460 >> Men hjälpa oss också. 159 00:06:51,460 --> 00:06:52,450 Träffa oss halvvägs. 160 00:06:52,450 --> 00:06:56,040 Om du kommer till kontorstid inte har gått till avsnitt, inte 161 00:06:56,040 --> 00:07:02,060 efter att ha sett föreläsningarna, som inte har någon aning om vad som pågår, att se ut, hjälp mig. 162 00:07:02,060 --> 00:07:04,350 Jag kommer att se ut, ja, jag är ledsen. 163 00:07:04,350 --> 00:07:06,410 Det kan vara dags att låna som axel att gråta på, 164 00:07:06,410 --> 00:07:08,959 eftersom jag är inte säker vad jag kan göra för att hjälpa dig 165 00:07:08,959 --> 00:07:12,000 om du inte försöker att åtminstone hjälpa själv lite i början. 166 00:07:12,000 --> 00:07:12,910 Träffa oss halvvägs. 167 00:07:12,910 --> 00:07:15,020 Du vet, kom beredd att svara och få 168 00:07:15,020 --> 00:07:16,353 redo att engagera sig i materialet. 169 00:07:16,353 --> 00:07:19,342 Det gör saker så mycket enklare för alla inblandade. 170 00:07:19,342 --> 00:07:22,970 Ja, det är ganska mycket det. 171 00:07:22,970 --> 00:07:23,720 >> Betygssättning. 172 00:07:23,720 --> 00:07:29,250 Så på kursplanen, det är ganska djupgående om hur vi klass. 173 00:07:29,250 --> 00:07:32,440 Men i huvudsak fördelningen i detta är 50% av din klass 174 00:07:32,440 --> 00:07:34,530 kommer att vara de psets, som är härlig, eftersom det är 175 00:07:34,530 --> 00:07:37,400 där du spendera stora Majoriteten av din kurs tid på. 176 00:07:37,400 --> 00:07:39,854 Quizzes 40%, och din slutliga projektet kommer att vara 10%. 177 00:07:39,854 --> 00:07:42,520 Det kommer att finnas två frågesporter hela loppet av terminen. 178 00:07:42,520 --> 00:07:47,050 Jag tror att tid och datum är också noterat på kursplanen. 179 00:07:47,050 --> 00:07:49,210 >> Det sätt som vi kommer vara klassificera dina psets 180 00:07:49,210 --> 00:07:53,930 är att vi har i huvudsak fyra värderingar som vi tilldelar varje lönegrad. 181 00:07:53,930 --> 00:07:57,250 Vi har ett värde på tillämpningsområde, korrekthet, design och stil. 182 00:07:57,250 --> 00:08:01,530 Så som ni ser, det är den typen av vår formel för att beräkna psets. 183 00:08:01,530 --> 00:08:03,640 Tre vi ger mest vikt korrekthet, 184 00:08:03,640 --> 00:08:06,140 eftersom det självklart din coach ska testa i de fall 185 00:08:06,140 --> 00:08:08,480 att vi vill att det ska testa. 186 00:08:08,480 --> 00:08:11,000 >> Ni har alla check50 till ditt förfogande. 187 00:08:11,000 --> 00:08:13,730 Det är en mycket användbar funktion att ni kan alla 188 00:08:13,730 --> 00:08:17,560 ladda upp din kod till våra servrar, där vi kommer att kolla upp det åt dig. 189 00:08:17,560 --> 00:08:20,800 Och du har sett dem Frowny ansikten, smiley ansikten. 190 00:08:20,800 --> 00:08:22,119 De är riktigt, riktigt bra. 191 00:08:22,119 --> 00:08:23,910 Var inte det student som gillar försöker 192 00:08:23,910 --> 00:08:26,230 att hårdkoda in alla svar på dem. 193 00:08:26,230 --> 00:08:30,050 Jag har definitivt sett en pset där någon såg alla värden check50 194 00:08:30,050 --> 00:08:33,429 och de bara hårdkodad in-- om detta nummer, skriva ut det här numret. 195 00:08:33,429 --> 00:08:35,080 Om detta antal, skriva ut det numret. 196 00:08:35,080 --> 00:08:36,090 Gör inte det. 197 00:08:36,090 --> 00:08:39,360 >> Även om tekniskt check50 är korrekt, 198 00:08:39,360 --> 00:08:41,809 ditt sätt att lösa Problemet är inte korrekt. 199 00:08:41,809 --> 00:08:45,770 Så bara använda check50 sparsamt. 200 00:08:45,770 --> 00:08:48,497 Men också se till att du förstå hur det fungerar, 201 00:08:48,497 --> 00:08:50,580 programmet fungerar förutom check50, 202 00:08:50,580 --> 00:08:53,120 eftersom vi inte kan testa alla möjligt fall av check50. 203 00:08:53,120 --> 00:08:55,440 Vi kommer att testa några av dem. 204 00:08:55,440 --> 00:09:00,390 >> Design är i huvudsak hur väl utformad är din kod? 205 00:09:00,390 --> 00:09:04,150 Om du är kopierings klistra multipel rader kod många, många gånger. 206 00:09:04,150 --> 00:09:06,960 Kanske du inte har riktigt den bästa designen i koden. 207 00:09:06,960 --> 00:09:09,470 Kanske är det dags att lägga till att slingan. 208 00:09:09,470 --> 00:09:12,090 I huvudsak är det här bara alla om att försöka göra din kod, 209 00:09:12,090 --> 00:09:17,010 försöker skriva din kod så effektivt som möjligt så att ditt program körs 210 00:09:17,010 --> 00:09:19,630 så fort som möjligt. 211 00:09:19,630 --> 00:09:20,996 >> Slutligen har vi stil. 212 00:09:20,996 --> 00:09:24,360 Så stil är typ av en godtyckligt, subjektivt sikt. 213 00:09:24,360 --> 00:09:27,470 Jag vet att vi officiellt har en stil 50 guide för CS50, 214 00:09:27,470 --> 00:09:30,050 där det säger, åh, du bör ha ett utrymme här. 215 00:09:30,050 --> 00:09:32,220 Du bör typ av format koden på detta sätt. 216 00:09:32,220 --> 00:09:34,070 Du bör nämna saker på detta sätt. 217 00:09:34,070 --> 00:09:38,180 >> Jag bryr mig egentligen inte, per se, hur du väljer att styla din kod, 218 00:09:38,180 --> 00:09:39,840 precis så länge du stanna konsekvent. 219 00:09:39,840 --> 00:09:43,732 Till exempel, om du vill Lämna ett mellanslag efter fyra 220 00:09:43,732 --> 00:09:45,690 innan fyra loop, bara göra det varje gång. 221 00:09:45,690 --> 00:09:46,523 Inte typ av göra det. 222 00:09:46,523 --> 00:09:47,730 Gör inte det andra tider. 223 00:09:47,730 --> 00:09:51,046 Om du gillar att hålla lockigt hängslen utrymme på ett visst sätt, 224 00:09:51,046 --> 00:09:52,170 bara alltid göra det på det sättet. 225 00:09:52,170 --> 00:09:54,628 Inte typ av göra det någonstans här och någonstans inte där. 226 00:09:54,628 --> 00:09:57,010 När vi klassificera, det är verkligen svårt 227 00:09:57,010 --> 00:09:59,420 om jag har ingen aning om hur du formatera din kod, 228 00:09:59,420 --> 00:10:02,064 saker är knäppt och på sin plats. 229 00:10:02,064 --> 00:10:04,980 Om du bara hålla det konsekvent, är det mycket lättare för mig som större 230 00:10:04,980 --> 00:10:06,310 för att kunna läsa din kod. 231 00:10:06,310 --> 00:10:09,393 Det är mycket lättare för dig som student för att kunna titta igenom din kod 232 00:10:09,393 --> 00:10:11,720 och se vad som är fel med det slash varför det finns problem. 233 00:10:11,720 --> 00:10:15,740 Style är en av de enklaste saker ni kan göra för att få full poäng. 234 00:10:15,740 --> 00:10:18,770 I huvudsak, om du bara bryr sig, om du betalar fem minuter av uppmärksamhet 235 00:10:18,770 --> 00:10:22,760 till din kod varje vecka, bör du att få hela stilpoäng. 236 00:10:22,760 --> 00:10:26,020 >> Slutligen har vi vad som kallas multiplikatorn utrymme. 237 00:10:26,020 --> 00:10:28,890 Scope-- jag vet att det är en stor ord, särskilt i denna klass. 238 00:10:28,890 --> 00:10:31,030 Men omfattning, allt det betyder är att du försöker 239 00:10:31,030 --> 00:10:33,670 de psets till bästa förmåga. 240 00:10:33,670 --> 00:10:37,180 Om du sätter in tre av dina fyra problem 241 00:10:37,180 --> 00:10:39,460 och inte ens försöka sista, är du förmodligen 242 00:10:39,460 --> 00:10:41,630 kommer att förlora några poäng på omfattning. 243 00:10:41,630 --> 00:10:44,560 >> Även om du bara börja problemet, gör ditt bästa för att gå igenom det. 244 00:10:44,560 --> 00:10:47,691 Även om det inte fungerar, vrid den i, eftersom det visar och demonstrerar 245 00:10:47,691 --> 00:10:50,190 för oss att du försöker att du försökte problemet set 246 00:10:50,190 --> 00:10:51,430 det bästa av din förmåga. 247 00:10:51,430 --> 00:10:53,800 Och då kan vi ge dig full poäng för räckvidd. 248 00:10:53,800 --> 00:10:58,715 >> Scope är också mycket viktigt när vi tala om lägsta pset poäng droppe. 249 00:10:58,715 --> 00:11:02,010 Så under loppet av termin, ni har nio psets. 250 00:11:02,010 --> 00:11:05,340 Och vi faktiskt kommer att släppa den lägsta poäng av dessa nio, 251 00:11:05,340 --> 00:11:07,670 men bara om du har full omfattning poäng. 252 00:11:07,670 --> 00:11:11,120 >> Så om du vänder på ett ofullständigt pset, Tyvärr kan vi inte släppa det en, 253 00:11:11,120 --> 00:11:13,540 eftersom din räckvidd punkter inte slutförts. 254 00:11:13,540 --> 00:11:16,570 Så även om du har den fruktansvärda vecka där du är döende och du är sjuk 255 00:11:16,570 --> 00:11:20,040 eller din hund dör, din katt dör, och du överbelastad med läxor, 256 00:11:20,040 --> 00:11:21,074 bara försöka pset. 257 00:11:21,074 --> 00:11:22,490 Gör det till det bästa av din förmåga. 258 00:11:22,490 --> 00:11:23,840 Om det inte fungerar, det spelar ingen roll. 259 00:11:23,840 --> 00:11:24,506 Bara slå in. 260 00:11:24,506 --> 00:11:26,590 Åtminstone kan vi ge du pekar på ansträngning. 261 00:11:26,590 --> 00:11:28,510 >> A för insats i denna klass. 262 00:11:28,510 --> 00:11:30,170 Åtminstone lägsta poängen droppe för ansträngning. 263 00:11:30,170 --> 00:11:32,354 Så ja. 264 00:11:32,354 --> 00:11:33,270 Det är ganska mycket det. 265 00:11:33,270 --> 00:11:36,521 Finns det någon som har några frågor så långt på hur vi klass i klassen? 266 00:11:36,521 --> 00:11:37,187 Eller någon av dessa? 267 00:11:37,187 --> 00:11:41,220 Vilken som helst av dessa så far-- sektioner kontorstid? 268 00:11:41,220 --> 00:11:41,720 Häftigt. 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å det här är ett ämne som ingen man verkligen tycker om att prata om. 272 00:11:51,260 --> 00:11:53,084 Jag vet inte riktigt gillar att prata om det. 273 00:11:53,084 --> 00:11:55,250 Ni vill egentligen inte att höra mig tala om det. 274 00:11:55,250 --> 00:11:57,690 Men tyvärr, vi alla måste prata om det. 275 00:11:57,690 --> 00:12:00,110 David tillbringade 20 minuter en föreläsa prata om det. 276 00:12:00,110 --> 00:12:02,580 Och som är föremål akademisk hederlighet. 277 00:12:02,580 --> 00:12:08,110 >> Så vi alla här förmodligen har skrivit en essä gång i vår Yale karriär. 278 00:12:08,110 --> 00:12:11,800 Vi har förmodligen fått ett samtal där vi har blivit tillsagda att inte plagiera vår uppsats, 279 00:12:11,800 --> 00:12:13,940 eftersom detta arbete är inte vårt. 280 00:12:13,940 --> 00:12:18,109 I datavetenskap, vi har samma typ av koncept. 281 00:12:18,109 --> 00:12:20,150 Allt arbete som du skickar, all kod som du skriver 282 00:12:20,150 --> 00:12:21,900 bör vara kod som du har skrivit. 283 00:12:21,900 --> 00:12:24,280 Borde inte vara kod som du har kopieras från någon annanstans. 284 00:12:24,280 --> 00:12:26,777 Borde inte vara kod som du har googlade och plumsade i 285 00:12:26,777 --> 00:12:28,360 och du vet inte riktigt om det fungerar. 286 00:12:28,360 --> 00:12:32,440 Du har lite av en känsla av vad det gör, men inte riktigt. 287 00:12:32,440 --> 00:12:36,562 När du är osäker, i huvudsak, det bara vara rimliga. 288 00:12:36,562 --> 00:12:38,520 På vår kursplan, vi har en hel lista med saker 289 00:12:38,520 --> 00:12:40,560 vi ser som rimliga kontra inte rimligt. 290 00:12:40,560 --> 00:12:43,820 >> Exempelvis rimlig är du och din vän 291 00:12:43,820 --> 00:12:47,360 diskuterar vad det bästa sättet att gå om logiskt lösa ett problem. 292 00:12:47,360 --> 00:12:48,910 Det är ganska rimligt. 293 00:12:48,910 --> 00:12:53,244 Vad skulle inte vara rimligt är om du killar fick tillsammans, skrev samma kod, 294 00:12:53,244 --> 00:12:54,410 och vände i samma kod. 295 00:12:54,410 --> 00:12:56,302 Det är inte rimligt. 296 00:12:56,302 --> 00:12:57,510 Samma sak, typ av en uppsats. 297 00:12:57,510 --> 00:12:59,290 Om du vill diskutera med din vän, hey, 298 00:12:59,290 --> 00:13:00,220 Detta är vad jag vill skriva om. 299 00:13:00,220 --> 00:13:02,500 Dessa är de steg som jag vill vidta för att skriva om det, bra. 300 00:13:02,500 --> 00:13:03,208 Det är underbart. 301 00:13:03,208 --> 00:13:04,790 Vänligen samarbeta med varandra. 302 00:13:04,790 --> 00:13:06,540 Om ni börjar skriva samma sak, 303 00:13:06,540 --> 00:13:10,020 vända i samma uppsats, är det mindre OK. 304 00:13:10,020 --> 00:13:13,200 Så när du är osäker, bara inte göra det. 305 00:13:13,200 --> 00:13:16,940 >> Här har vi i CS50, har vi skript som körs för att automatisera testa 306 00:13:16,940 --> 00:13:21,740 inte bara riktigheten av din kod, men också det unika i din kod. 307 00:13:21,740 --> 00:13:25,920 Så snälla inte sätta oss i det läge att behöva hänvisa ditt ärende till ExComm. 308 00:13:25,920 --> 00:13:31,110 Vänligen bara för alla, låt oss bara gör detta till en underbar upplevelse. 309 00:13:31,110 --> 00:13:33,600 Alla lär sig bättre, vi alla är gladare, 310 00:13:33,600 --> 00:13:37,926 och vi är alla inrättas för att lyckas i denna kurs. 311 00:13:37,926 --> 00:13:39,800 Något som är mycket unikt denna klass 312 00:13:39,800 --> 00:13:42,660 som jag tror att alla borde verkligen uppmärksamma är att vi har 313 00:13:42,660 --> 00:13:44,930 vad heter ånger klausul i vår kursplan. 314 00:13:44,930 --> 00:13:50,010 Så i huvudsak, inom 72 timmar, om du tror att du har gjort något 315 00:13:50,010 --> 00:13:53,240 du vet inte riktigt var lämpligt, kom till oss. 316 00:13:53,240 --> 00:13:57,220 Vi lovar att inom 72 timmar Vi kommer att hantera ärendet själva 317 00:13:57,220 --> 00:13:59,820 utan att hänvisa till en högre myndighet i administrationen. 318 00:13:59,820 --> 00:14:03,100 >> Så om du kommer till mig och säger: Andi, hej, jag är verkligen ledsen, 319 00:14:03,100 --> 00:14:07,620 men jag tror att det finns ett par rader i mitt kod i går kväll som jag typ av googlade, 320 00:14:07,620 --> 00:14:10,120 fick av Stack Overflow, kopiera och klistras in, 321 00:14:10,120 --> 00:14:13,680 och jag är verkligen, verkligen ledsen om det, låt mig veta. 322 00:14:13,680 --> 00:14:16,900 Please do not bara låta det gro och bara hoppas att jag fånga den. 323 00:14:16,900 --> 00:14:17,784 Vi kommer att fånga den. 324 00:14:17,784 --> 00:14:18,450 Just kommit till mig. 325 00:14:18,450 --> 00:14:20,520 Låt mig veta inom 72 timmar. 326 00:14:20,520 --> 00:14:22,240 Vi ska räkna ut en lösning. 327 00:14:22,240 --> 00:14:26,679 Och vi lovar att vi inte kommer att hänvisa till universitetsmyndigheter i huvudsak. 328 00:14:26,679 --> 00:14:29,220 Så det är i ditt bästa intresse att bara vara ärlig mot alla 329 00:14:29,220 --> 00:14:31,720 deltar i kursen. 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å nu snabbt innan Jag går vidare, inte någon 333 00:14:37,800 --> 00:14:42,670 har frågor om logistik om hur kurser vi ska köra, 334 00:14:42,670 --> 00:14:45,982 hur sektioner går att köra, något av detta? 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 >> PUBLIK: [OHÖRBAR]? 338 00:14:48,126 --> 00:14:50,414 339 00:14:50,414 --> 00:14:51,080 ANDI PENG: Ja. 340 00:14:51,080 --> 00:14:54,850 Så quizzes-- hur många av er är i måndag / onsdag avsnitt? 341 00:14:54,850 --> 00:14:56,700 Hur många av er är i tisdag / torsdag? 342 00:14:56,700 --> 00:14:58,550 OK, så det är en fast splittring här. 343 00:14:58,550 --> 00:15:00,900 Så det sätt som vi kör det vid Yale är att vi 344 00:15:00,900 --> 00:15:04,040 kommer att ha två separata quizzes-- en för varje section-- som 345 00:15:04,040 --> 00:15:06,160 kommer att fattas under lektionstid. 346 00:15:06,160 --> 00:15:09,310 Jag tror att det är oktober, i slutet av oktober, något liknande, som vecka ett 347 00:15:09,310 --> 00:15:10,794 av testet. 348 00:15:10,794 --> 00:15:11,960 Ja, så bara komma till klassen. 349 00:15:11,960 --> 00:15:13,920 På den måndag eller onsdag, du tar testet. 350 00:15:13,920 --> 00:15:16,336 På den tisdag eller torsdag, du tar ett annat frågesport. 351 00:15:16,336 --> 00:15:18,570 Men samma material kommer att täckas. 352 00:15:18,570 --> 00:15:19,160 Yeah. 353 00:15:19,160 --> 00:15:20,660 Bra fråga. 354 00:15:20,660 --> 00:15:21,160 Yeah. 355 00:15:21,160 --> 00:15:23,260 >> PUBLIK: Var ska vi gå att kontrollera våra kvaliteter? 356 00:15:23,260 --> 00:15:23,926 >> ANDI PENG: Ja. 357 00:15:23,926 --> 00:15:28,420 Så jag kommer att skicka ut ett e-post oavsett varje vecka 358 00:15:28,420 --> 00:15:31,460 när frågesporter är graded-- eller, ledsen, när psets betygsätts. 359 00:15:31,460 --> 00:15:34,120 Psets vanligen vänt i vid middagstid eller fredag. 360 00:15:34,120 --> 00:15:37,540 Så jag lovar att jag kommer att försöka få dem tillbaka till dig 361 00:15:37,540 --> 00:15:40,000 genom middagstid följande fredag. 362 00:15:40,000 --> 00:15:44,950 >> När jag grad en pset, kommer jag att skicka en anmälan på betyget boken 363 00:15:44,950 --> 00:15:47,070 som talar om din poäng kan ses på nätet. 364 00:15:47,070 --> 00:15:52,022 Så just denna vecka, efter att jag avsluta gradering förra veckans psets, 365 00:15:52,022 --> 00:15:54,230 ni kommer att få en e-post anmälan berätta, 366 00:15:54,230 --> 00:15:55,870 Hej det är där du gå för att se dina betyg. 367 00:15:55,870 --> 00:15:57,680 Och du kan se varje uppdelning av dina betyg. 368 00:15:57,680 --> 00:15:58,555 Du kan se kommentarerna. 369 00:15:58,555 --> 00:16:00,360 Åh, snabb sak också. 370 00:16:00,360 --> 00:16:03,060 Kommentarsfältet i den stora Boken är där jag kommer förmodligen 371 00:16:03,060 --> 00:16:05,300 tillbringar större delen av min tid betygssättning. 372 00:16:05,300 --> 00:16:07,094 Så en sak som är verkligen viktigt när 373 00:16:07,094 --> 00:16:09,010 ni tittar på dina betyg på din psets 374 00:16:09,010 --> 00:16:11,400 är inte bara ute på den fysiska ställningen 375 00:16:11,400 --> 00:16:14,630 men också tar tid att verkligen läsa mina kommentarer. 376 00:16:14,630 --> 00:16:17,820 >> Ofta som ger dig feedback om hur du löser ett problem. 377 00:16:17,820 --> 00:16:20,480 Om du behöver göra något lite bättre, 378 00:16:20,480 --> 00:16:24,080 konstruktiv kritik är vanligtvis bäst ges i de kommentarerna. 379 00:16:24,080 --> 00:16:26,950 Så snälla, snälla, jag kommer att spendera tid på att skriva kommentarer. 380 00:16:26,950 --> 00:16:30,440 Snälla, jag skulle verkligen uppskatta det om ni skulle läsa dessa synpunkter. 381 00:16:30,440 --> 00:16:31,170 OK. 382 00:16:31,170 --> 00:16:34,150 Häftigt. 383 00:16:34,150 --> 00:16:34,680 >> Okej. 384 00:16:34,680 --> 00:16:40,680 Så vi kommer att börja prata och bara granska snabbt 385 00:16:40,680 --> 00:16:45,040 en del av materialet från vecka noll bara så vi är 386 00:16:45,040 --> 00:16:48,760 på höger sida för börjar denna veckas problem. 387 00:16:48,760 --> 00:16:52,600 Så medan slingan är en av de tre typer av slingor 388 00:16:52,600 --> 00:16:54,510 vi diskuterat tidigare i denna klass. 389 00:16:54,510 --> 00:16:57,060 >> Ett tag slinga i huvudsak är skriven i syntaxen 390 00:16:57,060 --> 00:17:00,666 där, medan ett visst villkor, göra det upprepade gånger, eller hur? 391 00:17:00,666 --> 00:17:02,040 Tänk på det i den här bilden här. 392 00:17:02,040 --> 00:17:04,780 Du kommer att börja på en viss punkt i koden. 393 00:17:04,780 --> 00:17:09,030 Du kommer att komma in i slingan skick if-- jag inte veta-- x är mindre än ett. 394 00:17:09,030 --> 00:17:11,677 >> Om det är sant, du kommer att exekvera slingan. 395 00:17:11,677 --> 00:17:14,010 Och du kommer att fortsätta göra det igen, igen, igen, 396 00:17:14,010 --> 00:17:17,900 över och over-- vilket är varför det är ett loop-- tills ditt tillstånd blir 397 00:17:17,900 --> 00:17:19,079 falskt. 398 00:17:19,079 --> 00:17:22,140 Så på detta sätt, en while-slinga är ett av de enklare sätten 399 00:17:22,140 --> 00:17:25,619 att skriva någon form av tillstånd som behöver upprepa om och om och om igen. 400 00:17:25,619 --> 00:17:28,109 Bara vara försiktig när du skriver någon form av slinga 401 00:17:28,109 --> 00:17:32,140 att du har en exit skick som samt en uppdatering av vad det 402 00:17:32,140 --> 00:17:36,714 är så att din loop inte bara köra om och om igen oändligt. 403 00:17:36,714 --> 00:17:38,630 I vilket fall som helst, du kommer att vilja vara säker 404 00:17:38,630 --> 00:17:42,670 att du ändrar någon aspekt av koden eller i slutet av slingan 405 00:17:42,670 --> 00:17:46,680 bara för att se till att du har ett sätt av framsteg mot villkoret 406 00:17:46,680 --> 00:17:48,400 att du vill träffa till slut. 407 00:17:48,400 --> 00:17:50,239 Innebär det vettigt att alla? 408 00:17:50,239 --> 00:17:52,530 Vi vill inte bara vara fångas upp i denna spiral där 409 00:17:52,530 --> 00:17:55,710 Vi går runt och runt och det finns inget sätt att bryta slingan. 410 00:17:55,710 --> 00:17:58,844 Och varje slinga i huvudsak har ett sätt att göra 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 >> För det andra, många av er i dina Mario psets 414 00:18:06,060 --> 00:18:08,910 antagligen tvungen att anställa denna typ av slinga. 415 00:18:08,910 --> 00:18:11,802 Det kallas en gör while-slinga. 416 00:18:11,802 --> 00:18:14,510 Först av allt, kan någon berätta för mig vad skillnaden mellan en gör 417 00:18:14,510 --> 00:18:16,586 while-slinga och en while-slinga är? 418 00:18:16,586 --> 00:18:17,086 Yeah. 419 00:18:17,086 --> 00:18:21,030 >> PUBLIK: Det gör while-slinga körs först [OHÖRBAR]. 420 00:18:21,030 --> 00:18:22,120 >> ANDI PENG: Ja, exakt. 421 00:18:22,120 --> 00:18:27,130 Så en gör while-slinga alltid gör vad är inuti do, inom hakparenteserna 422 00:18:27,130 --> 00:18:30,520 där och gör detta villkor innan kontroll för the-- ledsen, 423 00:18:30,520 --> 00:18:32,940 gör det koden innan kontroll av tillståndet. 424 00:18:32,940 --> 00:18:37,200 Och det är särskilt relevant för oss här i denna klass, eftersom de flesta gånger 425 00:18:37,200 --> 00:18:41,450 vi kommer att vilja uppmana användaren för någon form av ingång. 426 00:18:41,450 --> 00:18:43,520 Och sedan, beroende på ingången de ger oss, 427 00:18:43,520 --> 00:18:46,150 då kan vi utvärdera, oh, gör Vi måste få dem igen? 428 00:18:46,150 --> 00:18:49,930 >> Så i Mario, om användaren gav dig en negativ höjd, till exempel, 429 00:18:49,930 --> 00:18:52,990 du kommer att första prompt och göra vad som är inuti. 430 00:18:52,990 --> 00:18:54,820 Då du kommer att kontrollera stund. 431 00:18:54,820 --> 00:18:57,570 Du vet, är negativ 1, är att ett positivt tal? 432 00:18:57,570 --> 00:19:00,680 Om det inte, jag kommer att gå tillbaka och upprepa göra och upprepa 433 00:19:00,680 --> 00:19:03,950 och upprepa och upprepa tills de slutligen ge dig ett nummer som du vill, 434 00:19:03,950 --> 00:19:07,002 att vi alla kan använda i vår kod. 435 00:19:07,002 --> 00:19:09,210 Det är ganska viktigt för väsentligen varje inmatning från användare. 436 00:19:09,210 --> 00:19:11,760 Jag kan garantera dig någon tid i en pset där 437 00:19:11,760 --> 00:19:15,070 Vi ber dig att mata in någon form av kod, vi är 438 00:19:15,070 --> 00:19:17,540 förmodligen kommer att ge dig ett testfall där vi är 439 00:19:17,540 --> 00:19:21,200 kommer att ge dig något dåligt som är kommer att försöka bryta koden. 440 00:19:21,200 --> 00:19:25,044 >> Om vi ​​försöker be dig att mata in ett heltal, kan vi bara ge er en sträng 441 00:19:25,044 --> 00:19:26,460 och se hur du skulle hantera det. 442 00:19:26,460 --> 00:19:30,610 Om vi ​​ber dig att använda en ålder, vi kan ge dig ett negativt tal 443 00:19:30,610 --> 00:19:32,340 att se hur du skulle hantera det. 444 00:19:32,340 --> 00:19:37,260 Se bara till att ni testar för fall där du inte får det bästa 445 00:19:37,260 --> 00:19:38,590 input, låt oss bara säga. 446 00:19:38,590 --> 00:19:40,510 Och en gör while-slinga är ofta det bästa 447 00:19:40,510 --> 00:19:45,260 sätt att designa din kod så att den uppfyller direktivets tillämpningsområde. 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å det här är förmodligen den mest komplex slinga av de tre 452 00:19:53,270 --> 00:19:54,990 att vi har tittat på hittills. 453 00:19:54,990 --> 00:19:56,689 Och det verkar mycket skrämmande vid första. 454 00:19:56,689 --> 00:19:59,730 Men jag garanterar dig, när ni få kläm på hur man använder en for-loop, 455 00:19:59,730 --> 00:20:03,320 det är en av de mest användbara saker, mest användbara verktyg i din arsenal 456 00:20:03,320 --> 00:20:05,300 för att gå vidare i denna klass. 457 00:20:05,300 --> 00:20:09,920 >> Så till exempel, i Scratch, vi hade detta mycket enkelt block 458 00:20:09,920 --> 00:20:13,180 som bara sa upprepa detta viss fraser visst antal gånger. 459 00:20:13,180 --> 00:20:16,260 Förresten, SAJ-- det är SCAZ Andi Jason. 460 00:20:16,260 --> 00:20:18,740 Vi skriver ofta våra e-postmeddelanden SAJ. 461 00:20:18,740 --> 00:20:20,360 Om vi ​​säger SAJ, inte förväxlas. 462 00:20:20,360 --> 00:20:22,630 Det är bara vi. 463 00:20:22,630 --> 00:20:28,600 >> Så i Scratch, kunde vi ha ett block som sagt, jag upprepar älskar SAJ! 464 00:20:28,600 --> 00:20:29,430 10 gånger. 465 00:20:29,430 --> 00:20:30,130 Väldigt enkelt. 466 00:20:30,130 --> 00:20:32,302 Logiken bakom detta är en mycket, mycket enkelt, eller hur? 467 00:20:32,302 --> 00:20:35,260 Jag vill först gå igenom första tid och ser att, för andra gången 468 00:20:35,260 --> 00:20:38,510 och se att tredje gången, osv och så vidare, tills du träffar till 10. 469 00:20:38,510 --> 00:20:41,960 >> Och hur vi skulle innebära att kod är bara genom en enkel for-loop. 470 00:20:41,960 --> 00:20:45,440 Så för, du kommer att deklarera din variabel här, i detta fall, 471 00:20:45,440 --> 00:20:46,349 med en int. 472 00:20:46,349 --> 00:20:47,390 Vi kommer att kalla den i. 473 00:20:47,390 --> 00:20:49,500 Vi kommer att initiera den till 0. 474 00:20:49,500 --> 00:20:52,490 Och stopp utgåvan är kommer att vara i är mindre än 10. 475 00:20:52,490 --> 00:20:54,622 Och uppdateringen kommer att vara i ++. 476 00:20:54,622 --> 00:20:57,750 >> Och inom slingan, det kommer att exekvera tills slutligen det 477 00:20:57,750 --> 00:21:01,490 träffar änden av Skick- där fall, det kommer att bryta slingan. 478 00:21:01,490 --> 00:21:04,600 Det bör finnas saker som du killar har alla slags sett förut 479 00:21:04,600 --> 00:21:07,270 och var tvungen att göra för ditt problem ange ett. 480 00:21:07,270 --> 00:21:12,310 Finns det någon som har några frågor om efter loopar just nu? 481 00:21:12,310 --> 00:21:12,930 OK. 482 00:21:12,930 --> 00:21:13,430 Bra. 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å för er som har läs pset spec för denna vecka 486 00:21:22,270 --> 00:21:27,690 vet att vi kommer att behöva anställa något som kallas ASCII och ASCII tabellen. 487 00:21:27,690 --> 00:21:32,380 Så David i föreläsning gick över kortfattat hur datorer essentially-- allt 488 00:21:32,380 --> 00:21:35,410 kodas i en dator i binär, i nollor och ettor. 489 00:21:35,410 --> 00:21:39,740 Och det sätt som datorer kan att lagra olika värden utöver 490 00:21:39,740 --> 00:21:44,360 till nollor och ettor är genom att kartlägga dessa siffror för att representera andra siffror 491 00:21:44,360 --> 00:21:47,220 eller i huvudsak andra tecken. 492 00:21:47,220 --> 00:21:49,810 >> Så i detta fall, en ASCII table-- allt den gör 493 00:21:49,810 --> 00:21:53,600 är kart tecken eller tecken, till nummer. 494 00:21:53,600 --> 00:21:57,385 Så källkoden filen i din computer-- det ser, 495 00:21:57,385 --> 00:22:00,010 hey, ett gäng nollor och ettor, nollor och ettor, nollor och ettor. 496 00:22:00,010 --> 00:22:02,350 Det är vad som lagras i faktiska minne på din dator. 497 00:22:02,350 --> 00:22:04,750 >> Men när vi människor vill kommunicera med datorn, 498 00:22:04,750 --> 00:22:08,249 vi want-- säga, till exempel, Om jag vill att versaler A, 499 00:22:08,249 --> 00:22:10,540 Jag kommer att behöva något sätt att tala om för datorn, åh, 500 00:22:10,540 --> 00:22:16,300 när jag skriver versaler A, menar jag denna representation i binär. 501 00:22:16,300 --> 00:22:22,260 >> Och så som vi gör som kastade en godtyckliga sak som kallas en ASCII tabellen, 502 00:22:22,260 --> 00:22:25,020 där vi, som människor, som programmerare, för en tid sedan, 503 00:22:25,020 --> 00:22:28,660 vi godtyckligt beslutat att vi skulle tilldela dessa nummer 504 00:22:28,660 --> 00:22:30,960 värden till dessa tecken. 505 00:22:30,960 --> 00:22:32,720 >> Så ni kan google detta online. 506 00:22:32,720 --> 00:22:37,120 Jag tror att det finns en länk till den i din pset-- bara en ASCII karta bord, ASCII 507 00:22:37,120 --> 00:22:37,720 tabell. 508 00:22:37,720 --> 00:22:40,722 Det översätter bara binär siffror till tecken. 509 00:22:40,722 --> 00:22:42,930 Och det kommer att bli mycket användbart för ditt problem set 510 00:22:42,930 --> 00:22:45,470 när du vill beräkna något eller om du 511 00:22:45,470 --> 00:22:47,880 vill visa vissa tecken eller heltal 512 00:22:47,880 --> 00:22:50,327 eller manipulera vissa tecken. 513 00:22:50,327 --> 00:22:52,160 Det kommer att bli mycket viktigt att ni alla 514 00:22:52,160 --> 00:22:55,140 vet hur man navigerar en ASCII tabellen. 515 00:22:55,140 --> 00:23:01,260 >> Så till exempel versaler A representeras av antalet 65. 516 00:23:01,260 --> 00:23:04,207 Och gemener a representeras av 97. 517 00:23:04,207 --> 00:23:07,040 Därför är det viktigt att veta att Skillnaden mellan de två värdena 518 00:23:07,040 --> 00:23:08,320 är 32. 519 00:23:08,320 --> 00:23:13,210 Ofta, om du behöver konvertera från en till den andra, är skillnaden 32. 520 00:23:13,210 --> 00:23:15,710 Och oroa dig inte om du är snäll förvirrad på detta först. 521 00:23:15,710 --> 00:23:20,230 Vi ska gå över hur vi skulle använda denna i själva 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å för de av er med bärbara datorer ut, känn dig fri att dra upp en ASCII tabellen, 525 00:23:30,770 --> 00:23:36,030 eftersom dessa kommer förmodligen kräver ni att referera 526 00:23:36,030 --> 00:23:38,100 vad karaktärerna är. 527 00:23:38,100 --> 00:23:38,640 OK. 528 00:23:38,640 --> 00:23:42,840 >> Så att veta att vissa tecken mappas till vissa nummer, 529 00:23:42,840 --> 00:23:47,240 om jag skulle köra bara den första linje som code-- printf en, 530 00:23:47,240 --> 00:23:50,900 små bokstäver a, minus versaler A. Finns det någon 531 00:23:50,900 --> 00:23:55,880 har en gissning om vad som skulle vara utskrift av skärmen just nu? 532 00:23:55,880 --> 00:23:58,190 >> Så först av allt, vad gör gemener en representerar? 533 00:23:58,190 --> 00:24:00,990 Vilket nummer är att kodas i ASCII-tabellen. 534 00:24:00,990 --> 00:24:01,490 Förlåt? 535 00:24:01,490 --> 00:24:02,630 >> PUBLIK: 97? 536 00:24:02,630 --> 00:24:03,630 >> ANDI PENG: 97, bra. 537 00:24:03,630 --> 00:24:05,077 Och vad är versaler A? 538 00:24:05,077 --> 00:24:06,330 >> PUBLIK: 65. 539 00:24:06,330 --> 00:24:08,255 >> ANDI PENG: Så vad är 97 minus 65? 540 00:24:08,255 --> 00:24:09,227 >> Publik: 32. 541 00:24:09,227 --> 00:24:09,810 ANDI PENG: OK. 542 00:24:09,810 --> 00:24:13,530 Så vad tycker ni kommer att hända när jag ingång som kodrad 543 00:24:13,530 --> 00:24:14,670 i min dator? 544 00:24:14,670 --> 00:24:17,981 545 00:24:17,981 --> 00:24:19,896 >> PUBLIK: [OHÖRBAR]. 546 00:24:19,896 --> 00:24:21,020 ANDI PENG: Tyvärr tala. 547 00:24:21,020 --> 00:24:22,520 Inga problem. 548 00:24:22,520 --> 00:24:25,750 Detta är en mycket säker miljö, minus kameran. 549 00:24:25,750 --> 00:24:27,550 Vi kommer alla att-- inga bekymmer. 550 00:24:27,550 --> 00:24:30,940 Bara vi alla kommer att låtsas som det är bara vi kylning i det här rummet. 551 00:24:30,940 --> 00:24:31,480 Inga problem. 552 00:24:31,480 --> 00:24:33,410 Ingen fråga är för dum. 553 00:24:33,410 --> 00:24:35,300 Inget svar är en dum svar. 554 00:24:35,300 --> 00:24:38,260 Jag förmodligen kommer att göra misstag under min undervisning. 555 00:24:38,260 --> 00:24:40,740 Allvarligt, killar, bara slänga ut det. 556 00:24:40,740 --> 00:24:43,092 Var säker på dig själv, du vet? 557 00:24:43,092 --> 00:24:43,800 Så vad var det? 558 00:24:43,800 --> 00:24:47,990 Vem sade att förra svar? 559 00:24:47,990 --> 00:24:48,540 OK. 560 00:24:48,540 --> 00:24:50,380 Shout så trevligt och tydlig. 561 00:24:50,380 --> 00:24:51,220 >> PUBLIK: 32? 562 00:24:51,220 --> 00:24:51,850 >> ANDI Peng: 32. 563 00:24:51,850 --> 00:24:54,141 OK, låt oss köra den här koden och se om det är vad som händer. 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 ni kan typ av se, den typiska notation jag har 568 00:25:06,360 --> 00:25:12,250 ställa dig här för hur vi skulle anställa någon form av program i vår dator. 569 00:25:12,250 --> 00:25:14,770 Vi har vår huvudsakliga funktion inom vår huvuduppgift. 570 00:25:14,770 --> 00:25:17,265 Jag kommer bara att kopiera klistra in den här kodraden. 571 00:25:17,265 --> 00:25:21,082 572 00:25:21,082 --> 00:25:23,540 Också vara försiktig när ni kopierar och klistrar in koden. 573 00:25:23,540 --> 00:25:28,750 Ibland är vissa operatörer inte klistra över korrekt. 574 00:25:28,750 --> 00:25:31,397 I så fall, minus tecknet var faktiskt ett streck. 575 00:25:31,397 --> 00:25:32,980 Och så att datorn inte plocka upp. 576 00:25:32,980 --> 00:25:35,870 Så jag var tvungen att gå tillbaka och fysiskt skriva in det. 577 00:25:35,870 --> 00:25:37,846 Bara vara försiktig när ni gö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 att köra det här. 581 00:25:43,980 --> 00:25:45,670 Så vi kommer att cd i vår section2. 582 00:25:45,670 --> 00:25:50,470 583 00:25:50,470 --> 00:25:52,030 Jag har kallat det här programmet asciimath. 584 00:25:52,030 --> 00:25:55,690 Så kom ihåg, när vi kör någon program, vi vill först kompilera den 585 00:25:55,690 --> 00:25:57,150 genom att köra det genom vårt märke. 586 00:25:57,150 --> 00:26:00,030 Och sedan vill vi faktiskt köra programmet genom att göra punkt snedstreck. 587 00:26:00,030 --> 00:26:01,280 Så vi kommer att ./asciimath. 588 00:26:01,280 --> 00:26:05,780 589 00:26:05,780 --> 00:26:06,590 >> Höger, det går vi. 590 00:26:06,590 --> 00:26:07,410 Och vi ser 32. 591 00:26:07,410 --> 00:26:07,930 Bra gjort. 592 00:26:07,930 --> 00:26:10,340 Du förtjänar en bit godis. 593 00:26:10,340 --> 00:26:11,160 Candy för dig. 594 00:26:11,160 --> 00:26:11,900 Förlåt. 595 00:26:11,900 --> 00:26:13,100 Okej. 596 00:26:13,100 --> 00:26:13,670 OK. 597 00:26:13,670 --> 00:26:18,070 Så vi kan gå tillbaka till vårt exempel här. 598 00:26:18,070 --> 00:26:23,530 599 00:26:23,530 --> 00:26:24,345 Aah, nr. 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 Jag kommer bara att hålla det så. 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å när ni kan se, kan vi göra massor av mycket intressanta saker, 608 00:26:55,340 --> 00:26:58,880 en hel del mycket coola saker, en hel del mycket komplicerade saker som involverar 609 00:26:58,880 --> 00:27:02,720 ASCII-tecken och siffror. 610 00:27:02,720 --> 00:27:05,890 När du kommer ner till ledningen fem, det är en hel del att följa. 611 00:27:05,890 --> 00:27:07,640 Vi kommer inte att gå genom sektionen. 612 00:27:07,640 --> 00:27:10,720 Känn dig fri att, om du kan, resonera ut på papper 613 00:27:10,720 --> 00:27:14,750 först på vad som ska hända när du matar in en sådan sträng värden. 614 00:27:14,750 --> 00:27:19,720 Till exempel i den sista raden, har vi z-- vilket representerar en viss number-- 615 00:27:19,720 --> 00:27:24,740 en-- som också representerar en vissa number-- plus 1 modulos 26 616 00:27:24,740 --> 00:27:26,750 plus gemener en. 617 00:27:26,750 --> 00:27:29,220 >> Om ni fortsätta läsa genom dessa, du 618 00:27:29,220 --> 00:27:34,009 kan se ett mönster kommit upp i hur vi manipulera koden. 619 00:27:34,009 --> 00:27:36,050 Jag mycket, mycket tyder efter avsnitt er alla 620 00:27:36,050 --> 00:27:38,160 killar gå vidare och input de alla i din dator 621 00:27:38,160 --> 00:27:40,060 och se vilken typ av siffror kommer ut 622 00:27:40,060 --> 00:27:43,090 och resonemang genom varför de är händer, eftersom dina psets 623 00:27:43,090 --> 00:27:45,060 det ska bli riktigt viktigt för dig att förstå 624 00:27:45,060 --> 00:27:47,132 varför vissa saker händer. 625 00:27:47,132 --> 00:27:48,590 Alla dessa bilder kommer att finnas på nätet. 626 00:27:48,590 --> 00:27:51,510 Så inga bekymmer om att försöka fysiskt kopiera ner anteckningar. 627 00:27:51,510 --> 00:27:52,510 Allt är på nätet. 628 00:27:52,510 --> 00:27:54,050 Detta avsnitt i sig kommer att vara online. 629 00:27:54,050 --> 00:27:57,500 All min källkod som Jag kör kommer att vara online. 630 00:27:57,500 --> 00:27:58,180 Yeah. 631 00:27:58,180 --> 00:27:59,430 Har du fortfarande har en fråga? 632 00:27:59,430 --> 00:28:00,587 PUBLIK: Vad är modulos? 633 00:28:00,587 --> 00:28:01,170 ANDI PENG: OK. 634 00:28:01,170 --> 00:28:05,620 Så modulo är en operatör som kommer att vara ganska viktigt att dina killar s pset 635 00:28:05,620 --> 00:28:06,690 här. 636 00:28:06,690 --> 00:28:12,280 Så sätt att operatörerna i C och i programarbetet 637 00:28:12,280 --> 00:28:16,360 är att du har vad som kallas division symbol och modulen symbol, 638 00:28:16,360 --> 00:28:18,350 som är precis som ett procenttecken. 639 00:28:18,350 --> 00:28:24,840 >> Så i C, när du gör ett heltal dividerat med ett heltal med ett snedstreck, 640 00:28:24,840 --> 00:28:27,720 C har en tendens att vilja skära bort alla decimaler, 641 00:28:27,720 --> 00:28:30,290 eftersom ett heltal vill konvertera till ett heltal. 642 00:28:30,290 --> 00:28:33,550 Det kommer inte att vilja vara en dubbel med ett gäng decimaler allt efter det. 643 00:28:33,550 --> 00:28:39,322 >> Så om jag gör 3 delat med 2, det kommer att stänga av 0,5 och bara ge er en. 644 00:28:39,322 --> 00:28:41,530 Så det är något att vara mycket försiktig med när du är 645 00:28:41,530 --> 00:28:45,294 gör någon form av matematik i programmering, är att siffrorna du får 646 00:28:45,294 --> 00:28:47,210 kanske inte är numren att du tänkte, 647 00:28:47,210 --> 00:28:50,190 vilket är anledningen till avrundning i din sista pset är så viktigt. 648 00:28:50,190 --> 00:28:51,980 >> Modulo ger dig resten. 649 00:28:51,980 --> 00:28:56,200 Så till exempel, om jag gjorde 3 modulo 2-- så tre procenttecken 2-- 650 00:28:56,200 --> 00:28:58,020 Det skulle ge dig resten av det. 651 00:28:58,020 --> 00:29:00,460 Så 3 delat med två är 1,5. 652 00:29:00,460 --> 00:29:01,410 Det är ett resten av 1. 653 00:29:01,410 --> 00:29:04,600 Det skulle ge dig en, som är resten av det. 654 00:29:04,600 --> 00:29:07,361 >> Så när ni flyttar genom ASCII-tabellen, 655 00:29:07,361 --> 00:29:09,735 modulo kommer att hamna något som är mycket viktigt, 656 00:29:09,735 --> 00:29:11,240 och vi kommer att diskutera det senare. 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å något som är söt, ganska nya och ganska unik 660 00:29:27,300 --> 00:29:31,920 att vi har diskuterat denna vecka begreppet vad en matris är. 661 00:29:31,920 --> 00:29:34,370 Så array är den första typ av datastruktur 662 00:29:34,370 --> 00:29:36,320 att vi kommer att möter i denna klass. 663 00:29:36,320 --> 00:29:40,010 All datastruktur är någon form av godtycklig, 664 00:29:40,010 --> 00:29:43,370 bokstavligen saker som strukturen att vi som programmerare har skapat, 665 00:29:43,370 --> 00:29:47,890 att vi har lagt ned vår kod som kan innehålla andra delar av koden. 666 00:29:47,890 --> 00:29:51,090 >> Så i denna mening en array-- se det som ett arkivskåp, 667 00:29:51,090 --> 00:29:53,470 där om du öppnar olika hyllorna i din arkivskåp, 668 00:29:53,470 --> 00:29:55,630 du kan komma åt olika saker. 669 00:29:55,630 --> 00:29:58,630 Till minne, är en grupp bara göra samma sak på din dator. 670 00:29:58,630 --> 00:30:01,730 Du kan ha olika blocks-- vi kalla dem indices-- av en matris. 671 00:30:01,730 --> 00:30:04,210 Det är precis som ett block, en hylla med minne 672 00:30:04,210 --> 00:30:07,580 att vi har skapat i din dator som du kan mata in 673 00:30:07,580 --> 00:30:10,270 vissa saker i olika utrymmen. 674 00:30:10,270 --> 00:30:18,000 >> Så med en array, du alltid måste specify-- 675 00:30:18,000 --> 00:30:22,360 Du måste ange förklara en matris i följande format. 676 00:30:22,360 --> 00:30:24,290 Du ska först ange datatyp 677 00:30:24,290 --> 00:30:25,831 som du vill skapa i matrisen. 678 00:30:25,831 --> 00:30:28,870 Om jag vill ha en array av heltal, Jag kommer att sätta int direkt. 679 00:30:28,870 --> 00:30:32,079 Om jag vill ha en array med strängar, Jag kommer att sätta strängar där, 680 00:30:32,079 --> 00:30:34,995 namnet på din array, och sedan du kommer att ha hakparenteser. 681 00:30:34,995 --> 00:30:39,580 Och innanför hakparenteser, du är kommer att ha storleken på din array. 682 00:30:39,580 --> 00:30:42,900 >> Något som är väldigt viktigt för Kom ihåg när du skapar arrayer är 683 00:30:42,900 --> 00:30:46,530 att när du skapar en matris, kan den storleken inte att förändras. 684 00:30:46,530 --> 00:30:50,180 Så om du vet att just nu du har ett utbud av storlek 10, 685 00:30:50,180 --> 00:30:54,550 du vet att jag kommer att ha 10 celler inom eller 10 index inom denna samling, 686 00:30:54,550 --> 00:30:56,830 och det kommer aldrig att expandera eller minska 687 00:30:56,830 --> 00:30:59,850 oavsett vad, och att det finns för närvarande bara 10 block av rymden 688 00:30:59,850 --> 00:31:04,490 fördelas i ditt minne som kan lagra upp till 10 saker av vad du har lagt. 689 00:31:04,490 --> 00:31:08,790 >> Så på detta sätt, en array datatyp, datastrukturen som är en array 690 00:31:08,790 --> 00:31:13,392 skiljer sig mycket från vissa andra vi kommer att täcka senare i den här kursen. 691 00:31:13,392 --> 00:31:15,170 Yeah. 692 00:31:15,170 --> 00:31:20,080 Till exempel, om du ville skapa en array storlek 3 som 693 00:31:20,080 --> 00:31:23,670 innehöll variabler av integer-- Åh, förlåt, för temperature-- 694 00:31:23,670 --> 00:31:25,640 och temperatur, av Naturligtvis är ett heltal. 695 00:31:25,640 --> 00:31:28,710 >> Så vi skulle skapa int, som är den datatyp av vad vi vill lagra. 696 00:31:28,710 --> 00:31:32,680 Vi kommer att kalla detta temperaturer till förmån för nomenklatur namngivning 697 00:31:32,680 --> 00:31:34,200 något som vi alla förstår. 698 00:31:34,200 --> 00:31:35,900 Och vi kommer att få hakparenteser. 699 00:31:35,900 --> 00:31:37,200 Och vi vill ha tre siffror. 700 00:31:37,200 --> 00:31:39,000 Så vi kommer att sätta tre inne i den. 701 00:31:39,000 --> 00:31:41,041 >> Något som verkligen viktigt att hålla i minnet 702 00:31:41,041 --> 00:31:43,530 är att arrayer noll indexeras. 703 00:31:43,530 --> 00:31:46,410 Allt detta betyder är att du börja med index på 0, 704 00:31:46,410 --> 00:31:49,800 och du kör upp genom storleken på matrisen minus ett. 705 00:31:49,800 --> 00:31:52,730 Så till exempel här, vi har en rad storlek 3. 706 00:31:52,730 --> 00:31:54,680 Det kommer att kunna att hålla tre värden. 707 00:31:54,680 --> 00:31:57,450 Men siffrorna themselves-- att nummer, arrayen, som index, 708 00:31:57,450 --> 00:32:00,271 arrayen är 0 till 2. 709 00:32:00,271 --> 00:32:03,520 Så killar, vara riktigt, riktigt försiktig när du går igenom dina problem som 710 00:32:03,520 --> 00:32:06,500 och skapa någon form av array, eftersom många av de gånger det är 711 00:32:06,500 --> 00:32:08,490 verkligen, verkligen lätt att glömma det. 712 00:32:08,490 --> 00:32:11,840 Jag har faktiskt inte har index 3, som jag för närvarande bara 713 00:32:11,840 --> 00:32:13,130 har index för två. 714 00:32:13,130 --> 00:32:16,046 Och om du försöker åtkomst till tredje indexet, 715 00:32:16,046 --> 00:32:18,170 det kommer att vara vad är kallas noll terminator. 716 00:32:18,170 --> 00:32:19,990 Det kommer inte att faktiskt existerar i arrayen. 717 00:32:19,990 --> 00:32:21,781 Och datorn är kommer inte att gilla det. 718 00:32:21,781 --> 00:32:24,570 Så var försiktig när du tillgång till saker bara 719 00:32:24,570 --> 00:32:28,070 att se till att du kommer ihåg att arrayer är noll indexeras. 720 00:32:28,070 --> 00:32:28,880 >> OK. 721 00:32:28,880 --> 00:32:34,030 Så det första exemplet är bara ett sätt att skapa en array. 722 00:32:34,030 --> 00:32:36,790 Det andra exemplet jag har nedan är bara ett separat sätt 723 00:32:36,790 --> 00:32:40,210 att skapa vad som är samma data struktur som vi just har matas in. 724 00:32:40,210 --> 00:32:44,347 Så i stället för att fysiskt kör igenom och sätta i temperatur av 0 725 00:32:44,347 --> 00:32:47,180 lika oavsett temperatur 1 lika oavsett, temperatur 2 jämlikar 726 00:32:47,180 --> 00:32:50,950 vad som helst, jag kunde faktiskt bara direkt skapar allt i en rad 727 00:32:50,950 --> 00:32:53,010 i temperatur hakparenteser jämlikar. 728 00:32:53,010 --> 00:32:56,536 >> Och meddelande i det här fallet, behöver du inte att ange hur stor din array är, 729 00:32:56,536 --> 00:32:59,160 eftersom datorn kommer att gå igenom och se till att det finns 730 00:32:59,160 --> 00:33:01,570 tre element i dessa klammerparenteserna. 731 00:33:01,570 --> 00:33:04,000 Och det kommer att veta, OK, Jag behöver en rad storlek 3. 732 00:33:04,000 --> 00:33:07,440 Du kommer inte att behöva in det på följande sätt. 733 00:33:07,440 --> 00:33:10,170 >> Och även, ja, på det sättet. 734 00:33:10,170 --> 00:33:12,610 Finns det någon som har några frågor om hur vi gör arrayer 735 00:33:12,610 --> 00:33:17,391 eller hur strukturen av en matris fungerar? 736 00:33:17,391 --> 00:33:17,890 Yeah. 737 00:33:17,890 --> 00:33:18,806 >> PUBLIK: [OHÖRBAR]? 738 00:33:18,806 --> 00:33:21,649 739 00:33:21,649 --> 00:33:22,690 ANDI PENG: Ja, exakt. 740 00:33:22,690 --> 00:33:26,150 Så om du skulle förklara och initiera en array följande metod, 741 00:33:26,150 --> 00:33:28,477 vilket är det andra sättet, Du kan bara lämna dem. 742 00:33:28,477 --> 00:33:30,310 Och datorn automatiskt vet att det 743 00:33:30,310 --> 00:33:33,950 måste räkna hur många element är i dessa klammerparenteser, separerade 744 00:33:33,950 --> 00:33:34,930 med kommatecken. 745 00:33:34,930 --> 00:33:37,517 >> Så här ser de 65, 87, 30. 746 00:33:37,517 --> 00:33:39,600 Så att datorn vet, åh, det finns tre heltal. 747 00:33:39,600 --> 00:33:45,960 Jag vet att skapa en array namn temperatur med tre element i den. 748 00:33:45,960 --> 00:33:46,590 Bra fråga. 749 00:33:46,590 --> 00:33:47,090 Yeah. 750 00:33:47,090 --> 00:33:51,590 >> PUBLIK: Är det inte möjligt att skapa en array med olika typer av data 751 00:33:51,590 --> 00:33:53,021 som kan föras in i det? 752 00:33:53,021 --> 00:33:56,746 Till exempel med heltal [OHÖRBAR]? 753 00:33:56,746 --> 00:33:59,120 ANDI Peng: Vid tillämpning i denna klass, nej, just nu. 754 00:33:59,120 --> 00:34:03,070 När du skapar en data strukturera som en array, 755 00:34:03,070 --> 00:34:04,990 du berätta dator, hej, jag behöver dig 756 00:34:04,990 --> 00:34:08,159 att fördela så mycket minne i min hårddisk, 757 00:34:08,159 --> 00:34:10,690 med varje cell som är en visst antal bitar. 758 00:34:10,690 --> 00:34:13,429 >> Kom ihåg att vi lärt oss i veckan noll att olika uppgifter 759 00:34:13,429 --> 00:34:15,300 typer har olika storlekar? 760 00:34:15,300 --> 00:34:17,630 Så till exempel, en sträng är ett annat belopp 761 00:34:17,630 --> 00:34:20,719 av utrymme än en char, som är en annorlunda mängd utrymme 762 00:34:20,719 --> 00:34:21,830 från ett heltal. 763 00:34:21,830 --> 00:34:25,534 Och så om du inte anger och du mixa och matcha vilka typer av variabler 764 00:34:25,534 --> 00:34:27,659 du har datorns kommer att bli mycket förvirrad. 765 00:34:27,659 --> 00:34:29,950 Och det kommer inte att veta hur mycket minne för att ge dig. 766 00:34:29,950 --> 00:34:32,480 Så i syfte att rätten nu, datorer kan bara 767 00:34:32,480 --> 00:34:36,120 erkänna en typ av en matris. 768 00:34:36,120 --> 00:34:37,940 Bra fråga. 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å naturligtvis den andra fråga som vi har 772 00:34:47,120 --> 00:34:50,760 är, ja, nu när vi har skapat en matris och vi har lagt alla dessa saker 773 00:34:50,760 --> 00:34:54,190 i gruppen, hur är vi kommer att kunna komma åt den? 774 00:34:54,190 --> 00:34:59,710 Så den typiska struktur som vi alltid tillgång till en array är vår härliga for-loop. 775 00:34:59,710 --> 00:35:03,830 Jag lovar er att vi ska vara se en hel del av den här mannen här. 776 00:35:03,830 --> 00:35:06,470 >> I huvudsak, när du vill att mata in värden i en matris 777 00:35:06,470 --> 00:35:09,940 eller om du vill komma åt dem, bästa sättet att göra det är en for-loop, 778 00:35:09,940 --> 00:35:13,730 eftersom en for-loop, du hur många gånger du 779 00:35:13,730 --> 00:35:17,290 kommer att vilja gå igenom arrayen, eftersom du har ett stopp upplaga, eller hur? 780 00:35:17,290 --> 00:35:19,680 Och varje gång du kör igenom, kan du komma åt 781 00:35:19,680 --> 00:35:21,310 ett annat element i matrisen. 782 00:35:21,310 --> 00:35:26,920 >> Och även, detta är en anledning till varför typiskt börjar vi vår för slingor på 0 värde, 783 00:35:26,920 --> 00:35:30,080 eftersom när du öppnar arrayer, du kan komma åt noll index. 784 00:35:30,080 --> 00:35:32,070 Och så paralleller mycket snyggt. 785 00:35:32,070 --> 00:35:35,295 Ni kan ha velat skriver för int i lika med 1. 786 00:35:35,295 --> 00:35:37,330 i är mindre än eller lika med 3. 787 00:35:37,330 --> 00:35:39,890 >> Men det skulle inte fungera riktigt lika bra här, eftersom du bara 788 00:35:39,890 --> 00:35:42,010 har inslag av 0, 1 och 2. 789 00:35:42,010 --> 00:35:45,815 Och så om du skulle börja din i på elementet 1, 2 och 3, 790 00:35:45,815 --> 00:35:48,440 du kommer att hamna igång av gränserna för din samling, 791 00:35:48,440 --> 00:35:50,440 och dåliga saker kommer att hända. 792 00:35:50,440 --> 00:35:54,480 >> Så jag hoppas att ni ser segue varför i de tidigare klasserna 793 00:35:54,480 --> 00:35:58,560 Vi lärde er hur du kör och formatera en for-loop det sätt som vi var. 794 00:35:58,560 --> 00:36:01,900 Det beror på, nu har vi transitioned in matriser, 795 00:36:01,900 --> 00:36:06,760 du kan se varför de 0 lånar sig mycket fint att komma åt. 796 00:36:06,760 --> 00:36:09,880 >> Så hur vi gör det är that-- jag bara skriva ut det här till förmån 797 00:36:09,880 --> 00:36:10,830 för att skriva ut det. 798 00:36:10,830 --> 00:36:13,750 Men jag har min platshållare, kommatecken. 799 00:36:13,750 --> 00:36:15,645 Och den faktiska åtkomst del sker. 800 00:36:15,645 --> 00:36:17,520 Namnet på arrayen kallades temperatur. 801 00:36:17,520 --> 00:36:21,570 Så det är temperatur och i-te elementet i uppsättningen. 802 00:36:21,570 --> 00:36:24,400 >> Så som för slingan går igenom, det kommer att börja på 0. 803 00:36:24,400 --> 00:36:27,640 Det kommer att skriva ut 0. Index för denna uppsättning. 804 00:36:27,640 --> 00:36:29,599 Sedan kommer det att skriva ut ut det första elementet. 805 00:36:29,599 --> 00:36:31,431 Sedan kommer det att skriva ut ut den andra en. 806 00:36:31,431 --> 00:36:32,880 Och sedan ska vi bryta. 807 00:36:32,880 --> 00:36:36,718 Är alla klara på hur som händer? 808 00:36:36,718 --> 00:36:37,217 Bra. 809 00:36:37,217 --> 00:36:43,230 810 00:36:43,230 --> 00:36:44,100 >> Okej. 811 00:36:44,100 --> 00:36:47,270 Så här har vi ett sätt att sade om vi inte ville 812 00:36:47,270 --> 00:36:50,020 till hårdkoda in-- mig som programmerare. 813 00:36:50,020 --> 00:36:53,320 Jag ville inte rent fysiskt sätta i varje enskilt element 814 00:36:53,320 --> 00:36:54,020 i denna matris. 815 00:36:54,020 --> 00:36:56,500 Om jag ville i stället har användaren ingångsvärden, 816 00:36:56,500 --> 00:36:58,100 vad är det bästa sättet att göra det? 817 00:36:58,100 --> 00:37:00,920 >> Tja, här har jag skapat denna härliga funktion, 818 00:37:00,920 --> 00:37:03,560 där kan jag förklara en array. 819 00:37:03,560 --> 00:37:06,210 Så int scores-- låt oss bara säga att vi vill göra 820 00:37:06,210 --> 00:37:10,660 en array som höll kvaliteter av alla 18 av eleverna här i detta avsnitt. 821 00:37:10,660 --> 00:37:12,670 Jag tror att vi har en bit mer än 18 barn i dag. 822 00:37:12,670 --> 00:37:16,460 Men exempelvis skull, låt oss bara anta att vi hade 18. 823 00:37:16,460 --> 00:37:21,580 Jag skulle skapa en array namn poäng med typen int, eftersom poäng, naturligtvis, 824 00:37:21,580 --> 00:37:22,987 är siffror. 825 00:37:22,987 --> 00:37:24,820 Och jag kommer att ha 18 inom hakparenteser, 826 00:37:24,820 --> 00:37:29,900 eftersom det är hur många studenter I vill kunna lagra massor av. 827 00:37:29,900 --> 00:37:32,206 >> Och hur jag skulle fylla matrisen är att jag skulle 828 00:37:32,206 --> 00:37:35,572 köra den genom en for-loop av Naturligtvis med 0 är min 0. index. 829 00:37:35,572 --> 00:37:38,030 Och sedan med 18 är min stoppa upplaga, eftersom det finns 830 00:37:38,030 --> 00:37:39,690 18 element i arrayen. 831 00:37:39,690 --> 00:37:44,620 Och sedan kommer jag att göra printf, Enter göra mål för student-- yada yada yada. 832 00:37:44,620 --> 00:37:51,171 >> Kan någon berätta för mig varför här är jag utskrift i plus 1 och inte i? 833 00:37:51,171 --> 00:37:52,920 Det är lite av en trick fråga, inte riktigt. 834 00:37:52,920 --> 00:37:56,020 Det gör faktiskt inte fysiskt påverka driften av koden. 835 00:37:56,020 --> 00:37:56,520 Yeah. 836 00:37:56,520 --> 00:37:57,909 >> PUBLIK: [OHÖRBAR] 0? 837 00:37:57,909 --> 00:37:58,950 ANDI PENG: Ja, exakt. 838 00:37:58,950 --> 00:38:02,620 Det är lite pinsamt att säga, hej, du är 0. student i den här klassen. 839 00:38:02,620 --> 00:38:03,780 Det är lite konstigt. 840 00:38:03,780 --> 00:38:08,340 Så oss, som människor, inte riktigt gillar att tänka på hur datorer tänker. 841 00:38:08,340 --> 00:38:10,930 Så även om i dator, det lagra värden 842 00:38:10,930 --> 00:38:13,310 i 0: te indexet, när vi är människor, gör vi inte riktigt 843 00:38:13,310 --> 00:38:15,520 vilja hänvisa till oss som noll. 844 00:38:15,520 --> 00:38:18,119 Så när jag bara skriva ut det, Jag kommer att skriva ut och lägga till 845 00:38:18,119 --> 00:38:19,410 1 bara för tydlighetens skull. 846 00:38:19,410 --> 00:38:22,447 Så när jag skriver ut, jag kommer att vara kunna skriva ut studenter 1 till 18. 847 00:38:22,447 --> 00:38:24,530 Det faktiskt inte påverka driften av koden 848 00:38:24,530 --> 00:38:27,110 på något sätt, som jag skriver ut. 849 00:38:27,110 --> 00:38:30,380 >> Men var försiktig när du faktiskt tillgång till uppsättningen. 850 00:38:30,380 --> 00:38:32,780 När du ser poängen i, märker här jag faktiskt 851 00:38:32,780 --> 00:38:38,200 åtkomst till 0:e index och inte ett plus 0-- eller 1 plus 1, 852 00:38:38,200 --> 00:38:45,530 i detta fall, index så att det är faktiskt klart. 853 00:38:45,530 --> 00:38:48,870 Är alla slags OK på hur detta löper genom 854 00:38:48,870 --> 00:38:51,470 och med varje index jag sätta ett värde i arrayen 855 00:38:51,470 --> 00:38:55,340 och skapa en array med 18 nummer att användaren kommer att ingång? 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 Häftigt. 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 har nu flytta in i något som är ganska relevant för denna pjäs inställd liksom. 862 00:39:12,220 --> 00:39:15,020 Jag har föreläsning, David-- ledsen, du hade en fråga? 863 00:39:15,020 --> 00:39:16,840 >> PUBLIK: Kan du förstora den? 864 00:39:16,840 --> 00:39:18,080 >> ANDI PENG: Ja, så jag försökte. 865 00:39:18,080 --> 00:39:18,788 Men jag vet inte. 866 00:39:18,788 --> 00:39:21,437 Av någon anledning, denna version av PowerPoint 867 00:39:21,437 --> 00:39:23,270 är verkligen inte fungerar väl med displayen. 868 00:39:23,270 --> 00:39:25,260 Så vi ska bara att hålla det så här. 869 00:39:25,260 --> 00:39:27,280 Alla dessa kommer att laddas upp på nätet. 870 00:39:27,280 --> 00:39:28,218 Ledsen, killar. 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å kan vi också ha strängar. 874 00:39:35,530 --> 00:39:39,320 Så om ni faktiskt notice-- jag vet Rob gick över detta i föreläsningen 875 00:39:39,320 --> 00:39:43,652 att han did-- en sträng är faktiskt bara en uppsättning av tecken, 876 00:39:43,652 --> 00:39:44,860 om man tänker på det, eller hur? 877 00:39:44,860 --> 00:39:47,500 En sträng är ett namn eller ett mening eller ett ord, eller hur? 878 00:39:47,500 --> 00:39:52,975 >> Om jag skulle skapa en sträng som heter Andi-- bara mitt namn, A-N-D-I. 879 00:39:52,975 --> 00:39:55,460 Du tänker på det som bara en variabel. 880 00:39:55,460 --> 00:39:58,630 Men egentligen, det är uppdelade i bara en rad tecken. 881 00:39:58,630 --> 00:40:01,910 Så det har fått en karaktär en lagrad i ett gruppvärde. 882 00:40:01,910 --> 00:40:05,420 Det har fått en karaktär n lagras i andra index och så vidare och så vidare. 883 00:40:05,420 --> 00:40:08,660 >> Så på ett sådant sätt, vi faktiskt har denna typ 884 00:40:08,660 --> 00:40:10,970 med strukturen som i plats för våra strängar. 885 00:40:10,970 --> 00:40:14,660 Så här, om jag skulle mata in ordet "äta" - så sträng ord lika 886 00:40:14,660 --> 00:40:15,540 få sträng. 887 00:40:15,540 --> 00:40:19,260 Om jag skulle mata in ordet "äta", att är fysiskt sätt som min dator 888 00:40:19,260 --> 00:40:21,870 lagrar strängen i mitt minne. 889 00:40:21,870 --> 00:40:27,140 >> Och om jag ville gå igenom det och tryck som out-- så för in i 890 00:40:27,140 --> 00:40:30,890 är lika med noll, kom ihåg, i föreläsning, vi täckt något som kallas strlen, 891 00:40:30,890 --> 00:40:32,990 eller längden av strängen. 892 00:40:32,990 --> 00:40:36,520 Eftersom jag egentligen inte vet hur stor matrisen är 893 00:40:36,520 --> 00:40:38,210 oavsett användarens inputting-- 894 00:40:38,210 --> 00:40:40,370 >> Exempelvis inmatas jag ordet "äta", och jag vet 895 00:40:40,370 --> 00:40:41,870 som är tre tecken, eller hur? 896 00:40:41,870 --> 00:40:44,700 Så jag kunde sätta i en tre där och allt kommer att bli bra. 897 00:40:44,700 --> 00:40:49,290 Men om din användarinmatnings något det är en annan antal värden, 898 00:40:49,290 --> 00:40:52,760 du kommer att inte att kunna verkligen vet att när du programmerar din kod. 899 00:40:52,760 --> 00:40:56,040 >> Så det sätt som vi hanterar testfall som det är att vi har något 900 00:40:56,040 --> 00:41:00,070 kallas strlen, som ligger bara en funktion som talar om hur länge en sträng är. 901 00:41:00,070 --> 00:41:02,080 Så strlen av ord. 902 00:41:02,080 --> 00:41:03,470 Mitt ord är äter. 903 00:41:03,470 --> 00:41:05,990 n är lika strlen av ord. 904 00:41:05,990 --> 00:41:08,930 Kan någon berätta för mig vad som värde faktiskt finns rätt? 905 00:41:08,930 --> 00:41:12,550 Vad n representerar rätt nu, i det här exemplet, om jag hade äta? 906 00:41:12,550 --> 00:41:13,530 >> Publik: 3. 907 00:41:13,530 --> 00:41:14,520 >> ANDI PENG: 3, exakt. 908 00:41:14,520 --> 00:41:18,820 Så vi har för int i lika noll, n är lika med 3, i huvudsak. 909 00:41:18,820 --> 00:41:22,355 Och jag kommer att köra tills det är mindre än 3i ++. 910 00:41:22,355 --> 00:41:24,980 Och det kommer att i huvudsak gå igenom och göra samma sak. 911 00:41:24,980 --> 00:41:26,979 Det kommer att skriva ut varje värde och ger dig 912 00:41:26,979 --> 00:41:29,700 E-A-T. Det är bara anger en olika sätt att skriva det. 913 00:41:29,700 --> 00:41:31,170 Det kommer att vara till stor hjälp. 914 00:41:31,170 --> 00:41:31,670 Yeah. 915 00:41:31,670 --> 00:41:35,174 PUBLIK: Vad är fördelarna med att sätta n är lika med strlen ord inuti som 916 00:41:35,174 --> 00:41:36,894 för loop [OHÖRBAR]? 917 00:41:36,894 --> 00:41:37,560 ANDI PENG: Ja. 918 00:41:37,560 --> 00:41:44,880 Så om jag skulle att-- säga, till exempel, om jag skulle göra det och sedan 919 00:41:44,880 --> 00:41:51,935 do-- oop-- att i min kod, det skulle faktiskt vara att göra som samma sak. 920 00:41:51,935 --> 00:41:55,060 Men det sätt som David förklarade det under föreläsning, om någon av er killar 921 00:41:55,060 --> 00:41:57,854 kom ihåg, var att, som människor, som programmerare, 922 00:41:57,854 --> 00:42:00,270 vi verkligen försöker programmera vår koden så att vår dator har 923 00:42:00,270 --> 00:42:04,070 att arbeta så liten som möjligt, så att vår kod är mycket effektiv. 924 00:42:04,070 --> 00:42:06,850 >> Så om jag var tvungen att, vad skulle ske genom mitt för loop 925 00:42:06,850 --> 00:42:10,790 är att jag först skulle förklara en variabel som heter i kommer att vara 0. 926 00:42:10,790 --> 00:42:13,350 Jag kommer att kontrollera, oh, vad är strlen av ord? 927 00:42:13,350 --> 00:42:15,000 Åh, är strlen 3. 928 00:42:15,000 --> 00:42:16,191 Så är jag mindre än tre? 929 00:42:16,191 --> 00:42:16,690 Ja det är det. 930 00:42:16,690 --> 00:42:17,870 Jag kommer att köra. 931 00:42:17,870 --> 00:42:21,130 >> Och sedan den andra gången tillbaka runt slingan, kommer jag att öka i. 932 00:42:21,130 --> 00:42:22,550 Jag kommer att bli en. 933 00:42:22,550 --> 00:42:25,600 Och jag kommer att kontrollera, oh, men vad är strlen av ordet? 934 00:42:25,600 --> 00:42:26,839 Åh, det är tre. 935 00:42:26,839 --> 00:42:29,880 Och gör det verkar typ av slöseri, varje gång du kör genom öglan, 936 00:42:29,880 --> 00:42:33,340 att kontrollera funktionen, även om strlen av ord 937 00:42:33,340 --> 00:42:35,490 aldrig förändras? 938 00:42:35,490 --> 00:42:38,590 >> Så det är extra kraft för en dator. 939 00:42:38,590 --> 00:42:42,180 När du börjar prata om saker som finns miljarder och miljarder 940 00:42:42,180 --> 00:42:44,431 och miljarder platser lång, föreställa din dator 941 00:42:44,431 --> 00:42:47,430 att fysiskt gå igenom och kontrollera alla att varje enskild tid. 942 00:42:47,430 --> 00:42:53,170 Det är därför, att bara göra för effektivitetens skull, 943 00:42:53,170 --> 00:42:57,620 vi tenderar att bara göra detta, eftersom detta sätt vi bara 944 00:42:57,620 --> 00:42:59,850 anropa funktionen en gång i början, 945 00:42:59,850 --> 00:43:01,766 och att varje gång det går igenom det kommer 946 00:43:01,766 --> 00:43:03,789 att lagra värdet 3 där, att du inte 947 00:43:03,789 --> 00:43:05,330 måste ständigt kontrollera varje gång. 948 00:43:05,330 --> 00:43:05,743 Yeah. 949 00:43:05,743 --> 00:43:06,409 >> PUBLIK: Förlåt. 950 00:43:06,409 --> 00:43:09,070 Bara [OHÖRBAR]. 951 00:43:09,070 --> 00:43:13,985 Kan du int n lika strlen och sätta att över utsidan av for-slingan 952 00:43:13,985 --> 00:43:15,364 också? 953 00:43:15,364 --> 00:43:16,030 ANDI PENG: Ja. 954 00:43:16,030 --> 00:43:17,100 Du kan göra det, absolut. 955 00:43:17,100 --> 00:43:19,970 Anledningen till att vi har det här är eftersom det sätt en for-loop arbeten 956 00:43:19,970 --> 00:43:23,500 är att det kallas en lokal variabel i den mening 957 00:43:23,500 --> 00:43:26,150 att allt du är skapa insida för slingan 958 00:43:26,150 --> 00:43:27,890 bara finns inne i for-slingan. 959 00:43:27,890 --> 00:43:31,530 >> Så variabeln i endast existerar i dessa konsoler. 960 00:43:31,530 --> 00:43:35,260 Och här variablerna n också bara förekommer i dessa konsoler. 961 00:43:35,260 --> 00:43:39,350 Så om du skulle använda strlen av ord flera gånger ner nedan 962 00:43:39,350 --> 00:43:42,230 absolut det bästa sättet att göra det skulle vara att förklara den upp upp 963 00:43:42,230 --> 00:43:43,563 så att du inte behöver göra det en gång. 964 00:43:43,563 --> 00:43:45,420 Yeah. 965 00:43:45,420 --> 00:43:47,670 PUBLIK: Varför har du en ny rad efter den procentuella 966 00:43:47,670 --> 00:43:51,300 se om du vill lägga alla bokstäverna bredvid den separera? 967 00:43:51,300 --> 00:43:54,140 >> ANDI PENG: Åh, jag ville skriva ut dem alla på varje rad. 968 00:43:54,140 --> 00:43:54,890 Det spelar ingen roll. 969 00:43:54,890 --> 00:43:55,890 Ja, det är en formatering. 970 00:43:55,890 --> 00:43:57,181 Det är en bra fråga, men. 971 00:43:57,181 --> 00:43:59,360 Ja, om jag ville skriva ut allt på bara en rad, 972 00:43:59,360 --> 00:44:02,731 Jag skulle inte ha streck i. 973 00:44:02,731 --> 00:44:03,230 OK. 974 00:44:03,230 --> 00:44:06,880 Alla bra? 975 00:44:06,880 --> 00:44:07,500 OK. 976 00:44:07,500 --> 00:44:08,000 Häftigt. 977 00:44:08,000 --> 00:44:12,080 978 00:44:12,080 --> 00:44:14,750 >> Så jag tror att jag har pratat tillräckligt. 979 00:44:14,750 --> 00:44:20,040 Ni tur att gå igenom kod och berätta vad som är fel här. 980 00:44:20,040 --> 00:44:21,560 Var är felet? 981 00:44:21,560 --> 00:44:26,920 Så som ni kan se, har jag förklarade en ny array av typen sträng som heter klass. 982 00:44:26,920 --> 00:44:30,220 Och jag har inmatade Sam, Jess och Kim i den. 983 00:44:30,220 --> 00:44:33,400 Och jag försöker skriva ut alla element i uppsättningen. 984 00:44:33,400 --> 00:44:36,796 Kan någon berätta för mig varför detta kommer att ge mig problem? 985 00:44:36,796 --> 00:44:39,320 Jag ska ge er 10 sekunder att tänka på detta. 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 >> PUBLIK: Är vänster centrum lika med 3 eller [OHÖRBAR]? 990 00:45:01,972 --> 00:45:02,680 ANDI PENG: Rätt. 991 00:45:02,680 --> 00:45:06,784 Så hur många gånger är detta faktiskt kommer att gå igenom denna loop? 992 00:45:06,784 --> 00:45:07,620 >> PUBLIK: Fyra. 993 00:45:07,620 --> 00:45:08,070 >> ANDI PENG: Exakt. 994 00:45:08,070 --> 00:45:09,445 Det kommer att genom fyra gånger. 995 00:45:09,445 --> 00:45:12,250 Det kommer att gå igenom vid 0, 1, 2, och 3, 996 00:45:12,250 --> 00:45:15,200 eftersom sitt rätta element är i är mindre än eller lika med 3. 997 00:45:15,200 --> 00:45:16,960 Det kommer inte att sluta när det är 2. 998 00:45:16,960 --> 00:45:18,800 Det kommer att hålla gå tills den träffar 3. 999 00:45:18,800 --> 00:45:21,720 Och som vi vet, det finns bara tre element i våra faktiska array. 1000 00:45:21,720 --> 00:45:27,260 >> Om vi ​​försöker komma åt den fjärde element eller index för 3, 1001 00:45:27,260 --> 00:45:30,357 du kommer att träffa någonstans i minnet som inte existerar. 1002 00:45:30,357 --> 00:45:31,690 Det kallas noll terminator. 1003 00:45:31,690 --> 00:45:32,856 Ingenting kommer att vara där. 1004 00:45:32,856 --> 00:45:35,324 Datorn kommer inte att vara mycket nöjd med dig. 1005 00:45:35,324 --> 00:45:36,170 Yeah. 1006 00:45:36,170 --> 00:45:38,430 Finns det någon som har några frågor om varför det hände? 1007 00:45:38,430 --> 00:45:39,679 Det är ett gemensamt område att undvika. 1008 00:45:39,679 --> 00:45:40,712 Yeah. 1009 00:45:40,712 --> 00:45:45,777 >> PUBLIK: Gör inte den första Skjut också har en rad 2? 1010 00:45:45,777 --> 00:45:46,360 ANDI PENG: Nej 1011 00:45:46,360 --> 00:45:49,610 Så i huvudsak, när du gör en matris, 1012 00:45:49,610 --> 00:45:51,540 att fästet höger där, som number-- alla 1013 00:45:51,540 --> 00:45:53,480 det talar om för dig är hur många element jag har. 1014 00:45:53,480 --> 00:45:55,840 Det är faktiskt inte berätta mig index av något. 1015 00:45:55,840 --> 00:45:58,760 Så i detta fall, jag vet att jag vill att skriva med tre platser, 1016 00:45:58,760 --> 00:46:02,690 med tre fysiska platser till hålla vad jag vill hålla. 1017 00:46:02,690 --> 00:46:04,510 Så det är därför nummer tre är där. 1018 00:46:04,510 --> 00:46:06,560 Men om jag ville att faktiskt få tillgång till det, 1019 00:46:06,560 --> 00:46:11,220 om jag ville säga, printf klass fäste nummer, sedan 1020 00:46:11,220 --> 00:46:14,560 du kommer att faktiskt sätta den fysiska indexet där. 1021 00:46:14,560 --> 00:46:16,330 Ja, bra fråga. 1022 00:46:16,330 --> 00:46:20,065 >> PUBLIK: Så är den fysiska index ska vara [OHÖRBAR]? 1023 00:46:20,065 --> 00:46:20,940 ANDI PENG: Jag är ledsen. 1024 00:46:20,940 --> 00:46:21,500 Kan du tala lite? 1025 00:46:21,500 --> 00:46:24,208 >> PUBLIK: Så är den fysiska index [OHÖRBAR] vart och ett av lådorna? 1026 00:46:24,208 --> 00:46:25,260 [OHÖRBAR]? 1027 00:46:25,260 --> 00:46:26,040 >> ANDI PENG: Ja. 1028 00:46:26,040 --> 00:46:28,970 Så jag kommer att gå tillbaka till här. 1029 00:46:28,970 --> 00:46:31,120 Tänk på här. 1030 00:46:31,120 --> 00:46:32,820 Vi har en rad storlek 3. 1031 00:46:32,820 --> 00:46:35,540 Det finns tre platser, som, fysiska platshållare i här. 1032 00:46:35,540 --> 00:46:37,620 Men de är namngivna 0, 1 och 2. 1033 00:46:37,620 --> 00:46:40,700 Så om jag ville komma åt dem, det sätt som jag åt dem 1034 00:46:40,700 --> 00:46:43,480 är printf av vad jag ville här. 1035 00:46:43,480 --> 00:46:45,485 Du skulle behöva skriva ut ut namnet på den, 1036 00:46:45,485 --> 00:46:47,610 för då datorn vet, åh, jag måste se 1037 00:46:47,610 --> 00:46:51,391 i denna array för 0:e indexet. 1038 00:46:51,391 --> 00:46:51,890 Yeah. 1039 00:46:51,890 --> 00:46:53,306 Men storleken på det ändrar inte. 1040 00:46:53,306 --> 00:46:55,492 Storleken är 3, oavsett hur du märka 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 Alla bra? 1044 00:47:01,387 --> 00:47:02,970 PUBLIK: Så varje gång jag [OHÖRBAR]? 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 detta fall, gör vi inte riktigt komma in i det just nu i kursen. 1048 00:47:13,270 --> 00:47:16,760 Men vet att en string-- som jag sade tidigare, en sträng är i huvudsak 1049 00:47:16,760 --> 00:47:18,440 en array av tecken. 1050 00:47:18,440 --> 00:47:21,430 Så om jag kan skapa en array strängar, jag typ av 1051 00:47:21,430 --> 00:47:24,430 har en rad array tecken, eller hur? 1052 00:47:24,430 --> 00:47:27,720 >> Så i detta fall, eftersom jag har en array med strängar, 1053 00:47:27,720 --> 00:47:31,340 om du skulle mata in ett riktigt långt ord, som fortfarande tar upp bara en plats, 1054 00:47:31,340 --> 00:47:33,230 eftersom det är en sträng. 1055 00:47:33,230 --> 00:47:37,492 Men om du skulle tänka på karaktärerna i denna samling, 1056 00:47:37,492 --> 00:47:40,450 då tar upp en hel del mer tecken än någon av de andra ord 1057 00:47:40,450 --> 00:47:41,372 är. 1058 00:47:41,372 --> 00:47:42,830 Inte riktigt viktigt för just nu. 1059 00:47:42,830 --> 00:47:44,921 Men det är bara allmänt hur det fungerar. 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å det här är något jag kommer att låta dig göra en hel del under loppet av terminen. 1063 00:47:55,840 --> 00:47:57,500 Jag behöver vila min röst. 1064 00:47:57,500 --> 00:47:59,530 Ni måste stimulera er. 1065 00:47:59,530 --> 00:48:02,300 En hel del av er förmodligen måste sova nu. 1066 00:48:02,300 --> 00:48:05,960 Jag mata slumpmässiga problem där vi som en klass eller du 1067 00:48:05,960 --> 00:48:09,480 med en partner bredvid dig kommer tillbringa ett par minuter att diskutera 1068 00:48:09,480 --> 00:48:14,980 om hur vi skulle gå om att lösa eller skapa ett program som detta. 1069 00:48:14,980 --> 00:48:17,100 >> Så just nu, vill vi att skapa en program-- 1070 00:48:17,100 --> 00:48:19,560 vi kommer att kalla det upper.c-- som omvandlar 1071 00:48:19,560 --> 00:48:24,787 ett gement ord till en överklass string-- versaler, sorry. 1072 00:48:24,787 --> 00:48:26,370 Ord i strängar, ledsen, är synonymt. 1073 00:48:26,370 --> 00:48:28,370 Jag kommer att ändra dem att betyda samma sak. 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 ett par minuter. 1077 00:48:34,540 --> 00:48:37,130 Det behöver inte vara skriven på valfritt språk. 1078 00:48:37,130 --> 00:48:39,890 Bara i pseudokod kod eller logiskt hur vi skulle även 1079 00:48:39,890 --> 00:48:42,083 gå om att göra ett sådant 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 SAMTAL] 1083 00:48:52,780 --> 00:49:18,680 1084 00:49:18,680 --> 00:49:22,130 >> Jag märkte också att ni can-- Jag sorts ser redan programmet. 1085 00:49:22,130 --> 00:49:24,600 Jag antar att min brist på presentatör läget är ett problem. 1086 00:49:24,600 --> 00:49:27,410 Men det är okej. 1087 00:49:27,410 --> 00:49:30,410 >> [SIDE SAMTAL] 1088 00:49:30,410 --> 00:50:03,589 1089 00:50:03,589 --> 00:50:04,380 Ja, snälla, killar. 1090 00:50:04,380 --> 00:50:05,400 Kom få godis. 1091 00:50:05,400 --> 00:50:06,372 Kom få godis. 1092 00:50:06,372 --> 00:50:07,698 >> PUBLIK: Yes! 1093 00:50:07,698 --> 00:50:09,958 >> [SIDE SAMTAL] 1094 00:50:09,958 --> 00:50:16,101 1095 00:50:16,101 --> 00:50:18,100 ANDI PENG: Också, ja, Jag ska börja kasta godis 1096 00:50:18,100 --> 00:50:20,280 på människor som inte svara på frågor. 1097 00:50:20,280 --> 00:50:22,260 Så du bör alla svara på frågor. 1098 00:50:22,260 --> 00:50:24,895 Eller jag antar att människor som svarar på frågor. 1099 00:50:24,895 --> 00:50:26,070 Ja, tvärtom. 1100 00:50:26,070 --> 00:50:28,570 >> [SIDE SAMTAL] 1101 00:50:28,570 --> 00:51:13,399 1102 00:51:13,399 --> 00:51:14,274 PUBLIK: [OHÖRBAR] 1103 00:51:14,274 --> 00:51:17,300 1104 00:51:17,300 --> 00:51:18,340 >> ANDI PENG: Ja. 1105 00:51:18,340 --> 00:51:19,340 Yeah. 1106 00:51:19,340 --> 00:51:22,840 >> [SIDE SAMTAL] 1107 00:51:22,840 --> 00:51:40,700 1108 00:51:40,700 --> 00:51:41,590 >> Okej, killar. 1109 00:51:41,590 --> 00:51:44,731 Ta ut, ytterligare 10 sekunder. 1110 00:51:44,731 --> 00:51:48,210 >> [SIDE SAMTAL] 1111 00:51:48,210 --> 00:52:10,600 1112 00:52:10,600 --> 00:52:11,750 >> OK, killar. 1113 00:52:11,750 --> 00:52:14,920 Så innan vi börjar försöker faktiskt fysiskt skriva kod, 1114 00:52:14,920 --> 00:52:20,650 en god vana att utveckla är att vi vill första typen av skäl 1115 00:52:20,650 --> 00:52:22,737 logiskt hur vi skulle göra det. 1116 00:52:22,737 --> 00:52:24,570 Du vill vara säker på, innan du fysiskt 1117 00:52:24,570 --> 00:52:27,210 börjar försöka koda i Mario, att du gör 1118 00:52:27,210 --> 00:52:28,870 Se till att du har din pseudokod. 1119 00:52:28,870 --> 00:52:31,235 Som tar dig genom vad du behöver för att skapa så 1120 00:52:31,235 --> 00:52:33,360 att när du fysiskt skriva ditt program senare, 1121 00:52:33,360 --> 00:52:36,640 du är bättre på att fånga upp fel i din kod och sånt. 1122 00:52:36,640 --> 00:52:40,460 >> Så vi ska bara börja by-- på engelska, i pseudokod, 1123 00:52:40,460 --> 00:52:43,320 Finns det någon som vill ge mig en generisk förklaring 1124 00:52:43,320 --> 00:52:46,250 om hur vi skulle gå om att göra detta? 1125 00:52:46,250 --> 00:52:48,102 Yeah. 1126 00:52:48,102 --> 00:52:49,664 >> PUBLIK: [OHÖRBAR]. 1127 00:52:49,664 --> 00:52:50,830 ANDI PENG: Visst, inga bekymmer. 1128 00:52:50,830 --> 00:52:57,233 PUBLIK: Kan du be den eller fråga någon att få sträng 1-- ja, sträng, 1129 00:52:57,233 --> 00:52:58,160 och då-- 1130 00:52:58,160 --> 00:52:59,826 >> ANDI PENG: Ja, så det här är en bra start. 1131 00:52:59,826 --> 00:53:01,972 Jag ska börja skriva, ledsen, som du talar. 1132 00:53:01,972 --> 00:53:02,471 So-- 1133 00:53:02,471 --> 00:53:05,698 >> PUBLIK: --Den gemener siffror är högre, eller hur? 1134 00:53:05,698 --> 00:53:08,519 Eller de gemener har höga siffror? 1135 00:53:08,519 --> 00:53:09,310 ANDI PENG: Exakt. 1136 00:53:09,310 --> 00:53:16,156 PUBLIK: Så då kan vi subtrahera 32 från vad [OHÖRBAR]. 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 allmän mening om hur man arbetar på det här problemet. 1140 00:53:35,020 --> 00:53:40,060 Att veta att vi har sådan lärt den fysiska sätt som strängar 1141 00:53:40,060 --> 00:53:43,320 lagras i minnet, vad gör du redan 1142 00:53:43,320 --> 00:53:45,920 vet att du kommer att förmodligen måste skriva in din kod 1143 00:53:45,920 --> 00:53:48,288 För att gå igenom strängen? 1144 00:53:48,288 --> 00:53:49,259 >> Publik: För loop. 1145 00:53:49,259 --> 00:53:50,550 ANDI PENG: A för loop, exakt. 1146 00:53:50,550 --> 00:53:56,540 1147 00:53:56,540 --> 00:53:57,220 Bra. 1148 00:53:57,220 --> 00:54:00,539 Så vi slags har en generisk pseudo nedskrivna 1149 00:54:00,539 --> 00:54:02,330 den typen av ger dig noterar på hur du 1150 00:54:02,330 --> 00:54:03,900 skulle flytta om att lösa problemet. 1151 00:54:03,900 --> 00:54:06,150 Nu när du har det, du kan referera till den till senare 1152 00:54:06,150 --> 00:54:08,233 när du försöker faktiskt skriva din kod. 1153 00:54:08,233 --> 00:54:10,240 Så vi kan faktiskt gå hit. 1154 00:54:10,240 --> 00:54:25,130 Och jag har en funktion som kallas upper.c-- där det är-- av bara en tom mall 1155 00:54:25,130 --> 00:54:28,510 just nu som ni kommer att hjälpa mig att räkna ut om hur man skriver 1156 00:54:28,510 --> 00:54:30,430 denna rad av code-- inte kodrad. 1157 00:54:30,430 --> 00:54:32,890 Det kommer att finnas flera rader kod. 1158 00:54:32,890 --> 00:54:35,710 >> När du startar någon form tom pset, vad är 1159 00:54:35,710 --> 00:54:37,418 det första jag behöver komma ihåg att göra? 1160 00:54:37,418 --> 00:54:39,290 >> PUBLIK: [OHÖRBAR]. 1161 00:54:39,290 --> 00:54:41,000 >> ANDI PENG: Great Yep. 1162 00:54:41,000 --> 00:54:41,500 Inkludera. 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 Ofta är detta en av de mest enkla misstag folk 1166 00:54:49,640 --> 00:54:51,598 kommer att göra när de är skriva, är att de ska 1167 00:54:51,598 --> 00:54:54,180 glömma att ta med en viktiga bibliotek som de behöver. 1168 00:54:54,180 --> 00:54:57,689 Så om det är kontorstid och du är som, Jag vet inte varför min kod inte fungerar. 1169 00:54:57,689 --> 00:54:59,230 Kan du berätta för mig varför det inte fungerar? 1170 00:54:59,230 --> 00:55:00,730 Vi kommer att säga har 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 standard-I / O här. 1174 00:55:07,230 --> 00:55:10,740 Är det den enda biblioteket vi kommer att behöva här? 1175 00:55:10,740 --> 00:55:12,681 Vad ska vi göra? 1176 00:55:12,681 --> 00:55:13,180 Förlåt. 1177 00:55:13,180 --> 00:55:14,562 Någon bara skrika ut det? 1178 00:55:14,562 --> 00:55:15,666 >> PUBLIK: [OHÖRBAR]. 1179 00:55:15,666 --> 00:55:16,666 ANDI PENG: Det gå du. 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 Och hur går jag om att starta någon form funktion, någon form av huvuduppgift 1183 00:55:26,070 --> 00:55:28,760 inom 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 Vad gör jag sätta in här? 1188 00:55:35,970 --> 00:55:37,640 Vad är det första du vill göra? 1189 00:55:37,640 --> 00:55:39,910 Om vi ​​vill få en sträng från användaren, 1190 00:55:39,910 --> 00:55:43,870 Vad ska vi ha att göra på denna första raden? 1191 00:55:43,870 --> 00:55:46,120 Tyvärr, ni bara känner fri att tala och högt. 1192 00:55:46,120 --> 00:55:47,123 Bara skrika ut vad. 1193 00:55:47,123 --> 00:55:48,772 >> PUBLIK: Be användaren? 1194 00:55:48,772 --> 00:55:49,980 ANDI PENG: Hur gör vi det? 1195 00:55:49,980 --> 00:55:51,873 Ask-- jag kommer att skriva "be användaren"? 1196 00:55:51,873 --> 00:55:52,600 >> PUBLIK: 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 Vad vill jag printf? 1200 00:55:57,372 --> 00:55:58,776 >> PUBLIK: Skriv in något. 1201 00:55:58,776 --> 00:56:02,760 1202 00:56:02,760 --> 00:56:03,840 >> ANDI PENG: Gillar du det? 1203 00:56:03,840 --> 00:56:05,430 Killar, låtsas som om jag är en dator. 1204 00:56:05,430 --> 00:56:08,475 Fysiskt berätta varje steg att jag måste skriva in här? 1205 00:56:08,475 --> 00:56:09,600 Gör jag något fel? 1206 00:56:09,600 --> 00:56:10,743 Skulle jag ha skrivit något? 1207 00:56:10,743 --> 00:56:11,690 >> PUBLIK: Du måste offerter. 1208 00:56:11,690 --> 00:56:12,380 >> ANDI PENG: Jag behöver citat? 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 >> PUBLIK: Och sedan nya linjen. 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 God. 1218 00:56:24,560 --> 00:56:27,060 >> PUBLIK: Och kanske ange att du vill ha det med gemener? 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 Ni skrattar åt mig glömmer att sätta ett semikolon. 1222 00:56:33,540 --> 00:56:36,350 Jag garanterar att du någonstans under loppet av denna klass, 1223 00:56:36,350 --> 00:56:38,260 du kommer att glömma att sätta ett semikolon, och det 1224 00:56:38,260 --> 00:56:41,116 tar dig tre timmar att räkna varför din kod inte fungerar. 1225 00:56:41,116 --> 00:56:42,240 Det har hänt oss alla. 1226 00:56:42,240 --> 00:56:43,950 Det kommer förmodligen att hända dig. 1227 00:56:43,950 --> 00:56:46,352 Få en bra vana att använda semikolon. 1228 00:56:46,352 --> 00:56:46,852 OK. 1229 00:56:46,852 --> 00:56:49,010 >> PUBLIK: Vill du att göra det omvända snedstrecket i? 1230 00:56:49,010 --> 00:56:50,398 >> ANDI PENG: Visst. 1231 00:56:50,398 --> 00:56:51,856 Vill du göra bakstreck? 1232 00:56:51,856 --> 00:56:53,020 >> PUBLIK: 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 Vad ska jag göra nu? 1236 00:56:57,872 --> 00:56:58,964 >> PUBLIK: Få sträng. 1237 00:56:58,964 --> 00:56:59,880 ANDI PENG: Få sträng. 1238 00:56:59,880 --> 00:57:03,080 1239 00:57:03,080 --> 00:57:03,830 Så vad ska jag skriva? 1240 00:57:03,830 --> 00:57:04,233 Någon? 1241 00:57:04,233 --> 00:57:05,040 >> PUBLIK: String s. 1242 00:57:05,040 --> 00:57:05,873 >> ANDI Peng: String s. 1243 00:57:05,873 --> 00:57:07,251 PUBLIK: getString. 1244 00:57:07,251 --> 00:57:09,000 ANDI PENG: Någon, kan du berätta var 1245 00:57:09,000 --> 00:57:12,000 denna funktion getString kommer ifrån? 1246 00:57:12,000 --> 00:57:13,660 >> PUBLIK: string.h. 1247 00:57:13,660 --> 00:57:15,256 >> ANDI PENG: string.h? 1248 00:57:15,256 --> 00:57:16,715 Tror du att det är från string.h? 1249 00:57:16,715 --> 00:57:17,830 >> PUBLIK: [OHÖRBAR]. 1250 00:57:17,830 --> 00:57:18,830 >> ANDI PENG: Det gå du. 1251 00:57:18,830 --> 00:57:21,280 Det är från CS50.h. 1252 00:57:21,280 --> 00:57:24,530 Om du alltid förvirrad om var en biblioteksfil är eller sidhuvudfilen är, 1253 00:57:24,530 --> 00:57:28,450 google rally string.h, och jag ska säga dig 1254 00:57:28,450 --> 00:57:30,450 vilka är alla de funktioner som som är i string.h. 1255 00:57:30,450 --> 00:57:31,340 OK. 1256 00:57:31,340 --> 00:57:35,210 >> Så nu när jag har skapat en sträng och jag har fråga användaren om det, 1257 00:57:35,210 --> 00:57:38,770 Jag har sparat den i en variabel heter s, vad behöver jag göra nu? 1258 00:57:38,770 --> 00:57:40,652 >> PUBLIK: Kontrollera om det är i små bokstäver. 1259 00:57:40,652 --> 00:57:41,360 ANDI PENG: Förlåt? 1260 00:57:41,360 --> 00:57:42,545 PUBLIK: Kontrollera om det är i små bokstäver. 1261 00:57:42,545 --> 00:57:44,045 ANDI PENG: Okej, låt oss göra det. 1262 00:57:44,045 --> 00:57:45,857 Hur gör jag det? 1263 00:57:45,857 --> 00:57:47,940 Faktiskt, när det gäller av klassen just nu, 1264 00:57:47,940 --> 00:57:50,330 Vi ska bara anta att allt 1265 00:57:50,330 --> 00:57:52,620 att vi ingången är redan i gemener. 1266 00:57:52,620 --> 00:57:55,430 Om du ville kolla, skulle du bara lägga till en villkorssats 1267 00:57:55,430 --> 00:57:59,640 som kontrolleras, sprang att genom varenda arrayelement 1268 00:57:59,640 --> 00:58:02,540 och kontrolleras om det är mellan vissa värden. 1269 00:58:02,540 --> 00:58:05,627 Jag har glömt vad numret av värden på gemener är. 1270 00:58:05,627 --> 00:58:07,210 Du kan leta upp det på ASCII tabellen. 1271 00:58:07,210 --> 00:58:08,800 Men ja, det är en riktigt bra poäng. 1272 00:58:08,800 --> 00:58:11,758 Men just nu, vi kommer bara att anta att alla strängar vi input 1273 00:58:11,758 --> 00:58:13,130 är i gemener. 1274 00:58:13,130 --> 00:58:13,870 OK. 1275 00:58:13,870 --> 00:58:18,069 >> Så hur skulle jag gå om detta problem nästa? 1276 00:58:18,069 --> 00:58:18,860 Publik: För loop. 1277 00:58:18,860 --> 00:58:19,340 ANDI PENG: För loop? 1278 00:58:19,340 --> 00:58:19,839 OK. 1279 00:58:19,839 --> 00:58:20,847 Säg mig vad jag ska skriva. 1280 00:58:20,847 --> 00:58:25,230 >> PUBLIK: För int i lika med 0. 1281 00:58:25,230 --> 00:58:27,230 >> ANDI PENG: OK. 1282 00:58:27,230 --> 00:58:36,350 >> Målgrupp: Åh, faktiskt, så du gör ett kommatecken och gör n är lika strlen. 1283 00:58:36,350 --> 00:58:38,940 >> ANDI PENG: Så viktig sak att jag tror att hon har märkt här 1284 00:58:38,940 --> 00:58:42,936 är att vi inte har att säga int n andra gången vi gjorde detta. 1285 00:58:42,936 --> 00:58:45,060 Bara vet att i en för loop när du förklara, 1286 00:58:45,060 --> 00:58:47,934 du faktiskt inte behöver int av andra gången du gör en variabel. 1287 00:58:47,934 --> 00:58:51,202 Man kan säga n strlen. 1288 00:58:51,202 --> 00:58:52,620 >> PUBLIK: Av 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 >> PUBLIK: Sedan ett semikolon. 1292 00:58:58,370 --> 00:59:00,130 >> ANDI PENG: Visst. 1293 00:59:00,130 --> 00:59:04,050 >> PUBLIK: Och sedan [OHÖRBAR] n. 1294 00:59:04,050 --> 00:59:07,480 1295 00:59:07,480 --> 00:59:09,460 Då ++ i. 1296 00:59:09,460 --> 00:59:11,780 >> ANDI PENG: Great. 1297 00:59:11,780 --> 00:59:12,280 Okej. 1298 00:59:12,280 --> 00:59:14,690 Vad vill vi inne detta för loop nu? 1299 00:59:14,690 --> 00:59:17,820 Kom ihåg att om vi ska gå igenom en sträng och kör genom en rad, 1300 00:59:17,820 --> 00:59:19,287 Vi vill kontrollera saker i den. 1301 00:59:19,287 --> 00:59:20,370 Vad ska vi behöva? 1302 00:59:20,370 --> 00:59:23,070 1303 00:59:23,070 --> 00:59:26,900 Detta är kanske det knepiga delen nu. 1304 00:59:26,900 --> 00:59:27,960 Någon har en gissning? 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, hur ska vi även få tillgång till? 1308 00:59:37,830 --> 00:59:41,610 Hur gör vi ens första check eller åt ett element i arrayen? 1309 00:59:41,610 --> 00:59:42,920 Hur gör vi det? 1310 00:59:42,920 --> 00:59:47,120 Vad är notation vi använder för att göra det? 1311 00:59:47,120 --> 00:59:50,920 Vad är namnet på denna array kallas? 1312 00:59:50,920 --> 00:59:52,400 Det kallas s, eller hur? 1313 00:59:52,400 --> 00:59:54,850 >> Kom ihåg att varje sträng är alltid en array. 1314 00:59:54,850 --> 00:59:58,210 Så s fäste i, eller hur? 1315 00:59:58,210 --> 01:00:01,360 För det är det aktuella värdet eller indexvärde vi kollar. 1316 01:00:01,360 --> 01:00:05,156 Och vi kommer att ställa in det lika att-- vi vill ha ett gement värde, eller hur? 1317 01:00:05,156 --> 01:00:07,530 Vi vill vända det lower-- ledsen, vi vill ha ett versalt. 1318 01:00:07,530 --> 01:00:10,014 Vi vill stänga av gemener värde i ett versalt. 1319 01:00:10,014 --> 01:00:11,805 Och så like-- jag är ledsen, vad heter du? 1320 01:00:11,805 --> 01:00:12,580 >> PUBLIK: Heidi. 1321 01:00:12,580 --> 01:00:12,940 >> ANDI PENG: Förlåt? 1322 01:00:12,940 --> 01:00:13,280 >> PUBLIK: 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 inledningsvis, vi är nog 1325 01:00:15,850 --> 01:00:20,330 kommer att behöva the-- vi är förmodligen kommer att behöva subtrahera 1326 01:00:20,330 --> 01:00:22,630 32 oavsett charc som är, eller hur? 1327 01:00:22,630 --> 01:00:24,680 Eftersom på en ASCII bord, skillnaden 1328 01:00:24,680 --> 01:00:27,790 mellan en liten bokstav och en stor bokstav är 32. 1329 01:00:27,790 --> 01:00:31,290 Så när vi gör detta, vi är nog kommer att vilja subtrahera 32, eller hur? 1330 01:00:31,290 --> 01:00:33,910 >> Så vi ska göra s i. 1331 01:00:33,910 --> 01:00:37,590 1332 01:00:37,590 --> 01:00:41,200 Förstår alla varför jag gjorde det? 1333 01:00:41,200 --> 01:00:45,760 Eftersom just nu, i vår samling, Vi kollar det 0. index, eller hur? 1334 01:00:45,760 --> 01:00:49,190 Och i 0:e index för sträng, det är det första tecknet. 1335 01:00:49,190 --> 01:00:51,820 Och den karaktär vi tänker att anta att det är gemener. 1336 01:00:51,820 --> 01:00:55,980 Om vi ​​vill göra det versaler, vi måste subtrahera 32 från dess värde, 1337 01:00:55,980 --> 01:00:58,620 eftersom det i vår ASCII bord, det är hur vi får det 1338 01:00:58,620 --> 01:01:01,600 till nästa motsvarande värde som gör det versaler. 1339 01:01:01,600 --> 01:01:03,714 Förstår alla det? 1340 01:01:03,714 --> 01:01:04,213 Yeah. 1341 01:01:04,213 --> 01:01:06,530 >> PUBLIK: Kan du också do små bokstäver en minus-- 1342 01:01:06,530 --> 01:01:08,080 >> ANDI PENG: Ja, så det är faktiskt riktigt bra. 1343 01:01:08,080 --> 01:01:10,455 Jag kommer att komma tillbaka till det fråga efter att vi gör detta. 1344 01:01:10,455 --> 01:01:11,060 Yeah. 1345 01:01:11,060 --> 01:01:13,940 Och sedan om jag vill se vad som händer, 1346 01:01:13,940 --> 01:01:16,180 Jag förmodligen kommer att vill skriva ut, eller hur? 1347 01:01:16,180 --> 01:01:19,930 Någon berätta för mig vad Jag vill skriva ut här. 1348 01:01:19,930 --> 01:01:29,160 >> PUBLIK: printf procent c backslash [OHÖRBAR]. 1349 01:01:29,160 --> 01:01:33,570 Det är värdet på [OHÖRBAR] s i. 1350 01:01:33,570 --> 01:01:34,614 >> ANDI PENG: si, ledsen? 1351 01:01:34,614 --> 01:01:35,530 PUBLIK: [OHÖRBAR]. 1352 01:01:35,530 --> 01:01:38,550 1353 01:01:38,550 --> 01:01:39,550 ANDI PENG: Jag vet inte. 1354 01:01:39,550 --> 01:01:40,600 Vad tror du? 1355 01:01:40,600 --> 01:01:44,016 >> Målgrupp: Tja, jag wouldn't-- Jag antar att jag inte skulle bring-- 1356 01:01:44,016 --> 01:01:46,944 Jag skulle ta det ut insidan, eftersom [OHÖRBAR]. 1357 01:01:46,944 --> 01:01:49,726 1358 01:01:49,726 --> 01:01:51,392 ANDI PENG: Åh, du skulle ha gjort det? 1359 01:01:51,392 --> 01:01:53,867 PUBLIK: Ja. 1360 01:01:53,867 --> 01:01:56,700 ANDI PENG: Låt oss lämna det på det sätt det är, och jag ska förklara varför senare. 1361 01:01:56,700 --> 01:01:58,533 Kom ihåg att även när du har en platshållare, 1362 01:01:58,533 --> 01:02:00,701 du vill lägga parentes runt den. 1363 01:02:00,701 --> 01:02:01,200 Okej. 1364 01:02:01,200 --> 01:02:04,810 Så detta bör vara en fast funktion här. 1365 01:02:04,810 --> 01:02:06,370 Låt oss köra den och se om det sammanställer. 1366 01:02:06,370 --> 01:02:08,750 Gör övre. 1367 01:02:08,750 --> 01:02:09,250 Hoppsan. 1368 01:02:09,250 --> 01:02:12,030 1369 01:02:12,030 --> 01:02:13,340 Det ser inte alltför bra. 1370 01:02:13,340 --> 01:02:14,507 Varför händer detta? 1371 01:02:14,507 --> 01:02:17,340 Som med alla fel, du vill gå tillbaka och börja med den första, 1372 01:02:17,340 --> 01:02:20,630 eftersom typiskt ett fel orsaker massor av andra fel efter det. 1373 01:02:20,630 --> 01:02:26,700 Här ser vi upper.c: 18: 25, som berättar mig i detta program som heter upper.c, 1374 01:02:26,700 --> 01:02:33,800 på ledningen 18, fel underförstått att förklara bibliotek av funktioner strlen med typ 1375 01:02:33,800 --> 01:02:36,330 unassigned-- bla, jag vet inte vad som händer efter det. 1376 01:02:36,330 --> 01:02:39,990 >> Allt det säger mig just nu att något händer på strlen. 1377 01:02:39,990 --> 01:02:43,520 Och datorn är förvirrad, eftersom Det är som jag vet inte vad strlen är? 1378 01:02:43,520 --> 01:02:45,520 Vad gör det förmodligen berätta om du missar? 1379 01:02:45,520 --> 01:02:46,490 >> PUBLIK: Du saknar [OHÖRBAR]. 1380 01:02:46,490 --> 01:02:47,630 >> ANDI PENG: Du har rätt. 1381 01:02:47,630 --> 01:02:49,510 Exakt. 1382 01:02:49,510 --> 01:02:52,140 Så det här är där det är viktigt att se till 1383 01:02:52,140 --> 01:02:56,970 att varje funktion som du använder i din kod är att ha rätt rubrik 1384 01:02:56,970 --> 01:02:59,660 fil till biblioteket, annars du kommer att få massor av fel 1385 01:02:59,660 --> 01:03:01,150 och koden kommer inte att veta vad som händer. 1386 01:03:01,150 --> 01:03:03,050 Så vi kommer att inkludera string.h här. 1387 01:03:03,050 --> 01:03:06,270 >> Nu när vi försöker kompilera övre. 1388 01:03:06,270 --> 01:03:08,410 Kompilera korrekt. 1389 01:03:08,410 --> 01:03:09,960 Låt oss köra det här programmet. 1390 01:03:09,960 --> 01:03:12,000 Så skriver något i gemener. 1391 01:03:12,000 --> 01:03:14,920 Vad vill ni att skriva? 1392 01:03:14,920 --> 01:03:16,546 Shout ut något. 1393 01:03:16,546 --> 01:03:17,920 Okej, Charly gick bara in. 1394 01:03:17,920 --> 01:03:18,990 Vi kommer att skriva Charly namn. 1395 01:03:18,990 --> 01:03:21,670 1396 01:03:21,670 --> 01:03:22,840 >> Charly med gemener. 1397 01:03:22,840 --> 01:03:27,742 Och förhoppningsvis, förhoppningsvis är detta kommer att skrika ut och spotta ut 1398 01:03:27,742 --> 01:03:28,575 Charly i versaler. 1399 01:03:28,575 --> 01:03:30,830 Jippie! 1400 01:03:30,830 --> 01:03:33,430 inte alla förstår hur Jag gick om att lösa det? 1401 01:03:33,430 --> 01:03:36,190 Det sätt som jag kan manipulera med hjälp heltal 1402 01:03:36,190 --> 01:03:39,410 att lösa något som Jag vill göra i strängar, 1403 01:03:39,410 --> 01:03:44,390 eftersom tecken och heltal kan refereras på samma sätt, därför att 1404 01:03:44,390 --> 01:03:45,540 ASCII kartläggning. 1405 01:03:45,540 --> 01:03:52,890 >> Så för att gå tillbaka till din punkt, om jag ville sätta här i stället för 32 1406 01:03:52,890 --> 01:03:58,959 versaler A minus gemener en precis som att det skulle fungera lika bra, 1407 01:03:58,959 --> 01:04:01,750 eftersom det är helt enkelt bara Skillnaden mellan dessa två värden. 1408 01:04:01,750 --> 01:04:09,570 Om jag vill göra den här igen-- charly. 1409 01:04:09,570 --> 01:04:10,320 Å nej. 1410 01:04:10,320 --> 01:04:11,820 Jag tror att vi gick på fel sätt, ja? 1411 01:04:11,820 --> 01:04:13,260 >> PUBLIK: [OHÖRBAR] gemener a. 1412 01:04:13,260 --> 01:04:14,260 >> ANDI PENG: Det gå du. 1413 01:04:14,260 --> 01:04:22,380 1414 01:04:22,380 --> 01:04:22,880 Japp. 1415 01:04:22,880 --> 01:04:24,920 Och ut spottar charly. 1416 01:04:24,920 --> 01:04:28,020 Så var försiktig när du subtrahera värden 1417 01:04:28,020 --> 01:04:30,400 att komma ihåg vilken som är större än den andra. 1418 01:04:30,400 --> 01:04:35,220 Till exempel, här uppe jag glömde att gemener a är faktiskt 1419 01:04:35,220 --> 01:04:38,540 större än versaler A. Så när jag försökte att subtrahera dem på andra sätt 1420 01:04:38,540 --> 01:04:40,600 runt, fick jag negativ 32. 1421 01:04:40,600 --> 01:04:42,800 Och min dator var som, Jag vet inte vad det är. 1422 01:04:42,800 --> 01:04:45,810 Det är sannolikt bara någon slumpmässig värde som inte är mycket bra. 1423 01:04:45,810 --> 01:04:48,760 Och så se till att du är subtrahera i rätt längd 1424 01:04:48,760 --> 01:04:52,831 att hitta det tecken du vill. 1425 01:04:52,831 --> 01:04:53,330 OK. 1426 01:04:53,330 --> 01:04:58,550 Är det någon förvirrad om hur vi gick om att skriva den här funktionen? 1427 01:04:58,550 --> 01:04:59,180 OK. 1428 01:04:59,180 --> 01:05:04,830 Så egentligen, en funktion redan finns i biblioteket kallas ctype.h. 1429 01:05:04,830 --> 01:05:06,417 Bibliotekets kallas ctype.h. 1430 01:05:06,417 --> 01:05:08,500 Denna funktion är faktiskt redan skriven för dig. 1431 01:05:08,500 --> 01:05:10,820 Det kallas för övre. 1432 01:05:10,820 --> 01:05:13,027 >> Och så i syfte att detta pset, du kommer 1433 01:05:13,027 --> 01:05:15,860 att finna att du verkligen vill använda en hel del av de funktioner som finns 1434 01:05:15,860 --> 01:05:17,390 inom ctyp biblioteket. 1435 01:05:17,390 --> 01:05:21,040 Till övre, sänka, är övre, är lower-- de är alla funktioner 1436 01:05:21,040 --> 01:05:24,914 att du kommer att kunna använda mycket, mycket snabbt i din egen kod som 1437 01:05:24,914 --> 01:05:26,080 gör exakt vad detta innebär. 1438 01:05:26,080 --> 01:05:28,941 Vi skrev ut hur man konverterar en sträng till versaler. 1439 01:05:28,941 --> 01:05:31,440 Men detta är faktiskt koden att någon annan har skrivit 1440 01:05:31,440 --> 01:05:33,800 och att du kan komma åt via en annan funktion. 1441 01:05:33,800 --> 01:05:34,300 Yeah? 1442 01:05:34,300 --> 01:05:39,570 >> PUBLIK: Så du bara kopiera A: s där och gör det för varje enskild bokstav? 1443 01:05:39,570 --> 01:05:42,070 >> ANDI PENG: Ja, eftersom jag inte bryr sig om de värden som gäller. 1444 01:05:42,070 --> 01:05:44,540 Jag bryr mig bara att skillnaden mellan dem är 32, eller hur? 1445 01:05:44,540 --> 01:05:48,210 Skillnaden mellan gemener B och versaler B är också 32. 1446 01:05:48,210 --> 01:05:50,860 Och skillnaden mellan c och versaler C är alltid 32. 1447 01:05:50,860 --> 01:05:53,235 >> Jag har bara bry sig om skillnaden mellan de två, 1448 01:05:53,235 --> 01:05:56,666 eftersom alla bokstäver följer samma mönster, eller hur? 1449 01:05:56,666 --> 01:05:58,540 Om jag har skillnaden mellan en av dem, 1450 01:05:58,540 --> 01:06:01,050 Jag vet vad skillnaden mellan dem alla är. 1451 01:06:01,050 --> 01:06:01,740 Bra fråga. 1452 01:06:01,740 --> 01:06:04,090 Yeah. 1453 01:06:04,090 --> 01:06:06,660 Alla bra? 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å ett annat koncept som är kommer att vara mycket användbart när du 1459 01:06:20,310 --> 01:06:22,570 fortsätta att utveckla koden är denna idé 1460 01:06:22,570 --> 01:06:25,430 att skapa funktioner eller abstraktion. 1461 01:06:25,430 --> 01:06:28,479 Så just nu har vi alla tagit algebra. 1462 01:06:28,479 --> 01:06:31,770 I algebra, är du lärde att det finns denna underbara sak som kallas en funktion 1463 01:06:31,770 --> 01:06:35,300 maskin, där om du ingång ett slags nummer, 1464 01:06:35,300 --> 01:06:38,720 Det genomsyrar denna underbara funktion och ut poppar en annan utgång, eller hur? 1465 01:06:38,720 --> 01:06:42,220 I koden, händer samma sak i någon form av funktion. 1466 01:06:42,220 --> 01:06:48,230 >> Så jag kunde fysiskt skriver i min kropp på min kod 1467 01:06:48,230 --> 01:06:52,357 ett allmänt meddelande som faktiskt gör oavsett kroppen av koden gör. 1468 01:06:52,357 --> 01:06:54,940 Men utanför det, kan jag också skriva många olika funktioner 1469 01:06:54,940 --> 01:06:56,320 att göra många olika saker. 1470 01:06:56,320 --> 01:06:58,570 Till exempel har vi redan började använda några av dem. 1471 01:06:58,570 --> 01:07:00,610 Printf-- som är en funktion som någon annan 1472 01:07:00,610 --> 01:07:02,870 har redan skrivit att vi kan ringa in vår kod. 1473 01:07:02,870 --> 01:07:05,410 För att upper-- i detta fall, upper-- är en annan funktion 1474 01:07:05,410 --> 01:07:07,330 Vi har skrivit att vi kan ringa i vår kod. 1475 01:07:07,330 --> 01:07:09,520 Och så jag gissa varför göra Vi har även funktioner? 1476 01:07:09,520 --> 01:07:12,100 Varför inte vi bara plopp det alla i samma kodrad? 1477 01:07:12,100 --> 01:07:13,730 Det gör det enkelt för alla. 1478 01:07:13,730 --> 01:07:19,200 >> Tja, resonemanget bakom att är först och främst, organisation. 1479 01:07:19,200 --> 01:07:21,880 Det är verkligen irriterande att gå genom någons kod 1480 01:07:21,880 --> 01:07:25,110 och en funktion som printf. 1481 01:07:25,110 --> 01:07:28,570 Om ni verkligen visste vad Funktionen printf innebar att skriva, 1482 01:07:28,570 --> 01:07:30,530 Det är, som, 1000 rader kod. 1483 01:07:30,530 --> 01:07:32,357 >> Om varje gång jag ville att printf något, 1484 01:07:32,357 --> 01:07:35,440 Jag var tvungen att skriva 1000 rader kod, det skulle vara riktigt irriterande att läsa, 1485 01:07:35,440 --> 01:07:36,290 höger? 1486 01:07:36,290 --> 01:07:38,860 Det är därför vi har bara skapade denna abstrakt funktion 1487 01:07:38,860 --> 01:07:41,670 att vi redan har någon annan har skrivit någon annanstans. 1488 01:07:41,670 --> 01:07:44,920 Och varje gång måste vi använda den i vår kod, vi måste bara säga printf. 1489 01:07:44,920 --> 01:07:48,070 Och det är i stånd att använda funktionen någon annan har skrivit i vår kod. 1490 01:07:48,070 --> 01:07:51,020 Det gör det lättare organisatoriskt att läsa koden. 1491 01:07:51,020 --> 01:07:53,460 >> För det andra är det en förenkling. 1492 01:07:53,460 --> 01:07:56,750 Det förenklar stegen vi har att vidta för att lösa våra problem. 1493 01:07:56,750 --> 01:07:59,300 Printf, funktioner som printf, funktioner som till övre 1494 01:07:59,300 --> 01:08:03,560 är alla saker som gör att vi kan förenkla vår kod ner så det är lättare. 1495 01:08:03,560 --> 01:08:05,830 Och sista är återanvändbarhet. 1496 01:08:05,830 --> 01:08:08,710 >> Så det faktum att vi har en funktion som kallas printf 1497 01:08:08,710 --> 01:08:11,990 som vi kan kalla många olika gånger och gör att den kan återanvändas. 1498 01:08:11,990 --> 01:08:14,980 Om jag skulle skriva printf, Jag bara skriva det en gång. 1499 01:08:14,980 --> 01:08:16,439 Det finns bara i att en plats. 1500 01:08:16,439 --> 01:08:19,890 Om jag ville göra det igen, skulle jag måste kopiera och klistra in allt detta 1501 01:08:19,890 --> 01:08:21,760 i min andra kodrad. 1502 01:08:21,760 --> 01:08:24,880 Det är därför om vi skapar en funktion som existerar utanför våran, 1503 01:08:24,880 --> 01:08:26,880 Vi kan bara uppmana det och återanvända det när 1504 01:08:26,880 --> 01:08:29,604 vi behöver så att det är mycket enklare för oss som program för att skriva. 1505 01:08:29,604 --> 01:08:32,220 1506 01:08:32,220 --> 01:08:35,549 >> Så det sätt som vi skulle faktiskt skriva en funktion är mycket likt, eller hur? 1507 01:08:35,549 --> 01:08:37,590 Detta är kanske det första exempel där vi ska 1508 01:08:37,590 --> 01:08:42,830 se en funktion ta på en stil annorlunda än vår int main tomrum. 1509 01:08:42,830 --> 01:08:46,779 I det här fallet, om jag ville skriva en funktion som kallas q, eller hur? 1510 01:08:46,779 --> 01:08:49,370 >> Och int värde här är alla talar om för mig, 1511 01:08:49,370 --> 01:08:51,649 vad vill jag här funktion för att återvända till mig? 1512 01:08:51,649 --> 01:08:54,484 Om jag vill kub ett heltal, Jag kommer att vilja ingång. 1513 01:08:54,484 --> 01:08:55,525 Dessa är de parametrar. 1514 01:08:55,525 --> 01:08:58,490 Jag ska till ingångarna ett värde av typen int. 1515 01:08:58,490 --> 01:09:01,300 Och jag kommer att återvända annan typ av värde int. 1516 01:09:01,300 --> 01:09:03,050 Och här, som ni kan se, allt jag gör 1517 01:09:03,050 --> 01:09:07,300 är cubing oavsett min ingång är som min produktion och skicka tillbaka den. 1518 01:09:07,300 --> 01:09:10,790 >> Så allt här funktionen gör är tar någon form av heltal. 1519 01:09:10,790 --> 01:09:14,979 Det multiplicerar det med sig två gånger så att det kuber i kraft. 1520 01:09:14,979 --> 01:09:17,729 Och sedan återgår oavsett att produktionen är. 1521 01:09:17,729 --> 01:09:20,540 Så i detta fall, det är två rader av kod som vi var tvungna att skriva extra. 1522 01:09:20,540 --> 01:09:22,880 Men om vi ville ringa på detta flera gånger, 1523 01:09:22,880 --> 01:09:26,210 det är mycket lättare att skriva att man line just här som är i kuben än 1524 01:09:26,210 --> 01:09:28,830 måste gå igenom flera gånger. 1525 01:09:28,830 --> 01:09:34,180 >> Så det sätt som väsentligen vilken som helst formatering för någon form av funktion 1526 01:09:34,180 --> 01:09:36,420 kommer att existera är som här. 1527 01:09:36,420 --> 01:09:38,659 Så vi har funktionsnamnet. 1528 01:09:38,659 --> 01:09:39,950 I det här fallet, det kallas kub. 1529 01:09:39,950 --> 01:09:42,033 Och vi name it kub eftersom Det är lätt att komma ihåg. 1530 01:09:42,033 --> 01:09:44,220 Du kan namnge den torget och Det kan faktiskt vara cubed. 1531 01:09:44,220 --> 01:09:45,500 Spelar ingen roll. 1532 01:09:45,500 --> 01:09:48,020 Bara ett namn som du är tilldela din funktion. 1533 01:09:48,020 --> 01:09:51,660 >> Denna rätt här, int, är typ av parametern du behöver. 1534 01:09:51,660 --> 01:09:54,149 Så vad gör denna funktion behöver för att fungera? 1535 01:09:54,149 --> 01:09:55,990 Tja, behöver det en ingång. 1536 01:09:55,990 --> 01:09:56,704 Jag döpte den ingång. 1537 01:09:56,704 --> 01:09:58,120 Du kan namnge det vad du vill. 1538 01:09:58,120 --> 01:10:00,500 Men jag behöver något av typen int. 1539 01:10:00,500 --> 01:10:03,730 Det kommer att faktiskt utföra vad är inne i här, 1540 01:10:03,730 --> 01:10:04,990 kroppen av funktionen. 1541 01:10:04,990 --> 01:10:07,847 Och sedan returtypen just här, detta int-- 1542 01:10:07,847 --> 01:10:09,680 allt det säger mig är att denna funktion är 1543 01:10:09,680 --> 01:10:11,250 kommer att återvända till mig i int. 1544 01:10:11,250 --> 01:10:14,460 Så det kommer att ta in en int, och det kommer att ge dig tillbaka en int. 1545 01:10:14,460 --> 01:10:17,750 Förstår alla hur formatering av detta slag fungerar? 1546 01:10:17,750 --> 01:10:18,250 Häftigt. 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å bli inte orolig om det verkar lite abstrakt just nu. 1550 01:10:31,770 --> 01:10:33,450 Detta är något som vi kommer att prata om. 1551 01:10:33,450 --> 01:10:36,310 Vi kommer att dyka djupare senare i kursen. 1552 01:10:36,310 --> 01:10:41,170 Det sätt som någon form av högre nivå abstraktion av dessa saker och ting fungerar 1553 01:10:41,170 --> 01:10:43,530 är att, i minne, i datorn, allt 1554 01:10:43,530 --> 01:10:47,660 lagras i denna typ av stapeln, ska jag säga. 1555 01:10:47,660 --> 01:10:49,070 >> Så där uppe i toppen. 1556 01:10:49,070 --> 01:10:50,861 Jag vet inte om du killar kan se att väl. 1557 01:10:50,861 --> 01:10:52,590 Jag ska försöka att zooma in. 1558 01:10:52,590 --> 01:10:55,111 Här på toppen, vi har den fysiska texten 1559 01:10:55,111 --> 01:10:57,860 av vad datorn är interpreting-- alla nollor och ettor som 1560 01:10:57,860 --> 01:10:59,540 finns inom vår dator. 1561 01:10:59,540 --> 01:11:03,390 Och sedan har vi det initierade data- och oinitierade uppgifter, 1562 01:11:03,390 --> 01:11:05,340 vad vi kallar globala variabler. 1563 01:11:05,340 --> 01:11:08,200 Så variabler som finns över alla program 1564 01:11:08,200 --> 01:11:11,815 och över hela din, huvudsak kod. 1565 01:11:11,815 --> 01:11:13,940 Inga bekymmer om ni är typ av oklar på detta. 1566 01:11:13,940 --> 01:11:16,060 Det spelar egentligen ingen roll just nu. 1567 01:11:16,060 --> 01:11:18,680 >> Och sedan har vi vad som är kallas en hög i en stapel. 1568 01:11:18,680 --> 01:11:21,140 Tänk på en stapel bokstavligen som precis som en stapel av saker, 1569 01:11:21,140 --> 01:11:23,098 en stapel av olika saker skjuts på toppen 1570 01:11:23,098 --> 01:11:27,870 av varandra att lagra de olika variabler och syntax i din kod. 1571 01:11:27,870 --> 01:11:31,460 Och så här längst ner, Vi har miljövariabler 1572 01:11:31,460 --> 01:11:35,480 av vad du utför inom bara din lilla kodrad. 1573 01:11:35,480 --> 01:11:40,510 >> Och vi kommer bara att zooma in på själva stacken delen. 1574 01:11:40,510 --> 01:11:43,880 Så just här, om vi skulle för att zooma in på just detta område av stapeln, 1575 01:11:43,880 --> 01:11:45,140 Detta är vad det ser ut. 1576 01:11:45,140 --> 01:11:48,590 Och det är faktiskt ganska viktigt När ni talar om funktioner, 1577 01:11:48,590 --> 01:11:52,330 eftersom märker att minne på din dator 1578 01:11:52,330 --> 01:11:55,600 lagrar variablerna och funktionerna 1579 01:11:55,600 --> 01:11:58,790 och parametrarna för både din funktion och dina huvudsakliga variabler 1580 01:11:58,790 --> 01:12:00,190 på olika platser. 1581 01:12:00,190 --> 01:12:03,390 >> Så just nu, främst är själva funktionen 1582 01:12:03,390 --> 01:12:04,780 att du utför i en kod. 1583 01:12:04,780 --> 01:12:08,050 Du har dess parametrar lagras här och dess lokala variabler lagras här. 1584 01:12:08,050 --> 01:12:12,270 Lokal variabel betyder bara någon variabel som bara finns i den funktionen. 1585 01:12:12,270 --> 01:12:15,610 Och ovanpå det, du har detta separat funktion kallad kub. 1586 01:12:15,610 --> 01:12:18,240 Du har som är parametrar liksom dessa lokalbefolkningen. 1587 01:12:18,240 --> 01:12:21,540 >> Och anledningen till att du kan se här är att det 1588 01:12:21,540 --> 01:12:25,030 händer när kuben tar in en värde från din huvuduppgift 1589 01:12:25,030 --> 01:12:27,640 är att det faktiskt är att kopiera det över. 1590 01:12:27,640 --> 01:12:31,470 Så om jag ville kub 2 och tillbaka 8, att 2 1591 01:12:31,470 --> 01:12:33,730 faktiskt inmatas som en parameter och det är 1592 01:12:33,730 --> 01:12:37,690 kopieras över så att du har det befintliga på två olika platser i minnet. 1593 01:12:37,690 --> 01:12:40,520 Och du måste vara mycket försiktiga på att komma ihåg som en av dem 1594 01:12:40,520 --> 01:12:42,520 du faktiskt manipulera. 1595 01:12:42,520 --> 01:12:47,170 Och ett exempel på vad som hände det skulle vara mycket, mycket dåligt 1596 01:12:47,170 --> 01:12:48,050 Det finns just här. 1597 01:12:48,050 --> 01:12:50,760 1598 01:12:50,760 --> 01:12:58,650 >> Så här har jag fått, i teorin, ett program just här, en huvuduppgift 1599 01:12:58,650 --> 01:13:02,180 att jag förklara en int x är lika med 1. 1600 01:13:02,180 --> 01:13:04,505 Jag förklara en annan int y är lika med två. 1601 01:13:04,505 --> 01:13:06,380 Och då jag kör den genom denna funktion 1602 01:13:06,380 --> 01:13:09,647 kallad swap, där jag antar att det är att byta de två värdena. 1603 01:13:09,647 --> 01:13:11,480 Och sedan kommer jag att skriva ut dem, eller hur? 1604 01:13:11,480 --> 01:13:13,220 Det är vad jag vill ha det här programmet för att göra. 1605 01:13:13,220 --> 01:13:15,180 >> Så låt oss komma ner och ta en titt. 1606 01:13:15,180 --> 01:13:18,200 Så om jag faktiskt skriva en annan funktion, som ni kan se, 1607 01:13:18,200 --> 01:13:19,750 vi har vår huvuduppgift här. 1608 01:13:19,750 --> 01:13:22,860 Och sedan har vi vår andra funktion här. 1609 01:13:22,860 --> 01:13:24,520 Void swap. 1610 01:13:24,520 --> 01:13:27,090 Void betyder bara att det är inte kommer att återvända något. 1611 01:13:27,090 --> 01:13:28,930 Funktionsnamnet är kallat swap, och det är 1612 01:13:28,930 --> 01:13:33,730 kommer att intag två variabler, int a och INT B, från [OHÖRBAR] funktion. 1613 01:13:33,730 --> 01:13:39,010 >> Så i huvudsak in här, vi är passerar x och y i denna funktion. 1614 01:13:39,010 --> 01:13:40,760 Och om vi skulle skapa this-- så vi vill ha 1615 01:13:40,760 --> 01:13:42,420 att skapa en temporär värde, eller hur? 1616 01:13:42,420 --> 01:13:43,930 Vi kommer att tilldela den till en. 1617 01:13:43,930 --> 01:13:45,388 Och sedan en kommer att nu lika b. 1618 01:13:45,388 --> 01:13:47,660 Och b kommer att vara tillbaka där temp värdet var, 1619 01:13:47,660 --> 01:13:51,070 som är en, för när du vill byta saker, 1620 01:13:51,070 --> 01:13:52,320 du kan inte bara vilja byta dem. 1621 01:13:52,320 --> 01:13:54,360 >> Du måste hålla ett ut här så att det kommer ihåg 1622 01:13:54,360 --> 01:13:56,485 vad det är, eftersom när du byta ut en, du glömmer 1623 01:13:56,485 --> 01:13:58,200 vad det ursprungliga värdet var, eller hur? 1624 01:13:58,200 --> 01:14:00,990 Så i teorin, det här programmet ska fungera, eller hur? 1625 01:14:00,990 --> 01:14:03,630 Om jag ville byta två, bör de byta. 1626 01:14:03,630 --> 01:14:05,490 Så låt oss köra den och se om det fungerar. 1627 01:14:05,490 --> 01:14:11,130 1628 01:14:11,130 --> 01:14:16,940 >> Så när ni kan se, x var en gång en och y var en gång två. 1629 01:14:16,940 --> 01:14:21,475 Och om jag skriva ut, x är fortfarande ett och y är 2. 1630 01:14:21,475 --> 01:14:25,970 Hmm, går detta program inte vara arbetar det sätt som jag vill att det ska fungera. 1631 01:14:25,970 --> 01:14:29,950 Finns det någon som vill ta ett skott på gissa varför detta hände? 1632 01:14:29,950 --> 01:14:34,430 Det har att göra med hur att olika saker är 1633 01:14:34,430 --> 01:14:38,172 lagras på olika platser i minnet. 1634 01:14:38,172 --> 01:14:39,377 >> OK. 1635 01:14:39,377 --> 01:14:41,960 Så ni behöver inte oroa dig för mycket om detta just nu. 1636 01:14:41,960 --> 01:14:46,610 Men vet att kuben lokala variablerna var a och b, 1637 01:14:46,610 --> 01:14:49,230 för här i vår funktion, Vi har förklarat a och b 1638 01:14:49,230 --> 01:14:53,570 som variablerna som finns inom kuben, denna funktion. 1639 01:14:53,570 --> 01:14:59,490 Men som ni kan se, de parametrar som det tar i var lagras här. 1640 01:14:59,490 --> 01:15:01,370 Men vi var inte faktiskt återvänder något. 1641 01:15:01,370 --> 01:15:03,120 Vi var faktiskt inte ändra x- och y. 1642 01:15:03,120 --> 01:15:04,440 Vi var bara ändra a och b. 1643 01:15:04,440 --> 01:15:08,340 >> Vi hade kopierat x och y i något som kallas a och b. 1644 01:15:08,340 --> 01:15:11,092 Men vi aldrig manipulerade x och y själva. 1645 01:15:11,092 --> 01:15:12,800 Är ni ser hur som händer? 1646 01:15:12,800 --> 01:15:16,140 Är att vi helt enkelt har kopierat det över, men vi har faktiskt inte hållit 1647 01:15:16,140 --> 01:15:18,030 reda på var de var i minnet. 1648 01:15:18,030 --> 01:15:20,127 >> Och så nu datorn ser, åh, jag har 1649 01:15:20,127 --> 01:15:21,960 köra den här saken genom denna härliga funktion. 1650 01:15:21,960 --> 01:15:23,690 Men x och y är fortfarande x och y. 1651 01:15:23,690 --> 01:15:26,240 Ingenting har hänt med dem på grund av det faktum 1652 01:15:26,240 --> 01:15:28,340 att dessa parametrar och lokala variabler 1653 01:15:28,340 --> 01:15:30,150 lagras i en annan placera i minnet. 1654 01:15:30,150 --> 01:15:32,030 Och detta är en högre nivå koncept som vi ska 1655 01:15:32,030 --> 01:15:34,300 börjar se senare i kursen. 1656 01:15:34,300 --> 01:15:36,950 Men bara vet att detta är ett problem som kan inträffa 1657 01:15:36,950 --> 01:15:41,400 och att vi ska räkna ut sätt om hur man itu med detta senare i kursen. 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 Okej. 1661 01:15:48,250 --> 01:15:51,780 Så den sista konceptet vi är verkligen kommer att täcka 1662 01:15:51,780 --> 01:15:53,880 det kommer att vara till nytta för pset den här veckan 1663 01:15:53,880 --> 01:15:56,060 är vad som kallas kommandoradsargument. 1664 01:15:56,060 --> 01:16:00,820 Så Rob i sin föreläsning gick igenom typ av kort på hur dessa fungerar. 1665 01:16:00,820 --> 01:16:02,770 I huvudsak vet att när du skriver 1666 01:16:02,770 --> 01:16:06,280 som en huvudfunktion, när vi skrev funktioner tidigare i det förflutna, 1667 01:16:06,280 --> 01:16:07,804 Vi hade int main tomrum. 1668 01:16:07,804 --> 01:16:10,470 Och anledningen till att vi hade tomrum där berodde på att våra program inte 1669 01:16:10,470 --> 01:16:12,520 behöver ingångsvärden för att köra, eller hur? 1670 01:16:12,520 --> 01:16:16,020 När jag sprang Mario, det gjorde jag inte behöver faktiskt bara skriva in något 1671 01:16:16,020 --> 01:16:16,970 när jag körde Mario. 1672 01:16:16,970 --> 01:16:20,170 Jag kunde uppmana användaren senare. 1673 01:16:20,170 --> 01:16:22,450 Men det kommer inte alltid att vara fallet. 1674 01:16:22,450 --> 01:16:24,980 >> Till exempel, i detta veckans problem uppsättningar, 1675 01:16:24,980 --> 01:16:28,365 du kommer att bli ombedd att i Förutom att köra ditt program, 1676 01:16:28,365 --> 01:16:30,990 du kommer att vilja ingång vissa saker i rak som du 1677 01:16:30,990 --> 01:16:32,050 köra program. 1678 01:16:32,050 --> 01:16:34,720 Så hur gör vi som kallas en kommandorad argument som 1679 01:16:34,720 --> 01:16:37,280 är som ett argument du kan mata in direkt 1680 01:16:37,280 --> 01:16:39,260 som du försöker köra programmet. 1681 01:16:39,260 --> 01:16:44,680 >> Så notation för detta, det är ganska komplicerad ut, 1682 01:16:44,680 --> 01:16:47,320 men det är verkligen inte så svårt. Så int main-- 1683 01:16:47,320 --> 01:16:48,910 det är bara din huvudsakliga funktion. 1684 01:16:48,910 --> 01:16:52,110 Into argc komma sträng argv parentes. 1685 01:16:52,110 --> 01:16:56,040 Så allt som säger är att detta int argc-- allt som talar om för dig 1686 01:16:56,040 --> 01:17:00,560 är att de är antalet argument datorn ska förvänta sig. 1687 01:17:00,560 --> 01:17:03,130 >> Så en sak som är verkligen viktigt att hålla reda på 1688 01:17:03,130 --> 01:17:07,080 är den fysiska namnet på ditt program räknas som en av dessa argument. 1689 01:17:07,080 --> 01:17:11,080 Så om jag ville ha mitt program kör plus en ytterligare kommandoraden 1690 01:17:11,080 --> 01:17:13,310 argument, jag är faktiskt kommer att ha två. 1691 01:17:13,310 --> 01:17:15,080 Argc är faktiskt kommer att vara två. 1692 01:17:15,080 --> 01:17:18,010 Och sedan string argv bracket-- allt som gör, 1693 01:17:18,010 --> 01:17:20,410 Det ger mig en array med strängar som är 1694 01:17:20,410 --> 01:17:24,870 kommer att bara visa och lagra vad alla dessa kommandoradsargumenten är. 1695 01:17:24,870 --> 01:17:34,090 >> Så till exempel, om jag ville ha detta program, ./copy INFILE outfile, eller hur? 1696 01:17:34,090 --> 01:17:37,330 Det är bara en typisk linux kommando. 1697 01:17:37,330 --> 01:17:38,830 Vad är egentligen argc? 1698 01:17:38,830 --> 01:17:41,320 Hur många kommandoradsargument är det faktiskt i det här? 1699 01:17:41,320 --> 01:17:45,130 Allt detta gör är att göra en kopia av en infil av namnet på en fil 1700 01:17:45,130 --> 01:17:47,070 och det kopierar den till en annan fil, eller hur? 1701 01:17:47,070 --> 01:17:48,700 Det är allt detta gör. 1702 01:17:48,700 --> 01:17:53,080 Som ni kan se, jag gör det på en rad utan att faktiskt behöva programmet. 1703 01:17:53,080 --> 01:17:55,380 >> Vilken är vår argc i det här fallet? 1704 01:17:55,380 --> 01:17:58,968 Hur många argument har vi? 1705 01:17:58,968 --> 01:17:59,634 PUBLIK: Tre? 1706 01:17:59,634 --> 01:18:01,200 ANDI PENG: Vi har tre, exakt. 1707 01:18:01,200 --> 01:18:05,030 Så det är mycket intuitivt att tror bara att det är bara 1708 01:18:05,030 --> 01:18:06,290 den infil och utfil. 1709 01:18:06,290 --> 01:18:10,190 Men vet att den fysiska namn program du kör räknas som en. 1710 01:18:10,190 --> 01:18:13,220 Så i det här fallet, är argc faktiskt tre. 1711 01:18:13,220 --> 01:18:15,860 Vad sägs om, vad är argv 0? 1712 01:18:15,860 --> 01:18:18,180 Kom ihåg att alla av kommandoradsargumenten 1713 01:18:18,180 --> 01:18:20,500 lagrades i en array av strängar. 1714 01:18:20,500 --> 01:18:24,140 Så om jag försöker komma åt det, vad skulle argv konsol 0 ge mig? 1715 01:18:24,140 --> 01:18:25,364 >> PUBLIK: [OHÖRBAR]. 1716 01:18:25,364 --> 01:18:26,155 ANDI PENG: Exakt. 1717 01:18:26,155 --> 01:18:28,550 Det skulle ge mig pricken slash kopiera, eftersom det är 1718 01:18:28,550 --> 01:18:31,070 den 0:e elementet, den första elementet i min array. 1719 01:18:31,070 --> 01:18:33,236 Vad sägs om argv 1? 1720 01:18:33,236 --> 01:18:33,945 >> PUBLIK: infil. 1721 01:18:33,945 --> 01:18:35,070 ANDI PENG: INFILE, exakt. 1722 01:18:35,070 --> 01:18:36,272 Vad sägs om argv 2? 1723 01:18:36,272 --> 01:18:37,022 PUBLIK: utfil. 1724 01:18:37,022 --> 01:18:38,190 ANDI PENG: utfil. 1725 01:18:38,190 --> 01:18:39,290 Detta är ett lite knepigt nu. 1726 01:18:39,290 --> 01:18:42,630 Vad tror ni att argv 3 kommer att ge mig 1727 01:18:42,630 --> 01:18:45,522 om jag försökte skriva ut det? 1728 01:18:45,522 --> 01:18:48,260 >> PUBLIK: [OHÖRBAR]? 1729 01:18:48,260 --> 01:18:50,164 >> ANDI PENG: Har du en hand upp? 1730 01:18:50,164 --> 01:18:50,663 Yeah. 1731 01:18:50,663 --> 01:18:51,550 >> Publik: En alternativ. 1732 01:18:51,550 --> 01:18:52,341 >> ANDI PENG: Exakt. 1733 01:18:52,341 --> 01:18:55,440 Så minns föreläsning som vi ha i slutet av en ras något 1734 01:18:55,440 --> 01:18:56,640 kallas en null terminator? 1735 01:18:56,640 --> 01:18:58,890 Vi kommer att komma in i denna också längre fram i klassen. 1736 01:18:58,890 --> 01:19:02,472 Men vet att i notation, hur din dator 1737 01:19:02,472 --> 01:19:04,430 vet att det är slutet av uppsättningen är att det 1738 01:19:04,430 --> 01:19:07,310 sätter något som kallas en null terminator eller ett tankstreck noll. 1739 01:19:07,310 --> 01:19:12,047 >> Så om du försöker att få tillgång till argv 3, du kommer att slå denna streck 0. 1740 01:19:12,047 --> 01:19:13,630 Detta är ännu mer av en kuggfråga. 1741 01:19:13,630 --> 01:19:17,020 Vad sägs om argv 4? 1742 01:19:17,020 --> 01:19:20,920 Så det här är förbi null terminator, förbi gränserna för vårt utbud. 1743 01:19:20,920 --> 01:19:24,380 Vad tror du kommer att hända när vi försöker att göra det? 1744 01:19:24,380 --> 01:19:25,842 >> PUBLIK: [OHÖRBAR]? 1745 01:19:25,842 --> 01:19:26,550 ANDI PENG: Förlåt? 1746 01:19:26,550 --> 01:19:28,025 Säg att en lite högre? 1747 01:19:28,025 --> 01:19:29,086 >> PUBLIK: [OHÖRBAR]. 1748 01:19:29,086 --> 01:19:29,710 ANDI PENG: Ja. 1749 01:19:29,710 --> 01:19:32,420 Det är namnet på den område du kommer troligen få. 1750 01:19:32,420 --> 01:19:36,610 Men vet att argv 4-- som låter dig komma åt 1751 01:19:36,610 --> 01:19:38,610 platser i datorns minne som du verkligen 1752 01:19:38,610 --> 01:19:41,650 bör inte vara röra, eftersom Just nu vet du vad argv är. 1753 01:19:41,650 --> 01:19:46,220 Du vet att det är en samling av storlek 3 som har punkt kopiera, infil och utfil. 1754 01:19:46,220 --> 01:19:50,200 >> Om du försöker att gå så långt utöver att att du är förbi noll terminator, 1755 01:19:50,200 --> 01:19:53,050 datorn har förmodligen lagrade något i argv 4. 1756 01:19:53,050 --> 01:19:55,790 Och du borde verkligen inte vara tillträde till argv 4, 1757 01:19:55,790 --> 01:19:58,130 eftersom du har en fil skåp och du är bara 1758 01:19:58,130 --> 01:19:59,790 få tillgång till dessa tre hyllor. 1759 01:19:59,790 --> 01:20:02,870 Men om du försöker att nå långt utöver hyllan var du får, 1760 01:20:02,870 --> 01:20:04,930 du kommer att börja jävlas med andra saker i din dators minne. 1761 01:20:04,930 --> 01:20:06,690 Det kommer att bli riktigt, riktigt illa. 1762 01:20:06,690 --> 01:20:07,440 Så bara vet det. 1763 01:20:07,440 --> 01:20:10,370 Var mycket försiktig så att du inte bara slumpmässigt börja 1764 01:20:10,370 --> 01:20:14,772 åtkomst till element i en array som inte var vad du ville skapa. 1765 01:20:14,772 --> 01:20:17,114 Japp. 1766 01:20:17,114 --> 01:20:18,430 >> OK. 1767 01:20:18,430 --> 01:20:26,360 Så vi kommer att göra en annan terminal exempel här. 1768 01:20:26,360 --> 01:20:27,300 OK. 1769 01:20:27,300 --> 01:20:29,900 Så Rob snabbt föreläsning häromdagen gick 1770 01:20:29,900 --> 01:20:35,040 genom detta exempel, där han hade int main int argc sträng argv 1771 01:20:35,040 --> 01:20:39,090 konsoler, som talar om för mig att jag är kommer att ha kommandoradsargument. 1772 01:20:39,090 --> 01:20:41,860 >> Han har, om argc lika lika 2-- minns, 1773 01:20:41,860 --> 01:20:45,070 lika likar betyder jämförelse. 1774 01:20:45,070 --> 01:20:47,980 Om det är lika med 2, så är jag tryckningen hej, 1775 01:20:47,980 --> 01:20:51,190 oavsett den första element i arrayen är. 1776 01:20:51,190 --> 01:20:54,100 Else tryck, hallå världen. 1777 01:20:54,100 --> 01:20:56,300 Vad kommer detta att hända väsentligen? 1778 01:20:56,300 --> 01:21:00,570 Kan någon bara förklara Engelska vad detta program gör? 1779 01:21:00,570 --> 01:21:01,272 Yeah. 1780 01:21:01,272 --> 01:21:08,160 >> PUBLIK: Om någon skrivit in ett kommando och sade att deras för- och efternamn, 1781 01:21:08,160 --> 01:21:12,096 Det kommer inte bara att skriva ut första och säga, hej, 1782 01:21:12,096 --> 01:21:14,090 oavsett ditt förnamn är. 1783 01:21:14,090 --> 01:21:15,410 >> ANDI PENG: OK, låt oss köra den. 1784 01:21:15,410 --> 01:21:22,470 Så till exempel, om jag skulle göra den här filen gör hello att-- hello 1785 01:21:22,470 --> 01:21:24,500 att-- Vad vill du att jag ska ingång? 1786 01:21:24,500 --> 01:21:25,900 >> PUBLIK: Först och efternamn. 1787 01:21:25,900 --> 01:21:27,280 >> ANDI PENG: Först och efternamn? 1788 01:21:27,280 --> 01:21:28,180 Spaces? 1789 01:21:28,180 --> 01:21:29,690 >> PUBLIK: Ja. 1790 01:21:29,690 --> 01:21:33,490 >> ANDI PENG: Kan någon berätta mig just nu, vad är argc? 1791 01:21:33,490 --> 01:21:35,630 Helt rätt där? 1792 01:21:35,630 --> 01:21:36,290 Oops, sorry. 1793 01:21:36,290 --> 01:21:37,920 Låt mig gå tillbaka. 1794 01:21:37,920 --> 01:21:40,740 Hur många kommandoradsargument är-- ni kan inte riktigt se. 1795 01:21:40,740 --> 01:21:43,760 Men jag ska försöka att zooma in. 1796 01:21:43,760 --> 01:21:44,290 Jag försöker. 1797 01:21:44,290 --> 01:21:45,414 Ja, det finns tre, eller hur? 1798 01:21:45,414 --> 01:21:48,750 Det är dot snedstreck Hej, Det är Andi, och det är Peng. 1799 01:21:48,750 --> 01:21:51,870 >> Så vad tycker ni här Programmet kommer att skriva 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 förlåt. 1803 01:21:57,120 --> 01:21:57,810 Fel namn. 1804 01:21:57,810 --> 01:22:03,630 1805 01:22:03,630 --> 01:22:06,130 Det skrivs ut, hallå världen. 1806 01:22:06,130 --> 01:22:09,603 Finns det någon som vill förklara varför det händer? 1807 01:22:09,603 --> 01:22:10,103 Yeah? 1808 01:22:10,103 --> 01:22:11,019 >> PUBLIK: [OHÖRBAR]. 1809 01:22:11,019 --> 01:22:14,439 1810 01:22:14,439 --> 01:22:15,230 ANDI PENG: Exakt. 1811 01:22:15,230 --> 01:22:19,940 Så här är villkorad är, om argc lika lika med 2. 1812 01:22:19,940 --> 01:22:23,650 Så bara i det fall att det finns två kommandoradsargument. 1813 01:22:23,650 --> 01:22:25,850 Då kommer jag att skriva ut, Hej, det är vad som helst. 1814 01:22:25,850 --> 01:22:28,210 Men annars, jag ska skriva ut bara, hallå världen. 1815 01:22:28,210 --> 01:22:30,040 Så gör någon vill att ge mig ett exempel 1816 01:22:30,040 --> 01:22:35,050 hur jag skulle kunna faktiskt få det att skriva ut värdet av argv 1? 1817 01:22:35,050 --> 01:22:38,600 >> Vad skulle jag behöva input här? 1818 01:22:38,600 --> 01:22:39,840 Bara en sak, eller hur? 1819 01:22:39,840 --> 01:22:42,900 Eftersom punkt hej till redan räknas som det första argumentet. 1820 01:22:42,900 --> 01:22:43,930 Jag har bara en ytterligare. 1821 01:22:43,930 --> 01:22:46,470 Så dot hej om jag bara göra Andi. 1822 01:22:46,470 --> 01:22:47,270 Hej, Andi. 1823 01:22:47,270 --> 01:22:49,186 Förstår alla varför det händer? 1824 01:22:49,186 --> 01:22:49,602 Yeah. 1825 01:22:49,602 --> 01:22:52,500 >> PUBLIK: Så utrymmet mellan kommando line-- är det [OHÖRBAR]? 1826 01:22:52,500 --> 01:22:56,247 1827 01:22:56,247 --> 01:22:56,830 ANDI PENG: Nej 1828 01:22:56,830 --> 01:23:03,810 Så utrymmet i en kommandorad argument, x, att berätta för din dator 1829 01:23:03,810 --> 01:23:06,820 att detta är början på en ny sträng. 1830 01:23:06,820 --> 01:23:11,130 Så sträng argv här-- det butiker alla dina kommandon linjeargument 1831 01:23:11,130 --> 01:23:13,110 i strängar. 1832 01:23:13,110 --> 01:23:17,420 Och så utrymmet i kommandoraden argument-- allt som gör är att berätta dig, 1833 01:23:17,420 --> 01:23:21,030 detta är i slutet av en sträng och det är dags att gå vidare till en annan. 1834 01:23:21,030 --> 01:23:21,990 >> Yeah. 1835 01:23:21,990 --> 01:23:23,530 Detta är ganska viktigt för din pset, eftersom du är 1836 01:23:23,530 --> 01:23:24,613 kommer att testa dessa. 1837 01:23:24,613 --> 01:23:29,300 Så är det någon som har eventuella frågor om detta? 1838 01:23:29,300 --> 01:23:30,016 OK bra. 1839 01:23:30,016 --> 01:23:30,515 Yeah? 1840 01:23:30,515 --> 01:23:35,008 >> PUBLIK: Så anledningen till att du skulle sätta heltalsargument calc istället 1841 01:23:35,008 --> 01:23:40,059 av [OHÖRBAR] skulle vara när du vill att skriva ytterligare information till 1842 01:23:40,059 --> 01:23:41,030 [OHÖRBAR]? 1843 01:23:41,030 --> 01:23:42,090 >> ANDI PENG: Ja, exakt. 1844 01:23:42,090 --> 01:23:45,370 Vissa program kräver att du att mata in ett Kommandoradsargumentet 1845 01:23:45,370 --> 01:23:47,732 att den passerar in och som använder denna. 1846 01:23:47,732 --> 01:23:49,035 Yeah. 1847 01:23:49,035 --> 01:23:50,410 PUBLIK: Så vad händer om [OHÖRBAR]? 1848 01:23:50,410 --> 01:23:55,440 1849 01:23:55,440 --> 01:23:58,870 >> ANDI PENG: Tja, vad jag har att göra att sedan ändra i mitt program? 1850 01:23:58,870 --> 01:23:59,870 >> PUBLIK: Bara 3. 1851 01:23:59,870 --> 01:24:12,460 1852 01:24:12,460 --> 01:24:15,020 >> ANDI PENG: Varför är det händer, tror du? 1853 01:24:15,020 --> 01:24:18,940 >> PUBLIK: Eftersom [OHÖRBAR]. 1854 01:24:18,940 --> 01:24:22,370 >> PUBLIK: Du skulle behöva ändra det till 2 [OHÖRBAR]. 1855 01:24:22,370 --> 01:24:23,484 >> Publik: 1 och 2. 1856 01:24:23,484 --> 01:24:24,650 ANDI Peng: 1 och 2, exakt. 1857 01:24:24,650 --> 01:24:29,150 Så i detta fall, skulle du förmodligen vill ha två printf statements-- 1858 01:24:29,150 --> 01:24:32,601 en som tryckt argv 1 och den som skrivs ut argv 2. 1859 01:24:32,601 --> 01:24:33,100 Här. 1860 01:24:33,100 --> 01:24:34,516 Jag kan faktiskt göra det riktigt snabbt. 1861 01:24:34,516 --> 01:24:46,720 1862 01:24:46,720 --> 01:24:47,320 Här har du. 1863 01:24:47,320 --> 01:24:48,287 Oh. 1864 01:24:48,287 --> 01:24:49,370 Inte riktigt vad du ville ha. 1865 01:24:49,370 --> 01:24:52,590 Men om ni röra runt med formatering, kommer det att komma ut. 1866 01:24:52,590 --> 01:24:54,981 Yeah. 1867 01:24:54,981 --> 01:24:55,480 Häftigt. 1868 01:24:55,480 --> 01:24:57,670 Jag vet att vi är lite ont om tid. 1869 01:24:57,670 --> 01:25:02,469 Men jag ska bara snabbt tillbringa en par minuter går igenom helpful-- 1870 01:25:02,469 --> 01:25:03,760 PUBLIK: Du har två minuter. 1871 01:25:03,760 --> 01:25:05,010 ANDI PENG: Jag har två minuter? 1872 01:25:05,010 --> 01:25:06,340 Tack. 1873 01:25:06,340 --> 01:25:09,180 Några snabba PSET tips. 1874 01:25:09,180 --> 01:25:13,100 Så för denna pset, rekommenderar jag starkt, som sagt, alla att läsa spec. 1875 01:25:13,100 --> 01:25:16,804 Du kommer att skriva tre programs-- en kallas initials.c, som kallas 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 Några viktiga tips som ni verkligen vill 1879 01:25:22,340 --> 01:25:25,040 att hålla mind-- så det är denna funktion 1880 01:25:25,040 --> 01:25:27,770 kallas atoi-- som jag vilja säga, en trois. 1881 01:25:27,770 --> 01:25:29,520 Oklart om det är faktiskt hur du säger det. 1882 01:25:29,520 --> 01:25:32,510 Men allt det gör, det är inmatning. 1883 01:25:32,510 --> 01:25:34,320 Den konverterar en sträng till en int. 1884 01:25:34,320 --> 01:25:37,490 Så en representerar ASCII till i heltal. 1885 01:25:37,490 --> 01:25:40,310 Det är bara konvertera ASCII värden till heltalsvärden. 1886 01:25:40,310 --> 01:25:44,510 Så kom ihåg argv, matrisen som lagrar alla dina kommandon linje arguments-- 1887 01:25:44,510 --> 01:25:46,300 den lagrar dem alla som strängar. 1888 01:25:46,300 --> 01:25:50,010 Och så om du vill kunna har en av dem blir ett heltal, 1889 01:25:50,010 --> 01:25:52,750 du kommer att ha att använda detta värde här. 1890 01:25:52,750 --> 01:25:56,690 >> Modulo, som vi täckte tidigare i klassen idag, 1891 01:25:56,690 --> 01:25:59,550 gör att du kan ha Resten av vad du har. 1892 01:25:59,550 --> 01:26:03,620 Så om vi har verkligen, verkligen ett stort antal i Caesar, 1893 01:26:03,620 --> 01:26:06,117 tänk om vi har slut av en sträng av Vigenère? 1894 01:26:06,117 --> 01:26:08,450 Hur kommer ni att kunna att få det att slå runt? 1895 01:26:08,450 --> 01:26:11,330 Om jag slog z och jag vill det att gå tillbaka till en, 1896 01:26:11,330 --> 01:26:13,650 Hur ska jag få som att linda runt? 1897 01:26:13,650 --> 01:26:15,960 Förmodligen vill använda modulo där någonstans. 1898 01:26:15,960 --> 01:26:19,190 >> För det andra, bläddra runt biblioteket. ctype.h. 1899 01:26:19,190 --> 01:26:20,680 Det är ett nytt bibliotek som vi har. 1900 01:26:20,680 --> 01:26:25,270 Du hittar en hel del riktigt, riktigt användbar 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 Alla funktioner som kommer att vara till stor nytta när du försöker räkna ut, 1903 01:26:30,680 --> 01:26:33,780 är denna karaktär en liten bokstav? 1904 01:26:33,780 --> 01:26:35,730 Hur gör jag omvandla denna sträng till ett versalt? 1905 01:26:35,730 --> 01:26:38,146 Alla dessa saker kommer att bli mycket, till stor hjälp för 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 >> Kontorstid ikväll är 8:00 till 11:00 i TEAL klassrummet morgon 1909 01:26:49,644 --> 01:26:51,310 samt onsdag och torsdag kväll. 1910 01:26:51,310 --> 01:26:53,280 Kontorstider är allmänningar. 1911 01:26:53,280 --> 01:26:56,180 Mycket föreslår ni alla komma igång direkt, 1912 01:26:56,180 --> 01:27:00,490 eftersom du inte vill vara den barn som torsdag kväll har problem 1913 01:27:00,490 --> 01:27:03,870 skickar in din pset och som, jag vet inte vad jag ska göra. 1914 01:27:03,870 --> 01:27:05,870 Jag började, jag slutade lade jag. 1915 01:27:05,870 --> 01:27:09,737 Försök att ge dig själv lite utrymme, eftersom koden problem uppstår alltid. 1916 01:27:09,737 --> 01:27:11,570 Du vill vara säker på att du ger dig själv 1917 01:27:11,570 --> 01:27:14,810 en hel del tid för att kunna att slutföra psets. 1918 01:27:14,810 --> 01:27:15,310 Häftigt. 1919 01:27:15,310 --> 01:27:16,720 Jag ska hänga här. 1920 01:27:16,720 --> 01:27:18,226 >> PUBLIK: Är detta online redan? 1921 01:27:18,226 --> 01:27:20,850 ANDI PENG: Jag vet inte om det är redan finns på nätet, men det kommer att bli. 1922 01:27:20,850 --> 01:27:23,500 Jag ska hänga runt här om någon har några frågor redan. 1923 01:27:23,500 --> 01:27:25,390 Tack för att du kom. 1924 01:27:25,390 --> 01:27:27,105