1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Opis przejścia - Set Problem 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [To jest CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Dobrze. Witam wszystkich i zapraszamy do Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 Po pierwsze, chciałbym pogratulować wykańczania PSET 1. 6 00:00:14,330 --> 00:00:18,140 Wiem, że może to być nieco trudne dla niektórych z was, 7 00:00:18,140 --> 00:00:20,460 mógł być twój pierwszy program komputerowy, który napisałeś, 8 00:00:20,460 --> 00:00:24,500 , ale należy pamiętać, że w końcu tego, gdy patrzy się z powrotem na koniec semestru 9 00:00:24,500 --> 00:00:29,820 będziesz wyglądać na PSET 1 i powiesz "Hej, mogę tego zrobić w 5 minut." 10 00:00:29,820 --> 00:00:35,700 Więc wiedzieć i wierzyć, że w końcu to będzie na pewno znajdziesz PSET 1 dość prosta. 11 00:00:35,700 --> 00:00:40,640 Ale teraz to jest ogromnym sukcesem, i gratulacje dla zrobienia kupujemy. 12 00:00:40,640 --> 00:00:44,010 Teraz, również szybkie notatki, zanim przejdziemy do mięsa z instrukcji. 13 00:00:44,010 --> 00:00:48,340 Chcę tylko, aby szybko zauważyć, że czasami nie mają wystarczająco dużo czasu 14 00:00:48,340 --> 00:00:52,500 podczas solucje przejść każdy sposób prowadzenia zestawu problemu 15 00:00:52,500 --> 00:00:56,140 i raczej tylko może skupić się na 1 lub 2 rodzaju wdrożeniach, 16 00:00:56,140 --> 00:00:57,750 sposoby, że można to zrobić. 17 00:00:57,750 --> 00:01:01,970 Ale to nie znaczy, że są zabronione robi to w inny sposób. 18 00:01:01,970 --> 00:01:05,980 Są to często, jak w informatyce, liczne sposoby działania, 19 00:01:05,980 --> 00:01:12,190 a więc na pewno tutaj użyć innego rodzaju rozwiązania, niż może już prezentowane. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Sekcja Pytania - 1. Caesar - 2. Vigenere'a] 22 00:01:17,160 --> 00:01:20,650 Dobrze. Więc problem ustawić 2: Crypto jest zabawa jeden. 23 00:01:20,650 --> 00:01:24,500 Ponownie, z każdym Pset zaczniesz z sekcji pytań 24 00:01:24,500 --> 00:01:29,600 że zamierza przeprowadzić w swoich sekcjach z przypisanego kolegów nauczycieli. 25 00:01:29,600 --> 00:01:31,670 Nie zamierzamy przejść przez te ponad samouczka 26 00:01:31,670 --> 00:01:35,100 ale na pewno pomogą Ci zakończyć PSET. 27 00:01:35,100 --> 00:01:38,100 Tak więc pierwsza część zestawu problemu jest Cezar. 28 00:01:38,100 --> 00:01:43,470 I tak w Cezara ktoś przejdzie ci klucz z liczbą całkowitą, 29 00:01:43,470 --> 00:01:48,420 i będzie szyfrować ciąg tekstu, że dostarczy Ci 30 00:01:48,420 --> 00:01:50,670 i dać je zaszyfrowane rzeczy. 31 00:01:50,670 --> 00:01:56,050 Jeśli ktoś oglądał A Christmas Story, jest przykładem, że nie. 32 00:01:56,050 --> 00:01:59,090 Następnie druga część zestawu problemu jest Vigenère 33 00:01:59,090 --> 00:02:01,790 która jest bardziej zaawansowana technika szyfrowania. 34 00:02:01,790 --> 00:02:05,640 I tak mamy zamiar zaszyfrować fragment tekstu, 35 00:02:05,640 --> 00:02:09,600 wyjątkiem zamiast z tylko jednej liczby całkowitej, jesteśmy rzeczywiście będzie zakodować 36 00:02:09,600 --> 00:02:13,340 z hasła, które użytkownik dostarczy nam. 37 00:02:16,270 --> 00:02:22,090 Ok, więc pierwsze narzędzie w przyborniku jest dziś faktycznie będzie aktualizacji urządzenia. 38 00:02:22,090 --> 00:02:26,430 Na forum dyskusyjnym moglibyśmy zobaczyć takie rzeczy jak: "Dlaczego to nie działa?" 39 00:02:26,430 --> 00:02:28,110 "Dlaczego nie przedstawi 50 działa?" 40 00:02:28,110 --> 00:02:31,830 i często rozwiązaniem jest właściwie tylko do aktualizacji urządzenia. 41 00:02:31,830 --> 00:02:36,730 A jeśli tak po prostu uruchomić w oknie terminala w Twoim sudo urządzenia yum-y - 42 00:02:36,730 --> 00:02:40,040 to flaga mówi tak, aktualizować wszystko - update 43 00:02:40,040 --> 00:02:42,280 wówczas urządzenie będzie aktualizować, jeśli zajdzie potrzeba. 44 00:02:42,280 --> 00:02:46,960 I to nie zaszkodzi, jeśli już są w najnowszej wersji urządzenia. 45 00:02:46,960 --> 00:02:51,280 Wtedy będzie po prostu powiedzieć, żadne nowe aktualizacje dostępne i można kontynuować pracę wzdłuż. 46 00:02:51,280 --> 00:02:55,800 Ale to jest dobry do wykonania nawet przy każdym otwarciu urządzenia 47 00:02:55,800 --> 00:02:57,140 bo jesteśmy wciąż bardzo dużo - 48 00:02:57,140 --> 00:03:00,320 czasem, jeśli wejdziemy do błędu - Ustalenie go w urządzeniu. 49 00:03:00,320 --> 00:03:03,180 Więc upewnij się, że masz najnowszą wersję urządzenia 50 00:03:03,180 --> 00:03:07,710 i uruchomić tę aktualizację tam. 51 00:03:07,710 --> 00:03:14,360 Dobrze. Więc skoro mamy do czynienia z literami i zmienia, szyfrowania rzeczy, 52 00:03:14,360 --> 00:03:20,410 będziemy naprawdę chcesz zostać najlepszym przyjacielem naszej ASCII wykresu. 53 00:03:20,410 --> 00:03:24,350 Istnieje wiele z nich w trybie online, jeśli znajdziesz. Może nawet stworzyć własną. 54 00:03:24,350 --> 00:03:29,950 Zasadniczo, z każdą literą i każdej ilości i każdej postaci 55 00:03:29,950 --> 00:03:32,210 Numer jest związane z nimi, 56 00:03:32,210 --> 00:03:38,670 i tak dobrze jest zobaczyć ich wartości ASCII obok rzeczywistego listu. 57 00:03:38,670 --> 00:03:42,310 To na pewno pomoże ci w zbiorze problemów. 58 00:03:42,310 --> 00:03:45,750 Jedna rzecz, która bardzo pomogła mi w tym zestawie problem był rzeczywiście wydrukować, 59 00:03:45,750 --> 00:03:48,380 i jak szedłem, ja rzeczywiście wyciągnąć z niego, 60 00:03:48,380 --> 00:03:51,150 napisać: "Jeśli to ma iść do tam, a potem ..." 61 00:03:51,150 --> 00:03:55,270 Rodzaj wyciągnąć z niego i zaznaczyć go, stają najlepsi przyjaciele z twoim ASCII tabeli. 62 00:03:57,240 --> 00:04:00,750 Następnie mamy kilka innych narzędzi do naszej dyspozycji. 63 00:04:00,750 --> 00:04:03,750 Tym razem zamiast faktycznie monitowania użytkownika o wszystkie ich wejścia 64 00:04:03,750 --> 00:04:05,230 mamy zamiar zrobić kombinację. 65 00:04:05,230 --> 00:04:06,880 Będziemy monitować je dla jakiegoś wejścia, 66 00:04:06,880 --> 00:04:11,350 ale jesteśmy również będzie po prostu użyć argumentów wiersza poleceń. 67 00:04:11,350 --> 00:04:15,600 Więc kiedy uruchomić swój program, zwykle mówisz. / Hello, na przykład, 68 00:04:15,600 --> 00:04:17,310 jeśli program był hello.c. 69 00:04:17,310 --> 00:04:22,500 Ale tym razem, zamiast po prostu mówiąc, że można je umieścić słowa, argumenty później. 70 00:04:22,500 --> 00:04:27,210 I tak mamy zamiar użyć jakichkolwiek przechodzą one w nas jako ich wejście, jak również, 71 00:04:27,210 --> 00:04:31,720 więc wyjście poza właśnie skłoniło do liczby całkowitej, ale także za pomocą argumentów wiersza poleceń. 72 00:04:31,720 --> 00:04:36,590 A potem pójdziemy na tablice i ciągi znaków, które będziemy używać dużo, jak również. 73 00:04:41,460 --> 00:04:44,810 Tu jest tylko przykład 1 mini wykresie ASCII. 74 00:04:44,810 --> 00:04:48,460 Jak już mówiłem, każda litera odpowiada liczbie, 75 00:04:48,460 --> 00:04:52,510 a więc zapoznać się z tym. To się przyda. 76 00:04:52,510 --> 00:04:55,610 A później, gdy zaczynamy jakiejś ASCIIMath czynienia z liczbami - 77 00:04:55,610 --> 00:05:00,110 dodawanie, odejmowanie ich - to na pewno dobry w odniesieniu do tego wykresu. 78 00:05:02,860 --> 00:05:06,920 Tak tu jest przykładem szyfru Cezara - coś, co może grałeś z. 79 00:05:06,920 --> 00:05:11,190 To jest po prostu koła. Zasadniczo, jest zewnętrzna alfabetu, a następnie jest wewnętrzna alfabetu. 80 00:05:11,190 --> 00:05:15,290 Tak więc jest tu przykład szyfru Caesar ale klucza 0. 81 00:05:15,290 --> 00:05:21,540 Zasadniczo, jest wyrównany, B jest zgodne z B, aż do Z. 82 00:05:21,540 --> 00:05:26,590 Ale wtedy powiedzieć chcieliśmy klawisz 3, na przykład. 83 00:05:26,590 --> 00:05:33,280 To wtedy obracać tak, że wewnętrzne koło się w jednej linii z D, itp. 84 00:05:33,280 --> 00:05:35,250 I tak to jest w zasadzie to, co zamierzamy zrobić. 85 00:05:35,250 --> 00:05:38,340 Nie mamy koło, ale co mamy zamiar zrobić, to nasz program 86 00:05:38,340 --> 00:05:44,490 rodzaj przesunięcia alfabetu wraz z nas pewnym liczb. 87 00:05:44,490 --> 00:05:48,650 Tak jak powiedziałem wcześniej, będziemy mieć do czynienia z argumentami wiersza polecenia 88 00:05:48,650 --> 00:05:50,390 jak również coraz liczbę całkowitą. 89 00:05:50,390 --> 00:05:55,050 Tak więc sposób, że użytkownik będzie uruchomić program Cezar mówiąc. / Caesar 90 00:05:55,050 --> 00:05:58,090 a następnie wpisz numer po tym. 91 00:05:58,090 --> 00:06:01,130 Oraz że liczba reprezentuje klucz, zmiany biegów, 92 00:06:01,130 --> 00:06:06,740 ile razy będziemy się obracając wewnętrzną kierownicą szyfru Cezara. 93 00:06:06,740 --> 00:06:08,390 I tak można zobaczyć tutaj przykładem. 94 00:06:08,390 --> 00:06:14,550 Jeżeli weszliśmy litery od A do L w naszym szyfrem Cezara, 95 00:06:14,550 --> 00:06:19,520 wtedy byłoby wejście D przez O bo to każda litera przesunięte ponad 3 razy, 96 00:06:19,520 --> 00:06:22,080 tak jak na przykładzie koła, które pokazałem. 97 00:06:22,080 --> 00:06:25,300 Tak więc, jeśli wprowadzone, na przykład, to CS50! 98 00:06:25,300 --> 00:06:27,960 wtedy to również przenieść wszystkie litery. 99 00:06:27,960 --> 00:06:31,040 I to jest ważne zarówno Cezara i Vigenère 100 00:06:31,040 --> 00:06:34,890 jest to, że mamy zamiar pominąć żadnych nie-litery. 101 00:06:34,890 --> 00:06:39,160 Więc żadnych spacji, znaków, itp., liczby, będziemy trzymać je same. 102 00:06:39,160 --> 00:06:42,920 Jesteśmy tylko będzie zmieniać litery w tym przypadku. 103 00:06:42,920 --> 00:06:45,870 Więc jak widać w kole, mamy tylko litery dla nas dostępne, 104 00:06:45,870 --> 00:06:50,150 tak tylko chcemy przesunąć litery i szyfrować listy. 105 00:06:51,370 --> 00:06:56,720 Więc pierwszą rzeczą do zrobienia, to zobaczyłem, że korzystanie z Internetu do Cezara w problemu ustawić 2 106 00:06:56,720 --> 00:07:05,280 jest uruchomienie Cezara, a następnie wpisz numer po uruchomieniu go w terminalu. 107 00:07:05,280 --> 00:07:10,940 Więc to, co musimy zrobić, to jakoś ten klucz i dostęp. 108 00:07:10,940 --> 00:07:14,730 A więc chcemy jakoś zobaczyć to będzie drugi argument linii poleceń. 109 00:07:14,730 --> 00:07:20,950 Pierwszy z nich będzie. / Cezar, a następny będzie numer klucza. 110 00:07:22,190 --> 00:07:29,200 Więc zanim mieliśmy int main (), aby rozpocząć nasze programy w C. 111 00:07:29,200 --> 00:07:31,790 Będziemy odwinąć warstwy nieco mało 112 00:07:31,790 --> 00:07:34,720 i rzeczywiście widać, że zamiast z przechodzącą w pustce naszej głównej funkcji 113 00:07:34,720 --> 00:07:37,920 mamy rzeczywiście do czynienia z 2 parametrami. 114 00:07:37,920 --> 00:07:44,070 Mamy int nazwie argc i tablica łańcuchów nazywany argv. 115 00:07:44,070 --> 00:07:46,030 Więc argc jest liczbą całkowitą, 116 00:07:46,030 --> 00:07:49,640 i reprezentuje liczbę argumentów przekazanych do swojego programu. 117 00:07:49,640 --> 00:07:53,590 A potem argv jest rzeczywiście lista argumentów. 118 00:07:53,590 --> 00:08:00,820 Wszystkie argumenty są ciągami, a więc reprezentuje tablicę argv, listy, łańcuchów. 119 00:08:01,830 --> 00:08:03,990 Porozmawiajmy o tablicach bitowych mało. 120 00:08:03,990 --> 00:08:05,940 Tablice są zasadniczo nową strukturę danych. 121 00:08:05,940 --> 00:08:09,660 Mamy wskazówki, mamy podwójne, mamy łańcuchy, a teraz mamy tablice. 122 00:08:09,660 --> 00:08:13,820 Tablice są struktury danych, które mogą zawierać wiele wartości tego samego typu, 123 00:08:13,820 --> 00:08:18,320 tak zasadniczo, niezależnie od jej rodzaju lista chcesz. 124 00:08:18,320 --> 00:08:24,400 Zasadniczo, jeśli chcesz listę liczb całkowitych wszystkim w 1 zmiennej, 125 00:08:24,400 --> 00:08:29,090 Następnie należy utworzyć nową zmienną, która była z tablicy typu int. 126 00:08:29,090 --> 00:08:34,450 Więc tablice są indeksowane od zera, co oznacza, że ​​pierwszy element tablicy o indeksie 0 jest. 127 00:08:34,450 --> 00:08:41,799 Jeśli tablica ma długość 4, tak jak w tym przykładzie, to twój ostatni element będzie o indeksie 3, 128 00:08:41,799 --> 00:08:44,810 które jest 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Tak, aby utworzyć tablicę, byś zrobił coś takiego. 130 00:08:48,420 --> 00:08:51,440 Powiedzmy, że chce podwójną tablicę. 131 00:08:51,440 --> 00:08:56,520 To odnosi się do każdego rodzaju typu danych, chociaż. 132 00:08:56,520 --> 00:09:00,210 Tak, że chcesz podwójne tablicę. Powiedzmy, że chcesz to nazwać skrzynki. 133 00:09:00,210 --> 00:09:04,760 Podobnie jak można zainicjować inne podwójne, 134 00:09:04,760 --> 00:09:09,760 powiedziałbyś double, a następnie nazwę, ale tym razem umieścić w nawiasach kwadratowych, 135 00:09:09,760 --> 00:09:13,570 i liczba będzie długość tablicy. 136 00:09:13,570 --> 00:09:16,840 Zauważ, że w tablicach nie możemy kiedykolwiek zmienić długość, 137 00:09:16,840 --> 00:09:21,230 więc zawsze muszą zdefiniować i wybierz, ile pól, 138 00:09:21,230 --> 00:09:25,440 ile wartości twojej tablicy będzie się trzymać. 139 00:09:25,440 --> 00:09:31,820 Tak, aby ustawić różne wartości w macierzy, będziesz korzystać z tego następującą składnię, 140 00:09:31,820 --> 00:09:33,200 jak widać na slajdzie. 141 00:09:33,200 --> 00:09:37,620 Masz 0 Indeks skrzynka zostanie ustawiona na 1,2, 142 00:09:37,620 --> 00:09:42,180 Indeks 1 skrzynka ustawiona na 2,4, itd. 143 00:09:42,180 --> 00:09:47,910 Więc teraz, że mamy recenzja tablic trochę, wróćmy do argc i argv. 144 00:09:47,910 --> 00:09:52,220 Wiemy, że argv jest teraz tablica łańcuchów. 145 00:09:52,220 --> 00:09:55,080 Tak, gdy użytkownik przechodzi się - mówią, że uruchomiony program - 146 00:09:55,080 --> 00:09:58,740 mówią. / hello David Malan, 147 00:09:58,740 --> 00:10:05,160 co program zrobi ci już faktycznie wymyślić co argc i argv są. 148 00:10:05,160 --> 00:10:07,620 Więc nie musisz się o to martwić. 149 00:10:07,620 --> 00:10:14,370 Argc w tym przypadku byłoby 3 ponieważ widzi 3 różne słowa oddzielone spacjami. 150 00:10:14,370 --> 00:10:18,850 I tak, to tablica w tym przypadku, pierwszy indeks będzie. / Hello, 151 00:10:18,850 --> 00:10:21,770 David następny, następny Malan. 152 00:10:21,770 --> 00:10:25,640 Czy ktoś od razu zobaczyć, co relacja między argv, 153 00:10:25,640 --> 00:10:28,990  tablicy, a argc jest? 154 00:10:32,820 --> 00:10:38,090 Tak. Zajmiemy się, że w np. w args.c. 155 00:10:38,090 --> 00:10:42,880 Zobaczmy, czy możemy skorzystać z relacji między 2. 156 00:10:42,880 --> 00:10:46,550 Tutaj może się okazać, że w urządzeniu domyślną aplikacją 157 00:10:46,550 --> 00:10:49,450 otwierać pliki. C jest czasami Emacs. 158 00:10:49,450 --> 00:10:54,660 Ale chcemy zajmować gedit, więc co można zrobić, to można kliknąć prawym przyciskiem myszy na pliku C 159 00:10:54,660 --> 00:11:04,580 przejdź do Właściwości, Otwórz za pomocą, a następnie wybierz gedit, Ustaw jako domyślne, 160 00:11:04,580 --> 00:11:13,020 a teraz Twój program powinien otworzyć w gedit zamiast Emacs. 161 00:11:14,710 --> 00:11:16,290 Perfect. 162 00:11:17,120 --> 00:11:25,520 Więc mam program, który chcę wydrukować każdy argument wiersza poleceń. 163 00:11:25,520 --> 00:11:32,050 Więc niezależnie od użytkownika wejścia, chcę przede wszystkim zwrócić go z powrotem do nich w nowej linii. 164 00:11:32,050 --> 00:11:36,710 Więc co jest struktura, które możemy wykorzystać do iteracyjnego coś - 165 00:11:36,710 --> 00:11:40,380 coś, czego prawdopodobnie używane w PSET 1? 166 00:11:40,380 --> 00:11:45,840 Jeśli chcesz przejść przez określoną liczbę rzeczy? >> [Uczeń] Na pętli. 167 00:11:45,840 --> 00:11:48,910 Na pętli. Dokładnie. Więc zacznijmy od pętli for. 168 00:11:48,910 --> 00:11:56,900 Mamy dla int i = 0. Zacznijmy ze standardowym zmiennej inicjalizacji. 169 00:11:56,900 --> 00:12:02,370 Zamierzam opuścić warunek zbioru, a potem mówią i + +, zamierza zrobić coś tam. 170 00:12:02,370 --> 00:12:04,090 Dobrze. 171 00:12:04,090 --> 00:12:11,590 Więc myśli powrót do argv, jeśli argv jest lista argumentów przekazanych do programu 172 00:12:11,590 --> 00:12:15,380 i argc to liczba argumentów w programie, 173 00:12:15,380 --> 00:12:21,280 to znaczy, że argc jest zasadniczo długość argv, w prawo, 174 00:12:21,280 --> 00:12:28,970 bo nie będą tak wielu argumentów jak wartości argc. 175 00:12:28,970 --> 00:12:35,910 Więc jeśli chcemy iterować każdy element w argv, 176 00:12:35,910 --> 00:12:43,290 będziemy chcesz za każdym razem dostęp do zmiennej w argv o podanym indeksie. 177 00:12:43,290 --> 00:12:49,060 , Które mogą być reprezentowane w to, prawda? 178 00:12:49,060 --> 00:12:53,430 Zmienna ta reprezentuje tutaj szczególny ciąg w tym przypadku 179 00:12:53,430 --> 00:12:57,030 bo to tablica string - ciąg znaków w tym zwłaszcza danego indeksu. 180 00:12:57,030 --> 00:13:00,690 Co chcemy zrobić w tym przypadku chcemy, aby go wydrukować, więc powiedzmy, że printf. 181 00:13:00,690 --> 00:13:04,680 A teraz argv jest ciągiem znaków, więc chcemy umieścić ten zastępczy tam. 182 00:13:04,680 --> 00:13:08,430 Chcemy nowej linii tylko, aby dobrze wyglądać. 183 00:13:08,430 --> 00:13:12,530 Tak więc mamy tu do pętli. Nie mamy jeszcze stan. 184 00:13:12,530 --> 00:13:20,020 Więc zaczyna się od 0, a następnie za każdym razem, to będzie drukować dany ciąg 185 00:13:20,020 --> 00:13:22,980 w tym szczególnym Indeks tablicy. 186 00:13:22,980 --> 00:13:28,410 Tak więc, gdy chcemy, aby zatrzymać drukowanie elementów w tablicy? 187 00:13:28,410 --> 00:13:35,720 Kiedy skończymy, prawda? Kiedy doszliśmy do końca tablicy. 188 00:13:35,720 --> 00:13:38,870 Więc nie chcę przekraczać przeszłość długości tablicy, 189 00:13:38,870 --> 00:13:43,700 i już wiem, że nie trzeba rzeczywiście aktywnie dowiedzieć się, co jest długość argv 190 00:13:43,700 --> 00:13:47,520 ponieważ jest to nam dane, a co to takiego? Argc. Dokładnie. 191 00:13:47,520 --> 00:13:56,640 Dlatego chcemy, aby zrobić ten numer argc procesu razy. 192 00:13:56,640 --> 00:13:59,550 Nie jestem w odpowiednim katalogu. 193 00:14:02,100 --> 00:14:03,490 Dobrze. 194 00:14:03,490 --> 00:14:08,990 Teraz zróbmy args. Brak błędów, co jest dobre. 195 00:14:08,990 --> 00:14:11,430 Więc po prostu uruchomić args. 196 00:14:11,430 --> 00:14:15,130 Co to wróci do nas? To po prostu będzie wydrukować go z powrotem. 197 00:14:15,130 --> 00:14:18,320 "You wprowadzane argumenty do programu, mam zamiar dać z powrotem do Ciebie." 198 00:14:18,320 --> 00:14:23,170 Więc powiedzmy, że chcemy powiedzieć args następnie foo bar. 199 00:14:23,170 --> 00:14:26,570 Więc to drukuje je z powrotem do nas. Wszystko w porządku? 200 00:14:26,570 --> 00:14:30,790 Więc jest przykładem tego, jak można wykorzystać ARGC i ARGV 201 00:14:30,790 --> 00:14:33,460 wiedząc, że ARGC reprezentuje długość argv. 202 00:14:33,460 --> 00:14:42,750 Upewnij się, że nie zawsze z dostępem do tablic jeden poza długość tablicy 203 00:14:42,750 --> 00:14:45,140 ponieważ C na pewno krzyczeć na ciebie. 204 00:14:45,140 --> 00:14:47,560 Dostaniesz coś zwanego błędu segmentacji, 205 00:14:47,560 --> 00:14:52,470 które nigdy nie jest zabawne, w zasadzie mówi, że próbujesz uzyskać dostęp do czegoś 206 00:14:52,470 --> 00:14:55,000 że nie istnieje, nie należy do Ciebie. 207 00:14:55,000 --> 00:14:59,430 Więc upewnij się, a zwłaszcza z zerową indeksowania, nie chcemy, aby - 208 00:14:59,430 --> 00:15:02,390 Jak na przykład, jeśli mają długości tablicy 4, 209 00:15:02,390 --> 00:15:07,240 że indeks tablicy 4 nie istnieje, bo zaczynają się od 0, przy zerowym indeksie. 210 00:15:07,240 --> 00:15:11,730 Stanie się drugą naturą, tak jak dla pętli, kiedy zaczynają się 0. 211 00:15:11,730 --> 00:15:13,610 Więc po prostu mieć to na uwadze. 212 00:15:13,610 --> 00:15:22,590 Nie chcesz, aby kiedykolwiek przejść do indeksu tablicy, która znajduje się poza Twoim zasięgiem. 213 00:15:26,710 --> 00:15:32,560 Tak więc widzimy teraz, jak możemy rodzaj dostępu 214 00:15:32,560 --> 00:15:35,930 Argumenty wiersza poleceń, które są przekazywane w. 215 00:15:35,930 --> 00:15:41,330 Ale jak zobaczyłem napis, argv jest faktycznie tablicy string. 216 00:15:41,330 --> 00:15:45,740 Więc nie jest to właściwie jeszcze całkowitą, ale Cezara możemy mieć do czynienia z liczbami całkowitymi. 217 00:15:45,740 --> 00:15:54,430 Na szczęście, istnieje funkcja stworzona dla nas, że w rzeczywistości może konwertować ciąg znaków na liczbę całkowitą. 218 00:15:54,430 --> 00:15:58,710 Również tutaj mamy do czynienia nie z danych wejściowych użytkownika dokąd nakłania 219 00:15:58,710 --> 00:16:03,740 dla wejścia tutaj na klucz, więc nie możemy faktycznie reprompt i powiedzieć, 220 00:16:03,740 --> 00:16:07,840 "Och, daj mi jeszcze jedną liczbę całkowitą, powiedzmy, jeśli to nie jest ważne." 221 00:16:07,840 --> 00:16:10,540 Ale mamy jeszcze trzeba sprawdzić poprawność użycia. 222 00:16:10,540 --> 00:16:13,520 W Cezara są dozwolone jedynie przekazać w 1 liczby, 223 00:16:13,520 --> 00:16:18,030 i tak trzeba uruchomić. / Cezar i to muszą dać ci numer. 224 00:16:18,030 --> 00:16:23,660 Więc argc musi być pewna liczba. 225 00:16:23,660 --> 00:16:29,060 Jaki numer byłoby to, czy mają przekazać wam. / Cezara i klawisza? 226 00:16:29,060 --> 00:16:32,920 Co to jest argc? >> [Student] 2. >> Two. Dokładnie. 227 00:16:32,920 --> 00:16:35,490 Więc chcesz się upewnić, że jest 2 argc. 228 00:16:35,490 --> 00:16:39,620 W przeciwnym razie po prostu odmówić, aby uruchomić program. 229 00:16:39,620 --> 00:16:43,040 W main to funkcja, która mówi, int main, 230 00:16:43,040 --> 00:16:47,360 tak to zawsze w dobrym 0 powrotnych praktyce na koniec udanego programu. 231 00:16:47,360 --> 00:16:50,840 Jeśli tak, to znaczy, że da ci 3 argumenty wiersza polecenia zamiast 2 232 00:16:50,840 --> 00:16:54,350 lub dać 1, na przykład, to co zrobisz, to będziemy chcieli, aby sprawdzić, że 233 00:16:54,350 --> 00:16:59,900 , a następnie powrót 1 mówiąc, nie, nie mogę kontynuować programu. 234 00:16:59,900 --> 00:17:03,190 [Uczeń] Nie może być miejsca w tekście. >> Przepraszam? 235 00:17:03,190 --> 00:17:06,780 [Uczeń] Nie może być miejsca w tekście, który próbujesz zaszyfrować. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Jeśli chodzi o tekst, który chcemy zaszyfrować, że faktycznie przychodzi później 238 00:17:11,280 --> 00:17:13,970 gdy dajemy ten tekst. 239 00:17:13,970 --> 00:17:18,260 Więc teraz jesteśmy po prostu przyjmując jako argumenty poleceń rzeczywista liczba, 240 00:17:18,260 --> 00:17:21,579 Rzeczywista zmiana na szyfrowanie Cezara. 241 00:17:21,579 --> 00:17:27,569 [Uczeń] Dlaczego musisz 2, w przeciwieństwie do tylko 1 argc? Jest zdecydowanie 1 numer. 242 00:17:27,569 --> 00:17:32,200 Racja. Dlatego musimy 2 dla argc zamiast 1 243 00:17:32,200 --> 00:17:36,260 ponieważ po uruchomieniu programu i powiedzieć. / caesar lub. / hello, 244 00:17:36,260 --> 00:17:38,280 faktycznie liczy się jako argument wiersza poleceń. 245 00:17:38,280 --> 00:17:43,020 Tak więc, że już zajmuje 1 i tak to mamy do wprowadzania 1 extra. 246 00:17:45,030 --> 00:17:49,440 Więc wprowadzania faktycznie ciąg znaków w argumencie wiersza poleceń. 247 00:17:49,440 --> 00:17:52,730 Co chcesz zrobić, dla Cezara możemy mieć do czynienia z liczbą całkowitą, 248 00:17:52,730 --> 00:17:57,180 dzięki czemu można korzystać z tej funkcji atoi. 249 00:17:57,180 --> 00:18:02,850 I w zasadzie, można przekazać je w ciąg, a następnie powróci z powrotem integer 250 00:18:02,850 --> 00:18:06,070 jeśli jest to możliwe, aby ten ciąg do liczby całkowitej. 251 00:18:06,070 --> 00:18:10,960 Teraz pamiętam, kiedy mamy do czynienia z printf lub GetString, takie rzeczy, 252 00:18:10,960 --> 00:18:13,390 to to biblioteki, które są specyficzne dla nas. 253 00:18:13,390 --> 00:18:19,450 Więc na początku zaczynamy standardowego skrótu słowa I / O,. H, coś takiego. 254 00:18:19,450 --> 00:18:22,430 Cóż, atoi nie jest w jednej z tych bibliotek, 255 00:18:22,430 --> 00:18:26,600 więc to, co musimy zrobić, to musimy włączyć odpowiednią bibliotekę do tego. 256 00:18:26,600 --> 00:18:32,720 Więc przypominam powrotem Walkthrough 1, gdzie omówiono z funkcji ręcznego. 257 00:18:32,720 --> 00:18:37,110 Wpisać w terminalu mężczyzna a następnie po nazwie funkcji. 258 00:18:37,110 --> 00:18:39,720 I tak, że wywoła całą listę jego użytkowania, 259 00:18:39,720 --> 00:18:42,890 ale jak będzie wychowywać co biblioteka należy. 260 00:18:42,890 --> 00:18:47,000 Więc zostawię to dla was do korzystania z funkcji ręcznego z atoi 261 00:18:47,000 --> 00:18:53,360 i dowiedzieć się, które biblioteki trzeba dołączyć, aby móc korzystać z funkcji atoi. 262 00:18:54,450 --> 00:18:57,670 Więc mamy klucz i teraz chodzi o uzyskanie zwykłego tekstu, 263 00:18:57,670 --> 00:19:01,820 i tak, że faktycznie będzie to wejście użytkownika, w którym poprosi. 264 00:19:01,820 --> 00:19:05,540 Mieliśmy do czynienia z getInt i GetFloat, a więc w tym samym duchu 265 00:19:05,540 --> 00:19:07,670 będziemy mieć do czynienia z getString. 266 00:19:07,670 --> 00:19:12,440 Ale w tym przypadku nie musimy robić żadnych While lub pętle while do sprawdzenia. 267 00:19:12,440 --> 00:19:14,480 GetString pewnością daje nam ciąg, 268 00:19:14,480 --> 00:19:17,630 i jedziemy do szyfrowania, co użytkownik podaje nam. 269 00:19:17,630 --> 00:19:23,770 Tak więc można przyjąć, że wszystkie z tych użytkowników ciągów wprowadzane są prawidłowe. 270 00:19:23,770 --> 00:19:24,670 Great. 271 00:19:24,670 --> 00:19:27,270 Więc gdy masz klucz i raz masz tekst, 272 00:19:27,270 --> 00:19:31,660 Teraz to, co pozostaje, to trzeba zaszyfrować zwykłego tekstu. 273 00:19:31,660 --> 00:19:36,530 Tylko szybko pokrywają ponad slangu, plaintext to co użytkownik daje, 274 00:19:36,530 --> 00:19:41,030 a szyfrogram jest to, co do nich wrócić. 275 00:19:42,450 --> 00:19:45,850 Więc strun, aby móc przejść przez faktycznie pismo pismem 276 00:19:45,850 --> 00:19:48,550 ponieważ mamy do przesunięcia każdego listu, 277 00:19:48,550 --> 00:19:51,390 Rozumiemy, że struny, jeśli rodzaj odwinąć warstwy, 278 00:19:51,390 --> 00:19:54,130 widzimy, że są one po prostu bardzo lista znaków. 279 00:19:54,130 --> 00:19:55,930 Jeden jest po drugiej. 280 00:19:55,930 --> 00:20:01,690 A więc możemy traktować ciągi jako tablic, ponieważ są tablice znaków. 281 00:20:01,690 --> 00:20:05,640 Tak, że masz ciąg o nazwie text, 282 00:20:05,640 --> 00:20:09,400 iw ramach tego tekstu zmiennego jest przechowywany To CS50. 283 00:20:09,400 --> 00:20:15,680 Następnie tekst o indeksie 0 będzie stolicą T, index 1 byłoby h itp. 284 00:20:17,530 --> 00:20:23,970 A potem z tablicami, w argc przykład args.c, 285 00:20:23,970 --> 00:20:27,090 widzieliśmy, że mieliśmy do iteracyjnego tablicę 286 00:20:27,090 --> 00:20:32,440 i tak, że miał iteracyjne z i = 0, aż do i jest mniejsza niż długość. 287 00:20:32,440 --> 00:20:35,560 Dlatego musimy jakiś sposób dowiedzieć się, co długość naszego łańcucha jest 288 00:20:35,560 --> 00:20:37,090 jeśli mamy do iteracji nad nim. 289 00:20:37,090 --> 00:20:42,300 Na szczęście znowu jest funkcją nie nam, choć w dalszej CS50 290 00:20:42,300 --> 00:20:45,860 to na pewno będzie w stanie wdrożyć i tworzyć własne funkcje 291 00:20:45,860 --> 00:20:48,260 że można obliczyć długość łańcucha. 292 00:20:48,260 --> 00:20:52,120 Ale teraz mamy zamiar wykorzystać długość łańcucha, tak strlen. 293 00:20:52,120 --> 00:21:00,440 Przechodzą w ciągu, a następnie powróci ci int reprezentującą długość łańcucha. 294 00:21:00,440 --> 00:21:05,840 Spójrzmy na przykład, jak może być w stanie iterować każdy znak w ciągu znaków 295 00:21:05,840 --> 00:21:08,470 i zrobić coś z tym. 296 00:21:08,470 --> 00:21:13,250 Co chcemy zrobić jest iteracyjne nad każdy znak łańcucha, 297 00:21:13,250 --> 00:21:19,150 i co chcemy zrobić, to możemy wydrukować z powrotem każdy znak 1 przez 1 298 00:21:19,150 --> 00:21:22,060 wyjątkiem dodamy coś obok niego. 299 00:21:22,060 --> 00:21:27,020 Więc zacznijmy od pętli for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Jedziemy do pozostawienia miejsca na stanie. 301 00:21:32,700 --> 00:21:36,840 Chcemy iteracyjne, dojeżdżamy do końca łańcucha, prawda? 302 00:21:36,840 --> 00:21:41,340 Więc co funkcja daje nam długość łańcucha? 303 00:21:41,340 --> 00:21:43,160 [Niesłyszalne odpowiedź uczeń] 304 00:21:43,160 --> 00:21:46,420 To długość argumentów wiersza poleceń. 305 00:21:46,420 --> 00:21:50,650 Ale na ciąg chcemy użyć funkcji, która daje nam długość łańcucha. 306 00:21:50,650 --> 00:21:53,090 Więc to jest długość łańcucha. 307 00:21:53,090 --> 00:21:57,130 I tak to trzeba przekazać w ciągu do niego. 308 00:21:57,130 --> 00:21:59,760 Trzeba wiedzieć, co łańcuch musi obliczyć długość. 309 00:21:59,760 --> 00:22:03,160 Tak więc w tym przypadku mamy do czynienia z string s. 310 00:22:04,790 --> 00:22:05,860 Great. 311 00:22:05,860 --> 00:22:10,770 Tak więc to, co chcemy zrobić, niech printf. 312 00:22:10,770 --> 00:22:14,850 Teraz możemy mieć do czynienia z postaciami. Chcemy wydrukować każdy indywidualny charakter. 313 00:22:14,850 --> 00:22:22,150 Gdy chcesz go wydrukować pływak, należałoby użyć zastępczy jak f%. 314 00:22:22,150 --> 00:22:24,580 Przy wew byłoby użyć% d. 315 00:22:24,580 --> 00:22:30,890 I tak podobnie, z charakterem korzystania C% powiedzieć, że zamierzam być drukowane znak 316 00:22:30,890 --> 00:22:34,570 , które jest przechowywane wewnątrz zmiennej. 317 00:22:34,570 --> 00:22:40,840 Więc mamy to, a dodajmy termin i miejsce do tego. 318 00:22:40,840 --> 00:22:45,430 Która postać jesteśmy przy użyciu? 319 00:22:45,430 --> 00:22:49,780 Będziemy używać cokolwiek znak, że jesteśmy w ciągu. 320 00:22:49,780 --> 00:22:52,890 Tak więc mamy zamiar używać coś z łańcucha, 321 00:22:52,890 --> 00:22:56,420 ale chcemy, aby uzyskiwać dostęp do jakiegoś znaku tam. 322 00:22:56,420 --> 00:23:02,740 Tak więc, jeśli ciąg jest tylko tablica, to w jaki sposób dostęp do elementów tablic? 323 00:23:02,740 --> 00:23:06,480 Mamy tych nawiasów kwadratowych, a potem umieścić wskaźnik w środku. 324 00:23:06,480 --> 00:23:11,820 Więc mamy nawiasów kwadratowych. Nasz indeks w tym przypadku możemy po prostu użyć i. Dokładnie. 325 00:23:15,290 --> 00:23:22,370 Więc tutaj mówimy idziemy do drukowania znaku następuje kropka i spacja, 326 00:23:22,370 --> 00:23:30,870 i że postać będzie ith pismo w naszym s string. 327 00:23:32,920 --> 00:23:39,330 Idę, aby zapisać, że. Okay. 328 00:23:42,510 --> 00:23:46,840 Teraz mam zamiar uruchomić długość ciągu. 329 00:23:46,840 --> 00:23:53,440 Więc mieliśmy ciąg nazwie OMG, a teraz jest jeszcze bardziej podkreślić. 330 00:23:53,440 --> 00:23:57,870 Podobnie, powiedzmy, że faktycznie chce się ciąg od użytkownika. 331 00:23:57,870 --> 00:23:59,580 W jaki sposób możemy to zrobić? 332 00:23:59,580 --> 00:24:01,610 Przed, w jaki sposób możemy uzyskać int? 333 00:24:01,610 --> 00:24:08,040 Powiedzieliśmy getInt, prawda? Ale to nie jest int, więc niech GetString. 334 00:24:11,780 --> 00:24:17,770 Zróbmy długość ciągu. Tu nie wchodzi specjalny monit. 335 00:24:17,770 --> 00:24:19,940 Więc ja nie wiem. 336 00:24:19,940 --> 00:24:23,820 Mam zamiar umieścić moje nazwisko w tu i tak to można zrobić jedną z tych rzeczy 337 00:24:23,820 --> 00:24:29,600 gdzie mogę przypisać słowo na każdy list, czy coś w tym stylu. Cool. 338 00:24:29,600 --> 00:24:31,900 Więc to jest długość łańcucha. 339 00:24:33,000 --> 00:24:34,640 Więc wracamy do Cezara. 340 00:24:34,640 --> 00:24:38,620 Mamy kilka narzędzi na jak iteracyjne nad ciąg znaków, 341 00:24:38,620 --> 00:24:41,250 jak mamy dostęp do każdego elementu. 342 00:24:41,250 --> 00:24:44,720 Więc teraz możemy wrócić do programu. 343 00:24:44,720 --> 00:24:48,650 Jak wspomniałem wcześniej, w tabeli ASCII, twoim najlepszym przyjacielem, 344 00:24:48,650 --> 00:24:52,300 masz zamiar zobaczyć numery, które są związane z każdą literę. 345 00:24:52,300 --> 00:24:55,900 Więc powiedzieć, że nasze plaintext jest mi głowy! 346 00:24:55,900 --> 00:25:01,090 Następnie każdą z tych postaci będzie miała liczbę ASCII i związanego z nim, 347 00:25:01,090 --> 00:25:04,710 nawet apostrof, nawet miejsca, nawet wykrzyknik, 348 00:25:04,710 --> 00:25:06,600 więc będziemy chcieli, aby o tym pamiętać. 349 00:25:06,600 --> 00:25:12,360 Tak mówią nasz klucz, że użytkownik zawarte w ich argument wiersza polecenia jest 6. 350 00:25:12,360 --> 00:25:17,770 Oznacza to, że do pierwszej litery, która jest i, który jest reprezentowany przez 73, 351 00:25:17,770 --> 00:25:25,610 Aby powrócić do nich cokolwiek litera jest reprezentowana przez wartość ASCII 73 + 6. 352 00:25:25,610 --> 00:25:29,020 W tym przypadku będzie 79. 353 00:25:30,840 --> 00:25:35,040 Teraz chcemy, aby przejść do następnego znaku. 354 00:25:35,040 --> 00:25:40,960 Więc następnym w indeksie 1 z tekstu jawnego będzie apostrof. 355 00:25:40,960 --> 00:25:46,780 Ale pamiętaj, tylko chcemy zaszyfrować litery. 356 00:25:46,780 --> 00:25:50,040 Dlatego chcemy, aby upewnić się, że apostrof faktycznie pozostaje taka sama, 357 00:25:50,040 --> 00:25:54,310 to, że nie zmieni się z 39 do 45 jest cokolwiek. 358 00:25:54,310 --> 00:25:57,150 Chcemy zachować go jako apostrof. 359 00:25:57,150 --> 00:26:00,780 Dlatego chcemy, aby pamiętać, aby zaszyfrować tylko litery 360 00:26:00,780 --> 00:26:04,560 bo chcemy wszystkich innych symboli pozostać niezmienione w naszym programie. 361 00:26:04,560 --> 00:26:07,130 Inna sprawa, że ​​chcemy, aby zachować wielkość. 362 00:26:07,130 --> 00:26:10,250 Więc kiedy masz wielką literę, należy zatrzymać jako wielkie. 363 00:26:10,250 --> 00:26:12,830 Dokonuje konwersji powinien pozostać jako małe. 364 00:26:13,620 --> 00:26:19,480 Więc kilka przydatnych funkcji, aby móc zająć się tylko literami szyfrujących 365 00:26:19,480 --> 00:26:22,380 i przechowywać zachowując kapitalizację rzeczy 366 00:26:22,380 --> 00:26:25,130 jest isalpha isupper, funkcje islower. 367 00:26:25,130 --> 00:26:29,270 A więc są to funkcje, które zwracają Ci wartość logiczną. 368 00:26:29,270 --> 00:26:34,180 Zasadniczo, prawda lub fałsz. Czy to wielka? Czy to alfanumeryczny? 369 00:26:34,180 --> 00:26:37,180 Czy to pismo, w istocie. 370 00:26:37,180 --> 00:26:41,070 Więc są 3 przykłady jak można wykorzystać tę funkcję. 371 00:26:41,070 --> 00:26:47,060 Zasadniczo, można sprawdzić, czy wartość zwracana Państwu tej funkcji jest prawdziwe czy fałszywe 372 00:26:47,060 --> 00:26:49,400 oparte na tym wejściu. 373 00:26:49,400 --> 00:26:54,880 Albo nie zaszyfrować coś lub szyfrem go lub upewnij się, że jest to wielkie, itp. 374 00:26:54,880 --> 00:27:01,080 [Student] Czy możesz to wyjaśnić te trochę więcej i jak z nich korzystać? >> Tak, na pewno. 375 00:27:01,080 --> 00:27:08,470 Więc jeśli spojrzymy wstecz, mamy tu kapitałowego ï, prawda? 376 00:27:08,470 --> 00:27:14,550 Więc wiemy, że idzie do O bo + 6 jest O. 377 00:27:14,550 --> 00:27:18,740 Ale chcemy, aby upewnić się, że O będzie stolicą O. 378 00:27:18,740 --> 00:27:22,940 Więc w zasadzie, że jest trochę coś zmieni wejście. 379 00:27:22,940 --> 00:27:26,870 Więc czy to jest wielkie i nie będzie rodzaj zmienić sposób mamy do czynienia z nim. 380 00:27:26,870 --> 00:27:32,360 Więc jeśli używamy funkcji isupper na danym indeksie, 381 00:27:32,360 --> 00:27:36,480 tak isupper ("I"), która zwraca nam prawdziwej, więc wiemy, że to jest górna. 382 00:27:36,480 --> 00:27:40,360 Tak więc na tej podstawie, a później pójdziemy do formuły 383 00:27:40,360 --> 00:27:42,750 że będziesz używać do zmiany rzeczy Cezara, 384 00:27:42,750 --> 00:27:46,560 tak, to w zasadzie, że będzie nieco inna formuła, czy to wielkie 385 00:27:46,560 --> 00:27:50,670 w przeciwieństwie do małych liter. Ma sens? 386 00:27:51,020 --> 00:27:52,760 Tak. Nie przejmuj się. 387 00:27:54,900 --> 00:27:58,990 Rozmawiałem trochę o dodanie 6 do pisma, które nie dość sensu 388 00:27:58,990 --> 00:28:05,500 wyjątkiem sytuacji, gdy rodzaj zrozumienia, że ​​te znaki 389 00:28:05,500 --> 00:28:08,920 są rodzajem zamiennie z liczb całkowitych. 390 00:28:08,920 --> 00:28:11,250 Co my możemy zrobić, to rodzaj wykorzystania ukrytych odlewania. 391 00:28:11,250 --> 00:28:18,100 Pójdziemy do odlewania nieco później, gdzie wybrać się na wartość i przekształcić go w innego typu 392 00:28:18,100 --> 00:28:20,440 niż pierwotnie było. 393 00:28:20,440 --> 00:28:25,910 Ale z tego Pset będziemy mogli trochę zamiennie używać znaków 394 00:28:25,910 --> 00:28:30,880 i odpowiadające im wartości całkowitych. 395 00:28:30,880 --> 00:28:35,140 Więc jeśli po prostu wstawcie znak z zaledwie cudzysłowów pojedynczych, 396 00:28:35,140 --> 00:28:40,390 wtedy będziesz mógł z nim pracować z liczbami całkowitymi, radzenia sobie z nim jako liczba całkowita. 397 00:28:40,390 --> 00:28:48,040 Więc kapitał C odnosi się do 67. Mała litera f dotyczy 102. 398 00:28:48,040 --> 00:28:51,480 Ponownie, jeśli chcesz wiedzieć, te wartości, spójrz na ASCII tabeli. 399 00:28:51,480 --> 00:28:56,160 Więc chodźmy do niektórych przykładów jak może być w stanie odjąć, dodawanie, 400 00:28:56,160 --> 00:29:03,130 jak rzeczywiście można naprawdę pracować z tymi postaciami, ich używać zamiennie. 401 00:29:03,870 --> 00:29:11,350 Muszę powiedzieć, że ASCIIMath będzie obliczyć dodanie znaku do liczby całkowitej 402 00:29:11,350 --> 00:29:17,590 , a następnie wyświetla się wynikowy charakter oraz wynikowy ASCII. 403 00:29:17,590 --> 00:29:22,290 A więc mówię - we'll dotyczą tej części później - 404 00:29:22,290 --> 00:29:29,100 ale w zasadzie, mówię, że użytkownik powinien powiedzieć uruchomić ASCIIMath wraz z kluczem, 405 00:29:29,100 --> 00:29:30,880 i mówię że klucz będzie liczba 406 00:29:30,880 --> 00:29:34,600 z którym mamy zamiar dodać ten znak. 407 00:29:34,600 --> 00:29:38,560 Więc tutaj zauważyć, że ponieważ jestem wymagający klucza, 408 00:29:38,560 --> 00:29:40,590 ponieważ jestem wymagający, że dajesz mi 1 rzecz, 409 00:29:40,590 --> 00:29:45,600 Chcę tylko, aby zaakceptować. / Asciimath i klucz. 410 00:29:45,600 --> 00:29:49,330 Więc wracam do żądania argc jest równe 2. 411 00:29:49,330 --> 00:29:54,360 Jeśli nie jest, to ja zamierzam powrócić 1 i program zostanie zamknięty. 412 00:29:55,070 --> 00:29:58,540 Więc mówię, klucz nie będzie pierwszy argument linii poleceń, 413 00:29:58,540 --> 00:30:05,080 to będzie drugi, a jak widać tutaj, 414 00:30:05,080 --> 00:30:11,790 Idę do kolei, że do liczby całkowitej. 415 00:30:15,740 --> 00:30:19,230 Potem mam zamiar ustawić znak do r. 416 00:30:19,230 --> 00:30:23,970 Należy zauważyć, że rodzaj zmiennej CHR faktycznie całkowitą. 417 00:30:23,970 --> 00:30:30,480 Sposób, że jestem w stanie używać r jako liczba całkowita jest znacznikow to z tymi apostrofami. 418 00:30:33,850 --> 00:30:40,560 Więc z powrotem do naszego printf gdzie mamy zastępczy dla znaku 419 00:30:40,560 --> 00:30:43,590 a następnie zastępczy liczby całkowitej, 420 00:30:43,590 --> 00:30:49,450 jest reprezentowany przez CHR, a jest liczbą całkowitą klucza. 421 00:30:49,450 --> 00:30:54,320 I tak potem będziemy w wyniku dodać 2 razem. 422 00:30:54,320 --> 00:30:58,420 Więc mamy zamiar dodać r + cokolwiek klucz, 423 00:30:58,420 --> 00:31:03,520 a następnie jedziemy do wydrukować wynik tego. 424 00:31:06,210 --> 00:31:14,220 Więc zróbmy asciimath. Jest na bieżąco, więc po prostu uruchomić asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, ale widzisz, to nic nie robi, bo w rzeczywistości nie jest na klucz. 426 00:31:18,290 --> 00:31:23,850 Tak więc, gdy tylko wrócił 1, naszym głównym funkcji, to po prostu wróciła do nas. 427 00:31:23,850 --> 00:31:29,250 Więc niech przechodzą w kluczu. Ktoś dał mi numer. >> [Uczeń] 4. 428 00:31:29,250 --> 00:31:30,920 4. Okay. 429 00:31:30,920 --> 00:31:39,280 Więc r wzrosła o 4 ma dać nam v, która odpowiada wartości 118 ASCII. 430 00:31:39,280 --> 00:31:43,880 Więc to trochę sens, że - 431 00:31:43,880 --> 00:31:51,250 Właściwie, mogę zapytać, co o tym myślisz ASCII wartość r jest, jeśli r + 4 jest 118? 432 00:31:53,070 --> 00:31:55,470 To tak, r 114. 433 00:31:55,470 --> 00:32:03,010 Więc jeśli spojrzeć na ASCII tabeli wtedy, na pewno wystarczy, zobaczysz, że r jest reprezentowana przez 114. 434 00:32:03,010 --> 00:32:08,610 Więc teraz, że wiemy, że możemy dodać liczby całkowite do znaków, to wydaje się dość prosta. 435 00:32:08,610 --> 00:32:12,740 Jesteśmy po prostu będzie iterować ciąg jak widzieliśmy w przykładzie poprzednim. 436 00:32:12,740 --> 00:32:17,170 Sprawdzimy, czy jest to list. 437 00:32:17,170 --> 00:32:20,420 Jeśli tak jest, to będziemy przesuwać go w jakikolwiek klucz. 438 00:32:20,420 --> 00:32:23,650 Całkiem proste, z wyjątkiem, gdy pojawi się w ten sposób, 439 00:32:23,650 --> 00:32:32,140 widać, że z, reprezentowany przez 122, wtedy da ci inny charakter. 440 00:32:32,140 --> 00:32:37,770 Naprawdę chcesz się zatrzymać w naszym alfabecie, tak? 441 00:32:37,770 --> 00:32:43,180 Więc musimy wymyślić jakiś sposób rodzaj owijania wokół. 442 00:32:43,180 --> 00:32:47,190 Po dotarciu zed i chcesz zwiększyć o pewną liczbę, 443 00:32:47,190 --> 00:32:51,230 nie chcesz, aby przejść do sekcji poza ASCII alfabetu; 444 00:32:51,230 --> 00:32:54,140 chcesz zawinąć z powrotem całą drogę do A. 445 00:32:54,140 --> 00:32:58,550 Ale należy pamiętać, że wciąż zachowując sprawę. 446 00:32:58,550 --> 00:33:00,980 Więc wiedząc, że listy nie może stać się symbolami 447 00:33:00,980 --> 00:33:05,290 jak symbole nie będą się zmieniać, jak również. 448 00:33:05,290 --> 00:33:08,170 W ostatnim Pset pewno nie trzeba, 449 00:33:08,170 --> 00:33:14,310 ale opcja była wdrożyć swój chciwy Pset używając modułu funkcji. 450 00:33:14,310 --> 00:33:17,230 Ale teraz jesteśmy rzeczywiście będzie trzeba użyć modułu, 451 00:33:17,230 --> 00:33:19,900 więc po prostu przejść nad tym trochę mało. 452 00:33:19,900 --> 00:33:26,920 Zasadniczo, gdy masz x modulo y, która daje resztę x podzielona przez y. 453 00:33:26,920 --> 00:33:30,930 Oto kilka przykładów. Mamy 27% 15. 454 00:33:30,930 --> 00:33:36,200 Zasadniczo, gdy odejmiemy 15 od 27 tyle razy, jak to możliwe bez uzyskania negatywnej 455 00:33:36,200 --> 00:33:39,060 wtedy otrzymasz 12 pozostały. 456 00:33:39,060 --> 00:33:44,650 Więc to jest trochę jak w kontekście matematyki, ale jak faktycznie możemy to wykorzystać? 457 00:33:44,650 --> 00:33:47,100 To będzie przydatny dla naszej wrapover. 458 00:33:47,100 --> 00:33:55,420 Do tego powiedzmy Poprosiłem was wszystkich podzielić na 3 grupy. 459 00:33:55,420 --> 00:33:58,010 Czasami można to zrobić w grupach, i coś w tym stylu. 460 00:33:58,010 --> 00:34:01,320 Powiedzieć, że powiedział: "Dobra, chcę, żebyście wszyscy dzielą się na 3". 461 00:34:01,320 --> 00:34:04,240 Jak można to zrobić? 462 00:34:04,240 --> 00:34:06,810 [Niesłyszalne odpowiedź uczeń] Tak, dokładnie. Odliczać. Okay. 463 00:34:06,810 --> 00:34:10,260 Powiedzmy to w życie. Czy chcesz zacząć? 464 00:34:10,260 --> 00:34:13,810 [OFF] licząc studentów 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Ale pamiętaj ... >> [Uczeń] Oh, przepraszam. 466 00:34:16,620 --> 00:34:18,730 To bardzo dobry punkt. 467 00:34:18,730 --> 00:34:24,130 Mówiłeś, że 4, ale naprawdę chcemy Ci powiedzieć 1 ponieważ chcemy jedynie 3 grupy. 468 00:34:24,130 --> 00:34:30,159 Tak więc, w jaki sposób - Nie, to jest bardzo dobry przykład, bo to w jaki sposób można powiedzieć, że 1? 469 00:34:30,159 --> 00:34:33,370 Jaki jest związek między 4 i 1? 470 00:34:33,370 --> 00:34:36,760 Cóż, 4 mod 3 jest 1. 471 00:34:36,760 --> 00:34:41,460 Tak więc, jeśli w dalszym ciągu, by być 2. 472 00:34:41,460 --> 00:34:44,540 Więc mieć 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Znowu jesteś rzeczywiście 5-gi osoba. Skąd wiesz, że do powiedzenia 2 zamiast 5? 474 00:34:49,420 --> 00:34:53,760 Mówisz, 5 mod 3 jest 2. 475 00:34:53,760 --> 00:34:59,100 Chcę zobaczyć, jak wiele grup 3 pozostałe pozostają wtedy kolejnosc am I. 476 00:34:59,100 --> 00:35:02,860 I tak wtedy, jeśli będziemy kontynuować na całej sali, 477 00:35:02,860 --> 00:35:07,760 wtedy widzimy, że zawsze jesteśmy w rzeczywistości zastosowanie funkcji mod do siebie 478 00:35:07,760 --> 00:35:09,990 do rodzaju odliczać. 479 00:35:09,990 --> 00:35:14,490 To bardziej rodzaj namacalny przykład tego, jak można użyć modulo 480 00:35:14,490 --> 00:35:17,960 bo jestem pewien, że większość z nas zapewne już przez ten proces 481 00:35:17,960 --> 00:35:19,630 gdzie musieliśmy liczyć się. 482 00:35:19,630 --> 00:35:21,840 Wszelkie pytania dotyczące modulo? 483 00:35:21,840 --> 00:35:25,360 To będzie bardzo ważne, aby zrozumieć pojęcia tego, 484 00:35:25,360 --> 00:35:28,640 więc chcę się upewnić, wam zrozumieć. 485 00:35:28,640 --> 00:35:34,660 [Uczeń] Jeśli nie ma reszta, to daje rzeczywistą liczbę? 486 00:35:34,660 --> 00:35:40,430 Jeśli jeden z pierwszych 3 z nich to zrobił, to dałem im to, co rzeczywiście było, 487 00:35:40,430 --> 00:35:43,310 albo w ogóle nie dałem im [niesłyszalne] >> To jest dobre pytanie. 488 00:35:43,310 --> 00:35:48,750 Gdy nie ma reszta na modulo - tak, że masz 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 faktycznie daje z powrotem 0. 490 00:35:53,670 --> 00:35:57,290 Porozmawiamy o tym nieco później. 491 00:35:58,810 --> 00:36:07,720 O tak, na przykład, 3 osoba - 3 mod 3 jest faktycznie 0 ale powiedziała 3. 492 00:36:07,720 --> 00:36:14,900 Tak, że tak jakby połowu wewnętrznej, na przykład, 493 00:36:14,900 --> 00:36:17,620 jak dobrze, jeśli mod jest 0 wtedy będę 3. osoba. 494 00:36:17,620 --> 00:36:22,740 Ale my się do rodzaju, jak możemy mieć do czynienia z tym, co 0 później. 495 00:36:22,740 --> 00:36:32,750 Więc teraz jakoś mają sposób mapowania zed do właściwej litery. 496 00:36:32,750 --> 00:36:34,920 Więc teraz mamy przeszedł tych przykładach 497 00:36:34,920 --> 00:36:37,880 my niby jak Cezar może działać. 498 00:36:37,880 --> 00:36:42,640 Widzisz 2 alfabety, a potem zobaczyć je zmienia. 499 00:36:42,640 --> 00:36:44,430 Warto więc spróbować i wyrazić, że pod względem wzoru. 500 00:36:44,430 --> 00:36:46,940 Ta formuła jest faktycznie podawany w specyfikacji, 501 00:36:46,940 --> 00:36:52,070 Ale spójrzmy prawdzie w rodzaju wyglądu przez co każda zmienna oznacza. 502 00:36:52,070 --> 00:36:55,000 Nasz wynik końcowy będzie zaszyfrowany. 503 00:36:55,000 --> 00:36:58,300 Więc to mówi, że i-ty znak z szyfrogramu 504 00:36:58,300 --> 00:37:02,500 będzie odpowiadać ego charakteru jawnego. 505 00:37:02,500 --> 00:37:08,130 To ma sens, bo chcemy być zawsze w kolejce tych rzeczy. 506 00:37:08,130 --> 00:37:13,480 Więc to będzie ith charakter zaszyfrowany powiększonej k, który jest naszym kluczem - 507 00:37:13,480 --> 00:37:17,230 to ma sens - i wtedy mamy ten mod 26. 508 00:37:17,230 --> 00:37:19,860 Pamiętacie, kiedy mieliśmy zed 509 00:37:19,860 --> 00:37:24,190 nie chcieliśmy dostać się do znaku, więc chcieliśmy to mod 510 00:37:24,190 --> 00:37:26,540 i rodzaj zawinięcia alfabetu. 511 00:37:26,540 --> 00:37:33,430 Po zed by udać się do a, b, c, d, dopóki nie dostał się do właściwej liczby. 512 00:37:33,430 --> 00:37:44,690 Wiemy, że Zed jeśli + 6 dałoby F, ponieważ po Zed jest a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Warto więc pamiętać, wiemy na pewno, że zed + 6 ma dać nam f. 514 00:37:52,530 --> 00:38:03,530 W ASCII wartości, z jest 122 i f jest 102. 515 00:38:03,530 --> 00:38:10,570 Więc musimy znaleźć jakiś sposób, że nasz wzór Caesar nam 102 516 00:38:10,570 --> 00:38:13,590 po wykonaniu w 122. 517 00:38:13,590 --> 00:38:19,550 Więc jeśli tylko zastosować tę formułę, ('z' + 6)% 26, że faktycznie daje 24 518 00:38:19,550 --> 00:38:25,980 ponieważ 122 + 6 wynosi 128 128% 26 daje 24 resztę. 519 00:38:25,980 --> 00:38:29,140 Ale to naprawdę nie znaczy f. To na pewno nie 102. 520 00:38:29,140 --> 00:38:33,590 To również nie 6-te litery alfabetu. 521 00:38:33,590 --> 00:38:41,550 Tak oczywiście, musimy mieć jakiś sposób szczypanie to trochę mało. 522 00:38:42,970 --> 00:38:51,340 W kategoriach zwykłego alfabetu, wiemy, że z jest 26-list oraz f jest 6. 523 00:38:51,340 --> 00:38:55,460 Ale jesteśmy w informatyce, więc idziemy do indeksu na 0. 524 00:38:55,460 --> 00:39:00,690 Więc zamiast z jest liczbą 26, będziemy mówić, że to numer 25 525 00:39:00,690 --> 00:39:02,630 , ponieważ jest 0. 526 00:39:02,630 --> 00:39:04,770 Więc teraz niech stosuje tę formułę. 527 00:39:04,770 --> 00:39:11,710 Mamy z reprezentowana przez 25 + 6, co daje 31. 528 00:39:11,710 --> 00:39:15,790 Mod 26 i 31 daje 5 jak reszty. 529 00:39:15,790 --> 00:39:20,500 To jest doskonałe, bo wiemy, że f jest 5 literą alfabetu. 530 00:39:20,500 --> 00:39:26,400 Ale to nadal nie jest f, prawda? To nadal nie jest 102. 531 00:39:26,400 --> 00:39:32,730 Tak więc w tym zbior, wyzwaniem będzie próbował dowiedzieć się relacji 532 00:39:32,730 --> 00:39:36,910 między konwersji między tymi wartości ASCII a indeksem alfabetycznym. 533 00:39:36,910 --> 00:39:40,280 Zasadniczo to, co będziesz chciał zrobić, chcesz zacząć z ASCII wartości, 534 00:39:40,280 --> 00:39:45,390 ale chcesz się jakoś tłumaczyć, że w indeksie alfabetycznym 535 00:39:45,390 --> 00:39:52,610 następnie obliczyć pismo powinno być - w zasadzie, co jej jest indeks alfabetyczny 536 00:39:52,610 --> 00:39:57,660 charakteru szyfrów - wtedy tłumaczyć, że z powrotem do wartości ASCII. 537 00:39:57,660 --> 00:40:04,870 Więc jeśli bicz swój ASCII tabeli, a następnie spróbować znaleźć relacje między, powiedzmy, 102 i 5 538 00:40:04,870 --> 00:40:10,440 lub 122 i 25. 539 00:40:12,140 --> 00:40:15,690 Otrzymaliśmy nasz klucz od argumentów wiersza poleceń, staliśmy zwykłego tekstu, 540 00:40:15,690 --> 00:40:17,520 mamy zakodowane to. 541 00:40:17,520 --> 00:40:19,820 Teraz wszystko, co pozostało do zrobienia jest wydrukowane. 542 00:40:19,820 --> 00:40:22,040 Możemy to zrobić na kilka różnych sposobów. 543 00:40:22,040 --> 00:40:24,570 Co możemy zrobić, jest faktycznie drukować jak iść. 544 00:40:24,570 --> 00:40:28,250 Jak iteracyjne nad znaków w ciągu, 545 00:40:28,250 --> 00:40:31,660 może po prostu wystarczy wydrukować prawo wtedy, gdy obliczenia. 546 00:40:31,660 --> 00:40:36,030 Alternatywnie, można również zapisać je w tablicy i mieć tablicę znaków 547 00:40:36,030 --> 00:40:39,280 i na koniec iteracji całej tej tablicy i wydrukować. 548 00:40:39,280 --> 00:40:40,980 Więc masz kilka opcji do tego. 549 00:40:40,980 --> 00:40:47,280 I pamiętaj, że% c będzie zastępczy do drukowania znak. 550 00:40:47,280 --> 00:40:50,420 Więc nie mamy Cezara, a teraz przechodzimy do Vigenère 551 00:40:50,420 --> 00:40:57,580 która jest bardzo podobna do Cezara, ale po prostu nieco bardziej skomplikowane. 552 00:40:57,580 --> 00:41:03,310 Więc zasadniczo z Vigenère jest masz zamiar być przechodzącą w hasła. 553 00:41:03,310 --> 00:41:06,510 Więc zamiast numeru, będziesz mieć ciąg, 554 00:41:06,510 --> 00:41:09,200 i tak, że będzie działać jako hasła. 555 00:41:09,200 --> 00:41:14,440 Potem, jak zwykle, masz zamiar się monit o ciąg od użytkownika 556 00:41:14,440 --> 00:41:19,050 a następnie zaszyfrować go, a następnie dać im plecy szyfrogram. 557 00:41:19,050 --> 00:41:24,650 Tak jak powiedziałem, to jest bardzo podobne do Cezara, z wyjątkiem zamiast przesuwania przez pewną liczbę, 558 00:41:24,650 --> 00:41:30,620 liczba faktycznie się zmienić za każdym razem od znaku do znaku. 559 00:41:30,620 --> 00:41:34,890 Który reprezentuje rzeczywistą liczbę do zmiany, jest reprezentowane przez litery na klawiaturze. 560 00:41:34,890 --> 00:41:43,150 Więc jeśli wchodzi do przesunięcia, na przykład, to, że odpowiadają przesunięcia 0. 561 00:41:43,150 --> 00:41:45,900 Więc to znowu powrót do indeksu alfabetycznego. 562 00:41:45,900 --> 00:41:49,100 , Co może być przydatne, jeśli widzisz, że mamy do czynienia z rzeczywiście wartości ASCII 563 00:41:49,100 --> 00:41:51,790 jak liter, jak również wskaźnik alfabetycznej 564 00:41:51,790 --> 00:41:58,020 może znaleźć lub stworzyć własną tabelę ASCII pokazujący alfabetyczny indeks 0 do 25, 565 00:41:58,020 --> 00:42:03,750 a do z, a wartości kodu ASCII, dzięki czemu można zobaczyć rodzaj relacji 566 00:42:03,750 --> 00:42:07,020 i naszkicować i spróbować znaleźć jakieś wzory. 567 00:42:07,020 --> 00:42:11,010 Podobnie, jeżeli były w pewnym przesunięcie przykład przez F - 568 00:42:11,010 --> 00:42:21,110 i to jest albo małe lub wielkie f - wtedy, że odpowiadają 5. 569 00:42:21,110 --> 00:42:24,180 Czy jesteśmy dobrze do tej pory? 570 00:42:25,770 --> 00:42:30,050 Formuła Vigenère jest nieco inna. 571 00:42:30,050 --> 00:42:32,960 Generalnie widać, że to jest jak Cezar, 572 00:42:32,960 --> 00:42:37,390 chyba zamiast k mamy k indeksu j. 573 00:42:37,390 --> 00:42:44,810 Zauważ, że nie używasz i. ponieważ zasadniczo na długość hasła 574 00:42:44,810 --> 00:42:49,850 niekoniecznie jest długość naszego szyfrogramu. 575 00:42:49,850 --> 00:42:56,130 To będzie nieco jaśniejszy, kiedy widzimy przykład, że mam trochę później. 576 00:42:56,130 --> 00:43:03,160 Zasadniczo, jeśli uruchomić program z hasła z ohai, 577 00:43:03,160 --> 00:43:08,560 to znaczy, że za każdym razem, ohai będzie Twoja zmiana. 578 00:43:08,560 --> 00:43:11,060 Więc w zależności od jakiej pozycji jesteś w słowo kluczowe, 579 00:43:11,060 --> 00:43:15,800 masz zamiar przenieś pewien charakter szyfrogram o tę kwotę. 580 00:43:15,800 --> 00:43:19,630 Znowu, podobnie jak Cezar, chcemy się upewnić, że możemy zachować kapitalizację rzeczy 581 00:43:19,630 --> 00:43:22,900 a my nie tylko litery zaszyfrować, znaki lub spacje. 582 00:43:22,900 --> 00:43:26,330 Więc spojrzeć do Cezara od funkcji, które może być używane, 583 00:43:26,330 --> 00:43:32,570 sposób, że zdecydowałeś, jak przenieść rzeczy, i że stosuje się do programu tutaj. 584 00:43:32,570 --> 00:43:35,260 Więc mapować to. 585 00:43:35,260 --> 00:43:39,680 Mamy tekst jawny, że dostaliśmy od użytkownika z getString 586 00:43:39,680 --> 00:43:44,090 mówiąc: To ... CS50 jest! 587 00:43:44,090 --> 00:43:47,090 Następnie mamy słowo kluczowe ohai. 588 00:43:47,090 --> 00:43:50,930 Pierwsze 4 znaki są całkiem proste. 589 00:43:50,930 --> 00:43:55,580 Wiemy, że T ma być przesunięty o, 590 00:43:55,580 --> 00:44:01,990 następnie h zostanie przesunięty o godzinę, i ma być przesunięty. 591 00:44:01,990 --> 00:44:04,610 Tutaj widać, że reprezentuje 0, 592 00:44:04,610 --> 00:44:11,940 tak, to wartość końcowa jest właściwie tylko sama litera, jak wcześniej. 593 00:44:11,940 --> 00:44:15,250 Wtedy s jest przesunięty i. 594 00:44:15,250 --> 00:44:19,370 Ale wtedy masz te okresy tutaj. 595 00:44:19,370 --> 00:44:25,960 Nie chcemy, aby zaszyfrować, że tak, to nie zmienimy go przez cokolwiek 596 00:44:25,960 --> 00:44:31,280 i po prostu wydrukować okres bez zmian. 597 00:44:31,280 --> 00:44:38,020 [Uczeń] I nie rozumiem, jak wiesz, że to jest przesunięty o - Gdzie - >> O, przepraszam. 598 00:44:38,020 --> 00:44:41,620 Na górze tutaj widać, że linia poleceń ohai argumentem, 599 00:44:41,620 --> 00:44:43,740 że to będzie kluczowe. 600 00:44:43,740 --> 00:44:49,550 I tak w zasadzie, jesteś na rowerze w ciągu znaków w hasła. 601 00:44:49,550 --> 00:44:52,020 [Uczeń] Więc o zostanie przesunięcie samo - 602 00:44:52,020 --> 00:44:56,260 Więc o odpowiada pewnej liczby alfabetu. 603 00:44:56,260 --> 00:44:58,400 [Uczeń] Racja. Ale skąd wziął się CS50 część z? 604 00:44:58,400 --> 00:45:02,540 Oh. To w getString gdzie jesteś jak "Daj mi ciąg do zakodowania." 605 00:45:02,540 --> 00:45:07,510 [Uczeń] Zamierzają dać ci ten argument do przeniesienia przez 606 00:45:07,510 --> 00:45:09,380 i wtedy poprosić o pierwszym ciągu. >> Tak. 607 00:45:09,380 --> 00:45:12,440 Więc kiedy uruchomisz program, oni będą zawierać słowo kluczowe 608 00:45:12,440 --> 00:45:14,740 swoich argumentów wiersza poleceń, kiedy go uruchomić. 609 00:45:14,740 --> 00:45:19,740 Potem, gdy już sprawdził, że oni rzeczywiście dał ci 1 i nie więcej, nie mniej, 610 00:45:19,740 --> 00:45:23,750 następnie masz zamiar skłonić ich do łańcucha, powiedzieć: "Daj mi łańcuch." 611 00:45:23,750 --> 00:45:27,630 Więc to, gdzie w tym przypadku dali Ci To ... CS50 jest! 612 00:45:27,630 --> 00:45:32,090 Więc masz zamiar używać, i korzystać ohai i iteracyjne. 613 00:45:32,090 --> 00:45:38,200 Zauważ, że tu pomijane szyfrowanie okresy, 614 00:45:38,200 --> 00:45:51,660 ale z punktu widzenia naszej pozycji na ohai, jeden obok użyliśmy o. 615 00:45:51,660 --> 00:45:54,990 W tym przypadku jest to trochę trudniejsze do zobaczenia bo to 4, 616 00:45:54,990 --> 00:45:57,710 więc niech to nadal sporo. Wystarczy trzymać się ze mną tutaj. 617 00:45:57,710 --> 00:46:02,960 Następnie mamy I i S, które następnie są tłumaczone przez o hi odpowiednio. 618 00:46:02,960 --> 00:46:09,370 Następnie mamy miejsca, a tak to wiemy, że nie będzie zaszyfrować przestrzenie. 619 00:46:09,370 --> 00:46:18,930 Ale zauważ, że zamiast do w tym miejscu właśnie tutaj, 620 00:46:18,930 --> 00:46:28,330 mamy szyfrowanie przez - I nie wiem, czy widać, że - tu. 621 00:46:28,330 --> 00:46:33,710 Więc to nie jest tak, jak rzeczywiście z góry ustalony, powiedzmy, o idzie tutaj, h idzie tutaj 622 00:46:33,710 --> 00:46:39,200 przechodzi tutaj, idzie o, o, h, i, o, h, i. Nie rób tego. 623 00:46:39,200 --> 00:46:43,760 Tylko przenieś swoją pozycję w kluczowych 624 00:46:43,760 --> 00:46:51,020 gdy wiesz, że jesteś rzeczywiście będzie szyfrowanie rzeczywiste list. 625 00:46:51,020 --> 00:46:53,920 Czy tego typu ma sens? 626 00:46:53,920 --> 00:46:55,800 Okay. 627 00:46:56,490 --> 00:46:58,500 Więc tylko kilka przypomnień. 628 00:46:58,500 --> 00:47:03,760 Chcesz się upewnić, że tylko przejść do następnej litery w słowo kluczowe 629 00:47:03,760 --> 00:47:06,390 jeśli znak w postaci zwykłego tekstu jest list. 630 00:47:06,390 --> 00:47:09,120 Więc powiedzieć, że jesteśmy na o. 631 00:47:09,120 --> 00:47:19,310 Zauważamy, że następny znak, indeks i na zwykły tekst, to numer, na przykład. 632 00:47:19,310 --> 00:47:31,630 Wtedy nie awansować j, indeks dla naszego hasła, aż docieramy inną literę. 633 00:47:31,630 --> 00:47:36,230 Znowu chcemy także upewnić się, że wraparound do początku hasła 634 00:47:36,230 --> 00:47:37,770 gdy jesteś na koniec. 635 00:47:37,770 --> 00:47:42,030 Jeśli widzisz tu jesteśmy na I następna ma być o. 636 00:47:42,030 --> 00:47:47,690 Więc chcesz znaleźć jakiś sposób jest możliwość nawijania na początku słowo kluczowe 637 00:47:47,690 --> 00:47:49,470 każdym razem, gdy do końca. 638 00:47:49,470 --> 00:47:55,040 I znowu, jakie operator jest przydatny w tym przypadku do owijania wokół? 639 00:47:56,630 --> 00:47:59,840 Podobnie jak w przykładzie off liczenia. 640 00:47:59,840 --> 00:48:03,710 [Uczeń] znak procent. >> Tak, znak procent, co jest modulo. 641 00:48:03,710 --> 00:48:11,250 Więc modulo będzie przydatna tutaj, jeśli chcesz, aby otoczyć się indeksu w ohai. 642 00:48:11,250 --> 00:48:17,700 I tylko szybkie wskazówka: Spróbuj pomyśleć o owijanie na hasła trochę jak wyłączyć liczenie, 643 00:48:17,700 --> 00:48:23,590 gdzie jeśli jest 3 grupy, 4. osoba, 644 00:48:23,590 --> 00:48:30,610 ich liczba, że ​​że był 4 MOD 3, który wynosił 1. 645 00:48:30,610 --> 00:48:32,880 Więc spróbuj i myśleć o tym w ten sposób. 646 00:48:34,770 --> 00:48:42,740 Jak widzieliśmy w formule, gdziekolwiek mamy CI i potem pi ale kJ, 647 00:48:42,740 --> 00:48:44,700 chcesz się upewnić, że śledzenie tych. 648 00:48:44,700 --> 00:48:47,580 Nie musisz nazywać go i, nie trzeba to nazwać j, 649 00:48:47,580 --> 00:48:53,270 ale chcesz się upewnić, że śledzenie pozycji, że jesteś na w postaci zwykłego tekstu 650 00:48:53,270 --> 00:48:55,790 jak również na stanowisku, że jesteś na swoje hasło 651 00:48:55,790 --> 00:48:59,840 bo te niekoniecznie będzie taki sam. 652 00:48:59,840 --> 00:49:06,400 Nie tylko słowo - to może być zupełnie inna długość niż tekst. 653 00:49:06,400 --> 00:49:09,140 Należy również pamiętać, plaintext, są cyfry i znaki, 654 00:49:09,140 --> 00:49:14,450 więc to nie będzie idealnie dopasować się razem. Tak. 655 00:49:14,450 --> 00:49:19,280 [Student] Czy jest funkcja, aby zmienić sprawę? 656 00:49:19,280 --> 00:49:24,530 Można zmienić na kapitał A? >> Tak, tam na pewno jest. 657 00:49:24,530 --> 00:49:27,890 Możesz sprawdzić - Wierzę, że to wszystko, toupper 1 słowo. 658 00:49:30,650 --> 00:49:36,310 Ale kiedy próbujesz do szyfrowania rzeczy i zachować tekst, 659 00:49:36,310 --> 00:49:39,350 to najlepiej po prostu mieć oddzielne przypadki. 660 00:49:39,350 --> 00:49:42,040 Jeśli to jest wielkie, to chcesz przenieść przez to 661 00:49:42,040 --> 00:49:46,460 ponieważ w formule, kiedy patrzę wstecz, jak mamy do rodzaju komórce 662 00:49:46,460 --> 00:49:50,900 zamiennie pomiędzy ASCII sposobu przedstawiania liczb 663 00:49:50,900 --> 00:49:55,020 i rzeczywisty indeks alfabetyczny, chcemy się upewnić, 664 00:49:55,020 --> 00:50:01,850 tam będzie jakiś wzór, który masz zamiar używać. 665 00:50:01,850 --> 00:50:04,580 Inna uwaga na wzór, faktycznie. 666 00:50:04,580 --> 00:50:07,250 Będziesz na pewno do czynienia z liczbami. 667 00:50:07,250 --> 00:50:11,280 Próby nie używać magiczne numerów, która jest przykładem stylu. 668 00:50:11,280 --> 00:50:18,470 Więc mówisz, że chcesz każdego coś przesunięcia czasowego jak - 669 00:50:18,470 --> 00:50:22,400 Ok, więc podpowiedź, inny spoiler jest, gdy masz zamiar być przesunięcie czegoś 670 00:50:22,400 --> 00:50:26,310 pewną kwotą, staraj się nie oświadcza, że ​​przez rzeczywistą liczbę 671 00:50:26,310 --> 00:50:32,810 ale spróbować i zobaczyć, czy można użyć wartość ASCII, który rodzaj bardziej sensowne. 672 00:50:32,810 --> 00:50:35,470 Inna uwaga: Ponieważ mamy do czynienia z wzorami, 673 00:50:35,470 --> 00:50:41,200 mimo że TF będzie rodzaj wiesz co wzór może być używany, 674 00:50:41,200 --> 00:50:44,430 najlepszy w swoim rodzaju na uwagi wyjaśnić logikę, jak, 675 00:50:44,430 --> 00:50:51,880 "Używam tego wzoru, bo ..." i rodzaj wzoru zwięźle wyjaśnić w swoich komentarzach. 676 00:50:54,090 --> 00:50:58,990 [To solucja 2] Jeśli nie ma żadnych innych pytań, to ja po prostu zatrzymać się tu na chwilę. 677 00:50:58,990 --> 00:51:04,370 Powodzenia Pset 2: i Crypto Dzięki za przyjście. 678 00:51:06,070 --> 00:51:08,620 [Uczeń] Dziękuję. >> Dzięki. 679 00:51:09,220 --> 00:51:10,800 [Media Offline intro]