1 00:00:00,000 --> 00:00:05,410 2 00:00:05,410 --> 00:00:07,640 >> DOUG LLOYD: Bone, do ni parolu pri cikloj. 3 00:00:07,640 --> 00:00:10,015 Do cikloj estas speco de malvarmeta ĉar ili permesas via programo 4 00:00:10,015 --> 00:00:12,050 ekzekuti liniojn de kodo denove kaj denove kaj super. 5 00:00:12,050 --> 00:00:15,600 Ree, sen devi kopii kaj gluu aŭ alie ripeti ilin. 6 00:00:15,600 --> 00:00:17,630 Ekzistas tri gravaj specoj de cikloj, vi vidos. 7 00:00:17,630 --> 00:00:21,010 Vi probable trovos uzi ĉiu kiel vi progresi tra CS50. 8 00:00:21,010 --> 00:00:22,940 Iuj de tiuj cikloj estas bela familiara al vi de Scratch, 9 00:00:22,940 --> 00:00:25,814 tiom pli, kiel ni faris kun Conditionals, ni metos ilin flank 10 00:00:25,814 --> 00:00:28,930 se estas analogio Ni atingu. 11 00:00:28,930 --> 00:00:33,600 >> Unue estas eterne de Scratch, kiu komparas al dum (vera). 12 00:00:33,600 --> 00:00:35,390 Jen kion ni nomas senfina ciklo. 13 00:00:35,390 --> 00:00:38,560 La linioj de kodo inter la krispa krampoj, tre kiel la puzlo pecoj 14 00:00:38,560 --> 00:00:41,190 ke tauxgas interne la C de la eterne bloki, 15 00:00:41,190 --> 00:00:45,290 ekzekutos ree el supro sube, super kaj super kaj super, 16 00:00:45,290 --> 00:00:46,085 ĉiam. 17 00:00:46,085 --> 00:00:48,710 Post ĉiu, se vi memoras nian diskuto de Buleaj esprimoj, 18 00:00:48,710 --> 00:00:51,060 veraj estas ĉiam vera. 19 00:00:51,060 --> 00:00:53,250 Do se ni faras io tiel longa kiel vera 20 00:00:53,250 --> 00:00:58,227 estas true-- ŝajnas iom silly-- vera estas ĉiam vera, do gxi devos ĉiam kuras. 21 00:00:58,227 --> 00:01:00,060 Ĝi kuros eterne kaj ĉiam kaj eterne, ĝis ni 22 00:01:00,060 --> 00:01:02,900 trovi rimedon por rompi el ĝi kun paŭzo deklaro, kiu denove, 23 00:01:02,900 --> 00:01:06,350 ni vidis nelonge ni parolis pri ŝaltilo. 24 00:01:06,350 --> 00:01:08,725 >> Aŭ alimaniere ĝuste mortigi nian programo, kiu por iu, 25 00:01:08,725 --> 00:01:11,110 se vi iam trovos vin en situacio kun senfina ciklo 26 00:01:11,110 --> 00:01:13,484 kaj vi ne scias kiel halti via programo kurado. 27 00:01:13,484 --> 00:01:16,527 Nur batis kontrolo kaj C kaj ke mortigos vian programon por vi. 28 00:01:16,527 --> 00:01:18,360 Sed tiu estas alia nomata senfina ciklo. 29 00:01:18,360 --> 00:01:19,818 Estas ciklo kiu kuros eterne. 30 00:01:19,818 --> 00:01:22,570 31 00:01:22,570 --> 00:01:25,610 Nun, dum cikloj estas ne ĉiam senfina, ĉar ankaŭ 32 00:01:25,610 --> 00:01:27,880 ni povas anstataŭigi la Bulea esprimon kun io 33 00:01:27,880 --> 00:01:29,867 iom pli utila ol nur veraj. 34 00:01:29,867 --> 00:01:30,950 Do jen alia ekzemplo. 35 00:01:30,950 --> 00:01:34,600 Dum kaj kelkaj Buleaj esprimo kaj tiam buklaj krampoj. 36 00:01:34,600 --> 00:01:38,310 Tio estas sufiĉe multe analoga ripeti ĝis, de nulo. 37 00:01:38,310 --> 00:01:40,700 Kvankam en dua, mi klarigi la diferencon. 38 00:01:40,700 --> 00:01:44,310 >> Do en C, se la Bulea esprimo ene de la dum buklo 39 00:01:44,310 --> 00:01:47,980 taksas al vera, la linioj de kodo inter la krispa krampoj 40 00:01:47,980 --> 00:01:51,900 ekzekutos ripete denove kaj denove kaj super ĝis Bulea esprimo 41 00:01:51,900 --> 00:01:55,174 taksas al falsa. 42 00:01:55,174 --> 00:01:57,340 Do ekzemple, vi eble havas ian vendotablo. 43 00:01:57,340 --> 00:02:01,440 Do diru vi komence de tiu buklo diri int x egalas nulo. 44 00:02:01,440 --> 00:02:06,370 Dum x estas malpli ol 100, do paro aferoj ene ol krispa krampoj, 45 00:02:06,370 --> 00:02:10,570 tiam en la fino de via ciklo, vi diru x plus plus, vi pliigante x. 46 00:02:10,570 --> 00:02:13,360 Eventuale x ricevos 100 kaj vi volas 47 00:02:13,360 --> 00:02:15,760 halti ĉar la kondiĉo x estas malpli ol 100 48 00:02:15,760 --> 00:02:19,416 ne plu estos vera kiel Kiam x estas egala al 100. 49 00:02:19,416 --> 00:02:21,820 100 estas ne malpli ol 100. 50 00:02:21,820 --> 00:02:25,870 >> Nun iom konfuze, la konduto de la grataĵo bloko estas inversa. 51 00:02:25,870 --> 00:02:29,110 Do esti vere zorgema se tiu estas via unua incursión en uzanta cikloj. 52 00:02:29,110 --> 00:02:33,630 Esence, la ripeto ĝis bloko en Scratch 53 00:02:33,630 --> 00:02:35,970 ripetos ion super kaj denove kaj denove, 54 00:02:35,970 --> 00:02:40,460 ĝis la esprimo, la booleana esprimo en la sesangulo estas vera. 55 00:02:40,460 --> 00:02:43,860 Do estos teni faranta ĝin ĝis ĝi estas vera. 56 00:02:43,860 --> 00:02:48,881 Dume, la dum buklo daŭre faros ĝin ĝis ĝi estas falsa. 57 00:02:48,881 --> 00:02:51,630 Do ili estas sufiĉe similaj, sed ekzistas tiu malgranda distingo nur 58 00:02:51,630 --> 00:02:55,140 bone gardi speciale kiel vi faras via unua incursión de transitioning 59 00:02:55,140 --> 00:02:58,149 grati en c. 60 00:02:58,149 --> 00:03:00,190 La sekva ia buklo estas efektive sufiĉe simila. 61 00:03:00,190 --> 00:03:02,860 Ĝi nomiĝas la do dum ciklo. 62 00:03:02,860 --> 00:03:07,060 Ĉi buklo ekzekutos ĉiuj linioj de kodo inter la krispa krampoj tuj, 63 00:03:07,060 --> 00:03:09,530 kaj tiam kontrolos la Bulea esprimo. 64 00:03:09,530 --> 00:03:11,700 Se la Bulea esprimo taksas al vera, 65 00:03:11,700 --> 00:03:14,340 ĝi reiros kaj ripetu ke procezon denove kaj denove 66 00:03:14,340 --> 00:03:17,690 kaj super ĝis la Bulea esprimo taksas al falsa. 67 00:03:17,690 --> 00:03:23,370 Do tiu buklo, malkiel dum buklo, estas garantiita kuri almenaŭ unu fojon. 68 00:03:23,370 --> 00:03:26,080 Tio povas esti bela utila. 69 00:03:26,080 --> 00:03:28,011 >> Laste, ni havas por buklo. 70 00:03:28,011 --> 00:03:30,010 Por bukloj estas speco de sintakse nealloga 71 00:03:30,010 --> 00:03:32,330 kaj ekzistas multe irante sur tie, do toleru min 72 00:03:32,330 --> 00:03:34,640 kiel ni provi kaj rompi tiujn pecojn aparte. 73 00:03:34,640 --> 00:03:36,810 Ĝenerale, la uzkazo de a por buklo estas vi 74 00:03:36,810 --> 00:03:40,136 volas ripeti ion specifa nombro da tempoj. 75 00:03:40,136 --> 00:03:42,010 En tiu ekzemplo tie, Mi havas la ripeto bloko 76 00:03:42,010 --> 00:03:44,010 From Scratch, kiu estas analoga al la por buklo 77 00:03:44,010 --> 00:03:47,340 en C, ripetante io 10 fojojn. 78 00:03:47,340 --> 00:03:49,250 Kaj la por buklo sur la maldekstra, kiu 79 00:03:49,250 --> 00:03:51,410 Estas kvar buklo ke farus la samon. 80 00:03:51,410 --> 00:03:52,570 Ĉi irus 10 fojojn. 81 00:03:52,570 --> 00:03:56,720 Kalkulanta de nulo, ni pliigo ĉiu trairo de la buklo. 82 00:03:56,720 --> 00:03:59,220 Kaj ni tenas faranta tion ĝis mi estas malpli ol 10. 83 00:03:59,220 --> 00:04:00,134 >> Do kio okazas? 84 00:04:00,134 --> 00:04:01,550 Ekzistas tuta multajn kodo tie. 85 00:04:01,550 --> 00:04:03,424 Ni rompi ĝin malsupren al kio okazas paŝo 86 00:04:03,424 --> 00:04:05,684 post paŝo kiel ni trarompos por buklo. 87 00:04:05,684 --> 00:04:08,350 La unua afero kiu okazis estas la vendotablo variablo estas centro. 88 00:04:08,350 --> 00:04:11,970 Ĉio maldekstren de tiu unua punktokomo ene la parantezoj 89 00:04:11,970 --> 00:04:12,970 estas ekzekutita. 90 00:04:12,970 --> 00:04:15,180 En tiu kazo, ni estas dirante int i egalas 0. 91 00:04:15,180 --> 00:04:18,709 Deklarante nova variablo nomata mi, ke variabloj estas tipo entjero 92 00:04:18,709 --> 00:04:22,570 kaj ni dirante la valoron ene ke variablo tuj estos nulo. 93 00:04:22,570 --> 00:04:25,480 >> La dua afero ni fari estas ni tiam tuj taksi 94 00:04:25,480 --> 00:04:26,750 la Bulea esprimo. 95 00:04:26,750 --> 00:04:30,100 Bulea esprimo estas en la mezo de la du punktokomojn. 96 00:04:30,100 --> 00:04:31,360 Mi estas malpli ol 10. 97 00:04:31,360 --> 00:04:32,410 Tio estas vera ĉi tie, ĉu ne? 98 00:04:32,410 --> 00:04:36,030 Ni ĵus diris i estas egala al nulo, kaj tiel 0 estas malpli ol 10, 99 00:04:36,030 --> 00:04:38,040 kaj por ke kondiĉo estas veraj kaj ni nun 100 00:04:38,040 --> 00:04:40,640 procedi ekzekuti la korpon de la banto. 101 00:04:40,640 --> 00:04:41,480 Se ĝi estis falsa. 102 00:04:41,480 --> 00:04:46,380 Se, ekzemple, mi diris anstataŭ i egalas 0 tie Mi diris i egalas 15, 103 00:04:46,380 --> 00:04:47,820 int i egalas 15. 104 00:04:47,820 --> 00:04:51,450 Nu 15 ne estas malpli ol 10, do ni neniam eniras la korpon de la ciklo 105 00:04:51,450 --> 00:04:55,450 ĉar la Bulea esprimo tie taksus esti falsa. 106 00:04:55,450 --> 00:04:59,060 >> Post ni trairu de supro al malsupro, ni renkontas ke fermante krispa krampoj, 107 00:04:59,060 --> 00:05:00,830 tria afero okazas. 108 00:05:00,830 --> 00:05:03,840 La vendotablo variablo estas incremented, aŭ prefere, la linioj 109 00:05:03,840 --> 00:05:07,790 de kodo de komunikaĵo post la dua punktokomo ene de la 110 00:05:07,790 --> 00:05:10,500 por bukloj parentezoj estas ekzekutita. 111 00:05:10,500 --> 00:05:13,250 Do ni komencu marsxi per dirante int i egalas 0. 112 00:05:13,250 --> 00:05:15,770 Tiam ni kontrolu ĉu la Bulea esprimo estas vera. 113 00:05:15,770 --> 00:05:17,469 0 estas malpli ol 10 do ĝi estas vera. 114 00:05:17,469 --> 00:05:19,510 Do ni tuj procedi en la korpon la buklo. 115 00:05:19,510 --> 00:05:22,676 Aĵoj okazos ene la buklo, kaj kiam ni renkontas ke fermante krispa 116 00:05:22,676 --> 00:05:25,660 streĉa, la sekva afero ni fari estas ni diru i plus, plus. 117 00:05:25,660 --> 00:05:28,860 Mi estis nulo nun i estas unu. 118 00:05:28,860 --> 00:05:33,100 Tiam, ni denove kontroli la valoron de la Bulea esprimo en la mezo. 119 00:05:33,100 --> 00:05:34,900 Unu estas malpli ol 10. 120 00:05:34,900 --> 00:05:38,325 Do ni iros tra ĉi procesi denove kaj denove. 121 00:05:38,325 --> 00:05:40,590 Ni akiros la fermo krispa streĉa denove. 122 00:05:40,590 --> 00:05:44,090 Ni pliigo i el 1 ĝis 2 kaj de 2 al 3. 123 00:05:44,090 --> 00:05:48,290 Kaj tiel plu kaj tiel plu kaj tiel plu, ĝis eventuale i valoro iĝas 10. 124 00:05:48,290 --> 00:05:49,950 Estas 10 malpli ol 10? 125 00:05:49,950 --> 00:05:51,200 No. 126 00:05:51,200 --> 00:05:53,800 Kalkulanta de 0, ni iris tra 10 ripetoj de buklo. 127 00:05:53,800 --> 00:05:57,204 Ni ripetis 10 fojojn, nur kiel ni faris en la Scratch bloko. 128 00:05:57,204 --> 00:05:59,370 Kaj tiel tio estas esence la procezo por kvar buklo. 129 00:05:59,370 --> 00:06:01,630 >> Nun forprenanta la fakta kodo kaj metante ĝin 130 00:06:01,630 --> 00:06:05,120 en nur kelkaj bazaj ĝeneralaj deklaroj. 131 00:06:05,120 --> 00:06:06,550 Jen kio okazas. 132 00:06:06,550 --> 00:06:09,290 Ĉiuj deklaroj en komenci estas ekzekutitaj unue. 133 00:06:09,290 --> 00:06:11,260 Vi povus havi pli ol unu. 134 00:06:11,260 --> 00:06:13,440 Tiam, la bulea esprimo estas markita. 135 00:06:13,440 --> 00:06:17,850 Se la esprimo taksas al vera, ekzekuti la korpon la buklo iam. 136 00:06:17,850 --> 00:06:21,060 Se la esprimo taksas falsa, ni faris. 137 00:06:21,060 --> 00:06:23,040 Ni ne agos korpo de la iteracio ajn. 138 00:06:23,040 --> 00:06:25,530 Post ni ekzekutitaj la korpo la buklo iam, 139 00:06:25,530 --> 00:06:29,487 ni tiam agos en la pliigo parto tie. 140 00:06:29,487 --> 00:06:31,820 Kiu estas kutime tuj estos ion kiel i plus, plus 141 00:06:31,820 --> 00:06:34,510 aŭ io simila, ke modifas vendotablo variablo. 142 00:06:34,510 --> 00:06:37,390 Tiam, post ni pliigo, ni kontroli la esprimo denove 143 00:06:37,390 --> 00:06:41,120 kaj ripeti tiujn paŝojn denove kaj kaj super ĝis la esprimo estas 144 00:06:41,120 --> 00:06:42,890 jam ne vera. 145 00:06:42,890 --> 00:06:44,469 >> Do kio estas la uzo kazoj por buklo? 146 00:06:44,469 --> 00:06:46,760 Uzu vi uzas dum buklo kiam vi volas buklo ripeti 147 00:06:46,760 --> 00:06:51,200 nekonata nombro de fojoj, sed ĝi eble povus ne kuras. 148 00:06:51,200 --> 00:06:53,940 Vere komuna ekzemplo de tempeto looping uzata 149 00:06:53,940 --> 00:06:56,480 estas ekzekuti la kontrolo de fluo por ludo. 150 00:06:56,480 --> 00:06:59,040 Vi eble ne scias, kiel longe la uzanto tuj ludos, 151 00:06:59,040 --> 00:07:01,440 sed vi volas lasi fari la samon. 152 00:07:01,440 --> 00:07:04,970 Ĝisdatigante la poziciojn de diversaj spiritoj sur la tabulo. 153 00:07:04,970 --> 00:07:07,490 Vi volas subteni tion movanta ĉiutempe 154 00:07:07,490 --> 00:07:09,110 sed vi ne scias, kiam la uzanto tuj ĉesas ludi 155 00:07:09,110 --> 00:07:10,450 aŭ kiam ili estas tuj kuri el vivojn. 156 00:07:10,450 --> 00:07:12,741 Do momenton buklo estas vere bona por io tia. 157 00:07:12,741 --> 00:07:14,130 Jen bona uzo kazo. 158 00:07:14,130 --> 00:07:16,230 >> Por fari dum buklo, estas sufiĉe simila. 159 00:07:16,230 --> 00:07:19,746 Vi volas buklo ripeti nekonata numeron de fojoj, sed almenaŭ unufoje. 160 00:07:19,746 --> 00:07:22,370 Vi povus uzi tiun por ludo tro, sed vere komuna uzo kazo 161 00:07:22,370 --> 00:07:24,420 estas instigante la uzanto por enigo. 162 00:07:24,420 --> 00:07:28,609 Ĝenerale, oni povas diri ion kiel, donu al mi pozitiva entjero, 163 00:07:28,609 --> 00:07:30,650 kaj vi eble metis tiun ene de do dum buklo. 164 00:07:30,650 --> 00:07:33,900 Do estos ĉiam peti ilin ĉe Almenaŭ unufoje por pozitiva entjero. 165 00:07:33,900 --> 00:07:36,850 Se ili donas vin pozitiva entjero, vi eble rompi la buklo. 166 00:07:36,850 --> 00:07:37,599 Vi povus esti farita. 167 00:07:37,599 --> 00:07:39,900 La Bulea esprimo en la fari dum eble estos falsa. 168 00:07:39,900 --> 00:07:41,137 >> Kaj vi ne petos ilin denove. 169 00:07:41,137 --> 00:07:44,470 Se ili donas vin negativa nombro kie Ili tajpas iun vorton aŭ ion ke estas 170 00:07:44,470 --> 00:07:46,630 ne vere utila al vi, vi povus uzi la 171 00:07:46,630 --> 00:07:49,770 do dum buklo iri reen kaj fari ĝi denove kaj denove kaj denove. 172 00:07:49,770 --> 00:07:52,410 Vi sendube volas demandi ilin doni vin nombro iam, 173 00:07:52,410 --> 00:07:56,350 sed vi ne scias kiomfoje post tio ili eble estos plagoj. 174 00:07:56,350 --> 00:08:00,540 Kaj tiel do dum ĝi estas granda uzo kazo por instigante la uzanto por enigo. 175 00:08:00,540 --> 00:08:03,060 Kaj por bukloj uzi kazo tipe estas kiam 176 00:08:03,060 --> 00:08:06,230 vi volas ripeti maŝo diskreta plurfoje, 177 00:08:06,230 --> 00:08:08,230 kvankam vi ne fariĝu sciu la nombron de tempoj 178 00:08:08,230 --> 00:08:10,040 la momento la programo estas kompilita. 179 00:08:10,040 --> 00:08:15,510 >> Do ekzemple, eble vi havas programon kie vi instigas la uzanton por nombro. 180 00:08:15,510 --> 00:08:17,660 Kaj ili eniras 100. 181 00:08:17,660 --> 00:08:20,510 Kaj tiam via por buklo tiuokaze kuras 100 fojojn. 182 00:08:20,510 --> 00:08:22,480 Aŭ eble ili eniras 1,000 en via programo 183 00:08:22,480 --> 00:08:24,570 kaj poste ekzekuti la buklo 1.000 fojojn. 184 00:08:24,570 --> 00:08:26,987 Ĝi estas specifa nombro da tempoj. 185 00:08:26,987 --> 00:08:28,820 Ili ne nepre scias kion tiu nombro 186 00:08:28,820 --> 00:08:31,010 estas la momento programo estas kompilita. 187 00:08:31,010 --> 00:08:35,010 Ne estas kiel dum buklo kie povus esti malfinio. 188 00:08:35,010 --> 00:08:37,127 Estas iom nombro ke vi simple ne scias. 189 00:08:37,127 --> 00:08:39,210 Nun kvankam mi skizis ĉiuj tiuj uzon kazoj, 190 00:08:39,210 --> 00:08:41,501 Vi devus scii ke en bela multe ĉiu cirkonstanco, 191 00:08:41,501 --> 00:08:44,110 Vi povas interŝanĝi la tutan tri de ĉi tiuj cikloj. 192 00:08:44,110 --> 00:08:46,890 Vi povas uzi por buklo kie alie uzas dum buklo. 193 00:08:46,890 --> 00:08:49,860 Vi povas uzi por buklo kien oni kredus uzu do dum buklo kaj tiel plu. 194 00:08:49,860 --> 00:08:53,680 Ĝi povas esti iom malfacila foje, do ĝenerale estas bona praktiko 195 00:08:53,680 --> 00:08:55,140 adheri al tipa uzo kazo. 196 00:08:55,140 --> 00:08:57,599 Uzu do dum buklo se vi volis iun fojon, almenaŭ. 197 00:08:57,599 --> 00:09:00,514 Uzu por ciklo, se vi volas fari io specifa nombro da tempoj. 198 00:09:00,514 --> 00:09:03,730 Post ĉiu, jen kial estas tri malsamaj specoj de cikloj. 199 00:09:03,730 --> 00:09:06,172 >> Do ili povas esti uzataj en la dekstra kunteksto. 200 00:09:06,172 --> 00:09:07,880 Sed vi povas interŝanĝi ili se vi volas. 201 00:09:07,880 --> 00:09:10,790 Se vi sentas komforte kun dum cikloj kaj vi ĉiam volas uzi dum cikloj. 202 00:09:10,790 --> 00:09:12,623 Estas iu kiu vi povas fari, kvankam ĝi 203 00:09:12,623 --> 00:09:15,590 povus esti iom sintakse Tricky, kie por buklo 204 00:09:15,590 --> 00:09:17,850 estus multe pli simpla. 205 00:09:17,850 --> 00:09:21,100 >> Mi nomiĝas Doug Lloyd kaj ĉi tiu estas CS50. 206 00:09:21,100 --> 00:09:22,688