1 00:00:05,410 --> 00:00:07,640 DAGS LOIDS: Labi,parunāsim par cilpām. 2 00:00:07,640 --> 00:00:09,845 Tieši tāpēc cilpas ir lieliskas, ka tās ļauj programmai izpildīt koda 3 00:00:09,845 --> 00:00:12,050 rindas atkal un atkal un atkal. 4 00:00:12,050 --> 00:00:13,825 Atkārtoti, bez nepieciešamības tās kopēt un ielīmēt vai citādi 5 00:00:13,825 --> 00:00:15,600 atkārtot. 6 00:00:15,600 --> 00:00:17,630 Ir trīs galvenie cilpu veidi. 7 00:00:17,630 --> 00:00:21,010 Jums, iespējams, būs iespēja izmantot katru no tiem, pārejot uz CS50. 8 00:00:21,010 --> 00:00:23,650 Dažas no šīm cilpām jums ir diezgan pazīstamas no Scratch valodas, 9 00:00:23,650 --> 00:00:26,290 tāpēc, tāpat kā mēs to darījām ar nosacījumiem, mēs tās novietosim 10 00:00:26,290 --> 00:00:28,930 blakus, ja ir kāda analoģija, kurai varam sekot. 11 00:00:28,930 --> 00:00:33,600 Pirmā ir forever from Scratch, kas ir salīdzināms ar while (true). 12 00:00:33,600 --> 00:00:35,390 To mēs saucam par bezgalīgu cilpu. 13 00:00:35,390 --> 00:00:38,955 Koda rindas starp figūriekavām, kas ietilpst forever bloka C 14 00:00:38,955 --> 00:00:42,520 iekšpusē, līdzīgi kā puzles gabaliņi, tiks izpildītas atkārtoti no 15 00:00:42,520 --> 00:00:46,085 augšas uz leju, atkal un atkal un atkal, mūžīgi. 16 00:00:46,085 --> 00:00:48,572 Galu galā, ja atceraties mūsu diskusiju par Būla izteiksmēm: patiess 17 00:00:48,572 --> 00:00:51,060 vienmēr ir patiess. 18 00:00:51,060 --> 00:00:53,449 Tātad, ja mēs darām kaut ko tik ilgi, kamēr patiess ir patiess — tas 19 00:00:53,449 --> 00:00:55,838 šķiet nedaudz muļķīgi, jo patiess vienmēr ir patiess, tāpēc tas 20 00:00:55,838 --> 00:00:58,227 vienmēr darbosies. 21 00:00:58,227 --> 00:01:00,934 Tas darbosies mūžīgi mūžos, līdz mēs atradīsim veidu, kā izkļūt no 22 00:01:00,934 --> 00:01:03,642 tā, izmantojot pārtraukuma priekšrakstu, ko atkal redzējām pirms 23 00:01:03,642 --> 00:01:06,350 neilga laika, kad runājām par slēdžiem. 24 00:01:06,350 --> 00:01:08,728 Vai pretējā gadījumā vienkārši nogaliniet mūsu programmu, kas starp 25 00:01:08,728 --> 00:01:11,106 citu, ja kādreiz nonākat situācijā ar bezgalīgu cilpu un nezināt, kā 26 00:01:11,106 --> 00:01:13,484 apturēt programmas darbību. 27 00:01:13,484 --> 00:01:15,005 Vienkārši nospiediet Control un C, un tas iznīcinās jūsu programmu 28 00:01:15,005 --> 00:01:16,527 jūsu vietā. 29 00:01:16,527 --> 00:01:18,360 Bet atkal, to sauc par bezgalīgu cilpu. 30 00:01:18,360 --> 00:01:19,818 Tā ir cilpa, kas darbosies mūžīgi. 31 00:01:22,570 --> 00:01:25,002 Tagad, lai gan cilpas ne vienmēr ir bezgalīgas, jo arī mēs varam 32 00:01:25,002 --> 00:01:27,434 aizstāt Būla izteiksmi ar kaut ko nedaudz noderīgāku, nekā tikai 33 00:01:27,434 --> 00:01:29,867 vērtība patiess. 34 00:01:29,867 --> 00:01:30,950 Tātad, šeit ir vēl viens piemērs. 35 00:01:30,950 --> 00:01:34,600 While un dažas Būla izteiksmes, un tad figūriekavas. 36 00:01:34,600 --> 00:01:38,310 Tas ir diezgan līdzīgi, lai to atkārtotu no nulles. 37 00:01:38,310 --> 00:01:40,700 Lai gan pēc brīža es paskaidrošu atšķirību. 38 00:01:40,700 --> 00:01:45,524 Tātad C valodā, ja Būla izteiksme while cilpā tiek novērtēta kā 39 00:01:45,524 --> 00:01:50,349 patiesa, koda rindas starp figūriekavām tiks izpildītas atkārtoti 40 00:01:50,349 --> 00:01:55,174 atkal un atkal, līdz Būla izteiksme tiek novērtēta kā nepatiesa. 41 00:01:55,174 --> 00:01:57,340 Piemēram, jums varētu būt sava veida skaitītājs. 42 00:01:57,340 --> 00:01:59,390 Tāpēc, piemēram, šīs cilpas sākumā jūs sakāt, ka int x ir vienāds ar 43 00:01:59,390 --> 00:02:01,440 nulli. 44 00:02:01,440 --> 00:02:06,005 Kamēr x ir mazāks par 100, veiciet dažas darbības figūriekavās, pēc 45 00:02:06,005 --> 00:02:10,570 tam cilpas beigās sakot x plus plus, jūs palielināsiet x. 46 00:02:10,570 --> 00:02:14,993 Galu galā x sasniegs 100, un jūs apstāsieties, jo nosacījums x ir 47 00:02:14,993 --> 00:02:19,416 mazāks par 100 vairs nebūs patiess, kamēr x ir vienāds ar 100. 48 00:02:19,416 --> 00:02:21,820 100 nav mazāks par 100. 49 00:02:21,820 --> 00:02:25,870 Tagad nedaudz maldinoši: Scratch bloka darbība ir pretēja. 50 00:02:25,870 --> 00:02:27,490 Tāpēc esiet ļoti uzmanīgi, ja šis ir jūsu pirmais mēģinājums izmantot 51 00:02:27,490 --> 00:02:29,110 cilpas. 52 00:02:29,110 --> 00:02:34,785 Būtībā Scratch valodā atkārtošana līdz blokam notiks atkal un atkal, 53 00:02:34,785 --> 00:02:40,460 un atkal, līdz izteiksme, Būla izteiksme sešstūrī ir patiesa. 54 00:02:40,460 --> 00:02:43,860 Tāpēc tas turpinās to darīt, līdz tā būs patiesa. 55 00:02:43,860 --> 00:02:48,881 Tikmēr while cilpa turpinās to darīt, līdz tā būs nepatiesa. 56 00:02:48,881 --> 00:02:51,970 Tātad tās ir diezgan līdzīgas, taču ir šī mazā atšķirība, no kuras 57 00:02:51,970 --> 00:02:55,059 jāuzmanās, jo īpaši, veicot pirmo mēģinājumu pāriet uz Scratch C 58 00:02:55,059 --> 00:02:58,149 valodā. 59 00:02:58,149 --> 00:03:00,190 Nākamā veida cilpa patiesībā ir diezgan līdzīga. 60 00:03:00,190 --> 00:03:02,860 To sauc par do while cilpu. 61 00:03:02,860 --> 00:03:06,195 Šī cilpa vispirms izpildīs visas koda rindas figūriekavās un pēc tam 62 00:03:06,195 --> 00:03:09,530 pārbaudīs Būla izteiksmi. 63 00:03:09,530 --> 00:03:12,250 Ja Būla izteiksmes vērtība ir patiesa, tā atgriezīsies un atkārtos šo 64 00:03:12,250 --> 00:03:14,970 procesu atkal un atkal, līdz Būla izteiksme tiks novērtēta kā 65 00:03:14,970 --> 00:03:17,690 nepatiesa. 66 00:03:17,690 --> 00:03:23,370 Tātad šī cilpa, atšķirībā no while cilpas, strādās vismaz vienu reizi. 67 00:03:23,370 --> 00:03:26,080 Tas var būt diezgan noderīgi. 68 00:03:26,080 --> 00:03:28,011 Visbeidzot, mums ir for cilpa. 69 00:03:28,011 --> 00:03:31,325 For cilpas ir sintaktiski nepievilcīgas, un šeit notiek daudz, tāpēc 70 00:03:31,325 --> 00:03:34,640 Vk esiet ar mani, kad mēģinām sadalīt šos gabalus. 71 00:03:34,640 --> 00:03:37,388 Parasti for cilpas lietojums ir tāds - jūs vēlaties kaut ko atkārtot 72 00:03:37,388 --> 00:03:40,136 noteiktu reižu skaitu. 73 00:03:40,136 --> 00:03:43,738 Šajā piemērā man ir atkārtots Scratch bloks, kas ir analogs for 74 00:03:43,738 --> 00:03:47,340 cilpai C valodā, atkārtojot kaut ko 10 reizes. 75 00:03:47,340 --> 00:03:51,410 Kreisajā pusē ir for cilpa, kas ir 4 cilpa, kas darītu to pašu. 76 00:03:51,410 --> 00:03:52,570 Tas notiks 10 reizes. 77 00:03:52,570 --> 00:03:56,720 Skaitot no nulles, mēs palielinām katru cilpas gājienu. 78 00:03:56,720 --> 00:03:59,220 Un mēs turpinām to darīt, līdz i ir mazāks par 10. 79 00:03:59,220 --> 00:04:00,134 Tātad, kas notiek? 80 00:04:00,134 --> 00:04:01,550 Tur ir ļoti daudz koda. 81 00:04:01,550 --> 00:04:03,617 Apskatīsim, kas notiek soli pa solim, kamēr mēs urbjamies cauri for 82 00:04:03,617 --> 00:04:05,684 cilpai. 83 00:04:05,684 --> 00:04:08,350 Pirmā lieta, kas notika, ir - skaitītāja mainīgais centrs. 84 00:04:08,350 --> 00:04:12,970 Tiek izpildīts viss, kas atrodas pa kreisi no pirmā semikola iekavās. 85 00:04:12,970 --> 00:04:15,180 Šajā gadījumā mēs sakām, ka int i ir vienāds ar 0. 86 00:04:15,180 --> 00:04:18,875 Jauna mainīgā ar nosaukumu i deklarēšana, tie mainīgie ir tipa vesels 87 00:04:18,875 --> 00:04:22,570 skaitlis, un mēs sakām, ka šī mainīgā vērtība būs nulle. 88 00:04:22,570 --> 00:04:26,750 Otra lieta, ko mēs darām, ir - nekavējoties novērtēt Būla izteiksmi. 89 00:04:26,750 --> 00:04:30,100 Būla izteiksme atrodas divu semikolu vidū. 90 00:04:30,100 --> 00:04:31,360 I ir mazāk par 10. 91 00:04:31,360 --> 00:04:32,410 Šeit tā ir patiesa, vai ne? 92 00:04:32,410 --> 00:04:35,153 Mēs tikko pateicām, ka i ir vienāds ar nulli, tāpēc 0 ir mazāks par 93 00:04:35,153 --> 00:04:37,896 10, un tāpēc šis nosacījums ir patiess, un tagad mēs turpināsim 94 00:04:37,896 --> 00:04:40,640 izpildīt cilpas pamattekstu. 95 00:04:40,640 --> 00:04:41,480 Ja tas bija nepatiess. 96 00:04:41,480 --> 00:04:44,650 Ja, piemēram, i ir vienāds ar 0 vietā, es teicu, ka i ir vienāds ar 97 00:04:44,650 --> 00:04:47,820 15, int i ir vienāds ar 15. 98 00:04:47,820 --> 00:04:51,635 Nu, 15 nav mazāks par 10, tāpēc mēs nekad neienāktu cilpas 99 00:04:51,635 --> 00:04:55,450 pamattekstā, jo Būla izteiksme tur būtu novērtēta kā nepatiesa. 100 00:04:55,450 --> 00:04:58,140 Pēc tam, kad mēs ejam cauri no augšas uz leju un saskaramies ar 101 00:04:58,140 --> 00:05:00,830 fugūriekavu aizvēršanu, notiek trešā lieta. 102 00:05:00,830 --> 00:05:05,665 Skaitītāja mainīgais tiek palielināts, vai drīzāk, - tiek izpildītas 103 00:05:05,665 --> 00:05:10,500 priekšraksta koda rindas pēc otrā semikola for cilpas iekavās. 104 00:05:10,500 --> 00:05:13,250 Tāpēc mēs sākam, sakot, ka int i ir vienāds ar 0. 105 00:05:13,250 --> 00:05:15,770 Pēc tam mēs pārbaudām, vai Būla izteiksme ir patiesa. 106 00:05:15,770 --> 00:05:17,469 0 ir mazāks par, 10, tāpēc tā ir patiesa. 107 00:05:17,469 --> 00:05:19,510 Tātad, mēs turpināsim iedziļināties cilpas pamattekstā. 108 00:05:19,510 --> 00:05:22,585 Cilpā notiks pārmaiņas, un, kad mēs saskaramies ar šo figūriekavu 109 00:05:22,585 --> 00:05:25,660 aizvēršanu, nākamais, ko darām, ir - sakām i plus, plus. 110 00:05:25,660 --> 00:05:28,860 I bija nulle, tagad i ir viens. 111 00:05:28,860 --> 00:05:33,100 Pēc tam pa vidu mēs vēlreiz pārbaudām Būla izteiksmes vērtību. 112 00:05:33,100 --> 00:05:34,900 Viens ir mazāks par 10. 113 00:05:34,900 --> 00:05:38,325 Tad mēs veiksim šo procesu atkal un atkal. 114 00:05:38,325 --> 00:05:40,590 Mēs atkal nonāksim pie figūriekavu aizvēršanas. 115 00:05:40,590 --> 00:05:44,090 Mēs palielināsim i no 1 līdz 2 un no 2 līdz 3. 116 00:05:44,090 --> 00:05:46,190 Un tā tālāk, un tā tālāk, un tā tālāk, līdz beidzot i vērtība kļūst 117 00:05:46,190 --> 00:05:48,290 par 10. 118 00:05:48,290 --> 00:05:49,950 Vai 10 ir mazāks par 10? 119 00:05:49,950 --> 00:05:51,200 Nē. 120 00:05:51,200 --> 00:05:53,800 Skaitot no 0, mēs esam izgājuši cauri 10 cilpas iterācijām. 121 00:05:53,800 --> 00:05:57,204 Mēs esam atkārtojuši 10 reizes, tāpat kā Scratch blokā. 122 00:05:57,204 --> 00:05:59,370 Un tas būtībā ir četru cilpu process. 123 00:05:59,370 --> 00:06:02,245 Tagad noņemiet faktisko kodu un ievietojiet to tikai dažos vispārīgos 124 00:06:02,245 --> 00:06:05,120 priekšrakstos. 125 00:06:05,120 --> 00:06:06,550 Lūk, kas notiek. 126 00:06:06,550 --> 00:06:09,290 Vispirms tiek izpildīti visi sākumā esošie priekšraksti. 127 00:06:09,290 --> 00:06:11,260 Jums var būt vairāk nekā viens. 128 00:06:11,260 --> 00:06:13,440 Pēc tam tiek pārbaudīta Būla izteiksme. 129 00:06:13,440 --> 00:06:15,645 Ja izteiksmes vērtība ir patiesa, tad vienu reizi izpildiet cilpas 130 00:06:15,645 --> 00:06:17,850 pamattekstu. 131 00:06:17,850 --> 00:06:21,060 Ja izteiksme tiek novērtēta kā nepatiesa, tad mēs esam pabeiguši. 132 00:06:21,060 --> 00:06:23,040 Mēs vispār neizpildām cilpas pamattekstu. 133 00:06:23,040 --> 00:06:26,263 Pēc tam, kad vienu reizi esam izpildījuši cilpas pamattekstu, tad mēs 134 00:06:26,263 --> 00:06:29,487 darām to, kas tur ir pieauguma daļā. 135 00:06:29,487 --> 00:06:31,998 Kas parasti ir kaut kas līdzīgs i plus, plus vai kaut kam 136 00:06:31,998 --> 00:06:34,510 tamlīdzīgam, kas modificē skaitītāja mainīgo. 137 00:06:34,510 --> 00:06:37,303 Pēc tam, kad esam palielinājuši, mēs vēlreiz pārbaudām izteiksmi un 138 00:06:37,303 --> 00:06:40,096 atkārtojam šīs darbības atkal un atkal, līdz izteiksme vairs nav 139 00:06:40,096 --> 00:06:42,890 patiesa. 140 00:06:42,890 --> 00:06:44,469 Tātad, kuros gadījumos tiek lietotas cilpas? 141 00:06:44,469 --> 00:06:47,834 Izmantojiet while cilpu, ja vēlaties, lai cilpa atkārtojas nezināmu 142 00:06:47,834 --> 00:06:51,200 reižu skaitu, taču, iespējams, tā nevarēs palaist visas. 143 00:06:51,200 --> 00:06:53,840 Ļoti izplatīts piemērs, kad tiek izmantota while cilpa, ir palaist 144 00:06:53,840 --> 00:06:56,480 spēles vadības plūsmu. 145 00:06:56,480 --> 00:06:58,960 Jūs, iespējams, nezināt, cik ilgi lietotājs spēlēs, taču vēlaties 146 00:06:58,960 --> 00:07:01,440 turpināt darīt to pašu. 147 00:07:01,440 --> 00:07:04,970 Dažādu spraitu pozīciju atjaunināšana uz plates. 148 00:07:04,970 --> 00:07:07,710 Jūs vēlaties, lai lietas vienmēr kustētos, taču jūs nezināt, kad 149 00:07:07,710 --> 00:07:10,450 lietotājs beigs spēlēt vai, kad viņam beigsies dzīvības. 150 00:07:10,450 --> 00:07:12,741 Tātad, while cilpa ir patiešām laba kaut kam tādam. 151 00:07:12,741 --> 00:07:14,130 Tas ir labs lietošanas gadījums. 152 00:07:14,130 --> 00:07:16,230 Ar do while cilpu ir diezgan līdzīgi. 153 00:07:16,230 --> 00:07:17,988 Jūs vēlaties, lai cilpa atkārtojas nezināmu reižu skaitu, bet vismaz 154 00:07:17,988 --> 00:07:19,746 vienu reizi. 155 00:07:19,746 --> 00:07:22,083 Jūs varat to izmantot arī spēlē, taču ļoti izplatīts lietošanas 156 00:07:22,083 --> 00:07:24,420 gadījums ir – mudināt lietotāju ievadīt datus. 157 00:07:24,420 --> 00:07:27,535 Parasti jūs varētu teikt kaut ko līdzīgu: Dodiet man pozitīvu veselu 158 00:07:27,535 --> 00:07:30,650 skaitli, un jūs varētu to ievietot do while cilpā. 159 00:07:30,650 --> 00:07:32,275 Tāpēc tas vienmēr prasīs viņiem, vismaz vienu reizi, pozitīvu veselu 160 00:07:32,275 --> 00:07:33,900 skaitli. 161 00:07:33,900 --> 00:07:36,850 Ja tie sniedz pozitīvu veselu skaitli, jūs varētu izkļūt no cilpas. 162 00:07:36,850 --> 00:07:37,599 Jūs varētu būt pabeidzis. 163 00:07:37,599 --> 00:07:39,900 Būla izteiksme do while cilpā var būt nepatiesa. 164 00:07:39,900 --> 00:07:41,137 Un jūs viņiem vairs nejautāsiet. 165 00:07:41,137 --> 00:07:44,014 Ja viņi dod jums negatīvu skaitli, ierakstot vārdu vai kaut ko tādu, 166 00:07:44,014 --> 00:07:46,892 kas jums nav īsti noderīgs, varat izmantot cilpu do while, lai 167 00:07:46,892 --> 00:07:49,770 atgrieztos un atkārtotu to atkal un atkal. 168 00:07:49,770 --> 00:07:53,060 Vienreiz jūs noteikti vēlaties palūgt, lai viņi jums iedotu skaitli, 169 00:07:53,060 --> 00:07:56,350 bet jūs nezināt, cik reizes pēc tam tie varētu būt kaitēkļi. 170 00:07:56,350 --> 00:07:58,445 Un tāpēc, do while - tas ir lielisks lietošanas gadījums, lai 171 00:07:58,445 --> 00:08:00,540 mudinātu lietotāju ievadīt datus. 172 00:08:00,540 --> 00:08:03,706 Un for loops lietošanas gadījums parasti ir tad, kad vēlaties 173 00:08:03,706 --> 00:08:06,873 atkārtot cilpu noteiktu reižu skaitu, lai gan brīdī, kad programma ir 174 00:08:06,873 --> 00:08:10,040 kompilēta, jūs, iespējams, nezināt, cik reizes. 175 00:08:10,040 --> 00:08:12,775 Piemēram, varbūt jums ir programma, kurā lietotājam tiek prasīts 176 00:08:12,775 --> 00:08:15,510 ievadīt skaitli. 177 00:08:15,510 --> 00:08:17,660 Un viņi ievada 100. 178 00:08:17,660 --> 00:08:20,510 Un tad jūsu for cilpa šajā gadījumā darbosies 100 reizes. 179 00:08:20,510 --> 00:08:22,540 Vai varbūt viņi jūsu programmā ievada 1000 un pēc tam izpilda cilpu 180 00:08:22,540 --> 00:08:24,570 1000 reižu. 181 00:08:24,570 --> 00:08:26,987 Tas ir noteikts reižu skaits. 182 00:08:26,987 --> 00:08:28,998 Viņi ne vienmēr zina, kāds bija šis skaitlis programmas sastādīšanas 183 00:08:28,998 --> 00:08:31,010 brīdī. 184 00:08:31,010 --> 00:08:35,010 Tas nav kā while cilpa, kurā tas varētu būt bezgalīgs. 185 00:08:35,010 --> 00:08:37,127 Tas drīzāk ir skaitlis, kuru jūs vienkārši nezināt. 186 00:08:37,127 --> 00:08:39,454 Tagad, lai gan esmu aprakstījis visus šos lietošanas gadījumus, jums 187 00:08:39,454 --> 00:08:41,782 jāzina, ka gandrīz visos gadījumos varat savstarpēji mainīt visas 188 00:08:41,782 --> 00:08:44,110 trīs šīs cilpas. 189 00:08:44,110 --> 00:08:46,890 Varat izmantot for cilpu tur, kur citādi izmantotu while cilpu. 190 00:08:46,890 --> 00:08:48,375 For cilpu varat izmantot visur, kur izmantotu do while cilpu un tā 191 00:08:48,375 --> 00:08:49,860 tālāk. 192 00:08:49,860 --> 00:08:52,500 Dažreiz tas var būt nedaudz sarežģīti, tāpēc parasti labi būtu 193 00:08:52,500 --> 00:08:55,140 ievērot tipiskus lietošanas gadījumus. 194 00:08:55,140 --> 00:08:57,599 Izmantojiet do while cilpu, ja kaut ko gribējāt vismaz vienu reizi. 195 00:08:57,599 --> 00:08:59,056 Izmantojiet for cilpu, ja vēlaties kaut ko darīt noteiktu reižu 196 00:08:59,056 --> 00:09:00,514 skaitu. 197 00:09:00,514 --> 00:09:03,730 Galu galā, tāpēc ir trīs dažādu veidu cilpas. 198 00:09:03,730 --> 00:09:06,172 Tāpēc tās var izmantot pareizajā kontekstā. 199 00:09:06,172 --> 00:09:07,880 Bet jūs varat tās savstarpēji apmainīt, ja vēlaties. 200 00:09:07,880 --> 00:09:09,335 Ja jūtaties ērti ar while cilpām un vienmēr vēlaties izmantot while 201 00:09:09,335 --> 00:09:10,790 cilpas. 202 00:09:10,790 --> 00:09:14,320 Tas ir kaut kas, ko varat darīt, lai gan tas varētu būt nedaudz 203 00:09:14,320 --> 00:09:17,850 sintaktiski sarežģīti, te for cilpa būtu daudz vienkāršāka. 204 00:09:17,850 --> 00:09:21,100 Mani sauc Dags Loids, un šis ir CS50.