1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUZYKA] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> David J. MALAN: Dobra, to CS50. 5 00:00:16,240 --> 00:00:18,010 I jest jeden tydzień. 6 00:00:18,010 --> 00:00:22,050 Tak więc przypomnieć, że ostatni raz w tygodniu zerowym, skupiliśmy się na obliczeniowej myślenia. 7 00:00:22,050 --> 00:00:25,440 A my przesiedli się od tego, do Scratch, do programowania graficznego 8 00:00:25,440 --> 00:00:27,360 język od naszych przyjaciół w MIT Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> I z początku, nie badamy pomysły, takie jak funkcje i warunki, 10 00:00:31,730 --> 00:00:35,210 i pętle i zmienne, a nawet wydarzenia, nici i inne. 11 00:00:35,210 --> 00:00:37,880 A dzisiaj mamy zamiar nadal korzystać z tych pomysłów, 12 00:00:37,880 --> 00:00:40,630 i biorąc je za bardzo przyznane, ale je przetłumaczyć 13 00:00:40,630 --> 00:00:44,220 na inny język znany jako C. Teraz C jest bardziej tradycyjny język. 14 00:00:44,220 --> 00:00:46,020 Jest to niższy poziom języka, jeśli będzie. 15 00:00:46,020 --> 00:00:47,300 >> To czysto tekstowe. 16 00:00:47,300 --> 00:00:49,910 I tak na pierwszy rzut oka, to wszystko będzie wyglądać dość zagadkowy 17 00:00:49,910 --> 00:00:51,430 jeśli nigdy wcześniej zaprogramowane wcześniej. 18 00:00:51,430 --> 00:00:53,530 My będziemy mieć średniki i nawiasów, 19 00:00:53,530 --> 00:00:55,150 i nawiasy klamrowe i więcej. 20 00:00:55,150 --> 00:00:57,240 Ale sobie sprawę, że nawet choć składnia jest 21 00:00:57,240 --> 00:01:00,600 o wyglądać trochę zaznajomiony dla większości z was zobaczyć przeszłość. 22 00:01:00,600 --> 00:01:03,220 I spróbuj zobaczyć pomysły które są rzeczywiście znane, 23 00:01:03,220 --> 00:01:06,750 bo tutaj w tym tygodniu jeden, co zaczniemy robić to porównanie, 24 00:01:06,750 --> 00:01:08,980 Początkowo Scratch kontra C. 25 00:01:08,980 --> 00:01:12,350 >> Tak więc, na przykład, przypominam, że kiedy realizowane nasze pierwsze programów 26 00:01:12,350 --> 00:01:16,220 Ostatnim razem, mieliśmy blok, który wyglądał trochę coś jak this-- kiedy 27 00:01:16,220 --> 00:01:19,990 zielona flaga kliknięciu, a następnie mieliśmy jeden lub więcej elementów układanki pod nią 28 00:01:19,990 --> 00:01:22,150 w tym przypadku, powiedzmy, hello world. 29 00:01:22,150 --> 00:01:24,870 Tak, rzeczywiście, na początku, gdy klikam że zielone flagi 30 00:01:24,870 --> 00:01:27,390 uruchomić mój program, więc mówić, są to 31 00:01:27,390 --> 00:01:29,520 bloki, który zostanie wykonany, lub uruchomić. 32 00:01:29,520 --> 00:01:32,230 A konkretnie, Scratch powiedział, hello, world. 33 00:01:32,230 --> 00:01:35,377 >> Teraz mogłem podano różne słowa tutaj. 34 00:01:35,377 --> 00:01:37,960 Ale zobaczymy, że rzeczywiście, wiele tych blocks-- i rzeczywiście, 35 00:01:37,960 --> 00:01:41,880 w C może być wiele functions-- parametryzowane lub dostosować 36 00:01:41,880 --> 00:01:43,150 robić różne rzeczy. 37 00:01:43,150 --> 00:01:45,520 W rzeczywistości, jeśli mamy w C chcesz przekonwertować, a teraz, 38 00:01:45,520 --> 00:01:47,567 Ten program Scratch z tym innym języku, 39 00:01:47,567 --> 00:01:49,650 mamy zamiar napisać Trochę coś takiego. 40 00:01:49,650 --> 00:01:52,540 >> To prawda, jest jakaś obca Składnia jest najbardziej prawdopodobny, int, 41 00:01:52,540 --> 00:01:54,380 i nawiasy i nieważne. 42 00:01:54,380 --> 00:01:57,740 Ale printf-- choć byś myślę, że to po prostu drukowania. 43 00:01:57,740 --> 00:02:00,120 Ale druku oznacza drukiem sformatowany, a my wkrótce. 44 00:02:00,120 --> 00:02:02,140 To dosłownie drukuje do ekranu niezależnie od 45 00:02:02,140 --> 00:02:05,990 znajduje się wewnątrz tych nawiasach, które Oczywiście w tym przypadku jest, hello world. 46 00:02:05,990 --> 00:02:09,290 >> Ale zauważysz jakiś inny Składnia, niektóre podwójnych cudzysłowów, 47 00:02:09,290 --> 00:02:11,890 że nawiasy na końcu, średnik i tym podobne. 48 00:02:11,890 --> 00:02:15,027 Więc jest nieco napowietrznych, by tak rzec, zarówno poznawczo 49 00:02:15,027 --> 00:02:17,860 i składniowo, że jedziemy Trzeba pamiętać, aby przed długi. 50 00:02:17,860 --> 00:02:20,720 Ale sobie sprawę, że w praktyce, to rozpocznie się wyskoczyć na ciebie. 51 00:02:20,720 --> 00:02:24,920 >> W rzeczywistości, skupmy się na tym, że jeden Funkcja specifically-- w tym przypadku, 52 00:02:24,920 --> 00:02:26,290 przywitaj świat. 53 00:02:26,290 --> 00:02:27,560 Tak mówią jest funkcja. 54 00:02:27,560 --> 00:02:31,320 Hello world jest jego parametrów, lub argumentów, jej dostosowywania. 55 00:02:31,320 --> 00:02:34,320 >> Oraz równoważność w C jest po prostu Będzie to jeden wiersz tutaj 56 00:02:34,320 --> 00:02:38,710 gdzie printf jest równoznaczne z, powiedzmy, podwójne cudzysłowie, cześć 57 00:02:38,710 --> 00:02:41,470 Świat jest równoważne, oczywiście, do tego, co jest w białym pudełku. 58 00:02:41,470 --> 00:02:45,680 I n backslash, choć trochę dziwnie nieobecny od zera, 59 00:02:45,680 --> 00:02:49,380 po prostu będzie miał wpływ będziemy zobacz w komputerze, jak mój Mac lub PC, 60 00:02:49,380 --> 00:02:51,660 po prostu przesuwając kursor do następnego wiersza. 61 00:02:51,660 --> 00:02:53,970 To tak, jakby uderzenie Enter na klawiaturze. 62 00:02:53,970 --> 00:02:55,580 >> Więc widzimy, że ponownie przed długo. 63 00:02:55,580 --> 00:02:58,640 Ale po pierwsze, rzućmy okiem na to Innym przykładem, w przypadku pętli. 64 00:02:58,640 --> 00:03:02,830 Mieliśmy ten ostatni raz na zawsze pętlę, która była seria puzzli 65 00:03:02,830 --> 00:03:05,490 że zrobił coś dosłownie forever-- w tym przypadku, 66 00:03:05,490 --> 00:03:08,360 powiedzieć, hello world, hello world, hello world, hello world. 67 00:03:08,360 --> 00:03:10,350 Więc to nieskończoną pętlę z projektem. 68 00:03:10,350 --> 00:03:14,580 >> W C, jeśli chcemy, aby zaimplementować to Ta sama idea, że ​​może po prostu to zrobić. 69 00:03:14,580 --> 00:03:19,570 Choć to prawda, printf komentarzy world-- teraz gdy tylko semantycznie, rodzaj 70 00:03:19,570 --> 00:03:23,090 kojarzy się pomysł robienia coś znowu, i znowu, i znowu, 71 00:03:23,090 --> 00:03:23,980 i na jak długo? 72 00:03:23,980 --> 00:03:27,990 Cóż, true-- Przypomnijmy, że prawda jest tylko jedna lub. 73 00:03:27,990 --> 00:03:30,660 >> I prawdą jest, oczywiście, zawsze prawdziwe. 74 00:03:30,660 --> 00:03:33,060 Więc to trochę bez znaczenia Oświadczenie to znaczy prawdziwe. 75 00:03:33,060 --> 00:03:36,890 Ale rzeczywiście, jest to celowe, bo jeśli prawdą jest to zawsze prawdziwe, 76 00:03:36,890 --> 00:03:40,850 niż gdy prawda tylko wskazuje, jeśli trochę pośrednio 77 00:03:40,850 --> 00:03:44,070 że następujących linii kodu Pomiędzy tymi nawiasy 78 00:03:44,070 --> 00:03:48,320 należy po prostu wykonać znowu, i znowu, i znowu, i nigdy nie przestanie. 79 00:03:48,320 --> 00:03:50,230 >> Ale jeśli chcesz, żeby Twój pętli do zatrzymania, jak my 80 00:03:50,230 --> 00:03:54,500 ostatnim razem z czymś tego, powtarzaj następujące 50 razy, 81 00:03:54,500 --> 00:03:57,700 w C możemy zrobić to samo z tym, co nazywany przez loop-- słowa kluczowego 82 00:03:57,700 --> 00:03:59,330 Nie będąc jednocześnie, ale. 83 00:03:59,330 --> 00:04:03,290 A potem mamy jakąś nową składnię tutaj z int i jest równa 0, to mniej niż 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 I będziemy wracać do tego. 86 00:04:05,430 --> 00:04:09,660 Ale to jest po prostu jak to będzie przetłumaczyć zestaw klocków Scratch 87 00:04:09,660 --> 00:04:13,079 zestawowi linii C kodu. 88 00:04:13,079 --> 00:04:14,450 >> Tymczasem pod uwagę zmienne. 89 00:04:14,450 --> 00:04:16,540 I rzeczywiście, po prostu zobaczyłem przed chwilą. 90 00:04:16,540 --> 00:04:21,220 A w przypadku podstaw, gdybyśmy chciał zadeklarować zmienną o nazwie I 91 00:04:21,220 --> 00:04:24,590 bo jest liczbą całkowitą, tylko numer, i chcemy, aby ustawić go do pewnej wartości, 92 00:04:24,590 --> 00:04:28,410 użylibyśmy tego pomarańczowo zablokować here-- ustawić i na 0. 93 00:04:28,410 --> 00:04:30,800 >> I zobaczymy dzisiaj i poza nią, tak jak w zeszłym tygodniu, 94 00:04:30,800 --> 00:04:33,850 programiści zrobić prawie zawsze zaczynały się od zera, naprawdę 95 00:04:33,850 --> 00:04:34,950 umownie. 96 00:04:34,950 --> 00:04:37,250 Ale także dlatego, że odbierze od Nasza dyskusja binarny, 97 00:04:37,250 --> 00:04:39,990 najmniejszą liczbę można reprezentować dowolną liczbą bitów 98 00:04:39,990 --> 00:04:41,640 jest po prostu będzie się 0. 99 00:04:41,640 --> 00:04:45,190 I tak będziemy zazwyczaj rozpoczynają inicjowanie nawet nasze zmienne 0. 100 00:04:45,190 --> 00:04:47,710 >> A w C zrobić to samo, mamy zamiar powiedzieć, int 101 00:04:47,710 --> 00:04:50,110 do liczby całkowitej, po prostu przez konwencję. 102 00:04:50,110 --> 00:04:53,390 Mógłbym nazywa ta zmienna cokolwiek chcę, tak jak w Scratch. 103 00:04:53,390 --> 00:04:57,770 I wtedy właśnie przypisuje równa 0 wartość 0 z prawej 104 00:04:57,770 --> 00:05:01,319 i umieszcza go w zmiennej lub Pojemnik na tam, po lewej stronie. 105 00:05:01,319 --> 00:05:04,360 A średnik jako i my see-- widzieliśmy kilka z tych already-- 106 00:05:04,360 --> 00:05:06,530 oznacza po prostu koniec myślenia. 107 00:05:06,530 --> 00:05:09,430 Przejdź do zrobienia czegoś innego na liniach, które następują. 108 00:05:09,430 --> 00:05:11,330 >> Teraz, co z wyrażeń logicznych? 109 00:05:11,330 --> 00:05:14,320 Przypomnijmy, że na początku, były to wyrażenia 110 00:05:14,320 --> 00:05:16,740 które są albo prawdziwe lub false-- pytania, 111 00:05:16,740 --> 00:05:18,910 Naprawdę, które są albo prawdziwe, albo fałszywe. 112 00:05:18,910 --> 00:05:21,960 Tak więc w przypadku podstaw, możemy zadać proste pytanie w ten sposób, 113 00:05:21,960 --> 00:05:24,586 jest i mniejsza niż 50? 114 00:05:24,586 --> 00:05:25,710 Tak I znów jest liczbą całkowitą. 115 00:05:25,710 --> 00:05:27,210 Może używamy go W programie na zarysowania 116 00:05:27,210 --> 00:05:29,310 śledzić wynik czy coś takiego. 117 00:05:29,310 --> 00:05:33,810 Więc ta składnia tu w Scratch po prostu oznacza, że ​​jest mniej niż 50? 118 00:05:33,810 --> 00:05:37,330 Cóż, na szczęście, coś jest Prosty w C. I przetłumaczyć, 119 00:05:37,330 --> 00:05:41,780 to byłoby po prostu powiedzieć, że mniej niż 50, za pomocą klucza znanego 120 00:05:41,780 --> 00:05:42,850 na klawiaturze. 121 00:05:42,850 --> 00:05:45,141 >> Tymczasem, jeśli chcesz powiedzieć coś bardziej ogólnego, 122 00:05:45,141 --> 00:05:49,890 jak dobrze, to x mniej niż Y gdzie każdy X i Y są takie same zmienne? 123 00:05:49,890 --> 00:05:52,280 Możemy zrobić to samo w C, tak długo jak mamy 124 00:05:52,280 --> 00:05:53,942 stworzył już tych zmiennych. 125 00:05:53,942 --> 00:05:55,650 I zobaczymy jak zrobić niebawem. 126 00:05:55,650 --> 00:05:58,590 Chcemy po prostu powiedzieć x mniejsze od y. 127 00:05:58,590 --> 00:06:00,530 >> Więc zaczynamy zobaczyć kilka podobieństw. 128 00:06:00,530 --> 00:06:03,490 I tych ludzi, którzy dokonali Scratch były na pewno 129 00:06:03,490 --> 00:06:05,250 inspirowane przez niektóre z tych podstawowych pojęć. 130 00:06:05,250 --> 00:06:10,350 I zobaczysz tego rodzaju Składnia w wielu languages-- 131 00:06:10,350 --> 00:06:12,160 nie tylko podstaw, nie tylko C, ale Python, 132 00:06:12,160 --> 00:06:14,790 i JavaScript, a inne języki martwych. 133 00:06:14,790 --> 00:06:18,270 >> Rozważmy inny konstrukt z C, pojęcie stanu, 134 00:06:18,270 --> 00:06:20,370 robi coś warunkowo. 135 00:06:20,370 --> 00:06:22,720 Jeśli coś jest prawdziwe, to zrobić. 136 00:06:22,720 --> 00:06:24,457 Jeśli coś innego nie jest prawdziwe, to zrobić. 137 00:06:24,457 --> 00:06:27,040 To coś w rodzaju programowania odpowiednikiem rozwidleniu dróg. 138 00:06:27,040 --> 00:06:29,730 Może to dwukierunkowa widelec, trójdrożny widelec, lub więcej. 139 00:06:29,730 --> 00:06:32,800 A w zera, możemy mieć widziałem coś takiego. 140 00:06:32,800 --> 00:06:34,010 >> Więc ten jeden jest duży. 141 00:06:34,010 --> 00:06:36,750 Ale rozważyć względne Prostota logiki. 142 00:06:36,750 --> 00:06:44,010 Jeśli x jest mniejsze niż Y, to znaczy x jest mniejsza niż Y, w przeciwnym razie, jeśli x jest większa od y, 143 00:06:44,010 --> 00:06:46,230 to znaczy x jest większe niż y. 144 00:06:46,230 --> 00:06:48,300 A potem, logicznie, jeśli myślisz powrotem do zera 145 00:06:48,300 --> 00:06:52,610 lub po prostu własne ludzka intuicja, oraz, jeśli X nie jest większa od y, a X 146 00:06:52,610 --> 00:06:57,000 wynosi nie mniej niż Y, to oczywiście x ma być równa r. 147 00:06:57,000 --> 00:06:59,690 Więc w tym przypadku, poprzez zagnieżdżanie te bloki podstaw, 148 00:06:59,690 --> 00:07:02,580 możemy osiągnąć trzy Sposób widelec w drodze? 149 00:07:02,580 --> 00:07:04,980 >> Tymczasem, jeśli chcemy zrobić w C, to prawdopodobnie 150 00:07:04,980 --> 00:07:08,420 wygląda trochę simpler-- przynajmniej gdy pojawi się zapoznać ze składnią. 151 00:07:08,420 --> 00:07:12,050 Jeśli x jest mniejsze niż Y, printf x jest mniejsze niż y. 152 00:07:12,050 --> 00:07:16,140 Inaczej, jeśli x jest większa od y, printf x jest większe niż y. 153 00:07:16,140 --> 00:07:21,210 Inny printf x jest równe y-- i znowu z tymi backslash kończy się tuż 154 00:07:21,210 --> 00:07:24,160 dla tych nowych linii tak, że jeśli faktycznie prowadził tego rodzaju programu 155 00:07:24,160 --> 00:07:25,940 byłoby to po prostu przenieść kursor ostatecznie 156 00:07:25,940 --> 00:07:28,100 do następnego wiersza ekranu. 157 00:07:28,100 --> 00:07:31,270 >> Teraz, w międzyczasie miał inne Scratch Bardziej zaawansowane funkcje, tylko 158 00:07:31,270 --> 00:07:34,320 z których niektóre będziemy początkowo poruszać się w świecie C 159 00:07:34,320 --> 00:07:37,010 I jeden z nich był nazywa się lista w Scratch. 160 00:07:37,010 --> 00:07:39,100 A ten był szczególny typ zmiennej 161 00:07:39,100 --> 00:07:42,840 pozwalał na przechowywanie wielu rzeczy w jego plecy, do tyłu, do tyłu, do tyłu. 162 00:07:42,840 --> 00:07:45,540 >> W ° C, nie ma Wykazy, per se, ale coś 163 00:07:45,540 --> 00:07:48,090 które są bardziej ogólnie nazywane tablice, chociaż będziemy 164 00:07:48,090 --> 00:07:50,590 wrócić później w tym semestrze aby patrząc na coś 165 00:07:50,590 --> 00:07:52,780 nazywa listę, czy naprawdę połączonej listy. 166 00:07:52,780 --> 00:07:55,510 Ale na razie najbliżej równoważne w C dla nas 167 00:07:55,510 --> 00:07:57,345 będzie coś zwana tablicą. 168 00:07:57,345 --> 00:07:59,740 A tablica jest po prostu Szczególnym rodzajem zmiennej 169 00:07:59,740 --> 00:08:03,160 która pozwala na przechowywanie danych wstecz, do tyłu, do tyłu, do tyłu. 170 00:08:03,160 --> 00:08:05,840 >> I rzeczywiście, w Scratch, jeśli chcemy, aby uzyskać dostęp 171 00:08:05,840 --> 00:08:09,030 pierwszy element tablicy lub list-- i mam zamiar to nazwać, 172 00:08:09,030 --> 00:08:13,600 Umownie argv argument wektor, ale o tym wkrótce. 173 00:08:13,600 --> 00:08:17,090 Jeśli chcę, aby dostać się do pierwszego elementu ARGV, w świecie Scratch 174 00:08:17,090 --> 00:08:20,930 faktycznie zrobić typowo rozpocząć liczenie od 1. 175 00:08:20,930 --> 00:08:22,850 >> I tak mógłbym dostać punkt 1 argv. 176 00:08:22,850 --> 00:08:26,310 To, jak realizowane MIT pojęcie list. 177 00:08:26,310 --> 00:08:29,860 Ale w C, zamierzam prościej po prostu powiedzieć, argv, 178 00:08:29,860 --> 00:08:32,758 co znowu jest nazwa mojego list-- lub być jasne, tablicą. 179 00:08:32,758 --> 00:08:34,549 A jeśli chcę pierwszy Elementy, jadę 180 00:08:34,549 --> 00:08:37,890 używać nawiasów kwadratowych, które Cię nie może być używany w klawiaturze. 181 00:08:37,890 --> 00:08:40,150 >> Ale 0 oznacza po prostu, daj mi pierwszego. 182 00:08:40,150 --> 00:08:42,160 Tak przy okazji, jak z upływem czasu, jedziemy 183 00:08:42,160 --> 00:08:44,570 aby rozpocząć, aby zobaczyć te dychotomii między Scratch i C, 184 00:08:44,570 --> 00:08:46,070 przy czym Scratch wykorzystuje jeden. 185 00:08:46,070 --> 00:08:47,670 My w C stosować 0 tutaj. 186 00:08:47,670 --> 00:08:49,420 Ale będziesz szybko zobaczyć po zrozumieniu 187 00:08:49,420 --> 00:08:52,920 fundamenty każdego języka, to te rzeczy zaczynają się bardziej 188 00:08:52,920 --> 00:08:56,860 zaznajomieni poprzez praktykę i praktyki. 189 00:08:56,860 --> 00:08:59,700 >> Więc niech spojrzy teraz w programie. 190 00:08:59,700 --> 00:09:04,031 Tutaj jest pierwszy w naszym C Kod źródłowy dla kompletnych programów. 191 00:09:04,031 --> 00:09:06,280 A program jedziemy oferować odpłatnie 192 00:09:06,280 --> 00:09:09,340 to taka, która jest równoważna do tego wcześniejszego kawałka Scratch. 193 00:09:09,340 --> 00:09:13,210 >> Więc tutaj mamy co prawdopodobnie najprostszy program w C 194 00:09:13,210 --> 00:09:15,410 można napisać, że rzeczywiście coś robi. 195 00:09:15,410 --> 00:09:18,250 Teraz przyjrzymy przeszłości, Na razie jest to, 196 00:09:18,250 --> 00:09:21,190 średnia io.h, a te kąt Wsporniki i int, i nieważne, 197 00:09:21,190 --> 00:09:22,840 i kręcone, szelki i tym podobne. 198 00:09:22,840 --> 00:09:25,390 >> I niech po prostu skupić się na co, przynajmniej intuicyjnie, 199 00:09:25,390 --> 00:09:26,860 może wyskoczyć na ciebie już. 200 00:09:26,860 --> 00:09:30,300 W rzeczywistości głównym, nie wiem muszą wiedzieć, co to jest, 201 00:09:30,300 --> 00:09:34,580 ale podobnie jak Scratch, że kiedy miał zielona flaga kliknięciu kawałek układanki, 202 00:09:34,580 --> 00:09:39,070 tak nie C jako język programowania mają główny fragment kodu, który 203 00:09:39,070 --> 00:09:43,380 pobiera wykonywane domyślnie. I rzeczywiście, Jest to dosłownie będzie zwany głównym. 204 00:09:43,380 --> 00:09:44,720 >> Tak więc głównym jest funkcją. 205 00:09:44,720 --> 00:09:48,720 I jest to specjalna funkcja, która istnieje w C, który po uruchomieniu programu, 206 00:09:48,720 --> 00:09:52,720 jest głównym, który pobiera prowadzony przez zaniedbanie. W świecie Scratch, 207 00:09:52,720 --> 00:09:56,970 było zwykle, gdy zielona flaga kliknął że dostałem uruchamiany domyślnie. 208 00:09:56,970 --> 00:10:01,130 >> Tymczasem, widzieliśmy to już wcześniej, printf lub wydrukować sformatowane, to 209 00:10:01,130 --> 00:10:05,620 będzie to funkcja, która pochodzi z C, wraz z całą masę innych, 210 00:10:05,620 --> 00:10:10,140 że będzie od czasu i czasu I znów, w celu konkretnie 211 00:10:10,140 --> 00:10:12,450 jak sama nazwa wskazuje, coś wydrukować. 212 00:10:12,450 --> 00:10:13,500 Co chcemy drukować? 213 00:10:13,500 --> 00:10:15,770 Cóż, zobaczymy, że znakami załączając 214 00:10:15,770 --> 00:10:18,680 jak these-- Hello World, backslash n w cudzysłów, 215 00:10:18,680 --> 00:10:23,040 możemy powiedzieć dokładnie printf Co do wydrukowania na ekranie. 216 00:10:23,040 --> 00:10:26,430 >> Ale aby to zrobić że niestety 217 00:10:26,430 --> 00:10:30,010 trzeba wziąć coś, co jest tajemnicze już do nas ludzi, 218 00:10:30,010 --> 00:10:34,510 ale przynajmniej jest nieco readable-- ostre obejmują standardowe io.h, int, 219 00:10:34,510 --> 00:10:39,340 Głównym, nieważne, printf, wszystkie magiczne inkantacje właśnie zobaczyłem na ekranie. 220 00:10:39,340 --> 00:10:42,470 Ale tak naprawdę trzeba przejść dalej Arcane nadal. 221 00:10:42,470 --> 00:10:47,140 Najpierw musimy przetłumaczyć kod że piszemy do kodu maszynowego. 222 00:10:47,140 --> 00:10:51,370 I przypomnieć, że z ostatniego tygodnia maszyn, przynajmniej te znamy tutaj 223 00:10:51,370 --> 00:10:54,450 Na koniec dnia, tylko zrozumieć zer i jedynek. 224 00:10:54,450 --> 00:10:58,100 >> I mój Boże, jeśli mieliśmy napisać nich zer i jedynek faktycznie programem, 225 00:10:58,100 --> 00:11:01,260 że będzie bardzo, bardzo szybko trochę zabawy z niczego. 226 00:11:01,260 --> 00:11:05,150 Ale okazuje się, za ostatnim tygodniu, że te schematy zer i jedynek 227 00:11:05,150 --> 00:11:06,400 po prostu mają specjalne znaczenie. 228 00:11:06,400 --> 00:11:08,500 W pewnych kontekstach, mogą one oznaczają cyfry. 229 00:11:08,500 --> 00:11:11,840 >> W niektórych sytuacjach, mogą oznaczać, Litery lub kolory, lub dowolną liczbę 230 00:11:11,840 --> 00:11:14,710 innych abstrakcji tam po. 231 00:11:14,710 --> 00:11:18,450 Ale tak jak komputer ma CPU, Central Processing Unit 232 00:11:18,450 --> 00:11:20,390 lub mózgi wewnątrz komputera. 233 00:11:20,390 --> 00:11:22,240 Zazwyczaj Intel w środku, bo to 234 00:11:22,240 --> 00:11:24,900 jedna z największych firm sprawia, że ​​procesory do komputerów. 235 00:11:24,900 --> 00:11:28,910 >> Cóż, procesory Intel i inni po prostu postanowiliśmy z góry 236 00:11:28,910 --> 00:11:33,970 że pewne wzorce i zer te oznaczają konkretne rzeczy. 237 00:11:33,970 --> 00:11:37,040 Pewne schematy zer i jedynek będzie oznaczać, drukuj na ekranie, 238 00:11:37,040 --> 00:11:39,710 lub dodać te dwie liczby, lub odjąć te dwie liczby, 239 00:11:39,710 --> 00:11:43,310 lub przenieść ten kawałek danych z Pamięć mojego komputera tutaj, 240 00:11:43,310 --> 00:11:47,870 lub dowolną liczbę innych bardzo niskim poziomie ale ostatecznie przydatne operacje. 241 00:11:47,870 --> 00:11:53,022 Ale, na szczęście, my, ludzie, nie będziemy aby wiedzieć ten poziom szczegółowości. 242 00:11:53,022 --> 00:11:56,230 Rzeczywiście, tak jak ostatnim razem, gdzie wydobywane znowu, i znowu, i znowu, 243 00:11:56,230 --> 00:11:58,930 budynek z bardzo niskim poziomie prymitywy jak zer i jedynek 244 00:11:58,930 --> 00:12:01,160 wyższym poziomie pojęć jak cyfr i liter, 245 00:12:01,160 --> 00:12:04,330 i kolory, i więcej, Możemy więc jako programistów 246 00:12:04,330 --> 00:12:07,080 stanąć na ramionach inni, którzy przybyli przed nami 247 00:12:07,080 --> 00:12:11,260 i korzystać z oprogramowania, które nawzajem osób pisało wcześniej us-- 248 00:12:11,260 --> 00:12:14,340 czyli programy nazywane kompilatory. 249 00:12:14,340 --> 00:12:17,770 >> C jest językiem, który zazwyczaj jest skompilowany, 250 00:12:17,770 --> 00:12:22,130 co oznacza, przeliczone z Kod źródłowy do kodu maszynowego. 251 00:12:22,130 --> 00:12:25,230 W szczególności oznacza to, co jest to, że jeśli masz źródło 252 00:12:25,230 --> 00:12:29,530 kod, który sam pisać, a wkrótce będzie za chwilę na ekranie, 253 00:12:29,530 --> 00:12:33,140 i chcesz go przekonwertować ostatecznie maszynie code-- 254 00:12:33,140 --> 00:12:37,100 te zer i jedynek, które tylko komputer Mac lub komputer 255 00:12:37,100 --> 00:12:41,230 understands-- masz pierwszy RSS tego kodu źródłowego jako 256 00:12:41,230 --> 00:12:46,340 Wejście do specjalnego Program nazywa się kompilator, 257 00:12:46,340 --> 00:12:48,974 Sygnał wyjściowy z których ujrzy to kod maszynowy. 258 00:12:48,974 --> 00:12:51,890 I rzeczywiście, ostatni raz rozmawialiśmy o naprawdę, na koniec dnia 259 00:12:51,890 --> 00:12:52,610 rozwiązanie problemu. 260 00:12:52,610 --> 00:12:53,360 Musicie wejść. 261 00:12:53,360 --> 00:12:54,318 I masz wyjścia. 262 00:12:54,318 --> 00:12:56,560 A masz jakieś algorytmu w środku. 263 00:12:56,560 --> 00:12:59,830 >> Algorytmy mogą z pewnością realizowane w oprogramowaniu 264 00:12:59,830 --> 00:13:02,900 jak widzieliśmy w ostatnim tygodniu pseudokod a jak zobaczymy w rzeczywistym kodzie 265 00:13:02,900 --> 00:13:03,490 w tym tygodniu. 266 00:13:03,490 --> 00:13:06,430 I tak naprawdę tylko kompilator posiada zestaw algorytmów wewnątrz 267 00:13:06,430 --> 00:13:10,060 o tym, że wie, jak konwersja specjalnych słów kluczowych, 268 00:13:10,060 --> 00:13:12,180 jak główny i printf, i inni, że po prostu 269 00:13:12,180 --> 00:13:17,620 widział do wzorców i zer Te, które Intel Inside i inne procesory 270 00:13:17,620 --> 00:13:20,020 rzeczywiście rozumie. 271 00:13:20,020 --> 00:13:22,460 Więc w jaki sposób to zrobić? 272 00:13:22,460 --> 00:13:24,470 Gdzie możemy uzyskać kompilator? 273 00:13:24,470 --> 00:13:26,400 >> Większość z nas posiada Mac lub PC. 274 00:13:26,400 --> 00:13:29,152 A ty z systemem Mac OS lub Windows lub Linux lub Solaris 275 00:13:29,152 --> 00:13:30,860 lub dowolne inne system operacyjny. 276 00:13:30,860 --> 00:13:32,568 I rzeczywiście, mogliśmy wyjść na internecie 277 00:13:32,568 --> 00:13:35,710 i pobrać kompilator na komputerze Mac lub PC 278 00:13:35,710 --> 00:13:37,360 dla danego systemu operacyjnego. 279 00:13:37,360 --> 00:13:39,617 Ale wszyscy się na różnych stron, że tak powiem. 280 00:13:39,617 --> 00:13:41,450 Musielibyśmy nieznacznie różnych konfiguracjach. 281 00:13:41,450 --> 00:13:43,210 I rzeczy nie będzie działać tak samo. 282 00:13:43,210 --> 00:13:45,280 I rzeczywiście, w dzisiejszych czasach wielu z nas nie używać 283 00:13:45,280 --> 00:13:47,516 oprogramowanie, które działa tylko na naszych laptopów. 284 00:13:47,516 --> 00:13:49,390 Zamiast tego używamy coś jak przeglądarka, która 285 00:13:49,390 --> 00:13:52,930 pozwala nam na dostęp internetowy Aplikacje w chmurze. 286 00:13:52,930 --> 00:13:55,630 A jeszcze w tym semestrze, będziemy robić dokładnie to. 287 00:13:55,630 --> 00:13:59,660 Będziemy pisać aplikacje lub oprogramowania za pomocą code-- nie C, 288 00:13:59,660 --> 00:14:02,860 ale inne języki, takie jak Python i JavaScript-- działające w chmurze. 289 00:14:02,860 --> 00:14:05,860 >> A do tego, my sami w trakcie semestru 290 00:14:05,860 --> 00:14:11,890 faktycznie użyć oparte na chmurze środowisku znany jako CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 To programowania oparty na sieci Web środowiska, lub zintegrowany rozwój 292 00:14:16,030 --> 00:14:20,610 środowisko, IDE, który jest zbudowany na szczycie niektórych Oprogramowanie open source o nazwie Cloud 9. 293 00:14:20,610 --> 00:14:22,966 I zrobiliśmy niektóre pedagogiczne uproszczeń do niego 294 00:14:22,966 --> 00:14:25,840 tak, aby ukryć pewne cechy pierwsze tygodnie, że nie ma potrzeby, 295 00:14:25,840 --> 00:14:27,770 po którym można ujawniają je i robić najbardziej 296 00:14:27,770 --> 00:14:29,400 cokolwiek chcesz z otoczeniem. 297 00:14:29,400 --> 00:14:32,470 >> I to pozwala nam także, aby pre-instalacji określonego oprogramowania. 298 00:14:32,470 --> 00:14:35,330 Rzeczy takie jak tzw CS50 biblioteki, które będziemy wkrótce 299 00:14:35,330 --> 00:14:39,210 dostarcza nam w C z niektórymi Dodatkowa funkcjonalność. 300 00:14:39,210 --> 00:14:44,392 Więc jeśli pójdziesz do ostatecznie CS50.io, zostaniesz poproszony o zalogowanie się, 301 00:14:44,392 --> 00:14:46,350 i raz zrobić i stworzyć Załóż konto za darmo, 302 00:14:46,350 --> 00:14:52,150 będzie można uzyskać dostęp do Środowisko, który wygląda zupełnie jak ta. 303 00:14:52,150 --> 00:14:53,760 >> Teraz, to jest w trybie domyślnym. 304 00:14:53,760 --> 00:14:55,650 Wszystko jest ładne i jasne na ekranie. 305 00:14:55,650 --> 00:14:57,941 Wielu z nas ma zwyczaj pracuje na kawałku CS50, który jest 306 00:14:57,941 --> 00:14:59,150 dość późno w nocy. 307 00:14:59,150 --> 00:15:02,400 I tak niektórzy z was mogą preferować przekształcić go w trybie nocnym, że tak powiem. 308 00:15:02,400 --> 00:15:05,550 >> Ale, ostatecznie, co masz żeby zobaczyć ciągu CS50 IDE 309 00:15:05,550 --> 00:15:08,340 to trzy odrębne areas-- obszar, na lewo, gdzie 310 00:15:08,340 --> 00:15:12,604 Twoje pliki będą w Chmura, obszar w prawym górnym rogu 311 00:15:12,604 --> 00:15:14,270 gdzie Twój kod będzie można edytować. 312 00:15:14,270 --> 00:15:16,650 Będziesz w stanie otworzyć Poszczególne zakładki dla każdego programu 313 00:15:16,650 --> 00:15:19,670 że piszesz w tym semestrze wewnątrz tego prawym górnym rogu. 314 00:15:19,670 --> 00:15:23,070 I wtedy najbardziej arcanely, a jednak mocno, 315 00:15:23,070 --> 00:15:26,610 będzie to coś u Dno znany jako oknie terminala. 316 00:15:26,610 --> 00:15:29,450 >> To jest stara szkoła Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 lub CLI, który pozwala do wykonywania poleceń 318 00:15:32,240 --> 00:15:35,260 na computer-- w tym wypadku komputer w cloud-- 319 00:15:35,260 --> 00:15:39,090 robić takie rzeczy jak skompilować kod z kodu źródłowego do kodu maszynowego, 320 00:15:39,090 --> 00:15:43,600 do uruchamiania programów lub na rozpoczęcie serwer WWW lub w celu uzyskania dostępu do bazy danych, 321 00:15:43,600 --> 00:15:47,454 i wielu innych technik że zaczniemy używać niedługo. 322 00:15:47,454 --> 00:15:49,370 Ale żeby się tam dostać, jesteśmy będzie rzeczywiście 323 00:15:49,370 --> 00:15:51,240 przejść do trybu online i zacząć grać. 324 00:15:51,240 --> 00:15:54,399 I to zrobić, niech pierwszy zacząć majstrować przy głównym, 325 00:15:54,399 --> 00:15:55,940 i zapisu główną część programu. 326 00:15:55,940 --> 00:15:59,170 I użyjmy tej funkcji printf, którego użyliśmy wcześniej, 327 00:15:59,170 --> 00:16:01,050 po prostu coś powiedzieć. 328 00:16:01,050 --> 00:16:04,910 >> Więc tutaj jestem już wewnątrz CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Mam zalogowany wyprzedzeniem. 330 00:16:05,930 --> 00:16:07,360 I pełne przesiewa się przez okno. 331 00:16:07,360 --> 00:16:09,670 I tak, w końcu, ty też w nadchodzących problemów 332 00:16:09,670 --> 00:16:12,960 pójdą podobne kroki, które dostarczy dokumentację online. 333 00:16:12,960 --> 00:16:16,360 Więc nie trzeba się martwić chłonąc każdy mały krok technicznej 334 00:16:16,360 --> 00:16:17,730 że ja tu dzisiaj. 335 00:16:17,730 --> 00:16:19,222 >> Ale dostaniesz ekran takiego. 336 00:16:19,222 --> 00:16:20,430 Zdarza mi się być w trybie nocnym. 337 00:16:20,430 --> 00:16:22,944 I można rozjaśnić wszystko przez wyłączenie trybu nocnego. 338 00:16:22,944 --> 00:16:24,860 I na koniec dzień, idziesz, aby zobaczyć 339 00:16:24,860 --> 00:16:30,090 Te trzy główne areas-- pliku Przeglądarka w lewo, klapki kodu w górę w górę, 340 00:16:30,090 --> 00:16:32,430 a okno terminal na dole. 341 00:16:32,430 --> 00:16:34,890 >> Pozwólcie mi iść do przodu i napisać swój pierwszy program. 342 00:16:34,890 --> 00:16:42,300 Idę zapobiegawczo przejść do pliku, Zapisz, a następnie zapisz plik jako hello.c moje. 343 00:16:42,300 --> 00:16:46,850 Rzeczywiście, zgodnie z przyjętą konwencją, każda mamy programu napisać, że jest napisany w języku C 344 00:16:46,850 --> 00:16:49,739 powinien być nazwany coś kropka c, zgodnie z przyjętą konwencją. 345 00:16:49,739 --> 00:16:53,030 Więc mam zamiar wymienić go hello.c, ponieważ Chcę tylko powiedzieć cześć świata. 346 00:16:53,030 --> 00:16:54,820 Teraz mam zamiar powiększyć się i kliknij Zapisz. 347 00:16:54,820 --> 00:16:58,180 I wszystko, co mam tu teraz jest zakładka w którym mogę zacząć pisać kod. 348 00:16:58,180 --> 00:16:59,490 >> To nie będzie skompilować. 349 00:16:59,490 --> 00:17:00,300 Oznacza to nic. 350 00:17:00,300 --> 00:17:02,750 A więc nawet jeśli przekształcone to zer i jedynek, 351 00:17:02,750 --> 00:17:05,390 CPU będzie miał żadnego Pomysł, co się dzieje dookoła. 352 00:17:05,390 --> 00:17:14,170 Ale jeśli piszę wiersze, które pasują do siebie z conventions-- C to C, w 353 00:17:14,170 --> 00:17:20,150 ponownie, tym language-- ze składnią jak to printf komentarzy world-- i mam 354 00:17:20,150 --> 00:17:22,210 zdobyć komfortowo robi to w miarę upływu czasu. 355 00:17:22,210 --> 00:17:24,510 Więc nie sądzę, zrobiłem wszelkie błędy typograficzne. 356 00:17:24,510 --> 00:17:27,910 >> Ale zawsze, pierwszy Czas to zrobisz, będziesz. 357 00:17:27,910 --> 00:17:31,090 A co mam zrobić, może bardzo również nie działać dla ciebie za pierwszym razem. 358 00:17:31,090 --> 00:17:33,610 I to jest zupełnie OK, bo teraz jesteś 359 00:17:33,610 --> 00:17:37,662 Może po prostu zobaczyć całe mnóstwo nowości, ale z biegiem czasu, gdy pojawi się znajome 360 00:17:37,662 --> 00:17:39,870 z tego środowiska, a Ten język, a inni, 361 00:17:39,870 --> 00:17:42,370 zaczniesz widzieć rzeczy, które albo są poprawne lub niepoprawne. 362 00:17:42,370 --> 00:17:44,369 >> I to jest to, co Fellows nauczania i przebieg 363 00:17:44,369 --> 00:17:48,780 asystenci uzyskać tak dobry w miarę upływu czasu, jest plamienia błędów lub błędów w kodzie. 364 00:17:48,780 --> 00:17:52,110 Ale twierdzą, że nie Brak błędów w tym kodzie. 365 00:17:52,110 --> 00:17:53,990 Więc teraz chcę, aby uruchomić ten program. 366 00:17:53,990 --> 00:17:57,440 >> Teraz na własnym komputerze Mac lub PC, jestem w nawyk podwójnego klikania ikony 367 00:17:57,440 --> 00:17:59,350 gdy chcę uruchomić jakiś program. 368 00:17:59,350 --> 00:18:01,080 Ale to nie jest tutaj model. 369 00:18:01,080 --> 00:18:04,570 W tym środowisku, które jest CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Używamy operacyjną System o nazwie Linux. 371 00:18:07,192 --> 00:18:09,900 Linux jest przypominający innego system operacyjny, powszechnie znane 372 00:18:09,900 --> 00:18:10,850 jak Unix. 373 00:18:10,850 --> 00:18:16,340 I Linux jest szczególnie znana o Command Line Środowisko, CLI. 374 00:18:16,340 --> 00:18:20,070 Teraz używamy swoistego Smak Linux o nazwie Ubuntu. 375 00:18:20,070 --> 00:18:22,770 A to po prostu Ubuntu pewna wersja Linux. 376 00:18:22,770 --> 00:18:27,900 >> Ale te Linuksa te dni faktycznie pochodzą z graficznym interfejsem użytkownika. 377 00:18:27,900 --> 00:18:30,360 A ten, który się zdarzyć być tutaj używając jest oparty na sieci Web. 378 00:18:30,360 --> 00:18:32,735 Tak to może wyglądać nawet Trochę różni się od czegoś 379 00:18:32,735 --> 00:18:35,310 sam może mieć widział lub uruchomić w przeszłości. 380 00:18:35,310 --> 00:18:37,910 >> Więc mam zamiar iść do przodu teraz i wykonaj następujące czynności. 381 00:18:37,910 --> 00:18:40,950 Uratowałem ten plik jako hello.c. 382 00:18:40,950 --> 00:18:47,350 Mam zamiar iść do przodu i Typ clanghello.c Więc Clang 383 00:18:47,350 --> 00:18:49,850 dla języka C jest kompilator. 384 00:18:49,850 --> 00:18:51,952 To wstępnie zainstalowane w CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 I można pobrać i absolutnie zainstalować to na swoim własnym komputerze Mac lub PC. 386 00:18:54,910 --> 00:18:57,910 >> Ale znowu, to nie miałoby wszystkich wstępna konfiguracja odbywa się za Ciebie. 387 00:18:57,910 --> 00:19:00,940 Więc teraz, jestem tylko zamierza uruchomić clanghello.c. 388 00:19:00,940 --> 00:19:03,240 A teraz zauważyć tej składni Tutaj w końcu 389 00:19:03,240 --> 00:19:06,930 sobie sprawę, oznacza to, że jestem w folder lub katalog o nazwie Workspace. 390 00:19:06,930 --> 00:19:11,030 Ten znak dolara to tylko konwencja sensu wpisz swoje polecenia tutaj. 391 00:19:11,030 --> 00:19:14,560 >> To, co się nazywa szybka, wystarczy umownie jest znak dolara. 392 00:19:14,560 --> 00:19:19,130 A jeśli pójdę teraz do przodu, a następnie kliknij Enter, nic się nie stało. 393 00:19:19,130 --> 00:19:20,930 Ale to naprawdę dobra rzecz. 394 00:19:20,930 --> 00:19:23,650 Im mniej, co dzieje się na ekran, tym bardziej prawdopodobne 395 00:19:23,650 --> 00:19:26,710 Twój kod jest prawidłowe, przynajmniej składniowo. 396 00:19:26,710 --> 00:19:29,120 >> Więc jeśli chcę uruchomić to Program, co mam zrobić? 397 00:19:29,120 --> 00:19:33,770 Cóż, okazuje się, że Domyślna nazwa umownie 398 00:19:33,770 --> 00:19:38,854 programów, jeśli nie podasz nazwę dla programu jest po prostu a.out. 399 00:19:38,854 --> 00:19:41,270 I ta składnia też będziesz zapoznanie się z wcześniej długo. 400 00:19:41,270 --> 00:19:47,500 >> Dot slash po prostu oznacza, hej, CS50 IDE, uruchom program o nazwie a.out 401 00:19:47,500 --> 00:19:49,400 to w moim bieżącym katalogu. 402 00:19:49,400 --> 00:19:51,520 To kropka oznacza katalog bieżący. 403 00:19:51,520 --> 00:19:55,040 I zobaczymy, co inne takie sekwencje znaków oznacza niebawem. 404 00:19:55,040 --> 00:19:58,430 >> Więc zaczynamy, Enter, hello world. 405 00:19:58,430 --> 00:20:00,080 I można zauważyć, że to, co się stało? 406 00:20:00,080 --> 00:20:01,580 Nie tylko wydrukować Hello World. 407 00:20:01,580 --> 00:20:05,990 To również przeniósł kursor do następnego wiersza. 408 00:20:05,990 --> 00:20:07,160 >> I dlaczego to było? 409 00:20:07,160 --> 00:20:12,400 Jaki był kod, który pisaliśmy wcześniej który zapewnił, że kursor będzie 410 00:20:12,400 --> 00:20:14,882 przejdź do następnego wiersza? 411 00:20:14,882 --> 00:20:16,840 Zabawne około Komputer jest to tylko będzie 412 00:20:16,840 --> 00:20:18,570 robić dosłownie co powiedzieć to zrobić. 413 00:20:18,570 --> 00:20:26,050 >> Więc jeśli powiesz jej printf cześć, przecinek, przestrzeni, świata, w pobliżu cytat 414 00:20:26,050 --> 00:20:29,090 Jest to dosłownie tylko będzie wydrukować te znaki. 415 00:20:29,090 --> 00:20:31,980 Ale miałem ten szczególny charakter Na koniec przypominam, backslash n. 416 00:20:31,980 --> 00:20:34,230 I to właśnie zapewnił że charakter poszedł 417 00:20:34,230 --> 00:20:36,570 do następnego wiersza ekranu. 418 00:20:36,570 --> 00:20:38,097 >> W rzeczywistości, pozwól mi iść i to zrobić. 419 00:20:38,097 --> 00:20:39,430 Pozwólcie mi iść do przodu i usuwania tego produktu. 420 00:20:39,430 --> 00:20:41,180 Teraz zwróć uwagę, że góra moim ekranie nie ma 421 00:20:41,180 --> 00:20:42,890 trochę czerwona lampka zakładka wskazuje, 422 00:20:42,890 --> 00:20:45,047 hej, nie wcześniej zapisany plik. 423 00:20:45,047 --> 00:20:47,880 Więc mam zamiar iść do przodu z regulacją S lub S polecenie, zapisz plik. 424 00:20:47,880 --> 00:20:51,130 Teraz goes-- poszedł na moment-- zieleni. 425 00:20:51,130 --> 00:20:53,760 A teraz z powrotem do po prostu będąc bliski ikony. 426 00:20:53,760 --> 00:21:01,860 >> Jeśli teraz ponownie uruchomić clanghello.c, Enter, kropka ukośnik, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 zobaczysz, że nadal pracował. 428 00:21:04,110 --> 00:21:06,020 Ale to zapewne trochę buggy. 429 00:21:06,020 --> 00:21:08,714 Teraz, mój prompt-- roboczy, a następnie, że znak dolara, 430 00:21:08,714 --> 00:21:10,880 a następnie moja rzeczywista prompt-- jest w tej samej linii. 431 00:21:10,880 --> 00:21:14,540 Więc to na pewno estetyczny bug, nawet jeśli to naprawdę nie jest logiczny błąd. 432 00:21:14,540 --> 00:21:16,250 >> Więc mam zamiar cofnąć to, co właśnie zrobił. 433 00:21:16,250 --> 00:21:18,560 Idę powtórzona a.out. 434 00:21:18,560 --> 00:21:22,710 Zauważ Dodałem znak nowej linii do tyłu. 435 00:21:22,710 --> 00:21:24,280 Uratowałem plik. 436 00:21:24,280 --> 00:21:31,630 >> Więc mam zamiar ponownie uruchomić a.out, and-- Cholera, to błąd, błąd, co oznacza błąd. 437 00:21:31,630 --> 00:21:35,020 Więc błąd jest, że chociaż Dodałem ukośnik n tam, 438 00:21:35,020 --> 00:21:41,180 ponownie zapisane, ponownie uruchomiono program zachowanie było takie samo. 439 00:21:41,180 --> 00:21:42,640 Dlaczego miałoby to być? 440 00:21:42,640 --> 00:21:43,910 >> Brakuje mi krok, prawda? 441 00:21:43,910 --> 00:21:47,620 To kluczowy krok wcześniej było to, że masz to-- po zmianie kodu źródłowego, 442 00:21:47,620 --> 00:21:49,610 Okazuje się również uruchomić to przez kompilator 443 00:21:49,610 --> 00:21:51,102 znowu więc można dostać nowy kod maszynowy. 444 00:21:51,102 --> 00:21:52,810 I kod maszynowy, zera i jedynki, 445 00:21:52,810 --> 00:21:56,260 będą niemal identyczne, ale Nie tak doskonale, bo musimy, 446 00:21:56,260 --> 00:21:57,510 oczywiście, że nowa linia. 447 00:21:57,510 --> 00:22:02,640 >> Tak więc, aby rozwiązać ten problem, będę potrzebował ponownie uruchomić clanghello.c, wejść, kropka 448 00:22:02,640 --> 00:22:03,800 slash, a.out. 449 00:22:03,800 --> 00:22:08,402 A teraz, hello world is back gdzie mogę oczekiwać, że będzie. 450 00:22:08,402 --> 00:22:09,610 Więc to wszystko jest w porządku i dobrze. 451 00:22:09,610 --> 00:22:13,150 Ale a.out jest dość głupie nazwy dla Program, choć zdarza się, 452 00:22:13,150 --> 00:22:16,530 ze względów historycznych, The default-- czyli wyjść montażu. 453 00:22:16,530 --> 00:22:20,780 >> Ale pozwól mi iść dalej tutaj i to zrobić inaczej. 454 00:22:20,780 --> 00:22:24,760 Chcę mój program Hello World faktycznie nazwać cześć. 455 00:22:24,760 --> 00:22:28,320 Tak jakby to była ikona na moim pulpit, nie byłoby a.out. 456 00:22:28,320 --> 00:22:29,730 Byłoby to nazwać cześć. 457 00:22:29,730 --> 00:22:33,660 >> Tak więc, aby to zrobić, okazuje się, że Clang, podobnie jak wiele programów, 458 00:22:33,660 --> 00:22:37,980 obsługuje argumenty wiersza poleceń, lub flagi, albo przełączniki, 459 00:22:37,980 --> 00:22:39,600 który po prostu mieć wpływ na jego zachowanie. 460 00:22:39,600 --> 00:22:45,160 Konkretnie Clang obsługuje kreska O flaga, która następnie wykonuje drugie słowo. 461 00:22:45,160 --> 00:22:48,190 W tym przypadku, będę arbitralnie, ale rozsądnie, nazywają go przywitać. 462 00:22:48,190 --> 00:22:50,710 Ale mogę nazwać to coś Chcę, chyba a.out, które 463 00:22:50,710 --> 00:22:52,390 byłoby raczej poza punkt. 464 00:22:52,390 --> 00:22:55,640 >> A potem po prostu podać nazwę pliku chcę skompilować. 465 00:22:55,640 --> 00:22:59,190 Więc teraz, chociaż na początku komendy mam jeszcze brzękiem, 466 00:22:59,190 --> 00:23:01,410 pod koniec polecenia Nadal mam nazwę pliku, 467 00:23:01,410 --> 00:23:05,520 Mam teraz te wiersza poleceń argumenty, te flagi, które mówią, 468 00:23:05,520 --> 00:23:11,180 Och, przy okazji, wyjście-o, plik nazywa cześć, a nie domyślny a.out. 469 00:23:11,180 --> 00:23:13,810 >> Więc jeśli uderzę Wprowadź teraz, nic Wydaje się, że stało. 470 00:23:13,810 --> 00:23:17,900 A jednak teraz mogę zrobić dot ukośnik cześć. 471 00:23:17,900 --> 00:23:19,089 Więc to jest ten sam program. 472 00:23:19,089 --> 00:23:21,380 W zer i jedynek są identyczne pod koniec dnia. 473 00:23:21,380 --> 00:23:24,210 >> Ale są w dwóch inna files-- a.out, 474 00:23:24,210 --> 00:23:26,490 który jest pierwsza wersja i po prostu głupio nazwane, 475 00:23:26,490 --> 00:23:30,250 a teraz cześć, która jest znacznie bardziej przekonujące nazwę dla programu. 476 00:23:30,250 --> 00:23:33,195 Ale, szczerze mówiąc, nigdy nie jestem będziemy pamiętać, to znowu, 477 00:23:33,195 --> 00:23:34,070 i znowu, i znowu. 478 00:23:34,070 --> 00:23:36,411 I rzeczywiście, jak piszemy bardziej skomplikowane programy, 479 00:23:36,411 --> 00:23:38,160 polecenia mozesz będzie musiał napisać 480 00:23:38,160 --> 00:23:40,920 chce stać się nawet bardziej skomplikowane nadal. 481 00:23:40,920 --> 00:23:41,940 >> I tak się nie martwić. 482 00:23:41,940 --> 00:23:46,220 Okazuje się, że ludzie przed USA mają sobie sprawę, że zbyt 483 00:23:46,220 --> 00:23:47,530 miałem dokładnie ten sam problem. 484 00:23:47,530 --> 00:23:50,900 Oni też nie cieszą konieczności wpisać dość długie, tajemne poleceń, 485 00:23:50,900 --> 00:23:52,200 nie mówiąc już o nich pamiętać. 486 00:23:52,200 --> 00:23:56,070 I tak ludzie przed nami dokonały inne programy, które ułatwiają 487 00:23:56,070 --> 00:23:57,670 do kompilacji oprogramowania. 488 00:23:57,670 --> 00:24:01,609 >> I rzeczywiście, jedną z takich Program nazywa się wprowadzić. 489 00:24:01,609 --> 00:24:03,150 Więc mam zamiar iść do przodu i to zrobić. 490 00:24:03,150 --> 00:24:05,691 Zamierzam cofnąć wszystko, co tak jak w następujący sposób. 491 00:24:05,691 --> 00:24:07,690 Pozwól, typ LS. 492 00:24:07,690 --> 00:24:10,980 I można zauważyć trzy things-- a.out, a gwiazdą, witam 493 00:24:10,980 --> 00:24:12,810 i gwiazda i hello.c. 494 00:24:12,810 --> 00:24:14,730 Mamy nadzieję, że proporcja ta powinna być trochę intuicyjne, 495 00:24:14,730 --> 00:24:18,220 o ile wcześniej nie było nic w tym obszarze roboczym. 496 00:24:18,220 --> 00:24:21,240 Nie było nic, że miałem utworzony, dopóki nie zaczęliśmy klasę. 497 00:24:21,240 --> 00:24:22,840 >> I stworzył hello.c. 498 00:24:22,840 --> 00:24:24,544 Następnie opracowano go i nazwał go a.out. 499 00:24:24,544 --> 00:24:27,460 A potem kompilowany ponownie nieznacznie inaczej i nazwał go przywitać. 500 00:24:27,460 --> 00:24:32,830 Więc mam trzy pliki w tym katalogu, W tym folderze o nazwie roboczej. 501 00:24:32,830 --> 00:24:35,005 Teraz widzę, że dobrze gdybym pomniejszyć rzeczywistości. 502 00:24:35,005 --> 00:24:37,530 >> Gdybym tu i pomniejszyć patrzeć na tę górę prawą rękę 503 00:24:37,530 --> 00:24:39,940 rogu, jak obiecał lewa strony ekranu 504 00:24:39,940 --> 00:24:42,990 zawsze będzie pokazać co jest na koncie, co jest 505 00:24:42,990 --> 00:24:44,790 Wnętrze CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 I nie ma tam trzy pliki. 507 00:24:46,680 --> 00:24:49,070 >> Więc chcę pozbyć a.out i cześć. 508 00:24:49,070 --> 00:24:51,275 I jak może wyobrazić sobie intuicyjnie, ty 509 00:24:51,275 --> 00:24:53,400 może rodzaj sterowania kliknięcia lub kliknąć prawym przyciskiem myszy na ten temat. 510 00:24:53,400 --> 00:24:54,590 A to małe menu. 511 00:24:54,590 --> 00:24:57,170 Możesz pobrać plik, uruchom Opisz je przejrzeć, odświeżyć, zmienić nazwę, 512 00:24:57,170 --> 00:24:57,700 i co nie. 513 00:24:57,700 --> 00:25:00,260 >> A może po prostu usunąć i byłoby odejść. 514 00:25:00,260 --> 00:25:05,260 Ale zróbmy rzeczy z poleceniem Linia do tej pory tak się komfortowo 515 00:25:05,260 --> 00:25:07,010 z tym, i wykonaj następujące czynności. 516 00:25:07,010 --> 00:25:12,345 Mam zamiar iść do przodu i wyjąć a.out wpisując dosłownie rma.out. 517 00:25:12,345 --> 00:25:14,890 Okazuje się, polecenia dla usuwanie lub usuwanie coś, 518 00:25:14,890 --> 00:25:16,280 nie usuwać lub usunąć. 519 00:25:16,280 --> 00:25:21,260 >> To bardziej zwięźle RM, tylko zapisać Ci kilka klawiszy i naciśnij Enter. 520 00:25:21,260 --> 00:25:24,707 Teraz mamy zamiar być nieco tajemniczo usunięcia regularne a.out pliku. 521 00:25:24,707 --> 00:25:27,040 I naprawdę nie wiem, co za nieregularne plik byłby jeszcze. 522 00:25:27,040 --> 00:25:28,660 Ale chcę, aby ją usunąć. 523 00:25:28,660 --> 00:25:30,150 >> Więc zamierzam typu Y na tak. 524 00:25:30,150 --> 00:25:31,940 Albo mogę wpisać go i naciśnij Enter. 525 00:25:31,940 --> 00:25:33,440 I znowu, nic się nie dzieje. 526 00:25:33,440 --> 00:25:35,840 Ale to, na ogół, jest dobrą rzeczą. 527 00:25:35,840 --> 00:25:40,490 >> Gdybym typ LS tym razem, co mam widzieć? 528 00:25:40,490 --> 00:25:44,930 Mamy nadzieję, że po prostu przywitać i hello.c. 529 00:25:44,930 --> 00:25:47,286 Teraz, jak na bok, będziesz zauważy ten gwiazda, gwiazdka, 530 00:25:47,286 --> 00:25:48,660 to na koniec moich programów. 531 00:25:48,660 --> 00:25:50,201 I oni również pojawiać się na zielono. 532 00:25:50,201 --> 00:25:53,970 To jest po prostu sposobem CS50 IDE z cluing cię do rzeczywistości 533 00:25:53,970 --> 00:25:55,280 że to nie jest kod źródłowy. 534 00:25:55,280 --> 00:25:58,880 To jest plikiem wykonywalnym, o runnable program, który rzeczywiście można uruchomić 535 00:25:58,880 --> 00:26:01,020 wykonując dot ukośnik, a następnie jego nazwę. 536 00:26:01,020 --> 00:26:05,860 >> Teraz, pozwól mi iść do przodu i wyjąć to rm witam, Enter, usuń regularne 537 00:26:05,860 --> 00:26:08,010 złożyć cześć, tak. 538 00:26:08,010 --> 00:26:11,180 A teraz, jeśli typ LS, wracamy do hello.c. 539 00:26:11,180 --> 00:26:13,917 Staraj się nie usuwać swoje Rzeczywisty kod źródłowy. 540 00:26:13,917 --> 00:26:16,250 Nawet jeśli istnieją funkcje wbudowany CS50 IDE gdzie 541 00:26:16,250 --> 00:26:19,870 można przejść przez historii zmian i do tyłu w czasie, jeśli przypadkowo 542 00:26:19,870 --> 00:26:23,660 coś usunąć, należy mieć na uwadze jak na tych monitów tak lub nie, 543 00:26:23,660 --> 00:26:25,381 o tym, co rzeczywiście chcesz zrobić. 544 00:26:25,381 --> 00:26:27,380 A jeśli pójdę do góry lewy rogu tutaj 545 00:26:27,380 --> 00:26:30,696 pozostaje tylko hello.c. 546 00:26:30,696 --> 00:26:32,570 Więc nie ma pęki inne polecenia, które 547 00:26:32,570 --> 00:26:37,550 można wykonać w świecie Linuksa z których jeden jest, ponownie, Marka. 548 00:26:37,550 --> 00:26:40,180 I mamy zamiar zrobić mój program przedstawia się następująco. 549 00:26:40,180 --> 00:26:43,270 >> Zamiast robić szczęk, zamiast robić clang-o, 550 00:26:43,270 --> 00:26:45,860 Idę po prostu dosłownie rodzaju, marki Halo. 551 00:26:45,860 --> 00:26:49,630 A teraz zauważyć, jestem Nie wpisując dokonać hello.c. 552 00:26:49,630 --> 00:26:50,910 Piszę aby przywitać. 553 00:26:50,910 --> 00:26:54,840 >> A ten program sprawi że pochodzi z CS50 IDE, a bardziej 554 00:26:54,840 --> 00:26:57,090 na ogół z Linuksem, Jest to program, który jest 555 00:26:57,090 --> 00:26:59,120 zamiar zrobić program o nazwie Halo. 556 00:26:59,120 --> 00:27:03,680 I to się dzieje, aby zakładać, zgodnie z konwencją, że jeśli program ten może być wykonana, 557 00:27:03,680 --> 00:27:09,030 to ma być wykonany ze źródła Plik kodu kończy się kropką c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Więc jeśli uderzę Wprowadź teraz zauważyć, że komenda, która zostanie wykonana 559 00:27:12,210 --> 00:27:14,340 jest w rzeczywistości nawet dłużej wcześniej niż dotychczas. 560 00:27:14,340 --> 00:27:16,670 A to dlatego, że mamy wstępnie CS50 IDE mieć 561 00:27:16,670 --> 00:27:19,878 niektóre dodatkowe funkcje wbudowane w tym nie musimy jeszcze, ale wkrótce będzie. 562 00:27:19,878 --> 00:27:23,470 Ale najważniejsze jest, aby uświadomić sobie, Jest teraz mam program Halo. 563 00:27:23,470 --> 00:27:27,080 >> Gdybym typ LS znowu mieć program Halo. 564 00:27:27,080 --> 00:27:32,070 I mogę go uruchomić z Dot slash a.out, nie, 565 00:27:32,070 --> 00:27:35,590 bo cały sens tego ćwiczenia była kropka ukośnik cześć. 566 00:27:35,590 --> 00:27:38,089 A teraz mam mój program Hello World. 567 00:27:38,089 --> 00:27:39,880 Więc naprzód, prawie zawsze po prostu 568 00:27:39,880 --> 00:27:42,088 zamierza skompilować nasze programy za pomocą polecenia make. 569 00:27:42,088 --> 00:27:45,300 A potem mamy zamiar uruchomić je Dot slash i nazwa programu. 570 00:27:45,300 --> 00:27:49,610 Ale sobie sprawę, co robi dla Marka ty, to ono samo nie kompilatora. 571 00:27:49,610 --> 00:27:53,310 To tylko program wygoda który wie, jak wywołać kompilator 572 00:27:53,310 --> 00:27:56,470 biec tak, że sam może go używać. 573 00:27:56,470 --> 00:28:00,220 >> Jakie istnieją inne polecenia w Linux, az kolei CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Wkrótce zobaczysz, że istnieje Polecenie CD, Change Directory. 575 00:28:03,107 --> 00:28:05,190 To pozwala w ciągu Twój interfejs linii poleceń 576 00:28:05,190 --> 00:28:07,610 do przodu i do tyłu, i otworzyć różne foldery 577 00:28:07,610 --> 00:28:08,860 bez użycia myszy. 578 00:28:08,860 --> 00:28:12,470 >> LS widzieliśmy, co oznacza listy pliki w bieżącym katalogu. 579 00:28:12,470 --> 00:28:14,650 Bądź Dir, można prawdopodobnie rozpocznie się wyprowadzić 580 00:28:14,650 --> 00:28:18,150 co to znaczy now-- dokonać katalogu, jeśli chcesz utworzyć folder. 581 00:28:18,150 --> 00:28:21,270 RM do usuwania, RM kierunek dla usuń directory-- i te, 582 00:28:21,270 --> 00:28:24,160 znowu, to linia poleceń odpowiedniki tego, co 583 00:28:24,160 --> 00:28:26,945 może zrobić w CS50 IDE za pomocą myszki. 584 00:28:26,945 --> 00:28:28,820 Jednak wkrótce okaże że czasami jest to po prostu 585 00:28:28,820 --> 00:28:30,610 dużo szybciej robić rzeczy z klawiatury, 586 00:28:30,610 --> 00:28:33,690 a ostatecznie o wiele bardziej wydajny. 587 00:28:33,690 --> 00:28:36,440 >> Ale trudno twierdzić, że cokolwiek robiliśmy do tej pory 588 00:28:36,440 --> 00:28:39,990 wszystko jest tak potężny, gdy wszystkie byliśmy mówiąc znaczy Hello World. 589 00:28:39,990 --> 00:28:43,740 I w rzeczywistości, sztywno Słowa powitania świat w moim programie. 590 00:28:43,740 --> 00:28:45,530 Nie ma jeszcze dynamizm. 591 00:28:45,530 --> 00:28:49,320 Scratch była o rząd wielkości bardziej interesujące w zeszłym tygodniu. 592 00:28:49,320 --> 00:28:51,220 >> A więc niech tam dostać. 593 00:28:51,220 --> 00:28:55,310 Weźmy krok ku temu, by sposób niektóre z tych funkcji. 594 00:28:55,310 --> 00:28:59,470 Więc nie tylko C pochodzą z printf, i kiście innych funkcji 595 00:28:59,470 --> 00:29:01,850 niektóre z nich zobaczymy z upływem czasu, to nie robi 596 00:29:01,850 --> 00:29:05,760 sprawiają, że wszystko tak łatwo od razu po wyjęciu bramy w uzyskaniu danych wprowadzanych przez użytkownika. 597 00:29:05,760 --> 00:29:08,140 >> W rzeczywistości jeden ze słabych języków takich jak C, 598 00:29:08,140 --> 00:29:10,140 a nawet Java i jeszcze inne, jest to, że nie 599 00:29:10,140 --> 00:29:15,860 ułatwiają prostu takie rzeczy liczbami całkowitymi od użytkowników lub sznurków, słów, 600 00:29:15,860 --> 00:29:19,970 i zwrotów, nie mówiąc takie rzeczy zmiennoprzecinkowych lub liczb rzeczywistych 601 00:29:19,970 --> 00:29:23,240 z kropkami, a tak naprawdę długie numery, a my wkrótce. 602 00:29:23,240 --> 00:29:27,000 Więc to lista funkcji tutaj, te są podobnie jak inne kawałki układanki Scratch 603 00:29:27,000 --> 00:29:31,090 że mamy zainstalowane w CS50 IDE, które będziemy używać przez kilka tygodni 604 00:29:31,090 --> 00:29:34,010 jako kółka o rodzaju i w końcu je zdjąć i szukać 605 00:29:34,010 --> 00:29:37,210 pod maską, być może, w jak te rzeczy są realizowane. 606 00:29:37,210 --> 00:29:40,460 >> Ale żeby to zrobić, niech faktycznie napisać program. 607 00:29:40,460 --> 00:29:41,770 Pozwólcie mi iść do przodu teraz. 608 00:29:41,770 --> 00:29:44,750 A ja zamierzam utworzyć nowy plik, klikając ten mały znak plus, 609 00:29:44,750 --> 00:29:45,970 i klikając nowego pliku. 610 00:29:45,970 --> 00:29:49,250 >> Mam zamiar zapisać to następna jeden, jak, powiedzmy, string.c, 611 00:29:49,250 --> 00:29:50,750 bo chcę grać z łańcuchów. 612 00:29:50,750 --> 00:29:53,990 I ciąg w C jest po prostu sekwencją znaków. 613 00:29:53,990 --> 00:29:56,090 Więc teraz chodźmy do przodu i wykonaj następujące czynności. 614 00:29:56,090 --> 00:30:01,204 >> Zawierać standardowe IO.h-- i Okazuje się standardowe IO, 615 00:30:01,204 --> 00:30:03,360 IO oznacza po prostu wejście i wyjście. 616 00:30:03,360 --> 00:30:05,920 Tak więc okazuje się, że linia ta oto co 617 00:30:05,920 --> 00:30:08,140 jest sąsiedni nam korzystać printf. 618 00:30:08,140 --> 00:30:10,410 Printf, oczywiście, produkuje wyjście. 619 00:30:10,410 --> 00:30:15,000 Tak więc w celu użycia printf okazuje out trzeba mieć ten wiersz kodu 620 00:30:15,000 --> 00:30:16,040 na początku pliku. 621 00:30:16,040 --> 00:30:18,456 >> I będziemy wracać do tego, co to naprawdę oznacza niebawem. 622 00:30:18,456 --> 00:30:20,400 Okazuje się, że w każdy program C piszę, 623 00:30:20,400 --> 00:30:23,640 Muszę zacząć go kod, który wygląda następująco. 624 00:30:23,640 --> 00:30:26,860 A zauważysz CS50 IDE, a Inny zintegrowany rozwój 625 00:30:26,860 --> 00:30:30,050 środowiskach, takich jak to, zamiar spróbować jak najlepiej 626 00:30:30,050 --> 00:30:31,780 mogą skończyć swoją myśl. 627 00:30:31,780 --> 00:30:35,930 W rzeczywistości, przed chwilą, czy mogę cofnąć co właśnie zrobiłem, naciśnij Enter. 628 00:30:35,930 --> 00:30:39,160 >> Potem uderzył otwartą kręcone nawiasów, naciśnij Enter ponownie. 629 00:30:39,160 --> 00:30:40,430 I skończyłem myśl. 630 00:30:40,430 --> 00:30:45,140 To dało mi nową linię, wcięty nie mniej za miłe stylistycznych powodów zobaczymy. 631 00:30:45,140 --> 00:30:48,559 A potem dał mi on automatycznie że nawias klamrowy dokończyć myśl. 632 00:30:48,559 --> 00:30:50,600 Teraz nie zawsze domyślam się, co chcesz zrobić. 633 00:30:50,600 --> 00:30:53,620 Lecz w dużej mierze, to nie zaoszczędzić kilka klawiszy. 634 00:30:53,620 --> 00:30:59,560 Więc przed chwilą, prowadziliśmy tę program-- hello, world, a następnie zestawiane go, 635 00:30:59,560 --> 00:31:00,460 a następnie prowadził ją. 636 00:31:00,460 --> 00:31:01,867 Ale nie ma tu dynamizm. 637 00:31:01,867 --> 00:31:03,700 Co zrobić, jeśli chcemy zrobić coś innego? 638 00:31:03,700 --> 00:31:07,630 A co gdybym chciał rzeczywiście uzyskać ciąg od użytkownika? 639 00:31:07,630 --> 00:31:11,250 Zamierzam użyć kawałek układanki nazywa się dokładnie that-- ciąg. 640 00:31:11,250 --> 00:31:15,860 >> Okazuje się, że w C, jeśli nie chcą aby zapewnić wejście do kawałka układanki, 641 00:31:15,860 --> 00:31:19,360 lub więcej odpowiednio do funkcji, należy dosłownie zrobić otwartego nawiasu, 642 00:31:19,360 --> 00:31:20,430 zamknij nawias. 643 00:31:20,430 --> 00:31:25,540 Więc to tak, jakby tam no białe pole do wpisywania się. 644 00:31:25,540 --> 00:31:27,720 Blok powiedzmy przed miał trochę białe pole. 645 00:31:27,720 --> 00:31:29,660 Nie mamy teraz to białe pole. 646 00:31:29,660 --> 00:31:33,310 >> Ale kiedy zadzwonić get ciąg, I chcesz umieścić wynik gdzieś. 647 00:31:33,310 --> 00:31:37,680 Tak bardzo powszechnym paradygmatem w C jest wywołania funkcji, jak get ciąg tutaj 648 00:31:37,680 --> 00:31:41,070 a następnie zapisać zwróconej wartości. 649 00:31:41,070 --> 00:31:44,450 Jest to wynikiem jego wysiłek w coś. 650 00:31:44,450 --> 00:31:47,630 >> A jaka jest skonstruować w programowaniu, 651 00:31:47,630 --> 00:31:53,450 czy to w C podstaw lub teraz, że my Można użyć, aby faktycznie coś zapisać? 652 00:31:53,450 --> 00:31:55,990 Wywoływana jest zmienna, prawda? 653 00:31:55,990 --> 00:32:00,320 A nowa, tak naprawdę nie obchodzi, co dzieje się w zmiennych. 654 00:32:00,320 --> 00:32:02,170 >> Ale w tym przypadku rzeczywiście zrobić. 655 00:32:02,170 --> 00:32:03,719 Idę powiedzieć ciąg. 656 00:32:03,719 --> 00:32:05,510 I wtedy będę mógł zadzwonić to wszystko chcę. 657 00:32:05,510 --> 00:32:08,340 Mam zamiar to nazwać imię, staje się łańcuch. 658 00:32:08,340 --> 00:32:10,250 >> A teraz nawet jeśli jesteś trochę nowy w tym, 659 00:32:10,250 --> 00:32:11,984 zauważyć, że brakuje mi jakiś szczegół. 660 00:32:11,984 --> 00:32:13,150 Ja zapominam średnik. 661 00:32:13,150 --> 00:32:14,400 Muszę skończyć tę myśl. 662 00:32:14,400 --> 00:32:17,480 Więc mam zamiar przenieść kursor, i uderzył średnik tam. 663 00:32:17,480 --> 00:32:19,130 I co ja właśnie zrobiłem? 664 00:32:19,130 --> 00:32:21,440 W tej linii kodu, Numer 5 w tej chwili, 665 00:32:21,440 --> 00:32:23,799 Dzwonię get ciąg bez nakładów. 666 00:32:23,799 --> 00:32:26,090 Nie ma więc mały biały box jakby Zapisz blok ma. 667 00:32:26,090 --> 00:32:28,590 >> Po prostu mówię, hej, komputer, daj mi łańcuch. 668 00:32:28,590 --> 00:32:31,390 Znak równości nie jest tak naprawdę znak równości, per se. 669 00:32:31,390 --> 00:32:33,790 To przyporządkowanie Operator, który oznacza 670 00:32:33,790 --> 00:32:37,860 hej, komputer, przesuwać wartość z prawej strony na lewo. 671 00:32:37,860 --> 00:32:40,480 A w lewo, mam następujący. 672 00:32:40,480 --> 00:32:43,580 >> Hej, komputer, daj mi string-- sekwencją znaków. 673 00:32:43,580 --> 00:32:45,637 I nazywają to string Nazwa. 674 00:32:45,637 --> 00:32:47,220 I nie trzeba nawet nazwać Nazwa. 675 00:32:47,220 --> 00:32:49,970 >> Mógłbym to nazwać, konwencjonalnie, coś jak S, 676 00:32:49,970 --> 00:32:52,900 podobnie jak kiedyś I do zadzwoń zmiennej i. 677 00:32:52,900 --> 00:32:54,829 Ale teraz muszę coś z tym zrobić. 678 00:32:54,829 --> 00:32:57,370 Byłoby to dość głupie spróbuj skompilować ten kod, bieganie 679 00:32:57,370 --> 00:32:59,410 ten program, choć Dostaję ciąg, 680 00:32:59,410 --> 00:33:01,580 bo to wciąż tylko zamiar przywitać świat. 681 00:33:01,580 --> 00:33:06,140 >> Ale co, jeśli chcę, aby to zmienić. 682 00:33:06,140 --> 00:33:07,940 Dlaczego nie mogę to zrobić? 683 00:33:07,940 --> 00:33:11,632 Procent s, przecinek s. 684 00:33:11,632 --> 00:33:13,090 I to jest trochę tajemniczy nadal. 685 00:33:13,090 --> 00:33:15,560 >> Więc pozwól mi moje zmienne bardziej jasne. 686 00:33:15,560 --> 00:33:17,510 Pozwól mi nazwać to nazwa zmiennej. 687 00:33:17,510 --> 00:33:20,230 I zobaczmy, czy nie możemy drażnić Oprócz tego, co się tutaj dzieje. 688 00:33:20,230 --> 00:33:22,770 >> Więc on line pięciu, Dostaję ciąg. 689 00:33:22,770 --> 00:33:25,620 A ja przechowywania tego ciągu, co użytkownik wpisał 690 00:33:25,620 --> 00:33:28,430 na swojej klawiaturze, w zmiennej o nazwie Name. 691 00:33:28,430 --> 00:33:30,590 I okazuje się, że printf nie tylko 692 00:33:30,590 --> 00:33:34,220 przyjmować jeden argument w podwójnej cytaty, jedno wejście w cudzysłów. 693 00:33:34,220 --> 00:33:39,100 >> może przyjmować dwa, albo trzy, lub więcej, na przykład że drugi lub trzeci lub czwarty 694 00:33:39,100 --> 00:33:42,320 są wszystkie nazwy zmiennych, lub szczególnie ceni, 695 00:33:42,320 --> 00:33:48,610 które chcesz podłączyć do, dynamicznie, że ciąg w cudzysłowach. 696 00:33:48,610 --> 00:33:52,110 Innymi słowy, byłoby w tym złego? 697 00:33:52,110 --> 00:33:57,920 Gdybym tak powiedział cześć imię, backslash n, uratował mi plik skompilowany mojego kodu, 698 00:33:57,920 --> 00:34:01,660 i prowadził tego, co by się stało? 699 00:34:01,660 --> 00:34:05,139 >> To jest po prostu powiedzieć, hello nazwa, dosłownie N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 co jest głupie, bo to nie różni się od świata. 701 00:34:07,900 --> 00:34:10,400 Więc wszystko jest w cudzysłowie co dosłownie zostanie wydrukowany. 702 00:34:10,400 --> 00:34:12,520 Więc jeśli chcę mieć symbol zastępczy tam, 703 00:34:12,520 --> 00:34:14,422 I rzeczywiście trzeba użyć niektóre specjalna składnia. 704 00:34:14,422 --> 00:34:17,380 I okazuje się, jeśli czytasz Dokumentacja dla funkcji printf 705 00:34:17,380 --> 00:34:21,320 powie to, że jeśli używasz procent s, 706 00:34:21,320 --> 00:34:23,920 można zastąpić wartość w następujący sposób. 707 00:34:23,920 --> 00:34:27,190 >> Po przecinek po tym cudzysłów, po prostu 708 00:34:27,190 --> 00:34:29,179 wpisz nazwę zmienna, że ​​chcesz 709 00:34:29,179 --> 00:34:33,790 podłączyć do tego formatu Kod lub Format specifier, 710 00:34:33,790 --> 00:34:35,469 procent s ciągów. 711 00:34:35,469 --> 00:34:39,190 A teraz, jeśli mam zapisany mój plik, Wracam do mojego terminalu. 712 00:34:39,190 --> 00:34:42,870 I make String, bo, znowu, nazwa ta 713 00:34:42,870 --> 00:34:45,510 Plik, który wybrałem wcześniej jest string.c. 714 00:34:45,510 --> 00:34:48,510 >> Więc powiem Bądź String wprowadzić. 715 00:34:48,510 --> 00:34:51,550 O mój Boże, spójrz na wszystko błędy zrobiliśmy wcześniej. 716 00:34:51,550 --> 00:34:55,540 I to is-- co, to jest naprawdę jak sześć, siedem linii programu? 717 00:34:55,540 --> 00:34:57,790 Tak to jest, gdy może ona bardzo Szybko się przytłaczająca. 718 00:34:57,790 --> 00:35:00,890 >> To okno terminalu ma teraz po prostu wypluta 719 00:35:00,890 --> 00:35:03,230 ogromna liczba komunikatów o błędach. 720 00:35:03,230 --> 00:35:07,560 Na pewno nie mam więcej błędów Komunikaty niż ja linijek kodu. 721 00:35:07,560 --> 00:35:08,680 Więc, co się dzieje? 722 00:35:08,680 --> 00:35:10,920 >> No, najlepszą strategią to zrobić w każdej chwili 723 00:35:10,920 --> 00:35:13,710 napotykają przytłaczająca lista błędów tak, 724 00:35:13,710 --> 00:35:16,690 jest przewijanie wstecz, spojrzeć na komendzie po prostu biegł, co w moim przypadku 725 00:35:16,690 --> 00:35:18,020 to zrobić łańcuch. 726 00:35:18,020 --> 00:35:21,630 Spójrz na to, co czynią tak, i to, że długie polecenie Clang, nic wielkiego tam. 727 00:35:21,630 --> 00:35:22,950 >> Ale czerwony jest źle. 728 00:35:22,950 --> 00:35:24,750 Zielona stara się być delikatne i pomocny. 729 00:35:24,750 --> 00:35:26,140 Ale to wciąż złe, w tym przypadku. 730 00:35:26,140 --> 00:35:27,510 Ale gdzie to jest złe? 731 00:35:27,510 --> 00:35:31,450 >> String.c linia pięć, pięć znaków. 732 00:35:31,450 --> 00:35:32,930 Więc to jest tylko zdrowy konwencji. 733 00:35:32,930 --> 00:35:36,060 Coś oznacza coś grubego numer linii i liczby znaków. 734 00:35:36,060 --> 00:35:41,080 Błąd, korzystanie z nierejestrowana Ciąg identyfikatora. 735 00:35:41,080 --> 00:35:42,900 Czy chodziło Ci o standard? 736 00:35:42,900 --> 00:35:45,530 >> Tak, niestety, Clang stara się być pomocny. 737 00:35:45,530 --> 00:35:46,850 Ale to się stało w tym przypadku. 738 00:35:46,850 --> 00:35:49,350 Nie, Clang, nie miałem na myśli standardowe IO. 739 00:35:49,350 --> 00:35:51,070 Miałem na myśli, że na jednej linii, tak. 740 00:35:51,070 --> 00:35:53,420 >> Ale linia pięć jest tym tutaj. 741 00:35:53,420 --> 00:35:57,040 I Clang nie zrozumieć S-T-Ri-N-G. 742 00:35:57,040 --> 00:36:01,490 Jest to identyfikator nierejestrowana, A Słowo to po prostu nigdy nie widział. 743 00:36:01,490 --> 00:36:05,730 A to dlatego, C, język piszemy kod w tej chwili, 744 00:36:05,730 --> 00:36:08,070 nie ma zmiennych zwanych ciągów. 745 00:36:08,070 --> 00:36:11,380 >> To nie ma domyślnie wsparcia coś, co nazywa się ciąg. 746 00:36:11,380 --> 00:36:16,750 To kawałek z CS50 żargon, ale bardzo konwencjonalne. 747 00:36:16,750 --> 00:36:18,600 Ale mogę rozwiązać ten problem w następujący sposób. 748 00:36:18,600 --> 00:36:22,090 >> Jeśli dodać jedną linię kodu na wierzchu tego programu 749 00:36:22,090 --> 00:36:27,890 obejmują CS50.h, który jest inny plik gdzieś wewnątrz CS50 IDE, gdzieś 750 00:36:27,890 --> 00:36:30,820 na dysku twardym, by tak rzec, systemu operacyjnego Ubuntu 751 00:36:30,820 --> 00:36:33,590 że biegnę, że Jest to plik 752 00:36:33,590 --> 00:36:38,740 zamiar nauczyć operacyjną System jakie ciąg jest po prostu 753 00:36:38,740 --> 00:36:41,930 jak standardowego io.h jest plik w systemie operacyjnym, który jest 754 00:36:41,930 --> 00:36:44,430 zamiar nauczyć go, co printf jest. 755 00:36:44,430 --> 00:36:46,810 >> Rzeczywiście, chcemy zdobyć bardzo podobny komunikat 756 00:36:46,810 --> 00:36:50,600 jeśli IO przyznał standardu Io.h i próbował użyć printf. 757 00:36:50,600 --> 00:36:53,632 Więc mam zamiar iść do przodu i po prostu Przejmij kontrolę L, aby wyczyścić ekran. 758 00:36:53,632 --> 00:36:56,340 Albo można wpisać jasne i będzie wystarczy wyczyścić okno terminala. 759 00:36:56,340 --> 00:36:58,020 Ale nadal można przewijać wstecz w czasie. 760 00:36:58,020 --> 00:37:01,100 >> I mam zamiar ponownie uruchomić Bądź String. 761 00:37:01,100 --> 00:37:03,660 Trzymam kciuki tym razem Enter. 762 00:37:03,660 --> 00:37:05,380 O mój Boże, to działało. 763 00:37:05,380 --> 00:37:09,280 to pokazuje mi dużo polecenie tajemniczy to, co czyni generowany poprzez Clang, 764 00:37:09,280 --> 00:37:10,460 ale żadne komunikaty o błędach. 765 00:37:10,460 --> 00:37:12,460 Więc sobie sprawę, chociaż można całkowicie pozbyć 766 00:37:12,460 --> 00:37:14,480 przytłoczony liczba komunikatów o błędach, 767 00:37:14,480 --> 00:37:17,540 to właśnie może być to denerwujące kaskadowy efekt, jeżeli Clang nie rozumie 768 00:37:17,540 --> 00:37:19,620 Jedno, co oznacza, że ​​wówczas nie rozumie następne słowo, 769 00:37:19,620 --> 00:37:20,560 lub następnego wiersza. 770 00:37:20,560 --> 00:37:22,850 I tak po prostu dławi się na kodzie. 771 00:37:22,850 --> 00:37:24,440 Ale poprawka może być proste. 772 00:37:24,440 --> 00:37:27,822 I tak zawsze skupić się na Pierwszy wiersz wyjścia. 773 00:37:27,822 --> 00:37:29,530 A jeśli tego nie zrobisz zrozumieć, wystarczy spojrzeć 774 00:37:29,530 --> 00:37:32,480 słów kluczowych, które mogą być wskazówki i numer linii, 775 00:37:32,480 --> 00:37:34,650 i charakter, w którym które może być błędem. 776 00:37:34,650 --> 00:37:40,328 >> Teraz pozwól mi iść do przodu i wpisz Dot slash, łańcuch, enter. 777 00:37:40,328 --> 00:37:44,340 Hm, to nie witania czegokolwiek. 778 00:37:44,340 --> 00:37:46,210 Czemu? 779 00:37:46,210 --> 00:37:48,170 Cóż, pamiętam, gdzie to działa? 780 00:37:48,170 --> 00:37:53,730 >> To chyba tkwi w tym momencie w pętli, jeśli chcesz, w wierszu szóstym, 781 00:37:53,730 --> 00:37:56,950 ponieważ Get String z projektem, napisany przez pracowników CS50, 782 00:37:56,950 --> 00:38:00,350 dosłownie oznaczało po prostu siedzieć tam czeka i czeka, 783 00:38:00,350 --> 00:38:01,850 i czeka na sznurku. 784 00:38:01,850 --> 00:38:03,792 Wszyscy rozumiemy przez ciąg wejściowy jest człowiekiem. 785 00:38:03,792 --> 00:38:04,500 Więc wiesz co? 786 00:38:04,500 --> 00:38:05,166 Pozwólcie mi iść do przodu. 787 00:38:05,166 --> 00:38:08,704 I tak dla kaprysu, pozwól mi wpisz swoje imię, David, enter. 788 00:38:08,704 --> 00:38:10,120 Teraz mam bardziej dynamiczny program. 789 00:38:10,120 --> 00:38:11,240 Mówi się, cześć Davida. 790 00:38:11,240 --> 00:38:16,280 >> Jeśli pójdę do przodu i uruchomić to znowu, pozwól mi spróbować powiedzieć nazwę Zamila wprowadzić. 791 00:38:16,280 --> 00:38:17,940 A teraz mamy dynamiczny program. 792 00:38:17,940 --> 00:38:19,380 Nie trudno kodowane świat. 793 00:38:19,380 --> 00:38:21,760 Nie trudno kodowane nazwę lub David lub Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Teraz jest o wiele bardziej jak w programach Wiemy, gdzie jeśli to zajmie wejście, 795 00:38:25,350 --> 00:38:27,870 produkuje się nieco różnić. 796 00:38:27,870 --> 00:38:31,020 Otóż, nie jest to najlepszy doświadczenie użytkownika lub UX. 797 00:38:31,020 --> 00:38:33,000 Uruchomić program. 798 00:38:33,000 --> 00:38:35,830 >> Nie wiem, co mam robić, chyba że rzeczywiście spojrzeć na 799 00:38:35,830 --> 00:38:37,290 czy zapamiętać kod źródłowy. 800 00:38:37,290 --> 00:38:39,640 Więc zróbmy użytkownikowi doświadczyć trochę lepiej 801 00:38:39,640 --> 00:38:41,240 z najprostszych rzeczy. 802 00:38:41,240 --> 00:38:44,782 Pozwól mi wrócić do tego program, a następnie po prostu powiedzieć printf. 803 00:38:44,782 --> 00:38:48,870 >> I pozwól mi iść dalej i powiedzieć, nazwisko, jelita grubego, i przestrzeni, a następnie średnik. 804 00:38:48,870 --> 00:38:51,170 I tylko dla zabawy, nie ma luzów n. 805 00:38:51,170 --> 00:38:52,980 I to jest celowe, bo nie chcą 806 00:38:52,980 --> 00:38:54,590 monit, aby przejść do następnego wiersza. 807 00:38:54,590 --> 00:38:58,800 >> Chcę, zamiast to zrobić, aby ciąg rekompilacji kodu do nowej maszyny 808 00:38:58,800 --> 00:39:00,980 Kod Dot slash ciąg. 809 00:39:00,980 --> 00:39:02,460 Ach, to jest o wiele ładniejsza. 810 00:39:02,460 --> 00:39:05,780 Teraz tak naprawdę wiedzieć, co komputer chce mi zrobić, nadać mu nazwę. 811 00:39:05,780 --> 00:39:10,020 >> Więc mam zamiar iść do przodu i wpisz w Roba, wejść, i cześć, Rob. 812 00:39:10,020 --> 00:39:13,640 Tak więc sobie sprawę, że jest nadal na koniec dnia, program tylko dziewięć linii. 813 00:39:13,640 --> 00:39:15,090 Ale podjęliśmy kroki dziecka. 814 00:39:15,090 --> 00:39:18,380 >> Pisaliśmy o jedną linię, z którą znali, printf, hello world. 815 00:39:18,380 --> 00:39:19,980 Potem rozpiął trochę tego. 816 00:39:19,980 --> 00:39:21,560 I rzeczywiście wykorzystane pobiera ciąg znaków. 817 00:39:21,560 --> 00:39:23,362 A my odrzucił tę wartość w zmiennej. 818 00:39:23,362 --> 00:39:26,070 A potem poszedł do przodu i poprawić Ponadto w trzeciej linii. 819 00:39:26,070 --> 00:39:29,220 I ten proces iteracyjny pisanie oprogramowania jest naprawdę kluczem. 820 00:39:29,220 --> 00:39:33,420 W CS50, w życiu w ogóle, nie powinno się na ogół usiąść, 821 00:39:33,420 --> 00:39:36,800 mieć program w pamięci, a następnie spróbuj pisanie całe cholerstwo wszystkie naraz. 822 00:39:36,800 --> 00:39:40,810 >> To będzie nieuchronnie prowadzić sposób więcej błędów niż my sami widzieli tutaj. 823 00:39:40,810 --> 00:39:44,070 Nawet ja, do dnia dzisiejszego stale wprowadzić inne głupie błędy, 824 00:39:44,070 --> 00:39:47,480 są rzeczywiście trudniejsze błędy które są trudniejsze do rozszyfrowania. 825 00:39:47,480 --> 00:39:52,095 Ale można zrobić więcej błędów bardziej linie kodu piszesz wszystkie naraz. 826 00:39:52,095 --> 00:39:54,220 A więc ta praktyka, napisać trochę kodu 827 00:39:54,220 --> 00:39:57,930 że jesteś wygodne, kompilowania Opisz go uruchomić, przetestować go bardziej ogólnie, 828 00:39:57,930 --> 00:40:01,370 następnie przenieść on-- tak samo jak my zachowaliśmy warstw i warstw w zeszłym tygodniu, 829 00:40:01,370 --> 00:40:04,190 budynku od czegoś bardzo proste do czegoś bardziej skomplikowanego, 830 00:40:04,190 --> 00:40:05,200 tu zrobić to samo. 831 00:40:05,200 --> 00:40:08,500 Nie usiąść i spróbować napisać cały problem. 832 00:40:08,500 --> 00:40:10,780 Właściwie podjąć kroki dziecka. 833 00:40:10,780 --> 00:40:15,100 >> Teraz, łańcuchy nie są że przydatne do siebie. 834 00:40:15,100 --> 00:40:18,210 Chcemy rzeczywiście, najlepiej, jak to jest mieć coś innego w naszej Toolkit. 835 00:40:18,210 --> 00:40:20,990 Więc faktycznie robią dokładnie to. 836 00:40:20,990 --> 00:40:24,900 >> Pozwólcie mi iść do przodu i teraz wzbudzać nieco inny program. 837 00:40:24,900 --> 00:40:28,320 A my nazywamy to int.c dla całkowitej. 838 00:40:28,320 --> 00:40:30,870 Idę, podobnie, obejmują CS550.h. 839 00:40:30,870 --> 00:40:33,060 Zamierzam to standardowe IO. 840 00:40:33,060 --> 00:40:36,630 I że będzie to dość powszechne w tych pierwszych kilku dni klasy. 841 00:40:36,630 --> 00:40:39,050 >> I będę gotowy Sam z główną funkcją. 842 00:40:39,050 --> 00:40:43,370 A teraz zamiast się ciąg, chodźmy do przodu i uzyskać int. 843 00:40:43,370 --> 00:40:49,285 Nazwijmy to ja, i nazywają go pozbyć int, zamknij nawiasy, średnik. 844 00:40:49,285 --> 00:40:51,410 A teraz zróbmy coś z nim, printf. 845 00:40:51,410 --> 00:40:56,190 >> Powiedzmy, że coś takiego witam, backslash n, przecinek i. 846 00:40:56,190 --> 00:41:00,010 Więc jestem dość dużo naśladując co zrobiłem przed chwilą. 847 00:41:00,010 --> 00:41:01,660 Mam tu zastępczy. 848 00:41:01,660 --> 00:41:05,150 Mam przecinkiem I tu, bo chcę do podłączenia I w tym zastępczy. 849 00:41:05,150 --> 00:41:07,250 >> Więc idź naprzód i spróbować przygotowanie tego programu. 850 00:41:07,250 --> 00:41:10,060 Plik nazywa int.c. 851 00:41:10,060 --> 00:41:12,920 Więc mam zamiar powiedzieć, aby int wprowadzić. 852 00:41:12,920 --> 00:41:16,420 O mój Boże, ale to nic wielkiego, prawda? 853 00:41:16,420 --> 00:41:17,230 Jest to błąd. 854 00:41:17,230 --> 00:41:19,810 >> Jest błędem składniowym tutaj taki, że program nie może 855 00:41:19,810 --> 00:41:25,460 zostać skompilowany wewnątrz int.c, linii siedem znaków 27, format error 856 00:41:25,460 --> 00:41:28,400 określa typ char gwiazda, cokolwiek to znaczy. 857 00:41:28,400 --> 00:41:30,020 Ale argument jest typu int. 858 00:41:30,020 --> 00:41:33,110 >> Więc tutaj też mamy nie dzieje to-- chociaż dzisiaj jest dużo materiału, 859 00:41:33,110 --> 00:41:35,710 mamy zamiar cię przytłaczać absolutnie każda cecha C, 860 00:41:35,710 --> 00:41:38,070 i programowania ogólniej zaledwie w tych pierwszych kilku tygodni. 861 00:41:38,070 --> 00:41:40,400 Więc nie często będzie żargonie z którymi nie jesteś zaznajomiony. 862 00:41:40,400 --> 00:41:43,350 I rzeczywiście, gwiazda char jest coś mamy zamiar wrócić do 863 00:41:43,350 --> 00:41:44,830 w tydzień lub dwa czasu. 864 00:41:44,830 --> 00:41:47,530 >> Ale teraz zobaczmy, czy możemy analizowania słów, które są znane. 865 00:41:47,530 --> 00:41:50,750 Rodzaje-- tak słyszeliśmy formatu specifier, kod formatu wcześniej. 866 00:41:50,750 --> 00:41:51,840 To znajomy. 867 00:41:51,840 --> 00:41:53,840 Type-- ale argument typu int. 868 00:41:53,840 --> 00:41:55,980 Chwileczkę, ja to int. 869 00:41:55,980 --> 00:41:59,230 >> Może faktycznie procent s ma pewne określone znaczenie. 870 00:41:59,230 --> 00:42:00,230 I rzeczywiście tak jest. 871 00:42:00,230 --> 00:42:03,101 Liczbą całkowitą, jeśli chcesz printf, aby go zastąpić, 872 00:42:03,101 --> 00:42:05,350 rzeczywiście trzeba użyć inny format specyfikatora. 873 00:42:05,350 --> 00:42:06,890 I nie będzie o tym wiedzieć chyba że ktoś ci powiedział, 874 00:42:06,890 --> 00:42:07,973 albo zrobił to wcześniej. 875 00:42:07,973 --> 00:42:10,490 Ale procent i to, co Mogą być powszechnie stosowane 876 00:42:10,490 --> 00:42:12,240 w printf dla podłączając całkowitej. 877 00:42:12,240 --> 00:42:14,920 Można również użyć procent d dla dziesiętną liczbę całkowitą. 878 00:42:14,920 --> 00:42:16,490 Ale jest ładne i proste tutaj. 879 00:42:16,490 --> 00:42:17,590 Więc pójdziemy z tym. 880 00:42:17,590 --> 00:42:21,160 >> Teraz pozwól mi iść do przodu i powtórka make int, Enter. 881 00:42:21,160 --> 00:42:23,328 To dobrze, bez błędów. 882 00:42:23,328 --> 00:42:27,260 Dot slash int-- Ok, złe doświadczenia użytkownika, bo nie powiedziałem sobie 883 00:42:27,260 --> 00:42:27,760 co zrobić. 884 00:42:27,760 --> 00:42:28,426 Ale to jest w porządku. 885 00:42:28,426 --> 00:42:29,480 Łapię się szybko. 886 00:42:29,480 --> 00:42:36,260 >> A teraz pozwól mi iść do przodu i wpisać Dawida, OK, Zamila Rob. 887 00:42:36,260 --> 00:42:37,820 OK, więc jest to dobra rzecz. 888 00:42:37,820 --> 00:42:41,710 Tym razem używam funkcji kawałek układanki, zwany get int. 889 00:42:41,710 --> 00:42:44,230 I okazuje out-- a my zobaczyć to później w term-- 890 00:42:44,230 --> 00:42:47,730 personel CS50 wdrożył się łańcuch w taki sposób, 891 00:42:47,730 --> 00:42:50,350 że będzie tylko fizycznie uzyskać ciąg dla Ciebie. 892 00:42:50,350 --> 00:42:54,340 >> To wdrożył w get int w taki sposób, że będzie tylko 893 00:42:54,340 --> 00:42:55,590 uzyskać całkowitą dla Ciebie. 894 00:42:55,590 --> 00:42:57,830 A jeśli, ludzki, nie współpracują, to 895 00:42:57,830 --> 00:43:00,590 dosłownie zamiar powiedzieć, ponownie, ponownie, ponownie, 896 00:43:00,590 --> 00:43:05,200 dosłownie siedząc tam pętli, dopóki Państwo nakłada się pewną liczbę magiczną, 897 00:43:05,200 --> 00:43:07,670 50, jak i cześć 50. 898 00:43:07,670 --> 00:43:11,440 >> Lub jeśli prowadzimy tego ponownie i wpisać 42, hello 42. 899 00:43:11,440 --> 00:43:15,750 A więc funkcja get int wewnątrz tego kawałka układanki 900 00:43:15,750 --> 00:43:19,050 wystarczy logika, tyle myśli, dowiedzieć się, co to słowo? 901 00:43:19,050 --> 00:43:20,330 A co to jest numer? 902 00:43:20,330 --> 00:43:23,165 Tylko przyjmując ostatecznie numery. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Tak więc okazuje się, że to nie jest tak wyrazisty. 905 00:43:30,230 --> 00:43:30,910 jak dotąd. 906 00:43:30,910 --> 00:43:33,690 Tak, yay, ostatni raz poszło dość szybko 907 00:43:33,690 --> 00:43:38,320 do gier wykonawczymi oraz animacji i prace artystyczne w zera. 908 00:43:38,320 --> 00:43:42,260 I tu jesteśmy treść z Hello World, i cześć 50. 909 00:43:42,260 --> 00:43:43,696 >> To nie wszystko, co inspirujące. 910 00:43:43,696 --> 00:43:46,070 I rzeczywiście, te kilka pierwszych przykłady zajmie trochę czasu 911 00:43:46,070 --> 00:43:47,510 na ziemi się w podnieceniu. 912 00:43:47,510 --> 00:43:49,854 Ale mamy dużo więcej kontrolować teraz, w rzeczywistości. 913 00:43:49,854 --> 00:43:51,770 I mamy zamiar bardzo szybko rozpocząć warstw 914 00:43:51,770 --> 00:43:53,870 na wierzchu tych podstawowych pierwotnych. 915 00:43:53,870 --> 00:43:56,370 >> Ale najpierw niech rozumie jakie są ograniczenia. 916 00:43:56,370 --> 00:43:58,620 W istocie, jednym z miejsc Scratch nie łatwo 917 00:43:58,620 --> 00:44:00,990 zróbmy to naprawdę wyglądają pod maską 918 00:44:00,990 --> 00:44:03,740 i zrozumieć, co komputer, co może zrobić, 919 00:44:03,740 --> 00:44:05,250 i jakie są jego ograniczenia. 920 00:44:05,250 --> 00:44:08,580 I rzeczywiście, że brak Zrozumienie, potencjalnie długotrwałe 921 00:44:08,580 --> 00:44:12,520 może prowadzić do naszego piśmie mistakes-- robaki, pisanie niepewnego oprogramowania 922 00:44:12,520 --> 00:44:13,880 dostaje włamał się w jakiś sposób. 923 00:44:13,880 --> 00:44:17,130 >> Warto więc podjąć pewne kroki w kierunku Zrozumienie tego trochę lepiej 924 00:44:17,130 --> 00:44:19,710 sposób, powiedzmy, następujący przykład. 925 00:44:19,710 --> 00:44:23,550 Mam zamiar iść do przodu i wdrożenia bardzo szybko program o nazwie Adder. 926 00:44:23,550 --> 00:44:25,134 Jak, dodajmy kilka numerów razem. 927 00:44:25,134 --> 00:44:27,800 I mam zamiar kodować kilka narożników tutaj, i po prostu skopiuj i wklej 928 00:44:27,800 --> 00:44:30,270 gdzie byłem wcześniej, po prostu więc możemy już iść szybciej. 929 00:44:30,270 --> 00:44:33,090 Więc teraz mam podstawowe początki programu zwanego Adder. 930 00:44:33,090 --> 00:44:34,670 >> I chodźmy naprzód i to zrobić. 931 00:44:34,670 --> 00:44:38,680 Mam zamiar iść do przodu i powiedzmy, intx dostaje się int. 932 00:44:38,680 --> 00:44:39,430 I wiesz co? 933 00:44:39,430 --> 00:44:40,990 Zróbmy lepsze doświadczenie użytkownika. 934 00:44:40,990 --> 00:44:45,740 >> Więc powiedzmy, że x jest i skutecznie poprosi użytkownika, aby dać nam x. 935 00:44:45,740 --> 00:44:50,600 I pozwól mi iść dalej i powiedzieć, printf jak o y jest tym razem oczekując 936 00:44:50,600 --> 00:44:53,140 Dwie wartości od użytkownika. 937 00:44:53,140 --> 00:44:59,759 A potem niech po prostu iść do przodu i powiedzmy, printf, suma x i y jest. 938 00:44:59,759 --> 00:45:01,300 A teraz nie chcę robić procent s. 939 00:45:01,300 --> 00:45:09,080 Chcę zrobić procent i, odwrotny ukośnik n, a następnie podłącz wartość sumy. 940 00:45:09,080 --> 00:45:10,620 >> Więc jak mogę to zabrać? 941 00:45:10,620 --> 00:45:11,270 Wiesz co? 942 00:45:11,270 --> 00:45:12,840 Wiem, jak używać zmiennych. 943 00:45:12,840 --> 00:45:15,140 Niech mi tylko ogłosić nowy, int oo. 944 00:45:15,140 --> 00:45:16,770 >> A ja zamierzam zgadywać tutaj. 945 00:45:16,770 --> 00:45:21,470 Jeśli istnieją znaki równości w tym języka, może uda mi się po prostu zrobić X plus Y, 946 00:45:21,470 --> 00:45:23,660 tak długo, jak kończę pomyślał z średnikiem? 947 00:45:23,660 --> 00:45:28,170 Teraz mogę wrócić na dół, podłączyć z, dokończyć tę myśl ze średnikiem. 948 00:45:28,170 --> 00:45:33,160 I zobaczmy teraz, jeśli to Sekwencje lines-- x jest uzyskać int. 949 00:45:33,160 --> 00:45:34,770 Y jest uzyskać int. 950 00:45:34,770 --> 00:45:37,980 >> Dodaj x i y przechowywać wartość w z-- więc znowu pamiętam znak równości 951 00:45:37,980 --> 00:45:38,560 nie jest równa. 952 00:45:38,560 --> 00:45:41,100 To przyporządkowanie od prawej do lewej. 953 00:45:41,100 --> 00:45:45,180 I niech wydrukować, że suma X i Y nie jest dosłownie oo 954 00:45:45,180 --> 00:45:46,830 ale to, co jest w środku z. 955 00:45:46,830 --> 00:45:50,090 Więc zróbmy Adder - ładne, żadnych błędów i tym razem. 956 00:45:50,090 --> 00:45:53,030 Dot slash Adder, wejść, x będzie 1. 957 00:45:53,030 --> 00:45:55,380 >> Y będzie 2. 958 00:45:55,380 --> 00:45:58,964 A suma xiy wynosi 3. 959 00:45:58,964 --> 00:46:00,130 Więc to wszystko jest w porządku i dobre. 960 00:46:00,130 --> 00:46:03,260 >> Więc można sobie wyobrazić, że matematyka powinny działać w programie takiego. 961 00:46:03,260 --> 00:46:04,040 Ale wiesz co? 962 00:46:04,040 --> 00:46:06,904 Czy ta zmienna linia 12, a nawet konieczne? 963 00:46:06,904 --> 00:46:09,820 Nie ma potrzeby, aby w zwyczaju po prostu przechowywanie rzeczy w zmiennych 964 00:46:09,820 --> 00:46:10,980 tylko dlatego, że jest to możliwe. 965 00:46:10,980 --> 00:46:13,550 I rzeczywiście, jest to ogólnie uważane za brak projektowania 966 00:46:13,550 --> 00:46:18,100 jeśli tworzysz zmienną o nazwie oo W tym przypadku, przechowywanie w nim coś, 967 00:46:18,100 --> 00:46:21,390 a następnie natychmiast używając go, ale nigdy więcej. 968 00:46:21,390 --> 00:46:24,700 Dlaczego dać coś nazwę jak z Jeśli jesteś dosłownie 969 00:46:24,700 --> 00:46:26,770 zamiar użyć tego rzeczą tylko raz, a więc 970 00:46:26,770 --> 00:46:29,380 Bliższy do miejsca, gdzie został utworzony to w pierwszej kolejności 971 00:46:29,380 --> 00:46:31,052 tak blisko pod względem linii kodu? 972 00:46:31,052 --> 00:46:31,760 Więc wiesz co? 973 00:46:31,760 --> 00:46:34,480 Okazuje się, że C jest dość elastyczny. 974 00:46:34,480 --> 00:46:36,586 Jeśli rzeczywiście chcesz plug-in wartościami tutaj 975 00:46:36,586 --> 00:46:38,210 Nie muszę zadeklarować nową zmienną. 976 00:46:38,210 --> 00:46:41,680 Mogłem po prostu plug-in X plus y, bo C rozumie 977 00:46:41,680 --> 00:46:43,390 arytmetyczne i operatory matematyczne. 978 00:46:43,390 --> 00:46:47,140 >> Więc mogę po prostu powiedzieć, czy ten matematyki, x oraz y, niezależnie od wartości te są 979 00:46:47,140 --> 00:46:50,780 podłącz wynikowy całkowita do tego łańcucha. 980 00:46:50,780 --> 00:46:53,730 Więc to może być, choć tylko jedna linia krótsza, 981 00:46:53,730 --> 00:46:58,480 lepszy design, lepszy program bo jest mniej kodu, więc 982 00:46:58,480 --> 00:46:59,921 mniej dla mnie do zrozumienia. 983 00:46:59,921 --> 00:47:01,920 I to jest też po prostu czystsze, o ile nie jesteśmy 984 00:47:01,920 --> 00:47:04,620 wprowadzanie nowych słów, nowe symbole, takie jak z, 985 00:47:04,620 --> 00:47:07,510 choć tak naprawdę nie służyć dużo celów. 986 00:47:07,510 --> 00:47:12,890 >> Niestety, nie jest matematyka wszystkie, że wiarygodne czasem. 987 00:47:12,890 --> 00:47:15,270 Idziemy naprzód i to zrobić. 988 00:47:15,270 --> 00:47:18,200 Mam zamiar iść do przodu teraz i wykonaj następujące czynności. 989 00:47:18,200 --> 00:47:27,650 >> Zróbmy printf, Procent I, plus procent I, zostaje procent i, odwrotny ukośnik n. 990 00:47:27,650 --> 00:47:32,240 A ja zamierzam zrobić this-- XYX plusa y. 991 00:47:32,240 --> 00:47:34,821 Więc jestem po prostu przepisać to nieco inaczej tutaj. 992 00:47:34,821 --> 00:47:36,320 Niech mi tylko zrobić szybki test dla pewności. 993 00:47:36,320 --> 00:47:37,986 Ponownie, niech nie dostać przed siebie. 994 00:47:37,986 --> 00:47:41,420 Bądź adder, kropka ukośnik adder. 995 00:47:41,420 --> 00:47:44,950 x oznacza 1, y oznacza 2, 1 plus 2 3. 996 00:47:44,950 --> 00:47:45,870 Więc to jest dobre. 997 00:47:45,870 --> 00:47:49,060 Ale bądźmy skomplikować to teraz nieco, i utworzyć nowy plik. 998 00:47:49,060 --> 00:47:53,350 >> Idę zadzwonić ten jeden, powiedzieć, int, liczba mnoga dla liczb całkowitych. 999 00:47:53,350 --> 00:47:55,980 Zacznę gdzie byłem przed chwilą. 1000 00:47:55,980 --> 00:47:57,770 Ale teraz zróbmy kilka innych linii. 1001 00:47:57,770 --> 00:48:03,430 Pozwólcie mi iść do przodu i wykonaj następujące czynności, printf, procent i minus procent i, 1002 00:48:03,430 --> 00:48:08,959 I jest procent, przecinek x, przecinek yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Więc robię nieco inna matematyka istnieje. 1004 00:48:10,750 --> 00:48:11,624 Zróbmy jeszcze jeden. 1005 00:48:11,624 --> 00:48:16,610 Więc procent I czasy procent I jest procent i, odwrotny ukośnik n. 1006 00:48:16,610 --> 00:48:21,430 Załóżmy, plug-in X i Y, a x razy y. 1007 00:48:21,430 --> 00:48:24,530 Użyjemy na gwiazdkę komputer dla czasów. 1008 00:48:24,530 --> 00:48:26,390 >> Nie używać x. x jest nazwa zmiennej tutaj. 1009 00:48:26,390 --> 00:48:28,270 Za pomocą gwiazdę mnożenia. 1010 00:48:28,270 --> 00:48:29,020 Zróbmy jeszcze jeden. 1011 00:48:29,020 --> 00:48:34,580 Printf proc Ja, podzielone w procentach I, procent i, 1012 00:48:34,580 --> 00:48:40,460 backslash n. xy podzielona przez y-- więc używać ukośnika w C 1013 00:48:40,460 --> 00:48:41,502 zrobić podział. 1014 00:48:41,502 --> 00:48:42,460 I zróbmy jeden inny. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Pozostała część procentu I, dzieli w procentach I, procent i. 1017 00:48:55,240 --> 00:48:59,550 xy-- a teraz pozostała to, co pozostało. 1018 00:48:59,550 --> 00:49:02,980 Przy próbie podzielenie mianownika w liczniku, 1019 00:49:02,980 --> 00:49:05,570 ile zostało nad tym nie można podzielić na zewnątrz? 1020 00:49:05,570 --> 00:49:07,910 >> Więc tak naprawdę nie ma, Niekoniecznie, symbol 1021 00:49:07,910 --> 00:49:09,470 Użyliśmy w szkole za to. 1022 00:49:09,470 --> 00:49:13,830 Ale nie w C. Można mówią x modulo y, gdzie 1023 00:49:13,830 --> 00:49:18,000 Ten znak procent w tym context-- złudzenia, gdy jesteś w środku 1024 00:49:18,000 --> 00:49:20,170 z cudzysłowy, Wewnątrz printf, procent 1025 00:49:20,170 --> 00:49:21,830 stosowany jest jako specyfikatora formatu. 1026 00:49:21,830 --> 00:49:25,420 >> Podczas korzystania procent zewnątrz że w wyrażeniu matematycznym 1027 00:49:25,420 --> 00:49:29,910 to operator modulo dla modularnych arithmetic-- dla naszych celów 1028 00:49:29,910 --> 00:49:33,650 tutaj, oznacza po prostu, jaka jest Pozostała x podzielona przez y? 1029 00:49:33,650 --> 00:49:36,130 Więc x jest podzielona przez y x y ukośnik. 1030 00:49:36,130 --> 00:49:38,220 Co znajduje się pozostała część podzielona przez x y? 1031 00:49:38,220 --> 00:49:41,780 To x mod y, jako programista powie. 1032 00:49:41,780 --> 00:49:48,300 >> Więc jeśli nie popełniali błędów tutaj, niech mnie iść do przodu i zrobić int, liczba mnoga, Nicea, 1033 00:49:48,300 --> 00:49:50,010 i kropka int ukośnikiem. 1034 00:49:50,010 --> 00:49:55,270 I chodźmy naprzód i zrobić, powiedzmy, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Wszystko w porządku, jeden plus 10 jest 11, check. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 jest ujemny 9, sprawdź. 1037 00:50:01,240 --> 00:50:03,420 >> 1 razy 10 to 10, check. 1038 00:50:03,420 --> 00:50:07,090 1 podzielone przez 10 is-- OK, będziemy pomiń ten jeden. 1039 00:50:07,090 --> 00:50:09,480 Pozostała część 1 podzielone przez 10 to 1. 1040 00:50:09,480 --> 00:50:10,680 To jest poprawne. 1041 00:50:10,680 --> 00:50:12,630 Ale jest to problem tutaj. 1042 00:50:12,630 --> 00:50:15,390 >> Więc jeden Kładę przekazać, nie jest prawidłowe. 1043 00:50:15,390 --> 00:50:16,670 To znaczy, że jest blisko do 0. 1044 00:50:16,670 --> 00:50:20,670 1 podzielone przez 10, wiesz, jeśli jesteśmy cięcia niektórych zakątkach, na pewno, to jest zero. 1045 00:50:20,670 --> 00:50:28,050 Ale to powinno być naprawdę 10/01, 0,1 lub 0,10, 0,1000, i tak dalej. 1046 00:50:28,050 --> 00:50:30,600 >> To naprawdę nie powinno wynosić zero. 1047 00:50:30,600 --> 00:50:35,990 Cóż, okazuje się, że komputer jest robi dosłownie co powiedzieliśmy to zrobić. 1048 00:50:35,990 --> 00:50:39,460 Robimy matematyki jak x podzielona przez y. 1049 00:50:39,460 --> 00:50:44,680 I oba X i Y, na liniach kodu wcześniej, są liczbami całkowitymi. 1050 00:50:44,680 --> 00:50:50,440 >> Ponadto, w linii 15, to jest printf mówi, hej, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 liczbą całkowitą, podłączenie całkowitej, podłączenie integer-- specjalnie 1052 00:50:54,230 --> 00:50:57,580 X i Y, a następnie x podzielona przez y. x i y są int. 1053 00:50:57,580 --> 00:50:59,060 Jesteśmy tam dobrze. 1054 00:50:59,060 --> 00:51:01,250 >> Ale co to jest x dzieli się przez x? 1055 00:51:01,250 --> 00:51:06,790 podzielone przez x y powinno być, matematycznie, 1/10 lub 0,1, 1056 00:51:06,790 --> 00:51:11,600 która jest liczbą rzeczywistą, liczba rzeczywista mające potencjalnie punkt dziesiętny. 1057 00:51:11,600 --> 00:51:13,230 To nie jest liczbą całkowitą. 1058 00:51:13,230 --> 00:51:18,290 >> Ale to, co jest najbliżej całkowita do 1/10 lub 0,1? 1059 00:51:18,290 --> 00:51:21,114 Tak, to niby jest zerem. 1060 00:51:21,114 --> 00:51:22,030 0.1 jest podobny do tego dużo. 1061 00:51:22,030 --> 00:51:22,890 I jedno jest to dużo. 1062 00:51:22,890 --> 00:51:25,870 Tak 1/10 jest bliżej 0, niż to jest do jednego. 1063 00:51:25,870 --> 00:51:30,800 >> A więc to, co robi dla C us-- rodzaju, ponieważ powiedziano nam go to-- 1064 00:51:30,800 --> 00:51:32,600 jest obcinanie że całkowitą. 1065 00:51:32,600 --> 00:51:40,540 To przyjmując wartość, która z kolei jest powinno być coś takiego jak 0.1000, 1066 00:51:40,540 --> 00:51:41,800 0 i tak dalej. 1067 00:51:41,800 --> 00:51:45,320 I to wszystko obcinania po przecinku 1068 00:51:45,320 --> 00:51:47,510 tak, że wszystko rzeczy, ponieważ nie 1069 00:51:47,510 --> 00:51:51,910 mieszczą się w pojęciu liczby całkowitej, która jest tylko numer, jak negatywne 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 w górę iw dół, to wyrzuca wszystko po przecinku Bo 1071 00:51:55,830 --> 00:51:59,020 Nie można dopasować dziesiętny jest liczbą całkowitą z definicji. 1072 00:51:59,020 --> 00:52:01,290 >> Więc odpowiedź tutaj jest zerem. 1073 00:52:01,290 --> 00:52:02,600 Jak więc rozwiązać ten problem? 1074 00:52:02,600 --> 00:52:04,400 Potrzebujemy innego rozwiązania wszystkich razem. 1075 00:52:04,400 --> 00:52:06,880 I możemy to zrobić w następujący sposób. 1076 00:52:06,880 --> 00:52:12,820 >> Pozwólcie mi iść do przodu i utworzyć nową Plik ten jeden o nazwie floats.c. 1077 00:52:12,820 --> 00:52:16,500 I zapisz go tutaj w sam katalog, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 I pozwól mi iść do przodu i skopiuj część tego kodu z wcześniej. 1080 00:52:23,260 --> 00:52:27,690 >> Ale zamiast się int, zróbmy to. 1081 00:52:27,690 --> 00:52:31,037 Daj mi wartość zmiennoprzecinkową nazywany x. gdzie zmiennoprzecinkowe 1082 00:52:31,037 --> 00:52:33,370 wartość ta jest po prostu dosłownie coś z zmiennoprzecinkowych. 1083 00:52:33,370 --> 00:52:34,410 może poruszać się w lewo, w prawo. 1084 00:52:34,410 --> 00:52:35,530 Jest to liczba rzeczywista. 1085 00:52:35,530 --> 00:52:38,050 >> I niech nie nazywają uzyskać int, ale się pływak, 1086 00:52:38,050 --> 00:52:41,420 który również należał do menu opcji w bibliotece C250. 1087 00:52:41,420 --> 00:52:43,220 Zmieńmy y do pływaka. 1088 00:52:43,220 --> 00:52:45,000 Więc ta staje się pływak. 1089 00:52:45,000 --> 00:52:47,620 >> A teraz, nie chcemy podłączyć wskazówki. 1090 00:52:47,620 --> 00:52:53,130 Okazuje się, musimy użyć procent f dla pływaka, procent f dla pływaka, 1091 00:52:53,130 --> 00:52:54,560 a teraz go zapisać. 1092 00:52:54,560 --> 00:53:01,220 A teraz, kciuki, aby pływaki, ładne, kropki pływaki slash. 1093 00:53:01,220 --> 00:53:04,280 x będzie jeden 1. y Będzie 10 ponownie. 1094 00:53:04,280 --> 00:53:08,240 >> I miły, OK moja dodatkiem jest prawidłowe. 1095 00:53:08,240 --> 00:53:10,240 Miałem nadzieję na więcej, ale zapomniałem napisać. 1096 00:53:10,240 --> 00:53:13,250 Więc chodźmy i naprawić ten błąd logiczny. 1097 00:53:13,250 --> 00:53:16,280 >> Idziemy do przodu i złapał następuje. 1098 00:53:16,280 --> 00:53:18,080 Musimy po prostu zrobić trochę skopiować i wkleić. 1099 00:53:18,080 --> 00:53:20,080 A ja powiem minus. 1100 00:53:20,080 --> 00:53:21,890 >> A ja powiem razy. 1101 00:53:21,890 --> 00:53:24,060 A ja powiem podzielone. 1102 00:53:24,060 --> 00:53:28,240 A ja nie zamierzam zrobić modulo, co nie jest tu germane, 1103 00:53:28,240 --> 00:53:33,690 podzielony przez F, a czas plus-- OK, zróbmy to jeszcze raz. 1104 00:53:33,690 --> 00:53:44,210 >> Złóż pływaki, pływaki ukośnik, kropka oraz 1, 10, and-- ładne, no, OK. 1105 00:53:44,210 --> 00:53:45,250 Więc jestem idiotą. 1106 00:53:45,250 --> 00:53:47,000 Więc to jest bardzo częste w informatyce 1107 00:53:47,000 --> 00:53:49,780 aby głupich błędów jak ten. 1108 00:53:49,780 --> 00:53:53,100 >> Dla celów dydaktycznych, co naprawdę chciał zrobić 1109 00:53:53,100 --> 00:53:57,410 było zmienić naukę tutaj na plus, minus, do czasów, 1110 00:53:57,410 --> 00:54:01,140 i dzielić, jak ty z nadzieją Zauważyłem podczas tego ćwiczenia. 1111 00:54:01,140 --> 00:54:04,700 Więc teraz zróbmy to ponownie skompilować Program, czy kropki pływaków ukośnikiem. 1112 00:54:04,700 --> 00:54:07,950 >> I po raz trzeci, niech sprawdzić, czy spełnia on moje oczekiwania. 1113 00:54:07,950 --> 00:54:21,480 1, 10, wejść, tak, OK, 1,000, podzielona przez 10.000, to 0,100000. 1114 00:54:21,480 --> 00:54:24,952 I okazuje się, możemy kontrolować, ile Liczby są po tych miejsc po przecinku. 1115 00:54:24,952 --> 00:54:25,660 My rzeczywiście będzie. 1116 00:54:25,660 --> 00:54:26,790 Wrócimy do tego. 1117 00:54:26,790 --> 00:54:28,440 >> Ale teraz, w rzeczywistości, matematyka jest poprawna. 1118 00:54:28,440 --> 00:54:30,090 Tak więc raz jeszcze, co się tutaj na wynos? 1119 00:54:30,090 --> 00:54:33,050 Okazuje się, że w C istnieją nie dopiero strings--, w rzeczywistości 1120 00:54:33,050 --> 00:54:36,120 nie ma tak naprawdę, bo dodać te z biblioteki CS50. 1121 00:54:36,120 --> 00:54:37,710 Ale to nie tylko int. 1122 00:54:37,710 --> 00:54:38,990 >> Istnieją również pływa. 1123 00:54:38,990 --> 00:54:42,810 I okazuje się, kilka innych danych Typy też, że użyjemy niedługo. 1124 00:54:42,810 --> 00:54:46,270 Okazuje się, że jeśli chcesz pojedynczy charakter, a nie ciąg znaków, 1125 00:54:46,270 --> 00:54:47,610 można użyć tylko char. 1126 00:54:47,610 --> 00:54:52,350 >> Okazuje się, że jeśli chcesz bool, wartość logiczna, prawda czy tylko fałszywe, 1127 00:54:52,350 --> 00:54:56,840 Dzięki bibliotece CS50, mamy dodane do C bool typu danych, jak również. 1128 00:54:56,840 --> 00:54:59,180 Ale jest również obecny w wiele innych języków, jak również. 1129 00:54:59,180 --> 00:55:04,130 I okazuje się, że czasami potrzebujemy większych liczb Potem są domyślnie 1130 00:55:04,130 --> 00:55:05,210 o wskazówki i pływaków. 1131 00:55:05,210 --> 00:55:10,590 >> I rzeczywiście, podwójny szereg który wykorzystuje nie 32 bity, ale 64 bity. 1132 00:55:10,590 --> 00:55:14,990 A long long jest liczbą zastosowania nie 32, ale bity 64 bity, 1133 00:55:14,990 --> 00:55:19,190 odpowiednio dla zmiennoprzecinkowych Wartości i, odpowiednio, liczbami całkowitymi. 1134 00:55:19,190 --> 00:55:22,780 Więc właściwie teraz zobaczyć w akcji. 1135 00:55:22,780 --> 00:55:26,150 >> Mam zamiar iść do przodu tutaj i wzbudzać jeden inny program. 1136 00:55:26,150 --> 00:55:32,020 Tutaj mam zamiar iść do przodu i zawierają CS50.h. 1137 00:55:32,020 --> 00:55:34,910 I pozwól mi odejść, to standardowy IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> A zauważysz coś Funky się tutaj dzieje. 1139 00:55:37,320 --> 00:55:40,592 Nie Kolor kodowania rzeczy w ten sam sposób jak to miało miejsce wcześniej. 1140 00:55:40,592 --> 00:55:43,550 I okazuje się, że to dlatego, że nie podano Chodzi o nazwę pliku. 1141 00:55:43,550 --> 00:55:47,270 >> Idę zadzwonić ten jeden sizeof.c i naciśnij Zapisz. 1142 00:55:47,270 --> 00:55:51,039 I zauważyć, co się dzieje z moim bardzo biały Kod przeciwko tej czarnym tle. 1143 00:55:51,039 --> 00:55:52,830 Teraz, przynajmniej tam niektóre fioletowy tam. 1144 00:55:52,830 --> 00:55:54,490 I to jest składnia podświetlona. 1145 00:55:54,490 --> 00:55:57,700 >> To dlatego, że po prostu, mam powiedział IDE, jaki typ pliku 1146 00:55:57,700 --> 00:56:01,060 to przez nadanie jej nazwy, a specjalnie rozszerzenie pliku. 1147 00:56:01,060 --> 00:56:03,620 Teraz chodźmy naprzód i to zrobić. 1148 00:56:03,620 --> 00:56:08,910 Mam zamiar iść do przodu i bardzo wystarczy wydrukować following-- bool 1149 00:56:08,910 --> 00:56:11,080 jest procent LU. 1150 00:56:11,080 --> 00:56:12,950 >> Będziemy wracać do które za chwilę. 1151 00:56:12,950 --> 00:56:15,840 A potem mam zamiar wielkość druku bool. 1152 00:56:15,840 --> 00:56:18,170 A teraz, żeby zapisać Sam jakiś czas, jestem 1153 00:56:18,170 --> 00:56:20,280 zrobi całość Pęczek z nich naraz. 1154 00:56:20,280 --> 00:56:24,620 A konkretnie, zamierzam zmienić na char i char. 1155 00:56:24,620 --> 00:56:27,760 Ten jeden, mam zamiar zmienić z podwójnym i podwójne. 1156 00:56:27,760 --> 00:56:31,440 >> Ten jeden, mam zamiar zmienić do pływaka i pływak. 1157 00:56:31,440 --> 00:56:35,670 Ten jeden, ja jadę zmienić na int i int. 1158 00:56:35,670 --> 00:56:38,660 A ten, jadę aby zmienić na długi długi. 1159 00:56:38,660 --> 00:56:40,840 I to jeszcze biorąc dawno, dawno, dawno. 1160 00:56:40,840 --> 00:56:44,572 >> A potem wreszcie dałem Sam jeden zbyt wiele, string. 1161 00:56:44,572 --> 00:56:47,030 Okazuje się, że w C, nie specjalny operator zwany 1162 00:56:47,030 --> 00:56:50,260 Rozmiar to dosłownie zamiar, po uruchomieniu 1163 00:56:50,260 --> 00:56:52,099 Poinformuj nas o wielkości każda z tych zmiennych. 1164 00:56:52,099 --> 00:56:53,890 I to jest droga, a teraz, możemy połączyć z powrotem 1165 00:56:53,890 --> 00:56:57,140 do zeszłotygodniowej debaty danych i reprezentacji. 1166 00:56:57,140 --> 00:57:00,330 >> Pozwólcie mi iść do przodu i kompilacji wielkość kropki wielkości cięciem. 1167 00:57:00,330 --> 00:57:01,210 I zobaczmy. 1168 00:57:01,210 --> 00:57:05,210 Okazuje się, że w języku C, konkretnie CS50 IDE 1169 00:57:05,210 --> 00:57:08,170 w szczególności na system operacyjny Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 który jest operacyjny 64-bitowy system, w tym przypadku, 1171 00:57:11,100 --> 00:57:14,189 bool będzie używać jeden bajt przestrzeni. 1172 00:57:14,189 --> 00:57:16,480 W ten sposób wielkość jest mierzona, Nie w bitach, ale w bajtach. 1173 00:57:16,480 --> 00:57:18,690 I przypomnieć, że jeden bajt to osiem bitów. 1174 00:57:18,690 --> 00:57:22,030 Więc bool, nawet jeśli technicznie wystarczy 0 lub 1, 1175 00:57:22,030 --> 00:57:24,092 to trochę marnotrawstwo w jaki sposób zostały wdrożone go. 1176 00:57:24,092 --> 00:57:26,800 To rzeczywiście zamiar wykorzystać całość byte-- więc wszystkie zera, to może 1177 00:57:26,800 --> 00:57:31,050 wszystkie z nich, czy coś takiego, czy tylko jeden jeden spośród ośmiu bitów. 1178 00:57:31,050 --> 00:57:34,962 >> Char tymczasem wykorzystywane do charakteru jak znak ASCII za ostatniego tygodnia 1179 00:57:34,962 --> 00:57:36,170 będzie jeden znak. 1180 00:57:36,170 --> 00:57:42,340 I że synchronizuje się z naszym pojęciem przy czym nie więcej niż 256 bits-- raczej 1181 00:57:42,340 --> 00:57:45,360 synchronizuje się z tym brak jest dłużej niż 8 bitów, które 1182 00:57:45,360 --> 00:57:47,450 daje nam aż 256 wartości. 1183 00:57:47,450 --> 00:57:49,680 Podwójny zamierza wynosić 8 bajtów lub 64 bity. 1184 00:57:49,680 --> 00:57:50,510 >> Pływak jest 4. 1185 00:57:50,510 --> 00:57:51,690 Int jest 4. 1186 00:57:51,690 --> 00:57:52,980 Dawno, dawno wynosi 8. 1187 00:57:52,980 --> 00:57:54,716 I ciąg jest 8. 1188 00:57:54,716 --> 00:57:55,840 Ale nie martw się o to. 1189 00:57:55,840 --> 00:57:57,340 Jedziemy do skórki z powrotem tę warstwę. 1190 00:57:57,340 --> 00:57:59,940 Okazuje się, łańcuchy mogą być dłuższy niż 8 bajtów. 1191 00:57:59,940 --> 00:58:02,310 >> I rzeczywiście, pisaliśmy już struny, hello world, 1192 00:58:02,310 --> 00:58:03,700 dłużej niż 8 bajtów. 1193 00:58:03,700 --> 00:58:06,270 Ale wrócimy do które za chwilę. 1194 00:58:06,270 --> 00:58:09,690 Ale zabrać tutaj jest następująca. 1195 00:58:09,690 --> 00:58:15,320 >> Każdy komputer ma tylko skończoną ilość pamięci i przestrzeni. 1196 00:58:15,320 --> 00:58:17,860 Można przechowywać tylko tyle pliki na komputerze Mac lub PC. 1197 00:58:17,860 --> 00:58:23,030 Można przechowywać tylko tyle programy RAM działa od razu, niekoniecznie nawet 1198 00:58:23,030 --> 00:58:26,360 z pamięci wirtualnej, ponieważ masz ograniczoną ilość pamięci RAM. 1199 00:58:26,360 --> 00:58:28,990 >> A jeśli po prostu picture-- nigdy nie otworzył laptopa 1200 00:58:28,990 --> 00:58:31,300 lub zamówić dodatkową pamięć na komputerze, 1201 00:58:31,300 --> 00:58:33,670 może nie wiedzieć, że wewnątrz komputera 1202 00:58:33,670 --> 00:58:36,590 jest coś, co wygląda trochę jak ten. 1203 00:58:36,590 --> 00:58:40,540 Więc to jest tylko wspólna firma o nazwie Crucial sprawia, że ​​pamięć RAM dla komputerów. 1204 00:58:40,540 --> 00:58:43,620 A gdzie programy RAM żyć kiedy są one uruchomione. 1205 00:58:43,620 --> 00:58:46,630 >> Więc na każdym komputerze Mac lub PC, po dwukrotnym kliknij program, a to otwiera, 1206 00:58:46,630 --> 00:58:48,921 i otwiera jakiś dokument Word czy coś takiego, 1207 00:58:48,921 --> 00:58:51,764 przechowuje je tymczasowo RAM, pamięci RAM, ponieważ szybciej 1208 00:58:51,764 --> 00:58:53,680 niż dysk twardy lub Twój dysku SSD. 1209 00:58:53,680 --> 00:58:56,600 Więc to jest po prostu gdzie programy przejść żyć, gdy są uruchomione, 1210 00:58:56,600 --> 00:58:58,060 lub gdy są używane pliki. 1211 00:58:58,060 --> 00:59:00,890 >> Więc masz rzeczy, które wyglądają jak ten wewnątrz komputera przenośnego, 1212 00:59:00,890 --> 00:59:03,320 lub nieco większe rzeczy wewnątrz pulpicie. 1213 00:59:03,320 --> 00:59:07,440 Ale kluczem jest masz tylko skończona liczba tych rzeczy. 1214 00:59:07,440 --> 00:59:11,230 I nie tylko skończoną ilość wyroby metalowe siedzi na tym biurku w prawo 1215 00:59:11,230 --> 00:59:11,730 tutaj. 1216 00:59:11,730 --> 00:59:15,920 >> Tak, na pewno, nie możemy zapisać nieskończenie długie numery. 1217 00:59:15,920 --> 00:59:19,030 A jednak, jeśli uważasz, że powrót do Szkoła, ile cyfr może 1218 00:59:19,030 --> 00:59:21,400 trzeba w prawo punktu dziesiętnego? 1219 00:59:21,400 --> 00:59:24,680 Jeśli o to chodzi, ile cyfr może masz po lewej stronie przecinka dziesiętnego? 1220 00:59:24,680 --> 00:59:26,300 Naprawdę, nieskończenie wiele. 1221 00:59:26,300 --> 00:59:30,840 >> Teraz może tylko my ludzie wiesz jak wymówić mln, 1222 00:59:30,840 --> 00:59:34,990 i miliardy, biliony, a biliardów i trylionów. 1223 00:59:34,990 --> 00:59:39,370 A ja przesuwanie granic z moich understanding-- lub my-- Rozumiem 1224 00:59:39,370 --> 00:59:41,110 numery, ale moja wymowa liczb. 1225 00:59:41,110 --> 00:59:44,720 Ale mogą się nieskończenie duże, nieskończenie wiele cyfr po lewej 1226 00:59:44,720 --> 00:59:47,050 lub na prawo od kropki dziesiętnej. 1227 00:59:47,050 --> 00:59:50,040 >> Ale komputery mają tylko skończoną ilość pamięci, 1228 00:59:50,040 --> 00:59:53,510 skończona liczba tranzystorów, A skończoną ilość żarówek wewnątrz. 1229 00:59:53,510 --> 00:59:57,350 Więc co się dzieje, gdy zabraknie miejsca? 1230 00:59:57,350 --> 00:59:59,620 Innymi słowy, jeśli wracam pamięcią do ostatniego tygodnia 1231 00:59:59,620 --> 01:00:03,160 kiedy rozmawialiśmy o numerach sami są reprezentowane w formacie binarnym, 1232 01:00:03,160 --> 01:00:05,480 załóżmy, że mamy wartość ta tutaj 8-bitowy. 1233 01:00:05,480 --> 01:00:08,290 >> I mamy siedem 1 i jednym 0. 1234 01:00:08,290 --> 01:00:10,827 I przypuśćmy, że chcemy dodać 1 do tej wartości. 1235 01:00:10,827 --> 01:00:12,410 Jest to bardzo duża liczba teraz. 1236 01:00:12,410 --> 01:00:16,610 >> To jest 254, jeśli dobrze pamiętam matematyka z ostatniego tygodnia prawo. 1237 01:00:16,610 --> 01:00:19,480 Ale co, jeśli zmienię że skrajna 0 na 1? 1238 01:00:19,480 --> 01:00:22,800 Cały szereg, od Oczywiście, staje ośmiu 1-ki. 1239 01:00:22,800 --> 01:00:24,050 Więc jesteśmy nadal dobre. 1240 01:00:24,050 --> 01:00:27,204 >> A to zapewne oznacza 255, choć w zależności od kontekstu 1241 01:00:27,204 --> 01:00:29,120 może faktycznie reprezentują liczbą ujemną. 1242 01:00:29,120 --> 01:00:31,240 Ale o tym innym razem. 1243 01:00:31,240 --> 01:00:34,220 To czuje się jak to o tak wysokie, jak mogę liczyć. 1244 01:00:34,220 --> 01:00:35,290 >> Teraz, to tylko 8 bitów. 1245 01:00:35,290 --> 01:00:38,170 A mój Mac, z pewnością, ma drogę więcej niż 8 bitów pamięci. 1246 01:00:38,170 --> 01:00:39,170 Ale to ma skończone. 1247 01:00:39,170 --> 01:00:43,230 Tak samo argument dotyczy, nawet jeśli więcej tych co na ekranie. 1248 01:00:43,230 --> 01:00:47,020 >> Ale co się stanie, jeśli jesteś przechowywania tej liczby, 255, 1249 01:00:47,020 --> 01:00:49,290 i chcesz policzyć jeden nieco wyżej? 1250 01:00:49,290 --> 01:00:51,600 Chcesz jechać z 255 do 256. 1251 01:00:51,600 --> 01:00:55,800 Problemem jest oczywiście to, że jeśli rozpocznie odliczanie od zera jak w ubiegłym tygodniu, 1252 01:00:55,800 --> 01:00:59,670 nie można liczyć tak wysokie jak 256, nie mówiąc już o 257, 1253 01:00:59,670 --> 01:01:02,584 nie mówiąc już o 258 m, ponieważ to, co dzieje się po dodaniu 1? 1254 01:01:02,584 --> 01:01:05,000 Jeśli tak stary szkole podstawowej Podejście, umieścić 1 tutaj 1255 01:01:05,000 --> 01:01:08,150 a następnie 1 plus 1 to 2, ale to naprawdę zero, nosisz 1, 1256 01:01:08,150 --> 01:01:09,695 nieść 1, przenoszenia 1. 1257 01:01:09,695 --> 01:01:12,620 Wszystkie te rzeczy, te 1, przejdź do zera. 1258 01:01:12,620 --> 01:01:17,820 I skończyć tak, jak ktoś, wskazał, a 1 na lewym skrzydle. 1259 01:01:17,820 --> 01:01:22,540 Ale wszystko można rzeczywiście zobaczyć i zmieścić się w pamięci 1260 01:01:22,540 --> 01:01:27,960 Zaledwie osiem 0, co jest do powiedzenia W pewnym momencie, gdy ciebie, komputer, 1261 01:01:27,960 --> 01:01:32,490 Próbowałem licząc wystarczająco wysokie góry, jesteś zamiar owinąć wokół, wydaje się, 1262 01:01:32,490 --> 01:01:35,850 do zera, a może nawet ujemny Liczby, które są jeszcze niższe niż zero. 1263 01:01:35,850 --> 01:01:37,260 >> A może my niby to zobaczyć. 1264 01:01:37,260 --> 01:01:39,900 Pozwólcie mi iść do przodu i pisać prawdziwy szybkie Program tutaj. 1265 01:01:39,900 --> 01:01:43,690 Pozwólcie mi iść do przodu i pisać program o nazwie przelewowy. 1266 01:01:43,690 --> 01:01:49,980 Dołącz CS50.h, m.in. średnia IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Naprawdę brakowało mi podświetlanie składni. 1268 01:01:51,730 --> 01:01:54,440 Warto więc zapisać to jako overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> A teraz int main void-- i wkrótce, będziemy 1270 01:01:57,084 --> 01:01:59,500 wrócić do wyjaśnienia, dlaczego trzymamy pisanie int main pustkę. 1271 01:01:59,500 --> 01:02:02,080 Ale teraz Zróbmy go, biorąc za pewnik. 1272 01:02:02,080 --> 01:02:06,200 Dajmy sobie int, i zainicjować go na 0. 1273 01:02:06,200 --> 01:02:11,716 >> Załóżmy następnie zrobić dla int i dostać zero-- faktycznie, zróbmy nieskończoną pętlę 1274 01:02:11,716 --> 01:02:12,590 i zobaczyć, co się dzieje. 1275 01:02:12,590 --> 01:02:22,440 Chociaż prawdą, to niech wydrukować n jest procent i, odwrotny ukośnik n, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Ale teraz, zróbmy n dostaje n oraz 1. 1277 01:02:27,200 --> 01:02:29,660 >> Tak więc, innymi słowy, na każdej iteracja tej nieskończonej pętli 1278 01:02:29,660 --> 01:02:32,550 rzućmy wartość n, w i dodać 1 do niego, a następnie 1279 01:02:32,550 --> 01:02:34,350 zapisać wynik z powrotem w n po lewej stronie. 1280 01:02:34,350 --> 01:02:37,150 I rzeczywiście, widzieliśmy składni nieco więcej tak krótko. 1281 01:02:37,150 --> 01:02:39,730 Fajna sztuczka jest natomiast pisać to wszystko na zewnątrz, 1282 01:02:39,730 --> 01:02:42,770 rzeczywiście można powiedzieć, n oraz równy 1. 1283 01:02:42,770 --> 01:02:47,480 >> A jeśli naprawdę chcesz być wyobraźnia, można powiedzieć n Plus Plus średnik. 1284 01:02:47,480 --> 01:02:50,130 Ale te dwa ostatnie są po prostu co my nazywamy cukier syntaktyczny 1285 01:02:50,130 --> 01:02:50,790 dla pierwszej rzeczy. 1286 01:02:50,790 --> 01:02:53,456 >> Pierwszą rzeczą jest bardziej wyraźne, całkowicie w porządku, całkowicie poprawne. 1287 01:02:53,456 --> 01:02:55,470 Ale to jest bardziej powszechne, powiem. 1288 01:02:55,470 --> 01:02:57,210 Więc zrobimy to za chwilę. 1289 01:02:57,210 --> 01:03:01,685 >> Załóżmy teraz dokonać przelewu, który brzmi raczej złowieszczo, kropka przepełnienie ukośnik. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Zobaczmy, n robi się dość duże. 1292 01:03:09,852 --> 01:03:11,310 Ale pomyślmy, jak duża może n dostać? 1293 01:03:11,310 --> 01:03:12,870 >> n jest int. 1294 01:03:12,870 --> 01:03:16,400 Widzieliśmy przed chwilą z wielkością Przykładem, że int jest cztery bajty. 1295 01:03:16,400 --> 01:03:22,070 Wiemy z ostatniego tygodnia, to cztery bajty 32 bity, bo 8 razy 4, to 32. 1296 01:03:22,070 --> 01:03:23,460 To będzie 4 miliardy. 1297 01:03:23,460 --> 01:03:25,802 >> I jesteśmy do 800.000. 1298 01:03:25,802 --> 01:03:28,510 To zajmie wieki liczą się tak wysokie, jak to możliwe, bym. 1299 01:03:28,510 --> 01:03:30,635 Więc mam zamiar iść do przodu, jak może niedługo 1300 01:03:30,635 --> 01:03:34,910 i uderzył sterowania C- szczerze, kontrola C, dużo, gdzie na ogół sterowania C 1301 01:03:34,910 --> 01:03:36,034 Środki anulować. 1302 01:03:36,034 --> 01:03:38,200 Niestety, ponieważ działa w chmurze, 1303 01:03:38,200 --> 01:03:41,190 Czasami chmura jest wypluwa tyle rzeczy, 1304 01:03:41,190 --> 01:03:44,180 tyle wyjście, to będzie trochę potrwać do mojego wejścia 1305 01:03:44,180 --> 01:03:45,630 aby dostać się do chmury. 1306 01:03:45,630 --> 01:03:49,240 Więc nawet jeśli uderzę Kontrola C kilka sekund temu 1307 01:03:49,240 --> 01:03:53,110 jest to z pewnością strona efekt nieskończonej pętli. 1308 01:03:53,110 --> 01:03:56,070 >> I tak w takich przypadkach jesteśmy zamiar opuścić to być. 1309 01:03:56,070 --> 01:03:59,050 I mamy zamiar dodać kolejne okno terminalu tutaj 1310 01:03:59,050 --> 01:04:03,186 z plusem, co oczywiście nie tak, ponieważ jest to wciąż myśli. 1311 01:04:03,186 --> 01:04:05,310 I idziemy do przodu i być trochę bardziej rozsądne. 1312 01:04:05,310 --> 01:04:07,768 >> Mam zamiar iść do przodu i robić to tylko skończenie wiele razy. 1313 01:04:07,768 --> 01:04:10,047 Użyjmy pętli for, których wspomniałem wcześniej. 1314 01:04:10,047 --> 01:04:10,630 Zróbmy to. 1315 01:04:10,630 --> 01:04:13,430 Daj mi jeszcze jedną zmienną int i pobiera 0. 1316 01:04:13,430 --> 01:04:17,430 i jest mniejsza niż, powiedzmy, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 A teraz pozwól mi iść do przodu i do druku z n jest procent i, przecinek n. 1318 01:04:24,010 --> 01:04:27,547 A potem to jeszcze n- potrwa wiecznie. 1319 01:04:27,547 --> 01:04:28,130 Zróbmy to. 1320 01:04:28,130 --> 01:04:30,620 >> n dostaje n razy 2. 1321 01:04:30,620 --> 01:04:34,140 Albo moglibyśmy być wyszukane i robić razy równa 2. 1322 01:04:34,140 --> 01:04:37,120 Ale powiedzmy n równa się sama, razy 2. 1323 01:04:37,120 --> 01:04:39,321 Innymi słowy, w tym Nowa wersja programu, 1324 01:04:39,321 --> 01:04:41,820 Nie chcę czekać w nieskończoność z niczym 800000 4 mld. 1325 01:04:41,820 --> 01:04:43,070 Miejmy tylko z tym skończyć. 1326 01:04:43,070 --> 01:04:44,920 >> Spójrzmy prawdzie w rzeczywistości dwukrotnie n za każdym razem. 1327 01:04:44,920 --> 01:04:47,660 Która, przypomnijmy, jest podwojenie Przeciwieństwem konieczności, oczywiście. 1328 01:04:47,660 --> 01:04:50,035 A podczas ostatniego tygodnia mamy coś znowu, i znowu, 1329 01:04:50,035 --> 01:04:52,200 i znowu, super szybki, Podwojenie na pewno 1330 01:04:52,200 --> 01:04:58,080 dostać nam od 1 do możliwie największym wartość, którą możemy liczyć się z int. 1331 01:04:58,080 --> 01:04:59,750 >> Więc zróbmy to dokładnie. 1332 01:04:59,750 --> 01:05:01,720 I będziemy wracać do tego niebawem. 1333 01:05:01,720 --> 01:05:04,180 Ale to znowu jest tak jak powtórzenie bloku w Scratch. 1334 01:05:04,180 --> 01:05:05,600 I będziesz korzystać z tego niebawem. 1335 01:05:05,600 --> 01:05:10,170 >> To po prostu oznacza liczbę od zera się, ale nie takie same, do 64. 1336 01:05:10,170 --> 01:05:14,285 I na każdej iteracji tego Pętla, po prostu zachować inkrementacji i. 1337 01:05:14,285 --> 01:05:18,990 Więc i ++ - i to ogólna konstrukcja na linii 7 jest po prostu super popularnym sposobem 1338 01:05:18,990 --> 01:05:22,290 powtarzając niektóre linie kod pewną liczbę razy. 1339 01:05:22,290 --> 01:05:23,362 Które linie kodu? 1340 01:05:23,362 --> 01:05:25,570 Te nawiasy klamrowe, jak ty może być zbierana z teraz 1341 01:05:25,570 --> 01:05:26,780 oznacza, wykonaj następujące czynności. 1342 01:05:26,780 --> 01:05:29,510 >> Jest w jak Scratch, gdy ma żółte bloki 1343 01:05:29,510 --> 01:05:32,680 i inne kolory tego rodzaju objęcia lub przytulić innych bloków. 1344 01:05:32,680 --> 01:05:34,750 To właśnie te kręcone szelki są tu robi. 1345 01:05:34,750 --> 01:05:40,200 Więc jeśli mam cię moją składnię prawy-- widać symbol marchwi w drodze C 1346 01:05:40,200 --> 01:05:42,706 to ile razy byłem próby rozwiązania tego problemu. 1347 01:05:42,706 --> 01:05:45,330 Warto więc pozbyć się tego jednego w ogóle, i zamknąć to okno. 1348 01:05:45,330 --> 01:05:46,520 I będziemy używać nowego. 1349 01:05:46,520 --> 01:05:51,980 Dokonaj przelewu, kropka ukośnik przepełnienie, Enter, wszystko w porządku, 1350 01:05:51,980 --> 01:05:53,090 wygląda źle na początku. 1351 01:05:53,090 --> 01:05:56,200 Ale bądźmy przewijanie wstecz w czasie, bo zrobił to 64 razy. 1352 01:05:56,200 --> 01:05:58,700 >> I zauważył po raz pierwszy, n wynosi 1. 1353 01:05:58,700 --> 01:06:03,110 Drugi raz, n oznacza 2, Następnie 4, a 8, a następnie 16. 1354 01:06:03,110 --> 01:06:09,450 A wydaje się, że zaraz I dostać się do około 1 mld USD, 1355 01:06:09,450 --> 01:06:12,800 gdybym podwoić go ponownie, że powinien dać mi 2 mld USD. 1356 01:06:12,800 --> 01:06:14,980 Ale okazuje się, że to prawo na zakręcie. 1357 01:06:14,980 --> 01:06:18,930 >> I tak rzeczywiście przelewa int z 1 mld 1358 01:06:18,930 --> 01:06:23,514 z grubsza ujemna 2 mld, bo liczba całkowita, 1359 01:06:23,514 --> 01:06:25,430 inaczej niż my liczbach były zakładając w zeszłym tygodniu, 1360 01:06:25,430 --> 01:06:28,397 mogą być zarówno pozytywne jak i negatywne w rzeczywistości, w komputerze. 1361 01:06:28,397 --> 01:06:30,730 I tak, co najmniej jeden z tych Bity skutecznie skradziony. 1362 01:06:30,730 --> 01:06:34,190 Tak naprawdę mamy tylko 31 bitów, lub 2 miliardów możliwych wartości. 1363 01:06:34,190 --> 01:06:38,220 >> Ale na razie, jest dość wynos wystarczy, cokolwiek te liczby są 1364 01:06:38,220 --> 01:06:42,280 a co jest matematyka, coś złego dzieje się w końcu, 1365 01:06:42,280 --> 01:06:46,980 ponieważ w końcu próbujesz permutacji bitów jeden raz za dużo. 1366 01:06:46,980 --> 01:06:51,060 I skutecznie przejść od wszystkich 1 do może wszystkie na 0, a może 1367 01:06:51,060 --> 01:06:54,260 po prostu jakiś inny wzór, który to Oczywiście, w zależności od kontekstu 1368 01:06:54,260 --> 01:06:56,342 może być interpretowana jako wartość ujemna. 1369 01:06:56,342 --> 01:06:59,300 I tak wydaje się najwyższą I może liczyć w tym konkretnym programem 1370 01:06:59,300 --> 01:07:01,210 Tylko około 1 mld USD. 1371 01:07:01,210 --> 01:07:02,760 Ale jest częściowe rozwiązanie tutaj. 1372 01:07:02,760 --> 01:07:03,480 Wiesz co? 1373 01:07:03,480 --> 01:07:07,600 >> Pozwól mi zmienić z int do długo długo. 1374 01:07:07,600 --> 01:07:10,633 I pozwól mi iść dalej tutaj i say-- zamierzam mieć 1375 01:07:10,633 --> 01:07:12,290 to zmienić na niepodpisany długo. 1376 01:07:12,290 --> 01:07:16,860 Albo, zobaczmy, nigdy nie pamiętam siebie. 1377 01:07:16,860 --> 01:07:19,920 >> Idziemy do przodu i zrobić przelew. 1378 01:07:19,920 --> 01:07:21,860 Nie, to nie o to chodzi, LLD, dziękuję. 1379 01:07:21,860 --> 01:07:23,430 Więc czasami Clang może być pomocny. 1380 01:07:23,430 --> 01:07:27,550 Nie pamiętam, co format specifier był przez długi długi. 1381 01:07:27,550 --> 01:07:28,950 >> Ale rzeczywiście, Clang mi powiedział. 1382 01:07:28,950 --> 01:07:31,570 Zielony jest jakaś dobra, wciąż oznacza, że ​​popełnił błąd. 1383 01:07:31,570 --> 01:07:33,190 To domyślając się, że miałem na myśli LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Więc pozwól mi wziąć to rada, długa długa liczba dziesiętna, z wyjątkiem tego. 1385 01:07:38,750 --> 01:07:43,190 I pozwól mi ponownie uruchomić go, kropka slash przepełnienie, Enter. 1386 01:07:43,190 --> 01:07:45,020 A teraz, co jest fajne to jest. 1387 01:07:45,020 --> 01:07:49,140 >> Gdybym przewijanie wstecz w czasie, nadal zacząć licząc w tym samym place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Wskazówki, otrzymujemy wszystko aż do 1 miliarda. 1390 01:07:54,860 --> 01:07:57,070 Ale wtedy możemy bezpiecznie dostać się do 2 mld USD. 1391 01:07:57,070 --> 01:08:01,300 >> Następnie docieramy do 4 mld euro, Następnie 8 mld, 17 mld USD. 1392 01:08:01,300 --> 01:08:03,340 I idziemy wyższe, a wyżej i wyżej. 1393 01:08:03,340 --> 01:08:05,740 W końcu to też przerwy. 1394 01:08:05,740 --> 01:08:09,350 >> Ostatecznie, z long long, która jest wartością 64-bitową, a nie 1395 01:08:09,350 --> 01:08:13,660 wartość 32-bitowy, jeśli liczyć zbyt wysokie, owinąć wokół 0. 1396 01:08:13,660 --> 01:08:16,410 A w tym przypadku stało skończyć z liczby ujemnej. 1397 01:08:16,410 --> 01:08:17,550 >> Więc jest to problem. 1398 01:08:17,550 --> 01:08:20,439 I okazuje się, że to Problem nie jest wcale tak zaawansowanych. 1399 01:08:20,439 --> 01:08:23,060 Choć mam celowo indukowane go z tymi błędami, 1400 01:08:23,060 --> 01:08:26,149 Okazuje się go widzimy niby wszystko wokół nas, a przynajmniej niektórzy z nas zrobić. 1401 01:08:26,149 --> 01:08:28,939 >> Tak więc w Lego Star Wars, jeśli kiedykolwiek grałeś w grę, 1402 01:08:28,939 --> 01:08:33,830 Okazuje się można obejść łamanie rzeczy w świecie LEGO, 1403 01:08:33,830 --> 01:08:36,640 i zbieranie monet, w istocie. 1404 01:08:36,640 --> 01:08:39,200 A jeśli kiedykolwiek grałeś Ta gra zbyt wiele czasu, 1405 01:08:39,200 --> 01:08:42,630 w tej nienazwanej osoby o nie, łączną liczbę 1406 01:08:42,630 --> 01:08:46,700 monet, które można zbierać jest, jak się wydaje, 4 mld. 1407 01:08:46,700 --> 01:08:48,240 >> Teraz, wraz z nim faktycznie zaokrąglone. 1408 01:08:48,240 --> 01:08:50,239 Więc LEGO próbował zachować rzeczy przyjazny dla użytkownika. 1409 01:08:50,239 --> 01:08:53,779 Oni tego nie zrobił dokładnie 2 do moc 32, za ostatni tydzień. 1410 01:08:53,779 --> 01:08:55,310 Ale 4000000000 jest powodem. 1411 01:08:55,310 --> 01:08:58,979 Wydaje się, na podstawie tych informacji, że LEGO, a firma, która 1412 01:08:58,979 --> 01:09:02,624 wykonany ten rzeczywisty oprogramowanie, postanowił że maksymalna liczba monet 1413 01:09:02,624 --> 01:09:04,540 użytkownik może gromadzić jest, rzeczywiście, 4000000000, 1414 01:09:04,540 --> 01:09:12,069 bo wybrali w kodzie Nie używać długo długo, jak widać, 1415 01:09:12,069 --> 01:09:16,140 ale po prostu liczbą całkowitą, niepodpisany całkowita tylko dodatnia, którego 1416 01:09:16,140 --> 01:09:18,089 Wartość maksymalna jest grubsza tym. 1417 01:09:18,089 --> 01:09:19,380 Cóż, oto kolejny zabawny. 1418 01:09:19,380 --> 01:09:23,500 Więc w cywilizacji gra, która niektórzy z was mogą być zaznajomieni z 1419 01:09:23,500 --> 01:09:26,660 Okazuje się, że lata temu Był to błąd w tej grze, zgodnie z którą 1420 01:09:26,660 --> 01:09:28,750 Jeśli grałeś rolę Gandhiego w grze, 1421 01:09:28,750 --> 01:09:34,020 Zamiast niego jest bardzo pacyfistą, zamiast tego był bardzo, bardzo 1422 01:09:34,020 --> 01:09:36,399 agresywne, w pewnych okolicznościach. 1423 01:09:36,399 --> 01:09:40,529 W szczególności, sposób, że cywilizacja Prace, że jeśli gracz, 1424 01:09:40,529 --> 01:09:44,680 przyjęcia demokracji, twój agresywność wynik dostaje 1425 01:09:44,680 --> 01:09:48,130 zmniejszana o dwa, więc minus minus, a następnie minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Więc odjąć 2 od rzeczywisty iteracji. 1427 01:09:50,569 --> 01:09:56,650 Niestety, jeśli Iteracja jest Początkowo 1 i odjąć od niej 2 1428 01:09:56,650 --> 01:09:59,050 po przyjęciu demokracji jak Gandhi tutaj może 1429 01:09:59,050 --> 01:10:02,200 zrobili, bo było bardzo passive-- 1 w skali agresywności. 1430 01:10:02,200 --> 01:10:04,830 Ale jeśli przyjmuje demokrację, a następnie idzie od 1 do negatywnej 1. 1431 01:10:04,830 --> 01:10:11,470 >> Niestety, były one za pomocą cyfr bez znaku, 1432 01:10:11,470 --> 01:10:15,400 co oznacza, że ​​traktuje nawet ujemna numery jakby były one pozytywne. 1433 01:10:15,400 --> 01:10:19,780 I okazuje się, że Pozytywny odpowiednik ujemna 1, 1434 01:10:19,780 --> 01:10:23,480 w typowych programów komputerowych, jest 255. 1435 01:10:23,480 --> 01:10:27,250 Więc jeśli Gandhi przyjmuje demokrację, a zatem 1436 01:10:27,250 --> 01:10:32,470 Wynik jego agresywność spadła, faktycznie rolkach wokół 255 1437 01:10:32,470 --> 01:10:35,470 i czyni go najbardziej agresywną postacią w grze. 1438 01:10:35,470 --> 01:10:36,930 Więc można wygooglować się w tej sprawie. 1439 01:10:36,930 --> 01:10:39,380 I to było rzeczywiście przypadkowe błąd programowania, 1440 01:10:39,380 --> 01:10:43,010 ale to weszło dość lore tej pory. 1441 01:10:43,010 --> 01:10:44,360 >> To wszystko, co zabawne i słodkie. 1442 01:10:44,360 --> 01:10:47,760 Bardziej przerażające jest, gdy rzeczywista Urządzenia rzeczywistego świata, a nie gry, 1443 01:10:47,760 --> 01:10:48,820 mają te same błędy. 1444 01:10:48,820 --> 01:10:54,500 W rzeczywistości, po prostu rok temu artykuł przyszedł się o Boeing 787. 1445 01:10:54,500 --> 01:10:56,850 >> A artykuł na początku Rzut oka brzmi trochę tajniki. 1446 01:10:56,850 --> 01:11:01,480 Ale powiedział, oprogramowanie Luka w Boeinga 1447 01:11:01,480 --> 01:11:04,790 Nowa 787 Dreamliner jet ma potencjał do spowodowania pilotów 1448 01:11:04,790 --> 01:11:07,220 stracić kontrolę samolot, prawdopodobnie 1449 01:11:07,220 --> 01:11:11,750 w locie, urzędnicy FAA ostrzegł linie niedawno. 1450 01:11:11,750 --> 01:11:14,520 To było ustalenie że model 787 1451 01:11:14,520 --> 01:11:19,770 Samolot, który został zasilany nieprzerwanie przez 248 dni 1452 01:11:19,770 --> 01:11:24,880 może stracić wszystko prądu zmiennego AC, Moc elektryczna w związku z generatora 1453 01:11:24,880 --> 01:11:28,892 Jednostki sterujące, GCUs jednocześnie nie wchodząc w tryb awaryjny. 1454 01:11:28,892 --> 01:11:29,850 To coś w rodzaju utraty mnie. 1455 01:11:29,850 --> 01:11:35,390 Ale notatka stwierdził, OK, teraz mam, że warunek został spowodowany przez oprogramowanie 1456 01:11:35,390 --> 01:11:38,590 przeciwdziałać wewnętrznego sterowanie generatorem 1457 01:11:38,590 --> 01:11:44,860 Jednostki, które wyleje się po 248 dni ciągłej mocy. 1458 01:11:44,860 --> 01:11:47,070 Jesteśmy wydawania tego UWAGA Aby zapobiec utracie 1459 01:11:47,070 --> 01:11:49,300 wszystkim AC elektryczne zasilanie, co mogłoby spowodować 1460 01:11:49,300 --> 01:11:50,980 utratę kontroli nad samolotem. 1461 01:11:50,980 --> 01:11:55,380 >> Tak więc, dosłownie istnieje pewna liczba całkowita lub jakiś odpowiednik typ danych, 1462 01:11:55,380 --> 01:11:57,960 wykorzystywane w oprogramowaniu w rzeczywistym samolocie 1463 01:11:57,960 --> 01:12:00,756 że jeśli utrzymać samolot na tyle długo, co najwidoczniej 1464 01:12:00,756 --> 01:12:03,880 może być w przypadku, jeśli jesteś po prostu działa je nieustannie i nigdy nie odłączając 1465 01:12:03,880 --> 01:12:06,810 Twój samolot, jak się wydaje, albo pozwalając jej baterie umrzeć 1466 01:12:06,810 --> 01:12:09,840 w końcu liczy się i do góry i do góry i do góry i do góry i do góry. 1467 01:12:09,840 --> 01:12:12,150 >> A przy natury, skończoną ilość pamięci 1468 01:12:12,150 --> 01:12:15,880 wyleje, wycofywanie się zero lub niektóre ujemna wartość, 1469 01:12:15,880 --> 01:12:19,920 efektem ubocznym, który jest przerażająco prawdziwa rzeczywistość 1470 01:12:19,920 --> 01:12:23,970 że samolot może być konieczne zostać uruchomiony ponownie, skutecznie, 1471 01:12:23,970 --> 01:12:27,290 lub może spaść, co gorsza, jak leci. 1472 01:12:27,290 --> 01:12:29,230 Więc tego rodzaju problemów nadal są z nami, 1473 01:12:29,230 --> 01:12:33,130 even-- było to 2015 artykuł Tym bardziej przerażające 1474 01:12:33,130 --> 01:12:36,100 kiedy nie koniecznie zrozumienie, docenienie, czy przewidywania 1475 01:12:36,100 --> 01:12:38,640 te rodzaje błędów. 1476 01:12:38,640 --> 01:12:42,030 >> Tak więc okazuje się, jest jeszcze jedna Źle o reprezentacji danych. 1477 01:12:42,030 --> 01:12:47,080 Okazuje się, że nawet pływaki są rodzaj wadliwa, ponieważ pływa też 1478 01:12:47,080 --> 01:12:51,440 Zaproponowałem są 32 bity lub może 64 jeśli używasz podwójne. 1479 01:12:51,440 --> 01:12:53,070 Ale to jeszcze skończona. 1480 01:12:53,070 --> 01:12:57,070 >> I połów jest to, że jeśli potrafisz umieścić nieskończoną ilość numerów 1481 01:12:57,070 --> 01:12:59,460 po przecinku, Nie ma sposób 1482 01:12:59,460 --> 01:13:02,690 może reprezentować wszystkie możliwe Liczby, które były nauczane 1483 01:13:02,690 --> 01:13:04,990 w szkole może istnieć w świecie. 1484 01:13:04,990 --> 01:13:08,870 Komputer w istocie, musi wybrać podzbiór tych numerów 1485 01:13:08,870 --> 01:13:10,200 reprezentować dokładnie. 1486 01:13:10,200 --> 01:13:12,450 >> Teraz komputer może okrągłe może trochę, 1487 01:13:12,450 --> 01:13:17,900 i może zezwolić na około sklepie dowolna liczba może chcieć. 1488 01:13:17,900 --> 01:13:20,940 Ale tylko intuicyjnie, jeśli ciebie mają skończoną liczbę bitów, 1489 01:13:20,940 --> 01:13:24,560 można je tylko permutacji na tak wiele sposobów skończonych. 1490 01:13:24,560 --> 01:13:26,570 Więc nie można ewentualnie operują na liczbach skończonych 1491 01:13:26,570 --> 01:13:29,880 permutacji bitów, wzory zer i jedynek, 1492 01:13:29,880 --> 01:13:32,940 do reprezentowania nieskończona Liczba numerów, 1493 01:13:32,940 --> 01:13:37,370 co sugeruje, że komputery mogą bardzo dobrze leżeć nam czasem. 1494 01:13:37,370 --> 01:13:38,770 >> W rzeczywistości, zróbmy to. 1495 01:13:38,770 --> 01:13:41,239 Pozwól mi wrócić do CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Pozwólcie mi iść do przodu i stworzyć mały program 1497 01:13:43,030 --> 01:13:47,940 nazywa Nieprecyzyjność, aby pokazać, że komputery są rzeczywiście niedokładne. 1498 01:13:47,940 --> 01:13:51,910 >> I pozwól mi iść do przodu i zacząć część tego kodu z wcześniej 1499 01:13:51,910 --> 01:13:53,830 a teraz po prostu wykonaj następujące czynności. 1500 01:13:53,830 --> 01:14:03,640 Pozwólcie mi iść do przodu i zrobić printf procent f, backslash n, 1 dzieli się przez 10. 1501 01:14:03,640 --> 01:14:07,430 Innymi słowy, niech nurkować głębiej 1/10, podobnie jak 1 i dzieli się przez 10. 1502 01:14:07,430 --> 01:14:09,760 Z pewnością, komputer może stanowić 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Więc idź naprzód i dokonać niedokładności. 1504 01:14:13,620 --> 01:14:14,390 Zobaczmy. 1505 01:14:14,390 --> 01:14:16,210 Format określa typ double. 1506 01:14:16,210 --> 01:14:18,160 Ale argument typu int. 1507 01:14:18,160 --> 01:14:19,040 Co się dzieje? 1508 01:14:19,040 --> 01:14:21,970 >> Och, interesujący, więc jest to lekcja sprzed. 1509 01:14:21,970 --> 01:14:26,050 Mówię, hej, komputer pokaż mi pływak z procentami f. 1510 01:14:26,050 --> 01:14:28,200 Ale daję mu 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Tak więc okazuje się, można to naprawić to na kilka sposobów. 1512 01:14:31,120 --> 01:14:38,430 >> może po prostu włączyć jeden do 1,0, a 10 do 10,0, co rzeczywiście 1513 01:14:38,430 --> 01:14:42,390 mają wpływ na konwersję je pod floats-- wciąż z nadzieją 1514 01:14:42,390 --> 01:14:43,180 ten sam numer. 1515 01:14:43,180 --> 01:14:45,880 A okazuje się, że coś zobaczymy ponownie przed długo. 1516 01:14:45,880 --> 01:14:47,170 Można oddać numery. 1517 01:14:47,170 --> 01:14:49,880 >> Można za pomocą tego nawias Wyrażenie, można powiedzieć, 1518 01:14:49,880 --> 01:14:52,560 hej, komputer, weź to 10, co wiem, jest int. 1519 01:14:52,560 --> 01:14:54,660 Ale traktować go, proszę, jakby to pływak. 1520 01:14:54,660 --> 01:14:56,680 Ale to czuje się niepotrzebnie skomplikowane. 1521 01:14:56,680 --> 01:14:59,040 >> Dla naszych celów dzisiaj niech po prostu dosłownie 1522 01:14:59,040 --> 01:15:02,700 umożliwiają ich zmiennoprzecinkowych z przecinkiem, jak ten. 1523 01:15:02,700 --> 01:15:07,060 Pozwólcie mi iść do przodu i ponownie, aby nieścisłości, dobry, kropka ukośnik 1524 01:15:07,060 --> 01:15:08,870 nieścisłości, enter. 1525 01:15:08,870 --> 01:15:10,990 OK, jesteśmy dobrze wyglądać. 1526 01:15:10,990 --> 01:15:18,194 >> 1 podzielone przez 10, zgodnie z moim Mac tu jest, rzeczywiście, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Teraz, uczono mnie w szkole nie powinna być nieskończona liczba 0-tych. 1528 01:15:21,360 --> 01:15:23,151 Warto więc przynajmniej spróbować aby zobaczyć niektóre z nich. 1529 01:15:23,151 --> 01:15:26,770 Okazuje się, że jest trochę printf hodowcy wciąż nie używaliśmy. 1530 01:15:26,770 --> 01:15:30,890 Okazuje się, że nie trzeba określać po prostu procent f, lub po prostu procent i. 1531 01:15:30,890 --> 01:15:33,830 Rzeczywiście można określić Niektóre opcje tutaj kontrolne. 1532 01:15:33,830 --> 01:15:36,470 >> Konkretnie, jadę powiedzieć, hej, printf, 1533 01:15:36,470 --> 01:15:39,660 faktycznie pokazują mi 10 miejsc po przecinku. 1534 01:15:39,660 --> 01:15:40,820 Tak to wygląda trochę dziwnie. 1535 01:15:40,820 --> 01:15:42,845 Ale mówisz procent, Kropka, ile numerów 1536 01:15:42,845 --> 01:15:44,970 chcesz zobaczyć po punkt dziesiętny, a następnie f 1537 01:15:44,970 --> 01:15:48,340 do mieszkania, tylko dlatego, że co mówi dokumentacja. 1538 01:15:48,340 --> 01:15:50,080 Pozwólcie mi iść do przodu i zapisz to. 1539 01:15:50,080 --> 01:15:52,460 >> I zauważ też, Dostaję zmęczony przepisywania rzeczy. 1540 01:15:52,460 --> 01:15:55,900 Więc ja tylko ustanowienie i strzałka w dół na moje klucze tutaj. 1541 01:15:55,900 --> 01:15:58,710 A jeśli wciąż uderzając w górę, Można zobaczyć wszystkie polecenia 1542 01:15:58,710 --> 01:16:01,090 że zrobiłem, lub nieprawidłowo wykonane. 1543 01:16:01,090 --> 01:16:04,630 >> I zamierzam iść do przodu i teraz faktycznie nie używać, że widocznie. 1544 01:16:04,630 --> 01:16:11,416 Bądź niedokładności, kropka slash imprecision-- tak 1545 01:16:11,416 --> 01:16:13,290 czego uczono mnie w Szkoła sprawdza. 1546 01:16:13,290 --> 01:16:19,010 Nawet gdybym je drukować do 10 po przecinku umieszcza go rzeczywiście jest 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Ale wiesz co? 1548 01:16:19,840 --> 01:16:21,150 >> Chodźmy trochę chciwy. 1549 01:16:21,150 --> 01:16:23,990 Powiedzmy, na przykład, pokaż mi 55 wskazuje po przecinku. 1550 01:16:23,990 --> 01:16:26,160 Załóżmy, naprawdę wziąć to zaprogramować się na przejażdżkę. 1551 01:16:26,160 --> 01:16:31,170 Pozwól mi przerobić go z make nieścisłości, kropka ukośnik, nieścisłości. 1552 01:16:31,170 --> 01:16:32,390 >> I jedziemy. 1553 01:16:32,390 --> 01:16:34,420 Twoje dzieciństwo było kłamstwem. 1554 01:16:34,420 --> 01:16:48,410 Wydaje się, że 1 podzielone przez 10 rzeczywiście 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Co się dzieje? 1556 01:16:49,740 --> 01:16:53,360 Cóż, jak się okazuje, jeśli rodzaj spojrzeć na tyle daleko w bazowy 1557 01:16:53,360 --> 01:16:55,950 reprezentacja tego liczba, to faktycznie 1558 01:16:55,950 --> 01:17:00,400 nie jest dokładnie 1/10 lub 0,1 nieskończenie wiele zer. 1559 01:17:00,400 --> 01:17:01,630 Teraz, dlaczego tak jest? 1560 01:17:01,630 --> 01:17:06,250 >> Cóż, nawet jeśli jest to proste Numer do nas ludzi, 1 dzieli się przez 10, 1561 01:17:06,250 --> 01:17:10,910 to wciąż jeden z nieskończenie wiele Liczby, które moglibyśmy wymyślić. 1562 01:17:10,910 --> 01:17:14,490 Ale może stanowić tylko komputer skończenie wiele tak numery. 1563 01:17:14,490 --> 01:17:18,710 I tak skutecznie, co Komputer pokazuje nam jest jego najbliższym 1564 01:17:18,710 --> 01:17:22,940 przybliżeniem do liczby chcemy wierzyć jest 1/10, 1565 01:17:22,940 --> 01:17:27,760 czy naprawdę 0,10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Przeciwnie, jednak, to jest tak blisko, jak można dostać. 1567 01:17:30,425 --> 01:17:32,300 I rzeczywiście, jeśli spojrzeć pod maską 1568 01:17:32,300 --> 01:17:37,050 jak tu jesteśmy, patrząc 55 cyfr po przecinku, 1569 01:17:37,050 --> 01:17:39,990 faktycznie zobaczyć, że rzeczywistość. 1570 01:17:39,990 --> 01:17:42,610 Teraz tak na marginesie, jeśli masz kiedykolwiek widział movie-- 1571 01:17:42,610 --> 01:17:45,780 Większość z was zapewne haven't-- jednak Superman 3 laty, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor zasadniczo wykorzystała tę Rzeczywistość w jego towarzystwie ukraść dużo 1573 01:17:49,500 --> 01:17:53,500 frakcji i ułamkach grosze, ponieważ company-- ile pamiętam, 1574 01:17:53,500 --> 01:17:57,210 to było while-- był zasadniczo wyrzucać wszystko, co nie pasuje 1575 01:17:57,210 --> 01:17:58,790 pod pojęciem centów. 1576 01:17:58,790 --> 01:18:01,480 >> Ale jeśli dodać do tych wszystkich malutkie, malutkie, malutkie numery znowu, 1577 01:18:01,480 --> 01:18:04,960 i znowu, i znowu, można, jak w jego sprawa, zrobić dobre kwotę pieniędzy. 1578 01:18:04,960 --> 01:18:08,010 >> Ten sam pomysł został oszukany przez nowsza, ale teraz starszy 1579 01:18:08,010 --> 01:18:10,500 Film o nazwie Office Space, gdzie faceci w tym filmie, 1580 01:18:10,500 --> 01:18:13,501 zrobił to samo, wkręca go całkowicie, skończyło się tak za dużo 1581 01:18:13,501 --> 01:18:14,666 pieniądze na koncie bankowym. 1582 01:18:14,666 --> 01:18:15,800 To wszystko było bardzo podejrzane. 1583 01:18:15,800 --> 01:18:19,290 A na koniec dnia niedokładność jest wszędzie wokół nas. 1584 01:18:19,290 --> 01:18:22,240 >> I tak też może być przerażająco sprawę. 1585 01:18:22,240 --> 01:18:25,590 Okazuje się, że Superman 3 i biurowe na bok, istnieje 1586 01:18:25,590 --> 01:18:28,460 może być jakaś bardzo realne konsekwencje świata 1587 01:18:28,460 --> 01:18:32,290 realiów nieprecyzyjne przedstawieniem danych 1588 01:18:32,290 --> 01:18:34,770 że nawet my, ludzie, do Ten dzień nie koniecznie 1589 01:18:34,770 --> 01:18:38,230 zrozumieć, jak powinniśmy, czy zapamiętać tak często, jak powinniśmy. 1590 01:18:38,230 --> 01:18:42,950 I rzeczywiście, poniższy klip jest od spojrzeć na niektóre bardzo realnym świecie 1591 01:18:42,950 --> 01:18:47,730 Konsekwencje tego, co się dzieje, jeśli nie doceniają, że niedokładności 1592 01:18:47,730 --> 01:18:50,065 może się zdarzyć w reprezentacji liczb. 1593 01:18:50,065 --> 01:18:51,300 >> [ODTWARZANIE] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, My wszyscy przychodzą do zaakceptowania często frustrujące problemy 1595 01:18:55,620 --> 01:19:00,310 iść z them-- robaki, wirusy, i usterki oprogramowania, 1596 01:19:00,310 --> 01:19:03,130 dla małych ceny do zapłaty dla wygody. 1597 01:19:03,130 --> 01:19:07,800 Ale w zaawansowanej technologii i wysokiej prędkości zastosowania militarne i programu kosmicznego, 1598 01:19:07,800 --> 01:19:12,800 najmniejszy problem może zostać powiększony do katastrofy. 1599 01:19:12,800 --> 01:19:18,900 >> W dniu 4 czerwca 1996 roku, naukowcy przygotowane uruchomienie bezzałogowy Ariane 5 rakietę. 1600 01:19:18,900 --> 01:19:21,220 To niósł naukowe satelity zaprojektowane 1601 01:19:21,220 --> 01:19:24,600 ustalić dokładnie, w jaki sposób Pole magnetyczne oddziałuje Ziemi 1602 01:19:24,600 --> 01:19:27,410 z wiatrów słonecznych. 1603 01:19:27,410 --> 01:19:30,800 Rakieta została zbudowana na Europejska Agencja Kosmiczna, 1604 01:19:30,800 --> 01:19:34,370 i podniósł się ze swojego zakładu na wybrzeżu Gujany Francuskiej. 1605 01:19:34,370 --> 01:19:37,540 >> -Na Około 37 sekund na język lot, po raz pierwszy 1606 01:19:37,540 --> 01:19:39,270 Zauważyłem coś się dzieje źle. 1607 01:19:39,270 --> 01:19:42,250 Dysze obrotowe zostały w sposób tak naprawdę nie powinno. 1608 01:19:42,250 --> 01:19:46,580 Około 40 sekundach lotu, Oczywiste jest, że pojazd był w tarapatach. 1609 01:19:46,580 --> 01:19:48,850 >> I wtedy zrobili decyzja, aby je zniszczyć. 1610 01:19:48,850 --> 01:19:52,780 Oficer bezpieczeństwa zasięg, z olbrzymie wnętrzności, nacisnął guzik, 1611 01:19:52,780 --> 01:19:58,150 wysadzili rakietę, zanim będzie mógł stanowić zagrożenie dla bezpieczeństwa publicznego. 1612 01:19:58,150 --> 01:20:01,060 >> -To Było panieńskie wyprawa na Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 A jego zniszczenie trwało miejsce ze względu na wadę 1614 01:20:03,960 --> 01:20:05,822 wbudowane w oprogramowanie rakiety. 1615 01:20:05,822 --> 01:20:08,280 -The Problem na Ariane był że nie był to numer 1616 01:20:08,280 --> 01:20:10,600 Wymagane 64 bity wyrazić. 1617 01:20:10,600 --> 01:20:13,590 I chcieli przekształcić go na liczbę 16-bitową. 1618 01:20:13,590 --> 01:20:15,610 Zakładali oni, że Numer nie szło 1619 01:20:15,610 --> 01:20:20,980 być bardzo duże, że większość z tych, cyfry w szeregu 64-bitowe są zerami. 1620 01:20:20,980 --> 01:20:22,440 Mylili się. 1621 01:20:22,440 --> 01:20:25,060 >> -The Niezdolność jednego program do zaakceptowania 1622 01:20:25,060 --> 01:20:29,510 rodzaj liczby generowane przez inna była u podstaw niepowodzenia. 1623 01:20:29,510 --> 01:20:34,350 Rozwój oprogramowania stał się bardzo kosztowne częścią nowej technologii. 1624 01:20:34,350 --> 01:20:38,140 Rakieta Ariane były bardzo sukces, tak oprogramowania 1625 01:20:38,140 --> 01:20:41,550 stworzony przez to także stosowane w Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -The Podstawowym problemem było to, że Ariane 5 był szybszy, przyspieszone szybciej. 1627 01:20:47,940 --> 01:20:51,450 I oprogramowanie nie miał stanowiły, że. 1628 01:20:51,450 --> 01:20:55,060 >> -The Zniszczenie rakiety była ogromna katastrofa finansowa, 1629 01:20:55,060 --> 01:20:58,790 Wszystko z powodu błędu oprogramowania minut. 1630 01:20:58,790 --> 01:21:01,210 Ale to nie był pierwszy Problemy konwersji danych czasowych 1631 01:21:01,210 --> 01:21:04,820 był nękany nowoczesną technologię rakietową. 1632 01:21:04,820 --> 01:21:08,050 >> -W 1991, przy starcie pierwszej wojny w Zatoce, 1633 01:21:08,050 --> 01:21:10,570 Patriot Missile doświadczył podobnego rodzaju 1634 01:21:10,570 --> 01:21:12,800 problem konwersji liczby. 1635 01:21:12,800 --> 01:21:16,090 I w rezultacie, 28 osób, 28 amerykańskich żołnierzy, 1636 01:21:16,090 --> 01:21:19,080 zginęło, a około 100 rannych, 1637 01:21:19,080 --> 01:21:22,780 gdy Patriot, która miała w celu ochrony przed przychodzących scuds, 1638 01:21:22,780 --> 01:21:25,830 udało się wystrzelić pocisk. 1639 01:21:25,830 --> 01:21:31,670 >> -Gdy Irak najechał na Kuwejt i Ameryce rozpoczęła Pustynna Burza na początku 1991 roku, 1640 01:21:31,670 --> 01:21:35,780 baterie rakiet Patriot zostały rozmieszczone do ochrony Arabii Saudyjskiej i Izraela 1641 01:21:35,780 --> 01:21:39,230 z irackich rakiet Scud ataków. 1642 01:21:39,230 --> 01:21:43,810 Patriot jest amerykańskim średniego zasięgu Powierzchnia do systemu powietrznego, wyprodukowany 1643 01:21:43,810 --> 01:21:45,770 przez firmę Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -The Wielkość przechwytujących Patriot Sam jest o około 20 stóp długości. 1645 01:21:52,340 --> 01:21:55,230 I waży około 2000 funtów. 1646 01:21:55,230 --> 01:21:59,320 A to niesie głowicę około, Myślę, że to mniej więcej 150 funtów. 1647 01:21:59,320 --> 01:22:03,930 A sama głowica jest wysoki wybuchowa, która 1648 01:22:03,930 --> 01:22:07,330 zawiera fragmenty wokół niego. 1649 01:22:07,330 --> 01:22:11,680 Obudowa głowicy ma zaprojektowane tak, aby działać jak śrutem. 1650 01:22:11,680 --> 01:22:14,110 >> -The Pociski są prowadzone cztery za kontener, 1651 01:22:14,110 --> 01:22:17,130 i są transportowane przez naczepy. 1652 01:22:17,130 --> 01:22:24,930 >> -The System Patriot antyrakietowa sięga co najmniej 20 lat. 1653 01:22:24,930 --> 01:22:28,420 Pierwotnie był on przeznaczony jako rakiet obrony powietrznej 1654 01:22:28,420 --> 01:22:30,720 zestrzelić samoloty wroga. 1655 01:22:30,720 --> 01:22:34,500 W pierwszej wojny w Zatoce, gdy przyszła wojna wraz, 1656 01:22:34,500 --> 01:22:39,745 Armia chciała użyć go do zestrzelić scuds, a nie samoloty. 1657 01:22:39,745 --> 01:22:43,620 >> Irackie lotnictwo było nie jest tak wielkim problemem. 1658 01:22:43,620 --> 01:22:46,670 Ale armia martwi scuds. 1659 01:22:46,670 --> 01:22:50,170 I tak próbowali uaktualnić patriotą. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Wroga pocisk porusza się Mach 5 1661 01:22:52,800 --> 01:22:55,830 miał być wystarczająco trudne. 1662 01:22:55,830 --> 01:22:58,490 Ale kiedy Patriot został przewieziony do użytku, 1663 01:22:58,490 --> 01:23:02,860 Armia nie było świadome Iracki modyfikacje, które wykonane 1664 01:23:02,860 --> 01:23:05,930 ich scuds prawie niemożliwe do trafienia. 1665 01:23:05,930 --> 01:23:10,740 >> -Co Się stało, że jest scuds wchodzili były niestabilne. 1666 01:23:10,740 --> 01:23:11,692 Zostali chwieje. 1667 01:23:11,692 --> 01:23:14,910 Powodem tego było Irakijczycy, aby 1668 01:23:14,910 --> 01:23:18,280 dostać 600 kilometrów z 300 kilometr 1669 01:23:18,280 --> 01:23:21,700 Przedział rakiet, wziął ciężar z przodu głowicy. 1670 01:23:21,700 --> 01:23:23,390 Zrobili głowica lżejsze. 1671 01:23:23,390 --> 01:23:27,330 >> Więc teraz jest Patriot starając się przyjść na Scud. 1672 01:23:27,330 --> 01:23:30,230 I większość czasu, Przeważająca większość czasu, 1673 01:23:30,230 --> 01:23:32,940 byłoby to po prostu latać przez Scud. 1674 01:23:32,940 --> 01:23:37,260 Po operatorów systemów Patriot realizowane Patriot chybiła celu, 1675 01:23:37,260 --> 01:23:41,690 oni zdetonował głowicę Patriota za aby uniknąć ewentualnych strat jeśli to 1676 01:23:41,690 --> 01:23:44,570 pozwolono upaść na ziemię. 1677 01:23:44,570 --> 01:23:48,790 >> -To Było to, co większość ludzi widziało, te wielkie kule ognia na niebie, 1678 01:23:48,790 --> 01:23:54,550 i tak źle przechwytuje głowic Scud. 1679 01:23:54,550 --> 01:23:56,630 >> -Mimo W nocy nieba, pojawiła Patriots 1680 01:23:56,630 --> 01:24:00,370 być z powodzeniem niszcząc Scuds na Dhahran, 1681 01:24:00,370 --> 01:24:03,360 nie mogło być mowy o pomyłce o jego wydajności. 1682 01:24:03,360 --> 01:24:07,970 Tam, system radarowy Patriota za straciłem przychodzących Scud, 1683 01:24:07,970 --> 01:24:10,721 i nigdy nie rozpoczęła ze względu do wada oprogramowania. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Było Izraelczyków, którzy po raz pierwszy odkryta że już system został włączony, 1686 01:24:18,940 --> 01:24:22,690 im większa jest różnica czasu się, ze względu na dobę osadzony 1687 01:24:22,690 --> 01:24:24,810 w komputerze systemu. 1688 01:24:24,810 --> 01:24:28,210 >> -O Dwa tygodnie przed tragedia w Dhahran, 1689 01:24:28,210 --> 01:24:30,770 Izraelczycy zgłaszane Departament Obrony 1690 01:24:30,770 --> 01:24:32,590 że system tracił czasu. 1691 01:24:32,590 --> 01:24:35,360 Po około ośmiu godzinach lub biegania, zauważyli, że system 1692 01:24:35,360 --> 01:24:37,720 stawało się znacznie mniej dokładne. 1693 01:24:37,720 --> 01:24:41,900 Departament Obrony odpowiedział informując wszystkich baterii Patriot 1694 01:24:41,900 --> 01:24:44,950 aby nie pozostawić systemy od dłuższego czasu. 1695 01:24:44,950 --> 01:24:49,160 Nigdy nie powiedział, co dawno was-- osiem godzin, 10 godzin, 1000 godzin. 1696 01:24:49,160 --> 01:24:51,360 Nikt nie wiedział. 1697 01:24:51,360 --> 01:24:53,380 >> -The Baterii Patriot stacjonował w koszarach 1698 01:24:53,380 --> 01:24:58,350 w Dhahran i jego wadliwe wewnętrzne Zegar był na ponad 100 godzin 1699 01:24:58,350 --> 01:25:01,670 w nocy z 25 lutego. 1700 01:25:01,670 --> 01:25:05,917 >> -To Śledzone czasu z dokładnością około jednej dziesiątej sekundy. 1701 01:25:05,917 --> 01:25:08,000 Teraz jedna dziesiąta sekundy Jest to ciekawy numer, 1702 01:25:08,000 --> 01:25:11,920 ponieważ nie może być wyrażona binarnie dokładnie, co 1703 01:25:11,920 --> 01:25:16,820 oznacza, że ​​nie może być dokładnie wyrażony w każdym nowoczesnym komputerze cyfrowym. 1704 01:25:16,820 --> 01:25:18,540 Trudno w to uwierzyć. 1705 01:25:18,540 --> 01:25:21,210 >> Jednak wykorzystać jako przykład. 1706 01:25:21,210 --> 01:25:23,540 Weźmy liczbę jedną trzecią. 1707 01:25:23,540 --> 01:25:27,350 Jedna trzecia nie może być wyrażoną w postaci dziesiętnej dokładnie. 1708 01:25:27,350 --> 01:25:32,080 Jedna trzecia jest 0,333 trwa od nieskończoności. 1709 01:25:32,080 --> 01:25:36,480 >> Nie ma sposobu, aby to zrobić z dokładność w systemie dziesiętnym. 1710 01:25:36,480 --> 01:25:39,560 To jest dokładnie ten rodzaj problemu które miało miejsce w Patriot. 1711 01:25:39,560 --> 01:25:44,100 Im dłużej system ran, The gorszy błąd czasu stał. 1712 01:25:44,100 --> 01:25:48,890 >> -Po 100 godzin pracy, Błąd w czasie tylko około jednej trzeciej 1713 01:25:48,890 --> 01:25:50,600 sekundy. 1714 01:25:50,600 --> 01:25:54,210 Jednak jeśli chodzi o ukierunkowanych na pocisk porusza się Mach 5, 1715 01:25:54,210 --> 01:25:58,710 Wynikało to w śledzeniu Błąd z ponad 600 metrów. 1716 01:25:58,710 --> 01:26:02,120 Byłby to błąd krytyczny dla żołnierzy na tym, co 1717 01:26:02,120 --> 01:26:08,940 stało to było uruchomienie Scud wykryte przez satelity wczesnego ostrzegania 1718 01:26:08,940 --> 01:26:12,860 i wiedzieli, że był Scud nadchodzi w ich ogólnym kierunku. 1719 01:26:12,860 --> 01:26:15,320 Nie wiem, gdzie to nastąpi. 1720 01:26:15,320 --> 01:26:18,250 >> -To Był już do radaru Składnik systemu Patriot 1721 01:26:18,250 --> 01:26:23,190 broniąc Dhahran do zlokalizowania i utrzymać utwór z nadchodzącego wroga pocisków. 1722 01:26:23,190 --> 01:26:24,609 >> -The Radar był bardzo inteligentny. 1723 01:26:24,609 --> 01:26:26,650 Byłoby to rzeczywiście śledzić pozycja Scud, 1724 01:26:26,650 --> 01:26:30,350 a następnie przewidzieć, gdzie prawdopodobnie będzie następnym razem radar wysłany 1725 01:26:30,350 --> 01:26:31,420 Impuls na zewnątrz. 1726 01:26:31,420 --> 01:26:33,110 To był nazywany bramą zasięgu. 1727 01:26:33,110 --> 01:26:37,660 >> -Więc Po Patriot postanawia ma wystarczająco dużo czasu, 1728 01:26:37,660 --> 01:26:42,450 przeszedł wrócić i sprawdzić następny lokalizacja dla tego wykrytego obiektu, 1729 01:26:42,450 --> 01:26:43,600 wraca. 1730 01:26:43,600 --> 01:26:48,650 Więc kiedy wrócił do złego miejsce, to wtedy nie widzi obiekt. 1731 01:26:48,650 --> 01:26:52,160 I postanawia, że ​​nie ma Celem było fałszywe wykrywanie, 1732 01:26:52,160 --> 01:26:53,930 i traci utwór. 1733 01:26:53,930 --> 01:26:57,030 >> -The Przychodzące Scud zniknął z ekranu radaru. 1734 01:26:57,030 --> 01:27:00,260 I sekund później, uderzył w koszarach. 1735 01:27:00,260 --> 01:27:06,150 Scud zginęło 28, a był to ostatni jeden zwolniony podczas pierwszej wojny w Zatoce. 1736 01:27:06,150 --> 01:27:11,960 >> Niestety, uaktualnione oprogramowanie Dhahran przybył następnego dnia. 1737 01:27:11,960 --> 01:27:14,930 Błąd oprogramowania miał ustalono, zamknięcie 1738 01:27:14,930 --> 01:27:19,806 jeden rozdział w niespokojnych Historia rakiet Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [ODTWARZANIE] 1740 01:27:20,729 --> 01:27:23,520 David J. MALAN: Więc to wszystko powiedzieć, że te kwestie przepełnienia 1741 01:27:23,520 --> 01:27:25,860 i precyzji są zbyt realne. 1742 01:27:25,860 --> 01:27:26,920 Więc jak się tu dostaliśmy? 1743 01:27:26,920 --> 01:27:28,895 Zaczęliśmy tylko mówić o printf. 1744 01:27:28,895 --> 01:27:31,270 Ponownie, to funkcja wypisuje coś na ekranie, 1745 01:27:31,270 --> 01:27:33,450 a następnie wprowadziliśmy kilka innych funkcji 1746 01:27:33,450 --> 01:27:34,945 z tak zwaną bibliotekę CS50 jest. 1747 01:27:34,945 --> 01:27:36,910 A my nadal zobacz je w odpowiednim czasie. 1748 01:27:36,910 --> 01:27:40,760 A my, zwłaszcza stosowane pobiera ciąg znaków, i uzyskać int, a teraz również uzyskać pływaka, 1749 01:27:40,760 --> 01:27:44,410 a jeszcze inni będą nadal mamy do czynienia i używać się przed długi. 1750 01:27:44,410 --> 01:27:47,220 >> Ale przy okazji, mają mamy już widział potrzebę 1751 01:27:47,220 --> 01:27:50,520 do przechowywania, co te funkcje ręcznie z powrotem? 1752 01:27:50,520 --> 01:27:52,920 Oni nas z powrotem ręcznie ciągiem znaków, lub int lub float. 1753 01:27:52,920 --> 01:27:56,070 A czasami musimy umieścić, że ciąg lub int lub float, gdzieś. 1754 01:27:56,070 --> 01:28:00,100 >> Oraz przechowywanie tych rzeczy, po prostu pamiętam jak w Scratch mamy zmienne. 1755 01:28:00,100 --> 01:28:03,260 Ale w odróżnieniu od zera, w C mamy rzeczywiste typy 1756 01:28:03,260 --> 01:28:05,530 z variables-- danych Typy, więcej generally-- 1757 01:28:05,530 --> 01:28:08,640 Wśród nich, ciąg, int, A float, a te jeszcze inni. 1758 01:28:08,640 --> 01:28:12,321 >> A więc kiedy deklarowania zmiennych w języku C, musimy zadeklarować nasze typy danych. 1759 01:28:12,321 --> 01:28:14,820 To nie jest coś, czego będziesz trzeba zrobić jeszcze w tym semestrze 1760 01:28:14,820 --> 01:28:16,810 jak przejść do innych języków. 1761 01:28:16,810 --> 01:28:19,610 Ale na razie musimy by a priori z góry, 1762 01:28:19,610 --> 01:28:24,370 wyjaśnić, jaki rodzaj komputera zmiennej chcemy, aby nam dać. 1763 01:28:24,370 --> 01:28:27,290 >> Teraz, w międzyczasie, aby wydrukować te rodzaje typów danych, 1764 01:28:27,290 --> 01:28:29,570 musimy powiedzieć printf czego się spodziewać. 1765 01:28:29,570 --> 01:28:32,450 I widzieliśmy procent S strun, oraz procent i dla liczb całkowitych, 1766 01:28:32,450 --> 01:28:33,790 i kilka innych już. 1767 01:28:33,790 --> 01:28:37,237 A ci są po prostu wymogi do prezentacji wizualnej 1768 01:28:37,237 --> 01:28:38,070 tych informacji. 1769 01:28:38,070 --> 01:28:42,080 >> I każdy z nich może być w rzeczywistości parametryzowane lub manipulowane w jakiś sposób, 1770 01:28:42,080 --> 01:28:45,370 jeśli chcesz dalszej kontroli rodzaj produkcji, które można uzyskać. 1771 01:28:45,370 --> 01:28:49,604 I w rzeczywistości okazuje się, że nie tylko tam jest odwrotny ukośnik n dla nowej linii. 1772 01:28:49,604 --> 01:28:52,520 Jest jeszcze coś o nazwie backslash r do powrotu karetki, która 1773 01:28:52,520 --> 01:28:54,360 jest bardziej zbliżona do Stare maszyny do pisania szkoła, 1774 01:28:54,360 --> 01:28:57,690 a także system Windows używany przez wiele lat. 1775 01:28:57,690 --> 01:28:59,690 >> Jest backslash t na kartach. 1776 01:28:59,690 --> 01:29:03,170 Okazuje się, że jeśli chcesz cudzysłów wewnątrz łańcucha, 1777 01:29:03,170 --> 01:29:05,000 Przypomnijmy, że używaliśmy cudzysłów podwójny 1778 01:29:05,000 --> 01:29:07,900 cytat na lewo i prawo kończy nasze struny do tej pory. 1779 01:29:07,900 --> 01:29:09,420 To wydaje się mylić rzeczy. 1780 01:29:09,420 --> 01:29:12,503 >> Jeśli chcesz umieścić w podwójny cudzysłów środku string--, a nawet 1781 01:29:12,503 --> 01:29:13,670 to jest kłopotliwe, aby zobaczyć. 1782 01:29:13,670 --> 01:29:17,120 A więc trzeba się uciekać, by tak niejako podwójny cudzysłów z czymś 1783 01:29:17,120 --> 01:29:18,860 jak, dosłownie, odwrotnego ukośnika podwójny cudzysłów. 1784 01:29:18,860 --> 01:29:20,230 I jest jeszcze kilka innych. 1785 01:29:20,230 --> 01:29:24,540 I zobaczymy więcej osób w rzeczywistym użytkowaniu przed długie. 1786 01:29:24,540 --> 01:29:27,930 >> Więc teraz przejście od Dane i reprezentacji, 1787 01:29:27,930 --> 01:29:30,820 oraz operatory arytmetyczne, wszystkie którego dał nam jakiś budynek 1788 01:29:30,820 --> 01:29:32,070 bloki z którego można odtworzyć. 1789 01:29:32,070 --> 01:29:34,481 Ale teraz niech faktycznie dają nam reszta słownictwa 1790 01:29:34,481 --> 01:29:36,230 że już w zeszłym tygodniu z Scratch 1791 01:29:36,230 --> 01:29:39,350 przez przyjrzeniu się jakaś inna konstrukty w C- nie wszystkie z nich. 1792 01:29:39,350 --> 01:29:41,680 Ale idee jesteśmy by zobaczyć tak naprawdę 1793 01:29:41,680 --> 01:29:45,610 podkreślić tłumaczenie z jeden język, Scratch, do drugiego, C. 1794 01:29:45,610 --> 01:29:48,470 >> I w miarę upływu czasu, będziemy pick up więcej narzędzi do naszego zestawu narzędzi, 1795 01:29:48,470 --> 01:29:49,820 by tak rzec, składniowo. 1796 01:29:49,820 --> 01:29:54,190 I rzeczywiście, zobaczysz, że idee Teraz raczej zaznajomieni z ostatniego tygodnia. 1797 01:29:54,190 --> 01:29:55,200 Więc zróbmy to. 1798 01:29:55,200 --> 01:29:58,870 >> Idziemy do przodu i wzbudzać program który faktycznie korzysta z niektórych wyrażeń, 1799 01:29:58,870 --> 01:30:00,720 logiczna wypowiedzi. 1800 01:30:00,720 --> 01:30:02,810 Pozwólcie mi iść do przodu tutaj i utworzyć nowy plik. 1801 01:30:02,810 --> 01:30:06,090 Zadzwonię do tej condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Pozwólcie mi iść do przodu i obejmują bibliotekę CS50. 1803 01:30:09,350 --> 01:30:12,640 I pozwól mi iść dalej i obejmują średnia io.h dla naszych funkcji 1804 01:30:12,640 --> 01:30:14,690 i printf i bardziej odpowiednio. 1805 01:30:14,690 --> 01:30:18,900 Podam sobie tego kotła z int main nieważne, którego wyjaśnienie we''ll 1806 01:30:18,900 --> 01:30:20,360 wrócić w przyszłości. 1807 01:30:20,360 --> 01:30:23,820 >> Teraz pozwól mi iść do przodu i dać Sam int poprzez get int. 1808 01:30:23,820 --> 01:30:25,970 Pozwól mi iść naprzód i to zrobić. 1809 01:30:25,970 --> 01:30:30,150 Chcę powiedzieć, czy ja to less-- niech rozróżnić pozytywne, negatywne, 1810 01:30:30,150 --> 01:30:31,260 lub wartości zerowe. 1811 01:30:31,260 --> 01:30:36,630 >> Więc jeśli jest mniejsza niż zero, niech mnie po prostu ten program po prostu powiedzieć, 1812 01:30:36,630 --> 01:30:42,370 ujemna, backslash n, w przeciwnym wypadku jeśli i jest większe niż zero. 1813 01:30:42,370 --> 01:30:47,030 Teraz ja, oczywiście, powie printf pozytywne, ukośnika n. 1814 01:30:47,030 --> 01:30:50,690 A potem jeszcze if-- mógłbym to zrobić. 1815 01:30:50,690 --> 01:30:53,410 >> mogę zrobić, jeśli jest równa 0. 1816 01:30:53,410 --> 01:30:55,840 Ale będę decyzji na co najmniej jeden błąd już. 1817 01:30:55,840 --> 01:30:59,480 Przypomnijmy, że znak jest równa nie równe, jak my, ludzie o tym wiedzą. 1818 01:30:59,480 --> 01:31:01,010 >> Ale to operator przypisania. 1819 01:31:01,010 --> 01:31:05,640 A my nie chcemy brać 0 Na prawo i umieścić go w i po lewej stronie. 1820 01:31:05,640 --> 01:31:11,810 Tak więc, aby uniknąć tego zamieszania, lub Może nadużycia znaku równości, 1821 01:31:11,810 --> 01:31:14,740 ludzie postanowili kilka lat temu że w wielu językach programowania 1822 01:31:14,740 --> 01:31:18,000 jeśli chcesz sprawdzić na rzecz równości między lewą i prawa, 1823 01:31:18,000 --> 01:31:19,635 faktycznie korzysta równa równych. 1824 01:31:19,635 --> 01:31:21,010 Więc trafisz znak równości dwukrotnie. 1825 01:31:21,010 --> 01:31:25,600 Gdy chcesz przypisać od prawej do lewej, należy użyć jeden znak równości. 1826 01:31:25,600 --> 01:31:29,360 Tak więc możemy zrobić this-- indziej jeśli i równa jest równa zeru. 1827 01:31:29,360 --> 01:31:31,710 >> Mógłbym wtedy iść i Otwieram nawiasy klamrowe, 1828 01:31:31,710 --> 01:31:36,087 i powiedzieć, printf 0, backslash n, zrobione. 1829 01:31:36,087 --> 01:31:38,170 Ale pamiętam, jak to widły na drodze może pracować. 1830 01:31:38,170 --> 01:31:39,836 I, naprawdę, tylko myśleć o logice. 1831 01:31:39,836 --> 01:31:41,510 I jest liczbą. 1832 01:31:41,510 --> 01:31:43,320 To jest liczbą całkowitą, a konkretnie. 1833 01:31:43,320 --> 01:31:48,600 A to oznacza, że ​​będzie mniej niż 0 lub większa niż 0 lub 0. 1834 01:31:48,600 --> 01:31:51,600 Więc nie jest to rodzaj implikowana domyślny przypadek. 1835 01:31:51,600 --> 01:31:54,920 >> I tak możemy, podobnie jak Scratch, zrezygnować z else if, 1836 01:31:54,920 --> 01:31:55,747 i po prostu powiedzieć indziej. 1837 01:31:55,747 --> 01:31:57,830 Logicznie rzecz biorąc, jeśli jesteś programista wie, że jest tylko 1838 01:31:57,830 --> 01:32:01,635 trzy wiadra do którego Scenariusz może fall-- pierwszego, 1839 01:32:01,635 --> 01:32:03,510 drugi, lub trzeci w case-- ta nie 1840 01:32:03,510 --> 01:32:07,100 przeszkadza dodając dodatkową precyzję a dodatkowa logika tam. 1841 01:32:07,100 --> 01:32:09,690 Wystarczy iść do przodu z Domyślnym przypadek tu jeszcze. 1842 01:32:09,690 --> 01:32:11,950 >> Teraz idziemy do przodu Po zapisaniu tego dokonać 1843 01:32:11,950 --> 01:32:15,760 Warunki dot slash conditions-- Nie wielki interfejs użytkownika, 1844 01:32:15,760 --> 01:32:18,914 Ponieważ nie jestem monitowania użytkownika, jak już wspomniano wcześniej. 1845 01:32:18,914 --> 01:32:19,580 Ale to jest w porządku. 1846 01:32:19,580 --> 01:32:20,454 Będziemy keep it simple. 1847 01:32:20,454 --> 01:32:21,890 Spróbujmy numer 42. 1848 01:32:21,890 --> 01:32:23,240 I to jest pozytywne. 1849 01:32:23,240 --> 01:32:26,120 Spróbujmy numer ujemny 42, ujemny. 1850 01:32:26,120 --> 01:32:28,244 >> Spróbujmy wartość 0. 1851 01:32:28,244 --> 01:32:29,160 I rzeczywiście, to działa. 1852 01:32:29,160 --> 01:32:33,900 Teraz zobaczysz z problemami przed długie, badawcze warte trzy razy, 1853 01:32:33,900 --> 01:32:34,980 zapewne nie wystarcza. 1854 01:32:34,980 --> 01:32:37,438 Prawdopodobnie chcesz przetestować niektóre numery większe, niektóre mniejsze 1855 01:32:37,438 --> 01:32:40,520 numery, w niektórych przypadkach, jak narożniki będziemy się je opisać. 1856 01:32:40,520 --> 01:32:42,500 >> Ale na razie, jest to dość prosty program. 1857 01:32:42,500 --> 01:32:45,160 I jestem całkiem pewny, logicznie, że składa się z trzech przypadkach. 1858 01:32:45,160 --> 01:32:49,360 I rzeczywiście, mimo że po prostu koncentruje się na potencjalnych wad 1859 01:32:49,360 --> 01:32:53,480 niedokładności i przepełnienie w rzeczywistość, gdzie wiele problemów CS50, w 1860 01:32:53,480 --> 01:32:56,000 nie będziemy się martwić o, cały czas, 1861 01:32:56,000 --> 01:32:59,050 te kwestie przepełnienia i niedokładność, ponieważ w rzeczywistości, w ° C, 1862 01:32:59,050 --> 01:33:01,889 to nie jest właściwie wszystko, łatwo uniknąć tych rzeczy. 1863 01:33:01,889 --> 01:33:04,180 Jeśli chcesz się liczyć większy i większy i większy, 1864 01:33:04,180 --> 01:33:07,510 okazuje się, istnieją techniki wy Można go wykorzystać, często z udziałem rzeczy zwanych 1865 01:33:07,510 --> 01:33:11,240 biblioteki, zbiory Kodeksu, inni napisali, że można użyć, 1866 01:33:11,240 --> 01:33:13,910 i inne języki, takie jak Java i innych, w rzeczywistości 1867 01:33:13,910 --> 01:33:15,800 sprawiają, że o wiele łatwiej liczyć nawet wyższe. 1868 01:33:15,800 --> 01:33:19,810 Więc tak naprawdę to niektóre z tych zagrożeń funkcją używanego języka. 1869 01:33:19,810 --> 01:33:22,710 A w ciągu najbliższych tygodni, będziemy zobacz jak naprawdę niebezpieczny C 1870 01:33:22,710 --> 01:33:24,950 może być, jeśli nie używasz go prawidłowo. 1871 01:33:24,950 --> 01:33:27,610 Ale stamtąd, a także z Python i JavaScript będzie 1872 01:33:27,610 --> 01:33:32,620 mamy warstwę na jakieś dodatkowe zabezpieczenia, i uruchomić mniej z tych zagrożeń. 1873 01:33:32,620 --> 01:33:35,820 >> Więc zróbmy trochę bardziej ciekawe logiki w naszym programie. 1874 01:33:35,820 --> 01:33:39,110 Więc pozwól mi iść dalej i stworzyć program o nazwie Logical 1875 01:33:39,110 --> 01:33:43,804 tak więc mogę grać z niektórymi Rzeczywista logika logical.c. 1876 01:33:43,804 --> 01:33:46,870 Ja po prostu skopiować i wkleić niektóre Kod z wcześniej, więc wrócę 1877 01:33:46,870 --> 01:33:49,950 do tego miły punkt wyjścia. 1878 01:33:49,950 --> 01:33:53,980 >> Daj mi ten czas zrobić char C. jestem zamiar dać mu nazwę od C 1879 01:33:53,980 --> 01:33:58,510 tylko dlatego, że konwencjonalne, uzyskać znak z użytkownikiem. 1880 01:33:58,510 --> 01:34:00,730 I niech udawać Jestem wykonawczych udział 1881 01:34:00,730 --> 01:34:04,130 tego programu RM, usuwania, Program wcześniej skłoniły użytkownika 1882 01:34:04,130 --> 01:34:05,400 aby usunąć plik. 1883 01:34:05,400 --> 01:34:06,750 Jak możemy to zrobić? 1884 01:34:06,750 --> 01:34:11,090 >> Chcę powiedzieć, że jeśli C jest równa równa, cytat cytatu, 1885 01:34:11,090 --> 01:34:16,304 y, to mam zamiar założyć, że użytkownik wybrał tak. 1886 01:34:16,304 --> 01:34:17,470 Idę do wydrukowania tak. 1887 01:34:17,470 --> 01:34:19,440 Jeśli to rzeczywiście pisanie program do usuwania, 1888 01:34:19,440 --> 01:34:21,420 możemy usunąć plik z kilku linii kodu. 1889 01:34:21,420 --> 01:34:22,461 Ale my keep it simple. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else if c równa równa n- a teraz mam zamiar powiedzieć, 1892 01:34:31,250 --> 01:34:32,980 użytkownik musi mieć na myśli nie ma. 1893 01:34:32,980 --> 01:34:34,360 A potem jeszcze, wiesz co? 1894 01:34:34,360 --> 01:34:36,200 Nie wiem, co jeszcze użytkownik ma zamiar pisać. 1895 01:34:36,200 --> 01:34:38,533 Więc ja po prostu powiedzieć, że że jest to błąd, niezależnie od 1896 01:34:38,533 --> 01:34:40,070 on lub ona rzeczywiście wpisane. 1897 01:34:40,070 --> 01:34:41,180 >> Więc co tu się dzieje? 1898 01:34:41,180 --> 01:34:44,530 Istnieje zasadnicza różnica w porównaniu do tego, co robiłem w przeszłości. 1899 01:34:44,530 --> 01:34:49,300 Podwójne cudzysłowy, podwójne, podwójne cudzysłowy cytaty, a jednak pojedyncze cytaty, 1900 01:34:49,300 --> 01:34:50,170 pojedyncze cudzysłowy. 1901 01:34:50,170 --> 01:34:52,860 Okazuje się, w C, który po chcesz napisać ciąg, 1902 01:34:52,860 --> 01:34:56,680 używasz cudzysłowów, tak jak mamy był używany przez cały ten czas z printf. 1903 01:34:56,680 --> 01:35:02,030 >> Ale jeśli chcemy mieć do czynienia z zaledwie pojedynczy znak, tzw char, 1904 01:35:02,030 --> 01:35:03,780 wtedy faktycznie używać apostrofów. 1905 01:35:03,780 --> 01:35:05,450 Ci z was, którzy już zaprogramowany wcześniej, nie może mieć 1906 01:35:05,450 --> 01:35:07,850 musiał się o to martwić wyróżnienie w niektórych językach. 1907 01:35:07,850 --> 01:35:09,450 W C, to bez znaczenia. 1908 01:35:09,450 --> 01:35:12,560 A więc kiedy dostanę char i chcę porównać ten char użyciu równych 1909 01:35:12,560 --> 01:35:18,350 równa się do pewnego listu jak Y lub N, ja, Rzeczywiście, trzeba mieć apostrofów. 1910 01:35:18,350 --> 01:35:19,770 >> Teraz chodźmy naprzód i to zrobić. 1911 01:35:19,770 --> 01:35:26,180 Idziemy do przodu i rób Dot logiczne slash logiczne. 1912 01:35:26,180 --> 01:35:27,305 A teraz mam potwierdzeniu. 1913 01:35:27,305 --> 01:35:30,638 Tak, przypuszczalnie, lepsze doświadczenie użytkownika faktycznie mi powiedzieć, co tu robić. 1914 01:35:30,638 --> 01:35:33,030 Ale będę ślepo powiedzieć, y na tak, OK, miły. 1915 01:35:33,030 --> 01:35:35,780 >> Załóżmy, uruchom go ponownie, n na nie, miły. 1916 01:35:35,780 --> 01:35:39,610 Załóżmy, jak niektórych ludzi, których znam, moi caps lock key jest zbyt często. 1917 01:35:39,610 --> 01:35:43,740 Więc robię kapitał Y, wejść, błąd. 1918 01:35:43,740 --> 01:35:46,130 OK, nie jest to dokładnie to, czego oczekuję. 1919 01:35:46,130 --> 01:35:48,170 Rzeczywiście, komputer robi dosłownie co 1920 01:35:48,170 --> 01:35:51,794 Powiedziałem jej do-- sprawdzić małe litery Y i małe litery n. 1921 01:35:51,794 --> 01:35:53,960 To nie ma ochoty na dobre user experience, choć. 1922 01:35:53,960 --> 01:35:59,010 Pozwól mi poprosić i zaakceptować albo małymi literami lub wielkimi literami. 1923 01:35:59,010 --> 01:36:02,090 Tak więc okazuje się, warto powiedzieć coś jak w Scratch, 1924 01:36:02,090 --> 01:36:08,150 jak dosłownie lub C jest równa równa kapitału apostrofami y. 1925 01:36:08,150 --> 01:36:11,400 Okazuje się, C nie ma to dosłowne słowo kluczowe lub. 1926 01:36:11,400 --> 01:36:12,880 >> Ale ma dwie pionowe paski. 1927 01:36:12,880 --> 01:36:15,463 Musisz przytrzymać klawisz Shift zwykle jeśli używasz klawiatury USA, 1928 01:36:15,463 --> 01:36:18,910 i uderzył w pionowy pasek klawisz nad klucza powrotnej. 1929 01:36:18,910 --> 01:36:22,410 Ale to pionowy pasek Pionowa kreska oznacza albo. 1930 01:36:22,410 --> 01:36:26,220 >> Jeśli, przeciwnie, chcieliśmy powiedzieć i jak się podstaw, 1931 01:36:26,220 --> 01:36:28,180 mogliśmy zrobić ampersand ampersanda. 1932 01:36:28,180 --> 01:36:31,330 To nie ma logicznego sensu tutaj ponieważ człowiek nie mógłby ewentualnie 1933 01:36:31,330 --> 01:36:37,110 zostało wpisane zarówno y i małe litery Y i kapitał Y jako ten sam charakter. 1934 01:36:37,110 --> 01:36:39,470 Więc czy jest to, co chcemy tutaj. 1935 01:36:39,470 --> 01:36:46,280 >> Więc jeśli zrobić to w obu tych miejscach lub C kapitału równa równa N, teraz ponownie uruchomić, 1936 01:36:46,280 --> 01:36:49,390 make logiczne, uruchom logiczne. 1937 01:36:49,390 --> 01:36:51,200 Teraz mogę wpisać y. 1938 01:36:51,200 --> 01:36:53,920 I mogę to zrobić ponownie Kapitał Y lub N. kapitału 1939 01:36:53,920 --> 01:36:56,630 I mógłbym dodać dodatkowe Kombinacje martwych. 1940 01:36:56,630 --> 01:36:58,810 >> Więc to jest logiczne Program w jakim teraz 1941 01:36:58,810 --> 01:37:01,940 Mam do sprawdzenia logicznego Ta wartość lub wartość. 1942 01:37:01,940 --> 01:37:06,420 I nie trzeba koniecznie, pochodzić z dwóch kolejnych ifs albo IFS. 1943 01:37:06,420 --> 01:37:09,960 Mogę właściwie połączyć niektóre z związanych z logiką ze sobą w ten sposób. 1944 01:37:09,960 --> 01:37:11,950 Więc to byłoby lepiej zaprojektowane niż zwykłe 1945 01:37:11,950 --> 01:37:17,490 mówiąc, jeśli C jest równa małą y, wydrukować tak, else if c równa kapitałowej Y, 1946 01:37:17,490 --> 01:37:20,074 wydrukować tak, else if c jest równa lower-- innymi słowy 1947 01:37:20,074 --> 01:37:21,990 nie musisz mieć Coraz więcej oddziałów. 1948 01:37:21,990 --> 01:37:28,840 Można połączyć niektóre równowartości gałęzie logicznie jak w ten sposób. 1949 01:37:28,840 --> 01:37:34,150 >> Warto więc przyjrzeć się tylko jedna Ostateczna składnik, jeden ostateczny konstrukt, 1950 01:37:34,150 --> 01:37:34,847 że C pozwala. 1951 01:37:34,847 --> 01:37:36,930 I wrócimy w przyszłość dla innych martwych. 1952 01:37:36,930 --> 01:37:41,400 A potem możemy stwierdzić, patrząc co nie poprawności code-- 1953 01:37:41,400 --> 01:37:46,070 uzyskanie kodu do work-- ale projekt kodu, a nasiona tych roślin wcześnie. 1954 01:37:46,070 --> 01:37:51,337 >> Więc pozwól mi iść do przodu i otwiera nowy plik tutaj. 1955 01:37:51,337 --> 01:37:51,920 Wiesz co? 1956 01:37:51,920 --> 01:37:54,450 Idę do ponownego wdrożenia że sam program, 1957 01:37:54,450 --> 01:37:55,940 ale stosując inną konstrukcję. 1958 01:37:55,940 --> 01:38:00,110 >> Więc pozwól mi szybko oddać Dostęp do włączenia CS50.h 1959 01:38:00,110 --> 01:38:04,150 dla biblioteki CS50, średnia io.h dla printf. 1960 01:38:04,150 --> 01:38:06,510 Daj mi int main pustkę. 1961 01:38:06,510 --> 01:38:09,310 A potem tu, niech mi iść naprzód i to zrobić. 1962 01:38:09,310 --> 01:38:12,010 >> Char c dostaje się char, tak samo jak przedtem. 1963 01:38:12,010 --> 01:38:16,770 A ja zamierzam wykorzystać nowy konstrukt now-- przełączyć, na jakiej postaci? 1964 01:38:16,770 --> 01:38:19,820 Więc przełącznik jest tak jakby Przełączanie torach kolejowych. 1965 01:38:19,820 --> 01:38:22,070 Albo, naprawdę, jest to rodzaj if else, jeśli else if, 1966 01:38:22,070 --> 01:38:23,980 ale napisany nieco inaczej. 1967 01:38:23,980 --> 01:38:25,490 >> Przełącznik wygląda następująco. 1968 01:38:25,490 --> 01:38:29,060 Masz przełącznik, a następnie co znak lub numer, który chcesz patrzeć, 1969 01:38:29,060 --> 01:38:32,000 Następnie niektóre nawiasy klamrowe jak w Scratch, wystarczy powiedzieć, robić te rzeczy. 1970 01:38:32,000 --> 01:38:33,480 A potem mają różne przypadki. 1971 01:38:33,480 --> 01:38:34,830 >> Nie używać, jeśli i inni. 1972 01:38:34,830 --> 01:38:37,050 Dosłownie użyć obudowy słowo. 1973 01:38:37,050 --> 01:38:38,790 I można by powiedzieć coś takiego. 1974 01:38:38,790 --> 01:38:43,820 >> Tak więc w przypadku małej litery Y, lub w przypadku dużej litery Y 1975 01:38:43,820 --> 01:38:47,350 iść do przodu i wydrukować tak. 1976 01:38:47,350 --> 01:38:49,020 A potem wyrwać się z przełącznika. 1977 01:38:49,020 --> 01:38:49,580 to jest to! 1978 01:38:49,580 --> 01:38:50,880 Skończyliśmy. 1979 01:38:50,880 --> 01:38:57,270 >> Else if, że tak powiem, mała litera N, N lub kapitału, 1980 01:38:57,270 --> 01:39:02,560 a następnie przejść do przodu i do druku na nie, a następnie zerwać. 1981 01:39:02,560 --> 01:39:08,022 Else-- a tego rodzaju jest Domyślnym przypadku indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 i po prostu na wszelki wypadek, gdyby logicznie przerwa ta nie jest konieczna 1983 01:39:10,980 --> 01:39:12,896 dlatego, że jesteśmy na końcu przełącznika i tak, 1984 01:39:12,896 --> 01:39:14,520 Jestem teraz wyrwanie się z przełącznika. 1985 01:39:14,520 --> 01:39:16,280 Tak to wygląda trochę inaczej. 1986 01:39:16,280 --> 01:39:18,272 >> Ale logicznie, to rzeczywiście równoważne. 1987 01:39:18,272 --> 01:39:19,980 I dlatego należałoby użyć jeden nad drugim? 1988 01:39:19,980 --> 01:39:23,220 Czasami, po prostu osobistych preferencji, czasami estetyka, 1989 01:39:23,220 --> 01:39:25,420 jeśli Spoglądam na to Teraz, coś 1990 01:39:25,420 --> 01:39:27,510 należy powiedzieć o czytelność tego kodu. 1991 01:39:27,510 --> 01:39:30,690 To znaczy, nie przeszkadza fakt, że ten Kod jest nowością dla wielu z nas w pokoju. 1992 01:39:30,690 --> 01:39:33,515 >> Ale to właśnie niby jest ładna. 1993 01:39:33,515 --> 01:39:37,760 Widzisz mała litera Y, Y kapitału, mała litera n, domyślnie kapitału N, 1994 01:39:37,760 --> 01:39:40,150 to po prostu rodzaj skoków się na siebie w taki sposób, 1995 01:39:40,150 --> 01:39:42,200 , Która prawdopodobnie, być może W poprzednim przykładzie 1996 01:39:42,200 --> 01:39:45,780 z IFS i pionowych prętów, oraz IFS indziej, może nie mieć. 1997 01:39:45,780 --> 01:39:51,600 Więc to jest naprawdę kwestia osobista wybór, tak naprawdę, czy czytelność, 1998 01:39:51,600 --> 01:39:52,360 kodu. 1999 01:39:52,360 --> 01:39:58,230 >> Ale jeśli chodzi o funkcjonalność, pozwól mi iść dalej i uczynić przełącznika, kropka ukośnik 2000 01:39:58,230 --> 01:40:05,830 switch, a teraz pisać małymi literami Y, Kapitał Y, mała litera n, kapitał N, 2001 01:40:05,830 --> 01:40:09,250 David, ponownie, ponieważ to nie pojedynczy znak. 2002 01:40:09,250 --> 01:40:12,050 Zróbmy X, błąd, zgodnie z oczekiwaniami. 2003 01:40:12,050 --> 01:40:15,640 I logically-- i to jest coś Chciałbym zachęcić nawet w general-- 2004 01:40:15,640 --> 01:40:17,790 choć jesteśmy tylko zarysowania powierzchnia niektóre z tych cech. 2005 01:40:17,790 --> 01:40:20,560 >> I to może nie być oczywiste, kiedy Sam usiadł przy klawiaturze, 2006 01:40:20,560 --> 01:40:21,370 jak to działa? 2007 01:40:21,370 --> 01:40:22,240 Co by to zrobić? 2008 01:40:22,240 --> 01:40:25,630 Piękna rzeczą o laptop lub desktop lub dostęp 2009 01:40:25,630 --> 01:40:29,290 do komputera za pomocą kompilatora, i za pomocą edytora kodu jak ten, 2010 01:40:29,290 --> 01:40:32,990 jest prawie zawsze można odpowiedzieć na te pytania do siebie po prostu spróbować. 2011 01:40:32,990 --> 01:40:36,570 >> Na przykład, jeśli retoryczna Pytanie było pod ręką, 2012 01:40:36,570 --> 01:40:39,540 co się dzieje, jeśli zapomnisz Twoje wypowiedzi przerwę? 2013 01:40:39,540 --> 01:40:41,400 Która jest faktycznie bardzo często rzeczą do zrobienia, 2014 01:40:41,400 --> 01:40:43,540 bo to nie wygląda jakbyś naprawdę ich potrzebują. 2015 01:40:43,540 --> 01:40:46,790 Oni naprawdę nie zakończyć swoje myślałem jak nawiasie lub kręcone 2016 01:40:46,790 --> 01:40:47,714 klamra robi. 2017 01:40:47,714 --> 01:40:49,630 Idziemy do przodu i skompilować kod i zobaczyć. 2018 01:40:49,630 --> 01:40:53,690 Więc upewnij przełącznik dot przełącznika ukośnik. 2019 01:40:53,690 --> 01:40:56,435 Załóżmy wpisać małymi literami y, top case, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Więc wpisałem y. 2022 01:41:00,700 --> 01:41:04,420 >> Program powiedział tak, nie, błąd, jakby została ona zmienia swój umysł. 2023 01:41:04,420 --> 01:41:09,280 Ale to niby był, bo to, co się dzieje z przełącznikiem jest to pierwszy przypadek, że 2024 01:41:09,280 --> 01:41:13,899 Mecz w istocie oznacza, hej komputer, wykonać cały kod pod nią. 2025 01:41:13,899 --> 01:41:16,690 A jeśli nie mów przerwa lub nie mów przerwę, albo nie mówią przerwę, 2026 01:41:16,690 --> 01:41:19,540 komputer będzie dmuchać przez wszystkich tych liniach 2027 01:41:19,540 --> 01:41:22,779 i wykonać wszystkie z nich, dopóki dojdzie do tego nawias klamrowy. 2028 01:41:22,779 --> 01:41:24,320 Więc hamulce są rzeczywiście konieczne. 2029 01:41:24,320 --> 01:41:27,120 Ale na wynos o to, kiedy wątpliwości należy spróbować czegoś. 2030 01:41:27,120 --> 01:41:29,510 Może zapisać swój kod po pierwsze, lub zapisać go w dodatkowym pliku 2031 01:41:29,510 --> 01:41:32,930 jeśli jesteś naprawdę martwi brudząc się i konieczności odzyskania 2032 01:41:32,930 --> 01:41:34,430 praca, że ​​wiesz pracuje. 2033 01:41:34,430 --> 01:41:35,410 >> Ale spróbuj rzeczy. 2034 01:41:35,410 --> 01:41:38,074 I nie bój się, jak może, co komputer może zrobić, 2035 01:41:38,074 --> 01:41:39,490 lub że można złamać coś. 2036 01:41:39,490 --> 01:41:42,790 Zawsze można wrócić do jakiejś wcześniejszej wersji. 2037 01:41:42,790 --> 01:41:45,640 >> Więc w końcu, patrząc na etapie projektowania kodu. 2038 01:41:45,640 --> 01:41:49,020 Mamy taką zdolność teraz napisać Warunki i pętle zapisu, 2039 01:41:49,020 --> 01:41:50,850 i zmienne i funkcje połączeń. 2040 01:41:50,850 --> 01:41:54,590 Tak więc, mówiąc, że jesteśmy z powrotem na rodzaj gdzie byliśmy tydzień temu z podstaw, 2041 01:41:54,590 --> 01:42:00,120 choć z mniej przekonujące tekstowych Środowisko niż Scratch pozwala. 2042 01:42:00,120 --> 01:42:03,990 >> Należy jednak zauważyć, jak szybko mamy nabyte że słownictwo, nawet jeśli jest to 2043 01:42:03,990 --> 01:42:07,570 zajmie trochę czasu, aby zatopić się w, tak, że możemy teraz używać tego słownictwa 2044 01:42:07,570 --> 01:42:10,320 napisać więcej ciekawych programów. 2045 01:42:10,320 --> 01:42:12,940 A weźmy o krok dziecka ku temu, w sposób następujący. 2046 01:42:12,940 --> 01:42:14,890 Pozwólcie mi iść do przodu i utworzyć nowy plik tutaj. 2047 01:42:14,890 --> 01:42:17,750 >> Mam zamiar nazwać prototype.c oraz wprowadzenie 2048 01:42:17,750 --> 01:42:20,954 po raz pierwszy, możliwość tworzyć własne funkcje. 2049 01:42:20,954 --> 01:42:22,870 Niektórzy z was mogą mieć zrobić to z początku, 2050 01:42:22,870 --> 01:42:25,430 dzięki czemu można stworzyć swój własne niestandardowe bloki podstaw, 2051 01:42:25,430 --> 01:42:27,892 a następnie przeciągnij je na miejsce gdziekolwiek chcesz w C. 2052 01:42:27,892 --> 01:42:30,100 I w większości programów Języki, można to zrobić dokładnie, 2053 01:42:30,100 --> 01:42:33,580 that-- tworzyć własne funkcje, jeśli nie są one już istnieją. 2054 01:42:33,580 --> 01:42:38,660 >> Tak więc, na przykład, pozwól mi iść do przodu i obejmują CS50.h i obejmują 2055 01:42:38,660 --> 01:42:43,110 średnia io.h, int main nieważne. 2056 01:42:43,110 --> 01:42:46,020 A teraz mamy placeholder gotowe. 2057 01:42:46,020 --> 01:42:48,550 Trzymam drukowania rzeczy jak nazwy ludzi dzisiaj. 2058 01:42:48,550 --> 01:42:51,910 I że czuje like-- nie byłoby dobrze, gdyby nie 2059 01:42:51,910 --> 01:42:53,936 były funkcję o nazwie nazwa druku? 2060 01:42:53,936 --> 01:42:55,060 Nie mam użyć printf. 2061 01:42:55,060 --> 01:42:56,976 Nie trzeba pamiętać wszystkie kody formatu. 2062 01:42:56,976 --> 01:43:00,050 Dlaczego nie mogę, dlaczego nie kogoś przede mną, 2063 01:43:00,050 --> 01:43:02,980 Tworzenie funkcji o nazwie print Nazwa, że ​​biorąc pod uwagę pewne imię, 2064 01:43:02,980 --> 01:43:03,980 po prostu wypisuje go? 2065 01:43:03,980 --> 01:43:08,700 >> Innymi słowy, jeśli powiem, hej, Komputer, daj mi łańcuch 2066 01:43:08,700 --> 01:43:11,870 prosząc użytkownika o takich, poprzez funkcję get ciąg CS50 jest. 2067 01:43:11,870 --> 01:43:15,090 Hej, komputer, umieścić ten ciąg w zmienna się po lewej stronie, 2068 01:43:15,090 --> 01:43:16,150 i nazywają to s. 2069 01:43:16,150 --> 01:43:22,150 A potem, hej komputer, iść do przodu i wydrukować to nazwisko osoby, gotowe. 2070 01:43:22,150 --> 01:43:26,240 >> Teraz byłoby miło, ponieważ Program ten, trafnie nazwany, 2071 01:43:26,240 --> 01:43:29,170 Mówi mi, co to ma do zrobienia w drodze Te nazwy funkcji. 2072 01:43:29,170 --> 01:43:32,930 Pozwól mi odejść i zrobić prototyp, Enter. 2073 01:43:32,930 --> 01:43:34,930 I niestety To nie będzie latać. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, linia 7, charakter 5, błąd, bezpośrednia deklaracja 2075 01:43:39,430 --> 01:43:42,960 nazwa funkcji drukowania jest nieważny w C99, C99 2076 01:43:42,960 --> 01:43:45,130 oznacza wersję C który ukazał się w 1999 roku. 2077 01:43:45,130 --> 01:43:45,730 To wszystko. 2078 01:43:45,730 --> 01:43:48,780 >> Więc nie wiem co Wszystko to oznacza jeszcze. 2079 01:43:48,780 --> 01:43:50,810 Ale mam rozpoznać błąd w kolorze czerwonym. 2080 01:43:50,810 --> 01:43:51,770 To dość oczywiste. 2081 01:43:51,770 --> 01:43:53,769 >> I wydaje się, że przy zielony charakter tutaj 2082 01:43:53,769 --> 01:43:57,520 problem jest z nazwą druku, otwarta PAREN s, blisko PAREN, średnik. 2083 01:43:57,520 --> 01:44:01,800 Ale niejawna deklaracja Funkcja widzieliśmy przez chwilę wcześniej. 2084 01:44:01,800 --> 01:44:04,880 Oznacza to po prostu, że Clang nie wie, co mam na myśli. 2085 01:44:04,880 --> 01:44:09,000 >> Użyłem słowa słownictwa, które jest Nigdy nie widziałem ani nie uczono wcześniej. 2086 01:44:09,000 --> 01:44:11,950 A więc trzeba go uczyć co oznacza ta funkcja. 2087 01:44:11,950 --> 01:44:13,590 Więc mam zamiar iść do przodu i robić. 2088 01:44:13,590 --> 01:44:17,970 >> Mam zamiar iść do przodu i wdrożenia moja własna funkcja o nazwie Print Name. 2089 01:44:17,970 --> 01:44:24,720 A ja powiem, jak wynika, że Czyni to, printf, witaj procent 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, nazwa, średnik. 2091 01:44:27,760 --> 01:44:29,250 Więc co ja zrobiłem? 2092 01:44:29,250 --> 01:44:31,325 >> Okazuje się zatem, aby zaimplementować własną funkcję, 2093 01:44:31,325 --> 01:44:33,845 my niby pożyczyć taką samą strukturę jak główne 2094 01:44:33,845 --> 01:44:35,720 że mamy właśnie brane za pewnik, a ja 2095 01:44:35,720 --> 01:44:37,730 wiedzieć, powielanie i wklejając dość dużo, co 2096 01:44:37,730 --> 01:44:39,170 Pisałem w przeszłości. 2097 01:44:39,170 --> 01:44:40,570 Ale zauważmy wzór tutaj. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Pustki, będziemy drażnić siebie Przed długi, co to właściwie znaczy. 2099 01:44:43,750 --> 01:44:46,160 >> Ale dzisiaj, po prostu zauważyć równoległość. 2100 01:44:46,160 --> 01:44:48,210 Nieważne, nazwa wydruku, string name, więc nie 2101 01:44:48,210 --> 01:44:50,310 purpurowy słów kluczowych, które mamy zamiar zacząć 2102 01:44:50,310 --> 01:44:54,067 wywołaniem zwracany typ, nazwa Funkcja i jej wartość. 2103 01:44:54,067 --> 01:44:56,400 Tak, rzeczywiście, możemy destylować tego rodzaju jak w ubiegłym tygodniu 2104 01:44:56,400 --> 01:44:59,030 jak to jest nazwa lub Algorytm kodu jesteśmy 2105 01:44:59,030 --> 01:45:00,761 zamiar write-- algorytm bazowego 2106 01:45:00,761 --> 01:45:02,010 kod będziemy pisać. 2107 01:45:02,010 --> 01:45:03,180 >> To jest jego wejście. 2108 01:45:03,180 --> 01:45:04,670 To jest jego wyjście. 2109 01:45:04,670 --> 01:45:08,730 Ta funkcja, nazwa wydruku jest zaprojektowana, aby ciąg o nazwie nazwa, 2110 01:45:08,730 --> 01:45:11,350 lub cokolwiek, jako dane wejściowe, a następnie anulowane. 2111 01:45:11,350 --> 01:45:13,904 To nic nie wróci, jak uzyskać ciąg lub uzyskać int robi. 2112 01:45:13,904 --> 01:45:15,570 Więc to będzie przekazać mi coś w zamian. 2113 01:45:15,570 --> 01:45:17,960 To się po prostu dzieje się mieć Efektem ubocznym, że tak powiem, 2114 01:45:17,960 --> 01:45:19,570 drukowania nazwisko osoby. 2115 01:45:19,570 --> 01:45:22,260 Tak więc zauważyć, linia 7, I można nazwać nazwę druku. 2116 01:45:22,260 --> 01:45:25,920 Linia 10, mogę zdefiniować lub zastosować nazwę druku. 2117 01:45:25,920 --> 01:45:28,450 Ale, niestety, to nie wystarczy. 2118 01:45:28,450 --> 01:45:31,230 >> Pozwólcie mi iść do przodu i rekompilacji to po zapisaniu. 2119 01:45:31,230 --> 01:45:33,910 Zaraz, teraz, zrobiłem to co gorsza, wydaje się. 2120 01:45:33,910 --> 01:45:37,027 Więc niejawna deklaracja Nazwa Funkcja druku jest nieprawidłowy. 2121 01:45:37,027 --> 01:45:38,360 I znowu, nie ma więcej błędów. 2122 01:45:38,360 --> 01:45:41,430 Ale jak już wcześniej ostrzegł, nawet jeśli ogarnia, 2123 01:45:41,430 --> 01:45:44,850 lub trochę smutny zobaczyć tak wielu Błędy, tylko skupić się na pierwszym 2124 01:45:44,850 --> 01:45:47,500 Początkowo, bo może po prostu miały efekt kaskadowy. 2125 01:45:47,500 --> 01:45:51,970 Tak więc C lub Clang dokładniej nadal nie rozpoznaje nazwy wydruku. 2126 01:45:51,970 --> 01:45:54,580 >> A to dlatego, Clang, Zgodnie z projektem, jest trochę głupie. 2127 01:45:54,580 --> 01:45:56,280 Robi tylko to, co powiedzieć to zrobić. 2128 01:45:56,280 --> 01:46:00,950 I to nie tylko tak, w porządku w którym powiesz to zrobić. 2129 01:46:00,950 --> 01:46:05,270 >> Więc nie zdefiniowano główne na linii czterech, jak robiliśmy dość często. 2130 01:46:05,270 --> 01:46:07,980 Mam zdefiniowane nazwy drukowania na linii 10. 2131 01:46:07,980 --> 01:46:11,793 Ale staram się używać Nazwa nadruk na linii siedmiu. 2132 01:46:11,793 --> 01:46:13,670 >> Jest zbyt wcześnie, jeszcze nie istnieje. 2133 01:46:13,670 --> 01:46:19,150 Więc mogę być mądry, i być jak, OK, więc niech po prostu grać razem, 2134 01:46:19,150 --> 01:46:23,680 i przenieść się nazwę druku tutaj, i ponownie skompilować. 2135 01:46:23,680 --> 01:46:24,550 O mój Boże. 2136 01:46:24,550 --> 01:46:25,260 Zadziałało. 2137 01:46:25,260 --> 01:46:26,670 To było takie proste. 2138 01:46:26,670 --> 01:46:28,120 >> Ale logika jest dokładnie to. 2139 01:46:28,120 --> 01:46:30,870 Musisz nauczyć brzękiem co jest określenie funkcji pierwszego. 2140 01:46:30,870 --> 01:46:31,920 Wtedy można go używać. 2141 01:46:31,920 --> 01:46:33,940 Ale, szczerze mówiąc, to czuje się jak równi pochyłej. 2142 01:46:33,940 --> 01:46:35,773 >> Więc za każdym razem uruchomić na problem, jestem po prostu 2143 01:46:35,773 --> 01:46:39,450 zamiar zaznaczyć i skopiować kod Pisałem, wyciąć i wkleić go tutaj. 2144 01:46:39,450 --> 01:46:41,370 I, z pewnością moglibyśmy wymyślić kilka scenariuszy 2145 01:46:41,370 --> 01:46:43,286 gdzie jedna funkcja może trzeba zadzwonić innego. 2146 01:46:43,286 --> 01:46:46,030 I po prostu nie można umieścić w każdym Funkcja powyżej każdy inny. 2147 01:46:46,030 --> 01:46:47,930 >> Okazuje się tam lepszym rozwiązaniem. 2148 01:46:47,930 --> 01:46:50,100 Możemy zostawić to być. 2149 01:46:50,100 --> 01:46:53,677 I, szczerze mówiąc, to na ogół dobre, i wygodny, a dobry projekt 2150 01:46:53,677 --> 01:46:56,760 umieścić główną pierwsze, dlatego, znowu, Głównym podobnie jak przy zielona flaga kliknięciu 2151 01:46:56,760 --> 01:46:59,027 które to funkcja pobiera wykonywane domyślnie. 2152 01:46:59,027 --> 01:47:01,110 Więc równie dobrze można umieścić że na początku pliku 2153 01:47:01,110 --> 01:47:03,560 tak, że gdy użytkownik lub wszelkie inne ludzkie patrzy na pliku 2154 01:47:03,560 --> 01:47:06,360 Wiesz, co się dzieje tylko przez czytanie główną jako pierwszy. 2155 01:47:06,360 --> 01:47:15,360 Tak więc okazuje się, możemy powiedzieć, dzyń proaktywnie, hej, Clang, w wierszu czwartym 2156 01:47:15,360 --> 01:47:17,940 Obiecuję, że wdrożenie funkcja nazywa Drukuj 2157 01:47:17,940 --> 01:47:22,600 Nazwa, która przyjmuje nazwę ciąg zwany jako dane wejściowe i zwraca nic, nieważne. 2158 01:47:22,600 --> 01:47:24,770 A ja ominąć wdrożenie go później. 2159 01:47:24,770 --> 01:47:25,680 >> Nadchodzi Główny. 2160 01:47:25,680 --> 01:47:29,130 Główne teraz na linii 9 można używać Drukuj Nazwa ponieważ Clang 2161 01:47:29,130 --> 01:47:32,600 ufa, że ​​w końcu, będzie spotkać definicję 2162 01:47:32,600 --> 01:47:34,880 realizacji Print Name. 2163 01:47:34,880 --> 01:47:37,390 Więc po zapisaniu mój plik, niech mi iść do przodu i zrobić prototyp, 2164 01:47:37,390 --> 01:47:38,498 wygląda dobrze tym razem. 2165 01:47:38,498 --> 01:47:43,470 Dot slash, prototyp, pozwól mi idź i wpisać nazwę. 2166 01:47:43,470 --> 01:47:48,440 David, cześć Dawid Zamila, cześć Zamila i, rzeczywiście, teraz to działa. 2167 01:47:48,440 --> 01:47:52,200 >> Więc składnikiem jest to, że mamy wykonane funkcję niestandardową, jak zwyczaj 2168 01:47:52,200 --> 01:47:54,219 Blok Scratch my nazywając ją. 2169 01:47:54,219 --> 01:47:57,010 Jednak w odróżnieniu od podstaw, gdzie można wystarczy utworzyć go i rozpocząć korzystanie z niego, 2170 01:47:57,010 --> 01:47:59,330 Teraz musimy być trochę bardziej pedantyczny 2171 01:47:59,330 --> 01:48:03,410 a właściwie trenować brzękiem w użyciu, albo się go spodziewać. 2172 01:48:03,410 --> 01:48:09,140 Teraz, na marginesie, dlaczego cały czas mieć możemy być tylko ślepo na wierze w tym 2173 01:48:09,140 --> 01:48:12,170 CS50.h, a tym standardzie io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Cóż, okazuje się, Wśród kilku innych rzeczy, 2175 01:48:15,190 --> 01:48:18,550 wszystko, co znajduje się w tych dot godz Pliki, które stało się plikami. 2176 01:48:18,550 --> 01:48:20,460 Oni nagłówku plików, by tak rzec. 2177 01:48:20,460 --> 01:48:23,270 Oni wciąż napisany w C. Ale oni inny typ pliku. 2178 01:48:23,270 --> 01:48:28,690 >> Na razie można bardzo dużo Zakładamy że wszystko, co znajduje się wewnątrz CS50.h 2179 01:48:28,690 --> 01:48:33,360 Jest ktoś wkładki takie jak ten, nie dla funkcji zwanych Drukuj Nazwa, 2180 01:48:33,360 --> 01:48:36,840 ale pobiera ciąg znaków, Zapisz Float, i kilka innych. 2181 01:48:36,840 --> 01:48:41,510 I istnieją podobne prototypy, jeden wkładki, wewnątrz standardowego io.h 2182 01:48:41,510 --> 01:48:46,241 dla printf, która jest obecnie w moja własna funkcja Print Name. 2183 01:48:46,241 --> 01:48:49,490 Więc innymi słowy, cały czas mamy właśnie ślepo kopiując i wklejając 2184 01:48:49,490 --> 01:48:51,780 obejmuje to m.in. że to, co się dzieje? 2185 01:48:51,780 --> 01:48:55,310 Są to po prostu rodzaj wskazówek do szczęk, co funkcji 2186 01:48:55,310 --> 01:49:00,170 są rzeczywiście realizowane, po prostu indziej w różnych plikach 2187 01:49:00,170 --> 01:49:02,440 gdzie indziej w systemie. 2188 01:49:02,440 --> 01:49:05,160 >> Więc mamy wdrożone nazwę druku. 2189 01:49:05,160 --> 01:49:07,910 To ma ten skutek uboczny drukowanie coś na ekranie. 2190 01:49:07,910 --> 01:49:10,170 Ale tak nie jest w rzeczywistości podaj mi coś w zamian. 2191 01:49:10,170 --> 01:49:12,200 Jak pójdziemy na temat realizacji programu, który 2192 01:49:12,200 --> 01:49:14,510 ma przekazać mi coś w zamian? 2193 01:49:14,510 --> 01:49:15,580 >> Dobrze, spróbujmy. 2194 01:49:15,580 --> 01:49:21,360 Pozwólcie mi iść do przodu i wdrożenia plik o nazwie return.c 2195 01:49:21,360 --> 01:49:24,530 więc możemy pokazać, jak coś Uzyskaj String lub Get int 2196 01:49:24,530 --> 01:49:27,340 jest rzeczywiście powrocie coś z powrotem do użytkownika. 2197 01:49:27,340 --> 01:49:29,840 Idziemy do przodu i definiowania int main pustkę. 2198 01:49:29,840 --> 01:49:33,230 >> I znowu, w przyszłości, będziemy wyjaśnić, co to int i tę pustkę 2199 01:49:33,230 --> 01:49:34,090 jest rzeczywiście robi. 2200 01:49:34,090 --> 01:49:35,840 Ale dzisiaj, będziemy przyjąć za pewnik. 2201 01:49:35,840 --> 01:49:39,970 Mam zamiar iść do przodu i printf, dobrego doświadczenia użytkownika, x jest. 2202 01:49:39,970 --> 01:49:44,360 A potem będę czekać na użytkownik może mi dać xz get int. 2203 01:49:44,360 --> 01:49:48,459 >> A potem mam zamiar iść do przodu i wydrukować x do kwadratu. 2204 01:49:48,459 --> 01:49:50,500 Więc kiedy masz tylko klawiszowe, ludzie powszechnie 2205 01:49:50,500 --> 01:49:52,600 użyć trochę marchewki symboli na klawiaturze 2206 01:49:52,600 --> 01:49:55,330 reprezentować do potęgi z lub wykładnik. 2207 01:49:55,330 --> 01:49:58,960 Więc x kwadrat jest obecny i. 2208 01:49:58,960 --> 01:50:00,660 >> A teraz mam zamiar to zrobić. 2209 01:50:00,660 --> 01:50:03,940 Mógłbym do-- co x kwadratu? x kwadrat jest x razy x. 2210 01:50:03,940 --> 01:50:06,690 >> I zrobiliśmy to jakiś dawno już dziś. 2211 01:50:06,690 --> 01:50:08,730 To nie ma ochoty wszystko to wielki postęp. 2212 01:50:08,730 --> 01:50:09,570 Wiesz co? 2213 01:50:09,570 --> 01:50:13,100 Załóżmy wykorzystać niektóre z tych idei z ostatniej chwili abstrakcji. 2214 01:50:13,100 --> 01:50:16,080 >> Czy nie byłoby miło, gdyby istnieje funkcja o nazwie 2215 01:50:16,080 --> 01:50:18,460 Kwadrat, który robi dokładnie to? 2216 01:50:18,460 --> 01:50:20,640 Nadal na koniec dzień, robi to samo matematyki. 2217 01:50:20,640 --> 01:50:22,410 Ale bądźmy abstrakcyjne Odległość idea podejmowania 2218 01:50:22,410 --> 01:50:25,280 jedna liczba pomnożona przez inny, a tylko dać mu nazwę, 2219 01:50:25,280 --> 01:50:27,360 jak pogodzić tę wartość. 2220 01:50:27,360 --> 01:50:29,560 >> A innymi słowy, w C, stwórzmy funkcję 2221 01:50:29,560 --> 01:50:32,660 zwany kwadrat, który robi dokładnie to. 2222 01:50:32,660 --> 01:50:34,600 To się nazywa być kwadratowe. 2223 01:50:34,600 --> 01:50:35,790 To zajmie int. 2224 01:50:35,790 --> 01:50:37,820 A my po prostu nazwać n, domyślnie. 2225 01:50:37,820 --> 01:50:39,403 >> Ale moglibyśmy nazwać cokolwiek chcemy. 2226 01:50:39,403 --> 01:50:42,900 I wszystko, co dzieje się zrobić, dosłownie, jest zwrotny 2227 01:50:42,900 --> 01:50:45,810 wynikiem razy n n. 2228 01:50:45,810 --> 01:50:48,980 Jednak, ponieważ jest powrocie coś, co 2229 01:50:48,980 --> 01:50:53,690 to słowo kluczowe w kolorze fioletowym mamy Nigdy nie widziałem, ja, na linii 11, 2230 01:50:53,690 --> 01:50:55,410 Nie można po prostu powiedzieć, nieważne tym razem. 2231 01:50:55,410 --> 01:51:01,320 >> Pustka, w przykładzie po prostu widział raczej nazwą druku, po prostu oznacza, 2232 01:51:01,320 --> 01:51:02,190 Zrób coś. 2233 01:51:02,190 --> 01:51:04,170 Ale nie podaj mi coś w zamian. 2234 01:51:04,170 --> 01:51:06,790 W tym przypadku, chcę powrotu n n razy, 2235 01:51:06,790 --> 01:51:08,460 lub cokolwiek to jest, że liczba. 2236 01:51:08,460 --> 01:51:12,460 >> Więc nie mogę powiedzieć, hej, komputer, Nic nie wrócić, nieważne. 2237 01:51:12,460 --> 01:51:16,166 To będzie powrót, przez naturę, int. 2238 01:51:16,166 --> 01:51:17,790 A więc to wszystko, co się tu dzieje. 2239 01:51:17,790 --> 01:51:20,070 >> Wejście do kwadratu będzie int. 2240 01:51:20,070 --> 01:51:24,760 I tak, że można go używać, to musi mieć nazwę, N. To będzie wyjście 2241 01:51:24,760 --> 01:51:26,240 int, że nie potrzebuje nazwy. 2242 01:51:26,240 --> 01:51:29,590 Możemy pozostawić główną, czy ktokolwiek jest wykorzystuje mnie zapamiętać tę wartość, gdybyśmy 2243 01:51:29,590 --> 01:51:31,120 chcą z własnej zmiennej. 2244 01:51:31,120 --> 01:51:33,230 >> I znów, tylko nowe Hasło o to Return. 2245 01:51:33,230 --> 01:51:34,480 A ja po prostu robi trochę matematyki. 2246 01:51:34,480 --> 01:51:41,825 Gdybym naprawdę chciał być niepotrzebne, Mógłbym powiedzieć, int produkt dostanie n n razy. 2247 01:51:41,825 --> 01:51:44,170 >> I wtedy będę mógł powiedzieć, produkt wróci. 2248 01:51:44,170 --> 01:51:47,360 Ale znowu, z mojego punktu wcześniej z to po prostu nie jest dobre zamiary 2249 01:51:47,360 --> 01:51:50,060 jak, dlaczego wprowadzić nazwę, symbol, podobny produkt, 2250 01:51:50,060 --> 01:51:51,570 tak, aby natychmiast powrócić? 2251 01:51:51,570 --> 01:51:53,670 To trochę czystsze, trochę mocniej, więc 2252 01:51:53,670 --> 01:51:59,380 mówić, po prostu powiedzieć razy return n n, pozbyć się tej linii w ogóle. 2253 01:51:59,380 --> 01:52:02,860 >> I to jest po prostu mniej kodu do odczytu, mniejsza szansa na błędy. 2254 01:52:02,860 --> 01:52:05,180 I zobaczmy, czy to faktycznie działa teraz. 2255 01:52:05,180 --> 01:52:09,380 Teraz mam zamiar iść naprzód i dokonać zwrotu. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, bezpośrednia deklaracja funkcji. 2257 01:52:11,460 --> 01:52:14,080 Zrobiłem ten błąd wcześniej, nic wielkiego. 2258 01:52:14,080 --> 01:52:18,950 Pozwól mi wystarczy wpisać lub zaznaczyć i kopiowanie, dokładnie ten sam prototyp funkcji, 2259 01:52:18,950 --> 01:52:21,342 lub podpis, funkcji tutaj. 2260 01:52:21,342 --> 01:52:22,800 Albo mogę przenieść całą funkcję. 2261 01:52:22,800 --> 01:52:23,841 >> Ale to jest trochę leniwy. 2262 01:52:23,841 --> 01:52:24,870 Więc nie rób tego. 2263 01:52:24,870 --> 01:52:27,960 Teraz pozwól mi powrót znowu dot powrót slash. 2264 01:52:27,960 --> 01:52:32,790 >> x oznacza 2. x kwadrat jest 4. x oznacza 3. x kwadrat jest 9. 2265 01:52:32,790 --> 01:52:35,300 A funkcja wydaje teraz pracować. 2266 01:52:35,300 --> 01:52:36,550 Więc jaka jest różnica tutaj? 2267 01:52:36,550 --> 01:52:42,520 Mam funkcji, która jest wywoływana kwadratowy, w tym przypadku, co umieścić w wejście. 2268 01:52:42,520 --> 01:52:43,830 I wrócę wyjście. 2269 01:52:43,830 --> 01:52:46,210 A jeszcze wcześniej, jeśli Otwieram Innym przykładem 2270 01:52:46,210 --> 01:52:51,640 od wcześniej, co był nazywany prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Miałem nazwę druku, które powrócił nieważne, że tak powiem, 2272 01:52:54,770 --> 01:52:58,730 Albo powrócił nic, a po prostu miał efekt uboczny. 2273 01:52:58,730 --> 01:53:00,230 >> Więc co tu się dzieje? 2274 01:53:00,230 --> 01:53:03,520 Dobrze, rozważmy funkcję uzyskać ciąg na chwilę. 2275 01:53:03,520 --> 01:53:06,570 Byliśmy przy użyciu funkcji uzyskać ciąg w następujący sposób. 2276 01:53:06,570 --> 01:53:10,464 >> Mieliśmy funkcją uzyskać łańcuch, jak to CS50.h, 2277 01:53:10,464 --> 01:53:16,624 zawierają standardowe io.h, int, główny kanał, pustkę. 2278 01:53:16,624 --> 01:53:18,790 A potem za każdym razem mam nazywa get ciąg tej pory, 2279 01:53:18,790 --> 01:53:23,260 Powiedziałem coś podobnego, string s dostaje się ciąg, ponieważ get string-- 2280 01:53:23,260 --> 01:53:27,880 nazwijmy to get.c-- get ciąg Sam zwraca ciąg mogę potem 2281 01:53:27,880 --> 01:53:32,050 używać, i powiedzieć cześć, przecinek, procent s, backslash n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Więc jest to ten sam przykład, Naprawdę, które mieliśmy wcześniej. 2283 01:53:35,660 --> 01:53:37,920 Więc ciąg zwraca wartość. 2284 01:53:37,920 --> 01:53:41,260 Ale przed chwilą, druk ciąg nie zwraca wartości. 2285 01:53:41,260 --> 01:53:42,721 To po prostu ma efekt uboczny. 2286 01:53:42,721 --> 01:53:44,220 Więc to jest zasadnicza różnica. 2287 01:53:44,220 --> 01:53:46,710 Widzieliśmy różne rodzaje funkcji teraz, 2288 01:53:46,710 --> 01:53:49,490 Niektóre z nich są zwrócone wartości, z których niektóre nie. 2289 01:53:49,490 --> 01:53:51,890 Więc może to ciąg lub int lub pływaka. 2290 01:53:51,890 --> 01:53:53,480 A może to po prostu nieważne. 2291 01:53:53,480 --> 01:53:55,710 >> A różnica jest że te funkcje, które 2292 01:53:55,710 --> 01:53:59,940 uzyskać dane i zwracają wartość są w rzeczywistości przynosząc coś z powrotem do stołu, 2293 01:53:59,940 --> 01:54:01,110 że tak powiem. 2294 01:54:01,110 --> 01:54:03,710 Więc idź naprzód i spojrzeć na jeden ostateczny zestaw 2295 01:54:03,710 --> 01:54:09,129 przykładów, które daje poczucie, teraz, od jak może, rzeczywiście, abstrakcyjne lepiej, 2296 01:54:09,129 --> 01:54:11,670 i lepsze i lepiej, lub więcej, i więcej, i inne, w celu 2297 01:54:11,670 --> 01:54:13,810 napisać ostatecznie lepszy kod. 2298 01:54:13,810 --> 01:54:16,860 Idziemy do przodu, a także w duchu od zera, należy wykonać następujące czynności. 2299 01:54:16,860 --> 01:54:21,700 >> Pozwól mi iść dalej i obejmują CS50.h i standard IO.h. 2300 01:54:21,700 --> 01:54:24,010 Pozwólcie mi iść do przodu i dać Sam int, główny kanał, nieważne. 2301 01:54:24,010 --> 01:54:27,380 I pozwól mi iść do przodu, nazywamy to cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> I pozwól mi iść do przodu i po prostu jak Scratch, wydrukować kaszel / N. 2303 01:54:35,510 --> 01:54:37,170 I chcę zrobić to trzy razy. 2304 01:54:37,170 --> 01:54:39,670 Więc ja, oczywiście, po prostu będzie skopiować i wkleić trzy razy. 2305 01:54:39,670 --> 01:54:46,440 Jestem teraz zamiar zrobić kaszel dot ukośnik kaszel. 2306 01:54:46,440 --> 01:54:50,120 Dajmy sobie trochę więcej miejsca tutaj, Enter, kaszel, kaszel, kaszel. 2307 01:54:50,120 --> 01:54:53,970 >> Jest, oczywiście, już okazja do poprawy. 2308 01:54:53,970 --> 01:54:55,679 Mam skopiowane i wklejone kilka razy dzisiaj. 2309 01:54:55,679 --> 01:54:58,261 Ale to był tylko więc nie trzeba wpisywać tyle znaków. 2310 01:54:58,261 --> 01:55:00,250 Wciąż zmieniane co te wiersze kodu. 2311 01:55:00,250 --> 01:55:04,240 >> Te trzy linie są identyczne, która czuje się leniwi i rzeczywiście jest, 2312 01:55:04,240 --> 01:55:07,110 i prawdopodobnie nie jest właściwe podejście. 2313 01:55:07,110 --> 01:55:11,029 Więc z czym składnik możemy poprawić ten kod? 2314 01:55:11,029 --> 01:55:12,570 Nie mamy skopiować i wkleić kod. 2315 01:55:12,570 --> 01:55:15,070 >> I rzeczywiście, za każdym razem czujesz Sam kopiowanie i wklejanie, 2316 01:55:15,070 --> 01:55:17,700 i nawet nie zmieniając kodu kursy są tam lepszy sposób. 2317 01:55:17,700 --> 01:55:19,470 I rzeczywiście, nie ma. 2318 01:55:19,470 --> 01:55:22,510 Pozwólcie mi iść do przodu i robić pętli for, choć może nie składnia 2319 01:55:22,510 --> 01:55:24,570 nadejść w sposób naturalny. 2320 01:55:24,570 --> 01:55:29,494 >> Czy to trzy razy, po prostu wykonując following-- 2321 01:55:29,494 --> 01:55:31,160 a ja akurat wiem to z praktyki. 2322 01:55:31,160 --> 01:55:32,810 Ale mamy szereg przykładów teraz. 2323 01:55:32,810 --> 01:55:34,950 I zobaczysz w Internecie więcej odniesień martwych. 2324 01:55:34,950 --> 01:55:37,790 >> Jest składnia w pozycji 6, które podobnie jak Scratch, który powtarza 2325 01:55:37,790 --> 01:55:40,090 Blok, powtarzaj następujące trzy razy. 2326 01:55:40,090 --> 01:55:41,340 To trochę magiczne teraz. 2327 01:55:41,340 --> 01:55:43,050 Ale to dostanie więcej i bardziej znajome. 2328 01:55:43,050 --> 01:55:45,050 >> I to będzie powtarzać Linia osiem trzy razy, 2329 01:55:45,050 --> 01:55:52,390 tak, że jeśli ponownie skompilować make kaszel, Dot slash kaszel, kaszel, kaszel, kaszel. 2330 01:55:52,390 --> 01:55:54,030 Nadal działa w ten sam sposób. 2331 01:55:54,030 --> 01:55:55,550 Więc to wszystko jest w porządku i dobre. 2332 01:55:55,550 --> 01:55:58,200 Ale to nie jest bardzo roztargniony. 2333 01:55:58,200 --> 01:55:59,371 >> Jest to całkowicie prawidłowe. 2334 01:55:59,371 --> 01:56:01,370 Ale wydaje się, jakby tam może być okazją, 2335 01:56:01,370 --> 01:56:03,750 jak w świecie Scratch do rodzaju początek 2336 01:56:03,750 --> 01:56:07,530 dodać kilka semantykę tutaj tak, że Nie wystarczy mieć trochę dla pętli 2337 01:56:07,530 --> 01:56:09,867 oraz funkcja, która mówi kaszel, czy też kaszel. 2338 01:56:09,867 --> 01:56:10,450 Wiesz co? 2339 01:56:10,450 --> 01:56:12,620 Spróbuję być trochę chłodniej niż to, 2340 01:56:12,620 --> 01:56:16,090 i rzeczywiście napisać funkcję, która ma pewne skutki uboczne, nazywają go kaszel. 2341 01:56:16,090 --> 01:56:20,830 >> I to nie bierze wejście i zwraca żadnej wartości jako wyjścia. 2342 01:56:20,830 --> 01:56:22,680 Ale wiesz co to robi? 2343 01:56:22,680 --> 01:56:29,370 Czyni this-- printf, cytat cytatu, kaszel. 2344 01:56:29,370 --> 01:56:32,380 >> A teraz tutaj, jadę iść do przodu i do int, 2345 01:56:32,380 --> 01:56:36,070 I dostaje do zera, i mniej niż 3, ja plus plusem. 2346 01:56:36,070 --> 01:56:39,770 Mam zamiar nie printf, która jest Realizacja zapewne niski poziom 2347 01:56:39,770 --> 01:56:40,270 Szczegół. 2348 01:56:40,270 --> 01:56:41,353 Nie obchodzi mnie, jak kaszel. 2349 01:56:41,353 --> 01:56:43,240 Chcę po prostu użyć funkcji kaszel. 2350 01:56:43,240 --> 01:56:44,840 A ja po prostu zamiar zadzwonić kaszel. 2351 01:56:44,840 --> 01:56:46,204 >> Teraz, zwróć uwagę na dychotomii. 2352 01:56:46,204 --> 01:56:49,370 Podczas wywoływania funkcji, jeśli nie Aby nadać mu wejść całkowicie w porządku. 2353 01:56:49,370 --> 01:56:51,780 Wystarczy zrobić otwarte paren blisko paren i gotowe. 2354 01:56:51,780 --> 01:56:56,271 >> Podczas definiowania funkcji lub Oświadczam, prototypów funkcji, 2355 01:56:56,271 --> 01:56:58,770 jeśli z góry wiadomo, że nie jest zamierza podjąć żadnych argumentów, 2356 01:56:58,770 --> 01:57:01,170 powiedzieć, nieważne tam tych nawiasach. 2357 01:57:01,170 --> 01:57:05,660 A to sprawia, że ​​pewność, że Nie przypadkowo nadużywać go. 2358 01:57:05,660 --> 01:57:07,020 Pozwólcie mi iść do przodu i zrobić kaszel. 2359 01:57:07,020 --> 01:57:08,540 I, oczywiście, zrobiłem błąd. 2360 01:57:08,540 --> 01:57:10,410 >> Cholera, nie jest tak dorozumiane oświadczenie. 2361 01:57:10,410 --> 01:57:11,325 Ale to jest w porządku. 2362 01:57:11,325 --> 01:57:12,590 Jest to łatwo naprawić. 2363 01:57:12,590 --> 01:57:18,240 Muszę tylko prototyp wyżej w moim pliku, niż jestem w rzeczywistości jej stosowania. 2364 01:57:18,240 --> 01:57:20,070 >> Więc teraz pozwól mi kaszel znów miłe. 2365 01:57:20,070 --> 01:57:20,790 Teraz działa. 2366 01:57:20,790 --> 01:57:22,930 Sprawdź, kaszel, kaszel, kaszel, kaszel. 2367 01:57:22,930 --> 01:57:25,930 Więc można by pomyśleć, że jesteśmy naprawdę nieco ponad inżynierii ten problem. 2368 01:57:25,930 --> 01:57:26,763 I rzeczywiście, jesteśmy. 2369 01:57:26,763 --> 01:57:28,870 To nie jest dobra Kandydat programu 2370 01:57:28,870 --> 01:57:31,930 w tym momencie do refactoring, i robi, co jest 2371 01:57:31,930 --> 01:57:35,645 zwany rozkładem hierarchiczny, gdzie przejąć jakiś kod, a następnie 2372 01:57:35,645 --> 01:57:38,790 wy rodzaj czynnika rzeczy out, tak przypisywać więcej semantyki do nich: 2373 01:57:38,790 --> 01:57:40,930 i ponowne ostatecznie dłuższym okresie. 2374 01:57:40,930 --> 01:57:43,490 Ale to jest budulcem stronę Bardziej zaawansowane programy 2375 01:57:43,490 --> 01:57:45,600 że zaczniemy pisząc, że niebawem 2376 01:57:45,600 --> 01:57:50,090 pozwala nam słownictwa z którym pisać lepsze kodu. 2377 01:57:50,090 --> 01:57:52,920 I rzeczywiście, zobaczmy, czy mamy Nie można uogólniać tego dalej. 2378 01:57:52,920 --> 01:57:57,984 >> Wydaje się trochę lame, że ja, głównym, trzeba się martwić o to darn pętli for 2379 01:57:57,984 --> 01:57:59,400 i znowu dzwoni kaszel. 2380 01:57:59,400 --> 01:58:03,050 Dlaczego nie mogę po prostu powiedzieć, kaszel, Proszę kaszel trzy razy? 2381 01:58:03,050 --> 01:58:08,170 Innymi słowy, dlaczego nie można po prostu swój wkład do kaszlu i to zrobić? 2382 01:58:08,170 --> 01:58:11,270 >> Dlaczego nie mogę po prostu powiedzieć, w Głównym kaszel trzy razy. 2383 01:58:11,270 --> 01:58:13,150 A teraz, jest to rodzaj magiczne. 2384 01:58:13,150 --> 01:58:14,540 Jest tu bardzo iteracyjny. 2385 01:58:14,540 --> 01:58:15,940 I to jest rzeczywiście krokiem dziecka. 2386 01:58:15,940 --> 01:58:19,250 >> Ale zdolność do powiedzenia Linia osiem, kaszel trzykrotnie 2387 01:58:19,250 --> 01:58:20,730 to jest po prostu o wiele bardziej czytelny. 2388 01:58:20,730 --> 01:58:24,210 A plus, nie trzeba znać lub opieki, jak kaszel jest realizowany. 2389 01:58:24,210 --> 01:58:26,460 I rzeczywiście, w dalszej części Termin i projektów końcowych, 2390 01:58:26,460 --> 01:58:29,150 jeśli projekt walki z kolega lub dwóch kolegów, 2391 01:58:29,150 --> 01:58:32,370 zdasz sobie sprawę, że masz zamiar muszą lub chcą podzielić pracę. 2392 01:58:32,370 --> 01:58:34,650 >> I masz zamiar chcą decydować z góry, kto zrobi co, 2393 01:58:34,650 --> 01:58:35,483 oraz w którym elementy? 2394 01:58:35,483 --> 01:58:37,520 I nie byłoby miło Jeśli, na przykład, 2395 01:58:37,520 --> 01:58:40,100 przejęcie pisania Main, zrobione. 2396 01:58:40,100 --> 01:58:43,470 A twój współlokator, albo zwrot partnerem bardziej ogólnie, 2397 01:58:43,470 --> 01:58:45,230 dba o realizację kaszel. 2398 01:58:45,230 --> 01:58:49,540 >> I ten podział, to Ściany abstrakcji, 2399 01:58:49,540 --> 01:58:52,310 lub warstwy abstrakcji jeśli będziesz, są bardzo wydajne, 2400 01:58:52,310 --> 01:58:55,480 ponieważ szczególnie dla większych, bardziej złożone programy i systemy 2401 01:58:55,480 --> 01:59:00,070 Pozwala wielu ludzi do budowania rzeczy razem, a ostatecznie 2402 01:59:00,070 --> 01:59:02,680 zszyć ich pracy ze sobą w ten sposób. 2403 01:59:02,680 --> 01:59:05,332 Ale, oczywiście, mamy trzeba teraz naprawić kaszel. 2404 01:59:05,332 --> 01:59:07,290 Musimy powiedzieć kaszel że, hej, wiesz co? 2405 01:59:07,290 --> 01:59:11,230 Idziesz do konieczności zdawania input-- więc nie nieważne, ale int i teraz. 2406 01:59:11,230 --> 01:59:15,170 Idziemy do przodu i umieścić w kaszel int. I dostaje zero. 2407 01:59:15,170 --> 01:59:16,890 >> i jest mniejsze od tego jak wiele razy. 2408 01:59:16,890 --> 01:59:18,550 Powiedziałem trzy wcześniej. 2409 01:59:18,550 --> 01:59:20,420 Ale to nie to, co chcę. 2410 01:59:20,420 --> 01:59:25,520 Chcę, kaszel być uogólnione na obsługiwać dowolną liczbę iteracji. 2411 01:59:25,520 --> 01:59:28,800 >> Tak, rzeczywiście, jest to, że chcę n, co użytkownik mówi mi. 2412 01:59:28,800 --> 01:59:31,620 Teraz mogę śmiało powiedzieć, drukowania i kaszel. 2413 01:59:31,620 --> 01:59:34,750 I bez względu na to, jaki numer użytkownik przechodzi, 2414 01:59:34,750 --> 01:59:36,890 Będę iteracji, że wiele razy. 2415 01:59:36,890 --> 01:59:39,160 >> Tak więc na koniec dnia Program jest identyczne. 2416 01:59:39,160 --> 01:59:42,820 Zauważmy jednak, wszystkie te rzeczy może być nawet w innym pliku. 2417 01:59:42,820 --> 01:59:45,620 Rzeczywiście, nie wiem u Chwila jak printf jest realizowany. 2418 01:59:45,620 --> 01:59:47,980 >> Nie wiem w tej chwili, jak się ciąg, lub uzyskać int, lub uzyskać pływaka 2419 01:59:47,980 --> 01:59:48,646 są realizowane. 2420 01:59:48,646 --> 01:59:50,930 A ja nie chcę zobaczyć je na ekranie. 2421 01:59:50,930 --> 01:59:55,320 Jak to jest, ja zaczynam skupiać się na mój program, a nie te funkcje. 2422 01:59:55,320 --> 01:59:59,070 >> I tak, rzeczywiście, jak tylko rozpocząć faktoringu kod jak to uwagę, 2423 01:59:59,070 --> 02:00:01,397 możemy nawet przenieść kaszel do osobnego pliku? 2424 02:00:01,397 --> 02:00:02,730 Ktoś inny mógłby go wdrożyć. 2425 02:00:02,730 --> 02:00:06,810 A ty i twój program staje się Bardzo piękne i bardzo czytelny, 2426 02:00:06,810 --> 02:00:10,830 zapewne, naprawdę cztery Program tam linię. 2427 02:00:10,830 --> 02:00:13,510 >> Więc śmiało teraz i uczynić jeszcze jedną zmianę. 2428 02:00:13,510 --> 02:00:16,180 Zauważ, że mój prototyp musi zmienić się szczyt. 2429 02:00:16,180 --> 02:00:18,390 Więc pozwól mi naprawić tak Nie daj się wrzasnął. 2430 02:00:18,390 --> 02:00:22,580 >> Sprawdź, kaszel, pozwól mi działać kaszel raz więcej, nadal robi to samo. 2431 02:00:22,580 --> 02:00:26,010 Teraz jednak zauważyć mamy składnikiem jednej z wersji finalnej. 2432 02:00:26,010 --> 02:00:26,940 Wiesz co? 2433 02:00:26,940 --> 02:00:29,040 Nie chcę po prostu kaszel, niekoniecznie. 2434 02:00:29,040 --> 02:00:30,802 Chcę mieć coś bardziej ogólnego. 2435 02:00:30,802 --> 02:00:31,510 Więc wiesz co? 2436 02:00:31,510 --> 02:00:32,450 Chcę to zrobić. 2437 02:00:32,450 --> 02:00:37,140 Chcę mieć, podobnie jak Scratch robi, blok powiedzieć, ale nie tylko 2438 02:00:37,140 --> 02:00:38,680 coś powiedzieć jakąś liczbę razy. 2439 02:00:38,680 --> 02:00:41,510 Chcę to powiedzieć bardzo specyficzny łańcuch. 2440 02:00:41,510 --> 02:00:43,850 A zatem, nie wiem ma to po prostu powiedzieć kaszel. 2441 02:00:43,850 --> 02:00:47,660 Chcę, żeby powiedzieć cokolwiek Łańcuch jest przekazywana. 2442 02:00:47,660 --> 02:00:49,960 >> Tak więc zauważyć, mam uogólnione to tak, że teraz 2443 02:00:49,960 --> 02:00:53,110 powiedzmy czuje się jak dobre imię do tego, jak nowa, 2444 02:00:53,110 --> 02:00:55,530 przyjmuje dwa argumenty, w przeciwieństwie do zera. 2445 02:00:55,530 --> 02:00:56,570 Jednym z nich jest ciągiem. 2446 02:00:56,570 --> 02:00:57,300 Jednym z nich jest typu int. 2447 02:00:57,300 --> 02:00:58,130 >> I mogę je przełączać. 2448 02:00:58,130 --> 02:01:00,713 Po prostu coś w rodzaju idei znaczy łańcuch, a potem 2449 02:01:00,713 --> 02:01:01,940 ile razy później. 2450 02:01:01,940 --> 02:01:03,970 Odpada Oznacza to nadal niczego nie powrócić. 2451 02:01:03,970 --> 02:01:06,428 Są to tylko strona wizualna efekty, jak w przypadku [? Jordan?] 2452 02:01:06,428 --> 02:01:08,240 werbalne efektem ubocznym wrzask. 2453 02:01:08,240 --> 02:01:12,630 To wciąż robi coś n razy, 0 do, ale nie jest równa n. 2454 02:01:12,630 --> 02:01:14,540 Oznacza to całkowite n razy. 2455 02:01:14,540 --> 02:01:16,540 A potem po prostu wydrukować cokolwiek to jest ciąg. 2456 02:01:16,540 --> 02:01:19,060 Więc ja naprawdę uogólnione ta linia kodu. 2457 02:01:19,060 --> 02:01:22,460 Więc teraz, w jaki sposób mogę wdrożyć funkcja kaszel? 2458 02:01:22,460 --> 02:01:25,520 >> mogę zrobić void kaszel. 2459 02:01:25,520 --> 02:01:28,501 A mogę jeszcze wziąć w jaki wiele razy chcesz kaszel. 2460 02:01:28,501 --> 02:01:29,250 Ale wiesz co? 2461 02:01:29,250 --> 02:01:31,240 Teraz mogę punt powiedzieć. 2462 02:01:31,240 --> 02:01:36,540 >> Mogę zadzwonić powiedzieć, z Słowo kaszel, przekazując n. 2463 02:01:36,540 --> 02:01:40,410 A jeśli chcę również wdrożenia, tylko dla zabawy, funkcja kichania, 2464 02:01:40,410 --> 02:01:42,290 Mogę kichanie pewną liczbę razy. 2465 02:01:42,290 --> 02:01:47,300 I mogę zapewnić ponowne n, ponieważ zauważyć, że w tym kontekście m lub zakresu 2466 02:01:47,300 --> 02:01:49,470 istnieje tylko w tej funkcji. 2467 02:01:49,470 --> 02:01:52,767 >> I N w tym kontekście tylko istnieje w tej funkcji tutaj. 2468 02:01:52,767 --> 02:01:54,600 Więc wracamy do te zagadnienia z zakresu. 2469 02:01:54,600 --> 02:02:01,160 I tu, ja po prostu powiedzieć, Achoo i to n razy, średnik. 2470 02:02:01,160 --> 02:02:04,340 >> A teraz po prostu trzeba pożyczać Sygnatury te funkcjonują tutaj. 2471 02:02:04,340 --> 02:02:06,290 Więc kaszel jest prawidłowe. 2472 02:02:06,290 --> 02:02:10,090 Odpada kichnięcie jest prawidłowe. 2473 02:02:10,090 --> 02:02:12,390 >> I wciąż wystarczy powiedzieć. 2474 02:02:12,390 --> 02:02:18,990 Więc mam zamiar powiedzieć, powiedzmy łańcuch s, int n, średnik. 2475 02:02:18,990 --> 02:02:22,010 Tak już ponad inżynierii cholery z tym programem. 2476 02:02:22,010 --> 02:02:23,760 >> I to nie robi niekoniecznie oznacza to 2477 02:02:23,760 --> 02:02:26,343 co należy zrobić podczas pisania nawet najprostszych programów. 2478 02:02:26,343 --> 02:02:29,280 Zrób coś, co jest oczywiście bardzo proste, bardzo krótki, 2479 02:02:29,280 --> 02:02:31,800 i ponownego wprowadzenia jej w życie używając zbyt dużo kodu. 2480 02:02:31,800 --> 02:02:34,560 Ale rzeczywiście zobaczyć, aw Czas spojrzeć wstecz na tych przykładach, 2481 02:02:34,560 --> 02:02:38,610 i uświadomić sobie, och, to są kroki wzięliśmy rzeczywiście generalizować, 2482 02:02:38,610 --> 02:02:40,797 czynnik coś, aż na koniec dnia 2483 02:02:40,797 --> 02:02:42,380 mój kod jest rzeczywiście bardzo rozsądne. 2484 02:02:42,380 --> 02:02:45,960 Ponieważ jeśli chcę kaszel trzy Czasy następnie trzykrotnie kichania, 2485 02:02:45,960 --> 02:02:50,420 Jestem po prostu będzie powtórzona ta, Program sprawiają, kaszel, kaszel i uruchomić. 2486 02:02:50,420 --> 02:02:53,620 I mam trzy kaszlu i trzy kicha. 2487 02:02:53,620 --> 02:02:55,990 >> I tak to jest podstawowy Paradygmat, jeśli chcesz, 2488 02:02:55,990 --> 02:03:00,110 w jaki sposób możemy go o rzeczywiście realizuje program. 2489 02:03:00,110 --> 02:03:03,220 Ale niech tylko teraz zobaczyć, co to jest robiliśmy przez cały ten czas, 2490 02:03:03,220 --> 02:03:06,940 i co niektóre z końcowych części stoją za tym prostym poleceniem. 2491 02:03:06,940 --> 02:03:09,620 Na koniec dnia, mamy używałeś brzękiem jak nasz kompilator. 2492 02:03:09,620 --> 02:03:11,494 Byliśmy pisanie źródło Kod, przekształcając go 2493 02:03:11,494 --> 02:03:12,820 poprzez Clang do kodu maszynowego. 2494 02:03:12,820 --> 02:03:15,540 >> I używaliśmy Bądź po prostu aby ułatwić naszym klawiszy tak 2495 02:03:15,540 --> 02:03:20,740 że nie trzeba pamiętać te zaklęcia sam Clang. 2496 02:03:20,740 --> 02:03:22,640 Ale co to właściwie robi Dodać? 2497 02:03:22,640 --> 02:03:24,750 Oraz z kolei, o co Clang właściwie robi? 2498 02:03:24,750 --> 02:03:28,790 >> Okazuje się, iż mamy uproszczone Dzisiejsza dyskusja mówiąc, 2499 02:03:28,790 --> 02:03:33,090 wziąć kod źródłowy, należy przekazać go jako Wejście do kompilatora, co daje 2500 02:03:33,090 --> 02:03:35,750 Wyjście maszynie Kod, okazuje się tam 2501 02:03:35,750 --> 02:03:37,420 kilka różnych kroków wewnątrz tam. 2502 02:03:37,420 --> 02:03:41,940 I zestawiania dzieje się parasol termin na całą masę krokach. 2503 02:03:41,940 --> 02:03:43,970 Ale niech tylko podrażnić to się bardzo szybko. 2504 02:03:43,970 --> 02:03:48,070 >> Okazuje się, że robiliśmy więcej rzeczy za każdym razem uruchomić program, 2505 02:03:48,070 --> 02:03:50,990 i za każdym razem jak skompilować program dziś. 2506 02:03:50,990 --> 02:03:55,020 Więc przerób dotyczy this-- niczego w programie C, 2507 02:03:55,020 --> 02:03:58,720 jak zobaczymy znowu i znowu, który zaczyna się od tego skrótu symbolu, 2508 02:03:58,720 --> 02:04:03,320 lub symbol hashtag tutaj, oznacza to dyrektywa preprocesora. 2509 02:04:03,320 --> 02:04:07,330 Oznacza to, że w tym przypadku, hej komputer, coś zrobić z tym plikiem 2510 02:04:07,330 --> 02:04:09,430 zanim faktycznie kompilacji mój własny kod. 2511 02:04:09,430 --> 02:04:15,220 >> W tym przypadku, hash to znaczy, zasadniczo sposobem C na powiedzenie, 2512 02:04:15,220 --> 02:04:19,325 hej komputer, idź zawartość z CS50.h i wklej je tutaj. 2513 02:04:19,325 --> 02:04:22,170 Hej komputer, przejść uzyskać Zawartość standardowego io.h, 2514 02:04:22,170 --> 02:04:24,690 gdziekolwiek by to było na dysk twardy, wklej go tutaj. 2515 02:04:24,690 --> 02:04:27,390 Więc te rzeczy się zdarzają najpierw podczas wstępnego przetwarzania. 2516 02:04:27,390 --> 02:04:28,880 >> I Clang robi to wszystko dla nas. 2517 02:04:28,880 --> 02:04:30,510 I robi to tak cholernie szybko, nawet nie 2518 02:04:30,510 --> 02:04:32,000 zobaczyć cztery różne rzeczy dzieje. 2519 02:04:32,000 --> 02:04:34,100 Ale to pierwszy taki krok. 2520 02:04:34,100 --> 02:04:35,560 >> Co dzieje się dalej? 2521 02:04:35,560 --> 02:04:38,320 Cóż, kolejna oficjalna krokiem jest kompilacja. 2522 02:04:38,320 --> 02:04:40,385 I okazuje się, że kompilacji programu 2523 02:04:40,385 --> 02:04:44,060 Technicznie oznacza przejście z Kod źródłowy, rzeczy mamy 2524 02:04:44,060 --> 02:04:47,890 pisze dziś, do czegoś Zespół nazywa się kod, coś 2525 02:04:47,890 --> 02:04:49,260 który wygląda trochę inaczej. 2526 02:04:49,260 --> 02:04:51,050 >> I rzeczywiście, możemy zobaczyć to naprawdę szybko. 2527 02:04:51,050 --> 02:04:53,890 Pozwól, że rzeczywiście iść do mojego IDE. 2528 02:04:53,890 --> 02:04:58,050 Pozwólcie mi iść do przodu i otwarta hello.c, które Jest to pierwszy program, z którym mamy 2529 02:04:58,050 --> 02:04:59,120 rozpoczęła dziś. 2530 02:04:59,120 --> 02:05:04,130 I pozwól mi iść do przodu i uruchomić Clang A trochę inaczej, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 których faktycznie się Daj mi jeszcze hello.s plików. 2532 02:05:07,720 --> 02:05:10,330 >> I prawdopodobnie nigdy nie będziemy znów zobaczyć ten rodzaj kodu. 2533 02:05:10,330 --> 02:05:13,030 Jeśli wziąć niższy poziom Systemy klasy jak CS61, 2534 02:05:13,030 --> 02:05:14,920 widać dużo więcej Tego rodzaju kodu. 2535 02:05:14,920 --> 02:05:17,020 Ale to jest w asemblerze. 2536 02:05:17,020 --> 02:05:22,050 Jest to asembler x86 że procesor, który jest zasadniczym 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE rzeczywiście rozumie. 2538 02:05:24,460 --> 02:05:27,060 >> I tajemnicze jak to robi patrzeć, to jest coś 2539 02:05:27,060 --> 02:05:29,180 komputer rozumie całkiem dobrze. 2540 02:05:29,180 --> 02:05:30,790 Sub q, to ​​odejmowanie. 2541 02:05:30,790 --> 02:05:31,660 Jest ruchy. 2542 02:05:31,660 --> 02:05:35,730 >> Nie dzwoni funkcji tutaj x oring, ruch, dodatek, pop, 2543 02:05:35,730 --> 02:05:36,430 powrót. 2544 02:05:36,430 --> 02:05:38,850 Więc jest kilka bardzo Instrukcje niski poziom 2545 02:05:38,850 --> 02:05:41,280 że procesory zrozumieć, że Wspomniałem wcześniej. 2546 02:05:41,280 --> 02:05:43,100 To jest to, co Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Istnieją wzory zer i jedynek, które 2548 02:05:45,030 --> 02:05:51,800 mapa do tych arcanely sformułowane, ale dość dobrze nazwane, instrukcje, 2549 02:05:51,800 --> 02:05:52,780 że tak powiem. 2550 02:05:52,780 --> 02:05:54,780 To, co się dzieje, gdy kompilowania kodu. 2551 02:05:54,780 --> 02:05:58,560 Otrzymasz montaż język z tego, co 2552 02:05:58,560 --> 02:06:04,680 Oznacza trzecim etapem jest montaż że kod montażu w ostatecznym rozrachunku, 2553 02:06:04,680 --> 02:06:09,080 Maszyna code-- zer i jedynek, a nie Tekst, który właśnie przed chwilą zobaczył. 2554 02:06:09,080 --> 02:06:13,370 >> Więc wstępnego przetwarzania czy to znaleźć i wymienić, i kilka innych rzeczy. 2555 02:06:13,370 --> 02:06:16,430 Kompilacja odbywa źródło Kod z C, kod źródłowy 2556 02:06:16,430 --> 02:06:18,980 że pisał do montażu kod, który po prostu spojrzał na. 2557 02:06:18,980 --> 02:06:22,170 Montaż odbywa że montaż Kod z zer i jedynek 2558 02:06:22,170 --> 02:06:24,680 że procesor będzie naprawdę zrozumieć na koniec dnia. 2559 02:06:24,680 --> 02:06:27,630 I powiązanie jest ostatnim krokiem że zdarza us-- ponownie 2560 02:06:27,630 --> 02:06:29,830 tak szybko, że nawet nie notice-- który mówi, 2561 02:06:29,830 --> 02:06:32,460 hej komputer, podjąć wszystkie z zer i jedynek, które 2562 02:06:32,460 --> 02:06:36,750 wynikał z kompilacją kodu Dawida, a jego głównym zadaniem w tej sprawie. 2563 02:06:36,750 --> 02:06:39,160 >> I hej komputer, idź wszystkich zer i jedynek 2564 02:06:39,160 --> 02:06:42,180 że pracownicy CS50 napisał wewnątrz biblioteki CS50. 2565 02:06:42,180 --> 02:06:43,440 Wymieszać ci się z Dawida. 2566 02:06:43,440 --> 02:06:46,648 I hej komputer, przejdź się wszystkie zera oraz te, które ktoś inny napisał lat 2567 02:06:46,648 --> 02:06:47,470 temu przez printf. 2568 02:06:47,470 --> 02:06:49,880 I dodać je do Całość, dzięki czemu mamy 2569 02:06:49,880 --> 02:06:52,870 got my zer i jedynek, tym zer i jedynek pracownik wykonawczy CS50'S, 2570 02:06:52,870 --> 02:06:55,370 printf zera i jedynki, i coś jeszcze używamy. 2571 02:06:55,370 --> 02:07:00,410 >> Wszystkie one łączyć się ze sobą w jeden Program nazywa się, w tym przypadku, cześć. 2572 02:07:00,410 --> 02:07:03,141 Więc odtąd będziemy po prostu używać kompilacji słów. 2573 02:07:03,141 --> 02:07:06,390 A my przyjmujemy za pewnik, że kiedy mówimy, kompilacji programu, to znaczy, 2574 02:07:06,390 --> 02:07:08,849 hej zrobić przetwarzaniem wstępnym, montaż i łączenie. 2575 02:07:08,849 --> 02:07:11,890 Ale faktycznie niektóre rzeczy soczyste dzieje się pod maską. 2576 02:07:11,890 --> 02:07:13,723 A zwłaszcza jeśli uzyskać ciekawy trochę czasu, 2577 02:07:13,723 --> 02:07:15,900 można zacząć szturchanie dokoła na tym niższym poziomie. 2578 02:07:15,900 --> 02:07:19,660 Ale teraz sobie sprawę, że Wśród wynos na dziś 2579 02:07:19,660 --> 02:07:23,420 są dość po prostu początek procesu, 2580 02:07:23,420 --> 02:07:26,700 uzyskania komfortowo coś jak Hello World. 2581 02:07:26,700 --> 02:07:29,575 Rzeczywiście, większość z tego, co zrobiliśmy dzisiaj Z pewnością nie będzie tonąć w super szybko. 2582 02:07:29,575 --> 02:07:31,491 A to zajmie trochę czas, a niektóre praktyki. 2583 02:07:31,491 --> 02:07:33,864 A szanse są, można sortować z chcesz trafić klawiaturę 2584 02:07:33,864 --> 02:07:34,780 lub krzyczeć na ekranie. 2585 02:07:34,780 --> 02:07:35,880 A wszystko to jest OK. 2586 02:07:35,880 --> 02:07:38,320 Chociaż, może nie próbować to zrobić w bibliotece tak dużo. 2587 02:07:38,320 --> 02:07:40,820 >> I ostatecznie, będziesz być może jednak, aby rozpocząć 2588 02:07:40,820 --> 02:07:44,580 widząc wzorów, zarówno w dobrej kodu które zostały napisane i błędy 2589 02:07:44,580 --> 02:07:45,370 które zostały wykonane. 2590 02:07:45,370 --> 02:07:48,965 I podobnie jak w procesie staje się TF lub CA jest podobny, 2591 02:07:48,965 --> 02:07:51,590 zaczniesz lepiej i lepiej widząc te wzory, 2592 02:07:51,590 --> 02:07:53,774 i po prostu rozwiązywania własne problemy ostatecznie. 2593 02:07:53,774 --> 02:07:56,940 W międzyczasie będzie dużo nas do udzielenia Ci pomocy, a cię 2594 02:07:56,940 --> 02:07:57,481 przez to. 2595 02:07:57,481 --> 02:07:59,450 Aw napisać firm dla wszystkich problemów 2596 02:07:59,450 --> 02:08:01,366 będzie prowadzony przez wszystkich poleceń 2597 02:08:01,366 --> 02:08:05,330 że z pewnością wiedzą dużo praktyki teraz, 2598 02:08:05,330 --> 02:08:07,380 ale może być pokonywana nad głową do teraz. 2599 02:08:07,380 --> 02:08:08,580 I to jest całkowicie w porządku. 2600 02:08:08,580 --> 02:08:11,230 >> Ale, ostatecznie, idziesz aby rozpocząć, aby zobaczyć wzory pojawiają. 2601 02:08:11,230 --> 02:08:14,260 A kiedy ominąć wszystkie z głupie szczegółów, takich jak nawiasy, 2602 02:08:14,260 --> 02:08:16,710 i nawiasy klamrowe i średniki, i rzeczy, szczerze mówiąc, 2603 02:08:16,710 --> 02:08:19,360 nie jest wcale intelektualnie interesujące. 2604 02:08:19,360 --> 02:08:22,690 I nie jest celem podejmowania jakichkolwiek klasę wstępną. 2605 02:08:22,690 --> 02:08:24,410 To idee, które idą do materii. 2606 02:08:24,410 --> 02:08:26,659 >> To pętle, a warunki i funkcje, 2607 02:08:26,659 --> 02:08:30,552 i silniej abstrakcja, a faktoring kodu, 2608 02:08:30,552 --> 02:08:33,510 a dobry design i dobre styl, a ostatecznie prawidłowość 2609 02:08:33,510 --> 02:08:37,330 Twój kod, to ostatecznie będzie najbardziej znaczenia. 2610 02:08:37,330 --> 02:08:40,925 Więc w przyszłym tygodniu, weźmiemy je idee, które po raz pierwszy zobaczyłem w Scratch 2611 02:08:40,925 --> 02:08:42,800 a teraz przetłumaczone do C. I zaczniemy 2612 02:08:42,800 --> 02:08:45,740 przedstawić pierwszy z domen rzeczywistym świecie Kursu. 2613 02:08:45,740 --> 02:08:50,140 >> Będziemy koncentrować się na świecie, bezpieczeństwa, a bardziej konkretnie kryptografii 2614 02:08:50,140 --> 02:08:51,980 sztuka kodowania informacji. 2615 02:08:51,980 --> 02:08:54,000 A jednym z pierwszych Problemy ty sam 2616 02:08:54,000 --> 02:08:56,840 dostanie napisać poza gry z niektórych składni 2617 02:08:56,840 --> 02:08:59,880 i rozwiązywanie logicznych Problemy ostatecznie niedługo 2618 02:08:59,880 --> 02:09:03,960 jest faktycznie wyścig, lub szyfrowania, i ostatecznie odszyfrowania informacji. 2619 02:09:03,960 --> 02:09:06,470 I wszystko, co zrobiliśmy Dziś będzie dość niski 2620 02:09:06,470 --> 02:09:09,190 poziom jest po prostu będzie, aby umożliwić nam podjąć jeden i jeden, 2621 02:09:09,190 --> 02:09:13,550 i jeszcze jeden krok w kierunku wyżej pisanie jeszcze najciekawszą kod. 2622 02:09:13,550 --> 02:09:15,050 >> Więc tym bardziej na przyszły tydzień. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [ODTWARZANIE] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Co może mi pan powiedzieć o ostatni raz go widział? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Co Mogę powiedzieć, naprawdę? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 To znaczy, że był jak każdy inny próba pre-produkcji, 2631 02:09:35,340 --> 02:09:40,510 wyjątkiem było coś powiedział na samym końcu, że utknął ze mną. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -To Był CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -To Jest każdy krój, wielką pracę na próbę. 2636 02:09:52,190 --> 02:09:53,070 >> obiad -To? 2637 02:09:53,070 --> 02:09:54,986 >> -Tak, Ty i ja mogę chwycić kanapkę w kawałku. 2638 02:09:54,986 --> 02:09:58,380 Niech mi tylko debrief z David bardzo szybko. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [KONIEC ODTWARZANIA]