1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,500 Zamyla CHAN: Estas mi, Zamyla. 3 00:00:02,500 --> 00:00:06,910 Hodiaŭ en Mario, ni tuj esti tirante la duono piramido por Mario 4 00:00:06,910 --> 00:00:08,290 grimpi supren. 5 00:00:08,290 --> 00:00:11,570 >> Do ni parolu pri nia al-fari por tiu problemo. 6 00:00:11,570 --> 00:00:13,610 Ni tuj volas suflori kaj validigi 7 00:00:13,610 --> 00:00:18,290 la uzanto por valida enigo de kiel alte ili volas Mario piramido esti. 8 00:00:18,290 --> 00:00:20,090 Kaj tiam, ni tuj desegni ĝin. 9 00:00:20,090 --> 00:00:24,870 Do ni komencu per instigante kaj validigi la uzanto por ilia enigo. 10 00:00:24,870 --> 00:00:27,640 >> Ni povas uzi la CS50 biblioteko funkcio 11 00:00:27,640 --> 00:00:31,160 akiri int kiu certigos ke la uzanto enigas entjero. 12 00:00:31,160 --> 00:00:35,730 Ajna pozitiva entjeroj, negativa entjeroj, nombro 0 estas bela ludo. 13 00:00:35,730 --> 00:00:41,670 Alie, la uzanto estos instigis al reprovi ĝis enigo validan entjeron. 14 00:00:41,670 --> 00:00:44,210 Nun kvankam get int faras multa la laboro por ni 15 00:00:44,210 --> 00:00:46,730 en certigado ke la uzanto donas ni entjero, 16 00:00:46,730 --> 00:00:50,760 ni ankoraŭ devas apliki iun aldonaj limigoj sur tio. 17 00:00:50,760 --> 00:00:56,420 Post ĉiu, ni ne povas havi Mario grimpita duono piramido de alteco negativa 12. 18 00:00:56,420 --> 00:00:59,040 >> Krom tio, la problemo specifo 19 00:00:59,040 --> 00:01:02,490 diras ke ni povas nur permesi Mario grimpi 20 00:01:02,490 --> 00:01:06,940 piramido de altecoj inter 0 kaj 23. 21 00:01:06,940 --> 00:01:11,120 Bone, do tio signifas ke ni bezonas senĉese instigas la uzanton 22 00:01:11,120 --> 00:01:14,320 doni al ni validan nombro kaj nur daŭrigi 23 00:01:14,320 --> 00:01:17,120 Tuj ili jam donis al ni validan alteco. 24 00:01:17,120 --> 00:01:18,720 Kiel ni faru tion? 25 00:01:18,720 --> 00:01:23,760 >> Nu, kontinuaj procezoj al ni la ideo de loops-- faras ion 26 00:01:23,760 --> 00:01:24,720 repetitivamente. 27 00:01:24,720 --> 00:01:28,220 Unu buklo en C kiel dum buklo ke volo senĉese 28 00:01:28,220 --> 00:01:33,480 ekzekuti la korpon de la buklo dum la donita kondiĉo taksas al vera. 29 00:01:33,480 --> 00:01:36,200 Kiam tiu kondiĉo taksas al falsa, 30 00:01:36,200 --> 00:01:39,770 la programo plue ajn venas poste. 31 00:01:39,770 --> 00:01:43,180 Do dum maŝojn estas unu maniero certigante ke ni konstante 32 00:01:43,180 --> 00:01:45,320 instigas la uzanton por valida enigo. 33 00:01:45,320 --> 00:01:50,070 Kaj unufoje ili donas al ni validan enigo, ni procedi al kiom venas proksima. 34 00:01:50,070 --> 00:01:54,380 Ni scias ke ni tuj petu la uzanto por enigo almenaŭ unufoje. 35 00:01:54,380 --> 00:01:59,200 Do nun ni venas al fratino de la dum buklo, kiu estas la do dum ciklo. 36 00:01:59,200 --> 00:02:02,650 >> Fari dum cikloj faros la korpo de la ciklo almenaŭ unufoje. 37 00:02:02,650 --> 00:02:06,150 Do sen kontrolanta la kondiĉo, ĝi faros la korpo de la ciklo. 38 00:02:06,150 --> 00:02:09,750 Kaj tiam kontrolu la kondiĉo vidi ĉu ĝi devas ripeti. 39 00:02:09,750 --> 00:02:13,080 Ĉi venas en oportuna kiam ni validigi uzanto enigo. 40 00:02:13,080 --> 00:02:15,830 Ni scias ke ni iras demandi ilin almenaŭ unufoje. 41 00:02:15,830 --> 00:02:18,780 Do fari dum buklo povus aspektas tiel. 42 00:02:18,780 --> 00:02:20,090 Ni havos entjero n. 43 00:02:20,090 --> 00:02:22,760 Kaj ene de la do dum buklo, ni tuj 44 00:02:22,760 --> 00:02:24,750 instigas la uzanton por entjero. 45 00:02:24,750 --> 00:02:29,740 Se n estas nevalida, ĉar ni instigas ilin denove kaj denove kaj denove ĝis ili 46 00:02:29,740 --> 00:02:31,820 donu al ni, ke valida entjero. 47 00:02:31,820 --> 00:02:37,440 Fine, fojo n estas valida enigo, ni instruos vin procedi al la resto de nia programo. 48 00:02:37,440 --> 00:02:41,830 >> Do ni revenu al la spec kaj ĉeko kion la kondiĉojn por valida enigo 49 00:02:41,830 --> 00:02:43,670 tuj estos. 50 00:02:43,670 --> 00:02:48,090 La valida altecoj tuj esti inter 0 kaj 23, inkluziva. 51 00:02:48,090 --> 00:02:53,350 Tial malvalida altecoj tuj malpli ol 0 aŭ pli ol 23. 52 00:02:53,350 --> 00:02:56,420 Do memoru desegni via kondiĉo zorgeme, 53 00:02:56,420 --> 00:02:58,660 sciante, ke la kondiĉo por la do dum buklo 54 00:02:58,660 --> 00:03:01,470 devus esti dum n estas nevalida. 55 00:03:01,470 --> 00:03:05,080 Nun ĉi tio ne tuj estos Simpla ununura Bulea esprimo. 56 00:03:05,080 --> 00:03:07,630 Ni tuj devas kombini du malsamaj esprimoj 57 00:03:07,630 --> 00:03:09,900 fari nian tutan kondiĉo. 58 00:03:09,900 --> 00:03:13,290 >> Do ni nur rigardas vertabelo mi havas jam donis al vi la sugesto ke ni estas 59 00:03:13,290 --> 00:03:15,200 tuj estos kontraktanta kun du Booleans. 60 00:03:15,200 --> 00:03:19,620 Do jen vertabelo kie mi havas du Booleans-- Buleaj 1 kaj 2. 61 00:03:19,620 --> 00:03:27,050 Do ni havas la eblon de taksi bool1 kaj bool2 aŭ bool1 aŭ bool2. 62 00:03:27,050 --> 00:03:31,980 Kaj nur estos vera se ambaŭ Bulea tipo taksi al vera, dum ĉiuj 63 00:03:31,980 --> 00:03:37,280 aŭ estos veraj dum unu el la du Booleans taksas al vera. 64 00:03:37,280 --> 00:03:41,450 Bone, do preni momenton, paŭzi ĉi video kaj digesti ĉi vertabelo. 65 00:03:41,450 --> 00:03:42,930 Mi tuj tie atendante. 66 00:03:42,930 --> 00:03:45,760 Kiam vi revenos, vidu se vi povas kunmeti 67 00:03:45,760 --> 00:03:51,910 Bulea esprimo por via kondiĉo de n esti malvalida enigaĵo. 68 00:03:51,910 --> 00:03:54,420 >> Do nun ke ni havas valida uzanto enigo, ni 69 00:03:54,420 --> 00:03:58,710 antaŭeniri kaj paroli pri kiel ni povu desegni la duono piramido. 70 00:03:58,710 --> 00:04:03,410 Tie en tiu simpla tekstoredaktilo, Mi desegnis maldekstra vicigitaj piramido. 71 00:04:03,410 --> 00:04:07,050 Sed ni scias, ke ni bezonas nian piramido esti ĝuste vicigita. 72 00:04:07,050 --> 00:04:08,650 Do kiel povus mi tion faras? 73 00:04:08,650 --> 00:04:11,440 Nu, mi povus provi puŝi ĉiu al la flanko 74 00:04:11,440 --> 00:04:14,880 per simple metante iom karaktero intere. 75 00:04:14,880 --> 00:04:16,779 Kaj tiam, por la sekva linio, mi tuj metis 76 00:04:16,779 --> 00:04:20,970 iuj pli karakteroj puŝi ĝin kune, kaj further-- ktp ktp forth-- 77 00:04:20,970 --> 00:04:23,360 ĝis mi rajtas vicigitaj piramido. 78 00:04:23,360 --> 00:04:27,780 Do ni ja havas rajton align piramido, sed ĝi ne aspektas tiel granda kun la punktoj. 79 00:04:27,780 --> 00:04:30,680 Sed ni ankoraŭ volas subteni tiun belan interspacigo. 80 00:04:30,680 --> 00:04:35,260 Do mi tuj laŭvorte enmeti kelkaj spacoj. 81 00:04:35,260 --> 00:04:39,420 >> Anstataŭ tri punktojn, mi instruos vin metis unu, du, tri spacoj. 82 00:04:39,420 --> 00:04:40,370 Sur la dua linio. 83 00:04:40,370 --> 00:04:42,640 Mi metos unu, du spacoj. 84 00:04:42,640 --> 00:04:45,370 Kaj sur la antaŭlasta linio, nur unu spaco. 85 00:04:45,370 --> 00:04:48,290 Kaj tie mi rajtas vicigitaj piramido. 86 00:04:48,290 --> 00:04:52,170 De faranta la ekzemplon en la teksto redaktoro, ni havas ideon por la mastro 87 00:04:52,170 --> 00:04:54,590 ke ni uzos por ĉerpi la duono piramido. 88 00:04:54,590 --> 00:04:58,080 Por ĉiu vico, kion ni faris Estas ni tajpas iun spacoj, 89 00:04:58,080 --> 00:05:00,170 kaj tiam tajpas iun hashes, kaj tiam tajpita 90 00:05:00,170 --> 00:05:03,020 la Eniga klavo, kiu kreas novan linion. 91 00:05:03,020 --> 00:05:07,770 Do nun ni havas tion, ni iru unu paŝon pli kaj trovi mastron. 92 00:05:07,770 --> 00:05:10,170 >> Do mi tuj diros, por la intereso de tiu ekzemplo, 93 00:05:10,170 --> 00:05:12,480 ni pritraktas altecon de 8. 94 00:05:12,480 --> 00:05:17,100 La unua vico tuj havi du hashes kiu sekvas sep spacoj. 95 00:05:17,100 --> 00:05:20,020 La second-- tri hashes, ses spacoj. 96 00:05:20,020 --> 00:05:24,260 Tria row-- kvar hashes, kvin spaces-- tiel plu kaj tiel plu 97 00:05:24,260 --> 00:05:26,350 ĝis ni atingos la NTH vico. 98 00:05:26,350 --> 00:05:31,540 Tial, mi demandas vin pri la NTH vico, kiom da hashes ni tuj havos 99 00:05:31,540 --> 00:05:33,120 kaj kiom da spacoj? 100 00:05:33,120 --> 00:05:37,000 Do ĝi estas ĝis vi malkovri la formulon por reprezenti kiom hashes 101 00:05:37,000 --> 00:05:42,020 kaj kiom da spacoj estas necesaj por la NTH vico kiam vi havas iun alteco. 102 00:05:42,020 --> 00:05:46,060 >> Nun kiam vi estas imagante ĉi ekstere, esti zorgema kiel vi indicigo. 103 00:05:46,060 --> 00:05:49,170 Kion mi celas diri per tio estas ke en ĉiutaga vivo ni ĉiuj 104 00:05:49,170 --> 00:05:51,540 komenci kalkulon, kutime de 1. 105 00:05:51,540 --> 00:05:55,950 Sed en CS50 kaj en komputiko ĝenerale, ni trovas 0 indeksita. 106 00:05:55,950 --> 00:06:00,620 Do la unua vico estus n de 0 kontraste al 1. 107 00:06:00,620 --> 00:06:04,550 Esti zorgema pri tio ĉi kiam vi estas provi elkompreni vian mastron. 108 00:06:04,550 --> 00:06:07,570 Do nun ni revenu al kiel Ni tuj nomas nian piramidon. 109 00:06:07,570 --> 00:06:12,300 Por ĉiu vico, ni tuj volas presi la spacoj, montri la hashes, 110 00:06:12,300 --> 00:06:14,050 kaj tiam presi novan linion. 111 00:06:14,050 --> 00:06:19,160 La aludo tie estas la vorto "por" ĉiu vico. 112 00:06:19,160 --> 00:06:21,470 En C, ni havi konstruo nomata por buklo, 113 00:06:21,470 --> 00:06:25,250 konsistantan de inicialización, kondiĉo, ĝisdatigo, 114 00:06:25,250 --> 00:06:26,790 kaj la korpo de la ciklo. 115 00:06:26,790 --> 00:06:31,360 >> Diru mi volis diri, saluton mondo, 50 fojojn, mia por buklo 116 00:06:31,360 --> 00:06:32,880 aspektus ion kiel tiu. 117 00:06:32,880 --> 00:06:35,480 Mi pravalorizi miaj entjero al 0. 118 00:06:35,480 --> 00:06:38,230 La kondiĉo estas ke mi estas malpli ol 50. 119 00:06:38,230 --> 00:06:42,350 Kaj tiam mia ĝisdatigo estas nur pliigante mi per unu ĉiufoje. 120 00:06:42,350 --> 00:06:45,140 Ni povas ankaŭ uzi por bukloj persisti super aferoj. 121 00:06:45,140 --> 00:06:47,820 Atentu, kiel ni ne malfacile kodita nombro, 122 00:06:47,820 --> 00:06:51,820 sed prefere metita la variablo alteco anstataŭe en la kondiĉo. 123 00:06:51,820 --> 00:06:56,420 Do kion mi faras ĉi tie estas mi ripetanta super ĉiu vico de la piramido. 124 00:06:56,420 --> 00:07:00,160 Mi povas fari ion por ĉiu remi en la korpo de mia banto. 125 00:07:00,160 --> 00:07:02,350 >> Kion ni faras ene la korpo de la ciklo? 126 00:07:02,350 --> 00:07:07,120 Nu, kiel ni jam diris, ni presi spacoj kaj ni presi hashes 127 00:07:07,120 --> 00:07:09,480 kaj ni presi novan linion. 128 00:07:09,480 --> 00:07:11,950 Do mia ekstera por buklo aspektos tiel ĉi. 129 00:07:11,950 --> 00:07:15,070 Mi persisti super ĉiu vico de la piramido, uzante, 130 00:07:15,070 --> 00:07:18,890 tiukaze, alto kiel la variablo kiu stokas la alteco de la piramido. 131 00:07:18,890 --> 00:07:22,870 Interne la korpo de tiu buklo, mi estas presigos spacoj plurfoje, presi 132 00:07:22,870 --> 00:07:26,730 la hashes ree, kaj tiam presi novan linion. 133 00:07:26,730 --> 00:07:31,010 >> Tial nun, uzante ĉiu de la konceptoj kiuj Mi raportis en tiu piediro-tra, 134 00:07:31,010 --> 00:07:35,210 vi devus povi instigas la uzanto por enigo, validigi ke enigo, 135 00:07:35,210 --> 00:07:37,370 kaj tiam tiri la duono piramido. 136 00:07:37,370 --> 00:07:41,510 >> Mia nomo estas Zamyla, kaj ĉi tiu estas CS50. 137 00:07:41,510 --> 00:07:43,167