1 00:00:08,280 --> 00:00:09,020 [Powered by Google Translate] ZAMYLA CHAN: Greit, alle sammen. 2 00:00:09,020 --> 00:00:11,130 Velkommen til Walkthrough en. 3 00:00:11,130 --> 00:00:13,950 Dette Walkthrough vil være på en pset, som er C. Jeg håper du 4 00:00:13,950 --> 00:00:16,540 alle hadde det gøy med Scratch-prosjekter. 5 00:00:16,540 --> 00:00:18,430 Så nå i denne gjennomgang, er vi faktisk kommer til å være 6 00:00:18,430 --> 00:00:21,580 stand til å komme inn i C, komme inn å skrive noen maskinkode. 7 00:00:21,580 --> 00:00:24,750 Så hvis du ikke var på Walkthrough 0, da disse 8 00:00:24,750 --> 00:00:26,330 walkthroughs virkelig - vi kommer til å gå gjennom 9 00:00:26,330 --> 00:00:29,500 oppgavesettet, snakke gjennom noen vanlige tips og teknikker 10 00:00:29,500 --> 00:00:30,430 som du kan bruke. 11 00:00:30,430 --> 00:00:32,960 Vi vil bryte oppdraget opp i håndterbare biter, slik at 12 00:00:32,960 --> 00:00:35,500 dere kan komme i gang og forhåpentligvis 13 00:00:35,500 --> 00:00:37,470 forstå hvordan du gjør det. 14 00:00:37,470 --> 00:00:38,050 >> Okay. 15 00:00:38,050 --> 00:00:42,280 Så en pset. 16 00:00:42,280 --> 00:00:46,200 Den psets i år vil ha en struktur der det første - 17 00:00:46,200 --> 00:00:48,930 Det kommer til å bli en del av spørsmålene, en serie 18 00:00:48,930 --> 00:00:51,120 spørsmål som virkelig vil også hjelpe deg å komme i gang med 19 00:00:51,120 --> 00:00:53,840 den pset, hjelpe deg å praktisere noen teknikker som du trenger. 20 00:00:53,840 --> 00:00:55,950 Og så disse spørsmålene, jeg kommer ikke til å dekke i 21 00:00:55,950 --> 00:00:59,630 walkthrough fordi i seksjon, din pålegges undervisning 22 00:00:59,630 --> 00:01:01,630 stipendiaten er faktisk kommer til å gå gjennom de 23 00:01:01,630 --> 00:01:02,620 spørsmål med deg. 24 00:01:02,620 --> 00:01:04,370 På slutten av avsnittet ditt, vil du stikke av med 25 00:01:04,370 --> 00:01:07,200 svar på disse spørsmålene, men også med tillit til at 26 00:01:07,200 --> 00:01:10,340 du kan implementere noen av funksjonene som du vil trenge 27 00:01:10,340 --> 00:01:12,480 for de sistnevnte deler av pset. 28 00:01:12,480 --> 00:01:15,900 >> Pset en utgjør Mario. 29 00:01:15,900 --> 00:01:19,000 Og det er en morsom liten program der egentlig vi 30 00:01:19,000 --> 00:01:24,360 skrive og skrive ut en halv pyramide i typisk Mario scenen. 31 00:01:24,360 --> 00:01:27,150 Og deretter den andre delen av pset kalles Greedy. 32 00:01:27,150 --> 00:01:29,850 Og så i Greedy egentlig vi opptre som en grådig 33 00:01:29,850 --> 00:01:32,780 kasserer, der hvis noen gir oss en mengde penger 34 00:01:32,780 --> 00:01:38,730 som vi ønsker, regner vi det minimum av mynter som 35 00:01:38,730 --> 00:01:40,840 vi kan gå tilbake til dem for å fortsatt gi dem dette beløpet. 36 00:01:44,080 --> 00:01:44,420 >> OK. 37 00:01:44,420 --> 00:01:46,970 Så hver walkthrough vil ha en verktøykasse. 38 00:01:46,970 --> 00:01:50,650 Og igjen, kan du ikke bruke alle verktøyene i denne 39 00:01:50,650 --> 00:01:53,080 verktøykasse eller du kan bruke dem alle. 40 00:01:53,080 --> 00:01:54,550 I alle fall, det er virkelig godt å vite hva 41 00:01:54,550 --> 00:01:55,680 du er utstyrt med. 42 00:01:55,680 --> 00:01:59,990 Så vi har CS50 Appliance, som jeg skal vise dere og 43 00:01:59,990 --> 00:02:01,350 introdusere deg til det. 44 00:02:01,350 --> 00:02:05,710 Da også generelt, er god stil definitivt en av våre 45 00:02:05,710 --> 00:02:07,080 viktigste verktøy. 46 00:02:07,080 --> 00:02:10,759 Stil gjelder i hovedsak til hvordan lesbar er koden? 47 00:02:10,759 --> 00:02:12,750 Når noen andre går og leser koden, har de 48 00:02:12,750 --> 00:02:13,610 en lett tid? 49 00:02:13,610 --> 00:02:14,630 Kan de forstå det? 50 00:02:14,630 --> 00:02:16,610 Er det elegant? 51 00:02:16,610 --> 00:02:21,750 Så får vi snakke om hvordan du får gyldig brukerens input i 52 00:02:21,750 --> 00:02:26,430 programmet fordi både Mario og i Grådig, må du 53 00:02:26,430 --> 00:02:31,660 be brukeren å legge inn og gi deg noen form for tall. 54 00:02:31,660 --> 00:02:35,480 Så vi vil være sikker på at antallet er gyldig. 55 00:02:35,480 --> 00:02:39,010 Deretter husker i Scratch, hadde vi blokker som Repeat, 56 00:02:39,010 --> 00:02:42,300 Gjenta til, eller vente, eller Alltid. 57 00:02:42,300 --> 00:02:45,880 Så vi kommer til slags oversette det til C nå og 58 00:02:45,880 --> 00:02:49,750 se på løkker som for, mens, og gjør-stund. 59 00:02:49,750 --> 00:02:54,330 Da også vi må også vise verdier tilbake på 60 00:02:54,330 --> 00:02:56,500 skjermen, enten det er i Mario eller Greedy. 61 00:02:56,500 --> 00:03:01,150 Og så skal vi snakke om hvordan vi skrive ut ting fra strenger til 62 00:03:01,150 --> 00:03:03,070 heltall og flyter. 63 00:03:03,070 --> 00:03:05,250 Og så til slutt, vil vi snakke om pseudokode, en virkelig 64 00:03:05,250 --> 00:03:07,550 viktig begrep å huske hele dette kurset. 65 00:03:07,550 --> 00:03:11,130 Det jeg finner hjelper meg mest med oppgavesett er å tenke og 66 00:03:11,130 --> 00:03:14,260 beskrive hva jeg ønsker å gjøre før du tenker om noen C. 67 00:03:14,260 --> 00:03:15,640 Men bare beskrive handlingen. 68 00:03:15,640 --> 00:03:19,100 Så pseudokode er slags i mellom engelsk og C, type 69 00:03:19,100 --> 00:03:22,980 beskriver prosesser uten riktig syntaks, men 70 00:03:22,980 --> 00:03:24,490 gir en god nok struktur. 71 00:03:24,490 --> 00:03:27,460 Og så vil jeg ha noen eksempler på pseudokode for deg også 72 00:03:27,460 --> 00:03:28,710 i denne gjennomgangen. 73 00:03:31,610 --> 00:03:31,940 >> Okay. 74 00:03:31,940 --> 00:03:35,620 Så hva vi skal jobbe med er CS50 Appliance. 75 00:03:35,620 --> 00:03:38,840 Det er egentlig en virtuell maskin som slags kjører en 76 00:03:38,840 --> 00:03:40,780 datamaskinen inne din egen datamaskin. 77 00:03:40,780 --> 00:03:42,080 Og dette har en rekke fordeler. 78 00:03:42,080 --> 00:03:44,780 Det ene er at det er forhåndsinnstilt med en rekke verktøy som du vil 79 00:03:44,780 --> 00:03:45,980 behov for CS50. 80 00:03:45,980 --> 00:03:47,940 I tillegg betyr det at alle er på samme bakken, 81 00:03:47,940 --> 00:03:50,800 enten Mac eller PC, eller et annet operativsystem. 82 00:03:50,800 --> 00:03:53,930 Vi kan alle kjøre den virtuelle maskinen. 83 00:03:53,930 --> 00:03:58,800 Og så er det instruksjoner på manual.cs50.net/appliance. 84 00:03:58,800 --> 00:04:02,740 Og så hvis du går til denne linken og følg instruksjonene, 85 00:04:02,740 --> 00:04:07,820 så forhåpentligvis vil du være i stand til å installere apparatet. 86 00:04:07,820 --> 00:04:11,390 >> Så først, må du installere et program, en 87 00:04:11,390 --> 00:04:13,760 selve programmet for å kunne kjøre den virtuelle maskinen. 88 00:04:13,760 --> 00:04:15,270 Og så kan du laste ned apparatet. 89 00:04:15,270 --> 00:04:18,050 Men igjen, det er instruksjoner på 90 00:04:18,050 --> 00:04:21,459 manual.cs50.net/appliance. 91 00:04:21,459 --> 00:04:26,040 Så jeg har allerede lastet ned min apparatet, og jeg har installert 92 00:04:26,040 --> 00:04:28,060 det i VMware Fusion. 93 00:04:28,060 --> 00:04:31,250 Og så når jeg lastet ned apparatet, gikk jeg til fil. 94 00:04:31,250 --> 00:04:34,690 Jeg gikk for å åpne og deretter fant der jeg 95 00:04:34,690 --> 00:04:37,550 lagret CS50 Appliance. 96 00:04:37,550 --> 00:04:39,310 Og derfra, løp jeg det her. 97 00:04:39,310 --> 00:04:44,520 Men jeg har den opp allerede her, så la oss ta en nærmere titt. 98 00:04:44,520 --> 00:04:44,850 >> OK. 99 00:04:44,850 --> 00:04:46,770 Så nå er vi inne CS50 Appliance. 100 00:04:46,770 --> 00:04:47,890 Jeg gjorde det i full skjerm. 101 00:04:47,890 --> 00:04:51,130 Du kan velge å gjøre det hvis du ønsker eller bare ha det som en 102 00:04:51,130 --> 00:04:53,480 mindre vindu på skrivebordet ditt. 103 00:04:53,480 --> 00:04:57,170 Her har vi bare en enkel desktop med 104 00:04:57,170 --> 00:04:58,220 et hjem og en papirkurv. 105 00:04:58,220 --> 00:05:05,070 Men hvis du går til Meny og deretter til programmering, så ser du 106 00:05:05,070 --> 00:05:07,570 at vi har noe som heter Terminal. 107 00:05:07,570 --> 00:05:12,340 Og så her kan vi navigere rundt datamaskinen vår. 108 00:05:12,340 --> 00:05:13,360 Vi kan skrive kode. 109 00:05:13,360 --> 00:05:17,240 Men faktisk, vil vi bruke et program som heter gedit, eller "g 110 00:05:17,240 --> 00:05:20,050 redigere, "avhengig av hva som er. 111 00:05:20,050 --> 00:05:21,680 Så vi skal bruke som en til å skrive kode. 112 00:05:21,680 --> 00:05:24,850 Så du har disse to verktøy som du skal bruke primært 113 00:05:24,850 --> 00:05:27,590 å skrive kode. 114 00:05:27,590 --> 00:05:31,240 Så i tillegg er det akkurat som en vanlig datamaskin. 115 00:05:31,240 --> 00:05:32,890 Vi har en nettleser. 116 00:05:32,890 --> 00:05:34,400 Vi valgte Google Chrome. 117 00:05:34,400 --> 00:05:38,720 Hva jeg har gjort er at jeg har satt opp en Dropbox å inneholde alle 118 00:05:38,720 --> 00:05:39,340 dokumentene. 119 00:05:39,340 --> 00:05:41,760 Og så det er noe som er svært oppmuntret. 120 00:05:41,760 --> 00:05:44,900 Dropbox bruker sky synkronisering og så hvis - 121 00:05:44,900 --> 00:05:47,250 så for eksempel noe ved en tilfeldighet - la oss håpe ikke - 122 00:05:47,250 --> 00:05:50,100 skjer med apparatet, så det vil alle være 123 00:05:50,100 --> 00:05:51,350 synkronisert på skyen. 124 00:05:54,716 --> 00:05:55,180 >> OK. 125 00:05:55,180 --> 00:05:59,500 Så de er programmer som du skal bruke i 126 00:05:59,500 --> 00:06:02,900 CS50 Appliance. 127 00:06:02,900 --> 00:06:05,750 Nå for å navigere rundt kommandolinjen. 128 00:06:05,750 --> 00:06:10,150 Terminalen kan faktisk fungere som en slags måte å faktisk 129 00:06:10,150 --> 00:06:12,040 skriver kommandoer inn i - 130 00:06:12,040 --> 00:06:13,650 liker, hvis du er en Mac, en Finder. 131 00:06:13,650 --> 00:06:17,010 Eller hvis du er i Windows, tror jeg det er utforske "min 132 00:06:17,010 --> 00:06:19,070 datamaskin "eller noe sånt. 133 00:06:19,070 --> 00:06:23,160 Så hvis vi går tilbake til apparatet, la oss åpne opp en 134 00:06:23,160 --> 00:06:25,710 terminal-vinduet. 135 00:06:25,710 --> 00:06:27,720 Så det har denne meldingen, jharvard @ apparatet. 136 00:06:27,720 --> 00:06:32,950 La oss bare gjøre dette større. 137 00:06:32,950 --> 00:06:33,790 Okay. 138 00:06:33,790 --> 00:06:40,400 Så hvis vi skriver inn kommandoen ls, så det viser alle de 139 00:06:40,400 --> 00:06:45,440 filer på datamaskinen, i vår nåværende katalog. 140 00:06:45,440 --> 00:06:46,720 Kataloger er akkurat som mapper. 141 00:06:46,720 --> 00:06:49,310 Vi bruker disse begrepene om hverandre. 142 00:06:49,310 --> 00:06:52,480 Greit, så vi har listet opp de filene 143 00:06:52,480 --> 00:06:53,650 som er i denne katalogen. 144 00:06:53,650 --> 00:06:58,340 Hvis vi nå ønsker å få tilgang til, sier vår Dropbox, så kan vi 145 00:06:58,340 --> 00:06:59,320 endre kataloger. 146 00:06:59,320 --> 00:07:04,230 Så cd og deretter Dropbox. 147 00:07:04,230 --> 00:07:10,860 Vi ls igjen, og så får vi se en liste over filer som er i 148 00:07:10,860 --> 00:07:11,790 denne mappen. 149 00:07:11,790 --> 00:07:15,590 Dette er analogt til meg kommer til mitt hjem, og deretter klikke 150 00:07:15,590 --> 00:07:19,250 Dropbox, og deretter se listen her. 151 00:07:19,250 --> 00:07:20,090 >> OK. 152 00:07:20,090 --> 00:07:22,220 Så la oss si - 153 00:07:22,220 --> 00:07:25,640 når dere kommer til å gjøre din pset en, la oss lage en 154 00:07:25,640 --> 00:07:27,390 katalog som heter pset1. 155 00:07:27,390 --> 00:07:32,170 Så vi er i Dropbox akkurat nå, som du kan se fra dette 156 00:07:32,170 --> 00:07:32,700 spør her. 157 00:07:32,700 --> 00:07:34,320 Så la oss gjøre en katalog. 158 00:07:34,320 --> 00:07:37,940 Så mkdir, la oss kalle det pset1. 159 00:07:40,470 --> 00:07:43,500 Og så nå hvis vi ls igjen, så vi 160 00:07:43,500 --> 00:07:45,390 se at pset1 vises. 161 00:07:45,390 --> 00:07:49,470 Og så hvis vi ønsker å gå inn pset1, så kan vi gå inn 162 00:07:49,470 --> 00:07:54,230 mappen med kommandoen cd. 163 00:07:54,230 --> 00:07:54,610 OK. 164 00:07:54,610 --> 00:07:59,040 Så igjen, la oss se om vi - 165 00:07:59,040 --> 00:08:01,620 si, la oss gjøre det på en annen måte. 166 00:08:01,620 --> 00:08:03,550 Dette er analogt til bare sier "Opprett 167 00:08:03,550 --> 00:08:05,330 en ny mappe, pset1. 168 00:08:05,330 --> 00:08:08,530 Men som du finner, vil du være i samspill med 169 00:08:08,530 --> 00:08:09,310 terminalen mye. 170 00:08:09,310 --> 00:08:11,900 Så noen ganger er det mye enklere, mistet en raskere å bare 171 00:08:11,900 --> 00:08:15,900 arbeide i terminalen for å gjøre denslags. 172 00:08:15,900 --> 00:08:16,140 Okay. 173 00:08:16,140 --> 00:08:18,150 Og så disse andre kommandoer. 174 00:08:18,150 --> 00:08:20,410 Det er en rm for fjerne en fil. 175 00:08:20,410 --> 00:08:22,690 Slik at du bare skriver rm og deretter navnet på 176 00:08:22,690 --> 00:08:23,800 fil for å slette det. 177 00:08:23,800 --> 00:08:25,810 Vi vil gå inn i noen eksempler på det senere. 178 00:08:25,810 --> 00:08:28,840 Og så har vi noe som heter mannen kommandoen, som 179 00:08:28,840 --> 00:08:31,850 bringer opp en manual for en type funksjon. 180 00:08:31,850 --> 00:08:34,419 Igjen vil jeg ta opp et faktisk eksempel på det senere. 181 00:08:37,360 --> 00:08:39,900 >> Så en annen veldig viktig verktøy, som jeg nevnte kort 182 00:08:39,900 --> 00:08:41,280 før, er stilen. 183 00:08:41,280 --> 00:08:43,650 Så egentlig, har stil å gjøre med lesbarhet. 184 00:08:43,650 --> 00:08:46,460 Vil noen andre kunne lese, følge og 185 00:08:46,460 --> 00:08:47,670 forstå koden? 186 00:08:47,670 --> 00:08:50,490 Dette er spesielt viktig for deg, deg selv, faktisk. 187 00:08:50,490 --> 00:08:53,060 Hvis du oppholder deg sent koding, og senere på deg 188 00:08:53,060 --> 00:08:55,940 gå tilbake og du liker, hva betyr denne variabelen betyr? 189 00:08:55,940 --> 00:08:58,400 Si, du arbeider på en gruppe prosjekt med noen, og du 190 00:08:58,400 --> 00:09:00,130 begge må se på hverandres kode. 191 00:09:00,130 --> 00:09:03,380 Det er veldig viktig at du navngi variabler riktig 192 00:09:03,380 --> 00:09:06,240 og at det ser fint fordi det gjør hele forskjellen. 193 00:09:06,240 --> 00:09:08,270 Men da fremfor alt, er vi i et kurs akkurat nå. 194 00:09:08,270 --> 00:09:10,660 Så for interessen til CS50 og spesielt for din 195 00:09:10,660 --> 00:09:13,010 undervisning stipendiater og veiskrapere som skal se på din 196 00:09:13,010 --> 00:09:15,455 psets, please, please bruke riktig stil. 197 00:09:15,455 --> 00:09:18,980 Og undervisningen Stipendiatene vil være ganske fornøyd. 198 00:09:18,980 --> 00:09:22,890 Så igjen, omfatter stil innrykk ting riktig, 199 00:09:22,890 --> 00:09:26,380 spesielt ved hjelp av tannregulering og innrykk dem. 200 00:09:26,380 --> 00:09:29,910 Navngi variabler noe som gir mening. 201 00:09:29,910 --> 00:09:32,330 Akkurat nå følger vi konvensjonen når du har 202 00:09:32,330 --> 00:09:35,240 flere ord i variabelnavnet, så du 203 00:09:35,240 --> 00:09:37,480 koble dem med en understrekning, som du ser i det 204 00:09:37,480 --> 00:09:39,660 nevne eksempel der. 205 00:09:39,660 --> 00:09:41,740 >> Så til slutt, heter noe magiske tall. 206 00:09:41,740 --> 00:09:48,030 I hovedsak, når du leser gjennom koden og si 207 00:09:48,030 --> 00:09:51,570 du har en variabel - 208 00:09:51,570 --> 00:09:56,680 si, trenger du ikke en variabel, men bare si greit, inntil 209 00:09:56,680 --> 00:09:58,600 og slik er mindre enn 10 år. 210 00:09:58,600 --> 00:10:00,210 Så din grader kommer til å gå bra, vent, 211 00:10:00,210 --> 00:10:01,320 hvor kom det 10 kommer fra? 212 00:10:01,320 --> 00:10:05,040 Så egentlig forklare deg selv teller mye. 213 00:10:05,040 --> 00:10:06,740 For å hjelpe deg forklare deg er kommentarer. 214 00:10:06,740 --> 00:10:09,850 Kommentarer er trolig den viktigste å ta med i 215 00:10:09,850 --> 00:10:11,460 programmene dine. 216 00:10:11,460 --> 00:10:15,440 Og det hjelper deg ikke bare faktisk forklare - 217 00:10:15,440 --> 00:10:17,220 det hjelper deg slags forklare ditt resonnement som 218 00:10:17,220 --> 00:10:17,870 du kommer sammen. 219 00:10:17,870 --> 00:10:20,480 Og så hvis du gjør det, igjen, det kommer til å være mye enklere 220 00:10:20,480 --> 00:10:23,370 å gå tilbake i din kode og type forstå hva du er 221 00:10:23,370 --> 00:10:24,080 gjør det. 222 00:10:24,080 --> 00:10:26,410 Igjen, sorteringsmaskiner virkelig liker kommentarer. 223 00:10:26,410 --> 00:10:28,940 Så du kommentere godt og - 224 00:10:28,940 --> 00:10:29,970 typen som gratis poeng. 225 00:10:29,970 --> 00:10:32,340 Og hvem liker ikke gratis poeng? 226 00:10:32,340 --> 00:10:33,910 Du kan også ha flere linjer kommentarer. 227 00:10:33,910 --> 00:10:36,630 Og så jeg inkluderte en slags mal her oppe. 228 00:10:36,630 --> 00:10:38,580 Hovedsak, vanligvis disse brukes på toppen av 229 00:10:38,580 --> 00:10:40,950 program til slags forklare generelt hva 230 00:10:40,950 --> 00:10:43,220 problemet set. 231 00:10:43,220 --> 00:10:46,130 Inkludere ditt navn, dato, et cetera. 232 00:10:46,130 --> 00:10:49,030 Og så, som jeg sa i denne multi-line kommentar, 233 00:10:49,030 --> 00:10:56,260 manual.cs50.net/style_guide har flere tips og regler om 234 00:10:56,260 --> 00:10:59,310 stil for looper, et cetera. 235 00:10:59,310 --> 00:10:59,740 >> Okay. 236 00:10:59,740 --> 00:11:03,600 Så nå som jeg har fortalt deg litt om stilen, la oss se 237 00:11:03,600 --> 00:11:07,390 dette i praksis. 238 00:11:07,390 --> 00:11:07,770 OK. 239 00:11:07,770 --> 00:11:11,850 Så her har Tommy skrevet oss en herlig fryktelig 240 00:11:11,850 --> 00:11:15,440 eksempel på stil i et program. 241 00:11:15,440 --> 00:11:17,170 Så du ser her, all right. 242 00:11:17,170 --> 00:11:18,280 Dette er faktisk bra. 243 00:11:18,280 --> 00:11:22,060 Du ser flere linjer kommentar her. 244 00:11:22,060 --> 00:11:25,120 Du starter det med en skråstrek og deretter to stjerner. 245 00:11:25,120 --> 00:11:28,580 Du fortsetter langs, samkjøre stjernene langs linjen 246 00:11:28,580 --> 00:11:30,540 og deretter avslutte den med en asterisk og en skråstrek. 247 00:11:30,540 --> 00:11:30,810 OK. 248 00:11:30,810 --> 00:11:32,800 Så det er fint. 249 00:11:32,800 --> 00:11:33,760 Dette her er fine. 250 00:11:33,760 --> 00:11:35,110 Han inkludert hans biblioteker. 251 00:11:35,110 --> 00:11:38,790 Men så her har han kommentarer over flere linjer. 252 00:11:38,790 --> 00:11:40,390 Det er mange ting som er galt med dette. 253 00:11:40,390 --> 00:11:44,770 Kommentarer over flere linjer, her han bruker 254 00:11:44,770 --> 00:11:47,230 syntaksen for bare én linje kommentarer. 255 00:11:47,230 --> 00:11:53,140 Han har også sammensmelting alt i samme kommentar. 256 00:11:53,140 --> 00:11:54,715 Så vi ønsker å unngå det. 257 00:11:57,710 --> 00:12:03,010 Så her ser vi at disse bukseseler, for eksempel, er alle 258 00:12:03,010 --> 00:12:03,730 over alt. 259 00:12:03,730 --> 00:12:06,950 Innrykk er feil. 260 00:12:06,950 --> 00:12:09,460 Det gjør egentlig ikke vise deg definitivt der noe 261 00:12:09,460 --> 00:12:12,850 starter og en annen ting ender. 262 00:12:12,850 --> 00:12:16,510 Da også, ser vi at han har en definert variabel i = 5 her. 263 00:12:16,510 --> 00:12:18,620 Men så dette fire kommer ut av ingenting, og det er ingen 264 00:12:18,620 --> 00:12:21,520 kommentar til virkelig forklare hvor det kommer fra. 265 00:12:21,520 --> 00:12:22,130 >> Okay. 266 00:12:22,130 --> 00:12:28,760 Så la oss nå se på noe som er faktisk akkurat det samme 267 00:12:28,760 --> 00:12:30,250 kode unntatt med bedre stil. 268 00:12:30,250 --> 00:12:32,485 Så igjen, er dette den god stil eksempel 269 00:12:32,485 --> 00:12:33,735 multi-linje eksempel. 270 00:12:38,400 --> 00:12:39,735 Og så her er det ganske ren. 271 00:12:39,735 --> 00:12:43,500 Vi ser at han begynner en hvis setningen her, går inn i en ny 272 00:12:43,500 --> 00:12:46,400 linje, har en åpen spenne. 273 00:12:46,400 --> 00:12:48,740 Så han har et innrykk. 274 00:12:48,740 --> 00:12:50,970 Han holder denne innrykk - 275 00:12:50,970 --> 00:12:54,680 han holder denne indikasjonen uniform over hele 276 00:12:54,680 --> 00:12:59,120 program og virkelig viser når en blokk med kode starter når 277 00:12:59,120 --> 00:13:00,780 en blokk med kode slutter. 278 00:13:00,780 --> 00:13:04,410 Dette kan virke litt pirkete på vår side for å begynne 279 00:13:04,410 --> 00:13:06,370 med, men du vil se som du skriver koden. 280 00:13:06,370 --> 00:13:09,400 Dette er svært nyttig for å kunne skille ut dette. 281 00:13:09,400 --> 00:13:12,200 Og igjen, dine klassinger virkelig liker det. 282 00:13:12,200 --> 00:13:14,360 Og så ser du, i stedet for bare å sette et tall i 283 00:13:14,360 --> 00:13:17,510 der, han faktisk oppkalt de variable iterasjoner. 284 00:13:17,510 --> 00:13:20,160 Og slik at vi ikke faktisk ser på denne koden akkurat nå 285 00:13:20,160 --> 00:13:22,450 men bare slags se et eksempel på 286 00:13:22,450 --> 00:13:23,780 gode mot dårlig stil. 287 00:13:23,780 --> 00:13:29,610 Og så hvis du ser på dem side ved side her, ville du 288 00:13:29,610 --> 00:13:32,910 definitivt foretrekker å lese en til høyre. 289 00:13:39,230 --> 00:13:40,100 >> OK. 290 00:13:40,100 --> 00:13:42,710 Så en siste ting før vi dykke inn i den virkelige kjøtt av 291 00:13:42,710 --> 00:13:46,260 pset er hvordan å kompilere og kjøre koden din. 292 00:13:46,260 --> 00:13:50,320 Og så egentlig når du skriver C, det er faktisk ikke 293 00:13:50,320 --> 00:13:52,480 oversatt til den virkelige maskinkode, nullpunktene og 294 00:13:52,480 --> 00:13:56,000 de som maskinen kan faktisk lese og tolke. 295 00:13:56,000 --> 00:13:57,170 Så vi har noe - 296 00:13:57,170 --> 00:13:59,340 Clang er en kompilator som vi bruker for C. 297 00:13:59,340 --> 00:14:00,270 Det er mange kompilatorer. 298 00:14:00,270 --> 00:14:02,480 Men i CS50, vil vi bruke Clang. 299 00:14:02,480 --> 00:14:05,480 Og så Clang oversetter utgangspunktet fra C til maskin 300 00:14:05,480 --> 00:14:07,380 koden for deg. 301 00:14:07,380 --> 00:14:10,170 Så la oss se på et eksempel - dykk inn i Appliance her. 302 00:14:14,550 --> 00:14:15,030 OK. 303 00:14:15,030 --> 00:14:16,670 Så akkurat nå er vi i vårt hjem katalog. 304 00:14:16,670 --> 00:14:18,680 Vi har faktisk ikke hvor noen kode er. 305 00:14:18,680 --> 00:14:24,740 Så la oss endre vår katalog til Dropbox/walkthrough1, hvor 306 00:14:24,740 --> 00:14:25,930 Jeg har lagret noen kode. 307 00:14:25,930 --> 00:14:29,340 Så hvis vi trykker på ls, så ser vi at jeg har en 308 00:14:29,340 --> 00:14:31,230 par av filer i her. 309 00:14:31,230 --> 00:14:31,700 >> OK. 310 00:14:31,700 --> 00:14:35,280 Så jeg har allerede skrevet hallo.c, så la oss lage det 311 00:14:35,280 --> 00:14:36,670 og deretter se hva den gjør. 312 00:14:36,670 --> 00:14:43,150 Så en grunnleggende Kompileringskommandoen ville være clang da hallo.c, 313 00:14:43,150 --> 00:14:46,910 hovedsak si greit, kompilere hallo.c for meg. 314 00:14:46,910 --> 00:14:50,550 Jeg klikker Enter, synes å ha gått rett. 315 00:14:50,550 --> 00:14:52,590 La oss klikke ls igjen. 316 00:14:52,590 --> 00:14:55,230 Dette a.out filen har nå vist. 317 00:14:55,230 --> 00:14:57,430 Og så a.out er en kjørbar fil. 318 00:14:57,430 --> 00:15:05,330 Så for å kjøre den, gjør du en. / A.out. 319 00:15:05,330 --> 00:15:07,650 Og så ser vi at dette hallo.c programmet tilsynelatende 320 00:15:07,650 --> 00:15:10,400 skriver ut hallo fem ganger. 321 00:15:10,400 --> 00:15:10,990 OK. 322 00:15:10,990 --> 00:15:14,250 Men sier at vi ikke ønsker å bruke navnet a.out. 323 00:15:18,140 --> 00:15:21,080 For eksempel ønsker vi å kjøre hallo program fordi det 324 00:15:21,080 --> 00:15:22,540 gjør det lettere å forstå. 325 00:15:22,540 --> 00:15:26,590 Så la oss si clang hallo.c, og deretter egentlig du trenger 326 00:15:26,590 --> 00:15:29,030 å passere i noen ting som kalles flagg. 327 00:15:29,030 --> 00:15:31,600 Så å si okay, vel jeg vil nevne dette noe annet. 328 00:15:31,600 --> 00:15:33,900 Du kan også sende inn en rekke ulike flagg, 329 00:15:33,900 --> 00:15:34,620 som du vil se. 330 00:15:34,620 --> 00:15:37,510 Så flagget for å navngi et program noe som du 331 00:15:37,510 --> 00:15:39,780 ønsker er-o. 332 00:15:39,780 --> 00:15:42,470 Etter-o, skriver du navnet på programmet. 333 00:15:42,470 --> 00:15:44,090 La oss bare kalle det hallo. 334 00:15:44,090 --> 00:15:49,050 >> Så nå ser vi at vi faktisk har en Hei kjørbar fil. 335 00:15:49,050 --> 00:15:54,020 Så vi kan kjøre den, og det gjør det samme som før. 336 00:15:54,020 --> 00:15:56,210 Så nå som vi har hello, kan vi også fjerne, for 337 00:15:56,210 --> 00:15:57,450 eksempel vår a.out. 338 00:15:57,450 --> 00:16:03,880 Så rm for fjern, a.out, vil terminalen be deg, spør 339 00:16:03,880 --> 00:16:05,470 for deg å bekrefte om du virkelig ønsker å 340 00:16:05,470 --> 00:16:06,370 slette den eller ikke. 341 00:16:06,370 --> 00:16:10,000 Vi sier y for ja. 342 00:16:10,000 --> 00:16:10,750 Og der vi går. 343 00:16:10,750 --> 00:16:12,220 A.out er borte. 344 00:16:12,220 --> 00:16:12,620 OK. 345 00:16:12,620 --> 00:16:14,810 Men noen ganger det blir forvirrende å huske alle 346 00:16:14,810 --> 00:16:17,160 flagg som vi trenger for å inkludere og skrive ut clang. 347 00:16:17,160 --> 00:16:20,410 Og som vi ser når vi bruker mer komplekse programmer, vil vi 348 00:16:20,410 --> 00:16:22,450 være inkludert forskjellige biblioteker. 349 00:16:22,450 --> 00:16:27,230 Og så våre kommandoer til Clang bli lengre og lengre. 350 00:16:27,230 --> 00:16:30,660 Så inkludert i CS50 Appliance er merke kommandoen. 351 00:16:30,660 --> 00:16:33,880 Slik at du bare skriver at hallo. 352 00:16:33,880 --> 00:16:35,130 Oops. 353 00:16:36,860 --> 00:16:38,400 Vi har allerede gjort dette kjørbar fil. 354 00:16:38,400 --> 00:16:39,650 Så la meg bare fjerne det raskt. 355 00:16:42,260 --> 00:16:44,830 Nå la oss skrive at hallo. 356 00:16:44,830 --> 00:16:49,470 Og du ser i denne linjen her som i hovedsak si at 357 00:16:49,470 --> 00:16:54,760 hallo involverer alle disse kommandoene som 358 00:16:54,760 --> 00:16:55,580 gå inn i den for deg. 359 00:16:55,580 --> 00:16:58,080 >> Så inkludert i CS50 Appliance er merke filen. 360 00:16:58,080 --> 00:17:02,300 Så enkelt når du har en fil name.c, så alt du gjør 361 00:17:02,300 --> 00:17:03,680 er å si at filnavnet. 362 00:17:03,680 --> 00:17:04,800 Og så har du en kjørbar 363 00:17:04,800 --> 00:17:06,200 fil med dette navnet. 364 00:17:06,200 --> 00:17:06,675 Ja? 365 00:17:06,675 --> 00:17:09,525 >> SPEAKER 1: For min datamaskin, i stedet for Clang det står GCC. 366 00:17:09,525 --> 00:17:11,910 Er det like - 367 00:17:11,910 --> 00:17:12,109 ZAMYLA CHAN: Yeah. 368 00:17:12,109 --> 00:17:15,700 Slik at datamaskinen kan si GCC i motsetning til Clang fordi 369 00:17:15,700 --> 00:17:18,180 GCC er en annen type av kompilatoren. 370 00:17:18,180 --> 00:17:20,460 Hvis du er i CS50 Appliance skjønt, så det 371 00:17:20,460 --> 00:17:21,810 bør bruke Clang. 372 00:17:24,619 --> 00:17:27,880 Hvis det ikke er det, så kanskje komme til å snakke til meg etterpå eller poste 373 00:17:27,880 --> 00:17:29,595 på CS50 Diskuter og vi kan sortere det ut. 374 00:17:34,510 --> 00:17:35,710 >> OK. 375 00:17:35,710 --> 00:17:39,250 Så nå som vi har vår form for grunnleggende verktøy ned, så vi 376 00:17:39,250 --> 00:17:43,060 kan dykke inn i Mario. 377 00:17:43,060 --> 00:17:43,550 Okay. 378 00:17:43,550 --> 00:17:47,360 Så Mario er et program der egentlig vi kommer til å være 379 00:17:47,360 --> 00:17:50,800 gjøre vår egen form for primitiv versjon av Mario 380 00:17:50,800 --> 00:17:51,410 Spillet bakgrunn. 381 00:17:51,410 --> 00:17:54,790 Du vet, har Mario vanligvis et rør og en 382 00:17:54,790 --> 00:17:55,670 tre og noen blokker. 383 00:17:55,670 --> 00:17:59,390 Og så er det en slags halvparten pyramide. 384 00:17:59,390 --> 00:18:02,100 Så vi bare kommer til å bli fokus på at halvparten pyramide, 385 00:18:02,100 --> 00:18:05,350 gjør koden slik at den skriver ut hashes for den type 386 00:18:05,350 --> 00:18:07,500 av blokker i dette formatet. 387 00:18:07,500 --> 00:18:10,800 Så hva vil skje er at brukeren vil legge inn en viss 388 00:18:10,800 --> 00:18:13,130 høyde av pyramiden, og da vil du skrive det ut 389 00:18:13,130 --> 00:18:17,410 slik at bunnen igjen hash - 390 00:18:17,410 --> 00:18:21,270 så helt nederst til høyre her - at man vil justere 391 00:18:21,270 --> 00:18:23,820 med bunnen venstre terminalen. 392 00:18:26,720 --> 00:18:27,360 Okay. 393 00:18:27,360 --> 00:18:29,860 >> Så det første du trenger - 394 00:18:29,860 --> 00:18:33,120 den første lille mini problem som vi må takle er hvordan 395 00:18:33,120 --> 00:18:34,640 å få brukerens input. 396 00:18:34,640 --> 00:18:40,020 Så vi må håndtere hva brukeren innganger og deretter 397 00:18:40,020 --> 00:18:41,060 slags utgang tingene der. 398 00:18:41,060 --> 00:18:47,630 Så la oss se på se en fil som heter apples.c at jeg skrev 399 00:18:47,630 --> 00:18:52,670 som omhandler innganger og utganger. 400 00:18:52,670 --> 00:18:53,240 Okay. 401 00:18:53,240 --> 00:18:55,970 Så her på toppen, har jeg tatt noen av bibliotekene 402 00:18:55,970 --> 00:18:56,540 som jeg trenger. 403 00:18:56,540 --> 00:19:00,700 Den virkelig viktig en her er stdio (standard I / O). Som avtaler 404 00:19:00,700 --> 00:19:02,760 med standard inn-og utganger fordi vi kommer til å 405 00:19:02,760 --> 00:19:04,600 skal håndtere bruker innganger. 406 00:19:04,600 --> 00:19:04,960 OK. 407 00:19:04,960 --> 00:19:06,660 Så begynner jeg mitt viktigste funksjon. 408 00:19:06,660 --> 00:19:11,310 Og så spør jeg brukeren greit, hvor mange epler du ha? 409 00:19:11,310 --> 00:19:13,650 Så akkurat her, hva denne linjen gjør - 410 00:19:13,650 --> 00:19:18,420 Jeg tildele variabelen i til verdien av GetInt. 411 00:19:18,420 --> 00:19:22,890 >> Så GetInt er en funksjon som er inkludert i stdio. 412 00:19:22,890 --> 00:19:26,090 Og så egentlig vil at håndtere det for deg. 413 00:19:26,090 --> 00:19:27,900 Det vil be brukeren om en int. 414 00:19:27,900 --> 00:19:30,600 Uansett hva de kommer tilbake, vil det bli tildelt 415 00:19:30,600 --> 00:19:32,020 variabelen i. 416 00:19:32,020 --> 00:19:35,620 Og så da er det bare et lite program som reduserer 417 00:19:35,620 --> 00:19:39,160 Verdien av i etter en og deretter skriver ut den nye verdien. 418 00:19:39,160 --> 00:19:42,420 En fin ting om gedit er faktisk at det er en mini 419 00:19:42,420 --> 00:19:43,720 terminal rett her. 420 00:19:43,720 --> 00:19:46,670 Så i stedet for å måtte bytte frem og tilbake mellom 421 00:19:46,670 --> 00:19:48,120 gedit og terminalen, kan du faktisk 422 00:19:48,120 --> 00:19:49,100 bare kjøre den herfra. 423 00:19:49,100 --> 00:19:52,070 Så la oss først komme inn i riktig katalog. 424 00:19:52,070 --> 00:19:54,230 Så la oss endre våre kataloger til 425 00:19:54,230 --> 00:19:55,480 Dropbox/walkthrough1. 426 00:19:57,160 --> 00:19:57,840 OK. 427 00:19:57,840 --> 00:20:03,400 Så nå la oss gjøre epler, sammenstiller det for oss. 428 00:20:03,400 --> 00:20:06,640 Og så la oss nå kjøre epler. 429 00:20:06,640 --> 00:20:08,420 Hvor mange epler har vi? 430 00:20:08,420 --> 00:20:09,630 Jeg sier at jeg har tre. 431 00:20:09,630 --> 00:20:12,060 Og det står "mwahaha jeg kommer til å spise en av dem" og sier 432 00:20:12,060 --> 00:20:13,610 "Du har nå to epler". 433 00:20:13,610 --> 00:20:14,220 >> OK. 434 00:20:14,220 --> 00:20:16,390 Så la oss kjøre det igjen. 435 00:20:16,390 --> 00:20:19,040 Og la oss si jeg har en eple. 436 00:20:19,040 --> 00:20:19,940 Nå har jeg 0 epler. 437 00:20:19,940 --> 00:20:20,180 Okay. 438 00:20:20,180 --> 00:20:22,460 Så dette programmet ser ut til å fungere som forventet. 439 00:20:22,460 --> 00:20:25,070 Vi taste inn et nummer, senker det med 1, og deretter 440 00:20:25,070 --> 00:20:27,290 skriver den ut igjen. 441 00:20:27,290 --> 00:20:31,950 Men hva hvis du for eksempel har jeg -1 epler? 442 00:20:31,950 --> 00:20:33,440 Som ikke helt fornuftig. 443 00:20:33,440 --> 00:20:37,430 Men det er fortsatt et heltall, slik at programmet godtar det. 444 00:20:37,430 --> 00:20:41,090 Og så det returnerer du en enda mer negativt tall. 445 00:20:41,090 --> 00:20:44,700 Så det er en lærdom for oss at selv om GetInt 446 00:20:44,700 --> 00:20:46,700 funksjon og de andre tilknyttede seg som 447 00:20:46,700 --> 00:20:48,260 GetFloat eller GetString - 448 00:20:48,260 --> 00:20:51,490 selv om de vil få oss retten datatype, for 449 00:20:51,490 --> 00:20:55,750 eksempel, hvis jeg bare hadde sagt [TYPING], 450 00:20:55,750 --> 00:20:57,380 så det ville fortelle meg å prøve på nytt. 451 00:20:57,380 --> 00:21:01,860 Så dette vil omhandle hva dataene skriver dine innspill 452 00:21:01,860 --> 00:21:04,650 er, men vil faktisk ikke se, vel, det er faktisk en type 453 00:21:04,650 --> 00:21:07,820 verdi som jeg vil? 454 00:21:07,820 --> 00:21:12,370 Så en del av Mario er at brukeren må taste inn en 455 00:21:12,370 --> 00:21:15,400 nummer som representerer høyden av en halv pyramide 456 00:21:15,400 --> 00:21:16,360 at du gjør. 457 00:21:16,360 --> 00:21:21,000 Og så så hvis vi ber denne brukeren for høyden, deretter 458 00:21:21,000 --> 00:21:25,480 det bør være to grenser på dette. 459 00:21:25,480 --> 00:21:28,040 Rett? 460 00:21:28,040 --> 00:21:31,150 I spec, står det at det bør ikke være mer enn 23 461 00:21:31,150 --> 00:21:32,630 tegn fordi det er slags standard 462 00:21:32,630 --> 00:21:34,450 høyde av terminalen. 463 00:21:34,450 --> 00:21:37,590 Men så, hva annet innbundet, kanskje en nedre grense, kanskje 464 00:21:37,590 --> 00:21:38,840 Vi ønsker å inkludere? 465 00:21:41,180 --> 00:21:44,350 >> Hvis vi faktisk tegne en pyramide, type tenkning tilbake 466 00:21:44,350 --> 00:21:48,460 for hvor høyt en pyramide kan være, kan det aldri være lavere enn et 467 00:21:48,460 --> 00:21:49,132 visst antall? 468 00:21:49,132 --> 00:21:50,490 SPEAKER 2: Større enn tre. 469 00:21:50,490 --> 00:21:50,560 ZAMYLA CHAN: Hmm? 470 00:21:50,560 --> 00:21:52,630 SPEAKER 2: Større enn tre. 471 00:21:52,630 --> 00:21:54,850 ZAMYLA CHAN: Det er et godt poeng. 472 00:21:54,850 --> 00:21:57,860 Det kan være - 473 00:21:57,860 --> 00:22:00,700 vi kanskje vil begrense det til bare en tre nivå pyramide. 474 00:22:00,700 --> 00:22:02,120 Men la oss tenke - 475 00:22:02,120 --> 00:22:06,510 la oss si som en en hash table teller som en pyramide også. 476 00:22:06,510 --> 00:22:09,031 Så hva skal våre faktiske nedre grense være? 477 00:22:12,260 --> 00:22:13,760 Tenker tilbake til epler, ønsker vi ikke en 478 00:22:13,760 --> 00:22:15,020 negative høyde pyramide. 479 00:22:15,020 --> 00:22:15,460 Rett? 480 00:22:15,460 --> 00:22:15,720 Okay. 481 00:22:15,720 --> 00:22:19,060 Så når du ber om brukerens input, så du må 482 00:22:19,060 --> 00:22:21,980 inkludere noen måte å sørge for at heltall som 483 00:22:21,980 --> 00:22:24,970 de gir deg er ikke negativ fordi du ikke kan 484 00:22:24,970 --> 00:22:28,180 tegne et negativt pyramide. 485 00:22:28,180 --> 00:22:28,410 >> Okay. 486 00:22:28,410 --> 00:22:30,190 Så det er et par måter å gjøre dette på. 487 00:22:30,190 --> 00:22:34,420 I hovedsak, når du ber om brukerens input, vil du kreve 488 00:22:34,420 --> 00:22:37,080 at de gir deg riktig inngang. 489 00:22:37,080 --> 00:22:40,120 Så du ønsker å kreve at de gir deg en rekke 490 00:22:40,120 --> 00:22:46,630 som ikke er negativ, men også mindre enn 24. 491 00:22:46,630 --> 00:22:49,510 Så vi har å gjøre med null til 23, inkluderende. 492 00:22:49,510 --> 00:22:50,070 OK. 493 00:22:50,070 --> 00:22:52,830 Så vi ønsker å kontinuerlig kreve - 494 00:22:52,830 --> 00:22:55,720 hvis de ikke har gitt oss et gyldig heltall, de ønsker å 495 00:22:55,720 --> 00:22:57,350 kontinuerlig kreve nei. 496 00:22:57,350 --> 00:22:59,770 Gi meg en gyldig inngang. 497 00:22:59,770 --> 00:23:02,270 Gi meg en gyldig høyde. 498 00:23:02,270 --> 00:23:06,970 Så husker tilbake i Scratch, hadde vi gjenta til blokk eller 499 00:23:06,970 --> 00:23:08,950 Forever Hvis blokken. 500 00:23:08,950 --> 00:23:12,345 De er løkker som er svært lik den mens loop og 501 00:23:12,345 --> 00:23:14,960 den gjøre mens loop, som vi vil komme inn bare i et sekund. 502 00:23:14,960 --> 00:23:19,790 Så mens loop har egentlig en tilstand som du sjekker 503 00:23:19,790 --> 00:23:23,240 det er en boolsk verdi som du putter inni der, som 504 00:23:23,240 --> 00:23:25,740 blokker i Scratch med vinkler. 505 00:23:25,740 --> 00:23:29,550 Det er hva som foregår inne i parentes i mens loop. 506 00:23:29,550 --> 00:23:31,830 Så må du ha en slags tilstand der. 507 00:23:31,830 --> 00:23:36,540 Og som vi nettopp diskutert tidligere, at tilstanden vil 508 00:23:36,540 --> 00:23:40,250 har å gjøre med grensene for heltall som ble lagt inn. 509 00:23:40,250 --> 00:23:44,040 Så tilstanden ville ha noe å gjøre med om 510 00:23:44,040 --> 00:23:48,600 heltallet er innenfor de aktuelle grensene. 511 00:23:48,600 --> 00:23:49,410 >> Så det er en stund loop. 512 00:23:49,410 --> 00:23:52,580 For eksempel kan du be om heltall og deretter 513 00:23:52,580 --> 00:23:56,070 kontinuerlig sjekke mens denne inngangen er ikke gyldig. 514 00:23:56,070 --> 00:23:59,810 For eksempel holder på re-spørre, holder på å spørre 515 00:23:59,810 --> 00:24:01,600 brukeren for et heltall. 516 00:24:01,600 --> 00:24:03,780 Så det kan være en måte. 517 00:24:03,780 --> 00:24:06,240 En annen måte kan være en gjør mens loop, noe som er veldig 518 00:24:06,240 --> 00:24:10,130 ligner på en stund loop bortsett fra hva en gjør når gjør er - 519 00:24:10,130 --> 00:24:12,600 du kan slags se etter syntaksen - 520 00:24:12,600 --> 00:24:18,540 er at den har den do og deretter selve sløyfetekst først. 521 00:24:18,540 --> 00:24:20,280 Da det har mens forholdene. 522 00:24:20,280 --> 00:24:22,060 Så hva gjør mens looper - 523 00:24:22,060 --> 00:24:25,470 hva de er nyttige for er at de faktisk utføre 524 00:24:25,470 --> 00:24:29,130 kode minst én gang, og deretter sjekke om tilstanden er 525 00:24:29,130 --> 00:24:30,030 oppfylt eller ikke. 526 00:24:30,030 --> 00:24:32,510 Så hvis du skulle gjøre en gjør mens loop, deretter inni 527 00:24:32,510 --> 00:24:35,210 uttalelse som du kan be om et heltall fordi du på 528 00:24:35,210 --> 00:24:37,180 minst må spørre brukeren gang. 529 00:24:37,180 --> 00:24:40,850 Og så etter at du be dem, så kan du si greit, 530 00:24:40,850 --> 00:24:43,110 godt når jeg har gjort dette, er det gyldig? 531 00:24:43,110 --> 00:24:44,810 Hvis det er, så kan du bare fortsette å gå. 532 00:24:44,810 --> 00:24:47,310 Men hvis det ikke er det, så det vil bare fungere som en vanlig mens 533 00:24:47,310 --> 00:24:49,240 loop og deretter holde på å spørre. 534 00:24:53,590 --> 00:24:54,670 >> Okay. 535 00:24:54,670 --> 00:24:57,120 Så vi er tilbake til Mario. 536 00:24:57,120 --> 00:25:01,740 Så vi vet hvordan å be om riktig brukerens input som er 537 00:25:01,740 --> 00:25:03,160 innenfor de rette rammene. 538 00:25:03,160 --> 00:25:07,100 Så nå har vi faktisk trenger å trekke denne halv pyramide. 539 00:25:07,100 --> 00:25:08,730 Det ser ut som enkle tekst. 540 00:25:08,730 --> 00:25:10,360 Så la oss egentlig åpen - 541 00:25:14,280 --> 00:25:17,190 la oss bare åpne et vindu og si greit, vel hva hvis jeg var 542 00:25:17,190 --> 00:25:24,960 faktisk kommer til å gjøre det manuelt, skriver en selv? 543 00:25:24,960 --> 00:25:25,780 Okay. 544 00:25:25,780 --> 00:25:26,910 Så la oss se. 545 00:25:26,910 --> 00:25:30,070 La oss si, for eksempel, ønsker vi å lage en pyramide som er 546 00:25:30,070 --> 00:25:32,090 justert langs venstre side, så ville bare gjøre - 547 00:25:34,710 --> 00:25:37,750 i Mario, har den øverste nivå to blokker i stedet for én. 548 00:25:37,750 --> 00:25:39,080 Så vi starter med to. 549 00:25:39,080 --> 00:25:40,700 Vi klikker på Enter. 550 00:25:40,700 --> 00:25:45,670 Vi gjør tre, og deretter fire, Enter, fem. 551 00:25:45,670 --> 00:25:45,980 Okay. 552 00:25:45,980 --> 00:25:46,790 Så det er ganske enkelt. 553 00:25:46,790 --> 00:25:50,210 Bortsett fra i dette oppgavesettet, vi vil ha det faktisk å justere med 554 00:25:50,210 --> 00:25:52,250 høyre side av skjermen vår. 555 00:25:52,250 --> 00:25:52,630 OK. 556 00:25:52,630 --> 00:25:58,870 Så, kan hvordan en av dere faktisk skriver dette slik at 557 00:25:58,870 --> 00:26:01,810 det er justert langs høyre? 558 00:26:01,810 --> 00:26:08,550 I stedet for å sette hasj først, hvordan kan du slags 559 00:26:08,550 --> 00:26:10,040 flytte den sammen? 560 00:26:10,040 --> 00:26:11,360 SPEAKER 3: Skriv en linje? 561 00:26:11,360 --> 00:26:11,800 ZAMYLA CHAN: Hmm? 562 00:26:11,800 --> 00:26:13,030 SPEAKER 3: Skriv en linje? 563 00:26:13,030 --> 00:26:13,110 ZAMYLA CHAN: Yeah. 564 00:26:13,110 --> 00:26:13,390 Ja. 565 00:26:13,390 --> 00:26:15,080 Du kan skrive ut en understrekning eller noe sånt 566 00:26:15,080 --> 00:26:19,370 det, men vi kan bare si bruke en plass. 567 00:26:19,370 --> 00:26:21,500 La oss sette i som tre plasser her. 568 00:26:21,500 --> 00:26:24,760 Så neste linje, vel, vi ville ha til å sette to mellomrom. 569 00:26:24,760 --> 00:26:26,500 Den neste linjen, vi bare sette en plass. 570 00:26:26,500 --> 00:26:30,340 Og så for vår siste linje, ville vi ikke sette inn mellomrom. 571 00:26:30,340 --> 00:26:32,210 Og det har vi vår pyramide. 572 00:26:32,210 --> 00:26:33,170 >> Så det er slags - 573 00:26:33,170 --> 00:26:37,290 husk at slik logikk. 574 00:26:37,290 --> 00:26:39,340 Og prøve og finne ut noen form for mønster som vi kan 575 00:26:39,340 --> 00:26:43,690 så oversette til C og involvere i en slags loop. 576 00:26:43,690 --> 00:26:43,930 OK. 577 00:26:43,930 --> 00:26:48,130 Så si vi har en høyde åtte, så vår første rad vil ha 578 00:26:48,130 --> 00:26:48,980 to hashes. 579 00:26:48,980 --> 00:26:53,030 Men for å få disse hashes, ville du må skrive noen 580 00:26:53,030 --> 00:26:54,000 mellomrom på forhånd. 581 00:26:54,000 --> 00:26:55,840 Rett? 582 00:26:55,840 --> 00:26:57,340 Det jeg gjorde er jeg bare gikk gjennom. 583 00:26:57,340 --> 00:27:00,150 Jeg trakk den ut selv, en pyramide i min tekst editor, en 584 00:27:00,150 --> 00:27:03,800 pyramide med en høyde på åtte og deretter beregnet hvor mange 585 00:27:03,800 --> 00:27:05,180 mellomrom jeg trengte å gjøre. 586 00:27:05,180 --> 00:27:07,350 Så jeg sa OK, vel den første raden er 587 00:27:07,350 --> 00:27:08,260 kommer til å ha to hashes. 588 00:27:08,260 --> 00:27:11,100 Men før det, må jeg legge inn syv plasser. 589 00:27:11,100 --> 00:27:13,420 Den neste har seks plasser og deretter 590 00:27:13,420 --> 00:27:15,610 tre hashes, et cetera. 591 00:27:15,610 --> 00:27:20,520 >> Så da la oss prøve og bringe dette til et annet lag av 592 00:27:20,520 --> 00:27:21,330 abstraksjon. 593 00:27:21,330 --> 00:27:26,680 Hva om vi hadde for n'te rad, hvor mange hasher og hvordan 594 00:27:26,680 --> 00:27:27,960 mange områder vil vi trenger? 595 00:27:27,960 --> 00:27:30,750 Ser noen mønsteret? 596 00:27:35,200 --> 00:27:37,560 Så den første raden har to hashes. 597 00:27:37,560 --> 00:27:39,720 Den andre en har tre. 598 00:27:39,720 --> 00:27:42,120 Den tredje har fire. 599 00:27:42,120 --> 00:27:45,398 Så n'te rad ville ha - 600 00:27:45,398 --> 00:27:46,800 SPEAKER 4: N pluss 1? 601 00:27:46,800 --> 00:27:47,170 ZAMYLA CHAN: Yeah. 602 00:27:47,170 --> 00:27:47,780 N pluss en. 603 00:27:47,780 --> 00:27:49,030 Akkurat. 604 00:27:52,810 --> 00:27:56,470 Så da ser vi at antall hashes kommer til å være - 605 00:27:56,470 --> 00:27:59,510 hvis vi teller den første raden å være ett, deretter nummeret 606 00:27:59,510 --> 00:28:03,850 av hashes er bare kommer til å være en mer enn det. 607 00:28:03,850 --> 00:28:04,150 Okay. 608 00:28:04,150 --> 00:28:06,350 Så hva om antall plasser? 609 00:28:06,350 --> 00:28:10,120 Så la oss prøve og uttrykke dette i form av høyden. 610 00:28:10,120 --> 00:28:12,570 Hvis høyden er åtte, og første 611 00:28:12,570 --> 00:28:15,260 rad har sju plasser. 612 00:28:15,260 --> 00:28:18,215 Så den slags tilsvarer 8 minus 1.. 613 00:28:18,215 --> 00:28:19,030 Rett? 614 00:28:19,030 --> 00:28:22,420 Så da den andre raden skal ha seks plasser, 615 00:28:22,420 --> 00:28:25,340 som er 8 minus 2. 616 00:28:28,420 --> 00:28:31,450 Så da kommer jeg til å forlate det til deg å slags figur ut 617 00:28:31,450 --> 00:28:33,610 mønsteret for det. 618 00:28:33,610 --> 00:28:34,010 >> Okay. 619 00:28:34,010 --> 00:28:37,450 Men i programmering, noen ganger vi faktisk indeksen på null. 620 00:28:37,450 --> 00:28:39,680 Så vi starter på null i stedet for én. 621 00:28:39,680 --> 00:28:46,250 Så i stedet for den første raden blir kalt den første raden, 622 00:28:46,250 --> 00:28:48,930 vi kommer til å kalle det 0-te rad. 623 00:28:48,930 --> 00:28:51,360 Så avhengig av måten du ønsker å implementere det, være 624 00:28:51,360 --> 00:28:55,120 svært forsiktig om du starter på null, enten du starter på 625 00:28:55,120 --> 00:28:58,400 en, er mønsteret ditt kommer til å bli motvirket av en. 626 00:29:02,270 --> 00:29:02,880 Okay. 627 00:29:02,880 --> 00:29:05,460 Så nå som vi slags funnet ut programmet, vi 628 00:29:05,460 --> 00:29:06,310 har å si i orden. 629 00:29:06,310 --> 00:29:11,540 Så for alle slags nivå av trappen, jeg kommer til å skrive ut 630 00:29:11,540 --> 00:29:14,390 slik og slik antall mellomrom og deretter slik og 631 00:29:14,390 --> 00:29:16,550 det antall hashes. 632 00:29:16,550 --> 00:29:19,550 Det avhenger av mønsteret som vi har etablert før. 633 00:29:19,550 --> 00:29:19,810 Okay. 634 00:29:19,810 --> 00:29:23,600 Så en måte å iterere gjennom og slag for å gå 635 00:29:23,600 --> 00:29:27,670 gjennom et visst antall ting er en for loop, type som 636 00:29:27,670 --> 00:29:31,040 gjenta 10 blokker eller lignende gjenta og du gikk inn i en 637 00:29:31,040 --> 00:29:33,810 nummer i for Scratch. 638 00:29:33,810 --> 00:29:38,050 Så egentlig, for hvert nivå av trapper, vil vi ønske å 639 00:29:38,050 --> 00:29:39,650 skrive ut mellomrom først. 640 00:29:39,650 --> 00:29:43,020 Deretter skrive ut antall hashes. 641 00:29:43,020 --> 00:29:46,480 Og så får vi ønsker å legge inn en ny linje og deretter gjenta den 642 00:29:46,480 --> 00:29:49,750 igjen for den neste blokken. 643 00:29:49,750 --> 00:29:50,720 Okay. 644 00:29:50,720 --> 00:29:55,080 >> Så la oss se på etter looper for et sekund å slags se en måte 645 00:29:55,080 --> 00:29:59,460 at vi kan gå gjennom et sett nummer, gå gjennom antall 646 00:29:59,460 --> 00:30:02,250 trinn i denne halv pyramide. 647 00:30:02,250 --> 00:30:04,220 Så for løkker er sammensatt av tre deler. 648 00:30:04,220 --> 00:30:08,150 Først har du en initialisering. 649 00:30:08,150 --> 00:30:13,220 Så det setter egentlig en variabel. 650 00:30:13,220 --> 00:30:15,130 Det kommer til å bli satt til denne verdien hver gang 651 00:30:15,130 --> 00:30:17,110 som for løkke starter. 652 00:30:17,110 --> 00:30:18,540 Så du kommer til å ha en stand. 653 00:30:18,540 --> 00:30:21,640 Din for loop vil bare utføre så lenge 654 00:30:21,640 --> 00:30:25,630 betingelse evalueres til sann. 655 00:30:25,630 --> 00:30:28,000 Og så har du en oppdatering tilstand. 656 00:30:28,000 --> 00:30:32,450 Så det har å gjøre med den variabelen som du initialisert. 657 00:30:32,450 --> 00:30:38,120 Så noen måte i utgangspunktet sikre at vi kan bryte ut 658 00:30:38,120 --> 00:30:40,070 av loopen, at vi ikke holde på å gjennomføre 659 00:30:40,070 --> 00:30:41,310 det for evig og alltid. 660 00:30:41,310 --> 00:30:43,760 Fordi i motsetning til Scratch, vi faktisk ikke har bare en 661 00:30:43,760 --> 00:30:45,680 vanlig Alltid loop. 662 00:30:45,680 --> 00:30:48,100 I C, må programmet fullføre slutt. 663 00:30:48,100 --> 00:30:52,290 Så vi må sørge for at en eller annen måte vi stoppe det har. 664 00:30:52,290 --> 00:30:52,830 >> Okay. 665 00:30:52,830 --> 00:30:56,260 Så et eksempel på en for løkke som du kanskje ønsker å bruke for 666 00:30:56,260 --> 00:30:57,530 Mario er dette. 667 00:30:57,530 --> 00:31:02,290 Så du har et heltall jeg at du starter på 0. 668 00:31:02,290 --> 00:31:08,050 Så lenge som det er mindre enn høyden, utføre du kroppen 669 00:31:08,050 --> 00:31:11,140 av løkke inne her. 670 00:31:11,140 --> 00:31:13,820 Etter at kroppen av loopen har utført, så ville du 671 00:31:13,820 --> 00:31:15,290 øker jeg med 1. 672 00:31:15,290 --> 00:31:18,510 Da programmet ville sjekke igjen - OK, vel, er jeg mindre enn 673 00:31:18,510 --> 00:31:18,885 høyden? 674 00:31:18,885 --> 00:31:21,865 Hvis det er, så ville du fortsette. 675 00:31:24,630 --> 00:31:27,790 Så her er et eksempel på null indeksering, der vi starter på 676 00:31:27,790 --> 00:31:29,100 null og deretter vi - 677 00:31:29,100 --> 00:31:30,970 merke til at vår tilstand er mindre enn høyden. 678 00:31:30,970 --> 00:31:34,510 Så si vår høyde er fire, for eksempel, i 679 00:31:34,510 --> 00:31:35,470 vil starte på 0. 680 00:31:35,470 --> 00:31:36,180 Det blir en. 681 00:31:36,180 --> 00:31:36,730 Det vil være 2. 682 00:31:36,730 --> 00:31:37,940 Det vil være 3. 683 00:31:37,940 --> 00:31:42,310 Og deretter en gang den oppdaterer når for løkke oppdateringer, vil jeg 684 00:31:42,310 --> 00:31:43,650 da være satt til 4. 685 00:31:43,650 --> 00:31:47,080 Men 4 er ikke mindre enn 4, og så da vi skulle 686 00:31:47,080 --> 00:31:50,340 videre til resten av loop. 687 00:31:50,340 --> 00:31:50,870 >> Okay. 688 00:31:50,870 --> 00:31:51,680 Slik at det er som starter på null. 689 00:31:51,680 --> 00:31:53,470 Men vi kan også starte på en, for eksempel. 690 00:31:53,470 --> 00:31:56,960 Men siden vi starter på en, vi slags nødt til å gå en mer 691 00:31:56,960 --> 00:31:57,920 tid på slutten. 692 00:31:57,920 --> 00:32:02,800 Så da det er derfor vi legger mindre enn eller lik. 693 00:32:02,800 --> 00:32:05,780 Så en av de store tingene som jeg liker om datamaskinen 694 00:32:05,780 --> 00:32:06,930 programmering er at det er bare så 695 00:32:06,930 --> 00:32:08,370 mange måter å gjøre ting. 696 00:32:08,370 --> 00:32:11,300 Så du kan velge om du starter på null, enten du 697 00:32:11,300 --> 00:32:12,330 starte på en. 698 00:32:12,330 --> 00:32:15,400 Også, hvis du ville, kunne du bare bruke en 699 00:32:15,400 --> 00:32:16,600 mens loop, for eksempel. 700 00:32:16,600 --> 00:32:18,890 Så du kan - 701 00:32:18,890 --> 00:32:20,270 la oss egentlig åpen hallo.c. 702 00:32:26,200 --> 00:32:28,600 Så vi har en for loop her. 703 00:32:28,600 --> 00:32:31,330 Den starter på i = 0, jeg <5. 704 00:32:31,330 --> 00:32:33,550 Jeg har en kommentar her fortelle oss hva det gjør. 705 00:32:33,550 --> 00:32:36,300 Det skriver hei fem ganger ved hjelp av en for-løkke. 706 00:32:36,300 --> 00:32:41,690 Men vi kan også gjøre det ved hjelp av en stund loop også. 707 00:32:41,690 --> 00:32:48,290 >> Så la oss se på hvordan vi kan gjøre det. 708 00:32:48,290 --> 00:32:51,010 Så hvis vi skal etterligne en for løkke, så vi ønsker også å 709 00:32:51,010 --> 00:32:54,870 etterligne initialisering, tilstanden, og oppdateringen. 710 00:32:54,870 --> 00:33:01,430 Slik at tilstanden bør være ganske enkelt fordi i 711 00:33:01,430 --> 00:33:04,350 mens syntaks, når du ser på det, sier det mens (tilstand). 712 00:33:04,350 --> 00:33:06,830 Så la oss bare inn tilstanden der. 713 00:33:06,830 --> 00:33:09,700 I <5. 714 00:33:09,700 --> 00:33:10,590 Okay. 715 00:33:10,590 --> 00:33:18,900 Så vi vet at vi ønsker å skrive ut farvel. 716 00:33:18,900 --> 00:33:21,350 Vi vet at det er kroppen av loop. 717 00:33:21,350 --> 00:33:23,600 Men vi mangler initialisering 718 00:33:23,600 --> 00:33:24,490 og oppdateringen, ikke sant? 719 00:33:24,490 --> 00:33:25,790 Fordi vi ikke kan ha en evig loop. 720 00:33:25,790 --> 00:33:27,660 Det har å si. 721 00:33:27,660 --> 00:33:35,300 Så la oss legge til noen form for initialisering her ved hjelp av 722 00:33:35,300 --> 00:33:38,790 samme som vi brukte i vår for løkke, int i = 0. 723 00:33:38,790 --> 00:33:39,110 Okay. 724 00:33:39,110 --> 00:33:40,630 Så vi starter med en int i. 725 00:33:40,630 --> 00:33:43,640 Vi gjentar dette mens loop så lenge jeg er mindre enn 5. 726 00:33:43,640 --> 00:33:47,220 Så da vi mangler en ting, som er oppdateringen. 727 00:33:47,220 --> 00:33:51,470 Så hva oppdateringen ville vi trenger å bruke hvis vi var i hovedsak 728 00:33:51,470 --> 00:33:52,880 gjenskape for loop over? 729 00:33:56,000 --> 00:33:59,880 Vi har initialisering i er lik 0. 730 00:33:59,880 --> 00:34:03,610 Vi har tilstanden i er mindre enn 5. 731 00:34:03,610 --> 00:34:06,300 Og så er her en oppdatering, ikke sant? 732 00:34:06,300 --> 00:34:07,365 Så vi ønsker å kopiere det. 733 00:34:07,365 --> 00:34:10,340 Vi ønsker å si greit, i + +. 734 00:34:10,340 --> 00:34:13,820 Det er det samme som å si i = i + 1. 735 00:34:13,820 --> 00:34:17,090 Men siden det er brukt så ofte, forkortelse for det er bare 736 00:34:17,090 --> 00:34:18,340 sier jeg + +. 737 00:34:20,800 --> 00:34:22,050 >> Flott. 738 00:34:25,230 --> 00:34:26,400 Okay. 739 00:34:26,400 --> 00:34:29,210 Her jeg faktisk ikke gå ut av min epler program. 740 00:34:29,210 --> 00:34:33,070 Så jeg bare kommer til å klikke Ctrl-C og som umiddelbart 741 00:34:33,070 --> 00:34:34,989 støvler meg ut av mitt program og bringer 742 00:34:34,989 --> 00:34:35,920 meg tilbake til terminalen. 743 00:34:35,920 --> 00:34:38,320 Slik at for eksempel hvis du får en feil der du 744 00:34:38,320 --> 00:34:40,750 glemte å oppdatere mens loop slik at det ville 745 00:34:40,750 --> 00:34:43,150 avslutte, og du skriver en uendelig løkke, så kan du 746 00:34:43,150 --> 00:34:46,400 Bruk Ctrl-C for å bryte ut av det. 747 00:34:46,400 --> 00:34:46,639 OK. 748 00:34:46,639 --> 00:34:47,960 Så vi er i den rette katalogen. 749 00:34:47,960 --> 00:34:52,010 Så la oss gjøre hallo. 750 00:34:52,010 --> 00:35:01,710 Og så hvis vi kjører Hallo, ser vi at farvel sløyfe gjør 751 00:35:01,710 --> 00:35:03,350 akkurat det samme som vår for loop gjør. 752 00:35:03,350 --> 00:35:05,060 Så det er bare et hint. 753 00:35:05,060 --> 00:35:06,980 Enten du er mer komfortabel med for looper eller 754 00:35:06,980 --> 00:35:09,850 med mens loops, kan de være utskiftbare. 755 00:35:09,850 --> 00:35:15,130 Så hvilken du vil bruke til å veksle gjennom - 756 00:35:15,130 --> 00:35:16,020 i dette tilfellet - 757 00:35:16,020 --> 00:35:19,410 høyden av Mario pyramiden. 758 00:35:19,410 --> 00:35:23,020 Og så igjen, dette er bare en påminnelse, hvis du starter på null 759 00:35:23,020 --> 00:35:25,430 for variabelen, så vil du ønsker å ha en annen 760 00:35:25,430 --> 00:35:27,360 tilstand enn hvis du startet på en. 761 00:35:27,360 --> 00:35:29,620 Så denne tabellen bare slags viser deg en påminnelse. 762 00:35:29,620 --> 00:35:33,660 Hvis du ønsker å gjenta 10 ganger, for eksempel, så du 763 00:35:33,660 --> 00:35:36,030 kan enten starte variabelen på null. 764 00:35:36,030 --> 00:35:39,350 Og tilstanden kan være mindre enn 10 år. 765 00:35:39,350 --> 00:35:43,020 Og så den slags viser deg matrisen av det. 766 00:35:43,020 --> 00:35:43,360 >> Okay. 767 00:35:43,360 --> 00:35:45,790 Så vi har gått gjennom Mario. 768 00:35:45,790 --> 00:35:48,820 Vi har sagt, Ok, vel vi må sjekke for riktig inngang, 769 00:35:48,820 --> 00:35:50,800 null og 23 inkluderende. 770 00:35:50,800 --> 00:35:53,370 Vi kommer til å finne noen form for mønster, en slags måte 771 00:35:53,370 --> 00:35:57,920 uttrykke den nte raden eller den ith raden. 772 00:35:57,920 --> 00:36:01,560 Og vi kommer til å bestemme seg, Okay, at vi kommer til å skrive ut denne 773 00:36:01,560 --> 00:36:04,870 mange områder, så mange hasher, ny linje. 774 00:36:04,870 --> 00:36:05,050 OK. 775 00:36:05,050 --> 00:36:05,720 Så vi har det. 776 00:36:05,720 --> 00:36:08,570 Så nå kan vi gå videre til Greedy. 777 00:36:08,570 --> 00:36:14,500 Greedy er et program der en bruker gir deg en mengde 778 00:36:14,500 --> 00:36:17,460 kontanter som egentlig du som kasserer trenger å returnere. 779 00:36:17,460 --> 00:36:21,530 Men du vil bruke så lite mynter som mulig. 780 00:36:21,530 --> 00:36:25,070 Og så det er der en Greedy algoritmen kommer inn, der 781 00:36:25,070 --> 00:36:30,440 vi ønsker å bruke minst mulig av mynter mulig å 782 00:36:30,440 --> 00:36:31,900 gjør at mengden av endring. 783 00:36:34,500 --> 00:36:34,990 >> Okay. 784 00:36:34,990 --> 00:36:40,480 Så et eksempel på dette i løsningen kan se 785 00:36:40,480 --> 00:36:42,540 noe sånt som dette. 786 00:36:42,540 --> 00:36:45,410 Du kjører. / Grådig. 787 00:36:45,410 --> 00:36:47,920 Du blir bedt om å si greit, godt hvor mye endring skylder? 788 00:36:47,920 --> 00:36:50,780 At verdien kommer til å være en verdi i dollar. 789 00:36:50,780 --> 00:36:52,440 Så det kommer til å bli en flåte. 790 00:36:52,440 --> 00:36:55,630 Programmet ditt vil da beregne minimum 791 00:36:55,630 --> 00:37:00,380 mynter som kreves for å gjøre, i dette tilfellet, $ 0,32. 792 00:37:00,380 --> 00:37:04,550 Og så minimum antall er fire. 793 00:37:04,550 --> 00:37:07,480 Så før vi finne ut hva de skal gjøre, la oss slags tur 794 00:37:07,480 --> 00:37:10,770 gjennom prosessen som du kan gå om. 795 00:37:10,770 --> 00:37:16,480 Så hvis inngangen er 32, så egentlig jeg kommer til å bruke 796 00:37:16,480 --> 00:37:19,100 minst mynter hvis jeg bruker så mange 797 00:37:19,100 --> 00:37:20,460 store mynter som mulig. 798 00:37:20,460 --> 00:37:20,870 Rett? 799 00:37:20,870 --> 00:37:25,420 Så det er mye enklere å bruke en fjerdedel så 800 00:37:25,420 --> 00:37:27,070 motsetning til fem nickels. 801 00:37:27,070 --> 00:37:31,740 Så la oss si, må du returnere $ 0,32. 802 00:37:31,740 --> 00:37:36,660 Vel, kan jeg bruke en fjerdedel i dette? 803 00:37:36,660 --> 00:37:37,480 Ja, det kan du. 804 00:37:37,480 --> 00:37:41,970 Og så ville du bli redusert til $ 0,07. 805 00:37:41,970 --> 00:37:46,070 La oss se om jeg kan bruke et kvartal til å betale deg tilbake. 806 00:37:46,070 --> 00:37:46,870 Vel, nei. 807 00:37:46,870 --> 00:37:48,200 Jeg kan ikke få en krone i det. 808 00:37:48,200 --> 00:37:52,110 Så jeg kommer til å flytte til den neste største mynten. 809 00:37:52,110 --> 00:37:53,250 Kan jeg bruke en krone? 810 00:37:53,250 --> 00:37:55,800 $ 0.07, nei du kan ikke bruke en krone å betale $ 0,07. 811 00:37:55,800 --> 00:37:56,840 Så du sier nei. 812 00:37:56,840 --> 00:38:00,490 Flytt til den neste, som er en nikkel. 813 00:38:00,490 --> 00:38:01,440 Kan du bruke en nikkel? 814 00:38:01,440 --> 00:38:02,930 Ja. 815 00:38:02,930 --> 00:38:06,440 Syv er større enn $ 0,05, slik at vi kan bruke en nikkel. 816 00:38:06,440 --> 00:38:08,640 Og så har vi to cent til overs. 817 00:38:08,640 --> 00:38:11,110 Kan vi bruke en krone? 818 00:38:11,110 --> 00:38:12,180 Ja vi kan. 819 00:38:12,180 --> 00:38:13,070 Kan vi bruke en annen krone? 820 00:38:13,070 --> 00:38:13,380 Ja. 821 00:38:13,380 --> 00:38:14,710 Kan vi bruke en annen krone? 822 00:38:14,710 --> 00:38:17,070 Nei fordi nå har vi lykkes 823 00:38:17,070 --> 00:38:19,400 betalt brukeren tilbake. 824 00:38:19,400 --> 00:38:23,620 Og slik at totalt fire mynter som brukes. 825 00:38:23,620 --> 00:38:26,370 >> Så tenker at prosessen vi hver 826 00:38:26,370 --> 00:38:29,080 tid bestemmer greit, 827 00:38:29,080 --> 00:38:31,050 hva er den største mynten som vi kan bruke? 828 00:38:31,050 --> 00:38:37,240 Når vi bruker det, vi slags holde et mentalt notat av hvor mye 829 00:38:37,240 --> 00:38:39,650 mer penger vi trenger å returnere brukeren samt hvor mange 830 00:38:39,650 --> 00:38:41,310 myntene vi har brukt. 831 00:38:44,640 --> 00:38:45,200 Okay. 832 00:38:45,200 --> 00:38:48,930 Så men igjen, det første skrittet - er å be - akkurat som Mario 833 00:38:48,930 --> 00:38:51,120 brukeren om et monetært beløp. 834 00:38:51,120 --> 00:38:53,920 Og så dette beløpet kommer til å være - 835 00:38:53,920 --> 00:38:56,040 det kommer til å ha en desimal verdi fordi vi kommer til å 836 00:38:56,040 --> 00:38:57,310 spør dem for dollar. 837 00:38:57,310 --> 00:39:00,550 Slik at datatypen ikke kommer til å være et heltall. 838 00:39:00,550 --> 00:39:01,860 Men det kommer til å bli en - 839 00:39:04,960 --> 00:39:07,700 yeah, en flåte. 840 00:39:07,700 --> 00:39:10,780 Men akkurat som epler, kan flyter være positiv eller negativ. 841 00:39:10,780 --> 00:39:13,390 Så når du sjekker for verdier, du kommer til å ønske 842 00:39:13,390 --> 00:39:15,380 å sikre at float - 843 00:39:15,380 --> 00:39:19,710 brukerens input - er ikke-negativ. 844 00:39:19,710 --> 00:39:20,960 Okay. 845 00:39:22,630 --> 00:39:26,720 Vi kunne håndtere flyter i vårt hele programmet, representerer 846 00:39:26,720 --> 00:39:31,610 kvartalene med 0,25, dimes med 0,1, et cetera. 847 00:39:31,610 --> 00:39:36,280 Men jeg synes det er mye lettere å håndtere i løpet av bare rene cent. 848 00:39:36,280 --> 00:39:36,910 Også - 849 00:39:36,910 --> 00:39:39,370 og vi vil snakke om dette litt senere - 850 00:39:39,370 --> 00:39:43,610 i C, flytende punkter har noe som kalles unøyaktighet. 851 00:39:43,610 --> 00:39:48,660 Så når du skriver inn i 0,12, for eksempel, datamaskinen 852 00:39:48,660 --> 00:39:53,010 faktisk butikker som like 0.1111119 eller 853 00:39:53,010 --> 00:39:54,350 noe sånt. 854 00:39:54,350 --> 00:39:56,900 >> Så det er mye enklere å konvertere til cents. 855 00:39:56,900 --> 00:40:02,190 Så hvordan konverterer vi gjør en dollar verdien til cents? 856 00:40:02,190 --> 00:40:03,540 SPEAKER 5: Times det med 100? 857 00:40:03,540 --> 00:40:03,920 ZAMYLA CHAN: Yeah. 858 00:40:03,920 --> 00:40:04,110 Ja. 859 00:40:04,110 --> 00:40:07,110 Så vi ville ganger det med 100. 860 00:40:07,110 --> 00:40:10,820 Men en lur ting om flytende punkter er at det 861 00:40:10,820 --> 00:40:11,790 er noen unøyaktigheter. 862 00:40:11,790 --> 00:40:16,090 Så la oss bare se på et eksempel på det. 863 00:40:18,760 --> 00:40:21,360 Så jeg kommer til å åpne imprecision.c. 864 00:40:21,360 --> 00:40:23,690 Okay. 865 00:40:23,690 --> 00:40:24,860 Dette er et svært enkelt program. 866 00:40:24,860 --> 00:40:26,970 Den ber om en dupp, og den skriver den tilbake. 867 00:40:35,950 --> 00:40:39,600 En hyggelig tips i terminal er at du kan bare skrive tydelig, og 868 00:40:39,600 --> 00:40:41,180 da har du en klar skjerm. 869 00:40:41,180 --> 00:40:45,270 Og så du ikke trenger å se på noen tidligere utgang eller 870 00:40:45,270 --> 00:40:47,490 feil eller feilrapporter, noe sånt. 871 00:40:47,490 --> 00:40:48,120 Okay. 872 00:40:48,120 --> 00:40:49,675 Så la oss gjøre unøyaktighet. 873 00:40:53,250 --> 00:40:56,250 La oss kjøre den. 874 00:40:56,250 --> 00:40:57,890 Så jeg ikke har det - 875 00:40:57,890 --> 00:41:03,830 i min kode, det gjorde jeg ikke skrive noe spørsmål eller noe sånt. 876 00:41:03,830 --> 00:41:05,010 Så det har bare en blinkende markør. 877 00:41:05,010 --> 00:41:07,390 Så det er bare å venter på meg å legge inn en flåte. 878 00:41:07,390 --> 00:41:08,640 Så let's - 879 00:41:10,610 --> 00:41:11,280 en tilfeldig flåte. 880 00:41:11,280 --> 00:41:15,080 Og du ser at det er skrevet ut den tilbake, men har litt ekstra 881 00:41:15,080 --> 00:41:18,180 tall som vi definitivt ikke inkluderer. 882 00:41:18,180 --> 00:41:21,980 Så vi vil være sikker på at det ikke 883 00:41:21,980 --> 00:41:23,300 skje i vårt program. 884 00:41:23,300 --> 00:41:27,550 >> Så hva vi ønsker å gjøre er å sørge for at vi faktisk 885 00:41:27,550 --> 00:41:31,300 slags avrundet til riktig verdi. 886 00:41:31,300 --> 00:41:31,850 Rett? 887 00:41:31,850 --> 00:41:37,820 Og så heldigvis har vi en funksjon kalt runde inkludert 888 00:41:37,820 --> 00:41:38,550 i Appliance. 889 00:41:38,550 --> 00:41:41,390 Det er i matematikk biblioteket. 890 00:41:41,390 --> 00:41:44,710 Hvis du ønsker å vite hvordan du skal bruke rundt, så du faktisk bruker 891 00:41:44,710 --> 00:41:45,220 håndboken. 892 00:41:45,220 --> 00:41:48,160 Du kan klikke mann runde. 893 00:41:48,160 --> 00:41:51,190 Så her er det bringer opp - 894 00:41:51,190 --> 00:41:53,220 kan være litt vanskelig å tyde, men til slutt 895 00:41:53,220 --> 00:41:54,690 du får taket på det. 896 00:41:54,690 --> 00:42:00,060 Den slags viser deg hva funksjonen gjør og deretter noen 897 00:42:00,060 --> 00:42:01,790 mulige bruksområder for at. 898 00:42:01,790 --> 00:42:10,210 Så når du til slutt få en skikkelig, gyldig innspill fra 899 00:42:10,210 --> 00:42:14,490 bruker, så du ønsker å konvertere den til cents. 900 00:42:14,490 --> 00:42:18,530 Pass på at du runder verdien slik at du unngår dette 901 00:42:18,530 --> 00:42:21,780 flyttall unøyaktighet. 902 00:42:21,780 --> 00:42:22,340 >> Okay. 903 00:42:22,340 --> 00:42:26,190 Så vi har bedt brukeren om et monetært beløp. 904 00:42:26,190 --> 00:42:31,460 Nå hva vi ønsker å gjøre er å sjekke hovedsak, ikke sant? 905 00:42:31,460 --> 00:42:35,500 Ok, så kan jeg bruke den største mynten mulig? 906 00:42:35,500 --> 00:42:37,040 Hvis du kan, så du bruker den. 907 00:42:37,040 --> 00:42:40,250 Du holde oversikt over hvor mange mynter du har brukt så langt, og 908 00:42:40,250 --> 00:42:41,710 også den fallende beløp. 909 00:42:41,710 --> 00:42:42,240 Rett? 910 00:42:42,240 --> 00:42:44,880 Og så kommer du til å sjekke. 911 00:42:44,880 --> 00:42:47,940 Når du har slags utmattet kvartalene, vil du gå 912 00:42:47,940 --> 00:42:49,545 til neste mulige ting. 913 00:42:49,545 --> 00:42:59,380 >> Så hva slags struktur eller hva slags løkke kan vi 914 00:42:59,380 --> 00:43:03,850 vil bruke for å kontinuerlig sjekke om vi kan fortsatt bruke 915 00:43:03,850 --> 00:43:05,100 kvart, for eksempel? 916 00:43:07,380 --> 00:43:09,280 SPEAKER 6: Mens verdien er større enn? 917 00:43:09,280 --> 00:43:10,150 ZAMYLA CHAN: Ja, perfeksjonere. 918 00:43:10,150 --> 00:43:10,590 Akkurat. 919 00:43:10,590 --> 00:43:12,630 Så mens verdien er større enn. 920 00:43:12,630 --> 00:43:16,300 Så mens verdien at vi må gi tilbake er fortsatt 921 00:43:16,300 --> 00:43:19,410 større enn en fjerdedel, mens vi fortsatt kan bruke et kvartal, 922 00:43:19,410 --> 00:43:20,490 Bruk kvartalene. 923 00:43:20,490 --> 00:43:21,450 Holde styr på det. 924 00:43:21,450 --> 00:43:22,610 Og så holder på å gå. 925 00:43:22,610 --> 00:43:25,040 Perfekt. 926 00:43:25,040 --> 00:43:26,290 Okay. 927 00:43:28,190 --> 00:43:32,580 Oh, her har jeg bare tatt med bare noen tips om hvordan du skriver ut 928 00:43:32,580 --> 00:43:33,830 ut verdier. 929 00:43:36,330 --> 00:43:38,810 Så i ditt printf funksjonen, har vi vanligvis bare vært 930 00:43:38,810 --> 00:43:39,760 håndtere strenger. 931 00:43:39,760 --> 00:43:43,290 Men når du ønsker å skrive ut en int eller bare noen form for 932 00:43:43,290 --> 00:43:46,510 siffer, må du slags skrive en slags sted holderen. 933 00:43:46,510 --> 00:43:50,840 Slik at det er representert ved prosent,% d for heltall. 934 00:43:50,840 --> 00:43:53,780 Du skriver det, så etterpå vil du faktisk - 935 00:43:53,780 --> 00:43:54,900 etter komma - 936 00:43:54,900 --> 00:43:57,990 satt i hvilken verdi faktisk går der. 937 00:43:57,990 --> 00:43:58,510 Høyre. 938 00:43:58,510 --> 00:43:58,840 >> Okay. 939 00:43:58,840 --> 00:44:02,050 Så vi har bestemt at vi ønsker å sjekke om - 940 00:44:02,050 --> 00:44:04,950 En måte å gjøre dette på ville være å kontinuerlig sjekke om 941 00:44:04,950 --> 00:44:08,640 Vi kan fortsatt bruke kvartalene, og deretter bruke kvartalene, holde 942 00:44:08,640 --> 00:44:11,460 spore, og deretter gå videre til den neste største verdien. 943 00:44:11,460 --> 00:44:15,010 Nå en annen slags ryddig måte at du kunne gjøre dette er 944 00:44:15,010 --> 00:44:16,770 bruker operatøren modulo. 945 00:44:16,770 --> 00:44:22,710 Så vi allerede har pluss, minus, gange og dele 946 00:44:22,710 --> 00:44:23,560 tilgjengelig for oss. 947 00:44:23,560 --> 00:44:25,600 Men modulo operatør er slags ryddig. 948 00:44:25,600 --> 00:44:28,630 Hva den gjør er det returnerer faktisk du resten av 949 00:44:28,630 --> 00:44:31,750 dele to tall. 950 00:44:31,750 --> 00:44:34,680 Så hvis du husker i lang divisjon når du ville, sier 951 00:44:34,680 --> 00:44:40,100 gjør 74 delt på 3, vil du skrive det, bære over, 952 00:44:40,100 --> 00:44:43,260 subtrahere, og deretter ved utgangen nummeret på bunnen er 953 00:44:43,260 --> 00:44:44,050 resten. 954 00:44:44,050 --> 00:44:47,120 Vel, hva modulo gjør det faktisk bare gir deg det. 955 00:44:47,120 --> 00:44:51,290 Så 74 modulo 3 ville gi deg to. 956 00:44:51,290 --> 00:44:56,310 Tilsvarende gir 10 modulo 2 du 0 fordi det ikke er noen 957 00:44:56,310 --> 00:44:59,340 resten når du deler 10 med 2. 958 00:44:59,340 --> 00:45:03,940 6 modulo 5, vel 5 går inn i 6 en ganger og deretter 959 00:45:03,940 --> 00:45:05,900 det har en til overs. 960 00:45:05,900 --> 00:45:09,930 Så hvis du har 7 modulo 9, er vel 9 større enn 7. 961 00:45:09,930 --> 00:45:11,830 Så det kan ikke gå noen andre ganger. 962 00:45:11,830 --> 00:45:15,560 Så det er fornuftig at avkastningen er 7. 963 00:45:15,560 --> 00:45:21,590 Så hvis du tenker på modulo, hvordan det gir deg resten 964 00:45:21,590 --> 00:45:25,170 etter at du dele noe, kan du slags se hvordan du 965 00:45:25,170 --> 00:45:27,490 kan være i stand til å bruke den i Greedy, ikke sant? 966 00:45:30,340 --> 00:45:34,170 Så hvis du slags kombinere modulo kanskje med divisjonen 967 00:45:34,170 --> 00:45:36,410 operatør, noe sånt, så du kan ha en kul 968 00:45:36,410 --> 00:45:38,870 slags mathy måte å nærme seg problemet sett. 969 00:45:44,010 --> 00:45:46,090 >> Så nå som vi vet at det er et par forskjellige 970 00:45:46,090 --> 00:45:48,350 måter som vi kan gjøre dette - det er definitivt mye av 971 00:45:48,350 --> 00:45:54,160 forskjellige måter å selv skrive mens sløyfer. 972 00:45:54,160 --> 00:45:57,020 Så jeg har skrevet noen pseudokode her. 973 00:45:57,020 --> 00:46:01,760 Det kan ikke være identisk med den type skjelettet av din 974 00:46:01,760 --> 00:46:02,460 kode som du skriver. 975 00:46:02,460 --> 00:46:05,580 Men i hovedsak er prosessen og måten å tenke 976 00:46:05,580 --> 00:46:06,940 akkurat som vi diskuterte. 977 00:46:06,940 --> 00:46:10,310 Så først, er den første linjen sier for å få en viss 978 00:46:10,310 --> 00:46:12,490 i dollar. 979 00:46:12,490 --> 00:46:16,960 Og så implisitt det er konvertere den til cents. 980 00:46:16,960 --> 00:46:20,540 Så mens kvartalene kan brukes, ønsker vi å 981 00:46:20,540 --> 00:46:21,750 øke tellingen. 982 00:46:21,750 --> 00:46:24,360 Og så ønsker vi å redusere mengden, den verdien som 983 00:46:24,360 --> 00:46:25,300 Vi er tilbake igjen. 984 00:46:25,300 --> 00:46:28,170 Som du ser her, er det ikke helt C. Men jeg har også 985 00:46:28,170 --> 00:46:31,550 innrykket ting, la jeg mine betingelser innsiden av 986 00:46:31,550 --> 00:46:32,190 parentes. 987 00:46:32,190 --> 00:46:34,370 >> Så da den slags får meg i gang. 988 00:46:34,370 --> 00:46:36,620 Og senere på, kan jeg bare se opp syntaksen. 989 00:46:36,620 --> 00:46:40,230 Ofte den vanskeligste delen egentlig om et problem er å 990 00:46:40,230 --> 00:46:41,860 forstå hva du trenger å gjøre. 991 00:46:41,860 --> 00:46:44,610 Så når du skriver det ned, så er det mye lettere å deretter 992 00:46:44,610 --> 00:46:45,810 oversette til pseudokode. 993 00:46:45,810 --> 00:46:49,340 Og deretter fra pseudokode, kommer syntaks ganske lett. 994 00:46:49,340 --> 00:46:52,140 Så vi ser mens kvartalene, kan brukes, øke teller, 995 00:46:52,140 --> 00:46:53,220 redusere mengden. 996 00:46:53,220 --> 00:46:57,310 Mens Dimes kan brukes, så du gjennomføre det så videre og så 997 00:46:57,310 --> 00:47:00,670 videre, inntil du har brukt opp alle dine pennies. 998 00:47:00,670 --> 00:47:03,410 Du skriver ut antall mynter som brukes, som vil være den 999 00:47:03,410 --> 00:47:06,620 minimumsbeløpet å gjøre brukeren inputted verdi. 1000 00:47:06,620 --> 00:47:09,370 Og så har du en Greedy algoritme. 1001 00:47:09,370 --> 00:47:13,960 Og deretter en gang du er ferdig som, har du også ferdig pset 0. 1002 00:47:13,960 --> 00:47:16,155 >> Har noen spørsmål om noe? 1003 00:47:19,420 --> 00:47:19,780 OK. 1004 00:47:19,780 --> 00:47:22,900 Vel, jeg vil holde rundt for litt etter hvis du har 1005 00:47:22,900 --> 00:47:23,970 noen spørsmål. 1006 00:47:23,970 --> 00:47:24,940 Dette var walkthrough en. 1007 00:47:24,940 --> 00:47:26,190 Takk for at du kom.