1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [Semajno 3] 2 00:00:02,200 --> 00:00:03,950 [Davido J. Malan - Universitato Harvard] 3 00:00:03,950 --> 00:00:07,140 [Jen CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Lasu min stir ni en la direkto de kie ni cxesis lasta fojo, 5 00:00:10,720 --> 00:00:13,890 kiu komencas pensi iom pli pri sintakso 6 00:00:13,890 --> 00:00:17,150 kaj provi pensi iom malpli pri ĉiuj minutiae 7 00:00:17,150 --> 00:00:20,630 kiu prenas iom da tempo por alklimatigi al tiel multe en terminoj de punktokomojn 8 00:00:20,630 --> 00:00:22,360 kaj parentezoj kaj frizita krampoj, 9 00:00:22,360 --> 00:00:25,630 komenci prenante aferojn iomete al pli alta nivelo koncepta 10 00:00:25,630 --> 00:00:28,800 por ke la problemoj ni nun komencas solvi dum la sekvaj semajnoj 11 00:00:28,800 --> 00:00:32,340 tuj engaĝi multe pli en pli alta nivelo koncepta problemoj 12 00:00:32,340 --> 00:00:36,310 kaj iom malpli en la sintaksa kiel vi ricevis viajn piedojn trempi 13 00:00:36,310 --> 00:00:40,090 kaj viaj manoj malpuraj kun iuj de la sintakso de tiuj lastaj semajnoj. 14 00:00:40,090 --> 00:00:43,690 >> Do rememori ke pasintsemajne ni prezentis ĉi nocio de tabelo. 15 00:00:43,690 --> 00:00:49,320 Kaj tabelo en la angla povas esti priskribita kiel kio? >> [Inaudible studento respondon] 16 00:00:49,320 --> 00:00:51,710 Pardonu? 17 00:00:51,710 --> 00:00:54,810 Kolekto de? >> [Inaudible studento respondon] >> Konsentite, bona. 18 00:00:54,810 --> 00:00:57,820 Kolekto de artikoloj. Do ni vidis arrays en Scratch. 19 00:00:57,820 --> 00:01:01,880 Se vi okazis uzi por pset 0 unu el Scratch la listoj kiujn vi povas treni aĵoj 20 00:01:01,880 --> 00:01:05,410 kiel oranĝoj kaj bananoj sur, inventaro de varoj, 21 00:01:05,410 --> 00:01:07,100 jen speco de kiel tio tabelo estas. 22 00:01:07,100 --> 00:01:10,980 Kaj tiam pli teknike, en la kunteksto de reala komputilo, 23 00:01:10,980 --> 00:01:14,730 tabelo estas simple bela eron de memoro. 24 00:01:14,730 --> 00:01:18,590 En aliaj vortoj, vi havas bajto, tiam alia bajto, tiam alia bajto, tiam alia bajto, 25 00:01:18,590 --> 00:01:21,330 kaj se vi estus desegni tiujn bitokoj en portreto, 26 00:01:21,330 --> 00:01:24,510 estus malantaŭo al malantaŭo al malantaŭo al malantaŭo. Tio estas kion ni celas diri per apudaj. 27 00:01:24,510 --> 00:01:26,690 >> Do ĝi bajto numero 1, tiam 2, tiam 3. 28 00:01:26,690 --> 00:01:29,680 Ĝi ne signifas ĉi tien, ĝis tie, ĉi tien, ĝis ĉi tie. 29 00:01:29,680 --> 00:01:33,800 Tabelo estas apudaj eron de 0 aŭ pli bajtoj. 30 00:01:33,800 --> 00:01:36,160 Do kio estas ili utilaj por? 31 00:01:36,160 --> 00:01:40,090 Memori ni havis ĉi tia elpensita ekzemplo de provizon popola kvizo gradoj en programo 32 00:01:40,090 --> 00:01:42,580 komputi vian kvizo averaĝa por iuj kompreneble, 33 00:01:42,580 --> 00:01:46,780 kaj memorigi, ke ni povus komenci skribi tiun programon per deklaro de variablo quiz1. 34 00:01:46,780 --> 00:01:49,550 Tiam ni povus havi alian variablo nomis quiz2. 35 00:01:49,550 --> 00:01:52,030 Sed tiam, se estis 3 Quizzes en ĉi klaso, quiz4. 36 00:01:52,030 --> 00:01:55,710 Aŭ se estis semajna kvizo, estus quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Do vi havas ĉiujn tiujn variablojn deklaris ene de ĉefaj 38 00:01:58,520 --> 00:02:00,470 aŭ alie en via programo, 39 00:02:00,470 --> 00:02:03,870 kaj la problemo kun tiu alproksimiĝo, facila kvankam ĝi estas nur kopii kaj alglui, 40 00:02:03,870 --> 00:02:06,120 ĉu nur tre rapide iĝas _unwieldy_. 41 00:02:06,120 --> 00:02:09,360 Dio gardu vin reale havas 30 kvizojn aŭ 50 Quizzes. 42 00:02:09,360 --> 00:02:12,080 Se estas kiel alta lernejo stilo ĉiutaga popo kvizo 43 00:02:12,080 --> 00:02:15,910 tiam vi simple havas ridinde longa listo de variabloj esti deklarita, 44 00:02:15,910 --> 00:02:17,780 kaj ĉi nur tre rapide eliras de kontrolo. 45 00:02:17,780 --> 00:02:20,820 Estas malbela, estas malfacile subteni, estas tiel facile fari typo 46 00:02:20,820 --> 00:02:23,910 se vi ricevas 1 numeron mistyped ie en vian programon. 47 00:02:23,910 --> 00:02:26,800 >> Do ni enkondukis la nocion de tabelo anstataŭe. 48 00:02:26,800 --> 00:02:30,760 Kaj memoru ke ni implementado tiu programo per farante iom io tiamaniere. 49 00:02:30,760 --> 00:02:33,950 Lasu min iri en la hodiaŭa Fonto 3 lundo katalogo 50 00:02:33,950 --> 00:02:37,160 kaj malfermu tabelo, kiun ni vidis lastfoje. 51 00:02:37,160 --> 00:02:39,940 Kaj kvankam estis kelkaj novaj C lertaĵoj tie, 52 00:02:39,940 --> 00:02:41,920 inter ili la nocio de konstanta, 53 00:02:41,920 --> 00:02:47,140 memori, ke ni deklaris multnombraj kaleŝegoj esence por uzi tiun sintakson: 54 00:02:47,140 --> 00:02:51,750 kaleŝego, tiam la nomo de la variablo, tiam ni uzas kvadrataj krampoj vere por la unua fojo, 55 00:02:51,750 --> 00:02:55,450 kaj kion ni faris interne de tiuj rektaj krampoj estis efektive metis nombro. 56 00:02:55,450 --> 00:02:59,780 Sed anstataŭ meti ciferon, mi metis ĉi majusklon vorto, kvizojn. 57 00:02:59,780 --> 00:03:03,220 Kaj kio estis la motivado por meti majusklon vorton kiel Testi 58 00:03:03,220 --> 00:03:08,170 kaj tiam uzanta linio 17 de lertaĵo tie efektive doni tiun numeron? 59 00:03:08,170 --> 00:03:11,240 Kio estis la motivado tie? Yeah. 60 00:03:11,240 --> 00:03:13,360 >> [Inaudible studento respondon] >> Ekzakte. 61 00:03:13,360 --> 00:03:16,630 Se ni volas ŝanĝi tiun valoron 2, ni nur devas ŝanĝi ĝin en 1 loko 62 00:03:16,630 --> 00:03:19,680 ĉar konsideri - mi eĉ ne memoras, kion tiu programo faris ĝuste, 63 00:03:19,680 --> 00:03:22,040 sed se vi simple skim ĝin vi vidas kvizojn, kvizojn. 64 00:03:22,040 --> 00:03:24,720 Komprenu kvizojn, cxi tie pli kvizojn. 65 00:03:24,720 --> 00:03:28,180 Do, se ni ne havas tiun konstanto, tiu uzo de akraj difini, 66 00:03:28,180 --> 00:03:33,320 ni estus tajpis 2, tiam 2, tiam 2, tiam 2, kiu estas fajna. Estus same ĝentila. 67 00:03:33,320 --> 00:03:36,220 Sed supozu ke venontjare ni havas 3 Quizzes en CS50. 68 00:03:36,220 --> 00:03:39,190 Do mi devas iri kaj ĝisdatigi la kodon, mi devas recompilar ĝin, 69 00:03:39,190 --> 00:03:43,820 sed la problemo estas se mi faras ion stultan, kiel mi forgesu 1 mencio de 2 70 00:03:43,820 --> 00:03:46,750 kaj forgesu plug en 3, la tuta programo povus tre bone rompi. 71 00:03:46,750 --> 00:03:48,720 Do ni simple petante mizero. 72 00:03:48,720 --> 00:03:53,170 >> Do la nocio de konstanta estas ĉio pri faktoranta iun pecon de datumoj, 73 00:03:53,170 --> 00:03:56,070 ĉu ĝi estas ĉeno aŭ char aŭ kaleŝego aŭ kion ajn, 74 00:03:56,070 --> 00:04:00,070 kaj deklarante ĝin 1 lokon por ke vi povu pli facile ŝanĝi ĝin en la estonteco. 75 00:04:00,070 --> 00:04:03,660 Kaj estas ankaŭ, sincere, iom pli facile legi ĉar se vi simple pensas pri ĉi tiu nun, 76 00:04:03,660 --> 00:04:07,840 ĝi estas kvizojn, aŭ ni povus eĉ renomi ĝin iu kiel NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 aŭ io pli eksplicitaj. 78 00:04:09,430 --> 00:04:11,830 La kodo simple iĝas iom pli evidentaj pri kio ĝi estas faranta, 79 00:04:11,830 --> 00:04:15,780 kaj vi demandas iom malpli kion numero 2 povus okazi al volas diri. 80 00:04:15,780 --> 00:04:18,920 Do la konstanta havis nenion komunan fundamente kun tabeloj. 81 00:04:18,920 --> 00:04:22,990 La tabelo estis enkondukita de vojo de tiuj rektaj krampoj. 82 00:04:22,990 --> 00:04:26,610 >> Do rimarki ke en linio 23 ni petas al la uzanto, "Kio estus via kvizo partituroj?" 83 00:04:26,610 --> 00:04:31,120 Tiam ni nur devas ĉi buklo kiun ŝajne demandas al la uzanto por lia notoj. Kiom? 84 00:04:31,120 --> 00:04:37,460 Ĝi iterates de 0 al 2. Kaj mi diras 2 ĉar kvizojn en ĉiuj kaskedoj estas nuntempe 2. 85 00:04:37,460 --> 00:04:42,310 Do iterates de 0 ĝis 2 kaj poste presas el Kvizo # ion de iu, 86 00:04:42,310 --> 00:04:45,830 kaj tiam uzas GetFloat akiri valoro de la uzanto. 87 00:04:45,830 --> 00:04:49,050 Do rimarki ĉi tiu estas la sola alia nova peco de sintakso de lasta merkredo. 88 00:04:49,050 --> 00:04:53,120 Se vi volas konservi ion en apartan lokon en tiu tabelo, 89 00:04:53,120 --> 00:04:55,460 vi denove uzos la rektaj krampoj. 90 00:04:55,460 --> 00:04:57,030 >> Do tie estas iom de dicotomía tie. 91 00:04:57,030 --> 00:04:59,040 La unua fojo vi uzas la rektaj krampoj 92 00:04:59,040 --> 00:05:02,250 vi uzas ĝin por indiki kiom granda vi volas la tabelo esti. 93 00:05:02,250 --> 00:05:06,580 Sed ĉi sekva kunteksto tie kie ni denove uzas tiujn rektaj krampoj 94 00:05:06,580 --> 00:05:10,540 signifas kie en tiu tabelo vi volas meti iun valoron? 95 00:05:10,540 --> 00:05:13,650 Kaj la distingo tie povas esti konkludita de ĉirkaŭteksto. 96 00:05:13,650 --> 00:05:17,130 Rimarku tie ni havas datumtipo, tiam ni havas la nomon de variablo, 97 00:05:17,130 --> 00:05:20,770 tiam ni havas niajn kvadrataj krampoj kun nombro enen, punktokomo. Estas tio. 98 00:05:20,770 --> 00:05:22,290 Do tio estas deklaro. 99 00:05:22,290 --> 00:05:28,390 Estas nur tiel, kvazaŭ ni estus farinta ion kiel kaleŝego grade1; kaleŝego grade2; 100 00:05:28,390 --> 00:05:31,730 sed denove, ĉi tre rapide devolves en maniero tro multe kopion, alglui, 101 00:05:31,730 --> 00:05:34,260 tial anstataŭ ni simple simplificado ĝin kiel tia, 102 00:05:34,260 --> 00:05:38,800 kio signifas nun ni havas grado kiu povas esti stokita en krampo 0, 103 00:05:38,800 --> 00:05:41,760 ni havos alian gradon kiu povas esti stokita en krampo 1, 104 00:05:41,760 --> 00:05:46,890 sed kio se mi goof kaj, ekzemple, mia buklo alvenas - 105 00:05:46,890 --> 00:05:48,740 ekzemple, mi faros ĉi malpli ol aŭ egala al, 106 00:05:48,740 --> 00:05:50,620 kiu revokon estis la fonto de antaŭa bug - 107 00:05:50,620 --> 00:05:55,590 kio efektive signifas ke sur iu tria hazarda ripeto de ĉi maŝo 108 00:05:55,590 --> 00:06:00,380 Mi uzas krampo 2. Efektive, kio povus okazi tie? Pardonu? 109 00:06:00,380 --> 00:06:02,860 [Studento] Oni tuj estos anstataŭitaj. >> Ĉu estas tuj estos anstataŭita? 110 00:06:02,860 --> 00:06:04,520 Kio estus anstataŭita? 111 00:06:04,520 --> 00:06:10,890 Ĉi laŭvorte diras anstataŭi kio estas je situo 2 kun la reveno valoro de GetFloat. 112 00:06:10,890 --> 00:06:13,690 Sed la problemo estas kiel granda estas la tabelo je ĉi tiu punkto en la historio? 113 00:06:13,690 --> 00:06:17,730 [Inaudible studento respondon] >> La tabelo estas ankoraŭ nur de amplekso 2 114 00:06:17,730 --> 00:06:22,730 ĉar la tabelo, kiel ĉiu variablo, estis deklarita unue, antaŭ ol ni uzas ĝin, 115 00:06:22,730 --> 00:06:27,220 kaj ni specifita ĉi tie pro tiu konstanta, ke mi havas 2 gradoj, ke mi tuj metis. 116 00:06:27,220 --> 00:06:29,930 >> Sed memoru, la komputilo sciencistoj komencos rakonti de 0. 117 00:06:29,930 --> 00:06:33,620 Do la unua loko en tiu tabelo estas krampo 0. 118 00:06:33,620 --> 00:06:40,210 La venonta loko estas 1. Tiu afero estas nur milde tro malproksime sur la flanko. 119 00:06:40,210 --> 00:06:42,870 Do alivorte, se mi efektive havis tiun tabelo - 120 00:06:42,870 --> 00:06:46,790 kaj lasu min vidi kiel bone ĉi coopera tie por ni - 121 00:06:46,790 --> 00:06:52,360 se mi havas aron ke mi simple desegnita kiel sekvas 122 00:06:52,360 --> 00:06:56,750 kaj mi destinis spaco por 2 eroj, mi povus desegni tiun kiel tiu en memoro 123 00:06:56,750 --> 00:06:58,020 kie cxi tiu granda blanka tolo estas. 124 00:06:58,020 --> 00:07:00,920 Estas nur la RAM mi havas en mia komputilo, koncerto de RAM, 2 koncertoj de RAM, kion ajn, 125 00:07:00,920 --> 00:07:05,400 sed tiuj 2 skatolojn nun individue reprezentas kaleŝego, 32 bitoj. 126 00:07:05,400 --> 00:07:10,860 Do, se mi metis 1 numeron tie kiel 1,0, do mi metis alian numeron tie kiel 3,2 127 00:07:10,860 --> 00:07:15,280 sed tiam mi faras krampo 2, tio estas kiel meti ion tie. 128 00:07:15,280 --> 00:07:17,820 Kaj kiel la bildo sugestas, estas nenio tie. 129 00:07:17,820 --> 00:07:20,450 Estas iel kiel tero de neniu ĉar mi ne petis la mastruma sistemo 130 00:07:20,450 --> 00:07:23,550 doni al mi ĉi tiu tria kvizon. 131 00:07:23,550 --> 00:07:26,940 Se mi faris volas ke tria kvizo, mi havis la forethought 132 00:07:26,940 --> 00:07:31,700 demandi la mastruma sistemo por ĝi per deklaro kvizojn esti ne 2 133 00:07:31,700 --> 00:07:34,210 sed anstataŭ egalas 3. 134 00:07:34,210 --> 00:07:39,000 >> Do alivorte, la bildo kiun ni efektive havas en mano similas ĉi tie. 135 00:07:39,000 --> 00:07:42,260 Ĉi denove estas tero de neniu. Ni pli bone ne provu skribi valoroj tie. 136 00:07:42,260 --> 00:07:45,300 Sed denove, ĉar komputilaj sciencistoj kalkuli de 0, 137 00:07:45,300 --> 00:07:49,520 kiam ni parolas pri ĉi tiu loko en la tabelo, ke tio devus esti loko 0, 138 00:07:49,520 --> 00:07:53,890 ĉi tiu estas supozataj esti situo 1, kaj tiu ne eĉ ekzistas 139 00:07:53,890 --> 00:07:57,380 ĉar ni nur demandis la mastruma sistemo por 2 tiaj lokoj. 140 00:07:57,380 --> 00:08:00,130 Do tiuj el vi kun antaŭa programado sperton el aliaj lingvoj 141 00:08:00,130 --> 00:08:04,150 sciu, ke ĉi tio ne estas ĉiam la kazo kun tabeloj aŭ aĵoj nomata vektoroj. 142 00:08:04,150 --> 00:08:06,930 Pli ĝuste, vi povas simple observu aldono kaj aldonante kaj aldonante aferojn arrays, 143 00:08:06,930 --> 00:08:10,720 kiu, sincere, ni havis tiun kapablecon en Scratch kaj tamen ni ŝajnas esti doninta ĝin ĉi tie 144 00:08:10,720 --> 00:08:15,160 ĉar kun C vi programado multe pli eksplicite. 145 00:08:15,160 --> 00:08:17,980 Estas nur vi kaj la komputilo nun, kaj la komputilo nur faros 146 00:08:17,980 --> 00:08:19,530 kion vi diros ĝin fari. 147 00:08:19,530 --> 00:08:24,270 Do, se vi nur diru ĝin doni al vi 2 flosoj sur la vojo de linio 22 ĉi tie, 148 00:08:24,270 --> 00:08:27,640 jen ĉio vi tuj reiros de la mastruma sistemo: spaco por 2. 149 00:08:27,640 --> 00:08:34,049 >> Do ĉiufoje estas viaj programoj tuj foje esti kalesxo rilate tabeloj. 150 00:08:34,049 --> 00:08:37,520 Tiu estas nur speco de la naturo de la besto per ĉiuj el ni estas falible, 151 00:08:37,520 --> 00:08:42,490 kaj en iu momento vi volos tre verŝajna indekso preter la limo de via tabelo. 152 00:08:42,490 --> 00:08:45,980 Kaj tio estas nur fantazio maniero diri al vi iris en krampo ion 153 00:08:45,980 --> 00:08:49,970 kaj io estis nur tro granda de nombro. Vi iris transe de la limoj de viaj tabelo. 154 00:08:49,970 --> 00:08:51,530 Sed la supra parto nun estas ĉi. 155 00:08:51,530 --> 00:08:54,990 La resto de ĉi tiu programo vere havas nenion fundamente rilatas al arrays. 156 00:08:54,990 --> 00:08:58,180 Estas ĉio nur pri kelkaj simplaj aritmetikaj por komputado mezumoj. 157 00:08:58,180 --> 00:09:03,200 Do ni havas ĉi tie en ĉi por buklo tie unuan variablon nomata sumo ke ni pravalorizi al 0. 158 00:09:03,200 --> 00:09:09,020 Tiam ni persisti de 0 ĝis 2 denove kaj ni aldonas al tiu sumado variablo 159 00:09:09,020 --> 00:09:12,620 la th,-a lernojaro, do krampo 0 tiam krampo 1. 160 00:09:12,620 --> 00:09:15,130 Kaj tiam kiel vi farus en grado lernejon por komputi la averaĝa, 161 00:09:15,130 --> 00:09:19,420 ni simple preni tiun sumon, dividi ĝin por la tuta numero de kvizoj, 162 00:09:19,420 --> 00:09:22,520 kaj tiam por bona mezuro ni nomas funkcio ĉi tie nomata ronda. 163 00:09:22,520 --> 00:09:28,580 >> Nun, kiel flanken, kio estas la interkonsento kun ĉi parenthetical int on line 34? 164 00:09:28,580 --> 00:09:31,730 Eble venis supren jam en sekcio, ne vere parolis pri tio formale tie, 165 00:09:31,730 --> 00:09:35,210 sed kio estas tio int en parens probable faras? >> [Inaudible studento respondon] 166 00:09:35,210 --> 00:09:38,500 Yeah, ĉi referencas al casting aŭ typecasting, 167 00:09:38,500 --> 00:09:41,690 kiu signifas preni 1 datumtipo kaj konvertado al alia. 168 00:09:41,690 --> 00:09:45,400 Vi ne povas fari ĉi tion kun ĉiuj datumtipoj ĉar kelkfoje ĝi estus iom stranga. 169 00:09:45,400 --> 00:09:49,640 Sed en ĉi tiu kazo, se la reveno valoro de ronda estas kaleŝego 170 00:09:49,640 --> 00:09:53,880 ĉar, finfine, mi ferios dum kaleŝego kaj dividante ĝin per nombro kiel 2, 171 00:09:53,880 --> 00:09:55,840 Mi tuj reiros kaleŝego. 172 00:09:55,840 --> 00:10:00,760 Sed grade lernejo homoj ne vere ŝatas scii ke ilia averaĝa estis 93.4 173 00:10:00,760 --> 00:10:04,420 ĉar ili devos realigi ili iam tiel proksima al la 95 rondas punkto. 174 00:10:04,420 --> 00:10:09,540 >> Do ni volas anstataŭe uzi int al ĉirkaŭ ĉiuj al la plej proksima int, 175 00:10:09,540 --> 00:10:12,730 kiu en ĉi tiu kazo tuj estos 94-maestro sen punkto post tio. 176 00:10:12,730 --> 00:10:14,530 Do tio estas nur iom matematika lertaĵo. 177 00:10:14,530 --> 00:10:17,570 Kaj ni revenos al tiu nocio de casting ĉar ĝi havos konsekvencojn, 178 00:10:17,570 --> 00:10:21,640 se vi ne malkovris jam, por problemo starigis 2. 179 00:10:21,640 --> 00:10:25,210 Do tabelo tiam, vi povas pensi pri - ĝi tuj min rideti tuta tago. 180 00:10:25,210 --> 00:10:27,830 Ĝi aspektas kiel ĉi tio se vi desegnas bildon de ĝi, 181 00:10:27,830 --> 00:10:31,460 sed la ŝlosilo estas ke la grandeco ankaŭ elektita de vi 182 00:10:31,460 --> 00:10:34,050 kiam vi petas ĝin de la mastruma sistemo. 183 00:10:34,050 --> 00:10:39,460 Demandojn tiam tabeloj? Yeah. 184 00:10:39,460 --> 00:10:47,080 [Inaudible studento demando] 185 00:10:47,080 --> 00:10:49,310 Ha, bona demando. 186 00:10:49,310 --> 00:10:53,150 La demando estas kio okazas al la nula 0 en la tabelo? Ne ekzistas en tiu ĉi kunteksto. 187 00:10:53,150 --> 00:10:57,430 Ke nur ekzistas en la kunteksto de signoĉenoj, kiujn ni baldaŭ venos al en nur momento. 188 00:10:57,430 --> 00:11:02,300 Sed por tabelo, kiel en ĉi tiu kazo, ĉiuj vi ricevas estas kion vi petas la mastruma sistemo por. 189 00:11:02,300 --> 00:11:04,050 >> Kaj kiel flanken, por ke tiu estu certe, 190 00:11:04,050 --> 00:11:07,030 Mi parolas tiele vi petas la mastruma sistemo, demandu la mastruma sistemo. 191 00:11:07,030 --> 00:11:10,090 Mastruma sistemo, kiel vi probable scias, estas Mac OS, Vindozo, Linukso. 192 00:11:10,090 --> 00:11:13,560 Kiam vi vokas funkciojn kiel GetFloat 193 00:11:13,560 --> 00:11:19,280 aŭ vi deklaras variablojn kiel gradoj, 194 00:11:19,280 --> 00:11:23,200 ĉe la fino de la tago vi efektive demandi iun alian por doni al vi, ke memoro 195 00:11:23,200 --> 00:11:25,940 ĉar ni kiel aspirante programistoj 196 00:11:25,940 --> 00:11:28,800 ne havas ideon kiel reale preni fizikan aliron al memoro. 197 00:11:28,800 --> 00:11:31,100 Sed iu faras: la mastruma sistemo. 198 00:11:31,100 --> 00:11:36,630 Do krom prezentante nin per belaj ikonoj kaj menuoj kaj dosierujojn kaj similaj 199 00:11:36,630 --> 00:11:39,050 kiun vi vidas sur via labortablo, ĉu Mac aŭ PC, 200 00:11:39,050 --> 00:11:42,240 mastrumaj sistemoj ankaŭ fari la malalta nivelo sekulara stuff, 201 00:11:42,240 --> 00:11:44,680 la alte teknika stuff de administri la gigabajto 202 00:11:44,680 --> 00:11:48,780 aŭ 2 gigabajtoj da memoro kiun vi havas, administri la CPU kiun vi havas, kaj tiel plu. 203 00:11:48,780 --> 00:11:50,170 Do kiam vi skribas kodo, 204 00:11:50,170 --> 00:11:53,900 vi vere hooking al via mastruma sistemo en tiu senco. 205 00:11:53,900 --> 00:11:55,720 Mi tuj devos minimumigi tio. Bone. 206 00:11:55,720 --> 00:11:59,980 >> Aliaj demandoj pri tabeloj? 207 00:12:00,330 --> 00:12:02,520 Ne? Okay. 208 00:12:02,520 --> 00:12:06,680 Do la transiro nature de tabeloj estas fakte al temo kiun Estas iom konata. 209 00:12:06,680 --> 00:12:09,570 Kaj ni rigardis iam tiom mallonge en ĉi lasta fojo ankaŭ. 210 00:12:09,570 --> 00:12:12,500 Ĉi tiu estis ŝnuro ekzemplo de merkredo. 211 00:12:12,500 --> 00:12:15,060 Tiu ĉeno ekzemplo estis bela simpla programo, 212 00:12:15,060 --> 00:12:18,120 kaj mi vere simplificado lin por paro de linioj por la hodiaŭa celoj. 213 00:12:18,120 --> 00:12:22,680 Ĉiuj ĝi faras en linio 19 estas akiri kordoj de la uzanto, stokas ĝin en variablo nomita s. 214 00:12:22,680 --> 00:12:28,670 Tiam en linio 22 antaŭen ĝi estas ŝajne presi ke kordoj 1 karaktero por linio. 215 00:12:28,670 --> 00:12:30,730 Sed kiel estas fari ĉi tion? 216 00:12:30,730 --> 00:12:33,350 Ni deklaras variablon i, metante ĝin egala al 0, 217 00:12:33,350 --> 00:12:35,770 kaj ĉi fariĝas maljuna kutimo nun. 218 00:12:35,770 --> 00:12:39,270 Ni ne vidis ĉi tion ĝis merkredo, sed vi povas ia inferir de lia nomo 219 00:12:39,270 --> 00:12:44,610 strlen ĵus revenas kion kiam donita s? La longo de la kordo. 220 00:12:44,610 --> 00:12:47,940 Do se mi pasi ĝin ĉenon, citaĵo-unquote DAVID, 221 00:12:47,940 --> 00:12:51,810 ĝi estas espereble tuj revenos al mi la numero 5 pro DAVID. 222 00:12:51,810 --> 00:12:55,600 Do jen lia celo en la vivo estas preni ĉenon, ĉu malmolan kodita per vi 223 00:12:55,600 --> 00:12:58,840 aŭ en tiu kazo ŝtopis en kiel variablon, kiel argumento, 224 00:12:58,840 --> 00:13:01,980 kaj ĝi figuras kio la longo de tiu linio estas. 225 00:13:01,980 --> 00:13:06,470 >> Do jen nun ni pruntepreni kelkajn skribmaniero de la antaŭa kvizo ekzemplo. 226 00:13:06,470 --> 00:13:09,390 Ĉi tio havas nenion komunan kun flosas, havas nenion komunan kun kvizoj, 227 00:13:09,390 --> 00:13:13,100 sed ĝi rezultas ke la eta blanka mensogo ni estis diranta al vi ekde semajno 1 228 00:13:13,100 --> 00:13:16,330 estas, ke kordoj ne vere ekzistas en C. 229 00:13:16,330 --> 00:13:20,230 Kordo en la fino de la tago estas vere nur tabelo. 230 00:13:20,230 --> 00:13:25,140 Ĝi estas aro de bajtoj, do bajto, bitoko, bajto, bitoko, kiu memoros estas nur 8 bitoj, 231 00:13:25,140 --> 00:13:28,130 tiel bloko de memoro, eron de memoro, eron de memoro, eron de memoro. 232 00:13:28,130 --> 00:13:31,210 Kaj la rimedoj, per kiuj cxeno estas implementado 233 00:13:31,210 --> 00:13:33,070 estas metante la unuan karakteron tie, 234 00:13:33,070 --> 00:13:37,470 tiam ĉi tie, tiam tie, tiam tie, malantaŭo al malantaŭo al malantaŭo en la komputilo la memoro. 235 00:13:37,470 --> 00:13:42,160 Do se vi volas literumi el vorton kiel SALUTON, vi metus 1 karaktero H, 236 00:13:42,160 --> 00:13:48,240 tiam E, tiam L tiam L, tiam ho - 5 signoj en tuta - ie en via komputilo RAM. 237 00:13:48,240 --> 00:13:52,080 Sed la ŝlosilo detalo estas, ke ili tuj revenos al malantaŭo al malantaŭo al malantaŭo, 238 00:13:52,080 --> 00:13:54,200 tuj apud unu la alian. 239 00:13:54,200 --> 00:13:58,820 Kiam mi diros s [i], kio en la angla estas ĉi donas al mi? 240 00:14:01,240 --> 00:14:04,550 Kion s [i] reprezenti en tiu kazo? Yeah. 241 00:14:04,550 --> 00:14:07,800 >> [Studento] La th,-a signo en la linio. >> Ekzakte. La th,-a signo en la linio. 242 00:14:07,800 --> 00:14:12,260 Nun, i tuj komencas je 0 laŭ mia por buklo tie, 243 00:14:12,260 --> 00:14:14,850 sed tio estas bona ĉar ĉiu komencas rakonti de 0. 244 00:14:14,850 --> 00:14:19,160 Do s [0] tuj prezenti la literon H en vorto kiel SALUTON, 245 00:14:19,160 --> 00:14:24,530 s [1] tuj reprezenti leteron kiel E en vorto kiel SALUTON, ks. 246 00:14:24,530 --> 00:14:27,130 Kaj kion ni ŝajnas esti farante sur ĉiu ripeto de ĉi maŝo 247 00:14:27,130 --> 00:14:32,780 estas provizore stoki la th,-a karaktero en variablo nomata c, kiu estas nur char, 248 00:14:32,780 --> 00:14:35,010 kaj poste ni presi el c 249 00:14:35,010 --> 00:14:37,620 por ke je la fino de la tago kion tiu programo faras estas jeno. 250 00:14:37,620 --> 00:14:42,900 Se mi iros en la fonto dosierujo kaj Mi faros string1 kaj mi iras antaŭen kaj kuri string1, 251 00:14:42,900 --> 00:14:51,920 kaj tiam mi tajpas vorton kiel SALUTON, Enter, ĉiuj faras estas presi ĉi 1 karaktero samtempe. 252 00:14:51,920 --> 00:14:54,010 >> Do ekzistas ŝanco por bonmaniereco tie. 253 00:14:54,010 --> 00:14:58,150 Mi estas speco de fari pli da laboro, kvankam ĝi estas pli klara eble tiu maniero, ol necesa. 254 00:14:58,150 --> 00:15:03,270 Kiu linio de kodo tie mi povas probable forĵeti tute? Yeah. 255 00:15:03,270 --> 00:15:08,290 Linio 24. En linio 24 Mi deklari variablon c. 256 00:15:08,290 --> 00:15:14,320 Mi stoki la th,-a karaktero de s en ĝi, sed tiam Mi uzas c tie. 257 00:15:14,320 --> 00:15:20,160 Do mi uzas c, do mi sentas ke mi ne povas simple ĵeti linion 24 for. 258 00:15:20,160 --> 00:15:23,850 [Inaudible studento komenton] >> Ekzakte. 259 00:15:23,850 --> 00:15:26,240 Do kiam temas parolante pri la dezajno de programoj, 260 00:15:26,240 --> 00:15:30,740 rimarki tiun malpezan simpligo de la kodo, kiu estas same legeblaj, 261 00:15:30,740 --> 00:15:34,680 sed rimarkas ke s estas nur variablo, ĝia datumtipo estas tabelo, 262 00:15:34,680 --> 00:15:38,610 tial s [i] estas ĝuste tuj tuj revenos al vi la th,-a karakteron en tiu linio. 263 00:15:38,610 --> 00:15:40,620 Kaj se vi volas presi ĝin, ke estas bone. 264 00:15:40,620 --> 00:15:43,680 Vi nur devas uzi% c ĉar vi ne videbligi ĉenon, 265 00:15:43,680 --> 00:15:48,520 vi presi karaktero en cxeno, kaj ankaux havas la efekton de presi la th,-a signo. 266 00:15:48,520 --> 00:15:51,390 Kaj memoru la sola diferenco vere de lasta semajno kun uzante printf 267 00:15:51,390 --> 00:15:54,220 estas ke dum en la semajnoj pasinteco ni farus ion super simpla 268 00:15:54,220 --> 00:15:58,510 kiel la% s lokokupilo tiam la nomo de kordo tie, 269 00:15:58,510 --> 00:16:01,190 nun ni estas subnaĝado en iom profunda sub la kapuĉo kaj dirante, 270 00:16:01,190 --> 00:16:06,090 ne presi la ĉeno; presi la sola karaktero gxi. 271 00:16:06,090 --> 00:16:10,570 >> Do ni povas fari iun iom malsama tie ĉar tie estas 1 aliaj - ne cimo 272 00:16:10,570 --> 00:16:14,090 ĉar tiu programo estas prava, sed mi faras ion stultan 273 00:16:14,090 --> 00:16:16,810 ke mi menciis mallonge merkredon. 274 00:16:16,810 --> 00:16:22,680 Sed pensante reen, kiel povus tiu programo la dezajno esti plibonigita eĉ pli? Yeah. 275 00:16:22,680 --> 00:16:28,280 [Inaudible studento respondon] >> Ho, bona. 276 00:16:28,280 --> 00:16:32,120 Do rememori ke ni enkondukis dua variablo nomis n lasta fojo, 277 00:16:32,120 --> 00:16:34,850 kiu ŝajnas esti kontraŭdirante mem ĉar mia celo dua monato 278 00:16:34,850 --> 00:16:37,380 Estis nur por forĵeti variablo kiel nenecesa, 279 00:16:37,380 --> 00:16:40,700 sed memoru, ke merkrede ni efektive faris tion. 280 00:16:40,700 --> 00:16:46,170 Mi ŝanĝis la por buklo al reale havas komon ĉi tie, tiam n = strlen, 281 00:16:46,170 --> 00:16:52,120 kaj tiam super cxi tie mi faris i 00:16:57,660 Kio estas la fundamenta gajno kiun mi atingi per ŝanĝanta mia inicialización al ĉi 283 00:16:57,660 --> 00:17:01,590 kaj mia kondiĉo por tiu nun? >> [Inaudible studento respondon] >> Ekzakte. 284 00:17:01,590 --> 00:17:06,170 Mi ne memorante strlen denove kaj denove kaj denove ĉar memori kiel la por buklo verkoj. 285 00:17:06,170 --> 00:17:08,790 Eĉ se ili komencas akiri pli komplika aspekto, 286 00:17:08,790 --> 00:17:12,480 memori, ke la afero antaŭ la unua punktokomo estas la inicialización, kio okazas unufoje. 287 00:17:12,480 --> 00:17:14,359 La kondiĉo, tamen, estas en la mezo, 288 00:17:14,359 --> 00:17:17,710 kaj ĉi gets kontrolis ĉiufoje ke vi iru tra la ciklo. 289 00:17:17,710 --> 00:17:22,420 >> Do ĝi estas speco de stulta por esti petante la komputilo la sama demando multfoje - 290 00:17:22,420 --> 00:17:25,920 Kio estas la longo de SALUTON? Kio estas la longo de SALUTON? Kio estas la longo de SALUTON? - 291 00:17:25,920 --> 00:17:29,740 ĉar kiel ni vidos hodiaŭ kaj merkrede, ĉi tiu estas definitive tuj prenos tempon, 292 00:17:29,740 --> 00:17:34,320 kaj ĝi ne estas tre bona uzo de tempo ĉar elŝeligi la longo de kordoj 293 00:17:34,320 --> 00:17:37,030 fakte prenas iom da penoj. 294 00:17:37,030 --> 00:17:39,760 Ne _instantaneous_, kiel estas en iuj lingvoj. 295 00:17:39,760 --> 00:17:43,920 Do ŝanĝante tiun al n, la prezo Mi pagas estas kio? 296 00:17:43,920 --> 00:17:45,640 Ni vidas komerca-off here. 297 00:17:45,640 --> 00:17:49,460 Mi povas ŝpari tempon por ne demandante la sama malbenita demando denove kaj denove, 298 00:17:49,460 --> 00:17:51,740 sed tuj kostis al mi ion, kiu estas kiu? 299 00:17:51,740 --> 00:17:55,050 >> [Studento] Vi perdos iom da memoro. >> Ekzakte. Ĝi tuj kostis al mi iom memoro. 300 00:17:55,050 --> 00:17:56,670 Do en tiu kazo kostas al mi kio? 301 00:17:56,670 --> 00:18:01,530 Alia 32 bitoj ĉar n estas nur int, kiel implicita de la vorto int tie. 302 00:18:01,530 --> 00:18:03,300 Sed estas kiu bonfartas? 303 00:18:03,300 --> 00:18:05,800 Sincere, jen probable bone ĉar se vi opinias pri tio, 304 00:18:05,800 --> 00:18:09,030 la pli longaj la kordo estas, des pli kiam mi iros al malŝparas 305 00:18:09,030 --> 00:18:11,920 ĉar strlen tuj get nomata denove kaj denove kaj denove 306 00:18:11,920 --> 00:18:13,520 por ĉiu ripeto de la ciklo. 307 00:18:13,520 --> 00:18:18,070 Kaj tiuj tagoj, mia Mac havas 2 koncertoj de RAM, tiuj tagoj 4 koncertoj de RAM kelkfoje. 308 00:18:18,070 --> 00:18:22,420 Mi kredas ke mi povas pagi 4 de tiuj bitokoj por fakte akceli aĵojn. 309 00:18:22,420 --> 00:18:26,590 Sed ĉi tiu tuj estos komerco ekflugo kaj temo vere en programado kaj en komputiko 310 00:18:26,590 --> 00:18:28,320 de neniam vere atingi ion senpage. 311 00:18:28,320 --> 00:18:32,880 Se vi volas plibonigi ion ĉi tie, vi devas pagi por tio en la alia mano iel. 312 00:18:32,880 --> 00:18:35,880 Spaco kontre tempo en ĉi tiu kazo. 313 00:18:35,880 --> 00:18:40,700 >> Do tiu estis ĉiuj antaŭaj al io kripta kiel ĉi tiu, 314 00:18:40,700 --> 00:18:44,070 kiu, kiel vi probable deduktis el tiu alteco, fakte diras? 315 00:18:44,070 --> 00:18:47,420 [Inaudible studento respondon] >> Jes, do ĉi tio estas, Nepre trinku vian Ovaltine, 316 00:18:47,420 --> 00:18:52,490 efektive uzante algoritmon nomis ROT13, ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 kiu nur signifas turni ĉiujn literojn 13 lokoj, 318 00:18:55,500 --> 00:18:58,720 kiu signifas preni A kaj tiam aldoni 13 al ĝi kaj iras dot, punkto, punkto 319 00:18:58,720 --> 00:19:04,640 tuta vojo al la 13a letero for, faru la samon por B kaj por C kaj por D'ks. 320 00:19:04,640 --> 00:19:10,850 Kaj do se ni efektive konverti ĉi tie uzante movo de 13 lokoj, 321 00:19:10,850 --> 00:19:14,580 ni reiros al la malmultan Ralphie havis, kiu estis, Nepre trinku vian Ovaltine. 322 00:19:14,580 --> 00:19:18,160 Sed nun por problemo starigis 2, en la norma eldono almenaŭ, 323 00:19:18,160 --> 00:19:21,680 vi devas ia ĉu ĉi enciphering mem, 324 00:19:21,680 --> 00:19:25,990 kaj ni devas iel preni en enigo kiel ĉi tiu kaj ĉifri ĝin aŭ malĉifri ĝin. 325 00:19:25,990 --> 00:19:29,850 >> Do kiu el tiuj fundamentoj ia kondukas nin al tiu ŝanco? 326 00:19:29,850 --> 00:19:32,650 Ni rigardu ĉi tria ekzemplo tie. 327 00:19:32,650 --> 00:19:38,430 Unue, ĝi estas nomata ASCII. Kion ASCII referi al? 328 00:19:38,430 --> 00:19:40,460 American Standard Code for Information Interchange, 329 00:19:40,460 --> 00:19:43,850 kiu estas vere longa maniero diri kion? Kio estas Askio? 330 00:19:43,850 --> 00:19:47,890 [Inaudible studento respondon] >> Kio estas tio? >> [Studento] A karaktero mapo. >> Gravulo mapo. 331 00:19:47,890 --> 00:19:51,390 Simple mapas nombroj al leteroj ĉar la mondo havas normigita 332 00:19:51,390 --> 00:19:55,380 kio nombroj reprezentos kion literoj tiel ke ni ĉiuj povas uzi komputilojn 333 00:19:55,380 --> 00:19:59,340 kaj niajn programojn ĉiuj estas nur kongrua kiam temas pri presado ekster aĵoj en la ekrano. 334 00:19:59,340 --> 00:20:04,680 Do rememori ke 65 okazas por reprezenti A, 97 okazas reprezenti minuskla a. 335 00:20:04,680 --> 00:20:08,510 Kaj tiel ĉi tiu simpla programo tie ASCII estas utiligante tiun fakton - 336 00:20:08,510 --> 00:20:12,770 ke la mondo sciu, ke ĉefurbo A estas 65 - kaj ĝi estas nur presi la surĵeto. 337 00:20:12,770 --> 00:20:16,320 >> Do antaŭ ol ni mergi en ĉi tiun kodon, mi anstataŭ malfermi fina fenestro. 338 00:20:16,320 --> 00:20:21,550 Lasu min kaj fari ASCII, kaj tiam ni ĵus kuras tiun aferon nur por difekti la eligo. 339 00:20:21,550 --> 00:20:25,960 Kaj ĝuste tion faras: vere granda tabulo kiu ĝuste diras al mi ĉiuj el la diversaj kodoj 340 00:20:25,960 --> 00:20:27,950 por ĉiuj el la diversaj literoj. 341 00:20:27,950 --> 00:20:32,100 Do la super simpla programo, sed mi ne devis forte kodo tiuj 52 linioj de eliro: 342 00:20:32,100 --> 00:20:34,860 26 majuskla, 26 minuskla. 343 00:20:34,860 --> 00:20:37,790 Kontraŭe, mi faris tion programmatically kun paro de cikloj. 344 00:20:37,790 --> 00:20:39,720 Rimarku kion mi faris tie. 345 00:20:39,720 --> 00:20:44,790 Mi ripetis de i estas 65 sur ĝis 65 + 26 ĉar mi volis printi 26 literoj 346 00:20:44,790 --> 00:20:49,860 en la angla alfabeto, i + + en ĉiu ripeto, kaj nun rimarkis tiun denove. 347 00:20:49,860 --> 00:20:52,540 Ĝi estas la rekursieca de nia amiko typecasting 348 00:20:52,540 --> 00:20:54,620 per vi konverti 1 datumtipo al alia 349 00:20:54,620 --> 00:20:57,480 ĉar kion mi volas fari en ĉi tiu aparta programo? 350 00:20:57,480 --> 00:21:02,650 Mi volas rakonti ciferece ĉar tiel estas kiel mi kreskis kalkula - 65, 66, 67, kaj tiel plu - 351 00:21:02,650 --> 00:21:04,420 sed mi ne volas presi nur la numeroj. 352 00:21:04,420 --> 00:21:08,030 Mi volas presi la literon sekvata de la numero. 353 00:21:08,030 --> 00:21:18,640 Mi volas presi Al: nombro, B: numero, sed mi povas fari ĉi tion kun la sama ekzakta variablo. 354 00:21:18,640 --> 00:21:21,630 Do mi presi% c kiel lokokupilo di karaktero, 355 00:21:21,630 --> 00:21:25,080 % D kiel lokokupilo por cifero aŭ nombro. 356 00:21:25,080 --> 00:21:27,750 Tiam kion mi ŝtopi en por tiuj 2 anstataŭiloj? 357 00:21:27,750 --> 00:21:33,960 Mi unue plug en la karaktero ekvivalento de i, kaj tiam mi presi i mem. 358 00:21:33,960 --> 00:21:36,400 >> Do rimarki ankaux nur funkcias. 359 00:21:36,400 --> 00:21:39,320 Ĝuste kiel mi povas jxetu de kaleŝego al int 360 00:21:39,320 --> 00:21:41,750 por iri de reela nombro por entjero, 361 00:21:41,750 --> 00:21:46,100 ĉi tie mi povas iri de unu int al char, kiu estas iom stranga - 362 00:21:46,100 --> 00:21:48,680 ne sufiĉe mapaj sur la reala mondo - sed en komputiloj 363 00:21:48,680 --> 00:21:51,140 a char estas nur nombro sub la kapuĉo, 364 00:21:51,140 --> 00:21:53,590 do ni esti eterne tiel eksplicita tie por la komputilo, dirante: 365 00:21:53,590 --> 00:21:58,920 printf, presi ne mi kiel 65, presi gxin kiel ĝia nombra ekvivalento. 366 00:21:58,920 --> 00:22:02,110 Kaj ĝi rezultas mi teknike eĉ ne bezonas tion. 367 00:22:02,110 --> 00:22:05,020 Kion mi faris antaŭ momento estas eksplicite jxetantajn 368 00:22:05,020 --> 00:22:08,760 specifante kio datumtipo Mi volas iri de kaj al. 369 00:22:08,760 --> 00:22:11,840 Sed rimarki ke mi jam havas tiun lokokupilo% c 370 00:22:11,840 --> 00:22:14,930 kaj tiu alia% c lokokupilo tie. 371 00:22:14,930 --> 00:22:18,880 Kvankam ĉi tio ne estas int, la komputilo rimarkas ke char, 372 00:22:18,880 --> 00:22:21,080 ĝi estas nur int sub la kapuĉo. 373 00:22:21,080 --> 00:22:25,100 >> Do, se mi efektive recompilar ĉi kaj rerun la ASCII programo, 374 00:22:25,100 --> 00:22:31,210 rimarki ankoraŭ nur funkcias ĉar la komputilo rimarkas, ke ekzistas tiu korespondado. 375 00:22:31,210 --> 00:22:34,870 Nun, estas pli grava por fari la eksplicita casting en la mondo de flosas al ints 376 00:22:34,870 --> 00:22:37,460 ĉar vi fakte farante kalkulita decidon: 377 00:22:37,460 --> 00:22:40,140 forĵetu ĉio post la dekuma punkto. 378 00:22:40,140 --> 00:22:44,990 Tie estas vere nenio forĵeti ĉar karaktero estas nur numeron, 379 00:22:44,990 --> 00:22:48,220 kaj linio estas nur tabelo de signoj. 380 00:22:48,220 --> 00:22:52,530 Do kiam temas tempon por efektivigi iun kodita aŭ malĉifro, 381 00:22:52,530 --> 00:22:56,770 kio okazis, ke ni povas efektive traduki ion kiel ĉi sensencaĵon al, 382 00:22:56,770 --> 00:22:58,670 Nepre trinku vian Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Kio se ni scias nun - ni prenu al supozo - ke la ŝlosilo, 384 00:23:02,700 --> 00:23:08,010 la nombro ke ni turnanta ĉiuj el tiuj literoj por, estas la numero 13? 385 00:23:08,010 --> 00:23:11,800 Do ni iris de la litero B tuta vojo al ho je la komenco de la frazo, 386 00:23:11,800 --> 00:23:14,710 Nepre trinku vian Ovaltine, ĉar se mi faras B 387 00:23:14,710 --> 00:23:19,600 kaj tiam mi iros C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 jen kial la ĉifrado de la litero B igas Aŭ 389 00:23:23,760 --> 00:23:26,570 ĉar mi ĵus aldonis 13 al ĝi. 390 00:23:26,570 --> 00:23:33,460 >> Do se mi volas deĉifri tiun, mi esence devas preni O kaj tiam subtrahi 13 de ĝi. 391 00:23:33,460 --> 00:23:36,880 Aŭ, sincere, ĉar tie estas 26 literoj en la alfabeto, estas mirinde simetria, 392 00:23:36,880 --> 00:23:41,260 ni povas ankaŭ simple aldoni 13 kaj ni reiros al la letero B. 393 00:23:41,260 --> 00:23:44,290 Sed kiel vi irados tra apliki io ​​tiamaniere en Cezaro 394 00:23:44,290 --> 00:23:46,600 aŭ vere manipulanta kordoj ĝenerale? 395 00:23:46,600 --> 00:23:51,380 Se la litero B estas kion numeron? 396 00:23:51,380 --> 00:23:55,290 Kio estas la litero B? Do ĝi estas 66, right? 397 00:23:55,290 --> 00:23:59,220 Do se la litero A estas 65 kaj la litero B estas 66, 398 00:23:59,220 --> 00:24:03,940 do 66, ĉiuj mi devas fari estas aldoni 13 al ĝi, kaj tio donas al mi 79. 399 00:24:03,940 --> 00:24:09,150 Kaj se ni iros al nia eta cheat folio, 79 ja mapoj sur O. 400 00:24:09,150 --> 00:24:11,290 >> Sed estas iom de angulo kazo tie. 401 00:24:11,290 --> 00:24:15,170 Kio estas, ekzemple, la letero Z? 402 00:24:15,170 --> 00:24:20,180 Se ni faras 66 + 25 por ricevi la tuta vojo al la fino de la alfabeto, ni estas en 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 donas al mi 104, kaj divenu kion? 404 00:24:24,520 --> 00:24:29,200 104 ne egalas al majuskla litero. 405 00:24:29,200 --> 00:24:31,610 Ni reiru al iom cheat folio ĉi tie. 406 00:24:31,610 --> 00:24:38,070 Se mi rerun ĉi programo en la aparaton, avertas ke 104, se mi reiros al la stacio fenestro, 407 00:24:38,070 --> 00:24:41,800 104 estas ŝajne la minuskla h. 408 00:24:41,800 --> 00:24:46,400 Do ni bezonas iujn ŝlosilo lertaĵo tie por certigi, ke kiam ni starti je Z 409 00:24:46,400 --> 00:24:50,260 kaj ni aldonos 13 al ĝi ni ne volas nur teni forĝi antaŭeniris daŭre pli grandaj nombroj. 410 00:24:50,260 --> 00:24:52,600 Kion ni vere volas fari? 411 00:24:52,600 --> 00:24:54,570 Vi volas kovri ĉirkaŭe. 412 00:24:54,570 --> 00:25:00,250 >> Do rezultas, kiel vi vidis probable en sekcio nun aŭ en la problemo aro spec mem 413 00:25:00,250 --> 00:25:05,730 rimarkis, ke ekzistas tiu alia operatoro en C kiu ankaŭ estas procentsigno, 414 00:25:05,730 --> 00:25:11,020 sed dum ni uzas% tien por specifi lokokupilo, 415 00:25:11,020 --> 00:25:15,420 scias ke, speciale por problemo aro 2, estas ankaŭ iu kiel jene: 416 00:25:15,420 --> 00:25:18,990 int x = y% z. 417 00:25:18,990 --> 00:25:22,770 Lasu min nur prezenti tion kiel tre ĝenerala formo de ĉi tiu. 418 00:25:22,770 --> 00:25:25,580 Procentoj signifas kio en programlingvo? >> [Studento] Modulo. 419 00:25:25,580 --> 00:25:28,790 Module, kiu estas imago maniero diri la resto. 420 00:25:28,790 --> 00:25:31,620 Kvankam ekzistas eta distingo kun la difino tie, 421 00:25:31,620 --> 00:25:37,210 tio signifas dividi y per z sed ne revenas la rezulto de tiu divido; 422 00:25:37,210 --> 00:25:39,650 anstataŭe, redoni la resto. 423 00:25:39,650 --> 00:25:47,390 >> Do se y estas fakte 3 kaj z estas vere 2, 3 dividita per 2 estas 1 kun resto de 1, 424 00:25:47,390 --> 00:25:51,550 do kion faras x vere egala en ĉi tiu scenejo? 1. 425 00:25:51,550 --> 00:25:54,540 Tiu estas tia simpla, malalta nivelo ideo. 426 00:25:54,540 --> 00:25:56,480 Ĝi prenas iom da tempo por akiri vian menson envolvis ĉirkaŭ ĝi 427 00:25:56,480 --> 00:25:58,740 ĉar ĝi estas probable estis dum kiam vi eĉ devis prizorgi pri forĵetaĵojn 428 00:25:58,740 --> 00:26:01,160 kaj reale uzi ilin por io celkonscia, 429 00:26:01,160 --> 00:26:05,290 sed en ĉi tiu kazo la simpla fakto ke vi povas iri de granda nombro kiel 3 430 00:26:05,290 --> 00:26:08,920 al relative malgranda nombro kiel 2 kaj poste envolver ĉirkaŭ efektive 431 00:26:08,920 --> 00:26:14,160 per uzanta la resto al plej malgranda valoro kiel 1 tuj estos invalorable lertaĵo 432 00:26:14,160 --> 00:26:17,690 ke ni povas uzi ambaŭ por iu kiel Cezaro kaj tiu alia afero Vigenère 433 00:26:17,690 --> 00:26:22,240 en problemo starigis 2, sed ĉi tiu tuj estos _recurring_ lertaĵo tuta semestro. 434 00:26:22,240 --> 00:26:24,880 Tiu simpla, simpla ideo de nur prenante la reston en ĝenerala 435 00:26:24,880 --> 00:26:26,530 tuj ni permesos kovri ĉirkaŭe. 436 00:26:26,530 --> 00:26:31,140 Kaj kiel ni komenci ludi pli kun tabeloj, kiel ni komenci ludi pli kun memoro mem, 437 00:26:31,140 --> 00:26:35,800 ĉi tiu tuj fariĝis pli kaj pli de potenca atuto. 438 00:26:35,800 --> 00:26:43,420 >> Do demandojn tiam ASCII aŭ la reprezento de kordoj kiel tabeloj? 439 00:26:43,420 --> 00:26:47,430 Kaj ni prenos gxin 1 muesca plu. Yeah. 440 00:26:47,430 --> 00:26:52,350 [Inaudible studento demando] >> Bona demando. 441 00:26:52,350 --> 00:26:55,370 Kion tio signifas kiam variablo havas asteriskon antaŭ ĝi? 442 00:26:55,370 --> 00:26:57,720 Lasu min prokrasti respondi ke en ajna detalo, 443 00:26:57,720 --> 00:27:00,100 sed kiu raportas al temo konata kiel puntero. 444 00:27:00,100 --> 00:27:03,440 Punteros devas fari kun memoro, kaj ni estas fakte hodiaŭ 445 00:27:03,440 --> 00:27:06,330 prenante la unua paŝo al tiu diskuto, 446 00:27:06,330 --> 00:27:08,600 sed por nun, lasu min ŝajnigi ke la stelo ne ekzistas 447 00:27:08,600 --> 00:27:15,380 kaj ni daŭrigos nomi kordoj kordoj anstataŭ uzi char *, 448 00:27:15,380 --> 00:27:19,530 kiu vi verŝajne vidis antaŭe kaj mi metos sur la ekrano, en nur momento teaser. 449 00:27:19,530 --> 00:27:23,010 Do ni revenu al tiu en maniero pli detale ol multaj el vi verŝajne volas. 450 00:27:23,010 --> 00:27:25,760 Fine, ne hodiaŭ. Yeah. 451 00:27:25,760 --> 00:27:42,810 >> [Inaudible studento demando] 452 00:27:42,810 --> 00:27:47,080 En kio kunteksto vi devas provizi la signo por karaktero? >> [Studento] Yeah. 453 00:27:47,080 --> 00:27:52,130 Do implicite, kiam vi ne metas +, nur pozitivaj nombroj estas alprenita. 454 00:27:52,130 --> 00:27:55,390 Do, se nur skribi la numeron 1, ĝi estas pozitiva 1. 455 00:27:55,390 --> 00:27:57,710 Se vi vere volas specifi la nego de valoro, 456 00:27:57,710 --> 00:28:01,060 vi laŭvorte devas fari -1 sur via klavaro. 457 00:28:01,060 --> 00:28:20,440 Sed ĉi tio probable ne estas via demando. >> [Inaudible studento respondon] 458 00:28:20,440 --> 00:28:22,200 >> Bona demando. Okay. 459 00:28:22,200 --> 00:28:24,970 Do tiu havas por fari, Mi kolektos, kun ia cimo vi renkontis 460 00:28:24,970 --> 00:28:27,640 ĉar vi estas konverti entjera al gravulo, 461 00:28:27,640 --> 00:28:29,780 sed iel negatividad enzarzó, 462 00:28:29,780 --> 00:28:32,380 kaj do la karaktero simple eliris munged iel. 463 00:28:32,380 --> 00:28:36,710 Do por la momento, lasu min oversimplify iom gxis ni revenos al ĉi tiu speco de temo. 464 00:28:36,710 --> 00:28:39,570 Por nun, pensu pri aferoj tiamaniere - kaj ĉi tiu estas simplificación. 465 00:28:39,570 --> 00:28:43,500 Sed en la mondo de entjero, vi havas kiom da bitoj je via dispono? 466 00:28:43,500 --> 00:28:45,190 Vi havas 32 bitojn. 467 00:28:45,190 --> 00:28:49,030 Kaj ĝis nun, ni jam parolis pri la suma nombro de entjeroj vi povas pro reprezenti 468 00:28:49,030 --> 00:28:52,430 estas proksimume 4 milionoj en tuta ĉar vi havas 32 bitojn, 469 00:28:52,430 --> 00:28:55,100 tial jen 2 al la 32, do tio estas krude 4 miliardoj. 470 00:28:55,100 --> 00:28:58,810 Sed ni vidis unu semajno aŭ 2 tagoj, ke vi ne vere havas limigo de nombroj 471 00:28:58,810 --> 00:29:01,240 de 0 sur ĝis 4 miliardoj. 472 00:29:01,240 --> 00:29:06,340 La gamo anstataŭ iras de proksimume negativa 2 miliardoj pozitiva 2 miliardoj. 473 00:29:06,340 --> 00:29:10,990 Sed ĉi tiam petas la demandon, kiel vi reprezentas la nocion de negativaj 2 miliardoj 474 00:29:10,990 --> 00:29:13,260 des malpli negativa 1? 475 00:29:13,260 --> 00:29:17,960 Cxar nun, ni povas oversimplify kaj simple diri ke ni iras al uzi la plej maldekstra iom 476 00:29:17,960 --> 00:29:22,380 el tiuj 32 bitoj, kaj se ĝi estas 1 ĝi estas negativa nombro, 477 00:29:22,380 --> 00:29:25,090 kaj se ĝi estas 0 estas pozitiva nombro. 478 00:29:25,090 --> 00:29:28,570 La problemo kun tiu simplificado reprezento de negativaj nombroj 479 00:29:28,570 --> 00:29:33,700 estas ke se vi intence esti saĝa kaj klopodante igi de gravulo al nombro 480 00:29:33,700 --> 00:29:37,190 aŭ inverse, ne estas tia afero kiel negativa signo. 481 00:29:37,190 --> 00:29:42,550 En la mondo de ASCII, kiu uzas nur 8 bitoj, ĉiu 8 el tiuj bitoj aferon, 482 00:29:42,550 --> 00:29:46,810 kaj la plej maldekstra iom havas nenion komunan kun negatividad. 483 00:29:46,810 --> 00:29:49,670 Kaj nur por esti klara, kiam mi diras _leftmost_ bitoj, 484 00:29:49,670 --> 00:29:54,610 memori, ke kiam ni faris nia malmulto-rilataj ekzemploj en la unua semajno 485 00:29:54,610 --> 00:30:02,570 memori, ke ni tiris aĵojn kiel 1001101, io kiel tio. 486 00:30:02,570 --> 00:30:07,210 Kiam mi diras la _leftmost_ iom, mi nur laŭvorte signifas la 1 kiu vi skribas la tutan vojon tra la maldekstra. 487 00:30:07,210 --> 00:30:11,910 Do en la mondo de karakteroj ne ekzistas nocio de negatividad, 488 00:30:11,910 --> 00:30:16,360 por ke _leftmost_ iom reale havas ion por fari kun ASCII, neniel koncernas negatividad. 489 00:30:16,360 --> 00:30:19,390 >> Do ĝi sonas kiel - kaj el kunteksto estas malfacile respondi ĝuste - 490 00:30:19,390 --> 00:30:25,840 sed iel, via kodo estis malklara ke _leftmost_ iom kiel reprezentantoj negativa valoro 491 00:30:25,840 --> 00:30:29,160 kiam vere estis parto de la karaktero en demando. 492 00:30:29,160 --> 00:30:32,250 Kaj denove, mi oversimplifying ĉar komputiloj reale faras ion iom amatoro 493 00:30:32,250 --> 00:30:37,080 ol nur ŝanĝas ke _leftmost_ iom al 1 por negativa signo kontre a 0. 494 00:30:37,080 --> 00:30:41,270 Ili anstataŭe, se vi estas scivola al Google, uzi ion tipe nomitaj 2 La komplemento, 495 00:30:41,270 --> 00:30:43,830 kio estas iom pli kompleksa de proksimigo 496 00:30:43,830 --> 00:30:45,490 sed la ideo estas finfine la sama. 497 00:30:45,490 --> 00:30:50,530 >> Do mallonge, ĝi devis fari kun la fakto, ke vi massaging numeron al gravulo 498 00:30:50,530 --> 00:30:53,750 aŭ inverse sed via kodo ne estis consciente la fakto 499 00:30:53,750 --> 00:30:56,510 ke 1 de tiuj bitoj havis signifon en la nombran mondo. 500 00:30:56,510 --> 00:30:59,940 Tio ne estas la kazo en la karaktero mondo. 501 00:30:59,940 --> 00:31:04,270 Sed sonas kiel vi fiksis, en kies kazo Moot nun. Aliaj demandoj. 502 00:31:06,030 --> 00:31:07,110 Okay. 503 00:31:07,110 --> 00:31:11,560 Do ĝis nun, ĉio de la programoj ni skribas prenis enigo eble de la uzanto 504 00:31:11,560 --> 00:31:14,330 en formo de funkcioj kiel GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 aŭ se vi jam estis legante antaŭeniras en diversaj libroj aŭ Interreto referencoj, 506 00:31:16,990 --> 00:31:21,390 vi mem povus esti uzataj funkciojn kiel scanf kiu, sincere, ni uzas en la CS50 biblioteko. 507 00:31:21,390 --> 00:31:25,370 Sed en unu semajno aŭ 2, ni reale montri al vi kiel la CS50 biblioteko estas implementado 508 00:31:25,370 --> 00:31:27,890 por ke ni povu preni tiujn trejnado radoj sur aro. 509 00:31:27,890 --> 00:31:31,340 >> Sed ĝi rezultas tie estas alia metodo por enigo de uzanto. 510 00:31:31,340 --> 00:31:34,670 Fakte, ni mem estis uzante komandlinio argumentoj 511 00:31:34,670 --> 00:31:36,500 dum kelkaj semajnoj nun. 512 00:31:36,500 --> 00:31:41,150 Ĉiufoje ni kuros Clang aŭ ni kuros fari, 513 00:31:41,150 --> 00:31:45,050 ni ne nur tajpitaj clang, Enter, ni ne tajpis fari, Enter. 514 00:31:45,050 --> 00:31:49,340 Kion ni tipe skribita post la vorto clang ĉe nia stacio fenestroj prompto? 515 00:31:51,110 --> 00:31:52,900 [Studento] La dosiernomo. >> La dosiernomo, ĉu ne? 516 00:31:52,900 --> 00:31:57,560 Hello.c aŭ mario.c aŭ kion ajn la koncernajn dosiernomo estas. 517 00:31:57,560 --> 00:32:01,910 Kaj en tiu senco, kion vi vere faris estas vi influis la konduto de Clang 518 00:32:01,910 --> 00:32:05,750 ĉar certe la personoj kiuj skribis Clang havis nenian ideon, ke iom malnova vi 519 00:32:05,750 --> 00:32:08,890 tuj skribi programon nomata mario.c jarojn poste. 520 00:32:08,890 --> 00:32:13,150 Do vi devis iel influi la konduton de tiu programo, 521 00:32:13,150 --> 00:32:18,140 kaj tiu programo Clang devis esti skribita en tia maniero, ke ĝi povas akcepti enigon el vi 522 00:32:18,140 --> 00:32:23,480 per la aldono de vortoj en la prompto antaŭ la uzanto sukcesoj Eniru. 523 00:32:23,480 --> 00:32:27,860 >> Do rezultas ke dum iom da tempo ni estis deklarante preskaŭ ĉiuj niaj programoj 524 00:32:27,860 --> 00:32:32,840 komenci kiel tiu - int main (void) - kaj tiam ni antaŭenirinta 525 00:32:32,840 --> 00:32:35,110 kaj komencis skribi nian kodon. 526 00:32:35,110 --> 00:32:37,910 Kaj ni havu iom da akraj inkludas sur la supro de la dosiero, 527 00:32:37,910 --> 00:32:40,660 sed preskaŭ ĉiuj niaj programoj ĝis nun komencis kun tiu 528 00:32:40,660 --> 00:32:44,200 kvankam vi eble vidis en sekcio, en libroj, interreto referencoj 529 00:32:44,200 --> 00:32:46,570 ke tio ne fakte devas esti malplena. 530 00:32:46,570 --> 00:32:55,820 Alia prava formo por ĉi preni estas int argc kaj poste string argv []. 531 00:32:55,820 --> 00:32:57,500 Do nun kio ĉi implico? 532 00:32:57,500 --> 00:33:01,320 Ĝi rezultas ke argc, kiu estas homa konvencio - vi povus voki ĉi foo, 533 00:33:01,320 --> 00:33:03,710 sed ĝi nur estos multe malpli klara al legantoj - 534 00:33:03,710 --> 00:33:09,330 argc nur estas argumento por la funkcio nomita ĉefa kiu reprezentas kio? 535 00:33:09,330 --> 00:33:12,450 Kion argc stari por tiuj familiara? 536 00:33:12,450 --> 00:33:14,980 >> [Inaudible studento respondon] >> Jes, nombro de argumentoj aŭ argumento grafo. 537 00:33:14,980 --> 00:33:16,510 Tio estas tiel simpla kiel tiu. 538 00:33:16,510 --> 00:33:19,160 Kiom da argumentoj estis pasita al tiu programo? 539 00:33:19,160 --> 00:33:20,630 Kion tio signifas? 540 00:33:20,630 --> 00:33:27,090 Se sur la komanda linio mi kuri io tiamaniere - clang mario.c-- 541 00:33:27,090 --> 00:33:35,440 argc kiam mi batis Entajpu tuj alpreni valoron de, iom implikante, 2. 542 00:33:35,440 --> 00:33:40,150 Do rezultas ke argc estas argumento grafo, 543 00:33:40,150 --> 00:33:46,280 sed pro historiaj kialoj, la nomo de la programo mem estas inkluzivita en tiu grafo. 544 00:33:46,280 --> 00:33:51,950 Do argc estas 2, kiam mi skribis clang mario.c. 545 00:33:51,950 --> 00:33:54,290 Kion argv enhavi? 546 00:33:54,290 --> 00:33:57,020 Unue, argv aspektas kiel ŝnuro, sed ne tute 547 00:33:57,020 --> 00:33:59,310 ĉar ekde la pasinta merkredo kaj des pli hodiaŭ, 548 00:33:59,310 --> 00:34:02,890 tiuj rektaj krampoj signifi kion? Tio estas tabelo. 549 00:34:02,890 --> 00:34:07,110 Ne nombro en la tabelo, kaj ke devus sencon intuicie 550 00:34:07,110 --> 00:34:10,790 ĉar la homoj kiuj skribis Clang jaroj certe ne havis ideon 551 00:34:10,790 --> 00:34:16,300 kiom da vortoj homo kiel ni devus tajpi ĉe la prompto antaŭ kolizii Eniru. 552 00:34:16,300 --> 00:34:22,280 >> Do en ĉi tiu kazo tie ili deklaris la funkcio ĉefa prenado tabelo de argumentoj, 553 00:34:22,280 --> 00:34:24,590 0 aŭ pli argumentojn. 554 00:34:24,590 --> 00:34:26,460 Ili ne scias anticipe kiom ekzistas, 555 00:34:26,460 --> 00:34:29,690 do estas intence neniu nombro ene de tiuj rektaj krampoj. 556 00:34:29,690 --> 00:34:32,750 Sed la fakto, ke la rektaj krampoj estas tie estas rakontanta al la komputilo, 557 00:34:32,750 --> 00:34:34,639 atendi tabelo. 558 00:34:34,639 --> 00:34:37,489 Argv estas nur stenografio skribmaniero por argumento vektoro. 559 00:34:37,489 --> 00:34:39,889 Vektora estas ornama metodo por diri tabelo, 560 00:34:39,889 --> 00:34:42,980 kaj batalarangxis estas ornama metodo por diri liston aŭ kolekto. 561 00:34:42,980 --> 00:34:47,360 Do ĉi nur signifas ke se vi skribas ĉefa ŝatas ĉi 562 00:34:47,360 --> 00:34:51,100 anstataŭ kiel kiom ni estis farante ĝin dum la lastaj kelkaj semajnoj, 563 00:34:51,100 --> 00:34:54,699 via programo nun havas la povon por akcepti komandlinio argumentoj 564 00:34:54,699 --> 00:34:58,520 tiel ke jam vi devas skribi mario kaj poste batis Enter, 565 00:34:58,520 --> 00:35:01,610 tiam tajpi en nombro por kiom da blokoj alta vi volas la piramido esti, 566 00:35:01,610 --> 00:35:03,100 tiam batis Entajpu denove. 567 00:35:03,100 --> 00:35:07,720 Ni eĉ ne bezonas uzi GetString plu aŭ GetInt aŭ GetFloat por tiu afero. 568 00:35:07,720 --> 00:35:12,370 Ni povas nur atendi la uzanto tajpas tiuj vortoj ĉe la prompto mem 569 00:35:12,370 --> 00:35:16,850 same kiel la aŭtoroj de Clang decidis ke estus vere tedas programo 570 00:35:16,850 --> 00:35:20,550 se kompili via kodo vi unue tajpita clang, batis Enter, 571 00:35:20,550 --> 00:35:24,090 tiam ni diris al la uzanto, bonvolu tajpi la nomon de la dosiero kiun vi volas kompili, 572 00:35:24,090 --> 00:35:26,920 tiam ni entajpi mario.c kaj batis Eniru. 573 00:35:26,920 --> 00:35:29,850 Sed tio estas ĝuste kion ni estis farante al niaj uzantoj la pasintaj kelkaj semajnoj. 574 00:35:29,850 --> 00:35:33,550 Ni uzas GetString kaj ni atendu ĝis la programo kuras al instigas ilin por enigo. 575 00:35:33,550 --> 00:35:36,710 Kiu jam ne bezonas esti la kazo. 576 00:35:36,710 --> 00:35:41,160 >> Do en ĉi tiu ekzemplo tie, ni nun havas ĉenon argv, 577 00:35:41,160 --> 00:35:43,390 kaj ankaux estas simplificación, 578 00:35:43,390 --> 00:35:45,610 trejnado radoj kiuj tre frue elspezas. 579 00:35:45,610 --> 00:35:50,860 Ĉi tiu estas la plej taŭga metodo por skribi ĉi alternativa deklaro de ĉefa 580 00:35:50,860 --> 00:35:54,740 ĉar ĝi rezultas ke kion ni plenumas nomante ŝnuro fakte havas stelon, 581 00:35:54,740 --> 00:35:58,440 asterisko, en lia reala difino, sed ĉi nur aspektas komplika, 582 00:35:58,440 --> 00:36:02,600 ĝi estas malklara al la komenco, do ni simpligi por nur kreante sinonimo de varoj 583 00:36:02,600 --> 00:36:09,340 en la CS50 biblioteko kiu mapoj char * por tiu pli afablan vorton ŝnuro. 584 00:36:09,340 --> 00:36:13,180 >> Do ni vere provas ĉi tiam. Lasu min kaj malfermu gedit tie. 585 00:36:13,180 --> 00:36:17,010 Lasu min kaj malfermi argv de 1. 586 00:36:17,010 --> 00:36:21,620 Ĉi tiu programo ŝajne presas la argumentoj, sed en la angla terminoj, 587 00:36:21,620 --> 00:36:26,290 rigardante tiun kodon, kion signifas ĉi fari pli specife? 588 00:36:26,290 --> 00:36:35,910 Se mi tajpu la komandon a.out foo trinkejo, kio gets presita en mia blanka kaj nigra fenestro? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, Enter. 590 00:36:43,120 --> 00:36:48,300 Iru antaŭen. Yeah. >> [Inaudible studento respondon] 591 00:36:48,300 --> 00:36:52,730 Bona. Do a.out, nova linio, foo, novan linion, trinkejo, novan linion. 592 00:36:52,730 --> 00:36:54,980 Kial tio estas? Ni povas certe konfirmi en nur momento. 593 00:36:54,980 --> 00:36:56,940 Tio estas speco de fluffy linio de kodo. 594 00:36:56,940 --> 00:36:59,560  Ĝi simple presas nova linio simple fari tion pli belaj en la ekrano. 595 00:36:59,560 --> 00:37:03,730 Tio ĉi estas buklo ke tio ripetanta de 0 sur ĝis argc, 596 00:37:03,730 --> 00:37:07,210 kaj ĉi tiu estas pliigante en ĉiu ripeto + +. 597 00:37:07,210 --> 00:37:12,270 Do tiu estas nun dirante presi ĉenon, kiel implicita de ĉi% s. 598 00:37:12,270 --> 00:37:16,460 Argv [i] estas preskaux la sama ideo de la antaŭa ekzemplo. 599 00:37:16,460 --> 00:37:19,580 Ni kutimis nomi la variablo s; nun nomas, arbitre, argv. 600 00:37:19,580 --> 00:37:24,270 Tio signifas presi la th,-a argumento kiu tajpis en la komandlinio, 601 00:37:24,270 --> 00:37:28,690 kaj post ĉi tiu afero estas farita, nur por bono mezuron presi alia nova linio. 602 00:37:28,690 --> 00:37:31,600 >> Do ni vidu tion. Lasu min malfermi la terminala fenestro. 603 00:37:31,600 --> 00:37:37,470 Lasu min kompili argv de 1, kaj nun mi kuros argv de 1, Enter. Hmm. Okay. 604 00:37:37,470 --> 00:37:40,850 Ni kuras foo trinkejo. Interesa. Baz. 605 00:37:40,850 --> 00:37:42,640 Kaj se vi iam scivolis, kial mi tajpas tion, 606 00:37:42,640 --> 00:37:45,010 ĉi tiu estas nur ankaŭ stulta komputiko konvencio. 607 00:37:45,010 --> 00:37:48,050 La mondo ofte bezonas nur parolaj anstataŭiloj por vortoj. 608 00:37:48,050 --> 00:37:50,090 Do se vi volas paroli pri iu ĝenerala linio, 609 00:37:50,090 --> 00:37:53,250 komputilo sciencistoj simple emas diri foo kiam ili bezonas hazarda vorto, 610 00:37:53,250 --> 00:37:55,530 tiam ili diros trinkejo se ili bezonas duan hazarda vorto, 611 00:37:55,530 --> 00:37:59,100 tiam ili diros baz se ili bezonas trian vorton, tiam oni diras qux se ili bezonas kvara vorto, 612 00:37:59,100 --> 00:38:01,520 kaj tiam tie estas grandega religia debato en linio sur kio venas post qux, 613 00:38:01,520 --> 00:38:04,940 tiel vi povos Google ke elkompreni kiel la aliaj arbitraj vorto devus esti. 614 00:38:04,940 --> 00:38:07,480 Sed tiuj ne havas signifon ajn, 615 00:38:07,480 --> 00:38:10,100 kvankam foo trinkejo, se vi Google kiu, tio havi signifo, 616 00:38:10,100 --> 00:38:12,780 kiu estas parto de la etimologio tie. 617 00:38:12,780 --> 00:38:17,550 >> Do ĉio ĉi faras tiam estas presi 1 el tiuj kordoj por linio. 618 00:38:17,550 --> 00:38:19,900 Do se mi anstataŭe, tamen, volis iom amatoro, 619 00:38:19,900 --> 00:38:22,550 supozu ke mi ne volas presi ĉiun ĉenon por linio; 620 00:38:22,550 --> 00:38:26,220 Mi volis printi ĉiu karaktero de ĉiu linio por linio. 621 00:38:26,220 --> 00:38:28,550 Kiel mi povus anstataŭ fari tion? 622 00:38:28,550 --> 00:38:33,720 Kion mi bezonas por ŝanĝi pri tiu programo, se mi volas presi ne ĉiu vorto 623 00:38:33,720 --> 00:38:37,290 sed mi volas presi ĉiu vorto letero de letero por letero, 624 00:38:37,290 --> 00:38:40,590 tiam la sekva vorto letero de letero de litero? 625 00:38:40,590 --> 00:38:43,650 Kiel ni kombini tiujn ideojn tiel multe? Yeah. 626 00:38:43,650 --> 00:38:47,390 [Studento]% c. >> Bone. Do ni ie bezonas% c. 627 00:38:47,390 --> 00:38:50,680 Bona, ĉar mi ne volas presi tutajn kordoj, mi volas presi gravuloj. Kion alian? 628 00:38:50,680 --> 00:38:54,290 >> [Inaudible studento respondon] >> Interesa. 629 00:38:54,290 --> 00:38:56,860 Do ni bezonas ia dua dimensio tie nun 630 00:38:56,860 --> 00:39:02,300 ĉar pensi argv tiel tablo, sed estas tabelo de kordoj. 631 00:39:02,300 --> 00:39:07,170 Sed kiel de, kiel, 15 minutoj, kio estas kordo? Ĝi estas aro de karakteroj. 632 00:39:07,170 --> 00:39:12,320 Do vere, argv estas tabelo de tabelo de signoj, 633 00:39:12,320 --> 00:39:14,870 tabelo de tabeloj de signoj. 634 00:39:14,870 --> 00:39:19,170 Do rezultas ke ni povas uzi nur pli kvadrata krampo notacioj. Do ni faru ĉi. 635 00:39:19,170 --> 00:39:23,650 En la pinto de tiu ciklo sur linio 19, mi tuj persisti el i ĝis argc, 636 00:39:23,650 --> 00:39:25,760 sed tiam mi faros jene: 637 00:39:25,760 --> 00:39:27,580 cxar - mi ne povas uzi i nun. 638 00:39:27,580 --> 00:39:30,300 Mi bezonas alian variablo ĉar mi volas persisti super la vortojn 639 00:39:30,300 --> 00:39:32,640 sed tiam ankaux sur la literoj en la vortoj 640 00:39:32,640 --> 00:39:37,280 do mi ia havas vertikala akso kaj horizontala akso, ia koncepte. 641 00:39:37,280 --> 00:39:43,930 Do int j ricevas 0, tiam mi volas fari j dum j estas malpli ol - kaj mi purigi ĉi supre en iom. 642 00:39:43,930 --> 00:39:48,410 Kiel mi persisti super la literoj en linio? Ni faris ĉi antaŭ momento. 643 00:39:48,410 --> 00:39:54,670 Strlen de argv [i]. Bona. 644 00:39:54,670 --> 00:39:57,860 Kaj denove, mi faras iom ineficiencia tie por ne krei n aŭ kion ajn, 645 00:39:57,860 --> 00:39:59,610 sed ni revenos al tio. 646 00:39:59,610 --> 00:40:03,270 >> Do nun j + +. Nun mi devas indent plu ĉi tie. 647 00:40:03,270 --> 00:40:06,950 Kion mi nun volas presi en ĉiu ripeto? 648 00:40:06,950 --> 00:40:09,720 [Inaudible studento respondon] >> Do [i] donos al mi la vorto. 649 00:40:09,720 --> 00:40:12,910 [I] [j], ia kiel matrico. 650 00:40:12,910 --> 00:40:14,810 La de vi kun math-y fonoj, 651 00:40:14,810 --> 00:40:19,340 ni estas speco de indeksado eĉ pli profunden en ĉi tiu matrico aŭ tiun tabelo de tabeloj, 652 00:40:19,340 --> 00:40:21,380 ĉi 2-dimensia strukturo. 653 00:40:21,380 --> 00:40:25,070 Do nun ni vidu kio okazas tie. Lasu min malfermi mia granda fina fenestro. 654 00:40:25,070 --> 00:40:28,170 Lasu min rerun fari de argv de 1. 655 00:40:28,170 --> 00:40:33,090 Kaj mi ŝraŭbita ĝis tie, kiu estas bona leciono, ĉar mi tro forgesis fari tion. 656 00:40:33,090 --> 00:40:37,150 Implice deklarante C biblioteko funkcion 'strlen' kun tipo 'sensigna - 657 00:40:37,150 --> 00:40:40,360 Mi ecx ne scias kion la resto de tiu signifas, sed mi vidis ĉi tion antaŭe, 658 00:40:40,360 --> 00:40:42,000 implice deklari. 659 00:40:42,000 --> 00:40:45,540 Kiam ajn ni vidas ĉi eraron, kion signifas ĉi kutime signifas? 660 00:40:45,540 --> 00:40:48,520 >> [Inaudible studento respondon] >> Mi forgesis biblioteko ĉe supro. Sed atendu momenton. 661 00:40:48,520 --> 00:40:51,690 Kutime mi ŝraŭbita supren ĉar mi forgesis la CS50 biblioteko, sed tio estas tie. 662 00:40:51,690 --> 00:40:54,480 Kutime mi ŝraŭbita supren ĉar mi forgesis normo Mi / O. 663 00:40:54,480 --> 00:40:57,960 Kaj sincere, mi eĉ ne bezonas tiun. Ni ne uzas GetString hodiaŭ. 664 00:40:57,960 --> 00:40:59,900 Do kion mi mankas? 665 00:40:59,900 --> 00:41:04,860 Ekzistas alia biblioteko kiu nun ni bezonas uzi foje nomata string.h, 666 00:41:04,860 --> 00:41:08,980 kaj ĉi tiu estas nur alia biblioteko kiu havas pli funkcioj kiuj ne estas en normo Mi / O. 667 00:41:08,980 --> 00:41:11,640 >> Do ni revenu al mia granda fina fenestro. 668 00:41:11,640 --> 00:41:16,670 Okay. Nun, damn it, mi supozas mi estis erara. Mi estis uzanta la CS50 biblioteko. 669 00:41:16,670 --> 00:41:18,460 Do ni povas fiksi tion en iu el 2 manieroj. 670 00:41:18,460 --> 00:41:21,510 Ni povas preni la trejnado radoj ekstere nun kaj nur faru tion, 671 00:41:21,510 --> 00:41:26,600 aŭ estu la speco de observu ke simpligo nur por la momento, alglui ĉi reen en, 672 00:41:26,600 --> 00:41:30,180 solvi tiun problemon, kaj nun reiru al la fina fenestro. 673 00:41:30,180 --> 00:41:33,080 Do esti klara, en la CS50 biblioteko estas ne nur funkciojn, 674 00:41:33,080 --> 00:41:36,920 ĝi estas ankaŭ la ŝlosilvorto kordoj, tial ke eraro ĝuste okazis. 675 00:41:36,920 --> 00:41:43,010 >> Do jen ni iru. Mi riparis ambaŭ de la biblioteko temoj. Eniri. Bona. 676 00:41:43,010 --> 00:41:49,250 Argv de 1, foo bar, Enter. Bonega. 677 00:41:49,250 --> 00:41:52,830 Do nun ni havas ĉiu litero de ĉiu vorto presita 1 por linio, 678 00:41:52,830 --> 00:41:55,290 kiu ne faras por tre interesa programo, 679 00:41:55,290 --> 00:41:59,350 sed avizo nun ni havas la kapablon de ne nur ripetanta super vortoj 680 00:41:59,350 --> 00:42:04,090 sed ankaŭ super individuaj literoj en vortoj, kiuj sonas terure familiara 681 00:42:04,090 --> 00:42:10,330 al inkluzive la plej simpla el aplikoj kiel grimpadi literoj en cxeno ŝatas tion. 682 00:42:10,330 --> 00:42:12,410 Ni iru antaŭen kaj prenu nian 5-minuta paŭzo tie. 683 00:42:12,410 --> 00:42:14,410 Kaj kiam ni revenos, ni komencis paroli pri la efikeco 684 00:42:14,410 --> 00:42:17,670 kun kiu ni povas fari tion pli bone. 685 00:42:19,370 --> 00:42:21,900 >> Bone. Ni estas dorso. 686 00:42:21,900 --> 00:42:26,970 Danke al unu el niaj TFs kiu ludas multajn bananagrams, 687 00:42:26,970 --> 00:42:30,000 ni efektive havas tuta amaso de signoj kun ni ĉi tie hodiaŭ 688 00:42:30,000 --> 00:42:32,520 fizike korpigis kun tiuj malgranduloj plasto pecoj, 689 00:42:32,520 --> 00:42:36,910 kaj lasu min proponas ke ĉi malplenan blanka skribtabulo tie reprezentas la RAM en mia komputilo - 690 00:42:36,910 --> 00:42:39,790 portebla, labortablo, kion ajn - kaj tie aspektas kiel multaj ĝin 691 00:42:39,790 --> 00:42:44,090 ĉar se ni komencas batante tiun RAM en malgrandaj bajto-grandeco pecoj, 692 00:42:44,090 --> 00:42:48,970 ni arbitre diri ke iu kiun grandecon kaj ke neklara reprezentas - 693 00:42:48,970 --> 00:42:52,430 tie ni iru, kaj estu la malzomi iom tie - 694 00:42:52,430 --> 00:42:56,120 diru ion tiu grandeco reprezentas unuopa bajto. 695 00:42:56,120 --> 00:43:00,400 Do ni povas ja persvadis tuta amaso de bajtoj aŭ karakteroj ene de ĉi memoro, 696 00:43:00,400 --> 00:43:02,860 kiel sugestita de la relativa grandeco tie. 697 00:43:02,860 --> 00:43:06,780 >> Do supozu nun, ke la celo estas rezervi memoron por linio. 698 00:43:06,780 --> 00:43:08,680 Kiel tiu ĉi vere funkcias? 699 00:43:08,680 --> 00:43:11,380 En la programoj ni estis skribante, ni kutime uzis GetString, 700 00:43:11,380 --> 00:43:16,300 sed nun, klare, estas ĉi tiu alia kanalo tra kiu ni povos atingi uzanto enigo en argv 701 00:43:16,300 --> 00:43:18,190 tra komandlinio argumentoj. 702 00:43:18,190 --> 00:43:20,580 Sed kio vere okazas sub la kapuĉo? 703 00:43:20,580 --> 00:43:24,920 Ĝi rezultas se ni nomas - ni rulumu reen al GetString - la funkcio GetString 704 00:43:24,920 --> 00:43:28,190 en la CS50 biblioteko, la uzanto instigis por kordoj, 705 00:43:28,190 --> 00:43:30,780 la uzanto tajpas en iu vorto - ni nomas ĝin SALUTON. 706 00:43:30,780 --> 00:43:35,410 Kaj ni estis dirante dum la lastaj kelkaj semajnoj, ke la reveno valoro de GetString 707 00:43:35,410 --> 00:43:37,750 estas fakte kordoj, kiel la vorto SALUTON. 708 00:43:37,750 --> 00:43:39,660 >> Sed kio GetString vere faras? 709 00:43:39,660 --> 00:43:45,230 Kiel la uzanto tajpas en SALUTON, Enter, GetString estas decidi, 710 00:43:45,230 --> 00:43:47,930 bone, kiom da karakteroj estas tio? Tiu estas H-E-L-L-O. 711 00:43:47,930 --> 00:43:52,500 Do ĝi bezonas destini, ĝi bezonas demandi la mastruma sistemo - Linukso en ĉi tiu kazo - 712 00:43:52,500 --> 00:43:55,410 dum almenaŭ 5 bitokoj stoki SALUTON. 713 00:43:55,410 --> 00:43:59,570 Kaj kio tiam procedas fari unufoje alvenas reen tiuj 5 bitokoj de la mastruma sistemo 714 00:43:59,570 --> 00:44:04,120 estas jalonan SALUTON malantaŭo al malantaŭo al malantaŭo al malantaŭo. 715 00:44:04,120 --> 00:44:11,070 Kaj tiel tio, kio vere revenis de GetString estas eron de datumoj kiuj aspektas kiel ĉi tio. 716 00:44:11,070 --> 00:44:16,850 Sed ĉi tiu estas iom malpreciza ĉar ĝi rezultas ke ĝi ne estas tiel simpla 717 00:44:16,850 --> 00:44:20,310 kiel simple stoki SALUTON en la komputilo la memoro 718 00:44:20,310 --> 00:44:24,140 ĉar supozas ke mia programo kiu mi skribas en C tiam nomas GetString denove, 719 00:44:24,140 --> 00:44:28,210 kaj la sekva vorto la uzanto tajpas en estas ADIAŬ, ADIAŬ. 720 00:44:28,210 --> 00:44:31,300 Nu, mi bezonas por ĝustigi tiu vorto ADIAŬ ie en memoro. 721 00:44:31,300 --> 00:44:33,790 Mi ne povas clobber SALUTON. 722 00:44:33,790 --> 00:44:37,320 Ekzemple, mi ne volas la komputilon al komencu overwriting kiel tiu 723 00:44:37,320 --> 00:44:41,400 la originala vorto ĉar mi povus ankoraŭ esti uzanta la vorton SALUTON en variablo 724 00:44:41,400 --> 00:44:43,070 ie ajn en mia programo. 725 00:44:43,070 --> 00:44:45,900 >> Do B-Y-E havas por fini aliloke en memoro. 726 00:44:45,900 --> 00:44:50,460 Sed la konvencio tipe estas ke la sekvanta linio vi destini 727 00:44:50,460 --> 00:44:54,940 probable, sed ne ĉiam, tuj finos je la venonta havebla memoro loko. 728 00:44:54,940 --> 00:44:57,370 Kaj se mi ne petis la mastruma sistemo por ajna memoro 729 00:44:57,370 --> 00:45:01,380 ekde la lasta fojo mi vokis GetString, malakordo estas la vorto ADIAŬ 730 00:45:01,380 --> 00:45:05,790 tuj finos ĝuste post la vorto SALUTON en memoro. 731 00:45:05,790 --> 00:45:10,550 Sed en ĉi tiu punkto povas eble vidi kie potenciala problemo ekestas. 732 00:45:10,550 --> 00:45:13,310 Ĉar la sekvanta pecoj de memoro, la sekvanta bitokoj, kiuj estis nur libera - 733 00:45:13,310 --> 00:45:18,230 purigi blanka skribtabulo - en la komputilo la memoro estis tuj apud SALUTON, 734 00:45:18,230 --> 00:45:23,670 sentas kiel la unua kordo mi petis povus subite nun ŝanĝi 735 00:45:23,670 --> 00:45:26,410 ĉar mi esence ŝanĝis ĝin al HELLOBYE 736 00:45:26,410 --> 00:45:31,310 anstataŭ iel demarcing la komenco de ADIAŬ kaj la fino de SALUTON. 737 00:45:31,310 --> 00:45:33,920 >> Do rezultas ke kio vere okazas sub la kapuĉo, 738 00:45:33,920 --> 00:45:37,570 kion vi eble duonvidis en linio referencoj aŭ sekcio aŭ libroj 739 00:45:37,570 --> 00:45:41,780 aŭ tute ne nur ankoraux estas, ke ekzistas reale intenca demarcación 740 00:45:41,780 --> 00:45:45,890 inter vortoj en komputilo la memoro. 741 00:45:45,890 --> 00:45:52,480 Kaj fakte, en ĉi tiu kazo tie, anstataŭ nur metis ADIAŬ tuj apud SALUTON, 742 00:45:52,480 --> 00:45:58,610 anstataŭe, la komputilo metas specialan karakteron, la speciala nula karaktero, por tiel diri, 743 00:45:58,610 --> 00:46:03,050 kio estas reprezentita per markilo kun backslash 0. 744 00:46:03,050 --> 00:46:06,700 Do longan rakonton, memorigu, ke signoj estas reprezentitaj en ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII estas nur surĵeto inter nombroj kaj literoj, 746 00:46:09,680 --> 00:46:13,870 kaj la plimulto de tiuj literoj komenci proksimume 65 por ĉefurbo A, 747 00:46:13,870 --> 00:46:19,780 sed ĝi rezultas vi povas certe reprezentas la numeron 0 kiel entjero aŭ en duuma, 748 00:46:19,780 --> 00:46:22,690 kaj tio rezultas la mondo decidis tre longe: "Vi scias, kion?" 749 00:46:22,690 --> 00:46:27,550 "Estu la rezervo nombro 0 kiel ne reprezentas iu ajn signon sur la klavaro - 750 00:46:27,550 --> 00:46:30,810 "Neniu literoj, ne nombroj, neniu interpunkcio. 0 estas speciala." 751 00:46:30,810 --> 00:46:35,830 "Ĝi estas tuj estos la speciala nula karaktero, kaj ni tuj skribos ĝin kiel \ 0." 752 00:46:35,830 --> 00:46:41,170 La diferenco estas, se ni nur skribis 0, 0 estas karaktero. 753 00:46:41,170 --> 00:46:45,700 Memori ke ekzistas ASCII kodoj por 0, dum 1, por 2, dum 3 754 00:46:45,700 --> 00:46:50,570 ĉar la karakteron 0 estas malsama de la nombro 0. 755 00:46:50,570 --> 00:46:54,270 Kaj vi povas vidi, ke se vi retrorigardas de semajno 1 kiam ni unue parolis pri ASCII, 756 00:46:54,270 --> 00:46:59,130 0 kaj 1 kaj 2 kaj 3 tuta vojo ĝis 9 havis siajn proprajn ASCII kodoj. 757 00:46:59,130 --> 00:47:02,300 Ili ne estas, hazarde, 0 tra 9. Ili estas tre malsamaj. 758 00:47:02,300 --> 00:47:08,770 Do 0 simple signifas "Mi estas speciala," kaj la \ 0 rimedoj, laŭvorte, "Mi ne estas la 0 karakteron." 759 00:47:08,770 --> 00:47:11,360 "Mi estas tiu speciala valoro, la nula karakteron." 760 00:47:11,360 --> 00:47:16,930 Do mi vere bezonas alian de tiuj kiam mi ne povas fari la saman eraron du fojoj. 761 00:47:16,930 --> 00:47:21,550 >> Do post la vorto ADIAŬ ni ankaŭ tuj bezonos alian de tiuj nula gravuloj. 762 00:47:21,550 --> 00:47:27,090 Lasu min kapti mian plumon tie kaj lasu min rapide desegni alia \ 0 763 00:47:27,090 --> 00:47:30,480 tiel ke post mi demandis la mastruma sistemo por 2 kordoj 764 00:47:30,480 --> 00:47:33,270 tra GetString sekvita de alia alvoko al GetString, 765 00:47:33,270 --> 00:47:35,640 ĉi tiu estas kio estas reale en memoro. 766 00:47:35,640 --> 00:47:39,900 Do kiam mi reiros ĉenon, mi vere contrarestar ke, 767 00:47:39,900 --> 00:47:43,450 kaj kiam mi atingas la sekvanta linio, mi vere contrarestar tio. 768 00:47:43,450 --> 00:47:47,910 Do ĉi petegas la demando, strlen, unue, kio devus ĝin redoni? 769 00:47:47,910 --> 00:47:54,650 Kiam mi vokas strlen sur la kordo s kaj s estas la vorto SALUTON ke la uzanto tajpas en, 770 00:47:54,650 --> 00:47:57,800 Kion ni evidente diras la longo de SALUTON estis kelkajn minutojn antaŭe? 771 00:47:57,800 --> 00:48:01,290 Estis 5, right? H-Kaj-L-L-O. Kaj tio estas ja kiel strlen verkoj. 772 00:48:01,290 --> 00:48:05,670 Denove kion normala homo devus atendi la longo de kordoj esti. 773 00:48:05,670 --> 00:48:11,030 Sed fakte, kiom granda estas la tabelo de signoj ke tio stokante saluton? 774 00:48:11,030 --> 00:48:12,770 Estas vere 6. 775 00:48:12,770 --> 00:48:15,740 Do strlen ne mencias tiun fakton al vi. 776 00:48:15,740 --> 00:48:20,300 Sed sub la kapuĉo la komputilo ja uzante 6 bajtojn por memori 5-letero vorto, 777 00:48:20,300 --> 00:48:22,380 kaj ĉi tiu estas vera negrave kiom longe la vorto estas. 778 00:48:22,380 --> 00:48:26,470 Tie ĉiam tuj estos speciala nula finanta karakteron al la fino de la ŝnuro 779 00:48:26,470 --> 00:48:28,800 al demarc lia tuta longo. 780 00:48:28,800 --> 00:48:33,430 >> Se do vi estas nun la persono apliki strlen 20, 30 jaroj, 781 00:48:33,430 --> 00:48:35,520 kiel vi irados tra apliki strlen mem? 782 00:48:35,520 --> 00:48:39,980 Ni prenu por koncedis ke ĝi ekzistas, ĝuste kiel ni prenu por koncedis ke printf ekzistas, 783 00:48:39,980 --> 00:48:42,850 sed se SALUTON estas la vorto en demando 784 00:48:42,850 --> 00:48:45,220 kaj kion mi havas en memoro estas iu kiu aspektas kiel ĉi tiu, 785 00:48:45,220 --> 00:48:48,130 se vi devis reimplement strlen ĉar vi demandis al 786 00:48:48,130 --> 00:48:50,260 aŭ ĉar, sincere, vi ne sciis strlen ekzistis - 787 00:48:50,260 --> 00:48:54,280 vi devis ruli ĉi tiun ĉe via propra - kiel vi povis apliki strlen 788 00:48:54,280 --> 00:48:57,760 kiam donita iu kiu aspektas tiel? 789 00:48:57,760 --> 00:49:02,750 Nun ke ni scias cxeno estas tabelo, ni povas persisti super ĉiu el la diversaj gravuloj 790 00:49:02,750 --> 00:49:06,320 uzante ion kiel - Ni provu fari tion en la muŝo. 791 00:49:06,320 --> 00:49:12,060 >> Lasu min iri en la aparaton. Lasu min krei novan dosieron, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Lasu min nun kaj ne inkluzivas stdio.h tiel ke ni havas aliron al printf. 793 00:49:19,260 --> 00:49:25,820 Lasu min fari int main (void). Oh. Mi nur faras tion en mia propra cxar nun tiam. [Chuckles] 794 00:49:25,820 --> 00:49:28,300 Dankon. 795 00:49:28,300 --> 00:49:31,000 Ĉi tio estas kion mi faras. Bone. 796 00:49:31,000 --> 00:49:34,820 Do antaŭ ol mi turnis sur la ekrano, mi tajpis la tuta de tiu. 797 00:49:34,820 --> 00:49:37,550 Kaj nun kion mi faros estas la jenaj: 798 00:49:37,550 --> 00:49:40,360 printf ("Donu al mi string:") 799 00:49:40,360 --> 00:49:42,700 Tio estas nur lanugaj instrukcioj. 800 00:49:42,700 --> 00:49:45,700 Nun lasu min fari ĉenon s = GetString. 801 00:49:45,700 --> 00:49:47,260 Mi jam devas fari ŝanĝon nun. 802 00:49:47,260 --> 00:49:52,740 Mi uzas la CS50 biblioteko subite, tiel ke mi iru antaŭen kaj tajpu en cs50.h. 803 00:49:52,740 --> 00:50:00,720 Kaj nun ni faru jene: printf ("La longo estas:% d, strlen [s] - 804 00:50:00,720 --> 00:50:03,540 kaj mi ne faris ankoraux. Kion alian mi devas aldoni al tiu programo? 805 00:50:03,540 --> 00:50:05,740 >> [Studento] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Do nuntempe, ni uzas strlen, do ni certigu la tradukilo scias kie tio estas, 807 00:50:10,800 --> 00:50:12,390 do iom prudento kontroli. 808 00:50:12,390 --> 00:50:16,400 Mi ricevas ĉenon en linio 8, kaj en la linio 9 Mi presi siajn longo kun% d. 809 00:50:16,400 --> 00:50:19,400 Do ni iru antaŭen kaj malfermu tiun supren. 810 00:50:19,400 --> 00:50:23,380 Ni faras strlen - kompilas okay - 811 00:50:23,380 --> 00:50:30,120 strlen - lasu min zomi - Entajpu, H-E-L-L-O, Enter. La longo estas 5. 812 00:50:30,120 --> 00:50:32,730 >> Okay, do strlen ŝajnas funkcii, sed la mondo sciis tion. 813 00:50:32,730 --> 00:50:37,310 Do ni nun apliki strlen nin kiel sekvas. 814 00:50:37,310 --> 00:50:39,490 Lasu min prenas ĉi biblioteko for. 815 00:50:39,490 --> 00:50:42,590 Ni ne plu havas aliron al string.h ĉar mi eĉ ne sciis ekzistis. 816 00:50:42,590 --> 00:50:45,970 Sed tio estas bone, ĉar mi povas apliki strlen mem 817 00:50:45,970 --> 00:50:50,200 kaj havi ĝin preni string nomata enigo, 818 00:50:50,200 --> 00:50:53,830 kaj nun mi bezonas por kalkuli la longon de ĉi tiu linio. 819 00:50:53,830 --> 00:50:55,880 Do kiel mi povas fari ĉi tion? 820 00:50:55,880 --> 00:51:00,190 Kio se mi faras - ni vidu kiel fari ĉi - Kion vi volas fari? 821 00:51:00,190 --> 00:51:04,130 >> [Inaudible studento respondon] >> Bone. 822 00:51:04,130 --> 00:51:05,970 Do ni povas fari tion en faskon da manieroj. Lasu min provi preni tiun koncepton. 823 00:51:05,970 --> 00:51:10,220 Lasu min donu al mi la int variablo i, do mi komencas je 0. 824 00:51:10,220 --> 00:51:19,380 Kaj mi diru jene: dum eniro [i] estas ne egala al kio? \ 0. 825 00:51:19,380 --> 00:51:23,480 Do rezultas, kiel kun la kazo kun ĉiuj signoj kiam skribas ilin laŭvorte en programo, 826 00:51:23,480 --> 00:51:25,940 oni devas uzi nur citaĵoj, ne duoblaj citiloj. 827 00:51:25,940 --> 00:51:29,250 Do, se mi skribis la leteron al, mi farus tion, la letero b, mi farus tion. 828 00:51:29,250 --> 00:51:33,440 Ĉi tio, per kontrasto, estus ĉenon, ne individua karaktero. 829 00:51:33,440 --> 00:51:38,470 >> Do mi volas \ 0 laŭvorte. Kion mi volas fari en ĉi tiu buklo? 830 00:51:38,470 --> 00:51:42,650 Vere, mi bezonas alian variablo, do int longeco atingas 0. 831 00:51:42,650 --> 00:51:46,190 Eĉ se vi ne certas kial ni komencis la vojon ni faris, 832 00:51:46,190 --> 00:51:50,110 nun ke ni iras tiun vojon, kion mi volas fari en linio 9? 833 00:51:50,110 --> 00:51:55,820 longeco + + kaj tiam malsupren tie sur linio 10, reveno longa. 834 00:51:55,820 --> 00:51:58,370 Do kiel estas strlen implementado? 835 00:51:58,370 --> 00:52:00,550 Ĝi estas fakte implementado probable kiel ĉi tio. 836 00:52:00,550 --> 00:52:03,470 Eble la persono uzis por ciklo, eble fari dum loop - kiu scias? 837 00:52:03,470 --> 00:52:05,940 Ni ŝatus vere devas serĉi sub la kapuĉo en la reala fontokodo 838 00:52:05,940 --> 00:52:08,520 en iu dosiero nomita string.c probable. 839 00:52:08,520 --> 00:52:10,480 >> Sed ĉi tie ni pensas pri tio, kion mi faras. 840 00:52:10,480 --> 00:52:13,640 Mi deklaras variablon nomis i, metante ĝin egala al 0. 841 00:52:13,640 --> 00:52:17,520 Mi tiam deklaris alia variablo nomas longo, fiksante ĝin egala al 0. 842 00:52:17,520 --> 00:52:25,440 Tiam mi diris dum la th,-a signo en enigo ne estas egala al la speciala nula karaktero, \ 0, 843 00:52:25,440 --> 00:52:27,070 pliigo la longo. 844 00:52:27,070 --> 00:52:32,550 Sed tuj kiam la th,-a signo estas tiu speciala karaktero, kio okazas al la ciklo? 845 00:52:32,550 --> 00:52:36,540 Ĝi mallongaj cirkvitoj. Ĉesas, kiu signifas ke ni tiam tuj revenos longa. 846 00:52:36,540 --> 00:52:40,740 >> Do, se mi ne mess up, ni iru antaŭen kaj iru reen al mia fina fenestro. 847 00:52:40,740 --> 00:52:43,550 Lasu min recompilar. Kaj mi ne ŝraŭbo supren. 848 00:52:43,550 --> 00:52:46,320 Nekongrua redeclaration de biblioteko funkcio strlen. 849 00:52:46,320 --> 00:52:48,650 Do mi provis akiri tro ruza por mia propra bone tie. 850 00:52:48,650 --> 00:52:51,610 La tradukilo fakte scias ke estas funkcio nomita strlen 851 00:52:51,610 --> 00:52:55,290 eĉ kvankam ni ne inkludis la biblioteko. Tio estas bone. Kion ajn. 852 00:52:55,290 --> 00:52:58,230 Ni nur tuj kunlabori tiam. Ni renomi ĉi longa. 853 00:52:58,230 --> 00:53:04,110 Lasu min ŝanĝi la uzon de ĝi al longa tie, kaj ĉi faros Clang feliĉa. 854 00:53:04,110 --> 00:53:08,900 Kiel flanken, ĉar kelkaj el tiuj funkcioj estas tiel Darn komuna - 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - ili efektive havas ia speciala statuso. 856 00:53:12,390 --> 00:53:15,310 Kaj tiel Clang nur scias iom ion specialan pri ili. 857 00:53:15,310 --> 00:53:18,760 Tio ne ĉiam la kazo kun plej funkcioj, por ke tio ni got kriis al. 858 00:53:18,760 --> 00:53:21,350 >> Lasu min provi denove. Feliĉe, ĝi funkciis tiam. 859 00:53:21,350 --> 00:53:23,560 Do nun mi kuros mia propra strlen programo. 860 00:53:23,560 --> 00:53:29,740 Donu al mi kordoj: H-E-L-L-O, Enter. Kaj mi ŝraŭbita supren. 861 00:53:29,740 --> 00:53:34,750 Kial? >> [Inaudible studento respondon] >> Ekzakte. 862 00:53:34,750 --> 00:53:39,180 Do mi mem ĉi tie tre agrabla aspekto senfina ciklo 863 00:53:39,180 --> 00:53:42,270 ĉar kvankam mi pliigante longeco sur ĉiu ripeto, 864 00:53:42,270 --> 00:53:47,860 kion mi klare ne faras? Mi ne pliigante i. Okay. Facila riparas. Jes? 865 00:53:47,860 --> 00:53:52,430 Okay. Ne Nun ni kurus afoul de iu alia komuna eraro kie mi bezonas krampoj. 866 00:53:52,430 --> 00:53:54,430 Kaj sincere, tiu kodo komencas rigardi malbela, 867 00:53:54,430 --> 00:53:56,460 do ni prenos ponardopiko en pureco ĉi supre en momento. 868 00:53:56,460 --> 00:53:58,810 Sed nun mi pliigante tiel longa kaj mi. 869 00:53:58,810 --> 00:54:02,630 Sincere, mi jam vidas ŝancon por plibonigo tie, sed ni revenos al tio. 870 00:54:02,630 --> 00:54:05,270 >> Do nun ni simple certigi ni almenaŭ progresas. 871 00:54:05,270 --> 00:54:08,320 Ĉi tio okazis al kelkaj el vi, kaj mi neglektis mencii tiun anticipe. 872 00:54:08,320 --> 00:54:12,420 Kiam vi havas la malfeliĉo de scenaro kiel ĉi tiu, kiel vi ripari tiun 873 00:54:12,420 --> 00:54:15,130 mallonga de restartigi la aparaton aŭ via komputilo aŭ fermi la fenestron? 874 00:54:15,130 --> 00:54:16,860 Estas vere facila. 875 00:54:16,860 --> 00:54:21,680 Kontrolo C sendos tiu malgranda karoto simbolo C, kaj ke ĝuste finiĝas plej programoj. 876 00:54:21,680 --> 00:54:25,990 Se vi havas vere malbona senfina ciklo ke tio presi stuff malfinie multaj fojoj, 877 00:54:25,990 --> 00:54:29,960 kelkfoje vi havu bati Kontrolo C miloble fari ĝin vere auxskultos. 878 00:54:29,960 --> 00:54:33,910 Do ĝuste realigi nun ĉar mi ne presi ion, kiu estis sufiĉe facila. 879 00:54:33,910 --> 00:54:37,970 Kaj teknike, fojo sufiĉas, sed I get senpacienca kaj mi kutime batis ĝin, ke multaj fojoj. 880 00:54:37,970 --> 00:54:43,400 >> Do strlen. Donu al mi kordoj: SALUTON. Ĉu tuj labori cxi tiun tempon? 881 00:54:44,580 --> 00:54:47,490 Okay. Alia komuna eraro. Devas recompilar. 882 00:54:47,490 --> 00:54:50,430 Tio estis intenca, tiu. Bone. 883 00:54:50,430 --> 00:54:54,260 Do strlen, H-E-L-L-O, Enter. Bonega. 884 00:54:54,260 --> 00:54:55,910 Do ni nun havas strlen al 5. 885 00:54:55,910 --> 00:54:58,100 Do ni laŭvorte reimplemented ke rado. 886 00:54:58,100 --> 00:55:02,080 Do nun ni purigi tion, ĉar tio ne min impresis 887 00:55:02,080 --> 00:55:04,080 kun la dezajno de mia kodo. 888 00:55:04,080 --> 00:55:07,200 Kion ni povas klare forigi en tiu programo por purigi ĉi kolektis? 889 00:55:07,200 --> 00:55:11,840 [Inaudible studento respondon] >> Jes. Laŭvorte, ni traktante i kaj longo idente. 890 00:55:11,840 --> 00:55:16,440 Do kial ni ne nur ricevi inteligenta kaj diru dum longa? 891 00:55:16,440 --> 00:55:20,450 Pli ĝuste, ni simple nomas ĝin longo por komenci, pravalorizi ĝin al 0 892 00:55:20,450 --> 00:55:23,340 ĉar defaŭlte la kordo ne havas longitudon ĝis ni elkompreni kiel ĝi estas. 893 00:55:23,340 --> 00:55:26,160 >> Nun ni faru tion, kaj nun ĉi tiu estas sufiĉe eleganta programo. 894 00:55:26,160 --> 00:55:28,660 Unu variablo. Mi purigis ĝin, premis ĝin. 895 00:55:28,660 --> 00:55:31,980 Do nun ni reiros al mia fina fenestro. Ni iru antaŭen kaj kuri ĉi. 896 00:55:31,980 --> 00:55:35,670 Faru strlen. Aspektas bona. Kuru strlen denove, Enter. 897 00:55:35,670 --> 00:55:40,680 Donu al mi kordoj: SALUTON, Enter. Kaj ŝajnas labori kiel 5. 898 00:55:40,680 --> 00:55:45,580 Nun, por esti klara, se mi ne skribis, ekzemple, SALUTON en 1 linio 899 00:55:45,580 --> 00:55:48,840 kaj tiam ADIAŬ en alia, ni povas certe havas plurajn vortojn. 900 00:55:48,840 --> 00:55:53,150 Se la esprimo mi fakte volis tajpi ne SALUTON sed, ekzemple, 901 00:55:53,150 --> 00:55:58,920 SALUTON MONDO, avizo ke kion ni ne havas estas tiu situacio tie, ĉu ne? 902 00:55:58,920 --> 00:56:00,580 Tio sugestus ke tio estas 2 kordoj. 903 00:56:00,580 --> 00:56:06,060 Vi certe povas havi spacon trinkejo karakteroj, do se ni efektive tajpita en pli longa frazo 904 00:56:06,060 --> 00:56:08,390 kiel SALUTON MONDO, kion ni vere havas en memoro 905 00:56:08,390 --> 00:56:12,730 aspektas iom io simila ekzistas. 906 00:56:12,730 --> 00:56:18,910 >> Bone. Demandojn tiam pri la reprezentado tie de kordoj? 907 00:56:18,910 --> 00:56:20,450 Ne? Bone. 908 00:56:20,450 --> 00:56:25,130 Do mi diris antaŭe, ke nomante strlen denove kaj denove intence tiel 909 00:56:25,130 --> 00:56:28,070 verŝajne ne estas la plej bona ideo ĉar vi tuj faros tuta multan laboron 910 00:56:28,070 --> 00:56:30,280 denove kaj denove kaj denove. 911 00:56:30,280 --> 00:56:36,150 Ja, kia laboro estas necesa por decidi la longo de kordoj, ŝajne? 912 00:56:36,150 --> 00:56:40,720 Vi devas starti je la komenco kaj tiam rigardu, rigardu, rigardu, rigardu, rigardu 913 00:56:40,720 --> 00:56:44,930 ĝis vi finfine vidas ke speciala karaktero, je kiu punkto, ha, nun mi scias la longa. 914 00:56:44,930 --> 00:56:48,040 Do pli frue, kiam ni estis strlen esti nomita denove kaj denove kaj denove, 915 00:56:48,040 --> 00:56:52,080 la kialo mi proponis ke estis ia stulta estas ĉar denove, ke kordoj aspektas tiel. 916 00:56:52,080 --> 00:56:54,880 Oni ne tuj ŝanĝu ĉiufoje kiam vi persisti tra iu ciklo, 917 00:56:54,880 --> 00:56:56,890 tiel vi faras nenecesa laboro. 918 00:56:56,890 --> 00:57:00,620 Samtempe vi devas scii, kiel flanken, kiun tradukiloj kiel Clang tiujn tagojn 919 00:57:00,620 --> 00:57:02,530 ili disvolvis dum multaj jaroj, 920 00:57:02,530 --> 00:57:05,690 kaj tradukilo verkistoj, programistoj, estas sufiĉe inteligenta. 921 00:57:05,690 --> 00:57:10,170 Kaj tiel rezultas ke Clang kaj aliaj tradukiloj povas reale kalkuli ke, 922 00:57:10,170 --> 00:57:13,650 bone, jes, vi skribis strlen en via kondiĉo, 923 00:57:13,650 --> 00:57:17,520 kiuj teknike signifas ke ni nomas ĝin denove kaj denove kaj denove. 924 00:57:17,520 --> 00:57:21,880 Sed inteligenta tradukiloj povas fakte optimizar tiuj specoj de malriĉa uzanto decidoj 925 00:57:21,880 --> 00:57:23,870 el via kodo por riparo aĵoj. 926 00:57:23,870 --> 00:57:27,360 >> Do nur rimarkas ke foje la tradukilo estas pli inteligenta ol ni 927 00:57:27,360 --> 00:57:29,210 kaj estos ia kaŝi niajn proprajn erarojn. 928 00:57:29,210 --> 00:57:31,620 Sed certe kiam temas pri problemo aroj kaj similaj, 929 00:57:31,620 --> 00:57:35,340 do pensi pri tiuj fundamente erara dezajnon decidoj 930 00:57:35,340 --> 00:57:38,110 potenciale por la simpla kialo, ke ni volonte faros vojon pli laboro 931 00:57:38,110 --> 00:57:41,330 ol ni efektive devas fari. Sed kiom pli laboron? 932 00:57:41,330 --> 00:57:44,960 En la kazo de SALUTON MONDO, ni komencu al ĝeneraligi la grandeco de tiu problemo. 933 00:57:44,960 --> 00:57:48,100 Kio estas la longo de la problemo aŭ la grandecon de la problemo 934 00:57:48,100 --> 00:57:50,770 kiam la vorto de la uzanto tajpas en estas SALUTON? 935 00:57:50,770 --> 00:57:53,790 Estas ŝajne 5, eble 6. Plus aŭ minus 1. Kion ajn. 936 00:57:53,790 --> 00:57:55,680 Estas tiel proksimaj ni simple nomas ĝin 5. 937 00:57:55,680 --> 00:58:00,480 >> Do kio estas la grandeco de la problemo ĉi tie kiam provi elkompreni la longo de SALUTON? 938 00:58:00,480 --> 00:58:06,790 Estas 1, 2, 3, 4, 5, kaj eble 6 por la lasta karaktero, sed ni ĝeneraligi ke kiel n. 939 00:58:06,790 --> 00:58:10,300 Do n, nur la variablo n, estas kion komputilo scienculoj estus tipe uzi 940 00:58:10,300 --> 00:58:13,890 por priskribi la grandecon de problemo, kaj la problemo je mano estas kiel longe estas SALUTON? 941 00:58:13,890 --> 00:58:17,050 Kiom da tempo strlen preni? 942 00:58:17,050 --> 00:58:21,010 Ĝi prenas sur la ordo de n paŝoj, kie ĉiu paŝo signifas rigardi al gravulo, 943 00:58:21,010 --> 00:58:23,350 rigardas karaktero, rigardi karaktero. 944 00:58:23,350 --> 00:58:26,850 Kaj ni havis tiun diskuton iom malantaŭen, la nombro de operacioj io portas. 945 00:58:26,850 --> 00:58:29,910 La unua tago de klaso ni ĉiuj mallerte ekstari, 946 00:58:29,910 --> 00:58:32,060 kaj tiam cxiu komencis emparejamiento for inter si 947 00:58:32,060 --> 00:58:35,990 por reale kalkuli ideale kiom da homoj estis en la cxambro. 948 00:58:35,990 --> 00:58:39,860 Kaj ni ankaŭ faris alian aferon per se mi anstataŭ faris la malnova lernejo vojo 949 00:58:39,860 --> 00:58:44,800 de ĵus komencas 1, 2, 3, 4, 5, 6 kaj tiel plu, 950 00:58:44,800 --> 00:58:49,360 ke tro, la grandeco de tiu problemo estis de amplekso n. Esas n homoj en la ĉambro. 951 00:58:49,360 --> 00:58:52,010 Sed mi povus akceli ke ĝis, ĉu ne? Grade lernejo stilo mi povus komenci rakonti en 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. Kaj kiu sentas tiel rapida, kaj ja estas. 953 00:58:55,560 --> 00:59:01,720 Estas laŭvorte duoble rapida, sed denove, se alia 400 personoj promenis sur tiu ĉambro 954 00:59:01,720 --> 00:59:08,250 subite, tiuj algoritmoj prenus alian 400 aŭ eble 200 ŝtupoj. 955 00:59:08,250 --> 00:59:13,310 >> Sed kontraste, se ni vere akiri inteligenta kaj ni anstataŭ havas ĉiu el vi rakontos vin, 956 00:59:13,310 --> 00:59:15,280 memori, ke algoritmo funkciis. 957 00:59:15,280 --> 00:59:17,110 Vi ĉiuj ekstaris. Lasu min rapida antaŭen al ĉi tio. 958 00:59:17,110 --> 00:59:20,430 Vi ĉiuj staris, vi parita for, tiam duono el vi sidiĝis, 959 00:59:20,430 --> 00:59:22,510 duono el vi sidiĝis, duono el vi sidiĝis, 960 00:59:22,510 --> 00:59:27,350 kaj sur ĉiu ripeto de ĉi buklo de semajno 0, ni halved la problemo je mano 961 00:59:27,350 --> 00:59:30,040 kaj iris al n / 2, tiam n / 4, tiam n / 8. 962 00:59:30,040 --> 00:59:35,350 Kaj la implikaĵo de tio estas ke, se alia 400 personoj promeni en la ĉambron, neniu granda interkonsenton, 963 00:59:35,350 --> 00:59:40,120 portos nin ankoraŭ 1 ronda, ne 400 pli ĉirkaŭvojoj, ne 200 pli ĉirkaŭvojoj. 964 00:59:40,120 --> 00:59:43,640 Kaj tiel la rakonton ni diris momenton reen devis fari iom iun kun tio. 965 00:59:43,640 --> 00:59:47,750 Tiu ruĝa linio tie estas lineara, estas rektaj, kaj ĝi estas etikedita kiel n 966 00:59:47,750 --> 00:59:50,250 ĉar kiel la grandeco de problemo kreskas, 967 00:59:50,250 --> 00:59:54,690 se via algoritmo aŭ programo per kiu vi solvi ĝin prenas n paŝoj, 968 00:59:54,690 --> 00:59:58,620 ni povas grafika ĝin kiel rekta linio kie ĝi prenas pli da tempo la pli granda la grandeco de la problemo. 969 00:59:58,620 --> 01:00:03,280 Kaj la twosies alproksimiĝo, rakontante 2, 4, 6, 8, ankoraŭ rekto, nur iom pli bone. 970 01:00:03,280 --> 01:00:08,440 Ĝi prenas iom malpli da tempo, do la flava linio estas sub la ruĝa linio punkto por punkto. 971 01:00:08,440 --> 01:00:12,580 >> Sed eĉ pli bone, estis jena Holy Grail de kion ni nomas logaritma tempo 972 01:00:12,580 --> 01:00:14,830 kie eĉ se ni denove duobligi la nombron de homoj en la ĉambron, 973 01:00:14,830 --> 01:00:18,240 ni duobligi la grandeco de tiu telefono libro de la unua tago de klaso, 974 01:00:18,240 --> 01:00:22,310 neniu granda interkonsento, ĝi prenas ankoraŭ 1 paĝo larmo, prenas ankoraŭ 1 logxejon malsupren 975 01:00:22,310 --> 01:00:25,550 por solvi problemon kiu estas duoble granda. 976 01:00:25,550 --> 01:00:27,460 Kaj tial la interparolo ni nun ek komenci havi estas 977 01:00:27,460 --> 01:00:30,380 how do ni efektive solvi problemojn kompetente 978 01:00:30,380 --> 01:00:32,510 se ni konsideras la plej simpla de problemoj kiel tiu? 979 01:00:32,510 --> 01:00:36,210 Supozi ni havi 8 pordoj malantaŭ kiuj estas iuj nombroj, 980 01:00:36,210 --> 01:00:39,720 kaj ĉiu el tiuj numeroj ne estas ordo en ajna maniero, 981 01:00:39,720 --> 01:00:42,830 ili estas nur hazardaj entjeroj malantaŭ tiuj pordoj, 982 01:00:42,830 --> 01:00:47,290 kaj ni demandu al la demando kiel vi irados tra trovo la nombro - kiu scias - 983 01:00:47,290 --> 01:00:50,250 7 malantaŭ tiuj pordoj? 984 01:00:50,250 --> 01:00:53,400 Kion vi, homo, faru por trovi al mi la nombro 7 985 01:00:53,400 --> 01:00:56,810 se denove ĉiu de ĉi tiuj estas pordoj kaj vidi valoron vi devas malfermi pordon? 986 01:00:56,810 --> 01:00:59,650 Kion viaj algoritmo esti eble? 987 01:00:59,650 --> 01:01:05,310 >> [Inaudible studento respondon] >> Do komencu per la maldekstra kaj malfermi pordon, malfermi pordon, malfermu pordon. 988 01:01:05,310 --> 01:01:08,570 Kaj en la plej malbona kazo, kiel longe estas ĝi tuj prenos nin trovi la numeron 7? 989 01:01:08,570 --> 01:01:12,800 Kaj ankaux ili ne ordo, do ĝi ne estas tiel facila kiel, bone, mi tuj malfermos la 7a pordo. 990 01:01:12,800 --> 01:01:15,240 Ĝi povis porti nin, maksimume, 8 paŝoj. 991 01:01:15,240 --> 01:01:19,940 En la plej malbona kazo, 7 estas hazarde ke je la fino de la linio de pordoj, 992 01:01:19,940 --> 01:01:22,090 do ni povus havi por provi ĉiuj n pordoj. 993 01:01:22,090 --> 01:01:24,440 Do denove tie, ni ŝajnas havi lineara algoritmo. 994 01:01:24,440 --> 01:01:27,030 Fakte, ni faris ĉi nur kelkajn jarojn. 995 01:01:27,030 --> 01:01:29,910 Unu el viaj antaŭuloj estis defiita kun precize tiu 996 01:01:29,910 --> 01:01:32,050 kie ni ne havis cifereca versio, ni anstataŭ havis pizarrón 997 01:01:32,050 --> 01:01:33,780 kun iuj pecoj de papero sur ĝi. 998 01:01:33,780 --> 01:01:36,940 Kaj kion mi pensis, ke mi faras estas preni rapidajn rigardon malantaŭen en kiel ĉi foriris, 999 01:01:36,940 --> 01:01:40,760 unu el la plej bonaj kaj eble la plej mallerta ŝancojn sur la scenejo 1000 01:01:40,760 --> 01:01:42,530 havi pruvon ĝuste sur Sanders. 1001 01:01:42,530 --> 01:01:44,000 Ni havis 2 vicoj de ciferoj. 1002 01:01:44,000 --> 01:01:47,280 Ni nur tuj rigardi kio okazas ĉi tie kun Estu por la plejsupro de tiuj vicoj. 1003 01:01:47,280 --> 01:01:49,660 Se neniu iam ajn denove volontuloj en CS50, 1004 01:01:49,660 --> 01:01:52,010 ni havis Estu beno por subteni tion en ĉambro, 1005 01:01:52,010 --> 01:01:54,670 do li scias, ke centoj da homoj estis rigardante tiun nun por jaroj. 1006 01:01:54,670 --> 01:01:59,500 Sed Sean faris mirigan laboron - aŭ ĉu li? - Je reale trovanta ni apartan numeron. 1007 01:01:59,500 --> 01:02:04,570 >> Do ni vidu kiel li solvis ĉi algoritmon por ke ni rekomencu ĉi konversacio post nelonge 1008 01:02:04,570 --> 01:02:08,300 de kiel oni trovas tion kompetente. 1009 01:02:08,300 --> 01:02:12,300 [Malan en video] Mi kaŝis malantaŭ tiuj pordoj de la numero 7, 1010 01:02:12,300 --> 01:02:16,710 sed tucked for en iu el tiuj pordoj tiel estas aliaj nenegativaj nombroj, 1011 01:02:16,710 --> 01:02:19,980 kaj via celo estas pensi pri tiu supera vico de nombroj kiel simple tabelo 1012 01:02:19,980 --> 01:02:22,920 aŭ nur vico da pecoj de papero kun nombroj malantaŭ ili, 1013 01:02:22,920 --> 01:02:26,960 kaj via celo estas, uzante nur la supro tabelo tie, trovi min la nombro 7. 1014 01:02:26,960 --> 01:02:30,800 Kaj ni tiam tuj kritikon kiom vi ĉirkaŭiras fari ĝin. >> Bone. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Trovu ni la numero 7, mi petas. 1016 01:02:36,210 --> 01:02:38,350 [Ridado] 1017 01:02:41,610 --> 01:02:44,460 [Malan] No [ridado] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [ridado]. Ne estas atuto demando. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Ridado] 1021 01:03:06,910 --> 01:03:10,760 Je ĉi tiu punkto viaj partituro ne estas tre bona, do vi eble tiel plu iri. [Ridado] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Go on. Sincere, mi ne povas helpi sed scivolas kion vi eĉ pensi. [Ridado] 1024 01:03:25,010 --> 01:03:28,870 Nur la supera vico, do vi havas 3 maldekstren. Do trovi min 7. 1025 01:03:28,870 --> 01:03:45,360 [Studentoj murmurado] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Studentoj murmurado] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Aplaŭdo] 1029 01:04:01,550 --> 01:04:06,080 >> Do merkrede ni plonĝi en cxi tiun kaj pli kompleksaj algoritmoj por trovi tion. 1030 01:04:06,080 --> 01:04:10,200 Cxar nun ni lasos vin per Sean kaj vin vidos merkredon. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]