1 00:00:08,280 --> 00:00:09,020 [Powered by Google Translate] ZAMYLA CHAN: Okay, alle sammen. 2 00:00:09,020 --> 00:00:11,130 Velkommen til Walkthrough 1. 3 00:00:11,130 --> 00:00:13,950 Denne Walkthrough vil være på Pset 1, som er C. Jeg håber, du 4 00:00:13,950 --> 00:00:16,540 alle havde det sjovt med dine Scratch-projekter. 5 00:00:16,540 --> 00:00:18,430 Så nu i denne walkthrough, er vi faktisk kommer til at være 6 00:00:18,430 --> 00:00:21,580 stand til at komme ind i C, komme til at skrive noget maskine kode. 7 00:00:21,580 --> 00:00:24,750 Så hvis du ikke var på Walkthrough 0, så disse 8 00:00:24,750 --> 00:00:26,330 walkthroughs virkelig - vi er klar vil gå igennem 9 00:00:26,330 --> 00:00:29,500 problem sæt, tale gennem nogle fælles tips og teknikker 10 00:00:29,500 --> 00:00:30,430 som du kan bruge. 11 00:00:30,430 --> 00:00:32,960 Vi vil bryde opgaven op i overskuelige bidder, således at 12 00:00:32,960 --> 00:00:35,500 du fyre kan komme i gang og forhåbentlig 13 00:00:35,500 --> 00:00:37,470 forstå, hvordan det skal gøres. 14 00:00:37,470 --> 00:00:38,050 >> Okay. 15 00:00:38,050 --> 00:00:42,280 Så Pset 1. 16 00:00:42,280 --> 00:00:46,200 Den psets dette år vil have en struktur, hvor den første - 17 00:00:46,200 --> 00:00:48,930 der kommer til at være en del af spørgsmål, en række 18 00:00:48,930 --> 00:00:51,120 spørgsmål, der virkelig vil også hjælpe dig med at komme i gang med 19 00:00:51,120 --> 00:00:53,840 den Pset, hjælpe dig øve nogle teknikker, som du har brug for. 20 00:00:53,840 --> 00:00:55,950 Og så disse spørgsmål, jeg ikke kommer til at dække i 21 00:00:55,950 --> 00:00:59,630 walkthrough fordi i din afdeling, din tildelte undervisning 22 00:00:59,630 --> 00:01:01,630 fyr rent faktisk vil gå gennem dem, 23 00:01:01,630 --> 00:01:02,620 spørgsmål med dig. 24 00:01:02,620 --> 00:01:04,370 Ved slutningen af ​​din sektion, vil du gå væk med den 25 00:01:04,370 --> 00:01:07,200 svarene på disse spørgsmål, men også med den tillid, 26 00:01:07,200 --> 00:01:10,340 du kan gennemføre nogle af de funktioner, du har brug for 27 00:01:10,340 --> 00:01:12,480 for de sidste dele af Pset. 28 00:01:12,480 --> 00:01:15,900 >> Pset 1 udgør Mario. 29 00:01:15,900 --> 00:01:19,000 Og det er en sjov lille program, hvor det væsentlige vi 30 00:01:19,000 --> 00:01:24,360 skrive og udskrive en halv pyramide i den typiske Mario scene. 31 00:01:24,360 --> 00:01:27,150 Og så den anden del af Pset kaldes Grådige. 32 00:01:27,150 --> 00:01:29,850 Og så i Greedy vi hovedsageligt fungere som en grådig 33 00:01:29,850 --> 00:01:32,780 kasserer, hvor hvis nogen giver os en sum penge 34 00:01:32,780 --> 00:01:38,730 at vi ønsker, at vi beregner den minimale mængde af mønter, 35 00:01:38,730 --> 00:01:40,840 vi kan vende tilbage til dem at stadig give dem dette beløb. 36 00:01:44,080 --> 00:01:44,420 >> Ok. 37 00:01:44,420 --> 00:01:46,970 Så hver walkthrough vil have en værktøjskasse. 38 00:01:46,970 --> 00:01:50,650 Og igen, kan du ikke bruge alle de værktøjer i denne 39 00:01:50,650 --> 00:01:53,080 værktøjskasse, eller du kan bruge dem alle. 40 00:01:53,080 --> 00:01:54,550 Under alle omstændigheder er det rigtig godt at vide, hvad 41 00:01:54,550 --> 00:01:55,680 du er udstyret med. 42 00:01:55,680 --> 00:01:59,990 Så vi har det CS50 Appliance, som jeg vil vise jer og 43 00:01:59,990 --> 00:02:01,350 introducere dig til det. 44 00:02:01,350 --> 00:02:05,710 Så også i almindelighed, god stil er absolut en af ​​vores 45 00:02:05,710 --> 00:02:07,080 vigtigste værktøjer. 46 00:02:07,080 --> 00:02:10,759 Style hovedsageligt omhandler, hvordan læsbar er din kode? 47 00:02:10,759 --> 00:02:12,750 Når en anden går og læser din kode, har de 48 00:02:12,750 --> 00:02:13,610 en nem 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å vil vi tale om, hvordan man får gyldig bruger input i din 52 00:02:21,750 --> 00:02:26,430 program, fordi både Mario og i Greedy, skal du 53 00:02:26,430 --> 00:02:31,660 bede brugeren om at input og give dig nogle slags tal. 54 00:02:31,660 --> 00:02:35,480 Så vi ønsker at sikre, at antallet er gyldigt. 55 00:02:35,480 --> 00:02:39,010 Så husker i Scratch, vi havde blokke såsom Repeat, 56 00:02:39,010 --> 00:02:42,300 Gentag indtil, eller vent, eller Forever. 57 00:02:42,300 --> 00:02:45,880 Så vi kommer til at slags omsætte det til C nu, og 58 00:02:45,880 --> 00:02:49,750 se på loops, såsom for, mens og gør-mens. 59 00:02:49,750 --> 00:02:54,330 Så også vi også nødt til at vise værdier tilbage på 60 00:02:54,330 --> 00:02:56,500 skærm, uanset om det er i Mario eller i Grådige. 61 00:02:56,500 --> 00:03:01,150 Og så vil vi tale om, hvordan vi udskriver ting fra strygere til 62 00:03:01,150 --> 00:03:03,070 heltal og flåder. 63 00:03:03,070 --> 00:03:05,250 Og så til sidst, vi taler om pseudokode, en virkelig 64 00:03:05,250 --> 00:03:07,550 vigtigt begreb at huske hele dette kursus. 65 00:03:07,550 --> 00:03:11,130 Hvad jeg finder hjælper mig mest med problematiske sæt er at tænke og 66 00:03:11,130 --> 00:03:14,260 beskrive, hvad jeg ønsker at gøre før tænker nogen C. 67 00:03:14,260 --> 00:03:15,640 Men blot beskrive handlingen. 68 00:03:15,640 --> 00:03:19,100 Så pseudokode er slags i mellem engelsk og C, slags 69 00:03:19,100 --> 00:03:22,980 beskriver processer uden den korrekte syntaks, men 70 00:03:22,980 --> 00:03:24,490 tilvejebringelse af en god nok struktur. 71 00:03:24,490 --> 00:03:27,460 Og så vil jeg have nogle eksempler på pseudokode for dig så godt 72 00:03:27,460 --> 00:03:28,710 i denne gennemgang. 73 00:03:31,610 --> 00:03:31,940 >> Okay. 74 00:03:31,940 --> 00:03:35,620 Så hvad vi skal arbejde med, er det CS50 Appliance. 75 00:03:35,620 --> 00:03:38,840 Det er hovedsageligt en virtuel maskine den slags kører en 76 00:03:38,840 --> 00:03:40,780 computer inde i din egen computer. 77 00:03:40,780 --> 00:03:42,080 Og det har en masse fordele. 78 00:03:42,080 --> 00:03:44,780 Den ene er, at det er forudindstillet med en masse af de værktøjer, som du vil 79 00:03:44,780 --> 00:03:45,980 behov for CS50. 80 00:03:45,980 --> 00:03:47,940 Samt betyder det, at alle er på samme grundlag, 81 00:03:47,940 --> 00:03:50,800 hvorvidt Mac eller pc eller et andet operativsystem. 82 00:03:50,800 --> 00:03:53,930 Vi kan alle køre den virtuelle maskine. 83 00:03:53,930 --> 00:03:58,800 Og så er der vejledning på manual.cs50.net/appliance. 84 00:03:58,800 --> 00:04:02,740 Og så hvis du går til dette link og følg vejledningen, 85 00:04:02,740 --> 00:04:07,820 så forhåbentlig vil du være i stand til at installere apparatet. 86 00:04:07,820 --> 00:04:11,390 >> Så det første, skal du installere et program, en 87 00:04:11,390 --> 00:04:13,760 konkrete anvendelse til at kunne køre den virtuelle maskine. 88 00:04:13,760 --> 00:04:15,270 Og så skal du hente apparatet. 89 00:04:15,270 --> 00:04:18,050 Men igen, der er instruktioner 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 downloadet mit apparat, og jeg har installeret 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 hentede apparatet, jeg gik til fil. 94 00:04:31,250 --> 00:04:34,690 Jeg gik til Åbn og derefter fundet, hvor jeg 95 00:04:34,690 --> 00:04:37,550 gemt CS50 Appliance. 96 00:04:37,550 --> 00:04:39,310 Og derfra, kørte jeg den her. 97 00:04:39,310 --> 00:04:44,520 Men jeg har det op allerede her, så lad os tage et nærmere kig. 98 00:04:44,520 --> 00:04:44,850 >> Ok. 99 00:04:44,850 --> 00:04:46,770 Så nu er vi inde i CS50 Appliance. 100 00:04:46,770 --> 00:04:47,890 Jeg gjorde det på fuld skærm. 101 00:04:47,890 --> 00:04:51,130 Du kan vælge at gøre det, hvis du ønsker eller bare have det som en 102 00:04:51,130 --> 00:04:53,480 mindre vindue på skrivebordet. 103 00:04:53,480 --> 00:04:57,170 Her har vi bare en simpel desktop med 104 00:04:57,170 --> 00:04:58,220 et hjem og en skraldespand. 105 00:04:58,220 --> 00:05:05,070 Men hvis du går til Menu og derefter til programmering, så du se 106 00:05:05,070 --> 00:05:07,570 at vi har noget, der hedder Terminal. 107 00:05:07,570 --> 00:05:12,340 Og så i her, kan vi navigere rundt på vores computer. 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 bruge et program kaldet gedit, eller "g 110 00:05:17,240 --> 00:05:20,050 redigere, "alt efter hvad en, der er. 111 00:05:20,050 --> 00:05:21,680 Så vi vil bruge det til at skrive kode. 112 00:05:21,680 --> 00:05:24,850 Så du har disse to værktøjer, som du skal bruge primært 113 00:05:24,850 --> 00:05:27,590 at skrive kode. 114 00:05:27,590 --> 00:05:31,240 Så i Derudover er det ligesom en almindelig computer. 115 00:05:31,240 --> 00:05:32,890 Vi har en browser. 116 00:05:32,890 --> 00:05:34,400 Vi valgte Google Chrome. 117 00:05:34,400 --> 00:05:38,720 Hvad jeg har gjort er jeg har oprettet en Dropbox til at indeholde alle 118 00:05:38,720 --> 00:05:39,340 dokumenterne. 119 00:05:39,340 --> 00:05:41,760 Og så det er noget, der er meget opmuntret. 120 00:05:41,760 --> 00:05:44,900 Dropbox bruger cloud synkronisering og så hvis - 121 00:05:44,900 --> 00:05:47,250 så for eksempel noget tilfældigt - lad os håbe ikke - 122 00:05:47,250 --> 00:05:50,100 sker til din enhed, så det vil alle være 123 00:05:50,100 --> 00:05:51,350 synkroniseret på skyen. 124 00:05:54,716 --> 00:05:55,180 >> Ok. 125 00:05:55,180 --> 00:05:59,500 Så det er de programmer, som du vil bruge i 126 00:05:59,500 --> 00:06:02,900 CS50 Appliance. 127 00:06:02,900 --> 00:06:05,750 Nu til at navigere rundt på kommandolinjen. 128 00:06:05,750 --> 00:06:10,150 Terminalen kan faktisk fungere som slags en måde til rent faktisk at 129 00:06:10,150 --> 00:06:12,040 skrive kommandoer i - 130 00:06:12,040 --> 00:06:13,650 gerne, hvis du er en Mac, en Finder. 131 00:06:13,650 --> 00:06:17,010 Eller hvis du er i Windows, tror jeg, der er "udforske min 132 00:06:17,010 --> 00:06:19,070 computer "eller noget lignende. 133 00:06:19,070 --> 00:06:23,160 Så hvis vi går tilbage til apparatet, lad os åbne op for en 134 00:06:23,160 --> 00:06:25,710 terminalvindue. 135 00:06:25,710 --> 00:06:27,720 Så det har denne prompt, jharvard @ apparat. 136 00:06:27,720 --> 00:06:32,950 Lad os bare gøre det større. 137 00:06:32,950 --> 00:06:33,790 Okay. 138 00:06:33,790 --> 00:06:40,400 Så hvis vi skriv kommandoen ls, så der viser alle de 139 00:06:40,400 --> 00:06:45,440 filer i vores computer, i vores nuværende bibliotek. 140 00:06:45,440 --> 00:06:46,720 Directories er ligesom mapper. 141 00:06:46,720 --> 00:06:49,310 Vi bruger disse udtryk i flæng. 142 00:06:49,310 --> 00:06:52,480 Okay, så vi har listet de filer 143 00:06:52,480 --> 00:06:53,650 der er i denne mappe. 144 00:06:53,650 --> 00:06:58,340 Nu, hvis vi ønsker at få adgang til, siger, vores Dropbox, så vi kan 145 00:06:58,340 --> 00:06:59,320 ændre mapper. 146 00:06:59,320 --> 00:07:04,230 Så cd og derefter Dropbox. 147 00:07:04,230 --> 00:07:10,860 Vi ls igen, og så må vi se en liste over filer, der er i 148 00:07:10,860 --> 00:07:11,790 denne mappe. 149 00:07:11,790 --> 00:07:15,590 Dette svarer til at jeg går til mit hjem, og derefter klikke 150 00:07:15,590 --> 00:07:19,250 Dropbox, og derefter se listen her. 151 00:07:19,250 --> 00:07:20,090 >> Ok. 152 00:07:20,090 --> 00:07:22,220 Så lad os sige - 153 00:07:22,220 --> 00:07:25,640 når du fyre vil gøre din Pset 1, lad os lave en 154 00:07:25,640 --> 00:07:27,390 mappe kaldet pset1. 155 00:07:27,390 --> 00:07:32,170 Så vi er i Dropbox lige nu, som du kan se fra dette 156 00:07:32,170 --> 00:07:32,700 bede her. 157 00:07:32,700 --> 00:07:34,320 Så lad os lave en mappe. 158 00:07:34,320 --> 00:07:37,940 Så mkdir, lad os kalde det pset1. 159 00:07:40,470 --> 00:07:43,500 Og så nu, hvis vi ls igen, 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 at gå inde pset1, så kan vi gå inde 162 00:07:49,470 --> 00:07:54,230 denne mappe med kommandoen cd. 163 00:07:54,230 --> 00:07:54,610 Ok. 164 00:07:54,610 --> 00:07:59,040 Så igen, lad os se om vi - 165 00:07:59,040 --> 00:08:01,620 sige, lad os gøre det på en anden måde. 166 00:08:01,620 --> 00:08:03,550 Dette svarer til bare at sige "Opret 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 finder, vil du blive interagere med 169 00:08:08,530 --> 00:08:09,310 terminalen meget. 170 00:08:09,310 --> 00:08:11,900 Så nogle gange er det en hel del lettere, en tabt hurtigere at bare 171 00:08:11,900 --> 00:08:15,900 arbejde i terminalen til at gøre den slags ting. 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 Der er en rm for at fjerne en fil. 175 00:08:20,410 --> 00:08:22,690 Så du blot skrive rm og derefter navnet på den 176 00:08:22,690 --> 00:08:23,800 fil for at slette det. 177 00:08:23,800 --> 00:08:25,810 Vi vil gå ind i nogle eksempler på det senere. 178 00:08:25,810 --> 00:08:28,840 Og så har vi noget, der hedder manden kommando, som 179 00:08:28,840 --> 00:08:31,850 bringer en manual for en type af funktion. 180 00:08:31,850 --> 00:08:34,419 Igen, jeg vil bringe op et konkret eksempel på det senere. 181 00:08:37,360 --> 00:08:39,900 >> Så en anden virkelig vigtigt redskab, som jeg nævnte kort 182 00:08:39,900 --> 00:08:41,280 før, er stil. 183 00:08:41,280 --> 00:08:43,650 Så det væsentlige, stil har at gøre med læsbarheden. 184 00:08:43,650 --> 00:08:46,460 Vil en anden kunne læse, følge, og 185 00:08:46,460 --> 00:08:47,670 forstå din kode? 186 00:08:47,670 --> 00:08:50,490 Dette er især vigtigt for dig, dig selv, faktisk. 187 00:08:50,490 --> 00:08:53,060 Hvis du opholder sig op sent kodning, og så senere på dig 188 00:08:53,060 --> 00:08:55,940 gå tilbage og du er ligesom, hvad betyder denne variable betyder? 189 00:08:55,940 --> 00:08:58,400 Sig, du arbejder på et gruppeprojekt med nogen, og du 190 00:08:58,400 --> 00:09:00,130 begge nødt til at se på hinandens kode. 191 00:09:00,130 --> 00:09:03,380 Det er virkelig vigtigt, at du navngiver dine variabler korrekt 192 00:09:03,380 --> 00:09:06,240 og gøre det ser nice, fordi det gør hele forskellen. 193 00:09:06,240 --> 00:09:08,270 Men så frem for alt, er vi i et kursus lige nu. 194 00:09:08,270 --> 00:09:10,660 Så for den interesse af CS50 og specielt til din 195 00:09:10,660 --> 00:09:13,010 undervisning stipendiater og planeringsmaskiner der vil se på din 196 00:09:13,010 --> 00:09:15,455 psets, please, bedes du bruge rigtige stil. 197 00:09:15,455 --> 00:09:18,980 Og din undervisning stipendiaterne vil være helt tilfreds. 198 00:09:18,980 --> 00:09:22,890 Så igen, omfatter stil indrykning tingene korrekt, 199 00:09:22,890 --> 00:09:26,380 især ved hjælp af dine seler og indrykning dem. 200 00:09:26,380 --> 00:09:29,910 Navngivning variabler noget, der giver mening. 201 00:09:29,910 --> 00:09:32,330 Lige nu følger vi konvention, når du har 202 00:09:32,330 --> 00:09:35,240 flere ord i dit variabelnavn, så du 203 00:09:35,240 --> 00:09:37,480 forbinde dem med en understregning, som du kan se i det 204 00:09:37,480 --> 00:09:39,660 nævne eksempel dér. 205 00:09:39,660 --> 00:09:41,740 >> Så endelig noget, der hedder magiske tal. 206 00:09:41,740 --> 00:09:48,030 Væsentlige, når du læser gennem kode og sige 207 00:09:48,030 --> 00:09:51,570 du har en variabel - 208 00:09:51,570 --> 00:09:56,680 siger, behøver du ikke have en variabel, men blot sige okay, indtil 209 00:09:56,680 --> 00:09:58,600 og sådanne er mindre end 10. 210 00:09:58,600 --> 00:10:00,210 Så din grader kommer til at gå godt, vent, 211 00:10:00,210 --> 00:10:01,320 hvor kom, at 10 kommer fra? 212 00:10:01,320 --> 00:10:05,040 Så virkelig forklare dig selv spørgsmål en masse. 213 00:10:05,040 --> 00:10:06,740 For at hjælpe dig med at forklare dig selv er kommentarer. 214 00:10:06,740 --> 00:10:09,850 Kommentarer er nok den mest vigtige ting at medtage i 215 00:10:09,850 --> 00:10:11,460 Deres programmer. 216 00:10:11,460 --> 00:10:15,440 Og det hjælper dig ikke kun faktisk forklare - 217 00:10:15,440 --> 00:10:17,220 det hjælper dig slags forklare din argumentation som 218 00:10:17,220 --> 00:10:17,870 du går langs. 219 00:10:17,870 --> 00:10:20,480 Og så hvis du gør det igen, går det at være en hel del lettere 220 00:10:20,480 --> 00:10:23,370 at gå tilbage i din kode og slags forstår, hvad du er 221 00:10:23,370 --> 00:10:24,080 gør der. 222 00:10:24,080 --> 00:10:26,410 Igen, gradere virkelig gerne kommentarer. 223 00:10:26,410 --> 00:10:28,940 Så du kommentere godt og - 224 00:10:28,940 --> 00:10:29,970 lidt ligesom gratis point. 225 00:10:29,970 --> 00:10:32,340 Og hvem kan ikke lide gratis point? 226 00:10:32,340 --> 00:10:33,910 Du kan også have flere linjer bemærkninger. 227 00:10:33,910 --> 00:10:36,630 Og så jeg medtaget en slags skabelon heroppe. 228 00:10:36,630 --> 00:10:38,580 Væsentlige, sædvanligvis disse anvendes på toppen af 229 00:10:38,580 --> 00:10:40,950 program til at slags forklare generelt hvad 230 00:10:40,950 --> 00:10:43,220 dit problem set gør. 231 00:10:43,220 --> 00:10:46,130 Indeholde dit navn, dato, et cetera. 232 00:10:46,130 --> 00:10:49,030 Og så, som jeg sagde 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 til loops, et cetera. 235 00:10:59,310 --> 00:10:59,740 >> Okay. 236 00:10:59,740 --> 00:11:03,600 Så nu hvor jeg har fortalt dig lidt om stil, lad os se 237 00:11:03,600 --> 00:11:07,390 dette i aktion. 238 00:11:07,390 --> 00:11:07,770 Ok. 239 00:11:07,770 --> 00:11:11,850 Så her har Tommy skrevet os en sødmefyldt forfærdelig 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 kan se her, all right. 242 00:11:17,170 --> 00:11:18,280 Dette er faktisk okay. 243 00:11:18,280 --> 00:11:22,060 Du kan se den multi-line kommentar her. 244 00:11:22,060 --> 00:11:25,120 Du starter det med en skråstreg og derefter to stjerner. 245 00:11:25,120 --> 00:11:28,580 Du fortsætter ad, indretning af stjernerne langs linjen 246 00:11:28,580 --> 00:11:30,540 og derefter afslutte det med en stjerne og en skråstreg. 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 Det her er fint. 250 00:11:33,760 --> 00:11:35,110 Han herunder hans biblioteker. 251 00:11:35,110 --> 00:11:38,790 Men så her han har kommentarer spænder flere linjer. 252 00:11:38,790 --> 00:11:40,390 Der er masser af ting galt med dette. 253 00:11:40,390 --> 00:11:44,770 Kommentarer spænder flere linjer, lige her han bruger 254 00:11:44,770 --> 00:11:47,230 syntaksen for bare en enkelt linje kommentarer. 255 00:11:47,230 --> 00:11:53,140 Han er også sammensmeltning alt ind i samme kommentar. 256 00:11:53,140 --> 00:11:54,715 Så vi ønsker at undgå dette. 257 00:11:57,710 --> 00:12:03,010 Så her ser vi, at disse seler, for eksempel, er alle 258 00:12:03,010 --> 00:12:03,730 over det hele. 259 00:12:03,730 --> 00:12:06,950 Indrykningen er forkert. 260 00:12:06,950 --> 00:12:09,460 Det gør ikke rigtig vise dig endeligt hvor noget 261 00:12:09,460 --> 00:12:12,850 starter og en anden ting slutter. 262 00:12:12,850 --> 00:12:16,510 Så så godt, vi se, at han har en defineret variabel i = 5 her. 263 00:12:16,510 --> 00:12:18,620 Men så denne fire kommer ud af ingenting, og der er ingen 264 00:12:18,620 --> 00:12:21,520 kommentar til rigtig 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å lad os nu se på noget, der er faktisk lige det samme 267 00:12:28,760 --> 00:12:30,250 kode undtagen med bedre stil. 268 00:12:30,250 --> 00:12:32,485 Så igen, det er god stil eksempel, 269 00:12:32,485 --> 00:12:33,735 multi-line eksempel. 270 00:12:38,400 --> 00:12:39,735 Og så her er det helt rene. 271 00:12:39,735 --> 00:12:43,500 Vi ser, at han starter en if-sætning her, træder ind i en ny 272 00:12:43,500 --> 00:12:46,400 line, har en åben tandbøjle. 273 00:12:46,400 --> 00:12:48,740 Så han har en fordybning. 274 00:12:48,740 --> 00:12:50,970 Han holder denne indrykning - 275 00:12:50,970 --> 00:12:54,680 han holder denne indikation ensartet over hele 276 00:12:54,680 --> 00:12:59,120 program og virkelig viser, hvornår en blok af kode begynder, når 277 00:12:59,120 --> 00:13:00,780 en blok af kode slutter. 278 00:13:00,780 --> 00:13:04,410 Dette kan synes en smule nitpicky fra vores side til at begynde 279 00:13:04,410 --> 00:13:06,370 med, men du vil se som du skriver din kode. 280 00:13:06,370 --> 00:13:09,400 Det er virkelig nyttigt at være i stand til at adskille det ud. 281 00:13:09,400 --> 00:13:12,200 Og igen, dine gradere virkelig gerne. 282 00:13:12,200 --> 00:13:14,360 Og så ser du, i stedet for bare at sætte et nummer i 283 00:13:14,360 --> 00:13:17,510 der, han faktisk opkaldt de variable iterationer. 284 00:13:17,510 --> 00:13:20,160 Og så er vi faktisk ikke se på denne kode lige nu 285 00:13:20,160 --> 00:13:22,450 men bare lidt at se et eksempel på 286 00:13:22,450 --> 00:13:23,780 gode versus dårlige stil. 287 00:13:23,780 --> 00:13:29,610 Og så hvis man ser på dem side om side her, ville du 288 00:13:29,610 --> 00:13:32,910 absolut foretrækker at læse den til højre. 289 00:13:39,230 --> 00:13:40,100 >> Ok. 290 00:13:40,100 --> 00:13:42,710 Så en sidste ting, før vi dykke ned i den virkelige kød af 291 00:13:42,710 --> 00:13:46,260 Pset er, hvordan man kompilere og køre din kode. 292 00:13:46,260 --> 00:13:50,320 Og så væsentlige, når du skriver C, det er faktisk ikke 293 00:13:50,320 --> 00:13:52,480 omregnes til den virkelige maskinkode, nullerne og 294 00:13:52,480 --> 00:13:56,000 dem, at maskinen rent faktisk kan læse og fortolke. 295 00:13:56,000 --> 00:13:57,170 Så vi har noget - 296 00:13:57,170 --> 00:13:59,340 Klang er en compiler, som vi bruger til C. 297 00:13:59,340 --> 00:14:00,270 Der er mange compilere. 298 00:14:00,270 --> 00:14:02,480 Men i CS50, vil vi bruge Dunk. 299 00:14:02,480 --> 00:14:05,480 Og så Dunk dybest set oversætter fra C til maskine 300 00:14:05,480 --> 00:14:07,380 kode til dig. 301 00:14:07,380 --> 00:14:10,170 Så lad os se på et eksempel - dyk ned i Appliance her. 302 00:14:14,550 --> 00:14:15,030 Ok. 303 00:14:15,030 --> 00:14:16,670 Så lige nu er vi i vores hjem bibliotek. 304 00:14:16,670 --> 00:14:18,680 Vi har faktisk ikke hvor nogen kode er. 305 00:14:18,680 --> 00:14:24,740 Så lad os ændre vores bibliotek til Dropbox/walkthrough1, hvor 306 00:14:24,740 --> 00:14:25,930 Jeg har gemt noget kode. 307 00:14:25,930 --> 00:14:29,340 Så hvis vi trykker ls, så ser vi, at jeg har en 308 00:14:29,340 --> 00:14:31,230 par 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 hello.c, så lad os samle det 311 00:14:35,280 --> 00:14:36,670 og så se, hvad det gør. 312 00:14:36,670 --> 00:14:43,150 Så en grundlæggende kompilere kommando ville være klang så hello.c, 313 00:14:43,150 --> 00:14:46,910 egentlig siger okay, kompilere hello.c for mig. 314 00:14:46,910 --> 00:14:50,550 Jeg klikker på Enter, synes at være gået rigtigt. 315 00:14:50,550 --> 00:14:52,590 Lad os klikke ls igen. 316 00:14:52,590 --> 00:14:55,230 Denne a.out fil har nu vist. 317 00:14:55,230 --> 00:14:57,430 Og så a.out er en eksekverbar fil. 318 00:14:57,430 --> 00:15:05,330 Så for at køre det, du gør en. / A.out. 319 00:15:05,330 --> 00:15:07,650 Og så ser vi, at denne hello.c program tilsyneladende 320 00:15:07,650 --> 00:15:10,400 udskrives hello fem gange. 321 00:15:10,400 --> 00:15:10,990 Ok. 322 00:15:10,990 --> 00:15:14,250 Men siger, at vi ikke ønsker at bruge navnet a.out. 323 00:15:18,140 --> 00:15:21,080 For eksempel ønsker vi at køre hello program, fordi det 324 00:15:21,080 --> 00:15:22,540 gør det lettere at forstå. 325 00:15:22,540 --> 00:15:26,590 Så lad os sige klang hello.c, og derefter hovedsagelig du har brug for 326 00:15:26,590 --> 00:15:29,030 at passere i nogle ting kaldet flag. 327 00:15:29,030 --> 00:15:31,600 Så at sige okay, godt jeg vil navngive denne noget andet. 328 00:15:31,600 --> 00:15:33,900 Du kan også videregive i en masse forskellige flag, 329 00:15:33,900 --> 00:15:34,620 som du vil se. 330 00:15:34,620 --> 00:15:37,510 Så flaget for navngivning af et program noget, som du 331 00:15:37,510 --> 00:15:39,780 vil er-O. 332 00:15:39,780 --> 00:15:42,470 Efter-o, skriver du navnet på programmet. 333 00:15:42,470 --> 00:15:44,090 Lad os bare kalde det hej. 334 00:15:44,090 --> 00:15:49,050 >> Så nu ser vi, at vi faktisk har en hello eksekverbar fil. 335 00:15:49,050 --> 00:15:54,020 Så vi kan køre det, og det gør de samme ting som før. 336 00:15:54,020 --> 00:15:56,210 Så nu hvor vi har goddag, kan vi også fjerne, for 337 00:15:56,210 --> 00:15:57,450 fx vores a.out. 338 00:15:57,450 --> 00:16:03,880 Så rm for remove, a.out, vil din terminal bede dig, så spørg 339 00:16:03,880 --> 00:16:05,470 for dig at bekræfte, om du virkelig ønsker at 340 00:16:05,470 --> 00:16:06,370 slette det eller ej. 341 00:16:06,370 --> 00:16:10,000 Vi siger y for ja. 342 00:16:10,000 --> 00:16:10,750 Og der går vi. 343 00:16:10,750 --> 00:16:12,220 A.out er væk. 344 00:16:12,220 --> 00:16:12,620 Ok. 345 00:16:12,620 --> 00:16:14,810 Men nogle gange det bliver forvirrende at huske alle de 346 00:16:14,810 --> 00:16:17,160 flag, som vi har brug for at inkludere og skrive ud klang. 347 00:16:17,160 --> 00:16:20,410 Og som vi ser, når vi bruger mere komplekse programmer, vi får 348 00:16:20,410 --> 00:16:22,450 være herunder forskellige biblioteker. 349 00:16:22,450 --> 00:16:27,230 Og så vores kommandoer til Dunk får længere og længere. 350 00:16:27,230 --> 00:16:30,660 Så medtaget i CS50 Appliance er make kommandoen. 351 00:16:30,660 --> 00:16:33,880 Så skal du blot indtaste lave hej. 352 00:16:33,880 --> 00:16:35,130 Ups. 353 00:16:36,860 --> 00:16:38,400 Vi har allerede lavet denne eksekverbar fil. 354 00:16:38,400 --> 00:16:39,650 Så lad mig bare fjerne det hurtigt. 355 00:16:42,260 --> 00:16:44,830 Lad os nu skrive make hej. 356 00:16:44,830 --> 00:16:49,470 Og du kan se i denne linje her, at det væsentlige sige gøre 357 00:16:49,470 --> 00:16:54,760 hej involverer alle disse kommandoer, 358 00:16:54,760 --> 00:16:55,580 gå ind i det for dig. 359 00:16:55,580 --> 00:16:58,080 >> Så medtaget i CS50 Appliance er make-fil. 360 00:16:58,080 --> 00:17:02,300 Så bare når du har en fil name.c, så alt du skal gøre 361 00:17:02,300 --> 00:17:03,680 er at sige gøre filnavnet. 362 00:17:03,680 --> 00:17:04,800 Og så har du en eksekverbar 363 00:17:04,800 --> 00:17:06,200 fil med dette navn. 364 00:17:06,200 --> 00:17:06,675 Ja? 365 00:17:06,675 --> 00:17:09,525 >> SPEAKER 1: For min computer, i stedet for Dunk det siger GCC. 366 00:17:09,525 --> 00:17:11,910 Er det ligesom - 367 00:17:11,910 --> 00:17:12,109 ZAMYLA CHAN: Yeah. 368 00:17:12,109 --> 00:17:15,700 Så din computer kan sige GCC i modsætning til Dunk fordi 369 00:17:15,700 --> 00:17:18,180 GCC er en anden type compiler. 370 00:17:18,180 --> 00:17:20,460 Hvis du er i CS50 Appliance selv, så er det 371 00:17:20,460 --> 00:17:21,810 skal bruge Dunk. 372 00:17:24,619 --> 00:17:27,880 Hvis det ikke er, så måske komme og tale med mig bagefter eller sende 373 00:17:27,880 --> 00:17:29,595 på CS50 Diskutere og vi kan sortere det ud. 374 00:17:34,510 --> 00:17:35,710 >> Ok. 375 00:17:35,710 --> 00:17:39,250 Så nu, at vi har vores slags basale værktøjer ned, så vi 376 00:17:39,250 --> 00:17:43,060 kan dykke ned 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, hvor det væsentlige vi vil være 379 00:17:47,360 --> 00:17:50,800 gøre vores egen form for primitiv version af Mario 380 00:17:50,800 --> 00:17:51,410 game baggrund. 381 00:17:51,410 --> 00:17:54,790 Du ved, Mario har normalt et rør og et 382 00:17:54,790 --> 00:17:55,670 træ og nogle blokke. 383 00:17:55,670 --> 00:17:59,390 Og så er der en slags halv pyramide. 384 00:17:59,390 --> 00:18:02,100 Så vi vil bare fokusere på, at halvdelen pyramide, 385 00:18:02,100 --> 00:18:05,350 gør kode, således at den udskriver hashes til den slags 386 00:18:05,350 --> 00:18:07,500 af blokke i dette format. 387 00:18:07,500 --> 00:18:10,800 Så hvad der vil ske, er, at brugeren vil input en vis 388 00:18:10,800 --> 00:18:13,130 højden af ​​pyramiden, og så vil du printe det ud 389 00:18:13,130 --> 00:18:17,410 således at bunden til venstre hash - 390 00:18:17,410 --> 00:18:21,270 så i det nederste højre her - at man vil bringe 391 00:18:21,270 --> 00:18:23,820 med den nederste venstre af din terminal. 392 00:18:26,720 --> 00:18:27,360 Okay. 393 00:18:27,360 --> 00:18:29,860 >> Så den første ting, du har brug for - 394 00:18:29,860 --> 00:18:33,120 den første lille mini problem, som vi er nødt til at tackle, er, hvordan 395 00:18:33,120 --> 00:18:34,640 at få brugerinput. 396 00:18:34,640 --> 00:18:40,020 Så vi er nødt til at have at gøre med, hvad brugeren input og derefter 397 00:18:40,020 --> 00:18:41,060 slags output ting der. 398 00:18:41,060 --> 00:18:47,630 Så lad os se på se en fil kaldet apples.c at jeg skrev 399 00:18:47,630 --> 00:18:52,670 der beskæftiger sig med input og output. 400 00:18:52,670 --> 00:18:53,240 Okay. 401 00:18:53,240 --> 00:18:55,970 Så her øverst, har jeg inkluderet nogle af bibliotekerne 402 00:18:55,970 --> 00:18:56,540 at jeg har brug for. 403 00:18:56,540 --> 00:19:00,700 Den virkelig vigtigt her er stdio (standard I / O). Det tilbud 404 00:19:00,700 --> 00:19:02,760 med standard input og output, fordi vi kommer til at 405 00:19:02,760 --> 00:19:04,600 beskæftige sig med brugernes input. 406 00:19:04,600 --> 00:19:04,960 Ok. 407 00:19:04,960 --> 00:19:06,660 Så da jeg starter min vigtigste funktion. 408 00:19:06,660 --> 00:19:11,310 Og så vil jeg spørge brugeren okay, hvor mange æbler har du? 409 00:19:11,310 --> 00:19:13,650 Så lige her, hvad denne linje gør - 410 00:19:13,650 --> 00:19:18,420 I tildele variablen i til værdien af ​​GetInt. 411 00:19:18,420 --> 00:19:22,890 >> Så GetInt er en funktion, der er inkluderet i stdio. 412 00:19:22,890 --> 00:19:26,090 Og så væsentlige, vil der beskæftige sig med det for dig. 413 00:19:26,090 --> 00:19:27,900 Den vil bede brugeren om en int. 414 00:19:27,900 --> 00:19:30,600 Uanset hvad de vender tilbage, vil der blive tilknyttet 415 00:19:30,600 --> 00:19:32,020 variablen i. 416 00:19:32,020 --> 00:19:35,620 Og så så er det bare et lille program, der reducerer 417 00:19:35,620 --> 00:19:39,160 værdi af i med 1 og derefter udskriver den nye værdi. 418 00:19:39,160 --> 00:19:42,420 En dejlig ting ved gedit er faktisk, at der er en mini 419 00:19:42,420 --> 00:19:43,720 terminal lige her. 420 00:19:43,720 --> 00:19:46,670 Så i stedet for at skulle skifte frem og tilbage mellem 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 køre det herfra. 423 00:19:49,100 --> 00:19:52,070 Så lad os først komme ind det rigtige bibliotek. 424 00:19:52,070 --> 00:19:54,230 Så lad os ændre vores mapper 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å lad os nu lave æbler, samler det for os. 428 00:20:03,400 --> 00:20:06,640 Og så lad os nu køre æbler. 429 00:20:06,640 --> 00:20:08,420 Hvor mange æbler har vi? 430 00:20:08,420 --> 00:20:09,630 Jeg siger, jeg har 3. 431 00:20:09,630 --> 00:20:12,060 Og det siger "mwahaha jeg har tænkt mig at spise en af ​​dem" og siger 432 00:20:12,060 --> 00:20:13,610 "Du har nu 2 æbler". 433 00:20:13,610 --> 00:20:14,220 >> Ok. 434 00:20:14,220 --> 00:20:16,390 Så lad os køre det igen. 435 00:20:16,390 --> 00:20:19,040 Og lad os sige jeg har 1 æble. 436 00:20:19,040 --> 00:20:19,940 Nu har jeg 0 æbler. 437 00:20:19,940 --> 00:20:20,180 Okay. 438 00:20:20,180 --> 00:20:22,460 Så dette program ser ud til at virke som forventet. 439 00:20:22,460 --> 00:20:25,070 Vi input et tal, det nedsætter det med 1, og derefter 440 00:20:25,070 --> 00:20:27,290 udskriver det ud igen. 441 00:20:27,290 --> 00:20:31,950 Men hvad nu hvis, for eksempel, har jeg -1 æbler? 442 00:20:31,950 --> 00:20:33,440 , Der ikke helt giver mening. 443 00:20:33,440 --> 00:20:37,430 Men det er stadig et heltal, så programmet accepterer det. 444 00:20:37,430 --> 00:20:41,090 Og så den returnerer dig en endnu mere negativt tal. 445 00:20:41,090 --> 00:20:44,700 Så det er en lektie for os, at selv om GetInt 446 00:20:44,700 --> 00:20:46,700 funktion og de andre tilknyttede oner, så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å os den rigtige datatype, for 449 00:20:51,490 --> 00:20:55,750 eksempel, hvis jeg bare havde sagt [TYPING], 450 00:20:55,750 --> 00:20:57,380 så det ville fortælle mig at prøve igen. 451 00:20:57,380 --> 00:21:01,860 Så dette vil beskæftige sig med, hvad data skrive dit input 452 00:21:01,860 --> 00:21:04,650 er, men vil faktisk ikke kontrollere, ja, det er faktisk en form for 453 00:21:04,650 --> 00:21:07,820 værdi, som jeg ønsker? 454 00:21:07,820 --> 00:21:12,370 Så en del af Mario er, at brugeren skal indtaste en 455 00:21:12,370 --> 00:21:15,400 tal, der repræsenterer højden af ​​den halve pyramide 456 00:21:15,400 --> 00:21:16,360 at du gør. 457 00:21:16,360 --> 00:21:21,000 Og så derefter, hvis vi spørge denne bruger for højden, så 458 00:21:21,000 --> 00:21:25,480 Der bør være to grænser for dette. 459 00:21:25,480 --> 00:21:28,040 Right? 460 00:21:28,040 --> 00:21:31,150 I spec siger det bør det ikke være mere end 23 461 00:21:31,150 --> 00:21:32,630 tegn, fordi det er lidt af standarden 462 00:21:32,630 --> 00:21:34,450 Højden af ​​terminalen. 463 00:21:34,450 --> 00:21:37,590 Men så, hvad andet indbundet, måske en nedre grænse, sjæl 464 00:21:37,590 --> 00:21:38,840 vi ønsker at inkludere? 465 00:21:41,180 --> 00:21:44,350 >> Hvis vi rent faktisk er at tegne en pyramide, slags tænker tilbage 466 00:21:44,350 --> 00:21:48,460 i hvor høj pyramide kan være, kan det nogensinde være lavere end en 467 00:21:48,460 --> 00:21:49,132 bestemt antal? 468 00:21:49,132 --> 00:21:50,490 SPEAKER 2: Større end 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 end tre. 471 00:21:52,630 --> 00:21:54,850 ZAMYLA CHAN: Det er en god pointe. 472 00:21:54,850 --> 00:21:57,860 Det kunne være - 473 00:21:57,860 --> 00:22:00,700 vi måske ønsker at begrænse det til kun en tre-niveau pyramide. 474 00:22:00,700 --> 00:22:02,120 Men lad os tænke - 475 00:22:02,120 --> 00:22:06,510 lad os sige ligesom en én hashtabel tæller som en pyramide også. 476 00:22:06,510 --> 00:22:09,031 Så hvad skal vores faktiske nedre grænse være? 477 00:22:12,260 --> 00:22:13,760 Tænker tilbage til æbler, ønsker vi ikke en 478 00:22:13,760 --> 00:22:15,020 negativ højde pyramide. 479 00:22:15,020 --> 00:22:15,460 Right? 480 00:22:15,460 --> 00:22:15,720 Okay. 481 00:22:15,720 --> 00:22:19,060 Så når du beder om det bruger input, så du bliver nødt til at 482 00:22:19,060 --> 00:22:21,980 omfatte en vis måde at sikre, at heltal, 483 00:22:21,980 --> 00:22:24,970 de giver dig er ikke negativt, 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å der er et par måder at gøre dette. 487 00:22:30,190 --> 00:22:34,420 Væsentlige, når du beder for bruger input, du ønsker at forlange 488 00:22:34,420 --> 00:22:37,080 at de giver dig den korrekte indgang. 489 00:22:37,080 --> 00:22:40,120 Så du ønsker at kræve, at de giver dig en række 490 00:22:40,120 --> 00:22:46,630 det er ikke negativt, men også mindre end 24. 491 00:22:46,630 --> 00:22:49,510 Så vi har at gøre med nul til 23, inklusive. 492 00:22:49,510 --> 00:22:50,070 Ok. 493 00:22:50,070 --> 00:22:52,830 Så vi ønsker løbende at kræve - 494 00:22:52,830 --> 00:22:55,720 hvis de ikke har givet os et gyldigt heltal, de ønsker at 495 00:22:55,720 --> 00:22:57,350 kontinuerligt kræve no. 496 00:22:57,350 --> 00:22:59,770 Giv mig et gyldigt input. 497 00:22:59,770 --> 00:23:02,270 Giv mig en gyldig højde. 498 00:23:02,270 --> 00:23:06,970 Så husker tilbage i Scratch, vi havde Repeat Indtil blok eller 499 00:23:06,970 --> 00:23:08,950 det for evigt, hvis blokken. 500 00:23:08,950 --> 00:23:12,345 Det er løkker, der er meget lig den while-løkken og 501 00:23:12,345 --> 00:23:14,960 den do while-løkken, som vi vil komme ind bare i et sekund. 502 00:23:14,960 --> 00:23:19,790 Så mens løkken hovedsagelig har en betingelse, at du tjekker 503 00:23:19,790 --> 00:23:23,240 det er en boolesk værdi, at du lægger derinde, ligesom 504 00:23:23,240 --> 00:23:25,740 blokke i bunden med vinkler. 505 00:23:25,740 --> 00:23:29,550 Det er, hvad går i parentesen i while-løkken. 506 00:23:29,550 --> 00:23:31,830 Så du bliver nødt til at have en form for tilstand der. 507 00:23:31,830 --> 00:23:36,540 Og da vi netop har talt om tidligere, at betingelsen vil 508 00:23:36,540 --> 00:23:40,250 har at gøre med grænserne for det hele tal, der blev indlæst. 509 00:23:40,250 --> 00:23:44,040 Så betingelse ville have noget at gøre med, om 510 00:23:44,040 --> 00:23:48,600 heltallet er inden for passende grænser. 511 00:23:48,600 --> 00:23:49,410 >> Så det er en while-løkke. 512 00:23:49,410 --> 00:23:52,580 For eksempel kan du bede om heltal og derefter 513 00:23:52,580 --> 00:23:56,070 løbende kontrollerer mens denne indgang ikke er gyldig. 514 00:23:56,070 --> 00:23:59,810 For eksempel på re-spørge holde, holde på at spørge 515 00:23:59,810 --> 00:24:01,600 brugeren til et heltal. 516 00:24:01,600 --> 00:24:03,780 Så det kunne være en måde. 517 00:24:03,780 --> 00:24:06,240 En anden måde kunne være en do while-løkke, som er meget 518 00:24:06,240 --> 00:24:10,130 svarende til en while-løkke, undtagen hvad en gøre, mens gør, er - 519 00:24:10,130 --> 00:24:12,600 du kan slags se med syntaksen - 520 00:24:12,600 --> 00:24:18,540 er, at det har den do og den faktiske løkkekroppen først. 521 00:24:18,540 --> 00:24:20,280 Så det har de, mens betingelser. 522 00:24:20,280 --> 00:24:22,060 Så hvad gør mens sløjfer - 523 00:24:22,060 --> 00:24:25,470 hvad de er nyttige for er, at de rent faktisk udfører 524 00:24:25,470 --> 00:24:29,130 kode mindst én gang, og derefter kontrollere, om tilstanden er 525 00:24:29,130 --> 00:24:30,030 opfyldt eller ej. 526 00:24:30,030 --> 00:24:32,510 Så hvis du skulle lave en do while løkke, så inde i din 527 00:24:32,510 --> 00:24:35,210 erklæring, du kan bede om et heltal, fordi du på 528 00:24:35,210 --> 00:24:37,180 mindst nødt til at spørge brugeren én gang. 529 00:24:37,180 --> 00:24:40,850 Og så når du spørge dem, så kan du sige okay, 530 00:24:40,850 --> 00:24:43,110 godt, når jeg har gjort dette, er det gyldigt? 531 00:24:43,110 --> 00:24:44,810 Hvis det er, så kan du bare holde den i gang. 532 00:24:44,810 --> 00:24:47,310 Men hvis det ikke er, så det vil bare virke som en almindelig mens 533 00:24:47,310 --> 00:24:49,240 løkke og derefter holde på beder. 534 00:24:53,590 --> 00:24:54,670 >> Okay. 535 00:24:54,670 --> 00:24:57,120 Så vi er tilbage til Mario. 536 00:24:57,120 --> 00:25:01,740 Så vi ved, hvordan man bede om den korrekte bruger input, der er 537 00:25:01,740 --> 00:25:03,160 i de højre grænse. 538 00:25:03,160 --> 00:25:07,100 Så nu er vi faktisk nødt til at trække denne halv pyramide. 539 00:25:07,100 --> 00:25:08,730 Det ligner simple tekst tegn. 540 00:25:08,730 --> 00:25:10,360 Så lad os faktisk åben - 541 00:25:14,280 --> 00:25:17,190 lad os bare åbne et vindue og sige okay, godt hvad hvis jeg var 542 00:25:17,190 --> 00:25:24,960 faktisk kommer til at gøre det manuelt, skal du skrive en selv? 543 00:25:24,960 --> 00:25:25,780 Okay. 544 00:25:25,780 --> 00:25:26,910 Så lad os se. 545 00:25:26,910 --> 00:25:30,070 Lad os sige, for eksempel, vi ønsker at gøre en pyramide, der er 546 00:25:30,070 --> 00:25:32,090 justeret langs venstre side, så ville bare gøre - 547 00:25:34,710 --> 00:25:37,750 i Mario, har det øverste niveau to blokke 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 gør tre, og derefter 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 ret simpelt. 553 00:25:46,790 --> 00:25:50,210 Undtagen i dette problem sæt, ønsker vi det faktisk for at tilpasse sig 554 00:25:50,210 --> 00:25:52,250 højre side af vores skærmen. 555 00:25:52,250 --> 00:25:52,630 Ok. 556 00:25:52,630 --> 00:25:58,870 Så hvordan kunne en af ​​jer faktisk skrive dette sådan, at 557 00:25:58,870 --> 00:26:01,810 det er rettet ind langs højre? 558 00:26:01,810 --> 00:26:08,550 I stedet for at sætte hash først, måske hvordan du slags 559 00:26:08,550 --> 00:26:10,040 flytte det sammen? 560 00:26:10,040 --> 00:26:11,360 SPEAKER 3: Skriv en linie? 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 linie? 563 00:26:13,030 --> 00:26:13,110 ZAMYLA CHAN: Yeah. 564 00:26:13,110 --> 00:26:13,390 Yeah. 565 00:26:13,390 --> 00:26:15,080 Du kan skrive som en understregning eller noget lignende 566 00:26:15,080 --> 00:26:19,370 det, men vi kan bare sige bruge et mellemrum. 567 00:26:19,370 --> 00:26:21,500 Lad os sætte ind som tre rum her. 568 00:26:21,500 --> 00:26:24,760 Så den næste linje, godt, ville vi nødt til at sætte to rum. 569 00:26:24,760 --> 00:26:26,500 Den næste linje, vi bare sætte ét rum. 570 00:26:26,500 --> 00:26:30,340 Og så til vores sidste linje, ville vi ikke sætte mellemrum. 571 00:26:30,340 --> 00:26:32,210 Og der har vi vores pyramide. 572 00:26:32,210 --> 00:26:33,170 >> Så det er sådan - 573 00:26:33,170 --> 00:26:37,290 huske den slags logik. 574 00:26:37,290 --> 00:26:39,340 Og prøv og finde ud af en form for mønster, som vi kan 575 00:26:39,340 --> 00:26:43,690 derefter oversætte til C og inddrage i en slags løkke. 576 00:26:43,690 --> 00:26:43,930 Ok. 577 00:26:43,930 --> 00:26:48,130 Så siger vi har en højde otte, så vores første række vil have 578 00:26:48,130 --> 00:26:48,980 to hashes. 579 00:26:48,980 --> 00:26:53,030 Men for at få disse hashes, ville du nødt til at skrive nogle 580 00:26:53,030 --> 00:26:54,000 mellemrum på forhånd. 581 00:26:54,000 --> 00:26:55,840 Right? 582 00:26:55,840 --> 00:26:57,340 Hvad jeg gjorde, er jeg bare gik igennem. 583 00:26:57,340 --> 00:27:00,150 Jeg trak det ud selv, en pyramide i min tekst editor, en 584 00:27:00,150 --> 00:27:03,800 pyramide med en højde på otte og derefter beregnet hvor mange 585 00:27:03,800 --> 00:27:05,180 rum jeg havde brug for at gøre. 586 00:27:05,180 --> 00:27:07,350 Så jeg sagde okay, godt den første række er 587 00:27:07,350 --> 00:27:08,260 kommer til at have to hashes. 588 00:27:08,260 --> 00:27:11,100 Men inden da, er jeg nødt til at indtaste syv pladser. 589 00:27:11,100 --> 00:27:13,420 Den næste har seks pladser og derefter 590 00:27:13,420 --> 00:27:15,610 tre hashes, et cetera. 591 00:27:15,610 --> 00:27:20,520 >> Så lad os prøve og bringe dette til et andet lag af 592 00:27:20,520 --> 00:27:21,330 abstraktion. 593 00:27:21,330 --> 00:27:26,680 Hvad hvis vi havde for den n'te række, hvor mange hashes og hvordan 594 00:27:26,680 --> 00:27:27,960 mange rum ville vi brug for? 595 00:27:27,960 --> 00:27:30,750 Er der nogen se mønstret? 596 00:27:35,200 --> 00:27:37,560 Så den første række har to hashes. 597 00:27:37,560 --> 00:27:39,720 Den anden 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å det n'te række ville have - 600 00:27:45,398 --> 00:27:46,800 SPEAKER 4: N plus 1? 601 00:27:46,800 --> 00:27:47,170 ZAMYLA CHAN: Yeah. 602 00:27:47,170 --> 00:27:47,780 N plus 1. 603 00:27:47,780 --> 00:27:49,030 Præcis. 604 00:27:52,810 --> 00:27:56,470 Så ser vi, at antallet af hashes vil være - 605 00:27:56,470 --> 00:27:59,510 hvis vi tæller den første række til at være en, så antallet 606 00:27:59,510 --> 00:28:03,850 af hashes er bare at være en mere end det. 607 00:28:03,850 --> 00:28:04,150 Okay. 608 00:28:04,150 --> 00:28:06,350 Så hvad så om antallet af pladser? 609 00:28:06,350 --> 00:28:10,120 Så lad os prøve og udtrykke dette i forhold til højden. 610 00:28:10,120 --> 00:28:12,570 Hvis højden er otte, så den første 611 00:28:12,570 --> 00:28:15,260 p har syv rum. 612 00:28:15,260 --> 00:28:18,215 Så den slags svarer til 8 minus 1. 613 00:28:18,215 --> 00:28:19,030 Right? 614 00:28:19,030 --> 00:28:22,420 Så den anden række kommer til at have seks pladser, 615 00:28:22,420 --> 00:28:25,340 som er 8 minus 2. 616 00:28:28,420 --> 00:28:31,450 Så jeg har tænkt mig at overlade det til dig at slags tal ud 617 00:28:31,450 --> 00:28:33,610 det mønster for. 618 00:28:33,610 --> 00:28:34,010 >> Okay. 619 00:28:34,010 --> 00:28:37,450 Men i programmeringen, nogle gange vi faktisk indeks på nul. 620 00:28:37,450 --> 00:28:39,680 Så vi starter ved nul i stedet for én. 621 00:28:39,680 --> 00:28:46,250 Så i stedet for den første række blive kaldt den første række, 622 00:28:46,250 --> 00:28:48,930 vi kommer til at kalde det 0-th rækken. 623 00:28:48,930 --> 00:28:51,360 Så afhængig af den måde, du ønsker at gennemføre det, være 624 00:28:51,360 --> 00:28:55,120 meget forsigtig, om du starter på nul, uanset om du starter på 625 00:28:55,120 --> 00:28:58,400 én, der dit mønster vil blive opvejet af en. 626 00:29:02,270 --> 00:29:02,880 Okay. 627 00:29:02,880 --> 00:29:05,460 Så nu, at vi slags fundet ud af programmet, vi 628 00:29:05,460 --> 00:29:06,310 sige okay. 629 00:29:06,310 --> 00:29:11,540 Så for alle slags niveau af trappen, jeg vil udskrive 630 00:29:11,540 --> 00:29:14,390 sådan og sådan antal mellemrum, og derefter sådan, og 631 00:29:14,390 --> 00:29:16,550 sådan antal hashes. 632 00:29:16,550 --> 00:29:19,550 Det afhænger af det mønster, vi etableret før. 633 00:29:19,550 --> 00:29:19,810 Okay. 634 00:29:19,810 --> 00:29:23,600 Så en måde løbes igennem og form for igangværende 635 00:29:23,600 --> 00:29:27,670 gennem et bestemt antal ting er en for-løkke, lidt ligesom 636 00:29:27,670 --> 00:29:31,040 gentagelsen 10 blok eller lignende repeat og du har indtastet et 637 00:29:31,040 --> 00:29:33,810 nummer i for Scratch. 638 00:29:33,810 --> 00:29:38,050 Så det væsentlige, for hvert niveau af trapper, vil vi gerne 639 00:29:38,050 --> 00:29:39,650 udskrive rum først. 640 00:29:39,650 --> 00:29:43,020 Derefter udskrive det antal hashes. 641 00:29:43,020 --> 00:29:46,480 Og så vil vi gerne indtaste en ny linje og derefter gentage det 642 00:29:46,480 --> 00:29:49,750 igen til den næste blok. 643 00:29:49,750 --> 00:29:50,720 Okay. 644 00:29:50,720 --> 00:29:55,080 >> Så lad os se på efter sløjfer et øjeblik at slags se én måde 645 00:29:55,080 --> 00:29:59,460 at vi kunne gå gennem et sæt tal, gå gennem det antal 646 00:29:59,460 --> 00:30:02,250 af trinnene i denne halv pyramide. 647 00:30:02,250 --> 00:30:04,220 Så for løkker er sammensat af tre dele. 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 væsentlige sætter en variabel. 650 00:30:13,220 --> 00:30:15,130 Det kommer til at blive sat til denne værdi hver gang 651 00:30:15,130 --> 00:30:17,110 at for loop begynder. 652 00:30:17,110 --> 00:30:18,540 Så du vil have en betingelse. 653 00:30:18,540 --> 00:30:21,640 Din for-løkke vil kun udføre, så længe der 654 00:30:21,640 --> 00:30:25,630 betingelse evalueres til sand. 655 00:30:25,630 --> 00:30:28,000 Og så har du en opdatering tilstand. 656 00:30:28,000 --> 00:30:32,450 Så det har at gøre med den variabel, du initialiseret. 657 00:30:32,450 --> 00:30:38,120 Så en måde at dybest set sikre, at vi kan bryde ud 658 00:30:38,120 --> 00:30:40,070 af løkken, vi som ikke holder på eksekvering 659 00:30:40,070 --> 00:30:41,310 det evigt og altid. 660 00:30:41,310 --> 00:30:43,760 Fordi i modsætning til Scratch, vi faktisk ikke har bare en 661 00:30:43,760 --> 00:30:45,680 plain Forever loop. 662 00:30:45,680 --> 00:30:48,100 I C, har programmet til slut med tiden. 663 00:30:48,100 --> 00:30:52,290 Så vi er nødt til at sørge for, at en eller anden måde har vi det til at stoppe. 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 måske vil bruge til 666 00:30:56,260 --> 00:30:57,530 Mario er dette. 667 00:30:57,530 --> 00:31:02,290 Så har du et heltal jeg, at du starter på 0. 668 00:31:02,290 --> 00:31:08,050 Så længe den er mindre end højden, man udfører organ 669 00:31:08,050 --> 00:31:11,140 af løkken inde her. 670 00:31:11,140 --> 00:31:13,820 Efter at kroppen af ​​løkken har udført, så ville du 671 00:31:13,820 --> 00:31:15,290 forhøje i med 1. 672 00:31:15,290 --> 00:31:18,510 Så dit program ville tjekke igen - okay, godt, er jeg mindre end 673 00:31:18,510 --> 00:31:18,885 højden? 674 00:31:18,885 --> 00:31:21,865 Hvis det er, så ville du fortsætte. 675 00:31:24,630 --> 00:31:27,790 Så her er et eksempel på nul indeksering, hvor vi starter på 676 00:31:27,790 --> 00:31:29,100 nul og derefter vi - 677 00:31:29,100 --> 00:31:30,970 bemærker, at vores tilstand er mindre end højden. 678 00:31:30,970 --> 00:31:34,510 Så siger vores højde er fire, for eksempel i 679 00:31:34,510 --> 00:31:35,470 vil starte ved 0. 680 00:31:35,470 --> 00:31:36,180 Det bliver 1. 681 00:31:36,180 --> 00:31:36,730 Det bliver 2. 682 00:31:36,730 --> 00:31:37,940 Det bliver 3. 683 00:31:37,940 --> 00:31:42,310 Og derefter når den opdaterer, når for-løkken opdateringer, jeg vil 684 00:31:42,310 --> 00:31:43,650 derefter sat til 4. 685 00:31:43,650 --> 00:31:47,080 Men 4 er ikke mindre end 4, og så så ville vi 686 00:31:47,080 --> 00:31:50,340 videre til resten af ​​vores loop. 687 00:31:50,340 --> 00:31:50,870 >> Okay. 688 00:31:50,870 --> 00:31:51,680 Så det er begyndt ved nul. 689 00:31:51,680 --> 00:31:53,470 Men vi kunne også starte i det ene, for eksempel. 690 00:31:53,470 --> 00:31:56,960 Men da vi starte i det ene, vi slags nødt til at gå én mere 691 00:31:56,960 --> 00:31:57,920 tid i slutningen. 692 00:31:57,920 --> 00:32:02,800 Så det er derfor, vi tilføjer den er mindre end eller lig med. 693 00:32:02,800 --> 00:32:05,780 Så en af ​​de store ting, jeg kan lide ved computer 694 00:32:05,780 --> 00:32:06,930 programmering er, at der er lige så 695 00:32:06,930 --> 00:32:08,370 mange måder at gøre tingene på. 696 00:32:08,370 --> 00:32:11,300 Så du kan vælge, om du starter på nul, uanset om du 697 00:32:11,300 --> 00:32:12,330 starte i det ene. 698 00:32:12,330 --> 00:32:15,400 Også, hvis du ville, kunne du bare bruge en 699 00:32:15,400 --> 00:32:16,600 while-løkke, for eksempel. 700 00:32:16,600 --> 00:32:18,890 Så du kunne - 701 00:32:18,890 --> 00:32:20,270 lad os faktisk åben hello.c. 702 00:32:26,200 --> 00:32:28,600 Så vi har en for-løkke her. 703 00:32:28,600 --> 00:32:31,330 Det starter ved i = 0, i <5. 704 00:32:31,330 --> 00:32:33,550 Jeg har en kommentar her fortæller os, hvad det gør. 705 00:32:33,550 --> 00:32:36,300 Den udskriver hello fem gange ved hjælp af en for-løkke. 706 00:32:36,300 --> 00:32:41,690 Men vi kunne også gøre, at bruge en while-løkke så godt. 707 00:32:41,690 --> 00:32:48,290 >> Så lad os se på, hvordan vi kan gøre det. 708 00:32:48,290 --> 00:32:51,010 Så hvis vi skal efterligne en for-løkke, så ønsker vi også at 709 00:32:51,010 --> 00:32:54,870 efterligne initialiseringen, tilstanden, og opdateringen. 710 00:32:54,870 --> 00:33:01,430 Så betingelse bør være temmelig simpelt, fordi i 711 00:33:01,430 --> 00:33:04,350 mens syntaks, når man ser på det, der står while (betingelse). 712 00:33:04,350 --> 00:33:06,830 Så lad os bare input tilstanden dér. 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 ved, at vi ønsker at udskrive farvel. 716 00:33:18,900 --> 00:33:21,350 Vi ved, at det er liget af vores løkke. 717 00:33:21,350 --> 00:33:23,600 Men vi mangler initialiseringen 718 00:33:23,600 --> 00:33:24,490 og opdateringen, ikke? 719 00:33:24,490 --> 00:33:25,790 Fordi vi ikke kan have en evig løkke. 720 00:33:25,790 --> 00:33:27,660 Det skal afslutte. 721 00:33:27,660 --> 00:33:35,300 Så lad os tilføje nogle slags initialisering her ved hjælp af 722 00:33:35,300 --> 00:33:38,790 samme, som vi brugte i vores for-løkken, 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 gentager dette, mens løkke, så længe jeg er mindre end 5. 726 00:33:43,640 --> 00:33:47,220 Så vi mangler én ting, der er opdateringen. 727 00:33:47,220 --> 00:33:51,470 Så hvad opdatering ville vi nødt til at bruge, hvis vi var hovedsagelig 728 00:33:51,470 --> 00:33:52,880 genskabe for-løkken ovenfor? 729 00:33:56,000 --> 00:33:59,880 Vi har initialiseringen i er lig med 0. 730 00:33:59,880 --> 00:34:03,610 Vi har betingelsen i er mindre end 5. 731 00:34:03,610 --> 00:34:06,300 Og så her er en opdatering, ikke? 732 00:34:06,300 --> 00:34:07,365 Så vi ønsker at kopiere det. 733 00:34:07,365 --> 00:34:10,340 Vi ønsker at sige okay, jeg + +. 734 00:34:10,340 --> 00:34:13,820 Det er det samme som at sige, i = i + 1. 735 00:34:13,820 --> 00:34:17,090 Men da det er brugt så ofte, forkortelse for det er bare 736 00:34:17,090 --> 00:34:18,340 sige i + +. 737 00:34:20,800 --> 00:34:22,050 >> Great. 738 00:34:25,230 --> 00:34:26,400 Okay. 739 00:34:26,400 --> 00:34:29,210 Her vil jeg faktisk ikke forlade ud af mine æbler program. 740 00:34:29,210 --> 00:34:33,070 Så jeg vil bare klik på Control-C og umiddelbart 741 00:34:33,070 --> 00:34:34,989 støvler mig ud af mit program og bringer 742 00:34:34,989 --> 00:34:35,920 mig tilbage til terminalen. 743 00:34:35,920 --> 00:34:38,320 Så det, for eksempel, hvis du kører ind i en bug, hvor du 744 00:34:38,320 --> 00:34:40,750 glemte at opdatere din while-løkke sådan, at det ville 745 00:34:40,750 --> 00:34:43,150 opsige, og du indtaster en uendelig løkke, så du kan 746 00:34:43,150 --> 00:34:46,400 bruge Control-C at bryde ud af 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 rigtige mappe. 749 00:34:47,960 --> 00:34:52,010 Så lad os gøre hej. 750 00:34:52,010 --> 00:35:01,710 Og så hvis vi løber goddag, ser vi, at farvel løkke gør 751 00:35:01,710 --> 00:35:03,350 præcis de samme ting som vores for-løkke gør. 752 00:35:03,350 --> 00:35:05,060 Så det er bare en antydning. 753 00:35:05,060 --> 00:35:06,980 Uanset om du er mere komfortabel med for løkker eller 754 00:35:06,980 --> 00:35:09,850 med while-løkker, kan de være indbyrdes udskiftelige. 755 00:35:09,850 --> 00:35:15,130 Så uanset hvilken en du vil bruge til at gentage gennem - 756 00:35:15,130 --> 00:35:16,020 i dette tilfælde - 757 00:35:16,020 --> 00:35:19,410 højden af ​​Mario pyramide. 758 00:35:19,410 --> 00:35:23,020 Og så igen, dette er blot en påmindelse, hvis du starter ved nul 759 00:35:23,020 --> 00:35:25,430 for din variabel, så du vil få lyst til at have en anden 760 00:35:25,430 --> 00:35:27,360 betingelse, end hvis du startede på én. 761 00:35:27,360 --> 00:35:29,620 Så denne tabel bare lidt viser dig en påmindelse. 762 00:35:29,620 --> 00:35:33,660 Hvis du ønsker at gentage 10 gange, for eksempel, så du 763 00:35:33,660 --> 00:35:36,030 kan enten starte din variabel på nul. 764 00:35:36,030 --> 00:35:39,350 Og Deres tilstand kan være mindre end 10. 765 00:35:39,350 --> 00:35:43,020 Og så den slags viser dig matricen af ​​det. 766 00:35:43,020 --> 00:35:43,360 >> Okay. 767 00:35:43,360 --> 00:35:45,790 Så vi har gået igennem Mario. 768 00:35:45,790 --> 00:35:48,820 Vi har sagt, Okay, godt vi nødt til at tjekke for korrekt input, 769 00:35:48,820 --> 00:35:50,800 nul og 23 inklusive. 770 00:35:50,800 --> 00:35:53,370 Vi skal finde en form for mønster, en slags måde 771 00:35:53,370 --> 00:35:57,920 udtrykke den n'te række eller den i'te række. 772 00:35:57,920 --> 00:36:01,560 Og vi vil beslutte, Okay, det vi vil udskrive dette 773 00:36:01,560 --> 00:36:04,870 mange rum, så mange hashes, 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å nu kan vi gå videre til Grådige. 777 00:36:08,570 --> 00:36:14,500 Greedy er et program, hvor en bruger får du et beløb på 778 00:36:14,500 --> 00:36:17,460 kontanter, som hovedsagelig du som kassereren har brug for at vende tilbage. 779 00:36:17,460 --> 00:36:21,530 Men du vil bruge som små mønter som muligt. 780 00:36:21,530 --> 00:36:25,070 Og så er det her en grådige algoritme kommer ind, hvor 781 00:36:25,070 --> 00:36:30,440 vi ønsker at bruge den mindste mængde mønter muligt at 782 00:36:30,440 --> 00:36:31,900 gøre, at mængden af ​​forandring. 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 din løsning kunne se ud 785 00:36:40,480 --> 00:36:42,540 noget som dette. 786 00:36:42,540 --> 00:36:45,410 Du løber. / Grådige. 787 00:36:45,410 --> 00:36:47,920 Du bliver bedt om at sige okay, godt, hvor meget forandring er skyldige? 788 00:36:47,920 --> 00:36:50,780 Denne værdi vil være en værdi i dollars. 789 00:36:50,780 --> 00:36:52,440 Så det kommer til at være en flyder. 790 00:36:52,440 --> 00:36:55,630 Dit program vil derefter beregne det minimumsbeløb 791 00:36:55,630 --> 00:37:00,380 af mønter nødsaget til at foretage, i dette tilfælde 0,32 $. 792 00:37:00,380 --> 00:37:04,550 Og så det mindste antal er fire. 793 00:37:04,550 --> 00:37:07,480 Så før vi finde ud af hvad de skal gøre, så lad os slags gåtur 794 00:37:07,480 --> 00:37:10,770 gennem processen, som du måske gå om. 795 00:37:10,770 --> 00:37:16,480 Så hvis indgangen er 32, så det væsentlige jeg har tænkt mig at bruge 796 00:37:16,480 --> 00:37:19,100 den mindste mængde af mønter, hvis jeg bruger så mange 797 00:37:19,100 --> 00:37:20,460 store mønter som muligt. 798 00:37:20,460 --> 00:37:20,870 Right? 799 00:37:20,870 --> 00:37:25,420 Så det er meget nemmere at bruge en fjerdedel så 800 00:37:25,420 --> 00:37:27,070 modsætning til fem nickels. 801 00:37:27,070 --> 00:37:31,740 Så lad os sige, du har brug for at returnere $ 0,32. 802 00:37:31,740 --> 00:37:36,660 Tja, jeg kan bruge en fjerdedel i dette? 803 00:37:36,660 --> 00:37:37,480 Ja, du kan. 804 00:37:37,480 --> 00:37:41,970 Og så ville du være nedsat til $ 0,07. 805 00:37:41,970 --> 00:37:46,070 Lad os se om jeg kan bruge en anden fjerdedel til at betale dig tilbage. 806 00:37:46,070 --> 00:37:46,870 Nå, nej. 807 00:37:46,870 --> 00:37:48,200 Jeg kan ikke passe en fjerdedel i det. 808 00:37:48,200 --> 00:37:52,110 Så jeg har tænkt mig at flytte til den næste største mønt. 809 00:37:52,110 --> 00:37:53,250 Kan jeg bruge en skilling? 810 00:37:53,250 --> 00:37:55,800 $ 0,07, nej du kan ikke bruge en skilling til at betale $ 0,07. 811 00:37:55,800 --> 00:37:56,840 Så du siger nej. 812 00:37:56,840 --> 00:38:00,490 Flytte til den næste, hvilket er en nikkel. 813 00:38:00,490 --> 00:38:01,440 Kan du bruge 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 end $ 0,05, så vi kan bruge 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 bruge 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 bruge en anden øre? 820 00:38:13,070 --> 00:38:13,380 Ja. 821 00:38:13,380 --> 00:38:14,710 Kan vi bruge en anden øre? 822 00:38:14,710 --> 00:38:17,070 Nej, fordi nu har vi med succes 823 00:38:17,070 --> 00:38:19,400 betalt tilbage til brugeren. 824 00:38:19,400 --> 00:38:23,620 Og så at alt fire used mønter. 825 00:38:23,620 --> 00:38:26,370 >> Så tænker denne proces, vi hver 826 00:38:26,370 --> 00:38:29,080 tid beslutte okay, 827 00:38:29,080 --> 00:38:31,050 hvad er den største mønt, som vi kan bruge? 828 00:38:31,050 --> 00:38:37,240 Når vi bruger det, vi slags holde en mental note om, hvor meget 829 00:38:37,240 --> 00:38:39,650 flere penge vi nødt til at returnere brugeren samt hvor mange 830 00:38:39,650 --> 00:38:41,310 mønter vi har brugt. 831 00:38:44,640 --> 00:38:45,200 Okay. 832 00:38:45,200 --> 00:38:48,930 Så men igen, det første skridt - ligesom Mario - er at tilskynde 833 00:38:48,930 --> 00:38:51,120 brugeren til et beløb. 834 00:38:51,120 --> 00:38:53,920 Og så dette beløb vil være - 835 00:38:53,920 --> 00:38:56,040 det kommer til at have en decimal værdi, fordi vi skal til 836 00:38:56,040 --> 00:38:57,310 bede dem for dollars. 837 00:38:57,310 --> 00:39:00,550 Så det datatype vil ikke være et heltal. 838 00:39:00,550 --> 00:39:01,860 Men det vil være en - 839 00:39:04,960 --> 00:39:07,700 yeah, en float. 840 00:39:07,700 --> 00:39:10,780 Men ligesom æbler, kan flåd være positiv eller negativ. 841 00:39:10,780 --> 00:39:13,390 Så når du tjekker for værdier, du vil ønsker 842 00:39:13,390 --> 00:39:15,380 at sikre, at din float - 843 00:39:15,380 --> 00:39:19,710 bruger 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 beskæftige sig med flåd i hele vores program, repræsentere 846 00:39:26,720 --> 00:39:31,610 kvartaler med 0,25, dimes med 0,1, et cetera. 847 00:39:31,610 --> 00:39:36,280 Men jeg finder det meget lettere at håndtere på bare rene cents. 848 00:39:36,280 --> 00:39:36,910 Også - 849 00:39:36,910 --> 00:39:39,370 og vi vil tale om dette lidt senere - 850 00:39:39,370 --> 00:39:43,610 i C, har flydende punkter noget, der hedder unøjagtighed. 851 00:39:43,610 --> 00:39:48,660 Så når du indtaster i 0,12, for eksempel, at computeren 852 00:39:48,660 --> 00:39:53,010 faktisk butikker som ligesom 0.1111119 eller 853 00:39:53,010 --> 00:39:54,350 noget lignende. 854 00:39:54,350 --> 00:39:56,900 >> Så det er meget nemmere at konvertere til cents. 855 00:39:56,900 --> 00:40:02,190 Så hvordan kan vi konvertere en dollar værdi 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 Yeah. 859 00:40:04,110 --> 00:40:07,110 Så vi ville gange det med 100. 860 00:40:07,110 --> 00:40:10,820 Men en tricky ting om flydende punkter er, at der 861 00:40:10,820 --> 00:40:11,790 er noget upræcise. 862 00:40:11,790 --> 00:40:16,090 Så lad os bare se på et eksempel på dette. 863 00:40:18,760 --> 00:40:21,360 Så jeg har tænkt mig at åbne imprecision.c. 864 00:40:21,360 --> 00:40:23,690 Okay. 865 00:40:23,690 --> 00:40:24,860 Dette er et meget simpelt program. 866 00:40:24,860 --> 00:40:26,970 Det anmoder om en svømmer, og den udskriver det tilbage. 867 00:40:35,950 --> 00:40:39,600 En nice tip i terminalen er du kan bare skrive klare, og 868 00:40:39,600 --> 00:40:41,180 så du har en klar skærm. 869 00:40:41,180 --> 00:40:45,270 Og så du ikke behøver at se på tidligere output eller 870 00:40:45,270 --> 00:40:47,490 fejl eller fejlrapporter, sådan noget. 871 00:40:47,490 --> 00:40:48,120 Okay. 872 00:40:48,120 --> 00:40:49,675 Så lad os gøre unøjagtighed. 873 00:40:53,250 --> 00:40:56,250 Lad os køre den. 874 00:40:56,250 --> 00:40:57,890 Så jeg haven't - 875 00:40:57,890 --> 00:41:03,830 i min kode, jeg ikke udskrive nogen prompt eller sådan noget. 876 00:41:03,830 --> 00:41:05,010 Så det bare har en blinkende markør. 877 00:41:05,010 --> 00:41:07,390 Så det er bare venter på mig for at indtaste en float. 878 00:41:07,390 --> 00:41:08,640 Så let's - 879 00:41:10,610 --> 00:41:11,280 en tilfældig float. 880 00:41:11,280 --> 00:41:15,080 Og du kan se, at den udskriver det tilbage, men har nogle ekstra 881 00:41:15,080 --> 00:41:18,180 numre, som vi absolut ikke skulle omfatte. 882 00:41:18,180 --> 00:41:21,980 Så vi ønsker at sikre, at dette ikke 883 00:41:21,980 --> 00:41:23,300 ske i vores program. 884 00:41:23,300 --> 00:41:27,550 >> Så hvad vi ønsker at gøre, er at sørge for, at vi faktisk 885 00:41:27,550 --> 00:41:31,300 slags afrundes til den relevante værdi. 886 00:41:31,300 --> 00:41:31,850 Right? 887 00:41:31,850 --> 00:41:37,820 Og så heldigvis har vi en funktion kaldet runde omfattede 888 00:41:37,820 --> 00:41:38,550 i Appliance. 889 00:41:38,550 --> 00:41:41,390 Det er i math biblioteket. 890 00:41:41,390 --> 00:41:44,710 Hvis du ønsker at vide, hvordan man bruger runde, så du rent faktisk bruger 891 00:41:44,710 --> 00:41:45,220 manualen. 892 00:41:45,220 --> 00:41:48,160 Du kan klikke mand rundt. 893 00:41:48,160 --> 00:41:51,190 Så her det bringer op - 894 00:41:51,190 --> 00:41:53,220 kan være lidt svært at dechifrere, men til sidst 895 00:41:53,220 --> 00:41:54,690 du får hænge af det. 896 00:41:54,690 --> 00:42:00,060 Den slags viser dig, hvad funktionen gør, og derefter nogle 897 00:42:00,060 --> 00:42:01,790 mulige anvendelser af det. 898 00:42:01,790 --> 00:42:10,210 Så når du i sidste ende få en ordentlig, gyldigt input fra 899 00:42:10,210 --> 00:42:14,490 bruger, så du ønsker at konvertere den til cents. 900 00:42:14,490 --> 00:42:18,530 Sørg for, at du runde værdi, så du undgår denne 901 00:42:18,530 --> 00:42:21,780 flydende komma unøjagtighed. 902 00:42:21,780 --> 00:42:22,340 >> Okay. 903 00:42:22,340 --> 00:42:26,190 Så vi har bedt brugeren om et pengebeløb. 904 00:42:26,190 --> 00:42:31,460 Nu, hvad vi ønsker at gøre, er det væsentlige kontrollere, right? 905 00:42:31,460 --> 00:42:35,500 Okay, så kan jeg bruge den største mønt muligt? 906 00:42:35,500 --> 00:42:37,040 Hvis du kan, så du bruger det. 907 00:42:37,040 --> 00:42:40,250 Du holder styr på, hvor mange mønter du har brugt hidtil, og 908 00:42:40,250 --> 00:42:41,710 også den faldende værdi. 909 00:42:41,710 --> 00:42:42,240 Right? 910 00:42:42,240 --> 00:42:44,880 Og så er du kommer til at kontrollere. 911 00:42:44,880 --> 00:42:47,940 Når du har slags udtømt de kvartaler, du ønsker at gå 912 00:42:47,940 --> 00:42:49,545 til den næste mulige ting. 913 00:42:49,545 --> 00:42:59,380 >> Så hvad slags struktur eller hvilken slags løkke kunne vi 914 00:42:59,380 --> 00:43:03,850 ønsker at bruge til løbende at undersøge, om vi stadig kan bruge 915 00:43:03,850 --> 00:43:05,100 en fjerdedel, for eksempel? 916 00:43:07,380 --> 00:43:09,280 SPEAKER 6: Mens værdi større end? 917 00:43:09,280 --> 00:43:10,150 ZAMYLA CHAN: Ja, perfekt. 918 00:43:10,150 --> 00:43:10,590 Præcis. 919 00:43:10,590 --> 00:43:12,630 Så mens værdien er større end. 920 00:43:12,630 --> 00:43:16,300 Så mens den værdi, vi er nødt til at give noget tilbage, er stadig 921 00:43:16,300 --> 00:43:19,410 større end en fjerdedel, mens vi stadig kan bruge en fjerdedel, 922 00:43:19,410 --> 00:43:20,490 bruge kvartaler. 923 00:43:20,490 --> 00:43:21,450 Hold styr på det. 924 00:43:21,450 --> 00:43:22,610 Og så holde den i gang. 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 Åh, her jeg har lige medtaget blot nogle tips om, hvordan du udskriver 928 00:43:32,580 --> 00:43:33,830 ud værdier. 929 00:43:36,330 --> 00:43:38,810 Så i dit printf funktion, har vi normalt kun været 930 00:43:38,810 --> 00:43:39,760 behandling af strenge. 931 00:43:39,760 --> 00:43:43,290 Men når du ønsker at udskrive en int eller bare nogen form for 932 00:43:43,290 --> 00:43:46,510 ciffer, du er nødt til at slags skrive en slags pladsholder. 933 00:43:46,510 --> 00:43:50,840 Så det er repræsenteret ved procent,% d for heltal. 934 00:43:50,840 --> 00:43:53,780 Du skal skrive det, så bagefter du faktisk - 935 00:43:53,780 --> 00:43:54,900 efter et komma - 936 00:43:54,900 --> 00:43:57,990 sat i hvilken værdi faktisk går derind. 937 00:43:57,990 --> 00:43:58,510 Right. 938 00:43:58,510 --> 00:43:58,840 >> Okay. 939 00:43:58,840 --> 00:44:02,050 Så vi har besluttet, at vi ønsker at undersøge, om - 940 00:44:02,050 --> 00:44:04,950 én måde at gøre dette ville være at løbende kontrollere, om 941 00:44:04,950 --> 00:44:08,640 Vi kan stadig bruge kvartaler, og derefter bruge de kvartaler, holde 942 00:44:08,640 --> 00:44:11,460 spore, og derefter gå videre til den næste største værdi. 943 00:44:11,460 --> 00:44:15,010 Nu er en anden slags sirlige måde, at du kunne gøre dette er 944 00:44:15,010 --> 00:44:16,770 Brug af modulo. 945 00:44:16,770 --> 00:44:22,710 Så vi har allerede plus, minus, gange, og divider 946 00:44:22,710 --> 00:44:23,560 til rådighed for os. 947 00:44:23,560 --> 00:44:25,600 Men modulo operatør er slags pæne. 948 00:44:25,600 --> 00:44:28,630 Hvad det gør, er det faktisk vender du resten af 949 00:44:28,630 --> 00:44:31,750 dividere to tal. 950 00:44:31,750 --> 00:44:34,680 Så hvis du husker på lang division, når du ville, sige, 951 00:44:34,680 --> 00:44:40,100 do 74 divideret med 3, ville du skrive det, overføre, 952 00:44:40,100 --> 00:44:43,260 trække fra, og derefter i slutningen nummeret i bunden er 953 00:44:43,260 --> 00:44:44,050 resten. 954 00:44:44,050 --> 00:44:47,120 Nå, hvad modulo gør det faktisk bare giver dig det. 955 00:44:47,120 --> 00:44:51,290 Så 74 modulo 3 ville give dig 2. 956 00:44:51,290 --> 00:44:56,310 Tilsvarende, 10 modulo 2 giver dig 0, fordi der ikke er nogen 957 00:44:56,310 --> 00:44:59,340 Resten når du dividere 10 med 2. 958 00:44:59,340 --> 00:45:03,940 6 modulo 5, godt 5 går i 6 en gange og derefter 959 00:45:03,940 --> 00:45:05,900 den har en tilovers. 960 00:45:05,900 --> 00:45:09,930 Så hvis du har 7 modulo 9, godt 9 er større end 7. 961 00:45:09,930 --> 00:45:11,830 Så det kan ikke gå andre tidspunkter. 962 00:45:11,830 --> 00:45:15,560 Så det giver mening, at returværdien er 7. 963 00:45:15,560 --> 00:45:21,590 Så hvis du tænker over modulo, hvordan det giver dig den resterende 964 00:45:21,590 --> 00:45:25,170 efter at du deler noget, du kan slags se, hvordan du 965 00:45:25,170 --> 00:45:27,490 måske kunne bruge den i Greedy, right? 966 00:45:30,340 --> 00:45:34,170 Så hvis du slags kombinere modulo måske med opdelingen 967 00:45:34,170 --> 00:45:36,410 operatør, sådan noget, så er du måske have en cool 968 00:45:36,410 --> 00:45:38,870 slags Mathy måde at nærme sig problemet sæt. 969 00:45:44,010 --> 00:45:46,090 >> Så nu, hvor vi ved, at der er et par forskellige 970 00:45:46,090 --> 00:45:48,350 måder, vi kunne gøre dette - der er helt sikkert en masse 971 00:45:48,350 --> 00:45:54,160 forskellige måder at selv skrive imens sløjfer. 972 00:45:54,160 --> 00:45:57,020 Så jeg har skrevet nogle pseudokode her. 973 00:45:57,020 --> 00:46:01,760 Det er måske ikke være identisk med den form for skelet af din 974 00:46:01,760 --> 00:46:02,460 kode, som du skriver. 975 00:46:02,460 --> 00:46:05,580 Men det væsentlige, processen og tankegang er 976 00:46:05,580 --> 00:46:06,940 ligesom vi diskuterede. 977 00:46:06,940 --> 00:46:10,310 Så det første, er den første linje siger at få en vis mængde 978 00:46:10,310 --> 00:46:12,490 i dollar. 979 00:46:12,490 --> 00:46:16,960 Og så implicit er der konvertere det til cents. 980 00:46:16,960 --> 00:46:20,540 Så mens kvartaler kan bruges, vi ønsker at 981 00:46:20,540 --> 00:46:21,750 øge tæller. 982 00:46:21,750 --> 00:46:24,360 Og så ønsker vi at mindske mængden, den værdi, 983 00:46:24,360 --> 00:46:25,300 vi vender tilbage. 984 00:46:25,300 --> 00:46:28,170 Som du kan se her, er det ikke helt C. Men jeg har også 985 00:46:28,170 --> 00:46:31,550 indrykket ting, jeg sætter mine betingelser inde i 986 00:46:31,550 --> 00:46:32,190 parenteser. 987 00:46:32,190 --> 00:46:34,370 >> Så den slags får mig i gang. 988 00:46:34,370 --> 00:46:36,620 Og så senere, kan jeg bare kigge op syntaksen. 989 00:46:36,620 --> 00:46:40,230 Ofte den sværeste del virkelig om et problem er, at 990 00:46:40,230 --> 00:46:41,860 forstå, hvad du skal gøre. 991 00:46:41,860 --> 00:46:44,610 Så når du skriver det ned, så er det meget nemmere at så 992 00:46:44,610 --> 00:46:45,810 oversætte til pseudokode. 993 00:46:45,810 --> 00:46:49,340 Og så fra pseudokode, syntaks kommer temmelig let. 994 00:46:49,340 --> 00:46:52,140 Så vi se, mens kvartaler, kan anvendes, øge tæller, 995 00:46:52,140 --> 00:46:53,220 nedsætte mængden. 996 00:46:53,220 --> 00:46:57,310 Mens dimes kan bruges, så du foretage det så videre og så 997 00:46:57,310 --> 00:47:00,670 frem, indtil du har opbrugt alle dine småpenge. 998 00:47:00,670 --> 00:47:03,410 Du udskriver antallet af mønter anvendes, hvilket vil være 999 00:47:03,410 --> 00:47:06,620 minimumsbeløb for at gøre brugeren indtastet værdi. 1000 00:47:06,620 --> 00:47:09,370 Og der har du din Grådige algoritme. 1001 00:47:09,370 --> 00:47:13,960 Og så snart du er færdig med det, har du også færdig Pset 0. 1002 00:47:13,960 --> 00:47:16,155 >> Er der nogen der har nogen spørgsmål om noget? 1003 00:47:19,420 --> 00:47:19,780 Ok. 1004 00:47:19,780 --> 00:47:22,900 Tja, jeg vil holde sig til en lille smule efter, hvis du har 1005 00:47:22,900 --> 00:47:23,970 eventuelle spørgsmål. 1006 00:47:23,970 --> 00:47:24,940 Dette var walkthrough 1. 1007 00:47:24,940 --> 00:47:26,190 Tak for at komme.