1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUSIC SVIRA] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Malan: U redu, ovo je CS50. 5 00:00:16,240 --> 00:00:18,010 I ovo je tjedan jedan. 6 00:00:18,010 --> 00:00:22,050 Dakle podsjetiti da je posljednji put u tjedan dana nula, smo se usredotočili na računalnom razmišljanja. 7 00:00:22,050 --> 00:00:25,440 A mi prebačen iz koje se Scratch, grafički programiranje 8 00:00:25,440 --> 00:00:27,360 jezik od naših prijatelja na MIT Media Laba. 9 00:00:27,360 --> 00:00:31,730 >> A s nule, zar smo istražiti ideje kao što je funkcija i stanja, 10 00:00:31,730 --> 00:00:35,210 i petlje, i varijable, pa čak i događaje i teme, i još mnogo toga. 11 00:00:35,210 --> 00:00:37,880 I danas, mi smo idući u nastaviti koristiti te ideje, 12 00:00:37,880 --> 00:00:40,630 i stvarno ih uzimati za gotovo, ali prevesti ih 13 00:00:40,630 --> 00:00:44,220 na drugi jezik poznat kao C. Sada, C je više tradicionalna jezik. 14 00:00:44,220 --> 00:00:46,020 To je niža razina jezik, ako hoćete. 15 00:00:46,020 --> 00:00:47,300 >> To je čisto tekstualnog. 16 00:00:47,300 --> 00:00:49,910 I tako na prvi pogled, to je sve će izgledati prilično zagonetan 17 00:00:49,910 --> 00:00:51,430 ako ste nikada nije programiran prije. 18 00:00:51,430 --> 00:00:53,530 Mi ćemo imati polu-dvotočke i zagrade, 19 00:00:53,530 --> 00:00:55,150 i vitičastim zagradama, i još mnogo toga. 20 00:00:55,150 --> 00:00:57,240 Ali shvatite da čak i iako sintaksa je 21 00:00:57,240 --> 00:01:00,600 o da izgleda malo upoznati za većinu vas, vidjeti dalje od toga. 22 00:01:00,600 --> 00:01:03,220 I pokušati vidjeti ideje to su, zaista, poznato, 23 00:01:03,220 --> 00:01:06,750 jer ovdje u tjednu jedna ono počet ćemo učiniti je usporediti, 24 00:01:06,750 --> 00:01:08,980 u početku, Scratch naspram C. 25 00:01:08,980 --> 00:01:12,350 >> Tako, na primjer, podsjetiti da kada smo proveden je prvi od naših programa 26 00:01:12,350 --> 00:01:16,220 zadnji put smo imali blok koji je izgledao malo nešto učinimo, kada je 27 00:01:16,220 --> 00:01:19,990 zelena zastava kliknuo, a onda smo imali jedan ili više slagalice ispod njega, 28 00:01:19,990 --> 00:01:22,150 u ovom slučaju, recimo, Hello World. 29 00:01:22,150 --> 00:01:24,870 Pa, zapravo, ispočetka, kad kliknem na tu zelenu zastavu 30 00:01:24,870 --> 00:01:27,390 pokrenuti svoj program, tako govoriti, to su 31 00:01:27,390 --> 00:01:29,520 blokovi koji se izvršavaju, ili trčanje. 32 00:01:29,520 --> 00:01:32,230 I, posebno, ispočetka rekao je, zdravo, svijet. 33 00:01:32,230 --> 00:01:35,377 >> Sada sam mogao navesti različite riječi ovdje. 34 00:01:35,377 --> 00:01:37,960 No, vidjet ćemo da je, doista, mnogo tih blocks-- I doista, 35 00:01:37,960 --> 00:01:41,880 u C mnoge functions-- može biti parametrizirana ili prilagoditi 36 00:01:41,880 --> 00:01:43,150 raditi različite stvari. 37 00:01:43,150 --> 00:01:45,520 U stvari, na C kada smo želite pretvoriti, a sada, 38 00:01:45,520 --> 00:01:47,567 ovo Scratch programu na ovom drugom jeziku, 39 00:01:47,567 --> 00:01:49,650 ćemo napisati Malo nešto ovako. 40 00:01:49,650 --> 00:01:52,540 >> Priznajem, tu je neki nepoznat sintaksa tamo najvjerojatnije, int, 41 00:01:52,540 --> 00:01:54,380 i zagrade, i nevažeće. 42 00:01:54,380 --> 00:01:57,740 Ali printf-- čak i ako bi mislim da bi samo biti ispisa. 43 00:01:57,740 --> 00:02:00,120 No, print znači ispis formatiran, kao što ćemo uskoro vidjeti. 44 00:02:00,120 --> 00:02:02,140 To doslovno će ispisati na zaslon god 45 00:02:02,140 --> 00:02:05,990 nalazi se unutar tih zagrada, što Naravno, u ovom slučaju je, zdravo svijet. 46 00:02:05,990 --> 00:02:09,290 >> Ali vi ćete primijetiti neke druge sintaksa, neki dvostruki navodnici, 47 00:02:09,290 --> 00:02:11,890 da su zagrade na kraju, polu-kolona i slično. 48 00:02:11,890 --> 00:02:15,027 Tako da je malo iznad glave, da tako kažemo, i spoznajno 49 00:02:15,027 --> 00:02:17,860 i sintaktički, da idemo imati na umu prije dugo. 50 00:02:17,860 --> 00:02:20,720 Ali shvatite da s praksom, to će početi iskočiti na vas. 51 00:02:20,720 --> 00:02:24,920 >> U stvari, neka se usredotočiti na tome Funkcija specifically-- u ovom slučaju, 52 00:02:24,920 --> 00:02:26,290 pozdravi svijet. 53 00:02:26,290 --> 00:02:27,560 Pa kažu da je funkcija. 54 00:02:27,560 --> 00:02:31,320 Pozdrav svijetu je njegova parametar, ili argument, njegova prilagodbu. 55 00:02:31,320 --> 00:02:34,320 >> A ekvivalentnost u C je samo će biti tu jednu liniju ovdje 56 00:02:34,320 --> 00:02:38,710 gdje printf je ekvivalent za, recimo, dvostruko citirani string, zdravo 57 00:02:38,710 --> 00:02:41,470 Svijet je ekvivalent, naravno, na ono što je u bijelom okviru tamo. 58 00:02:41,470 --> 00:02:45,680 I kosih crta n, iako malo čudno i odsutno od nule, 59 00:02:45,680 --> 00:02:49,380 jednostavno će imati učinak ćemo vidi u računalu, kao što je moj Mac ili PC-u, 60 00:02:49,380 --> 00:02:51,660 samo pomicanjem pokazivač u sljedeći redak. 61 00:02:51,660 --> 00:02:53,970 To je kao udaranje Ulaz na tipkovnici. 62 00:02:53,970 --> 00:02:55,580 >> Tako ćemo vidjeti da opet ne zadugo. 63 00:02:55,580 --> 00:02:58,640 Ali prvo, neka je pogledati ovo Drugi primjer u slučaju petlje. 64 00:02:58,640 --> 00:03:02,830 Imali smo tu zauvijek petlju posljednji put, koja je bila serija slagalice 65 00:03:02,830 --> 00:03:05,490 da je nešto doslovno forever-- u ovom slučaju, 66 00:03:05,490 --> 00:03:08,360 kažu, Hello World, Hello World, Hello World, Hello World. 67 00:03:08,360 --> 00:03:10,350 Dakle, to je beskonačna petlja po dizajnu. 68 00:03:10,350 --> 00:03:14,580 >> U C, ako želimo za provedbu ovog Ista ideja, mogli bi jednostavno to učiniti. 69 00:03:14,580 --> 00:03:19,570 Dok je istina, printf zdravo svijet-sada a, samo semantički, vrsta 70 00:03:19,570 --> 00:03:23,090 dočarava ideju radi nešto opet, i opet, i opet, 71 00:03:23,090 --> 00:03:23,980 i na koliko dugo? 72 00:03:23,980 --> 00:03:27,990 Pa, true-- podsjetiti da je istina je samo na dan ili jednom. 73 00:03:27,990 --> 00:03:30,660 >> A istina je, naravno, uvijek točno. 74 00:03:30,660 --> 00:03:33,060 Dakle, to je vrsta beznačajno izjava samo reći istina. 75 00:03:33,060 --> 00:03:36,890 Ali doista, ovo je namjerno, jer ako je istina samo je uvijek istina, 76 00:03:36,890 --> 00:03:40,850 nego dok je istina upravo implicira, ako je malo indirektno, 77 00:03:40,850 --> 00:03:44,070 koji od sljedećih linija koda između tih vitičastim zagradama 78 00:03:44,070 --> 00:03:48,320 samo treba izvršiti ponovno, i ponovno, i opet, i zapravo nikad prestati. 79 00:03:48,320 --> 00:03:50,230 >> Ali ako želite da se vaš petlje da se zaustavi, kao i mi 80 00:03:50,230 --> 00:03:54,500 prošli put s nečim poput ovo ponoviti sljedeće 50 puta, 81 00:03:54,500 --> 00:03:57,700 u C možemo učiniti isto s onim što je naziva za loop-- ključnu riječ 82 00:03:57,700 --> 00:03:59,330 ne bude vremena, ali za. 83 00:03:59,330 --> 00:04:03,290 I onda imamo neku novu sintaksu ovdje s int i = 0, i manje od 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 A mi ćemo se vratiti na to. 86 00:04:05,430 --> 00:04:09,660 No, to je jednostavno način na koji bi prevesti set nule blokova 87 00:04:09,660 --> 00:04:13,079 na skupu C linija koda. 88 00:04:13,079 --> 00:04:14,450 >> U međuvremenu, u obzir varijable. 89 00:04:14,450 --> 00:04:16,540 A, u stvari, samo mi vidio jedan trenutak prije. 90 00:04:16,540 --> 00:04:21,220 I u slučaju nule, ako htjela proglasiti varijablu nazvao sam 91 00:04:21,220 --> 00:04:24,590 za i biti cijeli broj, samo broj, i želimo postaviti na neku vrijednost, 92 00:04:24,590 --> 00:04:28,410 mi bi koristili ovu naranču blokirati here-- ja postavljena na 0. 93 00:04:28,410 --> 00:04:30,800 >> A vidjet ćemo danas i dalje, baš kao i prošlog tjedna, 94 00:04:30,800 --> 00:04:33,850 programeri učiniti gotovo uvijek početi brojati od nule, stvarno 95 00:04:33,850 --> 00:04:34,950 po konvenciji. 96 00:04:34,950 --> 00:04:37,250 Ali i zato što RECALL naša rasprava o binarnom sustavu, 97 00:04:37,250 --> 00:04:39,990 najmanji broj možete predstavlja s bilo kojim brojem bitova 98 00:04:39,990 --> 00:04:41,640 je pravedan idući u biti 0 sebe. 99 00:04:41,640 --> 00:04:45,190 I tako ćemo općenito početi inicijalizacije čak i naše varijable na 0. 100 00:04:45,190 --> 00:04:47,710 >> A u C da učine isto, ćemo reći int 101 00:04:47,710 --> 00:04:50,110 za cijeli broj, ja samo po konvenciji. 102 00:04:50,110 --> 00:04:53,390 Mogao sam nazvao varijabla sve što želim, baš kao u nule. 103 00:04:53,390 --> 00:04:57,770 A onda je jednak 0 samo prenijetih prava vrijednost 0 s desne 104 00:04:57,770 --> 00:05:01,319 i stavlja ga u varijablu, odnosno skladištenje kontejnera tamo, na lijevoj strani. 105 00:05:01,319 --> 00:05:04,360 A-zarez kao što ćemo see-- i vidjeli smo neke od tih already-- 106 00:05:04,360 --> 00:05:06,530 samo znači kraj misli. 107 00:05:06,530 --> 00:05:09,430 Nastavite raditi nešto drugo na linijama koje slijede. 108 00:05:09,430 --> 00:05:11,330 >> Sada, što je Boolean izraza? 109 00:05:11,330 --> 00:05:14,320 Sjetite se da je ispočetka, to su izrazi 110 00:05:14,320 --> 00:05:16,740 da su bilo istinito ili false-- pitanja, 111 00:05:16,740 --> 00:05:18,910 Stvarno, to su ili istinite ili lažne. 112 00:05:18,910 --> 00:05:21,960 Dakle, u slučaju nule, mogli bismo postaviti jednostavno pitanje kao što je ovaj, 113 00:05:21,960 --> 00:05:24,586 je i manje od 50? 114 00:05:24,586 --> 00:05:25,710 Tako sam, opet, je cijeli broj. 115 00:05:25,710 --> 00:05:27,210 Možda smo ga koristite u Scratch programu 116 00:05:27,210 --> 00:05:29,310 pratiti rezultatom ili tako nešto. 117 00:05:29,310 --> 00:05:33,810 Dakle, ovo sintaksa ovdje u nule samo znači, je i manje od 50? 118 00:05:33,810 --> 00:05:37,330 Pa, srećom, nešto je Jednostavan u C. A prevesti, 119 00:05:37,330 --> 00:05:41,780 to bismo jednostavno reći da mi manji od 50, koristeći poznatu ključ 120 00:05:41,780 --> 00:05:42,850 na tipkovnici. 121 00:05:42,850 --> 00:05:45,141 >> U međuvremenu, ako ste htjeli reći nešto više općenito, 122 00:05:45,141 --> 00:05:49,890 kao, dobro je x manje od y, gdje svaki x i y su sami varijable? 123 00:05:49,890 --> 00:05:52,280 Mi možemo učiniti istu stvar u C, tako dugo dok imamo 124 00:05:52,280 --> 00:05:53,942 stvorio ove varijable već. 125 00:05:53,942 --> 00:05:55,650 I vidjet ćemo kako to prije dugo. 126 00:05:55,650 --> 00:05:58,590 Mi bismo jednostavno reći x manje od y. 127 00:05:58,590 --> 00:06:00,530 >> Tako ste počinju vidi neke sličnosti. 128 00:06:00,530 --> 00:06:03,490 A oni ljudi koji su napravili Scratch je sigurno 129 00:06:03,490 --> 00:06:05,250 inspirirani nekim od tih osnovnih ideja. 130 00:06:05,250 --> 00:06:10,350 I vidjet ćete ovu vrstu Sintaksa u mnogim languages-- 131 00:06:10,350 --> 00:06:12,160 ne samo nule, ne samo C, ali Python, 132 00:06:12,160 --> 00:06:14,790 i JavaScript i drugi jezici dalje. 133 00:06:14,790 --> 00:06:18,270 >> Razmotrimo još jedan konstrukt iz C, pojam stanja, 134 00:06:18,270 --> 00:06:20,370 radi nešto uvjetno. 135 00:06:20,370 --> 00:06:22,720 Ako je nešto istina, to učiniti. 136 00:06:22,720 --> 00:06:24,457 Ako je istina nešto drugo, to učiniti. 137 00:06:24,457 --> 00:06:27,040 To je vrsta programiranja ekvivalent raskrižju. 138 00:06:27,040 --> 00:06:29,730 Možda je to dvosmjerna vilica, troputni vilica, ili više. 139 00:06:29,730 --> 00:06:32,800 A ispočetka, možemo imati vidio ovako nešto. 140 00:06:32,800 --> 00:06:34,010 >> Dakle, ovaj je jedan veliki. 141 00:06:34,010 --> 00:06:36,750 No, smatra da je relativna Jednostavnost logike. 142 00:06:36,750 --> 00:06:44,010 Ako je x manje od y, onda kažu x je manje od y, inače ako je x veći od y, 143 00:06:44,010 --> 00:06:46,230 onda reci je x veći od y. 144 00:06:46,230 --> 00:06:48,300 A onda, logično, ako mislite natrag ispočetka 145 00:06:48,300 --> 00:06:52,610 ili samo svoj vlastiti ljudski intuicija, i, ako x nije veći od y i x 146 00:06:52,610 --> 00:06:57,000 nije manja od y, tada naravno x će biti jednako y. 147 00:06:57,000 --> 00:06:59,690 Dakle, u ovom slučaju, gniježđenje ti Scratch blokovi, 148 00:06:59,690 --> 00:07:02,580 možemo postići tri način račvanje na cesti? 149 00:07:02,580 --> 00:07:04,980 >> U međuvremenu, ako želimo to u C, što nedvojbeno 150 00:07:04,980 --> 00:07:08,420 izgleda malo simpler-- najmanje jednom kada se upoznati s sintakse. 151 00:07:08,420 --> 00:07:12,050 Ako je x manja od y, printf x je manji od y. 152 00:07:12,050 --> 00:07:16,140 Inače ako je x veći od y, printf je x veći od y. 153 00:07:16,140 --> 00:07:21,210 Drugi printf x jednak y-- i opet, s onima kosih crta završava upravo 154 00:07:21,210 --> 00:07:24,160 za one nove linije, tako da ako zapravo vodio ovu vrstu programa 155 00:07:24,160 --> 00:07:25,940 to bi samo premjestiti kursor na kraju 156 00:07:25,940 --> 00:07:28,100 na sljedeći redak zaslona. 157 00:07:28,100 --> 00:07:31,270 >> Sada, u međuvremenu ispočetka imao druge više sofisticirane značajke, samo 158 00:07:31,270 --> 00:07:34,320 od kojih su neke idemo na u početku premjestiti na svijetu C. 159 00:07:34,320 --> 00:07:37,010 A jedan od njih je bio zove se popis u nule. 160 00:07:37,010 --> 00:07:39,100 A to je posebna Vrsta varijable koje 161 00:07:39,100 --> 00:07:42,840 dopušteno da pohraniti više stvari u natrag, natrag, natrag, natrag. 162 00:07:42,840 --> 00:07:45,540 >> U C, što nema liste, sami po sebi, ali nešto 163 00:07:45,540 --> 00:07:48,090 koji su uglavnom naziva polja, iako ćemo 164 00:07:48,090 --> 00:07:50,590 vratiti se kasnije ovaj semestar da gleda na nešto 165 00:07:50,590 --> 00:07:52,780 zove popis ili stvarno vezana lista. 166 00:07:52,780 --> 00:07:55,510 No, za sada, u kojem se nalazi ekvivalent u C za nas 167 00:07:55,510 --> 00:07:57,345 će biti nešto nazvao polje. 168 00:07:57,345 --> 00:07:59,740 I niz je jednostavno Posebna vrsta varijable 169 00:07:59,740 --> 00:08:03,160 koji vam omogućuje pohranu podataka natrag, natrag, natrag, na leđa. 170 00:08:03,160 --> 00:08:05,840 >> I doista, u nule, ako smo htjeli pristupiti 171 00:08:05,840 --> 00:08:09,030 prvi element niza ili list-- i ja ću ga nazvati, 172 00:08:09,030 --> 00:08:13,600 Po dogovoru argv, argument vektor, ali više o tome prije dugo. 173 00:08:13,600 --> 00:08:17,090 Ako želim da se na prvi element od argv, u svijetu nule 174 00:08:17,090 --> 00:08:20,930 što zapravo učiniti obično početi brojati od 1. 175 00:08:20,930 --> 00:08:22,850 >> I tako sam mogao dobiti stavak 1 argv. 176 00:08:22,850 --> 00:08:26,310 To je samo kako MIT provodi pojam liste. 177 00:08:26,310 --> 00:08:29,860 Ali u C, idem više jednostavno samo reći, argv, 178 00:08:29,860 --> 00:08:32,758 što je opet ime moje list-- ili da bude jasno, niz. 179 00:08:32,758 --> 00:08:34,549 A ako želim prvo elementi, idem 180 00:08:34,549 --> 00:08:37,890 koristiti uglate zagrade, što vam možda nije često koristi u tipkovnicu. 181 00:08:37,890 --> 00:08:40,150 >> Ali, 0 samo znači, daj mi prvi. 182 00:08:40,150 --> 00:08:42,160 Dakle, povremeno i kao vrijeme prolazi, idemo 183 00:08:42,160 --> 00:08:44,570 kako bi se vidjeli ove dihotomije između nule i C, 184 00:08:44,570 --> 00:08:46,070 pri čemu ispočetka koristi jedan. 185 00:08:46,070 --> 00:08:47,670 Mi u C korištenje 0 ovdje. 186 00:08:47,670 --> 00:08:49,420 No, uskoro ćete vidjeti kad jednom shvatiti 187 00:08:49,420 --> 00:08:52,920 temelji svakog jezika, da te stvari počnu da se sve više 188 00:08:52,920 --> 00:08:56,860 upoznati kroz praksu i praksu. 189 00:08:56,860 --> 00:08:59,700 >> Tako ćemo zapravo pogled sada na programu. 190 00:08:59,700 --> 00:09:04,031 Ovdje će biti prvi od naših C izvorni kod za cjelovitim programima. 191 00:09:04,031 --> 00:09:06,280 A program ćemo ponuditi na razmatranje 192 00:09:06,280 --> 00:09:09,340 je onaj koji je ekvivalent kako to ranije Scratch komadu. 193 00:09:09,340 --> 00:09:13,210 >> Dakle ovdje imamo ono što je vjerojatno najjednostavniji C program 194 00:09:13,210 --> 00:09:15,410 možete napisati da zapravo radi nešto. 195 00:09:15,410 --> 00:09:18,250 Sada ćemo pogledati prošlost, za sada, nije uključuju, 196 00:09:18,250 --> 00:09:21,190 standardni io.h, a to kut Nosači i int i prazna, 197 00:09:21,190 --> 00:09:22,840 i vitičastim zagradama, i slično. 198 00:09:22,840 --> 00:09:25,390 >> I neka je samo usredotočiti na ono, barem intuitivno, 199 00:09:25,390 --> 00:09:26,860 Možda iskočiti na vas već. 200 00:09:26,860 --> 00:09:30,300 U stvari, uglavnom, ne znam nužno znati što je ovo, 201 00:09:30,300 --> 00:09:34,580 ali baš kao i ispočetka imala da kad zelena zastava kliknuo slagalice, 202 00:09:34,580 --> 00:09:39,070 tako i C kao programski jezik imati glavni dio koda koji 203 00:09:39,070 --> 00:09:43,380 dobiva pogubili po defaultu. I, doista, to doslovno će se zvati glavna. 204 00:09:43,380 --> 00:09:44,720 >> Dakle, glavna je funkcija. 205 00:09:44,720 --> 00:09:48,720 I to je posebna funkcija koja postoji u C da kada pokrenete program, 206 00:09:48,720 --> 00:09:52,720 to je glavna koji se vodi zadano. U svijetu ispočetka, 207 00:09:52,720 --> 00:09:56,970 bilo je uobičajeno kada se zelena zastava kliknuo koji je dobio automatski pokrenuti. 208 00:09:56,970 --> 00:10:01,130 >> U međuvremenu, vidjeli smo to i prije, printf ili ispisati formatirani, to je 209 00:10:01,130 --> 00:10:05,620 će biti funkcija koja dolazi s C, zajedno s cijelom hrpom drugih, 210 00:10:05,620 --> 00:10:10,140 koji će se s vremena i vremena opet, kako bi učiniti upravo 211 00:10:10,140 --> 00:10:12,450 Kao što mu ime govori, nešto ispisati. 212 00:10:12,450 --> 00:10:13,500 Što želimo ispisati? 213 00:10:13,500 --> 00:10:15,770 Pa, vidjet ćemo da je zatvaranjem znakova 214 00:10:15,770 --> 00:10:18,680 kao these-- Pozdrav svijetu, Obrnuta kosa crta n u dvostrukim navodnicima, 215 00:10:18,680 --> 00:10:23,040 možemo reći printf točno Što se ispisati na ekranu. 216 00:10:23,040 --> 00:10:26,430 >> Ali kako to učiniti da, nažalost 217 00:10:26,430 --> 00:10:30,010 je potrebno da se nešto što je Već zagonetan za nas ljudi, 218 00:10:30,010 --> 00:10:34,510 ali barem je nešto readable-- oštri su, standardna io.h, int, 219 00:10:34,510 --> 00:10:39,340 Glavni, praznina, printf, sve čarobne incantations smo upravo vidjeli na ekranu. 220 00:10:39,340 --> 00:10:42,470 No, mi zapravo treba da ići više kompliciranih i dalje. 221 00:10:42,470 --> 00:10:47,140 Prvo moramo prevesti šifru da pišemo u strojni kod. 222 00:10:47,140 --> 00:10:51,370 I sjećam od prošlog tjedna da se strojevima, barem one što znamo ovdje, 223 00:10:51,370 --> 00:10:54,450 na kraju dana samo razumjeti nula i jedinica. 224 00:10:54,450 --> 00:10:58,100 >> A Bože moj, ako smo morali pisati ovih nula i jedinica zapravo program, 225 00:10:58,100 --> 00:11:01,260 to bi vrlo, vrlo brzo ponijeti ni iz čega. 226 00:11:01,260 --> 00:11:05,150 No, ispostavilo se, po prošlog tjedna, da su ti obrasci nula i jedinica 227 00:11:05,150 --> 00:11:06,400 Samo imaju posebno značenje. 228 00:11:06,400 --> 00:11:08,500 U određenim kontekstima, oni mogu značiti brojeva. 229 00:11:08,500 --> 00:11:11,840 >> U nekim kontekstima, oni bi moglo značiti slova ili boje, ili bilo koji broj 230 00:11:11,840 --> 00:11:14,710 drugih apstrakcija tamo na. 231 00:11:14,710 --> 00:11:18,450 No, baš kao što je na računalu CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 ili mozak unutrašnjosti računala. 233 00:11:20,390 --> 00:11:22,240 To je obično Intel unutra, jer to je 234 00:11:22,240 --> 00:11:24,900 jedna od najvećih tvrtki koji čini CPU za računala. 235 00:11:24,900 --> 00:11:28,910 >> Pa, Intel CPU i drugi Jednostavno su odlučili unaprijed 236 00:11:28,910 --> 00:11:33,970 da određeni obrasci nule i Oni će značiti određene stvari. 237 00:11:33,970 --> 00:11:37,040 Određeni obrasci nula i jedinica znači, ispisati na ekran, 238 00:11:37,040 --> 00:11:39,710 ili dodati ta dva broja, ili oduzimanje ta dva broja, 239 00:11:39,710 --> 00:11:43,310 ili premjestiti ovaj dio podataka iz memorija mojeg računala ovamo, 240 00:11:43,310 --> 00:11:47,870 ili bilo koji broj druge vrlo niske razine, ali u konačnici korisno, za operacije. 241 00:11:47,870 --> 00:11:53,022 No, na sreću, mi ljudi se ne ide da moraju znati tu razinu detalja. 242 00:11:53,022 --> 00:11:56,230 Doista, baš kao i zadnji put, gdje smo rastresen opet, i opet, i opet, 243 00:11:56,230 --> 00:11:58,930 Zgrada od vrlo niske razine primitivci poput nula i jedinica 244 00:11:58,930 --> 00:12:01,160 viših pojmova razini poput brojeva i slova, 245 00:12:01,160 --> 00:12:04,330 i boje, i još mnogo toga, tako da možemo, kao programera 246 00:12:04,330 --> 00:12:07,080 stajati na ramenima drugi koji su došli prije nas 247 00:12:07,080 --> 00:12:11,260 i koristiti softver koji drugi ljudi su pisali prije us-- 248 00:12:11,260 --> 00:12:14,340 naime programa pod nazivom prevodioce. 249 00:12:14,340 --> 00:12:17,770 >> C je jezik koji obično je sastavljen, 250 00:12:17,770 --> 00:12:22,130 što znači pretvorena iz izvorni kod za strojni kod. 251 00:12:22,130 --> 00:12:25,230 Konkretno, to znači je da, ako ste dobili svoj izvor 252 00:12:25,230 --> 00:12:29,530 Kod koji ste sami napisati, kao što je prije će se u samo jednom trenutku na ekranu, 253 00:12:29,530 --> 00:12:33,140 i želite ga pretvoriti u konačnici stroj code-- 254 00:12:33,140 --> 00:12:37,100 ta nula i jedinica koje samo vaš Mac ili računalo 255 00:12:37,100 --> 00:12:41,230 understands-- što je dobio prvi hraniti taj izvorni kod u što 256 00:12:41,230 --> 00:12:46,340 ulaz za poseban Program pod nazivom prevodilac, 257 00:12:46,340 --> 00:12:48,974 izlaz od kojih Vidjet će se stroj kod. 258 00:12:48,974 --> 00:12:51,890 I, doista, posljednji put smo razgovarali o, zaista, na kraju dana, 259 00:12:51,890 --> 00:12:52,610 rješavanje problema. 260 00:12:52,610 --> 00:12:53,360 Imaš ulaza. 261 00:12:53,360 --> 00:12:54,318 A imaš izlaza. 262 00:12:54,318 --> 00:12:56,560 A ti imaš nekakav algoritma u sredini. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmi se mogu sigurno ugraditi u softver, 264 00:12:59,830 --> 00:13:02,900 kao što smo vidjeli u pseudokod prošlog tjedna i kao što ćemo vidjeti u stvarnom kodu 265 00:13:02,900 --> 00:13:03,490 ovaj tjedan. 266 00:13:03,490 --> 00:13:06,430 I tako prevodilac zapravo samo ima skup algoritama unutar 267 00:13:06,430 --> 00:13:10,060 od toga da znam kako pretvoriti posebne riječi, 268 00:13:10,060 --> 00:13:12,180 kao glavni i printf, i ostali koje smo upravo 269 00:13:12,180 --> 00:13:17,620 vidjela u uzorcima nule i one koje Intel Inside i ostali CPU 270 00:13:17,620 --> 00:13:20,020 zapravo ne razumije. 271 00:13:20,020 --> 00:13:22,460 Pa kako ćemo to učiniti? 272 00:13:22,460 --> 00:13:24,470 Gdje ćemo dobiti prevodilac? 273 00:13:24,470 --> 00:13:26,400 >> Većina nas ovdje ima Mac ili PC. 274 00:13:26,400 --> 00:13:29,152 I koristite Mac OS, ili Windows ili Linux ili Solaris, 275 00:13:29,152 --> 00:13:30,860 ili bilo koji broj drugih operativne sustave. 276 00:13:30,860 --> 00:13:32,568 I doista, mogli bismo izaći na webu 277 00:13:32,568 --> 00:13:35,710 i preuzeti prevodilac za Mac ili računalo 278 00:13:35,710 --> 00:13:37,360 za vaš operativni sustav. 279 00:13:37,360 --> 00:13:39,617 Ali, svi mi bi se na različite stranice, da tako kažemo. 280 00:13:39,617 --> 00:13:41,450 Imali smo malo različite konfiguracije. 281 00:13:41,450 --> 00:13:43,210 A stvari ne bi raditi sve isto. 282 00:13:43,210 --> 00:13:45,280 I, štoviše, ovih dana mnogi od nas ne koriste 283 00:13:45,280 --> 00:13:47,516 softver koji radi samo na našim prijenosnicima. 284 00:13:47,516 --> 00:13:49,390 Umjesto toga, mi koristimo nešto kao preglednik koji 285 00:13:49,390 --> 00:13:52,930 omogućava nam da pristup web-based aplikacija u oblaku. 286 00:13:52,930 --> 00:13:55,630 A kasnije ovaj semestar, mi ćemo učiniti upravo to. 287 00:13:55,630 --> 00:13:59,660 Mi ćemo pisati aplikacije ili softver pomoću code-- nije C, 288 00:13:59,660 --> 00:14:02,860 ali drugi jezici kao što su Python i JavaScript-- koji rade u oblaku. 289 00:14:02,860 --> 00:14:05,860 >> A za to, mi sami tijekom semestra 290 00:14:05,860 --> 00:14:11,890 će zapravo koristiti oblak-based okolina poznata kao CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Ovo je web-based programiranje okoline ili integrirani razvoj 292 00:14:16,030 --> 00:14:20,610 okolina, IDE, koji je izgrađen na vrhu neke open source softvera zove Cloud 9. 293 00:14:20,610 --> 00:14:22,966 A mi smo napravili neke pedagoško pojednostavljenja za njega 294 00:14:22,966 --> 00:14:25,840 kako sakriti određene značajke u prvih tjedana da mi ne trebaju, 295 00:14:25,840 --> 00:14:27,770 nakon čega možete otkriti ih i napraviti najviše 296 00:14:27,770 --> 00:14:29,400 sve što želite s okolinom. 297 00:14:29,400 --> 00:14:32,470 >> I to nam omogućuje, također, unaprijed instalirati određeni softver. 298 00:14:32,470 --> 00:14:35,330 Stvari kao što su tzv CS50 knjižnica, koja uskoro ćemo vidjeti 299 00:14:35,330 --> 00:14:39,210 pruža nam u C s nekim Dodatna funkcionalnost. 300 00:14:39,210 --> 00:14:44,392 Dakle, ako idete, u konačnici, CS50.io, vas će se tražiti da se prijavite, 301 00:14:44,392 --> 00:14:46,350 a nakon što učiniti i stvoriti račun za besplatno, 302 00:14:46,350 --> 00:14:52,150 ćete biti u mogućnosti pristupiti okolina koja izgleda baš ovako. 303 00:14:52,150 --> 00:14:53,760 >> Sada, to je u zadanom načinu rada. 304 00:14:53,760 --> 00:14:55,650 Sve je lijepo i svijetle na zaslonu. 305 00:14:55,650 --> 00:14:57,941 Mnogi od nas imaju naviku radi na CS50 komad koji je 306 00:14:57,941 --> 00:14:59,150 kasno u noći. 307 00:14:59,150 --> 00:15:02,400 I tako su neki od vas možda radije pretvoriti ga u noćni način rada, da se tako izrazim. 308 00:15:02,400 --> 00:15:05,550 >> No, u konačnici, ono što ste idući u vidjeti u CS50 IDE 309 00:15:05,550 --> 00:15:08,340 je tri različita areas-- područje na lijevoj strani gdje 310 00:15:08,340 --> 00:15:12,604 datoteke će biti u oblak, područje u gornjem desnom uglu 311 00:15:12,604 --> 00:15:14,270 gdje je vaš broj će biti moguće. 312 00:15:14,270 --> 00:15:16,650 Vi ćete biti u mogućnosti otvoriti pojedinačne kartice za bilo koji program 313 00:15:16,650 --> 00:15:19,670 da li napisati ovaj semestar iznutra Od toga gornjem desnom kutu. 314 00:15:19,670 --> 00:15:23,070 I onda većina arcanely, a ipak snažno, 315 00:15:23,070 --> 00:15:26,610 će biti to stvar u Dno poznat kao prozor terminala. 316 00:15:26,610 --> 00:15:29,450 >> To je stara škola Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 ili CLI, koja omogućuje izvršavanje naredbe 318 00:15:32,240 --> 00:15:35,260 na computer-- u ovom slučaju, računalo u cloud-- 319 00:15:35,260 --> 00:15:39,090 učiniti stvari kao što sastaviti svoj kod od izvorni kod za strojni kod, 320 00:15:39,090 --> 00:15:43,600 pokrenuti svoje programe, ili za početak svoje web server, ili za pristup svoje baze podataka, 321 00:15:43,600 --> 00:15:47,454 i bilo koji broj drugih tehnika da ćemo početi koristiti prije dugo. 322 00:15:47,454 --> 00:15:49,370 No, da bi se tamo, mi smo će zapravo 323 00:15:49,370 --> 00:15:51,240 otići online i početi igrati. 324 00:15:51,240 --> 00:15:54,399 A za to, neka prvi početi petljaju s glavnom, 325 00:15:54,399 --> 00:15:55,940 i pisati glavni dio programa. 326 00:15:55,940 --> 00:15:59,170 I neka je koristiti tu funkciju printf, koje smo koristili ranije, 327 00:15:59,170 --> 00:16:01,050 jednostavno nešto reći. 328 00:16:01,050 --> 00:16:04,910 >> Dakle, ovdje sam već unutar CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Ja sam prijavljen unaprijed. 330 00:16:05,930 --> 00:16:07,360 I ja sam pun prikazan prozor. 331 00:16:07,360 --> 00:16:09,670 I tako, na kraju, vi previše u nadolazećim problemima 332 00:16:09,670 --> 00:16:12,960 će slijediti slične korake koje će pružiti on-line dokumentaciju. 333 00:16:12,960 --> 00:16:16,360 Dakle, ne morate brinuti o tome upijajući svaki mali tehnički korak 334 00:16:16,360 --> 00:16:17,730 da ja ovdje danas. 335 00:16:17,730 --> 00:16:19,222 >> Ali vi ćete dobiti zaslon kao što je ovaj. 336 00:16:19,222 --> 00:16:20,430 Ja se dogoditi da se u noćnom načinu rada. 337 00:16:20,430 --> 00:16:22,944 A možete ukrasiti sve se onemogućavanjem noćni način rada. 338 00:16:22,944 --> 00:16:24,860 I na kraju od dan, ti si idući u vidjeti 339 00:16:24,860 --> 00:16:30,090 ova tri glavna areas-- datoteke preglednik na lijevoj strani, a kod kartice do vrha, 340 00:16:30,090 --> 00:16:32,430 i terminal prozor na dnu. 341 00:16:32,430 --> 00:16:34,890 >> Pusti me naprijed i napisati svoj prvi program. 342 00:16:34,890 --> 00:16:42,300 Idem preventivno ići na File, Uštedite i spremiti svoju datoteku kao hello.c. 343 00:16:42,300 --> 00:16:46,850 Doista, po konvenciji, bilo koji program mi napisati da je napisan u C jeziku 344 00:16:46,850 --> 00:16:49,739 trebao biti imenovan nešto točka c, po konvenciji. 345 00:16:49,739 --> 00:16:53,030 Tako da ću to ime hello.c, jer Samo želim pozdraviti svijetu. 346 00:16:53,030 --> 00:16:54,820 Sada ću za uvećanje van, a zatim kliknite Spremi. 347 00:16:54,820 --> 00:16:58,180 I sve što imam sada ovdje je kartica u kojem mogu početi pisanja koda. 348 00:16:58,180 --> 00:16:59,490 >> To se ne događa sastaviti. 349 00:16:59,490 --> 00:17:00,300 To ne znači ništa. 350 00:17:00,300 --> 00:17:02,750 I tako, čak i ako sam pretvoren to nula i jedinica, 351 00:17:02,750 --> 00:17:05,390 CPU će imati nikakav pojma što se događa okolo. 352 00:17:05,390 --> 00:17:14,170 Ali, ako sam pisati stihove koji ne podudaraju s kasiopejske conventions-- C bića, 353 00:17:14,170 --> 00:17:20,150 opet, to language-- sa sintaksom slično ovo printf zdravo svijet-a ja sam 354 00:17:20,150 --> 00:17:22,210 dobivši ugodno s to s vremenom. 355 00:17:22,210 --> 00:17:24,510 Dakle, ne mislim da sam napravio tiskarske pogreške. 356 00:17:24,510 --> 00:17:27,910 >> Ali, uvijek, prvi put kada to učinite, od vas će. 357 00:17:27,910 --> 00:17:31,090 A što ću učiniti to se vrlo dobro ne rade za vas prvi put. 358 00:17:31,090 --> 00:17:33,610 I to je sasvim u redu, jer upravo sada 359 00:17:33,610 --> 00:17:37,662 možda samo vidjeti puno novosti, ali s vremenom nakon što se upoznaju 360 00:17:37,662 --> 00:17:39,870 s tom okruženju, a taj jezik, i drugi, 361 00:17:39,870 --> 00:17:42,370 ćete početi vidjeti stvari koje su ispravna ili pogrešna. 362 00:17:42,370 --> 00:17:44,369 >> A to je ono što je nastavne drugovi i naravno 363 00:17:44,369 --> 00:17:48,780 asistenti dobiti tako dobri u vremenu, je uočavanje greške ili greške u kodu. 364 00:17:48,780 --> 00:17:52,110 Ali ja tvrdim da postoji nema greške u ovom kodu. 365 00:17:52,110 --> 00:17:53,990 Tako sam sada žele pokrenuti ovaj program. 366 00:17:53,990 --> 00:17:57,440 >> Sada na svom Mac ili PC, ja sam u navika dvostrukim klikom ikone 367 00:17:57,440 --> 00:17:59,350 kada želim pokrenuti neki program. 368 00:17:59,350 --> 00:18:01,080 No, to nije model ovdje. 369 00:18:01,080 --> 00:18:04,570 U tom okruženju, što je CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Mi koristimo operacijskoj Sustav pod nazivom Linux. 371 00:18:07,192 --> 00:18:09,900 Linux podsjeća na još jedan operativni sustav, općenito poznat 372 00:18:09,900 --> 00:18:10,850 kao Unix. 373 00:18:10,850 --> 00:18:16,340 A Linux posebno je poznat po ima Command Line okruženju, CLI. 374 00:18:16,340 --> 00:18:20,070 Sada, mi smo pomoću određenom Okus Linux zove Ubuntu. 375 00:18:20,070 --> 00:18:22,770 I Ubuntu je jednostavno sigurna verzija Linux. 376 00:18:22,770 --> 00:18:27,900 >> Ali tih Linux-a ovih dana to zapravo dolaze s grafičkim korisničkim sučeljima. 377 00:18:27,900 --> 00:18:30,360 A jedan mi se dogoditi da se koristi ovdje je web-based. 378 00:18:30,360 --> 00:18:32,735 Dakle, to može izgledati čak i malo drugačiji od nečega 379 00:18:32,735 --> 00:18:35,310 vi sami mogli imati vidjeti ili raditi u prošlosti. 380 00:18:35,310 --> 00:18:37,910 >> Tako ću ići naprijed sada i učinite sljedeće. 381 00:18:37,910 --> 00:18:40,950 Ja sam spasio ovu sliku kao hello.c. 382 00:18:40,950 --> 00:18:47,350 Ja ću ići naprijed i Vrsta clanghello.c Tako jeka 383 00:18:47,350 --> 00:18:49,850 za C jezik je prevodilac. 384 00:18:49,850 --> 00:18:51,952 To je unaprijed instaliran u CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 A ti apsolutno može preuzeti i instalirati ovo na svoj Mac ili PC. 386 00:18:54,910 --> 00:18:57,910 >> Ali, opet, ne bi li sve pre-konfiguracija učinio za vas. 387 00:18:57,910 --> 00:19:00,940 Dakle, za sada, samo sam idući u trčanje clanghello.c. 388 00:19:00,940 --> 00:19:03,240 A sada primijetiti ovu sintaksu Ovdje će se s vremenom 389 00:19:03,240 --> 00:19:06,930 shvatiti samo znači da sam u mapu ili katalog naziva radnog prostora. 390 00:19:06,930 --> 00:19:11,030 Ovaj znak dolara je samo konvencija za smislom, upišite svoje naredbe ovdje. 391 00:19:11,030 --> 00:19:14,560 >> To je ono što se zove brz, samo po konvenciji je znak dolara. 392 00:19:14,560 --> 00:19:19,130 A ako ja ići naprijed i sada kliknite Ulaz, ništa ne čini da se dogodilo. 393 00:19:19,130 --> 00:19:20,930 Ali to je zapravo dobra stvar. 394 00:19:20,930 --> 00:19:23,650 Što manje što se događa na Vaš zaslon, to je vjerojatnije 395 00:19:23,650 --> 00:19:26,710 Vaš broj je biti točna, barem sintaktički. 396 00:19:26,710 --> 00:19:29,120 >> Dakle, ako želim pokrenuti ovaj Program, što da radim? 397 00:19:29,120 --> 00:19:33,770 Pa, ispada da je Zadani naziv po konvenciji 398 00:19:33,770 --> 00:19:38,854 za programe kada ne odredite naziv za svoj program je samo a.out. 399 00:19:38,854 --> 00:19:41,270 I to sintaksa previše, vi ćete upoznati se s prije dugo. 400 00:19:41,270 --> 00:19:47,500 >> Dot slash samo znači, hej, CS50 IDE, pokrenuti program pod nazivom a.out 401 00:19:47,500 --> 00:19:49,400 to je u mojoj trenutnoj mapi. 402 00:19:49,400 --> 00:19:51,520 To točkica označava trenutni direktorij. 403 00:19:51,520 --> 00:19:55,040 Pa ćemo vidjeti što druge takve sekvence znakova znači prije dugo. 404 00:19:55,040 --> 00:19:58,430 >> Dakle, ovdje mi ići, Enter, Hello World. 405 00:19:58,430 --> 00:20:00,080 I primijetit ćete da ono što se dogodilo? 406 00:20:00,080 --> 00:20:01,580 Ne samo da je ispisati Hello World. 407 00:20:01,580 --> 00:20:05,990 Također je premještena pokazivač u sljedeći redak. 408 00:20:05,990 --> 00:20:07,160 >> A zašto je to bilo? 409 00:20:07,160 --> 00:20:12,400 Što je kod koji smo pisali prije koji osigurava da se kursor bi 410 00:20:12,400 --> 00:20:14,882 ići na sljedeći redak? 411 00:20:14,882 --> 00:20:16,840 Čudno o Računalo je to samo ide 412 00:20:16,840 --> 00:20:18,570 raditi doslovno što to kažem. 413 00:20:18,570 --> 00:20:26,050 >> Dakle, ako ste mu reći da printf hello, zarez, prostor, svijet, u neposrednoj blizini citat, 414 00:20:26,050 --> 00:20:29,090 to je doslovno samo ide ispis tih znakova. 415 00:20:29,090 --> 00:20:31,980 Ali ja sam imao taj posebni znak na kraju, podsjetimo, obrnute kose crte br. 416 00:20:31,980 --> 00:20:34,230 I to je ono što osigurava da je lik otišao 417 00:20:34,230 --> 00:20:36,570 na sljedeći redak zaslona. 418 00:20:36,570 --> 00:20:38,097 >> U stvari, pustite me i to učiniti. 419 00:20:38,097 --> 00:20:39,430 Pusti me naprijed i izbrisati to. 420 00:20:39,430 --> 00:20:41,180 Sada, primijetiti da je vrh mog ekrana postoji 421 00:20:41,180 --> 00:20:42,890 malo crveno svjetlo na kartica ukazuje, 422 00:20:42,890 --> 00:20:45,047 hej, ne ste spremili datoteku. 423 00:20:45,047 --> 00:20:47,880 Tako ću nastaviti s kontrolom S ili naredba S, spremite datoteku. 424 00:20:47,880 --> 00:20:51,130 Sada je goes-- otišao za moment-- zeleno. 425 00:20:51,130 --> 00:20:53,760 A sada je natrag samo da je blizu ikona. 426 00:20:53,760 --> 00:21:01,860 >> Ako sam sada pokrenuti clanghello.c opet, Ući, dot slash, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 vidjet ćete da je još uvijek radio. 428 00:21:04,110 --> 00:21:06,020 Ali to je nedvojbeno malo lud. 429 00:21:06,020 --> 00:21:08,714 Upravo sada, mi prompt-- radni prostor, a zatim da znak dolara, 430 00:21:08,714 --> 00:21:10,880 a onda je moj stvarni prompt-- sve je na istoj liniji. 431 00:21:10,880 --> 00:21:14,540 Dakle, to svakako estetski bug, čak i ako to nije stvarno logičan bug. 432 00:21:14,540 --> 00:21:16,250 >> Tako ću poništiti ono što sam upravo učinio. 433 00:21:16,250 --> 00:21:18,560 Idem repriza a.out. 434 00:21:18,560 --> 00:21:22,710 Obavijest Dodao sam novi red karakter natrag. 435 00:21:22,710 --> 00:21:24,280 Ja sam spremili datoteku. 436 00:21:24,280 --> 00:21:31,630 >> Zato ću ponoviti a.out, and-- dammit, bug, bug znači grešku. 437 00:21:31,630 --> 00:21:35,020 Dakle, bug je da, iako dodao sam kosu crtu n postoji, 438 00:21:35,020 --> 00:21:41,180 ponovno spasio, ponovno je vodio program, ponašanje je bio isti. 439 00:21:41,180 --> 00:21:42,640 Zašto bi to bilo? 440 00:21:42,640 --> 00:21:43,910 >> Nedostaje mi korak, zar ne? 441 00:21:43,910 --> 00:21:47,620 Taj ključni korak ranije je da imate to-- prilikom promjene izvornog koda, 442 00:21:47,620 --> 00:21:49,610 ispada također pokrenuti to kroz prevodilac 443 00:21:49,610 --> 00:21:51,102 opet tako da ćete dobiti novi kôd stroja. 444 00:21:51,102 --> 00:21:52,810 A stroj kod, su nula i jedinica, 445 00:21:52,810 --> 00:21:56,260 će biti gotovo identičan, ali nije savršeno tako, jer nam je potrebno, 446 00:21:56,260 --> 00:21:57,510 Naravno, da je nova linija. 447 00:21:57,510 --> 00:22:02,640 >> Dakle, kako bi riješili ovo, ja ću trebati da repriza clanghello.c, ući, točku 448 00:22:02,640 --> 00:22:03,800 slash, a.out. 449 00:22:03,800 --> 00:22:08,402 A sada, pozdrav svijetu se vratio gdje sam očekivao da bude. 450 00:22:08,402 --> 00:22:09,610 Dakle, to je sve u redu i dobro. 451 00:22:09,610 --> 00:22:13,150 Ali a.out je prilično glupo ime za programa, iako se dogodi da se, 452 00:22:13,150 --> 00:22:16,530 iz povijesnih razloga, default-- znači montaža izlaza. 453 00:22:16,530 --> 00:22:20,780 >> No, dopustite mi ići naprijed ovdje i to učiniti drugačije. 454 00:22:20,780 --> 00:22:24,760 Želim da moj Hello World programa zapravo se zove zdravo. 455 00:22:24,760 --> 00:22:28,320 Tako da je ikona na moj desktop, to ne bi bilo a.out. 456 00:22:28,320 --> 00:22:29,730 To bi se moglo nazvati zdravo. 457 00:22:29,730 --> 00:22:33,660 >> Tako da to učinite, to ispada da zveket, kao i mnogih programa, 458 00:22:33,660 --> 00:22:37,980 podržava argumente naredbenog retka, ili zastave, ili prekidači, 459 00:22:37,980 --> 00:22:39,600 koji jednostavno utjecati na njegovo ponašanje. 460 00:22:39,600 --> 00:22:45,160 Naime, zveket podržava crtica oi Zastava, koja se zatim uzima drugu riječ. 461 00:22:45,160 --> 00:22:48,190 U tom slučaju, ja samovoljno ću, ali opravdano, nazivaju to zdravo. 462 00:22:48,190 --> 00:22:50,710 Ali mogao bih ga nazvati nešto Želim, osim a.out, koji 463 00:22:50,710 --> 00:22:52,390 bi radije osim točke. 464 00:22:52,390 --> 00:22:55,640 >> I onda samo navesti ime datoteke ja želim sastaviti. 465 00:22:55,640 --> 00:22:59,190 Tako sada, iako na početku naredbe još uvijek imaju zveket, 466 00:22:59,190 --> 00:23:01,410 na kraju naredbe Još uvijek imam naziv datoteke, 467 00:23:01,410 --> 00:23:05,520 Ja sada imam ove komandne linije argumenti, te zastave koje govore, 468 00:23:05,520 --> 00:23:11,180 oh, usput, izlaz-o, datoteka zove zdravo, a ne zadani a.out. 469 00:23:11,180 --> 00:23:13,810 >> Dakle, ako sam pogodio Unesite sada, ništa Čini se da se dogodilo. 470 00:23:13,810 --> 00:23:17,900 Pa ipak, sada mogu učiniti dot udarac zdravo. 471 00:23:17,900 --> 00:23:19,089 Dakle, to je isti program. 472 00:23:19,089 --> 00:23:21,380 Nula i one su identična krajem dana. 473 00:23:21,380 --> 00:23:24,210 >> Ali oni su u dva različiti files-- a.out, 474 00:23:24,210 --> 00:23:26,490 koja je prva verzija i samo ludo ime, 475 00:23:26,490 --> 00:23:30,250 a sada zdravo, što je znatno više uvjerljiv naziv za program. 476 00:23:30,250 --> 00:23:33,195 Ali, iskreno, nikad nisam će zapamtiti to opet, 477 00:23:33,195 --> 00:23:34,070 i opet, i opet. 478 00:23:34,070 --> 00:23:36,411 I, zapravo, kao što pišemo složeniji programi, 479 00:23:36,411 --> 00:23:38,160 naredbe koje ćete morati napisati 480 00:23:38,160 --> 00:23:40,920 će dobiti još više komplicirano i dalje. 481 00:23:40,920 --> 00:23:41,940 >> I tako da se ne brinem. 482 00:23:41,940 --> 00:23:46,220 Ispada da su ljudi prije nas su shvatili previše 483 00:23:46,220 --> 00:23:47,530 imao taj isti problem. 484 00:23:47,530 --> 00:23:50,900 Oni također ne uživaju da se tip prilično duge, kompliciranih naredbi, 485 00:23:50,900 --> 00:23:52,200 a kamoli ih zapamtiti. 486 00:23:52,200 --> 00:23:56,070 I tako su ljudi prije nas su napravili drugi programi koji olakšavaju 487 00:23:56,070 --> 00:23:57,670 sastaviti svoj softver. 488 00:23:57,670 --> 00:24:01,609 >> I, doista, jedan takav Program se zove napraviti. 489 00:24:01,609 --> 00:24:03,150 Tako ću ići naprijed i učiniti. 490 00:24:03,150 --> 00:24:05,691 Idem poništiti sve što sam upravo učinio na sljedeći način. 491 00:24:05,691 --> 00:24:07,690 Dopustite mi da upišete LS. 492 00:24:07,690 --> 00:24:10,980 A vi ćete primijetiti tri things-- a.out i zvijezda, zdravo 493 00:24:10,980 --> 00:24:12,810 i zvijezda, i hello.c. 494 00:24:12,810 --> 00:24:14,730 Na sreću, to bi trebalo biti malo intuitivno, 495 00:24:14,730 --> 00:24:18,220 utoliko što ranije nije bilo ništa u ovom radnom prostoru. 496 00:24:18,220 --> 00:24:21,240 Nije bilo ništa što sam imao stvorio dok nismo počeli klase. 497 00:24:21,240 --> 00:24:22,840 >> I ja sam stvorio hello.c. 498 00:24:22,840 --> 00:24:24,544 I onda ga sastavio, i nazvao ga a.out. 499 00:24:24,544 --> 00:24:27,460 A onda sam ga ponovo sastaviti nešto drugačije i nazvao ga pozdravi. 500 00:24:27,460 --> 00:24:32,830 Dakle, imam tri datoteke u ovaj direktorij, u toj mapi pod nazivom radnog prostora. 501 00:24:32,830 --> 00:24:35,005 Sada vidim da je dobro ako sam smanjivanje zapravo. 502 00:24:35,005 --> 00:24:37,530 >> Ako sam smanjivanje i ovdje pogledaj onu gornjem desnom rukom 503 00:24:37,530 --> 00:24:39,940 kutak, kao što je obećao lijeva Ruka stranu zaslona 504 00:24:39,940 --> 00:24:42,990 uvijek će vam pokazati što je na računu, što je 505 00:24:42,990 --> 00:24:44,790 unutar CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 A tu je i tri datoteke tamo. 507 00:24:46,680 --> 00:24:49,070 >> Dakle, želim se riješiti a.out i zdravo. 508 00:24:49,070 --> 00:24:51,275 I kao što možda zamislite intuitivno, te 509 00:24:51,275 --> 00:24:53,400 mogao sortirati kontrole klikom ili desni klik na ovaj. 510 00:24:53,400 --> 00:24:54,590 I ovo malo pojavi izbornik. 511 00:24:54,590 --> 00:24:57,170 Možete preuzeti datoteku, pokrenite to, pregledati ga, osvježiti, preimenovati, 512 00:24:57,170 --> 00:24:57,700 ili što ne. 513 00:24:57,700 --> 00:25:00,260 >> I ja sam samo mogao izbrisati, i to bi otići. 514 00:25:00,260 --> 00:25:05,260 Ali neka je učiniti stvari s naredbom linija za sada, kako bi dobili udobna 515 00:25:05,260 --> 00:25:07,010 s tim, i to na sljedeći način. 516 00:25:07,010 --> 00:25:12,345 Ja ću ići naprijed i izvadite a.out upisivanjem doslovno rma.out. 517 00:25:12,345 --> 00:25:14,890 Ispada, naredbu za uklanjanje ili brisanje nešto, 518 00:25:14,890 --> 00:25:16,280 Nije ukloniti ili izbrisati. 519 00:25:16,280 --> 00:25:21,260 >> To je više jezgrovito RM, samo da se spasi ti neke tipke, i pritisnite Enter. 520 00:25:21,260 --> 00:25:24,707 Sada ćemo da se nešto zagonetno ukloniti redovite datoteke a.out. 521 00:25:24,707 --> 00:25:27,040 Ja stvarno ne znam što je to nepravilan datoteka će biti još. 522 00:25:27,040 --> 00:25:28,660 Ali ja želim da ga ukloniti. 523 00:25:28,660 --> 00:25:30,150 >> Dakle, idem na y tipa za potvrdan odgovor. 524 00:25:30,150 --> 00:25:31,940 Ili sam mogao je upisati i pritisnite Enter. 525 00:25:31,940 --> 00:25:33,440 A, opet, ništa ne čini da se dogodi. 526 00:25:33,440 --> 00:25:35,840 Ali to je, uglavnom, dobra stvar. 527 00:25:35,840 --> 00:25:40,490 >> Ako sam tip LS ovaj put, Što bih trebao vidjeti? 528 00:25:40,490 --> 00:25:44,930 Nadajmo se samo zdravo i hello.c. 529 00:25:44,930 --> 00:25:47,286 Sada, kao usput, vi ćete primijetiti ovu zvijezdu, zvjezdicu, 530 00:25:47,286 --> 00:25:48,660 to je na kraju svojih programa. 531 00:25:48,660 --> 00:25:50,201 I oni su također prikazuje u zelenoj boji. 532 00:25:50,201 --> 00:25:53,970 To je samo CS50 IRO način od vas cluing u činjenici 533 00:25:53,970 --> 00:25:55,280 da to nije izvorni kod. 534 00:25:55,280 --> 00:25:58,880 To je izvršna, A Runnable program koji zapravo možete pokrenuti 535 00:25:58,880 --> 00:26:01,020 obavljajući dot udarac, a onda je ime. 536 00:26:01,020 --> 00:26:05,860 >> Sada, neka mi ići naprijed i ukloniti ovaj, rm zdravo, Enter, uklanjanje redovni 537 00:26:05,860 --> 00:26:08,010 file Pozdrav, da. 538 00:26:08,010 --> 00:26:11,180 A sada, ako sam tip LS, vratili smo se do hello.c. 539 00:26:11,180 --> 00:26:13,917 Pokušajte ne brisati svoje stvarni izvorni kod. 540 00:26:13,917 --> 00:26:16,250 Iako postoje obilježja izgrađen u CS50 IDE gdje 541 00:26:16,250 --> 00:26:19,870 možete proći kroz reviziju povijesti i natrag u vremenu, ako vas slučajno 542 00:26:19,870 --> 00:26:23,660 brisanje nešto, ne biti svjestan kao i po tim poticajima da ili ne, 543 00:26:23,660 --> 00:26:25,381 ono što zapravo želite učiniti. 544 00:26:25,381 --> 00:26:27,380 Kad odem na vrh lijevom kutu ovdje 545 00:26:27,380 --> 00:26:30,696 sve što ostaje je hello.c. 546 00:26:30,696 --> 00:26:32,570 Dakle, postoji grozdove druge naredbe koje 547 00:26:32,570 --> 00:26:37,550 može izvršiti u svijetu Linuxa, od kojih je, opet, napraviti. 548 00:26:37,550 --> 00:26:40,180 A što ćemo napraviti moj program je sada na sljedeći način. 549 00:26:40,180 --> 00:26:43,270 >> Umjesto da rade zveket, umjesto da zveket-o, 550 00:26:43,270 --> 00:26:45,860 Idem jednostavno doslovno tipa, čine pozdrav. 551 00:26:45,860 --> 00:26:49,630 A sada primjetiti, ja sam Ne upisivati ​​bi hello.c. 552 00:26:49,630 --> 00:26:50,910 Ja sam tipkati napraviti pozdrav. 553 00:26:50,910 --> 00:26:54,840 >> I ovaj program učiniti da dolazi s CS50 IDE, i još mnogo toga 554 00:26:54,840 --> 00:26:57,090 općenito s Linuxom, je program koji je 555 00:26:57,090 --> 00:26:59,120 će napraviti program pod nazivom Hello. 556 00:26:59,120 --> 00:27:03,680 I to će preuzeti na sebe, po konvenciji, da, ako mogu napraviti taj program, 557 00:27:03,680 --> 00:27:09,030 to će se iz izvora broj datoteka koje završavaju na dot c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Dakle, ako sam pogodio Unesite sada, obavijest da naredba koji se izvršava 559 00:27:12,210 --> 00:27:14,340 je zapravo još više Prije nego prije. 560 00:27:14,340 --> 00:27:16,670 A to je zato što imamo konfigurirano CS50 IDE imati 561 00:27:16,670 --> 00:27:19,878 neke dodatne značajke ugrađene u tome ne treba nam samo još, ali uskoro će. 562 00:27:19,878 --> 00:27:23,470 No, ključna stvar za shvatiti Sada imam Hello program. 563 00:27:23,470 --> 00:27:27,080 >> Ako sam ponovno upisati LS, ja imaju Hello program. 564 00:27:27,080 --> 00:27:32,070 I mogu ga pokrenuti s dot slash a.out, ne, 565 00:27:32,070 --> 00:27:35,590 jer je cijela točka ove Vježba je bila točka slash zdravo. 566 00:27:35,590 --> 00:27:38,089 I sad ja imam Hello World programa. 567 00:27:38,089 --> 00:27:39,880 Tako se kreće prema naprijed, smo gotovo uvijek samo 568 00:27:39,880 --> 00:27:42,088 će sastaviti naših programa korištenje naredbenog napraviti. 569 00:27:42,088 --> 00:27:45,300 A onda ćemo ih voditi dot udarac, i ime programa. 570 00:27:45,300 --> 00:27:49,610 Ali shvatili ono što čini čini za što je to sama ne prevodilac. 571 00:27:49,610 --> 00:27:53,310 To je samo pogodnost programa koji zna kako pokrenuti prevodilac 572 00:27:53,310 --> 00:27:56,470 izvoditi tako da se to može koristiti. 573 00:27:56,470 --> 00:28:00,220 >> Koje druge naredbe postoje u Linux, a zauzvrat CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Uskoro smo ćete da postoji CD naredba, Promjena imenik. 575 00:28:03,107 --> 00:28:05,190 To vam omogućuje roku Vaš komandna linija sučelje 576 00:28:05,190 --> 00:28:07,610 da se krene naprijed i natrag, i otvoriti različite mape 577 00:28:07,610 --> 00:28:08,860 bez upotrebe miša. 578 00:28:08,860 --> 00:28:12,470 >> LS smo vidjeli, koja se zalaže za popis datoteke u trenutnoj mapi. 579 00:28:12,470 --> 00:28:14,650 Provjerite semafore, možete vjerojatno početi zaključiti 580 00:28:14,650 --> 00:28:18,150 što je to značilo now-- napraviti katalog, ako želite stvoriti mapu. 581 00:28:18,150 --> 00:28:21,270 RM za ukloniti, RM Dir za uklanjanje directory-- i to, 582 00:28:21,270 --> 00:28:24,160 opet su komandne linije ekvivalenata od onoga što 583 00:28:24,160 --> 00:28:26,945 mogao učiniti u CS50 IDE mišem. 584 00:28:26,945 --> 00:28:28,820 No, uskoro ćete naći ponekad je to samo 585 00:28:28,820 --> 00:28:30,610 puno brže za napraviti stvari s tipkovnicom, 586 00:28:30,610 --> 00:28:33,690 i na kraju puno moćniji. 587 00:28:33,690 --> 00:28:36,440 >> No, teško je tvrditi da sve smo radili do sada 588 00:28:36,440 --> 00:28:39,990 je sve što je moćno, kada su svi smo reći je, Hello World. 589 00:28:39,990 --> 00:28:43,740 A, u stvari, kodirano sam riječi halo svijet u mom programu. 590 00:28:43,740 --> 00:28:45,530 Nema dinamizam još. 591 00:28:45,530 --> 00:28:49,320 Blok je bio red veličine zanimljivije je prošlog tjedna. 592 00:28:49,320 --> 00:28:51,220 >> I tako ćemo doći. 593 00:28:51,220 --> 00:28:55,310 Uzmimo korak ka da je način neke od tih funkcija. 594 00:28:55,310 --> 00:28:59,470 Dakle, ne samo C dolaze s printf, i kitice druge funkcije 595 00:28:59,470 --> 00:29:01,850 od kojih ćemo vidjeti tijekom vremena, to ne 596 00:29:01,850 --> 00:29:05,760 bi se sve to lako odmah od vrata na dobivanje korisničkog unosa. 597 00:29:05,760 --> 00:29:08,140 >> U stvari, jedna od slabosti jezika kao što su C, 598 00:29:08,140 --> 00:29:10,140 pa čak i Java, a ipak drugi je da se to ne dogodi 599 00:29:10,140 --> 00:29:15,860 olakšavaju samo dobiti stvari kao što su cijeli brojevi od korisnika ili žice, riječi, 600 00:29:15,860 --> 00:29:19,970 i fraze, a kamoli stvari poput pomičnim zarezom vrijednosti ili realni brojevi 601 00:29:19,970 --> 00:29:23,240 s decimalnim mjestima, i stvarno duge brojevi, kao što ćemo uskoro vidjeti. 602 00:29:23,240 --> 00:29:27,000 Dakle, ovaj popis funkcija ovdje, te poput drugih Blok slagalice 603 00:29:27,000 --> 00:29:31,090 koje smo unaprijed instaliran u CS50 IDE koji ćemo koristiti za nekoliko tjedana 604 00:29:31,090 --> 00:29:34,010 kao trening kotačima sorti, te na kraju ih skinuti i gledati 605 00:29:34,010 --> 00:29:37,210 ispod haube, možda, na kako te stvari provode. 606 00:29:37,210 --> 00:29:40,460 >> No, za to, neka je zapravo napisati program. 607 00:29:40,460 --> 00:29:41,770 Pusti me naprijed sada. 608 00:29:41,770 --> 00:29:44,750 I ja ću stvoriti nova file klikom na ovaj mali plus, 609 00:29:44,750 --> 00:29:45,970 i kliknete New File. 610 00:29:45,970 --> 00:29:49,250 >> Idem spasiti ovaj sljedeći on, kao, recimo, string.c, 611 00:29:49,250 --> 00:29:50,750 jer želim igrati sa žicama. 612 00:29:50,750 --> 00:29:53,990 I niz u C je samo niz znakova. 613 00:29:53,990 --> 00:29:56,090 Dakle, sada idemo naprijed i napraviti sljedeće. 614 00:29:56,090 --> 00:30:01,204 >> Uključi standardni IO.h-- i ispada standardne IO, 615 00:30:01,204 --> 00:30:03,360 IO samo znači ulaz i izlaz. 616 00:30:03,360 --> 00:30:05,920 Tako ispada da je ova linija Evo što je 617 00:30:05,920 --> 00:30:08,140 je nam susjedne koristiti printf. 618 00:30:08,140 --> 00:30:10,410 Printf, naravno, stvara izlaz. 619 00:30:10,410 --> 00:30:15,000 Dakle, kako bi se koristiti printf, ispada kako morate imati ovu liniju koda 620 00:30:15,000 --> 00:30:16,040 na vrhu datoteke. 621 00:30:16,040 --> 00:30:18,456 >> A mi ćemo se vratiti na ono što to zapravo znači prije dugo. 622 00:30:18,456 --> 00:30:20,400 Ispostavilo se da je u bilo C program pišem, 623 00:30:20,400 --> 00:30:23,640 Moram ga početi s kod koji izgleda ovako. 624 00:30:23,640 --> 00:30:26,860 A vi ćete primijetiti CS50 IDE, a drugi integrirani razvoj 625 00:30:26,860 --> 00:30:30,050 okruženjima poput njega, ćemo pokušati što bolje 626 00:30:30,050 --> 00:30:31,780 oni mogu završiti svoje misli. 627 00:30:31,780 --> 00:30:35,930 U stvari, trenutak prije, ako sam poništiti što sam upravo učinio, ja pritisnite Enter. 628 00:30:35,930 --> 00:30:39,160 >> I onda udario otvorenim kovrčavu Brace, udario opet Enter. 629 00:30:39,160 --> 00:30:40,430 I to završio moj misao. 630 00:30:40,430 --> 00:30:45,140 To mi je dalo novu liniju, razvedena ništa manje za lijepe stilskih razloga, vidjet ćemo. 631 00:30:45,140 --> 00:30:48,559 I onda on automatski mi je dao da kovrčava braće da završim misao. 632 00:30:48,559 --> 00:30:50,600 Sada, to nije uvijek pogodite što želite učiniti. 633 00:30:50,600 --> 00:30:53,620 A velikim dijelom, on ne uštedjeti neke tipke. 634 00:30:53,620 --> 00:30:59,560 Dakle, prije nekoliko trenutaka, imali smo tu program-- Pozdrav, svijet, a zatim ga sastavio, 635 00:30:59,560 --> 00:31:00,460 a zatim ga ran. 636 00:31:00,460 --> 00:31:01,867 Ali nema dinamika ovdje. 637 00:31:01,867 --> 00:31:03,700 Što ako smo htjeli učiniti nešto drugo? 638 00:31:03,700 --> 00:31:07,630 Pa, što ako sam htjela zapravo dobili niz od korisnika? 639 00:31:07,630 --> 00:31:11,250 Idem koristiti slagalice zove točno that-- dobiti niz. 640 00:31:11,250 --> 00:31:15,860 >> Ispostavilo se da u C da kada ne želite da daju svoj doprinos na puzzle komada, 641 00:31:15,860 --> 00:31:19,360 ili više pravilno na neku funkciju, koju doslovno samo napraviti otvorenu zagradu, 642 00:31:19,360 --> 00:31:20,430 blizu zagrada. 643 00:31:20,430 --> 00:31:25,540 Dakle, to je kao da postoji ne bijela kutija za unos u. 644 00:31:25,540 --> 00:31:27,720 Izgovori blok prije je malo bijeli okvir. 645 00:31:27,720 --> 00:31:29,660 Mi nemamo taj bijeli okvir sada. 646 00:31:29,660 --> 00:31:33,310 >> Ali kad ja zovem get niz, ja žele staviti rezultat negdje. 647 00:31:33,310 --> 00:31:37,680 Dakle, vrlo česta paradigma u C je pozvati funkciju, kao što get niz ovdje, 648 00:31:37,680 --> 00:31:41,070 a zatim pohraniti svoje povratnu vrijednost. 649 00:31:41,070 --> 00:31:44,450 To je rezultat njegove truda u nešto. 650 00:31:44,450 --> 00:31:47,630 >> A što je izgraditi u programiranju, 651 00:31:47,630 --> 00:31:53,450 bilo u nule i sada C, da mi mogu koristiti kako bi zapravo pohranu nešto? 652 00:31:53,450 --> 00:31:55,990 Nazvan je varijabla, zar ne? 653 00:31:55,990 --> 00:32:00,320 A u nule, mi stvarno ne zanima me što se događa u varijablama. 654 00:32:00,320 --> 00:32:02,170 >> No, u ovom slučaju, mi zapravo učiniti. 655 00:32:02,170 --> 00:32:03,719 Ja ću reći string. 656 00:32:03,719 --> 00:32:05,510 A onda sam se mogao nazvati ovo sve što želim. 657 00:32:05,510 --> 00:32:08,340 Idem ga nazvati ime i prezime, dobiva dobiti niz. 658 00:32:08,340 --> 00:32:10,250 >> A sada čak i ako ste malo novi u ovom, 659 00:32:10,250 --> 00:32:11,984 primijetiti da sam nedostaje neki detalj. 660 00:32:11,984 --> 00:32:13,150 Ja zaboravljam i zarez. 661 00:32:13,150 --> 00:32:14,400 Moram završiti ovu misao. 662 00:32:14,400 --> 00:32:17,480 Tako da ću pomaknuti pokazivač, i hit-zarez tamo. 663 00:32:17,480 --> 00:32:19,130 A što sam upravo učinio? 664 00:32:19,130 --> 00:32:21,440 U ovoj liniji koda, broj 5 u ovom trenutku, 665 00:32:21,440 --> 00:32:23,799 Zovem get niz bez ikakvih ulaza. 666 00:32:23,799 --> 00:32:26,090 Dakle, nema mali bijeli okvir poput Save blok ima. 667 00:32:26,090 --> 00:32:28,590 >> Samo kažem, hej, Računalo, daj mi niz. 668 00:32:28,590 --> 00:32:31,390 Znak jednakosti nije stvarno znak jednakosti, sam po sebi. 669 00:32:31,390 --> 00:32:33,790 To je zadatak operater, što znači, 670 00:32:33,790 --> 00:32:37,860 hej, računala, premjestili vrijednost s desne na lijevu. 671 00:32:37,860 --> 00:32:40,480 A u lijevo, imam sljedeće. 672 00:32:40,480 --> 00:32:43,580 >> Hej, računalo, daj mi string-- niz znakova. 673 00:32:43,580 --> 00:32:45,637 I poziv da string ime. 674 00:32:45,637 --> 00:32:47,220 I ne morate ga zovu ime. 675 00:32:47,220 --> 00:32:49,970 >> Mogao sam ga nazvati, uobičajeno, nešto poput S, 676 00:32:49,970 --> 00:32:52,900 baš kao što ja se nazvati varijable i. 677 00:32:52,900 --> 00:32:54,829 Ali sada moram nešto učiniti s njom. 678 00:32:54,829 --> 00:32:57,370 Bilo bi prilično glupo kompajliranja ovaj kod, trčanje 679 00:32:57,370 --> 00:32:59,410 ovaj program, iako Primam niz, 680 00:32:59,410 --> 00:33:01,580 jer je to još uvijek samo će pozdraviti svijet. 681 00:33:01,580 --> 00:33:06,140 >> No, što ako ja ne želim da se to promijeni. 682 00:33:06,140 --> 00:33:07,940 Zašto ne bih to učiniti? 683 00:33:07,940 --> 00:33:11,632 Posto je, zarez s. 684 00:33:11,632 --> 00:33:13,090 A to je malo zagonetan dalje. 685 00:33:13,090 --> 00:33:15,560 >> Pa neka mi da su moji varijable jasnija. 686 00:33:15,560 --> 00:33:17,510 Dopustite mi ime ove naziv varijable. 687 00:33:17,510 --> 00:33:20,230 I neka je vidjeti ako ne možemo zafrkavati osim što se ovdje događa. 688 00:33:20,230 --> 00:33:22,770 >> Dakle, on line pet, ja sam uzimajući niz. 689 00:33:22,770 --> 00:33:25,620 A ja pohranjivanje taj niz, god je korisnik utipkao 690 00:33:25,620 --> 00:33:28,430 na svom tipkovnici, u varijabli zove ime. 691 00:33:28,430 --> 00:33:30,590 I ispada da printf ne samo 692 00:33:30,590 --> 00:33:34,220 uzeti jedan argument u dvostruko citati, jedan ulaz u dvostrukim navodnicima. 693 00:33:34,220 --> 00:33:39,100 >> To može potrajati dva ili tri, ili više, kao da je drugi ili treći, ili četvrti, 694 00:33:39,100 --> 00:33:42,320 sve su to nazivi varijabli, ili specifično vrijednosti, 695 00:33:42,320 --> 00:33:48,610 da želite priključiti u, dinamički, taj se niz u navodnike. 696 00:33:48,610 --> 00:33:52,110 Drugim riječima, što je će biti u redu s ovim? 697 00:33:52,110 --> 00:33:57,920 Ako sam samo rekao halo ime, kosih crta n, spasio moj dosje, sastavio moj broj, 698 00:33:57,920 --> 00:34:01,660 i ran to, što će se dogoditi? 699 00:34:01,660 --> 00:34:05,139 >> To je samo reći, zdravo ime, doslovno N-A-M-e, 700 00:34:05,139 --> 00:34:07,900 koja je vrsta glupo, jer to ne razlikuje od svijeta. 701 00:34:07,900 --> 00:34:10,400 Tako je bilo u navodnicima je što doslovno ispisati. 702 00:34:10,400 --> 00:34:12,520 Dakle, ako želim imati rezervirano mjesto tamo, 703 00:34:12,520 --> 00:34:14,422 Ja zapravo je potrebno koristiti neke posebne sintakse. 704 00:34:14,422 --> 00:34:17,380 I to ispada, ako ste pročitali Dokumentacija za funkciju printf, 705 00:34:17,380 --> 00:34:21,320 to će vam reći da je ako koristite posto s, 706 00:34:21,320 --> 00:34:23,920 možete zamijeniti vrijednost kako slijedi. 707 00:34:23,920 --> 00:34:27,190 >> Nakon zarez nakon toga dvostruki navodnici, jednostavno 708 00:34:27,190 --> 00:34:29,179 napisati ime i prezime varijabla koja želite 709 00:34:29,179 --> 00:34:33,790 priključiti u tom formatu koda ili formata specifikator, 710 00:34:33,790 --> 00:34:35,469 posto je za gudače. 711 00:34:35,469 --> 00:34:39,190 A sada, ako sam spasio svoju sliku, Vraćam se na moj terminalu. 712 00:34:39,190 --> 00:34:42,870 A ja sam tip Make String, jer, opet, i ime za to 713 00:34:42,870 --> 00:34:45,510 file da sam izabrao je string.c. 714 00:34:45,510 --> 00:34:48,510 >> Zato ću reći Provjerite String, ući. 715 00:34:48,510 --> 00:34:51,550 Bože, pogledaj sve greške koje smo napravili već. 716 00:34:51,550 --> 00:34:55,540 A to is-- što je to stvarno kao šest, sedam linija programa? 717 00:34:55,540 --> 00:34:57,790 Dakle, ovo je mjesto gdje je vrlo moguće brzo dobiti neodoljiv. 718 00:34:57,790 --> 00:35:00,890 >> Ovaj terminal prozor ima sada samo regurgitated 719 00:35:00,890 --> 00:35:03,230 ogroman broj poruka o pogreškama. 720 00:35:03,230 --> 00:35:07,560 Zasigurno, nemam više pogrešku Poruke od mene linija koda. 721 00:35:07,560 --> 00:35:08,680 Dakle, što se događa? 722 00:35:08,680 --> 00:35:10,920 >> Pa, najbolja strategija učiniti u bilo koje vrijeme vam 723 00:35:10,920 --> 00:35:13,710 ne nailaze neodoljiv Popis grešaka kao što je to, 724 00:35:13,710 --> 00:35:16,690 je pomicanje unatrag, tražiti naredbe ti samo trčao, što je u mom slučaju 725 00:35:16,690 --> 00:35:18,020 je napraviti niz. 726 00:35:18,020 --> 00:35:21,630 Pogledajte što čine učinio, i to je to dugo zveket naredba, nije velika stvar tamo. 727 00:35:21,630 --> 00:35:22,950 >> No, crvena je loše. 728 00:35:22,950 --> 00:35:24,750 Zelena pokušava biti blag i koristan. 729 00:35:24,750 --> 00:35:26,140 No, to je još uvijek loše, u ovom slučaju. 730 00:35:26,140 --> 00:35:27,510 Ali gdje je to loše? 731 00:35:27,510 --> 00:35:31,450 >> String.c, linija pet znakova i pet. 732 00:35:31,450 --> 00:35:32,930 Dakle, ovo je samo zdrav konvencija. 733 00:35:32,930 --> 00:35:36,060 Nešto debelo nešto znači broj linija i broj znakova. 734 00:35:36,060 --> 00:35:41,080 Greška, korištenje neprijavljeni identifikator string. 735 00:35:41,080 --> 00:35:42,900 Jeste li mislili standard u? 736 00:35:42,900 --> 00:35:45,530 >> Dakle, na žalost, jeka pokušava biti od pomoći. 737 00:35:45,530 --> 00:35:46,850 Ali to je u redu, u ovom slučaju. 738 00:35:46,850 --> 00:35:49,350 Ne, jeka, nisam znači standardne IO. 739 00:35:49,350 --> 00:35:51,070 Mislio sam da je na liniji jedan, da. 740 00:35:51,070 --> 00:35:53,420 >> No, crta pet je ovaj ovdje. 741 00:35:53,420 --> 00:35:57,040 I zveket ne razumjeti S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 To je crno identifikator, Riječ je samo nikada prije nije vidjela. 743 00:36:01,490 --> 00:36:05,730 A to je zato C, jezik mi smo kod pisanja u pravo vrijeme, 744 00:36:05,730 --> 00:36:08,070 nema varijable nazivaju žice. 745 00:36:08,070 --> 00:36:11,380 >> To ne, po defaultu, podrška nešto što se zove niz. 746 00:36:11,380 --> 00:36:16,750 To je CS50 komad žargon, ali je vrlo konvencionalna. 747 00:36:16,750 --> 00:36:18,600 Ali mogu popraviti ovo što slijedi. 748 00:36:18,600 --> 00:36:22,090 >> Ako sam dodati jednu liniju koda na vrh ovog programa, 749 00:36:22,090 --> 00:36:27,890 uključuju CS50.h, što je još jedan file negdje unutar CS50 IDE, negdje 750 00:36:27,890 --> 00:36:30,820 na tvrdom disku, da tako kažemo, Ubuntu operativnog sustava 751 00:36:30,820 --> 00:36:33,590 da bježim, da je datoteka koja je 752 00:36:33,590 --> 00:36:38,740 će naučiti s radom Sustav kakav struna, samo 753 00:36:38,740 --> 00:36:41,930 kao standardni io.h je datoteka u operacijskom sustavu koji je 754 00:36:41,930 --> 00:36:44,430 će ga naučiti što printf je. 755 00:36:44,430 --> 00:36:46,810 >> Doista, mi bi dobila vrlo sličnu poruku 756 00:36:46,810 --> 00:36:50,600 ako IO je priznao standarda IO.h i pokušao koristiti printf. 757 00:36:50,600 --> 00:36:53,632 Tako ću ići naprijed i samo preuzeti kontrolu L da razbistrim zaslon. 758 00:36:53,632 --> 00:36:56,340 Ili možete upisati jasno i to će samo očistiti prozor terminala. 759 00:36:56,340 --> 00:36:58,020 No, još uvijek možete pomicati natrag u vremenu. 760 00:36:58,020 --> 00:37:01,100 >> A ja ću ponoviti napraviti niz. 761 00:37:01,100 --> 00:37:03,660 Ubačaj moje prste ovaj put, Enter. 762 00:37:03,660 --> 00:37:05,380 O, moj Bože, on je radio. 763 00:37:05,380 --> 00:37:09,280 mi pokazuje dugo zagonetni naredbu to je ono što čini generira preko zveket, 764 00:37:09,280 --> 00:37:10,460 ali ne i poruke o pogreškama. 765 00:37:10,460 --> 00:37:12,460 Dakle shvatiti, iako možda ćete dobiti potpuno 766 00:37:12,460 --> 00:37:14,480 osvaja s Broj poruka o pogrešci, 767 00:37:14,480 --> 00:37:17,540 to može biti samo to neugodno kaskadno učinak, gdje zveka ne razumije 768 00:37:17,540 --> 00:37:19,620 jedna stvar, što znači da tada ne razumije sljedeću riječ, 769 00:37:19,620 --> 00:37:20,560 ili sljedeći redak. 770 00:37:20,560 --> 00:37:22,850 I tako je jednostavno guši u kodu. 771 00:37:22,850 --> 00:37:24,440 No, popravak može biti jednostavan. 772 00:37:24,440 --> 00:37:27,822 I tako uvijek fokus na Prvi redak izlaza. 773 00:37:27,822 --> 00:37:29,530 A ako ne shvatiti, samo pogledajte 774 00:37:29,530 --> 00:37:32,480 ključne riječi koje bi mogle biti tragove, a broj linija, 775 00:37:32,480 --> 00:37:34,650 i znak, na kojem da pogreška može biti. 776 00:37:34,650 --> 00:37:40,328 >> Sada neka mi ići naprijed i upišite dot udarac, niz, ući. 777 00:37:40,328 --> 00:37:44,340 Hm, to ne govori zdravo ništa. 778 00:37:44,340 --> 00:37:46,210 Zašto? 779 00:37:46,210 --> 00:37:48,170 Pa, podsjećamo, u kojoj se to radi? 780 00:37:48,170 --> 00:37:53,730 >> Vjerojatno je zapeo u ovom trenutku u petlju, ako hoćete, na liniji šest, 781 00:37:53,730 --> 00:37:56,950 jer Get Gudački po dizajnu, napisao CS50 osoblja, 782 00:37:56,950 --> 00:38:00,350 doslovno znači samo sjediti tamo čeka, i čeka, 783 00:38:00,350 --> 00:38:01,850 i čeka niz. 784 00:38:01,850 --> 00:38:03,792 Sve što podrazumijevamo pod nizom je ljudski ulaz. 785 00:38:03,792 --> 00:38:04,500 Dakle, znate što? 786 00:38:04,500 --> 00:38:05,166 Pusti me naprijed. 787 00:38:05,166 --> 00:38:08,704 I samo na ćud, pusti me upisati svoje ime, David, ući. 788 00:38:08,704 --> 00:38:10,120 Sada imam više dinamičan program. 789 00:38:10,120 --> 00:38:11,240 On je rekao, zdravo David. 790 00:38:11,240 --> 00:38:16,280 >> Ako sam ići naprijed i pokrenuti to opet, pokušat ću reći ime Zamila, ući. 791 00:38:16,280 --> 00:38:17,940 I sada imamo dinamičan program. 792 00:38:17,940 --> 00:38:19,380 Nisam hard kodirani svijet. 793 00:38:19,380 --> 00:38:21,760 Nisam hard kodirani ime, ili David ili Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Sada je mnogo kao i programi znamo, gdje li se ulaz, 795 00:38:25,350 --> 00:38:27,870 ona proizvodi malo drugačiji izlaz. 796 00:38:27,870 --> 00:38:31,020 Sada, ovo nije najbolji korisničko iskustvo, ili UX. 797 00:38:31,020 --> 00:38:33,000 Ja pokrenuti program. 798 00:38:33,000 --> 00:38:35,830 >> Ne znam što bih trebala učiniti, osim ako ja zapravo pogled na 799 00:38:35,830 --> 00:38:37,290 ili se sjetiti izvorni kod. 800 00:38:37,290 --> 00:38:39,640 Tako ćemo napraviti korisniku doživjeti malo bolje 801 00:38:39,640 --> 00:38:41,240 s najjednostavnijim stvarima. 802 00:38:41,240 --> 00:38:44,782 Pusti me da se vratim u ovu Program i jednostavno reći printf. 803 00:38:44,782 --> 00:38:48,870 >> I neka mi ići naprijed i reći ime, debelo crijevo, i prostor, a zatim i zarez. 804 00:38:48,870 --> 00:38:51,170 I samo za slatkiš, nema zazora n. 805 00:38:51,170 --> 00:38:52,980 I to je namjerno, jer ne želim 806 00:38:52,980 --> 00:38:54,590 upit za pomicanje na sljedeći redak. 807 00:38:54,590 --> 00:38:58,800 >> Želim, umjesto toga, to učinili, napraviti niz rekompiliranje moj broj u novi stroj 808 00:38:58,800 --> 00:39:00,980 broj točkica slash niz. 809 00:39:00,980 --> 00:39:02,460 Ah, ovo je mnogo ljepše. 810 00:39:02,460 --> 00:39:05,780 Sad sam stvarno znati što se računalo želi od mene, dati joj ime. 811 00:39:05,780 --> 00:39:10,020 >> Tako ću ići naprijed i upišite u Rob, enter, i zdravo, Rob. 812 00:39:10,020 --> 00:39:13,640 Dakle, shvatiti, to je još uvijek, na kraju dana, samo devet linija programa. 813 00:39:13,640 --> 00:39:15,090 Ali mi smo poduzeti ove male korake. 814 00:39:15,090 --> 00:39:18,380 >> Napisali smo jednu liniju s kojima smo bili upoznati, printf, Hello World. 815 00:39:18,380 --> 00:39:19,980 Onda smo otkopča malo toga. 816 00:39:19,980 --> 00:39:21,560 A mi zapravo koristi get niz. 817 00:39:21,560 --> 00:39:23,362 I baci mi tu vrijednost u varijablu. 818 00:39:23,362 --> 00:39:26,070 I onda smo išli naprijed i poboljšana nadalje s trećom linijom. 819 00:39:26,070 --> 00:39:29,220 A to iterativan proces pisanje softvera je doista ključ. 820 00:39:29,220 --> 00:39:33,420 U CS50, iu životu općenito, općenito ne bi trebali sjesti, 821 00:39:33,420 --> 00:39:36,800 imaju program na umu, i pokušati pisati cijela prokleta stvar odjednom. 822 00:39:36,800 --> 00:39:40,810 >> To će neizbježno rezultirati način više pogrešaka nego mi sami ovdje vidio. 823 00:39:40,810 --> 00:39:44,070 Čak i ja, sve do danas, neprekidno bi ostale glupe greške, 824 00:39:44,070 --> 00:39:47,480 zapravo teže greške koje su teže za shvatiti. 825 00:39:47,480 --> 00:39:52,095 Ali vi ćete napraviti više grešaka više linija koda pišete sve odjednom. 826 00:39:52,095 --> 00:39:54,220 I tako ova praksa, napisati malo koda 827 00:39:54,220 --> 00:39:57,930 da ste zadovoljni s, sastaviti da, trčanje, testirati ga općenitije, 828 00:39:57,930 --> 00:40:01,370 onda krenuti on-- tako baš kao i mi čuva raslojavanje i raslojavanje prošlog tjedna, 829 00:40:01,370 --> 00:40:04,190 zgrada od nečega vrlo jednostavna za nešto složenije, 830 00:40:04,190 --> 00:40:05,200 učiniti isto ovdje. 831 00:40:05,200 --> 00:40:08,500 Ne sjesti i pokušati napisati cijeli problem. 832 00:40:08,500 --> 00:40:10,780 Zapravo uzeti ove male korake. 833 00:40:10,780 --> 00:40:15,100 >> Sada, žice nisu svi da je korisno za sebe. 834 00:40:15,100 --> 00:40:18,210 mi bi zapravo idealno, kao da se ima nešto drugo u našem alat. 835 00:40:18,210 --> 00:40:20,990 Tako ćemo zapravo učiniti upravo to. 836 00:40:20,990 --> 00:40:24,900 >> Pusti me naprijed i sada ščepati malo drugačiji plan. 837 00:40:24,900 --> 00:40:28,320 A mi ćemo nazvati ovu int.c, za cijeli broj. 838 00:40:28,320 --> 00:40:30,870 Idem, na sličan način, uključuju CS550.h. 839 00:40:30,870 --> 00:40:33,060 Idem uključuju standardne IO. 840 00:40:33,060 --> 00:40:36,630 I to će biti prilično čest u tih prvih nekoliko dana u razredu. 841 00:40:36,630 --> 00:40:39,050 >> A ja ću spreman ja s glavnom funkcijom. 842 00:40:39,050 --> 00:40:43,370 I sada umjesto uzimajući niz, idemo naprijed i dobiti int. 843 00:40:43,370 --> 00:40:49,285 Nazovimo ga ja, a zovu ga dobiti int, zatvorenih navodnika, točka-zarez. 844 00:40:49,285 --> 00:40:51,410 A sada ćemo napraviti nešto s njom, printf. 845 00:40:51,410 --> 00:40:56,190 >> Recimo nešto poput Pozdrav, kosih crta n, zarez ja. 846 00:40:56,190 --> 00:41:00,010 Tako sam prilično oponašajući ono što sam učinio prije samo trenutak. 847 00:41:00,010 --> 00:41:01,660 Imam rezervirano mjesto ovdje. 848 00:41:01,660 --> 00:41:05,150 Ja sam zarezom sam ovdje, jer želim da se spojite sam u tom rezervirano mjesto. 849 00:41:05,150 --> 00:41:07,250 >> Dakle idemo naprijed i pokušajte sastavljanju ovog programa. 850 00:41:07,250 --> 00:41:10,060 Datoteka naziva int.c. 851 00:41:10,060 --> 00:41:12,920 Zato ću reći, napraviti int, ući. 852 00:41:12,920 --> 00:41:16,420 O, moj Bože, ali nije velika stvar, zar ne? 853 00:41:16,420 --> 00:41:17,230 Tu je pogreška. 854 00:41:17,230 --> 00:41:19,810 >> Tu je sintaktička pogreška Ovdje kao da se program ne može 855 00:41:19,810 --> 00:41:25,460 biti sastavljen u int.c, linija sedam, lik 27, format error 856 00:41:25,460 --> 00:41:28,400 specificira tip char zvijezda, što god da je. 857 00:41:28,400 --> 00:41:30,020 Ali tip je argument int. 858 00:41:30,020 --> 00:41:33,110 >> Dakle, ovdje je, također, da se ne ide to-- iako je danas mnogo materijala, 859 00:41:33,110 --> 00:41:35,710 ćemo vas zasuti sa apsolutno svaki značajka C, 860 00:41:35,710 --> 00:41:38,070 i programiranje općenito, u samo tih prvih nekoliko tjedana. 861 00:41:38,070 --> 00:41:40,400 Tako se često događa da se žargonu s kojima niste upoznati. 862 00:41:40,400 --> 00:41:43,350 A, u stvari, char zvijezda je nešto ćemo se vratiti 863 00:41:43,350 --> 00:41:44,830 u tjedan ili dva vremena. 864 00:41:44,830 --> 00:41:47,530 >> No, za sada, da vidimo što možemo analizirati riječi koje su poznate. 865 00:41:47,530 --> 00:41:50,750 Formats-- pa smo čuli formatu specifikator, format koda prije. 866 00:41:50,750 --> 00:41:51,840 To je poznato. 867 00:41:51,840 --> 00:41:53,840 Type-- ali argument tipa int. 868 00:41:53,840 --> 00:41:55,980 Čekaj malo, ja je int. 869 00:41:55,980 --> 00:41:59,230 >> Možda posto je zapravo ima navedeno značenje. 870 00:41:59,230 --> 00:42:00,230 I doista, tako je. 871 00:42:00,230 --> 00:42:03,101 Cijeli broj, ako želiš printf ga zamijeniti, 872 00:42:03,101 --> 00:42:05,350 zaista morate koristiti drugačiji format specifikator. 873 00:42:05,350 --> 00:42:06,890 A ti ne bi znao to osim ako vam netko rekao, 874 00:42:06,890 --> 00:42:07,973 ili je to već radio. 875 00:42:07,973 --> 00:42:10,490 Ali posto sam je što mogu se obično koriste 876 00:42:10,490 --> 00:42:12,240 u printf za priključivanjem na cijeli broj. 877 00:42:12,240 --> 00:42:14,920 Također možete koristiti posto d za decimalnu cijeli broj. 878 00:42:14,920 --> 00:42:16,490 Ali ja je lijepo i jednostavno ovdje. 879 00:42:16,490 --> 00:42:17,590 Dakle, mi ćemo ići s tim. 880 00:42:17,590 --> 00:42:21,160 >> Sada neka mi ići naprijed i ponovno izvođenje make int, Enter. 881 00:42:21,160 --> 00:42:23,328 To je dobro, nema greške. 882 00:42:23,328 --> 00:42:27,260 Dot slash int-- OK, loše korisničko iskustvo, jer nisam rekla si 883 00:42:27,260 --> 00:42:27,760 Što uraditi. 884 00:42:27,760 --> 00:42:28,426 No, to je u redu. 885 00:42:28,426 --> 00:42:29,480 Ja sam lov na brzo. 886 00:42:29,480 --> 00:42:36,260 >> I sad neka mi ići naprijed i upisati Davida, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 U redu, tako da je ovo dobra stvar. 888 00:42:37,820 --> 00:42:41,710 Ovaj put, ja sam koristeći funkciju, zagonetka komad, zove get int. 889 00:42:41,710 --> 00:42:44,230 I ispada out--, a mi ćemo pogledajte ovaj kasnije u term-- 890 00:42:44,230 --> 00:42:47,730 CS50 osoblje je implementiran dobiti niz tako 891 00:42:47,730 --> 00:42:50,350 da će samo fizički dobili niz za vas. 892 00:42:50,350 --> 00:42:54,340 >> Ona je provela get int u takav način da samo hoće 893 00:42:54,340 --> 00:42:55,590 dobiti cijeli broj za vas. 894 00:42:55,590 --> 00:42:57,830 A ako ti je ljudski, ne surađuju, to je 895 00:42:57,830 --> 00:43:00,590 doslovno samo ide kažu pokušali ponovno, pokušajte ponovo, ponovo pokušati, 896 00:43:00,590 --> 00:43:05,200 doslovno sjedi petlje, dok što obvezuje s nekim čarobnim brojem, 897 00:43:05,200 --> 00:43:07,670 kao što su 50, a zdravo 50 godina. 898 00:43:07,670 --> 00:43:11,440 >> Ili, ako ćemo raditi to opet i tip u 42, zdravo 42. 899 00:43:11,440 --> 00:43:15,750 I tako se funkcija get int unutar tog puzzle komada 900 00:43:15,750 --> 00:43:19,050 Dovoljno je logika, dovoljno misao, shvatiti što je riječ? 901 00:43:19,050 --> 00:43:20,330 A što je broj? 902 00:43:20,330 --> 00:43:23,165 Samo prihvaćanje, u konačnici, brojevi. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Tako ispada da je ovaj nije sve što je izražajan. 905 00:43:30,230 --> 00:43:30,910 do sada. 906 00:43:30,910 --> 00:43:33,690 Dakle, yay, zadnji put kad smo otišao prilično brzo 907 00:43:33,690 --> 00:43:38,320 u provedbene igre i animacije, i umjetničkih djela u nule. 908 00:43:38,320 --> 00:43:42,260 I ovdje, mi smo se sadržaj sa Zdravo, svijete, i zdravo 50 godina. 909 00:43:42,260 --> 00:43:43,696 >> To nije sve što je inspirativno. 910 00:43:43,696 --> 00:43:46,070 I doista, to prvih nekoliko Primjeri će potrajati neko vrijeme 911 00:43:46,070 --> 00:43:47,510 na izlazu se od uzbuđenja. 912 00:43:47,510 --> 00:43:49,854 No, imamo puno više kontrolirati sad, zapravo. 913 00:43:49,854 --> 00:43:51,770 I mi ćemo vrlo brzo početi raslojavanje 914 00:43:51,770 --> 00:43:53,870 na vrhu ovih osnovnih primitiva. 915 00:43:53,870 --> 00:43:56,370 >> Ali prvo, neka je razumjeti što ograničenja. 916 00:43:56,370 --> 00:43:58,620 U stvari, jedna od stvari Scratch ne lako 917 00:43:58,620 --> 00:44:00,990 činimo stvarno izgleda ispod haube, 918 00:44:00,990 --> 00:44:03,740 i razumjeti ono što je Računalo je, što se može učiniti, 919 00:44:03,740 --> 00:44:05,250 i koji su njeni ograničenja. 920 00:44:05,250 --> 00:44:08,580 I, doista, da je nedostatak razumijevanje, potencijalno, long-term 921 00:44:08,580 --> 00:44:12,520 može dovesti do vlastitog mistakes-- pisanja bube, pisanje nesigurni softver koji 922 00:44:12,520 --> 00:44:13,880 hakiran na neki način. 923 00:44:13,880 --> 00:44:17,130 >> Tako ćemo poduzeti neke korake prema razumijevanje ovo malo bolje 924 00:44:17,130 --> 00:44:19,710 način, kažu, sljedeći primjer. 925 00:44:19,710 --> 00:44:23,550 Ja ću ići naprijed i provoditi jako brzo program koji se zove Adder. 926 00:44:23,550 --> 00:44:25,134 Kao, neka je dodati neke brojeve zajedno. 927 00:44:25,134 --> 00:44:27,800 I ja ću da kod nekih ugla ovdje, a samo kopirati i zalijepiti 928 00:44:27,800 --> 00:44:30,270 gdje sam bio prije, samo tako da možemo krenuti prije. 929 00:44:30,270 --> 00:44:33,090 Pa sad sam dobio osnovne početke programa pod nazivom Adder. 930 00:44:33,090 --> 00:44:34,670 >> I idemo naprijed i to učiniti. 931 00:44:34,670 --> 00:44:38,680 Ja ću ići naprijed i recimo, intx dobiva dobiti int. 932 00:44:38,680 --> 00:44:39,430 I znate što? 933 00:44:39,430 --> 00:44:40,990 Učinimo bolje korisničko iskustvo. 934 00:44:40,990 --> 00:44:45,740 >> Pa recimo samo da je x, i učinkovito zatražiti od korisnika da nam x. 935 00:44:45,740 --> 00:44:50,600 I onda neka mi ići naprijed i reći: printf o tome kako je y, ovaj put očekuju 936 00:44:50,600 --> 00:44:53,140 dvije vrijednosti od korisnika. 937 00:44:53,140 --> 00:44:59,759 A onda neka je samo ići naprijed i recimo, printf, zbroj x i y je. 938 00:44:59,759 --> 00:45:01,300 I sad ja ne želim raditi posto s. 939 00:45:01,300 --> 00:45:09,080 Želim učiniti posto ja, kosih crta n, a zatim priključite sum vrijednosti. 940 00:45:09,080 --> 00:45:10,620 >> Dakle, kako mogu ići oko radiš to? 941 00:45:10,620 --> 00:45:11,270 Znaš što? 942 00:45:11,270 --> 00:45:12,840 Znam kako koristiti varijable. 943 00:45:12,840 --> 00:45:15,140 Pusti me samo proglasiti novi, int z. 944 00:45:15,140 --> 00:45:16,770 >> A ja ću uzeti pogodak ovdje. 945 00:45:16,770 --> 00:45:21,470 Ako postoje jednake znaci ovo jezik, možda ja samo mogu učiniti x plus y, 946 00:45:21,470 --> 00:45:23,660 tako dugo dok sam kraj moje Mislio sa zarezom? 947 00:45:23,660 --> 00:45:28,170 Sad sam se vratiti ovdje, priključite z, završiti ovu misao sa zarezom. 948 00:45:28,170 --> 00:45:33,160 A da vidimo sad, ako je to sekvence lines-- x je dobiti int. 949 00:45:33,160 --> 00:45:34,770 Y je dobiti int. 950 00:45:34,770 --> 00:45:37,980 >> Dodaj X i Y, pohraniti vrijednost u z-- Dakle, opet, sjetite se znak jednakosti 951 00:45:37,980 --> 00:45:38,560 nije jednako. 952 00:45:38,560 --> 00:45:41,100 To je zadatak s desna na lijevo. 953 00:45:41,100 --> 00:45:45,180 I neka je ispisati da je zbroj x i y nije doslovno z, 954 00:45:45,180 --> 00:45:46,830 ali ono što je unutar z. 955 00:45:46,830 --> 00:45:50,090 Tako ćemo napraviti Adder - lijepo, nema grešaka ovaj put. 956 00:45:50,090 --> 00:45:53,030 Dot slash Adder, ući, x će biti 1. 957 00:45:53,030 --> 00:45:55,380 >> Y će biti 2. 958 00:45:55,380 --> 00:45:58,964 A zbroj x i y je 3. 959 00:45:58,964 --> 00:46:00,130 Tako da je sve u redu i dobro. 960 00:46:00,130 --> 00:46:03,260 >> Dakle, što bi se zamisliti da je matematika bi trebao raditi u programu kao što je ovaj. 961 00:46:03,260 --> 00:46:04,040 Ali znate što? 962 00:46:04,040 --> 00:46:06,904 Je li ta varijabla, linija 12, pa je potrebno? 963 00:46:06,904 --> 00:46:09,820 Ne morate da se u naviku samo čuvanje stvari u varijablama 964 00:46:09,820 --> 00:46:10,980 samo zato što mogu. 965 00:46:10,980 --> 00:46:13,550 A, u stvari, to je općenito smatra da je loše dizajn 966 00:46:13,550 --> 00:46:18,100 ako stvaranju varijablu naziva z, u ovom slučaju, skladištenje nešto u njemu, 967 00:46:18,100 --> 00:46:21,390 a zatim se odmah koristeći ga, ali nikad više. 968 00:46:21,390 --> 00:46:24,700 Zašto dati nešto ime kao z ako ste doslovno 969 00:46:24,700 --> 00:46:26,770 ćemo koristiti kako stvar je samo jednom, i tako 970 00:46:26,770 --> 00:46:29,380 proksimalno u kojoj ste stvorili to je u prvom redu, 971 00:46:29,380 --> 00:46:31,052 tako blizu u smislu linija koda? 972 00:46:31,052 --> 00:46:31,760 Dakle, znate što? 973 00:46:31,760 --> 00:46:34,480 Ispada da je C je prilično fleksibilan. 974 00:46:34,480 --> 00:46:36,586 Ako sam zapravo želite plug-in vrijednostima ovdje, 975 00:46:36,586 --> 00:46:38,210 Ne treba da proglasi novu varijablu. 976 00:46:38,210 --> 00:46:41,680 Mogao sam samo plug-in x plus y, jer C razumije 977 00:46:41,680 --> 00:46:43,390 aritmetika, i matematički operatori. 978 00:46:43,390 --> 00:46:47,140 >> Tako sam se jednostavno može reći, učiniti math, x plus y, bez obzira na te vrijednosti su, 979 00:46:47,140 --> 00:46:50,780 plug dobivena broj u taj niz. 980 00:46:50,780 --> 00:46:53,730 Dakle, to bi moglo biti, iako samo jedan redak kraći, 981 00:46:53,730 --> 00:46:58,480 bolji dizajn, bolji program, jer ima manje kod, dakle, 982 00:46:58,480 --> 00:46:59,921 manje mi je razumjeti. 983 00:46:59,921 --> 00:47:01,920 I to je također samo čišće, ukoliko nismo 984 00:47:01,920 --> 00:47:04,620 uvođenje novih riječi, novi simboli, kao što su z, 985 00:47:04,620 --> 00:47:07,510 iako stvarno ne služi mnogo svrhe. 986 00:47:07,510 --> 00:47:12,890 >> Nažalost, matematika nije sve je pouzdano ponekad. 987 00:47:12,890 --> 00:47:15,270 Idemo naprijed i to učiniti. 988 00:47:15,270 --> 00:47:18,200 Idem samo naprijed sada i učinite sljedeće. 989 00:47:18,200 --> 00:47:27,650 >> Učinimo printf, posto ja, plus posto I, mora biti posto ja, kosih crta n. 990 00:47:27,650 --> 00:47:32,240 I ja ću to učinimo xyx plus y. 991 00:47:32,240 --> 00:47:34,821 Pa Samo ću prepisati to malo drugačije ovdje. 992 00:47:34,821 --> 00:47:36,320 Pusti me samo učiniti brzo duševne ček. 993 00:47:36,320 --> 00:47:37,986 Opet, nemojmo se ispred sebe. 994 00:47:37,986 --> 00:47:41,420 Provjerite zbrajalo, dot slash guja. 995 00:47:41,420 --> 00:47:44,950 x je 1, y je 2, 1 plus 2 3. 996 00:47:44,950 --> 00:47:45,870 Dakle, to je dobro. 997 00:47:45,870 --> 00:47:49,060 Ali neka se zakomplicirati ovaj sada malo, i stvoriti novu datoteku. 998 00:47:49,060 --> 00:47:53,350 >> Idem nazvati ovu, kažu, Ints, množina za cijelih brojeva. 999 00:47:53,350 --> 00:47:55,980 Pocnimo gdje sam bio maloprije. 1000 00:47:55,980 --> 00:47:57,770 No, sada ćemo napraviti nekoliko drugih linija. 1001 00:47:57,770 --> 00:48:03,430 Dopustite mi ići naprijed i učiniti sljedeće, printf, posto ja, minus posto ja, 1002 00:48:03,430 --> 00:48:08,959 je posto ja, zarez x, zarez yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Tako ja radim nešto drugačija matematika tamo. 1004 00:48:10,750 --> 00:48:11,624 Idemo napraviti još jedan. 1005 00:48:11,624 --> 00:48:16,610 Dakle posto I. puta posto ja je posto ja, kosih crta n. 1006 00:48:16,610 --> 00:48:21,430 Neka je plug-in x, y i x puta y. 1007 00:48:21,430 --> 00:48:24,530 Mi ćemo koristiti zvjezdicu na računalo za vrijeme. 1008 00:48:24,530 --> 00:48:26,390 >> Ne koristiti x. x je varijabla ime ovdje. 1009 00:48:26,390 --> 00:48:28,270 Možete koristiti zvjezdicu za umnožavanje. 1010 00:48:28,270 --> 00:48:29,020 Idemo napraviti još jedan. 1011 00:48:29,020 --> 00:48:34,580 Printf posto sam, dijele po posto I, posto ja, 1012 00:48:34,580 --> 00:48:40,460 Obrnuta kosa crta n. xy podijeljen y-- tako da upotrijebite kosu crtu u C 1013 00:48:40,460 --> 00:48:41,502 napraviti podjelu. 1014 00:48:41,502 --> 00:48:42,460 I neka je učiniti nešto drugo. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Ostatak posto i, podijeljeni po posto I, posto ja. 1017 00:48:55,240 --> 00:48:59,550 xy-- a sada ostatak je ono što je ostalo više. 1018 00:48:59,550 --> 00:49:02,980 Pri pokušaju podjele nazivnik u brojniku, 1019 00:49:02,980 --> 00:49:05,570 koliko je ostalo preko toga nisi mogao podijeliti van? 1020 00:49:05,570 --> 00:49:07,910 >> Dakle, ne postoji stvarno, nužno, simbol 1021 00:49:07,910 --> 00:49:09,470 mi smo koristili u osnovnoj školi za to. 1022 00:49:09,470 --> 00:49:13,830 No, tu u C. Možete kažu x modulo y, gdje je 1023 00:49:13,830 --> 00:49:18,000 ovaj znak postotka u ovom context-- zbunjujuće kad ste unutra 1024 00:49:18,000 --> 00:49:20,170 od dvostruke navodnike, unutarnjoj printf, posto 1025 00:49:20,170 --> 00:49:21,830 se koristi kao format razvrstač. 1026 00:49:21,830 --> 00:49:25,420 >> Kada koristite posto izvan da se u matematički izraz, 1027 00:49:25,420 --> 00:49:29,910 to je modulo operator za modularni arithmetic-- za naše potrebe 1028 00:49:29,910 --> 00:49:33,650 ovdje, znači, što je Ostatak x podijeljena po y? 1029 00:49:33,650 --> 00:49:36,130 Dakle, x podijeljen y je x slash y. 1030 00:49:36,130 --> 00:49:38,220 Što je ostatak od x podijeljena po y? 1031 00:49:38,220 --> 00:49:41,780 To je x mod y, kao programer će reći. 1032 00:49:41,780 --> 00:49:48,300 >> Dakle, ako sam napravio bez greške ovdje, pusti me ići naprijed i učiniti Ints, plural, lijepo, 1033 00:49:48,300 --> 00:49:50,010 i točka SLASH Ints. 1034 00:49:50,010 --> 00:49:55,270 I idemo naprijed i ne, recimo, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 U redu, jedan plus 10 je 11, provjera. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 je negativan 9, provjerite. 1037 00:50:01,240 --> 00:50:03,420 >> 1 puta 10 je 10, provjera. 1038 00:50:03,420 --> 00:50:07,090 1 podijeljeno s 10 is-- U redu, mi ćemo preskočiti jedan. 1039 00:50:07,090 --> 00:50:09,480 Ostatak od 1 podijeljeno s 10 je 1. 1040 00:50:09,480 --> 00:50:10,680 To je točno. 1041 00:50:10,680 --> 00:50:12,630 No, tu je bug ovdje. 1042 00:50:12,630 --> 00:50:15,390 >> Dakle, jedan sam stavila predati, nije točno. 1043 00:50:15,390 --> 00:50:16,670 Mislim, to je blizu 0. 1044 00:50:16,670 --> 00:50:20,670 1 podijeljeno s 10, znate, ako smo rezanje neke ugla, naravno, to je nula. 1045 00:50:20,670 --> 00:50:28,050 Ali, to stvarno treba biti 1/10, 0.1 ili 0.10, 0,1000, ili tako dalje. 1046 00:50:28,050 --> 00:50:30,600 >> To ne bi trebao biti stvarno nula. 1047 00:50:30,600 --> 00:50:35,990 Pa, ispada da je računalo radi doslovno ono što smo to rekli učiniti. 1048 00:50:35,990 --> 00:50:39,460 Mi smo radili matematiku kao x podijeljen y. 1049 00:50:39,460 --> 00:50:44,680 I oba X i Y, po uzoru koda ranije, cijeli brojevi. 1050 00:50:44,680 --> 00:50:50,440 >> Osim toga, na liniji 15, mi smo govori printf, hej, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 cijeli broj, plug-in cijeli broj, plug-in je integer-- posebno 1052 00:50:54,230 --> 00:50:57,580 x, y i, zatim x podijeljen y. x i y su Ints. 1053 00:50:57,580 --> 00:50:59,060 Mi smo dobro tamo. 1054 00:50:59,060 --> 00:51:01,250 >> No, ono što je x podijeljena x? 1055 00:51:01,250 --> 00:51:06,790 x podijeljena y trebao biti, matematički, 1/10, ili 0.1, 1056 00:51:06,790 --> 00:51:11,600 koji je pravi broj, realni broj ima, potencijalno, decimalnu točku. 1057 00:51:11,600 --> 00:51:13,230 To nije cijeli broj. 1058 00:51:13,230 --> 00:51:18,290 >> No, ono što je najbliže broj do 1/10 ili 0,1? 1059 00:51:18,290 --> 00:51:21,114 Da, vrsta je nula. 1060 00:51:21,114 --> 00:51:22,030 0.1 je ovako puno. 1061 00:51:22,030 --> 00:51:22,890 A jedan je to puno. 1062 00:51:22,890 --> 00:51:25,870 Dakle, 1/10 bliže 0 nego da je jedan. 1063 00:51:25,870 --> 00:51:30,800 >> I ono što C je događaj za us-- vrsta jer smo to rekli to-- 1064 00:51:30,800 --> 00:51:32,600 se skraćivanjem taj cijeli broj. 1065 00:51:32,600 --> 00:51:40,540 To je uzimajući vrijednost, što je opet trebao biti nešto poput 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 i tako dalje. 1067 00:51:41,800 --> 00:51:45,320 I to je skraćivanjem sve nakon decimalne točke 1068 00:51:45,320 --> 00:51:47,510 tako da je sve to stvari, jer to ne 1069 00:51:47,510 --> 00:51:51,910 uklapaju u pojam cijeli broj, koji je samo broj kao negativna 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 gore i dolje, to baca sve nakon decimalne točke, jer ste 1071 00:51:55,830 --> 00:51:59,020 Ne mogu stati decimalne točke u cijeli broj po definiciji. 1072 00:51:59,020 --> 00:52:01,290 >> Dakle, odgovor je ovdje nula. 1073 00:52:01,290 --> 00:52:02,600 Pa kako ćemo ovo popraviti? 1074 00:52:02,600 --> 00:52:04,400 Trebamo drugo rješenje sve zajedno. 1075 00:52:04,400 --> 00:52:06,880 A to možemo učiniti, kako slijedi. 1076 00:52:06,880 --> 00:52:12,820 >> Pusti me naprijed i stvoriti nova file, to se zove floats.c. 1077 00:52:12,820 --> 00:52:16,500 I spremite ga ovdje u Isto imenik, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 I neka mi ići naprijed i kopirati dio tog koda od ranije. 1080 00:52:23,260 --> 00:52:27,690 >> No, umjesto da se int, učinimo to. 1081 00:52:27,690 --> 00:52:31,037 Daj mi Krajnja vrijednost zove x. gdje je s pomičnim zarezom 1082 00:52:31,037 --> 00:52:33,370 vrijednost samo doslovno nešto s pomičnim zarezom. 1083 00:52:33,370 --> 00:52:34,410 To se može premjestiti na lijevo, desno. 1084 00:52:34,410 --> 00:52:35,530 To je pravi broj. 1085 00:52:35,530 --> 00:52:38,050 >> I neka me ne zove dobiti int, ali se plovak, 1086 00:52:38,050 --> 00:52:41,420 koji je također bio među izbornika mogućnosti u C250 knjižnici. 1087 00:52:41,420 --> 00:52:43,220 Neka je y promijeniti plovka. 1088 00:52:43,220 --> 00:52:45,000 Dakle, ovo postaje dobili ispliva. 1089 00:52:45,000 --> 00:52:47,620 >> I sada, mi ne želimo priključiti Ints. 1090 00:52:47,620 --> 00:52:53,130 Ispada moramo koristiti posto f za plovak, posto f za plovak, 1091 00:52:53,130 --> 00:52:54,560 a sada ga spremiti. 1092 00:52:54,560 --> 00:53:01,220 A sada, fige, napraviti plovci, lijepo, dot SLASH pluta. 1093 00:53:01,220 --> 00:53:04,280 x je idući u biti jedan 1. y Će biti 10 opet. 1094 00:53:04,280 --> 00:53:08,240 >> A, lijepo, OK moj dodatak je točan. 1095 00:53:08,240 --> 00:53:10,240 Nadao sam se za više, ali sam zaboravio napisati. 1096 00:53:10,240 --> 00:53:13,250 Dakle idemo i popraviti ovu logičku pogrešku. 1097 00:53:13,250 --> 00:53:16,280 >> Idemo naprijed i iskoristite sljedeće. 1098 00:53:16,280 --> 00:53:18,080 Samo ćemo napraviti malo kopirati i zalijepiti. 1099 00:53:18,080 --> 00:53:20,080 A ja ću reći minus. 1100 00:53:20,080 --> 00:53:21,890 >> A ja ću reći puta. 1101 00:53:21,890 --> 00:53:24,060 A ja ću reći podijeljena. 1102 00:53:24,060 --> 00:53:28,240 I neću učiniti modulom, koji nije tako tijesnoj ovdje 1103 00:53:28,240 --> 00:53:33,690 podijeljen f, vrijeme plus-- OK, neka je to učiniti opet. 1104 00:53:33,690 --> 00:53:44,210 >> Make pluta, dot SLASH pluta, i 1, 10, and-- lijepo, ne, u redu. 1105 00:53:44,210 --> 00:53:45,250 Tako da sam idiot. 1106 00:53:45,250 --> 00:53:47,000 Dakle, ovo je vrlo čest u računalnoj znanosti 1107 00:53:47,000 --> 00:53:49,780 napraviti glupe greške kao što je ovaj. 1108 00:53:49,780 --> 00:53:53,100 >> Za pedagoške svrhe, ono što sam stvarno želio učiniti 1109 00:53:53,100 --> 00:53:57,410 je promijeniti znanost ovdje na plus, minus, na vrijeme, 1110 00:53:57,410 --> 00:54:01,140 i da rastavljaju, kao i ti nadam se primijetio tijekom ove vježbe. 1111 00:54:01,140 --> 00:54:04,700 Dakle, sada ćemo ponovno sastaviti ovo Program, učiniti dot Slash plovaka. 1112 00:54:04,700 --> 00:54:07,950 >> I po treći put, neka je vidjeti ako ispunjava moja očekivanja. 1113 00:54:07,950 --> 00:54:21,480 1, 10, ući, da, u redu, 1.000, podijeljen 10.000 je 0,100000. 1114 00:54:21,480 --> 00:54:24,952 I ispada da možemo kontrolirati koliko brojevi su nakon tih decimale. 1115 00:54:24,952 --> 00:54:25,660 Mi zapravo hoće. 1116 00:54:25,660 --> 00:54:26,790 Mi ćemo se vratiti na to. 1117 00:54:26,790 --> 00:54:28,440 >> Ali sada, u stvari, matematika je točna. 1118 00:54:28,440 --> 00:54:30,090 Dakle, opet, što je takeaway ovdje? 1119 00:54:30,090 --> 00:54:33,050 Ispostavilo se da je u C, postoje Ne tek strings-- i, u stvari, 1120 00:54:33,050 --> 00:54:36,120 ne postoji stvarno, jer mi dodati one s CS50 knjižnici. 1121 00:54:36,120 --> 00:54:37,710 No, tu nisu samo Ints. 1122 00:54:37,710 --> 00:54:38,990 >> Tu su i pluta. 1123 00:54:38,990 --> 00:54:42,810 I ispada hrpa drugih podataka Vrste također, da ćemo koristiti prije dugo. 1124 00:54:42,810 --> 00:54:46,270 Ispada da, ako želite jedan karakter, a ne niz znakova, 1125 00:54:46,270 --> 00:54:47,610 možete koristiti samo char. 1126 00:54:47,610 --> 00:54:52,350 >> Ispada da ako želite bool, Booleova vrijednost true ili false samo, 1127 00:54:52,350 --> 00:54:56,840 zahvaljujući CS50 knjižnici, mi smo upisan u C tip podataka o bool, kao dobro. 1128 00:54:56,840 --> 00:54:59,180 No, to je također prisutna u mnogi drugi jezici, kao dobro. 1129 00:54:59,180 --> 00:55:04,130 I ispada da ponekad potreban veći broj onda dolaze po defaultu 1130 00:55:04,130 --> 00:55:05,210 s Ints i lebdi. 1131 00:55:05,210 --> 00:55:10,590 >> A, u stvari, dvostruki je broj koji koristi ne 32 bita, ali 64 bita. 1132 00:55:10,590 --> 00:55:14,990 I dugo dugo je broj koji koristi ne 32, komadići, ali 64 bita, 1133 00:55:14,990 --> 00:55:19,190 odnosno, za pomičnim zarezom vrijednosti i cijeli brojevi, redom. 1134 00:55:19,190 --> 00:55:22,780 Dakle-a neka zapravo sada vidjeti u akciji. 1135 00:55:22,780 --> 00:55:26,150 >> Idem naprijed ovdje i ščepati jedan drugi program. 1136 00:55:26,150 --> 00:55:32,020 Evo, ja ću ići naprijed i ne uključuju CS50.h. 1137 00:55:32,020 --> 00:55:34,910 I pustite me, uključuju standardne IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> A vi ćete primijetiti nešto funky se događa ovdje. 1139 00:55:37,320 --> 00:55:40,592 To nije boja kodiranje stvari na isti način kao što je učinio prije. 1140 00:55:40,592 --> 00:55:43,550 A što se ispostavilo, to je zato što sam nisu dali stvar naziv datoteke. 1141 00:55:43,550 --> 00:55:47,270 >> Idem nazvati ovaj jedan sizeof.c, a pogodak Save. 1142 00:55:47,270 --> 00:55:51,039 I primijetiti što se događa s mojim vrlo bijeli broj na tu crnu pozadinu. 1143 00:55:51,039 --> 00:55:52,830 Sada barem postoji neki ljubičasti tamo. 1144 00:55:52,830 --> 00:55:54,490 I to je sintaksa istaknuto. 1145 00:55:54,490 --> 00:55:57,700 >> To je zato što, jednostavno, ja sam rekao IDE kakvu vrstu datoteke 1146 00:55:57,700 --> 00:56:01,060 to je dajući joj naziv i posebno datotečni nastavak. 1147 00:56:01,060 --> 00:56:03,620 Sada, neka je ići naprijed i učiniti. 1148 00:56:03,620 --> 00:56:08,910 Ja ću ići naprijed i vrlo jednostavno ispisati following-- bool 1149 00:56:08,910 --> 00:56:11,080 je posto LU. 1150 00:56:11,080 --> 00:56:12,950 >> Mi ćemo se vratiti da je u samo jednom trenutku. 1151 00:56:12,950 --> 00:56:15,840 A onda ću Veličina ispisa bool. 1152 00:56:15,840 --> 00:56:18,170 A sada, samo za spremanje ja neko vrijeme, ja sam 1153 00:56:18,170 --> 00:56:20,280 učiniti jednu cjelinu hrpa njih odjednom. 1154 00:56:20,280 --> 00:56:24,620 I, posebno, idem promijeniti u char i char. 1155 00:56:24,620 --> 00:56:27,760 Ovaj, idem promijeniti za dvostruki i dvostruko. 1156 00:56:27,760 --> 00:56:31,440 >> Ovaj, idem promijeniti na plovak i plovak. 1157 00:56:31,440 --> 00:56:35,670 Ovaj, idem promijeniti int i int. 1158 00:56:35,670 --> 00:56:38,660 I to je jedan, idem kako promijeniti dugo dugo. 1159 00:56:38,660 --> 00:56:40,840 I dalje traje dugo, dugo dugo. 1160 00:56:40,840 --> 00:56:44,572 >> A onda, na kraju, dao sam ja jedan previše, niz. 1161 00:56:44,572 --> 00:56:47,030 Ispostavilo se da je u C, ima poseban operator naziva 1162 00:56:47,030 --> 00:56:50,260 Veličina to je doslovno će, kada se pokrene, 1163 00:56:50,260 --> 00:56:52,099 da nam veličinu svaki od tih varijabli. 1164 00:56:52,099 --> 00:56:53,890 I to je način, sada, možemo povezati natrag 1165 00:56:53,890 --> 00:56:57,140 na prošlotjednom rasprave podataka i reprezentacije. 1166 00:56:57,140 --> 00:57:00,330 >> Pusti me naprijed i sastaviti Veličina dot veličine slash od. 1167 00:57:00,330 --> 00:57:01,210 I da vidimo. 1168 00:57:01,210 --> 00:57:05,210 Ispostavilo se da je u C, konkretno na CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 posebno na operativni sustav Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 što je 64-bitni operativni Sustav u ovom slučaju, 1171 00:57:11,100 --> 00:57:14,189 bool će koristiti jedan bajt prostora. 1172 00:57:14,189 --> 00:57:16,480 To je kako se mjeri veličina, nije u bitovima, ali u bajtovima. 1173 00:57:16,480 --> 00:57:18,690 I podsjetiti da je jedan bajt je osam bitova. 1174 00:57:18,690 --> 00:57:22,030 Tako bool, iako vas tehnički samo trebaju 0 ili 1, 1175 00:57:22,030 --> 00:57:24,092 to je malo razoran kako smo ga provode. 1176 00:57:24,092 --> 00:57:26,800 To se zapravo događa koristiti cjelinu byte-- pa sve nule, su možda 1177 00:57:26,800 --> 00:57:31,050 svi oni, ili nešto slično, ili samo jedan jedan među osam bitova. 1178 00:57:31,050 --> 00:57:34,962 >> Char, u međuvremenu, a koristi se za lika kao ASCII karaktera po prošlog tjedna, 1179 00:57:34,962 --> 00:57:36,170 će biti jedan znak. 1180 00:57:36,170 --> 00:57:42,340 I to synchs s našim pojmom to se ne više od 256 bits-- a, 1181 00:57:42,340 --> 00:57:45,360 synchs s njim se ne duže od 8 bita, koji 1182 00:57:45,360 --> 00:57:47,450 daje nam čak 256 vrijednosti. 1183 00:57:47,450 --> 00:57:49,680 Dvostruka će biti 8 bajtova ili 64 bita. 1184 00:57:49,680 --> 00:57:50,510 >> Plovak je 4. 1185 00:57:50,510 --> 00:57:51,690 Int 4. 1186 00:57:51,690 --> 00:57:52,980 Dugo, dugo je 8. 1187 00:57:52,980 --> 00:57:54,716 I niz je 8. 1188 00:57:54,716 --> 00:57:55,840 No, ne brinite o tome. 1189 00:57:55,840 --> 00:57:57,340 Idemo ponovno oguliti taj sloj. 1190 00:57:57,340 --> 00:57:59,940 Ispada, žica biti duži od 8 bajta. 1191 00:57:59,940 --> 00:58:02,310 >> I, doista, napisali smo već žice, Hello World, 1192 00:58:02,310 --> 00:58:03,700 duže od 8 bajta. 1193 00:58:03,700 --> 00:58:06,270 No, mi ćemo se vratiti da je u samo jednom trenutku. 1194 00:58:06,270 --> 00:58:09,690 Ali oduzeti ovdje je sljedeći. 1195 00:58:09,690 --> 00:58:15,320 >> Svako računalo ima samo ograničen količina memorije i prostora. 1196 00:58:15,320 --> 00:58:17,860 Možete pohraniti samo toliko datoteke na vašem Mac ili PC. 1197 00:58:17,860 --> 00:58:23,030 Možete pohraniti samo toliko programa u RAM trčanje odjednom, nužno, čak i 1198 00:58:23,030 --> 00:58:26,360 sa virtualnom memorijom, jer imate konačnu količinu RAM-a. 1199 00:58:26,360 --> 00:58:28,990 >> I samo da picture-- ako nikad nisi otvorio laptop 1200 00:58:28,990 --> 00:58:31,300 ili naručiti dodatnu memoriju za računalo, 1201 00:58:31,300 --> 00:58:33,670 možda ne znaju da je unutar vašeg računala 1202 00:58:33,670 --> 00:58:36,590 nešto što izgleda malo ovako. 1203 00:58:36,590 --> 00:58:40,540 Dakle, ovo je samo zajedničko poduzeće pod nazivom Ključno je da čini RAM za računala. 1204 00:58:40,540 --> 00:58:43,620 I RAM je mjesto gdje programi živjeti dok oni prikazuju. 1205 00:58:43,620 --> 00:58:46,630 >> Dakle, na svakom Macu ili PC-u, kada dvaput kliknite program, a to otvara, 1206 00:58:46,630 --> 00:58:48,921 i to otvara neke Word dokument ili tako nešto, 1207 00:58:48,921 --> 00:58:51,764 to ga pohranjuje privremeno RAM-a, jer je RAM je brži 1208 00:58:51,764 --> 00:58:53,680 nego vaš tvrdi disk ili Vaš SSD diska. 1209 00:58:53,680 --> 00:58:56,600 Dakle, to je samo kada je program ide živjeti kad radite, 1210 00:58:56,600 --> 00:58:58,060 ili kada se koriste datoteke. 1211 00:58:58,060 --> 00:59:00,890 >> Dakle, imate stvari koje izgledaju ovako unutar vašeg laptopa, 1212 00:59:00,890 --> 00:59:03,320 ili malo veće stvari unutar radne površine. 1213 00:59:03,320 --> 00:59:07,440 No, ključno je da imate samo konačan broj od tih stvari. 1214 00:59:07,440 --> 00:59:11,230 I postoji samo ograničen iznos hardver sjedi na tom stolu u pravu 1215 00:59:11,230 --> 00:59:11,730 ovdje. 1216 00:59:11,730 --> 00:59:15,920 >> Dakle, sigurno, ne možemo pohraniti beskrajno duge brojevi. 1217 00:59:15,920 --> 00:59:19,030 Pa ipak, ako se prisjetite Škola, koliko je znamenki mogu 1218 00:59:19,030 --> 00:59:21,400 imate na desnoj strani od decimalnog zareza? 1219 00:59:21,400 --> 00:59:24,680 Što se toga tiče, koliko je znamenki mogu imate lijevo od decimalnog zareza? 1220 00:59:24,680 --> 00:59:26,300 Stvarno, beskonačno mnogo. 1221 00:59:26,300 --> 00:59:30,840 >> Sada mi ljudi samo da bi znate izgovoriti milijuna, 1222 00:59:30,840 --> 00:59:34,990 i milijarde, milijarde, a bilijardi i kvintilijun. 1223 00:59:34,990 --> 00:59:39,370 I ja sam gurajući granice moga understanding-- ili my-- razumijem 1224 00:59:39,370 --> 00:59:41,110 brojeve, ali moj izgovor brojeva. 1225 00:59:41,110 --> 00:59:44,720 No, oni mogu dobiti beskonačno velika s beskonačno mnogo Znamenke lijevo 1226 00:59:44,720 --> 00:59:47,050 ili desno od decimalnog zareza. 1227 00:59:47,050 --> 00:59:50,040 >> No, računala imaju samo konačna količina memorije, 1228 00:59:50,040 --> 00:59:53,510 konačan broj tranzistora, A konačan broj žarulja unutra. 1229 00:59:53,510 --> 00:59:57,350 Dakle, što se događa kada vam ponestane prostora? 1230 00:59:57,350 --> 00:59:59,620 Drugim riječima, ako mislim natrag na prošli tjedan 1231 00:59:59,620 --> 01:00:03,160 kad smo govorili o brojevima sami su predstavljeni u binarnom sustavu, 1232 01:00:03,160 --> 01:00:05,480 pretpostavimo da imamo ovaj 8-bitna vrijednost ovdje. 1233 01:00:05,480 --> 01:00:08,290 >> I imamo sedam +1 i jedna 0. 1234 01:00:08,290 --> 01:00:10,827 I pretpostavimo da želimo dodati 1 do te vrijednosti. 1235 01:00:10,827 --> 01:00:12,410 To je stvarno velik broj upravo sada. 1236 01:00:12,410 --> 01:00:16,610 >> To je 254, ako se dobro sjećam math od prošlog tjedna desne strane. 1237 01:00:16,610 --> 01:00:19,480 No, što ako ja promijeniti da najdesniji 0 do 1? 1238 01:00:19,480 --> 01:00:22,800 Cijeli broj, od Naravno, postaje osam +1. 1239 01:00:22,800 --> 01:00:24,050 Dakle, još smo dobro. 1240 01:00:24,050 --> 01:00:27,204 >> I to vjerojatno predstavlja 255, iako, ovisno o kontekstu 1241 01:00:27,204 --> 01:00:29,120 to zapravo može predstavljati negativan broj. 1242 01:00:29,120 --> 01:00:31,240 Ali više o tome neki drugi put. 1243 01:00:31,240 --> 01:00:34,220 To se osjeća kao da se radi o kao visok kao što mogu računati. 1244 01:00:34,220 --> 01:00:35,290 >> Sada, to je samo 8 bita. 1245 01:00:35,290 --> 01:00:38,170 I moj Mac, sigurno, ima put više od 8 bitova memorije. 1246 01:00:38,170 --> 01:00:39,170 Ali to nema konačnog. 1247 01:00:39,170 --> 01:00:43,230 Dakle, isti argument vrijedi, čak i ako smo imaju više od ovih one na zaslonu. 1248 01:00:43,230 --> 01:00:47,020 >> Ali što se događa ako ste spremanje tog broja, 255, 1249 01:00:47,020 --> 01:00:49,290 i želite brojati jedan malo veći? 1250 01:00:49,290 --> 01:00:51,600 Želiš ići od 255 do 256. 1251 01:00:51,600 --> 01:00:55,800 Problem je, naravno, da ako početi brojati od nule kao i prošlog tjedna, 1252 01:00:55,800 --> 01:00:59,670 ne može računati kao visok kao 256, a kamoli 257, 1253 01:00:59,670 --> 01:01:02,584 a kamoli 258, m jer ono što se događa kada dodate 1? 1254 01:01:02,584 --> 01:01:05,000 Ako to ne učinite staru Osnovnu školu pristup, stavite 1 ovdje, 1255 01:01:05,000 --> 01:01:08,150 a zatim 1 i 1 je 2, a to je stvarno nula, nosite 1, 1256 01:01:08,150 --> 01:01:09,695 nose 1, nositi 1. 1257 01:01:09,695 --> 01:01:12,620 Sve ove stvari, ovi 1 a, ide na nulu. 1258 01:01:12,620 --> 01:01:17,820 A ti završiti, da, kao što je netko istaknuo, a 1 na lijevoj strani. 1259 01:01:17,820 --> 01:01:22,540 No, sve što možete zapravo vidjeti i stane u memoriju 1260 01:01:22,540 --> 01:01:27,960 je samo osam 0-a, što će reći u nekom trenutku, ako ti, računalo, 1261 01:01:27,960 --> 01:01:32,490 Pokušao računajući dovoljno visoko gore, ti si će zaokrenuti, čini se, 1262 01:01:32,490 --> 01:01:35,850 na nulu, ili možda čak negativan brojevi, koji su čak i niže od nule. 1263 01:01:35,850 --> 01:01:37,260 >> I možemo vrsta vidjeti. 1264 01:01:37,260 --> 01:01:39,900 Pusti me naprijed i pisati pravi program brzog ovdje. 1265 01:01:39,900 --> 01:01:43,690 Pusti me naprijed i pisati program koji se zove Overflow. 1266 01:01:43,690 --> 01:01:49,980 Uključi CS50.h uključuju standardni IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Stvarno sam propustila svoje sintakse. 1268 01:01:51,730 --> 01:01:54,440 Tako ćemo uštedjeti ovo kao overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> A sada int glavni void-- i prije dugo, mi ćemo 1270 01:01:57,084 --> 01:01:59,500 vratiti se objasniti zašto držimo pisanje int glavni prazninu. 1271 01:01:59,500 --> 01:02:02,080 No, za sada, neka je samo napraviti da, uzimajući zdravo za gotovo. 1272 01:02:02,080 --> 01:02:06,200 Recimo ja osobno dati int, i inicijalizaciju na 0. 1273 01:02:06,200 --> 01:02:11,716 >> Idemo onda na int mogu dobiti zero-- zapravo, neka je učiniti beskonačnu petlju 1274 01:02:11,716 --> 01:02:12,590 i vidjeti što se događa. 1275 01:02:12,590 --> 01:02:22,440 Dok je istina, onda idemo ispisati n je posto ja, kosih crta n, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Ali, sada, neka je učiniti n dobiva n plus jedan. 1277 01:02:27,200 --> 01:02:29,660 >> Tako Drugim riječima, za svaki iteracija ovog beskonačnu petlju, 1278 01:02:29,660 --> 01:02:32,550 uzmimo vrijednosti n-a, i dodati 1 do njega, a zatim 1279 01:02:32,550 --> 01:02:34,350 pohraniti rezultat natrag u n na lijevoj strani. 1280 01:02:34,350 --> 01:02:37,150 A, u stvari, vidjeli smo sintaksa nešto ovako, ukratko. 1281 01:02:37,150 --> 01:02:39,730 Kul trik je umjesto pisanja sve ovo, 1282 01:02:39,730 --> 01:02:42,770 zapravo možete reći n plus jednaka 1. 1283 01:02:42,770 --> 01:02:47,480 >> Ili, ako zaista želite biti fancy, možete reći n plus plus točka-zarez. 1284 01:02:47,480 --> 01:02:50,130 No, ova dva su samo što bismo nazvati sintaktički šećera 1285 01:02:50,130 --> 01:02:50,790 za prvu stvar. 1286 01:02:50,790 --> 01:02:53,456 >> Prva stvar je više eksplicitno, potpuno u redu, potpuno ispravan. 1287 01:02:53,456 --> 01:02:55,470 No, to je više zajedničkog, ja ću reći. 1288 01:02:55,470 --> 01:02:57,210 Dakle, mi ćemo to učiniti samo na trenutak. 1289 01:02:57,210 --> 01:03:01,685 >> Idemo sada napraviti preljev, što zvuči a zloslutna, dot slash preljeva. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Da vidimo, n je dobivanje prilično velika. 1292 01:03:09,852 --> 01:03:11,310 Ali razmislimo, koliko je velik može n dobiti? 1293 01:03:11,310 --> 01:03:12,870 >> n je cijeli broj. 1294 01:03:12,870 --> 01:03:16,400 Vidjeli smo maloprije s veličinom Primjer koji int je četiri bajta. 1295 01:03:16,400 --> 01:03:22,070 Znamo iz prošlog tjedna, četiri bajta je 32 bita, jer je 8 puta 4, to je 32. 1296 01:03:22,070 --> 01:03:23,460 To će biti 4 milijarde. 1297 01:03:23,460 --> 01:03:25,802 >> I mi smo do 800.000. 1298 01:03:25,802 --> 01:03:28,510 Ovo će se zauvijek računati kao visok kao ja eventualno mogu. 1299 01:03:28,510 --> 01:03:30,635 Tako ću ići naprijed, kao možda ne zadugo, 1300 01:03:30,635 --> 01:03:34,910 i udario Upravljačka C-- iskreno, kontrola C, puno, gdje je kontrola C općenito 1301 01:03:34,910 --> 01:03:36,034 znači odustajanje. 1302 01:03:36,034 --> 01:03:38,200 Nažalost, jer je to je pokrenut u oblaku 1303 01:03:38,200 --> 01:03:41,190 ponekad oblak pljuvanje se toliko stvari, 1304 01:03:41,190 --> 01:03:44,180 toliko izlaz, to će uzeti malo vremena za moj ulaz 1305 01:03:44,180 --> 01:03:45,630 doći do oblaka. 1306 01:03:45,630 --> 01:03:49,240 Dakle, iako sam pogodio Kontrola C nekoliko sekundi prije, 1307 01:03:49,240 --> 01:03:53,110 ovo je definitivno na strani Učinak beskonačnu petlju. 1308 01:03:53,110 --> 01:03:56,070 >> I tako se u takvim slučajevima, mi smo će napustiti to biti. 1309 01:03:56,070 --> 01:03:59,050 A mi ćemo dodati još terminal prozor ovamo 1310 01:03:59,050 --> 01:04:03,186 s plus, što naravno ne kao da je, s obzirom da još uvijek razmišlja. 1311 01:04:03,186 --> 01:04:05,310 I idemo naprijed i biti malo više razuman. 1312 01:04:05,310 --> 01:04:07,768 >> Ja ću ići naprijed i učiniti To samo konacno mnogo puta. 1313 01:04:07,768 --> 01:04:10,047 Iskoristimo for petlje, koja aludira sam ranije. 1314 01:04:10,047 --> 01:04:10,630 Napravimo to. 1315 01:04:10,630 --> 01:04:13,430 Daj mi još jednu varijablu int i dobiva 0. 1316 01:04:13,430 --> 01:04:17,430 je i manje od, recimo, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 I sad neka mi ići naprijed i print iz nje posto ja, zarez n. 1318 01:04:24,010 --> 01:04:27,547 A onda n- to je još uvijek će trajati zauvijek. 1319 01:04:27,547 --> 01:04:28,130 Napravimo to. 1320 01:04:28,130 --> 01:04:30,620 >> n dobiva n puta 2. 1321 01:04:30,620 --> 01:04:34,140 Ili možemo biti fancy i to vrijeme jednak 2. 1322 01:04:34,140 --> 01:04:37,120 No recimo samo n Sam jednak, puta 2. 1323 01:04:37,120 --> 01:04:39,321 Drugim riječima, u ovom Nova verzija programa, 1324 01:04:39,321 --> 01:04:41,820 Ne želim čekati zauvijek od kao što je 800.000 do 4 milijarde. 1325 01:04:41,820 --> 01:04:43,070 Recimo samo završimo s. 1326 01:04:43,070 --> 01:04:44,920 >> Neka je zapravo dvostruko n svaki put. 1327 01:04:44,920 --> 01:04:47,660 Koji, podsjetimo, udvostručenje je suprotno od imaju, naravno. 1328 01:04:47,660 --> 01:04:50,035 I dok je prošli tjedan imamo nešto opet, i opet, 1329 01:04:50,035 --> 01:04:52,200 i opet, super brzi, udvostručenje će sigurno 1330 01:04:52,200 --> 01:04:58,080 dobili nas od 1 do najveće moguće vrijednost koja možemo računati da s int. 1331 01:04:58,080 --> 01:04:59,750 >> Tako ćemo učiniti upravo to. 1332 01:04:59,750 --> 01:05:01,720 A mi ćemo se vratiti na ovo prije dugo. 1333 01:05:01,720 --> 01:05:04,180 No to je, opet, baš kao i ponavljanja bloka u nule. 1334 01:05:04,180 --> 01:05:05,600 A vi ćete koristiti ovaj prije dugo. 1335 01:05:05,600 --> 01:05:10,170 >> To samo znači brojati od nule sve do, ali nisu jednaki, na 64. 1336 01:05:10,170 --> 01:05:14,285 A na svakom ponavljanju ovo petlja, samo nastavi povećavati i. 1337 01:05:14,285 --> 01:05:18,990 Pa i ++ - a to uopće konstrukt na liniji 7 je jednostavno super čest način 1338 01:05:18,990 --> 01:05:22,290 od ponavljanja neke linije kod, neki broj puta. 1339 01:05:22,290 --> 01:05:23,362 Koja linija koda? 1340 01:05:23,362 --> 01:05:25,570 Ove vitičastim zagradama, kao i vi možda sakupljen od sada, 1341 01:05:25,570 --> 01:05:26,780 znači, učinite sljedeće. 1342 01:05:26,780 --> 01:05:29,510 >> To je kao kada nule, kada ima žute blokove 1343 01:05:29,510 --> 01:05:32,680 i druge boje koje vrste prihvatiti ili zagrliti druge blokove. 1344 01:05:32,680 --> 01:05:34,750 To je ono što ti kovrčava aparatić ovdje radimo. 1345 01:05:34,750 --> 01:05:40,200 Dakle, ako sam je dobio moj sintaksu redu-ti vidi simbol mrkve u C sredstvima 1346 01:05:40,200 --> 01:05:42,706 to je koliko puta sam bio pokušavaju riješiti ovaj problem. 1347 01:05:42,706 --> 01:05:45,330 Tako ćemo se riješiti tog jednog Sve u svemu, i zatvorite taj prozor. 1348 01:05:45,330 --> 01:05:46,520 A mi ćemo koristiti novu. 1349 01:05:46,520 --> 01:05:51,980 Provjerite overflow, dot slash overflow, Enter, sve u redu, 1350 01:05:51,980 --> 01:05:53,090 to izgleda loše na prvi pogled. 1351 01:05:53,090 --> 01:05:56,200 Ali neka se pomicati unatrag kroz vrijeme, jer sam to učinio 64 puta. 1352 01:05:56,200 --> 01:05:58,700 >> A primijetiti prvi put, n je 1. 1353 01:05:58,700 --> 01:06:03,110 Drugi put, n je 2, zatim 4, zatim 8, zatim 16. 1354 01:06:03,110 --> 01:06:09,450 A čini se da čim Ja se otprilike 1 milijardu, 1355 01:06:09,450 --> 01:06:12,800 ako sam ga ponovno udvostručiti, to treba mi dati 2 milijarde. 1356 01:06:12,800 --> 01:06:14,980 No, ispostavilo se, da je Pravo na vrhuncu. 1357 01:06:14,980 --> 01:06:18,930 >> I tako je zapravo preljeva int od 1 milijarde 1358 01:06:18,930 --> 01:06:23,514 do otprilike negativna 2 milijarde, jer je cijeli broj, 1359 01:06:23,514 --> 01:06:25,430 za razliku od brojeva mi su pod pretpostavkom da je prošli tjedan, 1360 01:06:25,430 --> 01:06:28,397 može biti i pozitivan i negativan u stvarnosti i na računalu. 1361 01:06:28,397 --> 01:06:30,730 Pa je najmanje jedan od onih bitovi učinkovito je ukraden. 1362 01:06:30,730 --> 01:06:34,190 Tako smo zapravo samo 31 bita, ili 2 milijarde moguće vrijednosti. 1363 01:06:34,190 --> 01:06:38,220 >> No, za sada je takeaway je prilično Jednostavno, što god ti brojevi 1364 01:06:38,220 --> 01:06:42,280 i što god je matematika, nešto loše dogodi na kraju, 1365 01:06:42,280 --> 01:06:46,980 jer na kraju se pokušava izmjenjivati ​​bitove previše puta. 1366 01:06:46,980 --> 01:06:51,060 A vi učinkovito otići od svega 1 je na možda sve 0-a, ili možda 1367 01:06:51,060 --> 01:06:54,260 Samo neki drugi uzorak koji to Jasno, ovisno o kontekstu, 1368 01:06:54,260 --> 01:06:56,342 može se tumačiti kao negativan broj. 1369 01:06:56,342 --> 01:06:59,300 I tako se čini najveću I može računati u ovom programu 1370 01:06:59,300 --> 01:07:01,210 Samo oko 1 milijardu. 1371 01:07:01,210 --> 01:07:02,760 No, tu je djelomična rješenje ovdje. 1372 01:07:02,760 --> 01:07:03,480 Znaš što? 1373 01:07:03,480 --> 01:07:07,600 >> Pusti me promjenu s int do dugo dugo. 1374 01:07:07,600 --> 01:07:10,633 I neka mi ići naprijed ovdje i say-- ću imati 1375 01:07:10,633 --> 01:07:12,290 da se to promijeni do nepotpisani dugo. 1376 01:07:12,290 --> 01:07:16,860 Ili, da vidimo, nisam se sjetiti. 1377 01:07:16,860 --> 01:07:19,920 >> Idemo naprijed i napraviti preljev. 1378 01:07:19,920 --> 01:07:21,860 Ne, to nije to, LLD, hvala. 1379 01:07:21,860 --> 01:07:23,430 Dakle, ponekad zveket može biti korisna. 1380 01:07:23,430 --> 01:07:27,550 Nisam sjetiti što je format specifikator je za dugo dugo. 1381 01:07:27,550 --> 01:07:28,950 >> Ali, doista, jeka mi je. 1382 01:07:28,950 --> 01:07:31,570 Zelena je neka vrsta dobre, još uvijek znači da ste pogriješili. 1383 01:07:31,570 --> 01:07:33,190 To je nagađanje da sam mislio LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Pa neka me uzeti da je savjet, dugo dugo decimalni broj, osim toga. 1385 01:07:38,750 --> 01:07:43,190 I neka mi to ponoviti, točka slash preljevom, Enter. 1386 01:07:43,190 --> 01:07:45,020 A sada ono što je super je to. 1387 01:07:45,020 --> 01:07:49,140 >> Ako sam pomicati unatrag kroz vrijeme, još uvijek početak računajući na istoj mjesto-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Obavijest, dobili smo sve način do 1 milijarde. 1390 01:07:54,860 --> 01:07:57,070 Ali onda smo sigurno doći do 2 milijarde. 1391 01:07:57,070 --> 01:08:01,300 >> Onda smo dobili 4 milijarde, tada 8 milijardi, 17 milijardi. 1392 01:08:01,300 --> 01:08:03,340 I idemo veći, a više, i više. 1393 01:08:03,340 --> 01:08:05,740 Na kraju, to je, također, pauze. 1394 01:08:05,740 --> 01:08:09,350 >> Na kraju, uz dugo dugo, što je 64-bitna vrijednost, a ne 1395 01:08:09,350 --> 01:08:13,660 32-bitnu vrijednost, ako se računati previsoka, možete omotati oko 0. 1396 01:08:13,660 --> 01:08:16,410 I u ovom slučaju, mi se dogoditi da završiti s negativnog broja. 1397 01:08:16,410 --> 01:08:17,550 >> Dakle, to je problem. 1398 01:08:17,550 --> 01:08:20,439 I ispada da je ovaj Problem nije sve što kompliciranih. 1399 01:08:20,439 --> 01:08:23,060 Iako sam namjerno ga je izazvao ovim greškama, 1400 01:08:23,060 --> 01:08:26,149 ispada da ga vidimo kakav svega oko nas, ili barem neki od nas rade. 1401 01:08:26,149 --> 01:08:28,939 >> Tako je u Lego Star Wars, ako ste ikad igrali igru, 1402 01:08:28,939 --> 01:08:33,830 ispada da možete ići okolo razbijanje stvari u LEGO svijetu, 1403 01:08:33,830 --> 01:08:36,640 i prikupljanje novca, u suštini. 1404 01:08:36,640 --> 01:08:39,200 A ako ste ikad igrali ova igra previše vremena, 1405 01:08:39,200 --> 01:08:42,630 što je ovaj neimenovani pojedinac Ovdje je, ukupan broj 1406 01:08:42,630 --> 01:08:46,700 kovanica koje možete prikupiti je, čini se, 4 milijarde. 1407 01:08:46,700 --> 01:08:48,240 >> Sada, uz to je zapravo zaokružen. 1408 01:08:48,240 --> 01:08:50,239 Dakle, LEGO je pokušavao držati stvari user friendly. 1409 01:08:50,239 --> 01:08:53,779 Nisu to baš 2 do 32 snage, po prošlog tjedna. 1410 01:08:53,779 --> 01:08:55,310 Ali 4000000000 razlog. 1411 01:08:55,310 --> 01:08:58,979 Čini se, na temelju tih informacija, da LEGO, a tvrtka koja 1412 01:08:58,979 --> 01:09:02,624 napravio ovaj stvarni softver, odlučili da je najveći broj kovanica 1413 01:09:02,624 --> 01:09:04,540 korisnik može akumulirati je, doista, 4000000000, 1414 01:09:04,540 --> 01:09:12,069 jer su izabrali u svom kodu korištenje nije dugo dugo, očito, 1415 01:09:12,069 --> 01:09:16,140 nego samo cijeli broj, nepotpisani broj, samo pozitivni cijeli broj, čije 1416 01:09:16,140 --> 01:09:18,089 max vrijednost je otprilike to. 1417 01:09:18,089 --> 01:09:19,380 Pa, evo još jedan smiješni jednom. 1418 01:09:19,380 --> 01:09:23,500 Tako je u igri Civilization, što neki od vas bi mogli biti upoznati s 1419 01:09:23,500 --> 01:09:26,660 ispada da je prije nekoliko godina tamo Bio je to bug u ovoj igri, pri čemu 1420 01:09:26,660 --> 01:09:28,750 ako je igrao ulogu od Gandhija u igri, 1421 01:09:28,750 --> 01:09:34,020 umjesto njega se vrlo pacifist, umjesto da je nevjerojatno, nevjerojatno 1422 01:09:34,020 --> 01:09:36,399 agresivan, u nekim okolnostima. 1423 01:09:36,399 --> 01:09:40,529 Konkretno, na način da je civilizacija djela je da ako ti, igrač, 1424 01:09:40,529 --> 01:09:44,680 usvojiti demokraciju, vaš agresivnost rezultat dobiva 1425 01:09:44,680 --> 01:09:48,130 smanjivati ​​po dva, pa minus minus, a onda minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Tako da oduzimanje 2 od Vaš stvarni ponavljaju. 1427 01:09:50,569 --> 01:09:56,650 Nažalost, ako je vaš Ponavljanje je u početku 1 i oduzmete 2 od nje 1428 01:09:56,650 --> 01:09:59,050 nakon donošenja demokracije kao Gandhi ovdje moglo 1429 01:09:59,050 --> 01:10:02,200 učinili, jer je bio vrlo passive-- 1 na skali od agresivnosti. 1430 01:10:02,200 --> 01:10:04,830 Ali ako on donese demokraciju, a zatim on ide od 1 do negativnog 1. 1431 01:10:04,830 --> 01:10:11,470 >> Nažalost, oni su bili pomoću nepotpisane brojeva, 1432 01:10:11,470 --> 01:10:15,400 što znači da liječi čak i negativni Brojevi kao da su pozitivni. 1433 01:10:15,400 --> 01:10:19,780 I ispada da je pozitivni ekvivalent negativnim 1, 1434 01:10:19,780 --> 01:10:23,480 u tipičnim računalnih programa je 255. 1435 01:10:23,480 --> 01:10:27,250 Dakle, ako Gandhi donosi demokracija, i zbog toga ima 1436 01:10:27,250 --> 01:10:32,470 njegova agresivnost rezultat je smanjen, to je zapravo role oko 255 1437 01:10:32,470 --> 01:10:35,470 i čini ga najviše agresivan lik u igri. 1438 01:10:35,470 --> 01:10:36,930 Na taj način možete izguglati na ovo. 1439 01:10:36,930 --> 01:10:39,380 I to je, doista, An slučajno programiranje bugova, 1440 01:10:39,380 --> 01:10:43,010 ali to je ušao sasvim Lore otkad. 1441 01:10:43,010 --> 01:10:44,360 >> To je sve zabava i slatka. 1442 01:10:44,360 --> 01:10:47,760 Više zastrašujuće je kad stvarna stvarnom svijetu uređaje, a ne igre, 1443 01:10:47,760 --> 01:10:48,820 ima iste greške. 1444 01:10:48,820 --> 01:10:54,500 Naime, prije godinu dana je članak došao nešto o Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> A članak na prvi Pogled čita malo kompliciranih. 1446 01:10:56,850 --> 01:11:01,480 Ali to rekao, softver ranjivost u Boeing-a 1447 01:11:01,480 --> 01:11:04,790 Novi 787 Dreamliner jet ima potencijal da uzrokuje pilota 1448 01:11:04,790 --> 01:11:07,220 izgubiti kontrolu nad zrakoplov, možda 1449 01:11:07,220 --> 01:11:11,750 sredinom leta, službenici FAA upozorio airlines u zadnje vrijeme. 1450 01:11:11,750 --> 01:11:14,520 Bio je određivanje da model 787 1451 01:11:14,520 --> 01:11:19,770 avion koji je powered neprekidno 248 dana 1452 01:11:19,770 --> 01:11:24,880 može izgubiti sve izmjeničnu struju, klima, električne energije s obzirom na generatoru 1453 01:11:24,880 --> 01:11:28,892 kontrolne jedinice, GCUs, istovremeno odlaska u uspjeti siguran način. 1454 01:11:28,892 --> 01:11:29,850 To je vrsta me izgubiti. 1455 01:11:29,850 --> 01:11:35,390 No dopis navedeno, OK, sad sam to dobio, stanje je uzrokovano softvera 1456 01:11:35,390 --> 01:11:38,590 protiv unutarnje kontrola generator 1457 01:11:38,590 --> 01:11:44,860 jedinice koje će se preliti nakon 248 dana neprekidnog moći. 1458 01:11:44,860 --> 01:11:47,070 Mi smo izdavanja ovog primijetiti da se spriječi gubitak 1459 01:11:47,070 --> 01:11:49,300 od svih AC električne moć, što bi moglo dovesti do 1460 01:11:49,300 --> 01:11:50,980 gubitkom kontrole u avionu. 1461 01:11:50,980 --> 01:11:55,380 >> Dakle, doslovno, tu je neki cijeli broj, ili neki ekvivalentni tip podataka, 1462 01:11:55,380 --> 01:11:57,960 se koristi u softver u stvarnoj avionu 1463 01:11:57,960 --> 01:12:00,756 da ako bi se avion dovoljno dugo, što je očito 1464 01:12:00,756 --> 01:12:03,880 može biti slučaj ako ste samo trčanje ih stalno i nikad isključivanjem 1465 01:12:03,880 --> 01:12:06,810 Vaš avion, čini se, i ostavljajući svoje baterije umrijeti, 1466 01:12:06,810 --> 01:12:09,840 će na kraju brojati i prema gore, i gore, i gore, i gore, i gore. 1467 01:12:09,840 --> 01:12:12,150 >> I, po vrsti, konačna količina memorije 1468 01:12:12,150 --> 01:12:15,880 će se prelijevati, valjanje natrag nula ili neke negativne vrijednosti, 1469 01:12:15,880 --> 01:12:19,920 nuspojava koja je zastrašujuće stvarna stvarnost 1470 01:12:19,920 --> 01:12:23,970 da je avion možda morati da se digne, učinkovito, 1471 01:12:23,970 --> 01:12:27,290 ili mogu postati još gore, kao što leti. 1472 01:12:27,290 --> 01:12:29,230 Tako ove vrste pitanja su još uvijek s nama, 1473 01:12:29,230 --> 01:12:33,130 even-- ovo je bio 2015 članak sve više zastrašujuće 1474 01:12:33,130 --> 01:12:36,100 kada ne nužno razumjeti, cijeniti, ili predvidjeti 1475 01:12:36,100 --> 01:12:38,640 one vrste pogrešaka. 1476 01:12:38,640 --> 01:12:42,030 >> Tako ispada da postoji jedna druga loše o zastupljenosti podataka. 1477 01:12:42,030 --> 01:12:47,080 Ispada da su čak i pluta su vrsta manjkav, jer kola, također, 1478 01:12:47,080 --> 01:12:51,440 predložio sam se 32 bita, ili možda 64 ako koristite dvostruko. 1479 01:12:51,440 --> 01:12:53,070 Ali to je još uvijek konačna. 1480 01:12:53,070 --> 01:12:57,070 >> A kvaka je u tome, ako možete stavi beskonačan broj brojeva 1481 01:12:57,070 --> 01:12:59,460 nakon decimalne točke, ne postoji li način 1482 01:12:59,460 --> 01:13:02,690 može predstavljati sve moguće brojevi koji su nas učili 1483 01:13:02,690 --> 01:13:04,990 u osnovnoj školi može postojati u svijetu. 1484 01:13:04,990 --> 01:13:08,870 Računalo, u biti, mora odabrati podskup tih brojeva 1485 01:13:08,870 --> 01:13:10,200 da predstavlja točno. 1486 01:13:10,200 --> 01:13:12,450 >> Sada, računalo može okrugli možda malo, 1487 01:13:12,450 --> 01:13:17,900 i može vam omogućiti da otprilike trgovine bilo koji broj vam eventualno možda želite. 1488 01:13:17,900 --> 01:13:20,940 No, samo intuitivno, ako vas imaju ograničen broj bitova, 1489 01:13:20,940 --> 01:13:24,560 možete samo ih izmjenjivati u toliko konačnih načina. 1490 01:13:24,560 --> 01:13:26,570 Tako da ne mogu koriste konačan broj 1491 01:13:26,570 --> 01:13:29,880 permutacije bitova, obrasci nula i jedinica, 1492 01:13:29,880 --> 01:13:32,940 da predstavlja beskonačan broj brojeva, 1493 01:13:32,940 --> 01:13:37,370 što upućuje na to da računala mogu vrlo dobro se laže nam ponekad. 1494 01:13:37,370 --> 01:13:38,770 >> U stvari, učinimo to. 1495 01:13:38,770 --> 01:13:41,239 Pusti me da se vratim u CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Pusti me naprijed i stvoriti mali program 1497 01:13:43,030 --> 01:13:47,940 pozvao Nepreciznost, pokazati da računala su, doista, neprecizan. 1498 01:13:47,940 --> 01:13:51,910 >> I neka mi ići naprijed i početi s dio tog koda od prije, 1499 01:13:51,910 --> 01:13:53,830 a sada samo učiniti sljedeće. 1500 01:13:53,830 --> 01:14:03,640 Dopustite mi ići naprijed i učiniti printf, posto f, kosih crta n, 1 podijeljeno s 10. 1501 01:14:03,640 --> 01:14:07,430 Drugim riječima, neka je roniti dublje do 1/10, kao što su 1 i podijeljen 10. 1502 01:14:07,430 --> 01:14:09,760 Sigurno, računalo može predstavljati 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Tako ćemo ići naprijed i učiniti nepreciznosti. 1504 01:14:13,620 --> 01:14:14,390 Da vidimo. 1505 01:14:14,390 --> 01:14:16,210 Format navodi tipa double. 1506 01:14:16,210 --> 01:14:18,160 No, argument tipa int. 1507 01:14:18,160 --> 01:14:19,040 Što se događa? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, zanimljivo, tako da je iskustvo steceno prije. 1509 01:14:21,970 --> 01:14:26,050 Govorim, hej, računala emisija mi plovak sa postotnim f. 1510 01:14:26,050 --> 01:14:28,200 Ali ja sam dajući mu 2 Ints. 1511 01:14:28,200 --> 01:14:31,120 Tako ispada, ne mogu popraviti to u nekoliko načina. 1512 01:14:31,120 --> 01:14:38,430 >> Mogao sam samo okrenuti jedan u 1,0 i 10 na 10,0, što bi, doista, 1513 01:14:38,430 --> 01:14:42,390 imaju učinak pretvaranja ih u floats-- još uvijek nadam 1514 01:14:42,390 --> 01:14:43,180 isti broj. 1515 01:14:43,180 --> 01:14:45,880 Ili ispada da je nešto vidjet ćemo opet ne zadugo. 1516 01:14:45,880 --> 01:14:47,170 Ti bi mogao baciti brojeve. 1517 01:14:47,170 --> 01:14:49,880 >> Možete, pomoću ovog zagradi izraz, može se reći, 1518 01:14:49,880 --> 01:14:52,560 hej, računalo, uzmi ovo 10, što ja znam je int. 1519 01:14:52,560 --> 01:14:54,660 No, čuvajte ga, molim te, kao da je plovak. 1520 01:14:54,660 --> 01:14:56,680 No, to se osjeća nepotrebno složena. 1521 01:14:56,680 --> 01:14:59,040 >> Za naše potrebe i danas, neka je samo doslovno 1522 01:14:59,040 --> 01:15:02,700 učiniti ih s pomičnim zarezom vrijednosti sa decimalne točke, kao što je ovaj. 1523 01:15:02,700 --> 01:15:07,060 Pusti me naprijed i ponovno provjerite nepreciznosti, dobro, dot slash 1524 01:15:07,060 --> 01:15:08,870 nepreciznosti, ući. 1525 01:15:08,870 --> 01:15:10,990 U redu, mi tražimo dobro. 1526 01:15:10,990 --> 01:15:18,194 >> 1 podijeljeno s 10 je, prema mom Mac ovdje je, doista, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Sada, ja sam učio u osnovnoj školi tamo bi trebao biti beskonačan broj 0-ih. 1528 01:15:21,360 --> 01:15:23,151 Tako ćemo barem pokušati vidjeti neke od njih. 1529 01:15:23,151 --> 01:15:26,770 Ispada da printf je malo ljubitelj dalje nego što smo koristili. 1530 01:15:26,770 --> 01:15:30,890 Ispada da ne morate navesti Samo posto f, ili samo posto sam. 1531 01:15:30,890 --> 01:15:33,830 Vi zapravo možete odrediti Neke kontrolne opcije ovdje. 1532 01:15:33,830 --> 01:15:36,470 >> Naime, idem reći, hej, printf, 1533 01:15:36,470 --> 01:15:39,660 zapravo mi pokazati 10 decimalne točke. 1534 01:15:39,660 --> 01:15:40,820 Tako to izgleda malo čudno. 1535 01:15:40,820 --> 01:15:42,845 Ali ti kažeš posto, točka, koliko brojeva 1536 01:15:42,845 --> 01:15:44,970 Želite li vidjeti nakon što se decimalna točka, a zatim f 1537 01:15:44,970 --> 01:15:48,340 za stan, samo zato što je što je dokumentacija, kaže. 1538 01:15:48,340 --> 01:15:50,080 Pusti me naprijed i spasiti da. 1539 01:15:50,080 --> 01:15:52,460 >> A primijetiti previše, ja sam uzimajući umorni od prekucavanje stvari. 1540 01:15:52,460 --> 01:15:55,900 Pa ja sam samo postavljanje gore i Strelica dolje na moje ključeve ovdje. 1541 01:15:55,900 --> 01:15:58,710 A ako sam stalno udaranje gore, vidi sve naredbe 1542 01:15:58,710 --> 01:16:01,090 kako sam ja učinio, ili pogrešno napravio. 1543 01:16:01,090 --> 01:16:04,630 >> I ja ću ići naprijed i sada zapravo ne koriste to, očito. 1544 01:16:04,630 --> 01:16:11,416 Provjerite preciznost, točku slash imprecision-- tako 1545 01:16:11,416 --> 01:16:13,290 ono što sam učio u Škola provjerava. 1546 01:16:13,290 --> 01:16:19,010 Čak i ako sam ga ispisati do 10 decimale ga stavlja, doista, 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Ali znate što? 1548 01:16:19,840 --> 01:16:21,150 >> Idemo malo pohlepni. 1549 01:16:21,150 --> 01:16:23,990 Recimo, ono, pokaži mi 55 ističe nakon decimale. 1550 01:16:23,990 --> 01:16:26,160 Neka je stvarno uzeti programirati kako za spin. 1551 01:16:26,160 --> 01:16:31,170 Dopustite mi da to ponovo napraviti s make nepreciznosti, dot slash, nepreciznost. 1552 01:16:31,170 --> 01:16:32,390 >> I ovdje mi ići. 1553 01:16:32,390 --> 01:16:34,420 Vaš djetinjstva bila laž. 1554 01:16:34,420 --> 01:16:48,410 Očigledno, 1 podijeljeno s 10 je doista 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Što se događa? 1556 01:16:49,740 --> 01:16:53,360 Pa, što se ispostavilo, ako vrsta izgleda dovoljno daleko u pozadini 1557 01:16:53,360 --> 01:16:55,950 prikaz ovo broj, to je zapravo 1558 01:16:55,950 --> 01:17:00,400 nije točno 1/10 ili 0,1 i beskonačan broj nula. 1559 01:17:00,400 --> 01:17:01,630 Sada, zašto je to tako? 1560 01:17:01,630 --> 01:17:06,250 >> Pa, iako je to jednostavno Broj do nas ljudi, jednom podijeljen sa 10, 1561 01:17:06,250 --> 01:17:10,910 to je još uvijek jedan od beskonačno mnogo brojevi koji smo mogli smisliti. 1562 01:17:10,910 --> 01:17:14,490 No, računalo može predstavljati samo konacno mnogo tako brojeva. 1563 01:17:14,490 --> 01:17:18,710 I tako, zapravo, ono što je računalo pokazuje nam da je njegova najbliža 1564 01:17:18,710 --> 01:17:22,940 aproksimacija broja želimo vjerovati je 1/10, 1565 01:17:22,940 --> 01:17:27,760 ili stvarno 0,10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Umjesto toga, ipak, to je kao bliski kao što mogu dobiti. 1567 01:17:30,425 --> 01:17:32,300 I doista, ako pogledate ispod haube, 1568 01:17:32,300 --> 01:17:37,050 kao što smo mi ovdje u potrazi 55 znamenki nakon decimalne, 1569 01:17:37,050 --> 01:17:39,990 zapravo vidimo da je stvarnost. 1570 01:17:39,990 --> 01:17:42,610 Sada kao stranu, ako ste ikada vidio movie-- 1571 01:17:42,610 --> 01:17:45,780 većina vas vjerojatno haven't-- ali prije Superman 3 nekoliko godina, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor bitno utjecati ova stvarnost u njegovom društvu ukrasti puno 1573 01:17:49,500 --> 01:17:53,500 frakcija i frakcija novčana jedinica, jer company-- Koliko se sjećam, 1574 01:17:53,500 --> 01:17:57,210 to je bio while-- je u osnovi odbacujući sve što ne stane 1575 01:17:57,210 --> 01:17:58,790 u pojmu centi. 1576 01:17:58,790 --> 01:18:01,480 >> Ali ako zbrojite sve to sitne, sitne, sitne brojeve opet, 1577 01:18:01,480 --> 01:18:04,960 i opet, i opet, možete, kao u njegov slučaj, napraviti dobar iznos novca. 1578 01:18:04,960 --> 01:18:08,010 >> Iste ideja je ripped off by novija, ali ipak sada stariji 1579 01:18:08,010 --> 01:18:10,500 Film pod nazivom uredskog prostora, gdje su dečki u tom filmu, 1580 01:18:10,500 --> 01:18:13,501 nije ista stvar, to zeznuo u potpunosti, završio s puta previše 1581 01:18:13,501 --> 01:18:14,666 Novac u njihove bankovne račune. 1582 01:18:14,666 --> 01:18:15,800 Sve je to bilo vrlo sumnjivo. 1583 01:18:15,800 --> 01:18:19,290 Ali na kraju krajeva, nepreciznosti je svuda oko nas. 1584 01:18:19,290 --> 01:18:22,240 >> I to je, također, može biti zastrašujuće slučaj. 1585 01:18:22,240 --> 01:18:25,590 Ispada da je Superman 3 i poslovni prostor na stranu, ima 1586 01:18:25,590 --> 01:18:28,460 može biti neki vrlo stvaran svjetski posljedice 1587 01:18:28,460 --> 01:18:32,290 od stvarnosti neprecizan prikaz podataka 1588 01:18:32,290 --> 01:18:34,770 da čak i mi ljudi u danas ne moraju nužno 1589 01:18:34,770 --> 01:18:38,230 shvatiti kao i mi trebali, ili se ne sjećaju što je češće nego što bismo trebali. 1590 01:18:38,230 --> 01:18:42,950 I, doista, sljedeći isječak od pogled na neke vrlo stvarnom svijetu 1591 01:18:42,950 --> 01:18:47,730 Posljedice Što se događa ako ne cijeniti nepreciznost koja 1592 01:18:47,730 --> 01:18:50,065 se može dogoditi u brojkama reprezentacije. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEO PLAYBACK] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Svi smo došli prihvatiti su često frustrirajuće problemi koji 1595 01:18:55,620 --> 01:19:00,310 ići s them-- greške, virusa, i softverske propuste, 1596 01:19:00,310 --> 01:19:03,130 za male cijene za plaćanje za praktičnost. 1597 01:19:03,130 --> 01:19:07,800 No, u visoke tehnologije i velike brzine vojni i svemirski program aplikacije 1598 01:19:07,800 --> 01:19:12,800 najmanji problem može uzveličati u katastrofu. 1599 01:19:12,800 --> 01:19:18,900 >> 4. lipnja 1996. godine, znanstvenici su pripremili pokrenuti bez posade Ariane 5 raketa. 1600 01:19:18,900 --> 01:19:21,220 To je nosio znanstveni sateliti dizajniran 1601 01:19:21,220 --> 01:19:24,600 utvrditi točno kako zemlja je u interakciju magnetskog polja 1602 01:19:24,600 --> 01:19:27,410 sa solarnim vjetrovima. 1603 01:19:27,410 --> 01:19:30,800 Raketa je sagrađena za Europska svemirska agencija, 1604 01:19:30,800 --> 01:19:34,370 i podigne iz svog objekta na obali Francuske Gvajane. 1605 01:19:34,370 --> 01:19:37,540 >> -U Oko 37 sekundi u let, najprije 1606 01:19:37,540 --> 01:19:39,270 primijetio da se nešto događa u redu. 1607 01:19:39,270 --> 01:19:42,250 Mlaznice su zakretanjem u način oni stvarno ne bi trebali. 1608 01:19:42,250 --> 01:19:46,580 Oko 40 sekundi u letu, jasno, vozilo je u nevolji. 1609 01:19:46,580 --> 01:19:48,850 >> A to je kada su napravili odluka da ga uništi. 1610 01:19:48,850 --> 01:19:52,780 Časnik za sigurnost raspona, uz ogromne crijeva, pritisnuo gumb, 1611 01:19:52,780 --> 01:19:58,150 raznijeli raketu, prije nego što je mogao postati opasnost za javnu sigurnost. 1612 01:19:58,150 --> 01:20:01,060 >> -Ovo Je djevojka putovanje od Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 A njeno rušenje uzeo staviti zbog mana 1614 01:20:03,960 --> 01:20:05,822 ugrađen u raketnom softveru. 1615 01:20:05,822 --> 01:20:08,280 -U Problem na Ariane je da je broj koji je 1616 01:20:08,280 --> 01:20:10,600 potrebna 64 bita izraziti. 1617 01:20:10,600 --> 01:20:13,590 I oni su htjeli pretvoriti to je 16-bitni broj. 1618 01:20:13,590 --> 01:20:15,610 Oni su pretpostavili da je broj nikada nije bio idući 1619 01:20:15,610 --> 01:20:20,980 biti vrlo velika, da većina onih znamenke u 64-bitnoj broja su nula. 1620 01:20:20,980 --> 01:20:22,440 Oni su bili u krivu. 1621 01:20:22,440 --> 01:20:25,060 >> -U Nesposobnost jedne program za prihvaćanje 1622 01:20:25,060 --> 01:20:29,510 vrsta broja generira drugi je bio na korijen neuspjeha. 1623 01:20:29,510 --> 01:20:34,350 Razvoj softvera je postao vrlo skupo dio nove tehnologije. 1624 01:20:34,350 --> 01:20:38,140 Raketa Ariana su bili vrlo uspješna, toliko softvera 1625 01:20:38,140 --> 01:20:41,550 stvoren za to je bio i koristi u Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -U Osnovni problem je da je Ariane 5 bio brži, ubrzano brže. 1627 01:20:47,940 --> 01:20:51,450 A softver nije imala činili to. 1628 01:20:51,450 --> 01:20:55,060 >> -U Uništavanje raketa bio je veliki financijska katastrofa, 1629 01:20:55,060 --> 01:20:58,790 sve zbog pogreške u minutu softvera. 1630 01:20:58,790 --> 01:21:01,210 No, to nije bio prvi Vrijeme problemi konverziju podataka 1631 01:21:01,210 --> 01:21:04,820 je udario moderne raketne tehnologije. 1632 01:21:04,820 --> 01:21:08,050 >> -u 1991, s početkom od prvog Zaljevskog rata, 1633 01:21:08,050 --> 01:21:10,570 Patriot raketa doživio sličnu vrstu 1634 01:21:10,570 --> 01:21:12,800 problema broj konverzija. 1635 01:21:12,800 --> 01:21:16,090 I kao rezultat toga, 28 osoba, 28 američkih vojnika, 1636 01:21:16,090 --> 01:21:19,080 je ubijeno, a oko 100 drugi su ranjeni, 1637 01:21:19,080 --> 01:21:22,780 kada je domoljub, koji je trebao za zaštitu od dolaznih scuds, 1638 01:21:22,780 --> 01:21:25,830 nije uspio ispaliti projektil. 1639 01:21:25,830 --> 01:21:31,670 >> -Kada Irak napao Kuvajt, i Ameriku pokrenula Pustinjska oluja početkom 1991. godine, 1640 01:21:31,670 --> 01:21:35,780 Patriot raketnih sustava bili raspoređeni zaštititi Saudijsku Arabiju i Izrael 1641 01:21:35,780 --> 01:21:39,230 iz iračkih Scud raketnih napada. 1642 01:21:39,230 --> 01:21:43,810 Patriot je američki srednjeg dometa površina u sustav zraka, proizvedeni 1643 01:21:43,810 --> 01:21:45,770 od strane tvrtke Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -U Veličina Patriot interceptor Sam je oko otprilike 20 stopa dugačak. 1645 01:21:52,340 --> 01:21:55,230 I to teži oko 2.000 funti. 1646 01:21:55,230 --> 01:21:59,320 I to nosi bojevu glavu od o, Mislim da je to otprilike 150 funti. 1647 01:21:59,320 --> 01:22:03,930 I sama bojna glava je visoka eksploziv, koji je 1648 01:22:03,930 --> 01:22:07,330 ima fragmente oko njega. 1649 01:22:07,330 --> 01:22:11,680 Kućište je bojnom glavom osmišljena su da djeluju kao sačma. 1650 01:22:11,680 --> 01:22:14,110 >> -U Rakete provodi četiri po kontejneru, 1651 01:22:14,110 --> 01:22:17,130 a prevoze po polu prikolica. 1652 01:22:17,130 --> 01:22:24,930 >> -U Patriot anti-raketni sustav seže najmanje 20 godina. 1653 01:22:24,930 --> 01:22:28,420 To je izvorno dizajniran kao obrana rakete zrak 1654 01:22:28,420 --> 01:22:30,720 pucati dolje neprijateljske zrakoplove. 1655 01:22:30,720 --> 01:22:34,500 U prvom Zaljevskom ratu, kada je taj rat došao uzduž, 1656 01:22:34,500 --> 01:22:39,745 vojska želi ga koristiti za pucati dolje scuds, a ne avionima. 1657 01:22:39,745 --> 01:22:43,620 >> Irački Zrakoplovstvo je ne toliko problema. 1658 01:22:43,620 --> 01:22:46,670 Ali vojska je zabrinuta zbog scuds. 1659 01:22:46,670 --> 01:22:50,170 I tako su pokušali nadograditi Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Neprijatelja projektil putuje na Mach 5 1661 01:22:52,800 --> 01:22:55,830 će biti dovoljno izazovan. 1662 01:22:55,830 --> 01:22:58,490 No, kad je Patriot je požurio u službu, 1663 01:22:58,490 --> 01:23:02,860 vojska nije bio svjestan nekog Irački modifikacija koje je napravio 1664 01:23:02,860 --> 01:23:05,930 njihovi scuds gotovo nemoguće pogoditi. 1665 01:23:05,930 --> 01:23:10,740 >> Što se dogodilo je scuds da su dolazili u bilo nestabilno. 1666 01:23:10,740 --> 01:23:11,692 Oni su wobbling. 1667 01:23:11,692 --> 01:23:14,910 Razlog za to je Iračani, u cilju 1668 01:23:14,910 --> 01:23:18,280 da bi dobili 600 kilometara od 300 kilometra 1669 01:23:18,280 --> 01:23:21,700 Raspon raketa, uzeo težinu iz prednjeg bojnom glavom. 1670 01:23:21,700 --> 01:23:23,390 Oni su napravili bojeva glava upaljača. 1671 01:23:23,390 --> 01:23:27,330 >> Tako sada Patriot je pokušava doći na Scud. 1672 01:23:27,330 --> 01:23:30,230 I većinu vremena, velika većina vremena, 1673 01:23:30,230 --> 01:23:32,940 to bi samo letjeti od Scud. 1674 01:23:32,940 --> 01:23:37,260 Nakon operatora Patriot sustava shvatio da je Patriot propustili svoj cilj, 1675 01:23:37,260 --> 01:23:41,690 oni detonirao Patriot u bojnu glavu kako bi se izbjegle eventualne gubitke ako se 1676 01:23:41,690 --> 01:23:44,570 bilo dopušteno da padne na tlo. 1677 01:23:44,570 --> 01:23:48,790 >> -To Je ono što većina ljudi vidjeli, one velike vatrene kugle na nebu, 1678 01:23:48,790 --> 01:23:54,550 i neshvaćen kao presreće od Scud bojevih glava. 1679 01:23:54,550 --> 01:23:56,630 >> -Although U noći nebo, Patriots pojavio 1680 01:23:56,630 --> 01:24:00,370 biti uspješno uništavanje Scuds, na Dhahran, 1681 01:24:00,370 --> 01:24:03,360 ne može biti pogreška o njegovu učinkovitost. 1682 01:24:03,360 --> 01:24:07,970 Tamo, Patriot je radarski sustav izgubio trag o dolaznom Scud, 1683 01:24:07,970 --> 01:24:10,721 i nikad pokrenut zbog za softver mana. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Bilo je Izraelce koji je prvi otkrio da je više je sustav uključen, 1686 01:24:18,940 --> 01:24:22,690 veće odstupanje vremena postala, zbog sat ugrađen 1687 01:24:22,690 --> 01:24:24,810 u računalo sustava. 1688 01:24:24,810 --> 01:24:28,210 >> -Oko Dva tjedna prije tragedija u Dhahran, 1689 01:24:28,210 --> 01:24:30,770 Izraelci prijavljen Ministarstvo obrane 1690 01:24:30,770 --> 01:24:32,590 da sustav gubi vrijeme. 1691 01:24:32,590 --> 01:24:35,360 Nakon što je oko osam sati ili trčanje, su primijetili da u sustavu 1692 01:24:35,360 --> 01:24:37,720 postaje osjetno manje točne. 1693 01:24:37,720 --> 01:24:41,900 Ministarstvo obrane je odgovorila govori sve Patriot baterije 1694 01:24:41,900 --> 01:24:44,950 da ne napuštaju sustav na za dugo vremena. 1695 01:24:44,950 --> 01:24:49,160 Oni nikada nije rekao ono što je dugo vremena was-- osam sati, 10 sati, 1000 sati. 1696 01:24:49,160 --> 01:24:51,360 Nitko nije znao. 1697 01:24:51,360 --> 01:24:53,380 >> -U Patriot baterije stacionirane u vojarni 1698 01:24:53,380 --> 01:24:58,350 u Dhahran i njegova mana unutarnje Sat je bio na preko 100 sati 1699 01:24:58,350 --> 01:25:01,670 u noći 25. veljače. 1700 01:25:01,670 --> 01:25:05,917 >> -To Pratiti put do točnosti od oko desetine sekunde. 1701 01:25:05,917 --> 01:25:08,000 Sada, desetine sekunde je zanimljiv broj, 1702 01:25:08,000 --> 01:25:11,920 jer se ne može izraziti u binarnom točno, što 1703 01:25:11,920 --> 01:25:16,820 znači da se ne može izraziti točno u bilo suvremenog digitalnog računala. 1704 01:25:16,820 --> 01:25:18,540 Teško je vjerovati. 1705 01:25:18,540 --> 01:25:21,210 >> Ali koristiti kao primjer. 1706 01:25:21,210 --> 01:25:23,540 Uzmimo broj trećinu. 1707 01:25:23,540 --> 01:25:27,350 Jedna trećina ne može biti izražena u decimalnom točno. 1708 01:25:27,350 --> 01:25:32,080 Jedna trećina je 0.333 traje beskonačno. 1709 01:25:32,080 --> 01:25:36,480 >> Ne postoji način da to učiniti s apsolutna preciznost u decimale. 1710 01:25:36,480 --> 01:25:39,560 To je upravo ona vrsta problema što se dogodilo u Patriot. 1711 01:25:39,560 --> 01:25:44,100 Što duže sustav ran je gore je postao time error. 1712 01:25:44,100 --> 01:25:48,890 >> -Nakon 100 sati rada, pogreška u to vrijeme bio samo oko jedne trećine 1713 01:25:48,890 --> 01:25:50,600 sekunde. 1714 01:25:50,600 --> 01:25:54,210 No, u smislu koja cilja projektil putuje na Mach 5, 1715 01:25:54,210 --> 01:25:58,710 to je rezultiralo praćenje Pogreška od preko 600 metara. 1716 01:25:58,710 --> 01:26:02,120 To bi bila fatalna pogreška za vojnike na ono 1717 01:26:02,120 --> 01:26:08,940 dogodilo je Scud pokretanje bio otkriven ranih satelita upozorenja 1718 01:26:08,940 --> 01:26:12,860 a oni su znali da je Scud je dolaze u općem smjeru. 1719 01:26:12,860 --> 01:26:15,320 Oni nisu znali odakle dolazi. 1720 01:26:15,320 --> 01:26:18,250 >> -Bilo Je sada na radaru komponenta Patriot sustava 1721 01:26:18,250 --> 01:26:23,190 brani Dhahran locirati i držati staza od ulazne neprijateljske rakete. 1722 01:26:23,190 --> 01:26:24,609 >> -U Radar je bio vrlo pametan. 1723 01:26:24,609 --> 01:26:26,650 To bi zapravo pratiti položaj Scud, 1724 01:26:26,650 --> 01:26:30,350 a zatim predvidjeti gdje je vjerojatno će biti sljedeći put radar poslao 1725 01:26:30,350 --> 01:26:31,420 puls van. 1726 01:26:31,420 --> 01:26:33,110 To je bio pozvan niz vrata. 1727 01:26:33,110 --> 01:26:37,660 >> Onda, nakon Patriot odluči dovoljno vremena ima 1728 01:26:37,660 --> 01:26:42,450 prošao vratiti i provjeriti sljedeći Mjesto za ovu otkriveni objekt, 1729 01:26:42,450 --> 01:26:43,600 to ide natrag. 1730 01:26:43,600 --> 01:26:48,650 Dakle, kada se vratio u krivu mjesto, to onda ne vidi objekt. 1731 01:26:48,650 --> 01:26:52,160 I odluči da ne postoji predmet, to je bila lažna otkrivanje, 1732 01:26:52,160 --> 01:26:53,930 i kapi pjesmu. 1733 01:26:53,930 --> 01:26:57,030 >> -U Dolazni Scud nestala s radara. 1734 01:26:57,030 --> 01:27:00,260 I sekundi kasnije ga udario u vojarnu. 1735 01:27:00,260 --> 01:27:06,150 Scud ubijeno 28, a bio je posljednji jedan otkaz tijekom prvog Zaljevskog rata. 1736 01:27:06,150 --> 01:27:11,960 >> Tragično, ažurirani softver stigao u Dhahran sljedeći dan. 1737 01:27:11,960 --> 01:27:14,930 Softver mana je imao bila fiksna, zatvaranje 1738 01:27:14,930 --> 01:27:19,806 jedno poglavlje u problematičnom Povijest Patriot rakete. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEO PLAYBACK] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Malan: Dakle, to je sve kažu da je tih pitanja preljeva 1741 01:27:23,520 --> 01:27:25,860 i nepreciznosti su svi previše stvaran. 1742 01:27:25,860 --> 01:27:26,920 Pa kako smo došli ovdje? 1743 01:27:26,920 --> 01:27:28,895 Mi smo počeli sa samo govori o printf. 1744 01:27:28,895 --> 01:27:31,270 Opet, to funkcija koja ispisuje nešto na ekranu, 1745 01:27:31,270 --> 01:27:33,450 a mi smo uveli nakon toga nekoliko drugih funkcija 1746 01:27:33,450 --> 01:27:34,945 od tzv CS50 knjižnici. 1747 01:27:34,945 --> 01:27:36,910 A mi ćemo i dalje vidi ih u dogledno vrijeme. 1748 01:27:36,910 --> 01:27:40,760 A mi, posebno, koristi get niz, i dobiti int, a sada i dobiti plutaju, 1749 01:27:40,760 --> 01:27:44,410 a neki će i dalje nailazimo i koriste se prije dugo. 1750 01:27:44,410 --> 01:27:47,220 >> No, ponekad se već smo vidjeli potrebu 1751 01:27:47,220 --> 01:27:50,520 pohraniti ono što te funkcije ruku natrag? 1752 01:27:50,520 --> 01:27:52,920 Oni predaju nas natrag niz, ili int ili float. 1753 01:27:52,920 --> 01:27:56,070 I ponekad moramo staviti string ili int ili float, negdje. 1754 01:27:56,070 --> 01:28:00,100 >> A za pohranu one stvari, sjećam samo kao u nule, imamo varijable. 1755 01:28:00,100 --> 01:28:03,260 No, za razliku od nule, u C imamo stvarne vrste 1756 01:28:03,260 --> 01:28:05,530 od variables-- podataka tipovi, više generally-- 1757 01:28:05,530 --> 01:28:08,640 među njima, niz, int, A plutaju, a ovi drugi i dalje. 1758 01:28:08,640 --> 01:28:12,321 >> I tako kad smo proglasiti varijable u C, ćemo morati proglasiti naše vrste podataka. 1759 01:28:12,321 --> 01:28:14,820 To nije nešto što ćete morate učiniti kasnije u semestru 1760 01:28:14,820 --> 01:28:16,810 kao što smo prijelaz na druge jezike. 1761 01:28:16,810 --> 01:28:19,610 No, za sada, mi trebamo da se apriori unaprijed, 1762 01:28:19,610 --> 01:28:24,370 objasniti na računalo ono tipa varijable želimo da nam se dati. 1763 01:28:24,370 --> 01:28:27,290 >> Sada je, u međuvremenu, za ispis one vrste tipova podataka, 1764 01:28:27,290 --> 01:28:29,570 moramo reći printf što očekivati. 1765 01:28:29,570 --> 01:28:32,450 A vidjeli smo posto s za gudače, a posto ja za cijele brojeve, 1766 01:28:32,450 --> 01:28:33,790 i nekoliko drugih već. 1767 01:28:33,790 --> 01:28:37,237 A oni su jednostavno zahtjevi Za vizualni prikaz 1768 01:28:37,237 --> 01:28:38,070 tih informacija. 1769 01:28:38,070 --> 01:28:42,080 >> I svaka od njih zapravo može biti parametrizirana ili praćka na neki način, 1770 01:28:42,080 --> 01:28:45,370 Ako želite dodatnu kontrolu vrsta proizvodnje koje ste dobili. 1771 01:28:45,370 --> 01:28:49,604 A, u stvari, ispada da ne samo da postoji obrnuta kosa crta n za novu liniju. 1772 01:28:49,604 --> 01:28:52,520 Ima još nešto što se zove obrnuta kosa crta r za povrat valjka, koji 1773 01:28:52,520 --> 01:28:54,360 više srodan do stara škola pisaći stroj, 1774 01:28:54,360 --> 01:28:57,690 i Windows koristi za mnogo godina. 1775 01:28:57,690 --> 01:28:59,690 >> Postoji obrnuta kosa crta t za kartice. 1776 01:28:59,690 --> 01:29:03,170 Ispada, da ako želite dvostruki navodnici unutar niza, 1777 01:29:03,170 --> 01:29:05,000 Sjetite se da smo koristili dvostruki navodnici dvostruko 1778 01:29:05,000 --> 01:29:07,900 citat na lijevoj i desnoj strani završava naših žice do sada. 1779 01:29:07,900 --> 01:29:09,420 To će se činiti da se zbuniti stvari. 1780 01:29:09,420 --> 01:29:12,503 >> Ako želite staviti dvostruko citat u usred string-- i, štoviše, 1781 01:29:12,503 --> 01:29:13,670 to je zbunjujuće vidjeti. 1782 01:29:13,670 --> 01:29:17,120 I tako da ćete morati pobjeći, tako da se govoriti, dvostruki citat s nečim 1783 01:29:17,120 --> 01:29:18,860 kao, doslovno, kosih crta dvostruko citat. 1784 01:29:18,860 --> 01:29:20,230 I tu je neki drugi i dalje. 1785 01:29:20,230 --> 01:29:24,540 A mi ćemo vidjeti više od onih u stvarnoj uporabi prije dugo. 1786 01:29:24,540 --> 01:29:27,930 >> Tako ćemo sada prijelaz iz podataka i zastupanje, 1787 01:29:27,930 --> 01:29:30,820 i aritmetički operatori, sve od kojih nam je dao neke zgrade 1788 01:29:30,820 --> 01:29:32,070 blokovi s kojim se igraju. 1789 01:29:32,070 --> 01:29:34,481 Ali sada idemo zapravo dati nam ostatak vokabulara 1790 01:29:34,481 --> 01:29:36,230 da smo već imali prošli tjedan s nule 1791 01:29:36,230 --> 01:29:39,350 uzimajući pogled na neki drugi konstrukti u C-- nisu svi od njih. 1792 01:29:39,350 --> 01:29:41,680 No, ideja da smo vidjet zapravo samo 1793 01:29:41,680 --> 01:29:45,610 naglasiti prijevod iz jedan jezik, Scratch, na drugu, C. 1794 01:29:45,610 --> 01:29:48,470 >> I s vremenom, mi ćemo pokupiti više alata za naše alate, 1795 01:29:48,470 --> 01:29:49,820 da tako kažemo, sintaktički. 1796 01:29:49,820 --> 01:29:54,190 I doista, vidjet ćete da je ideja sada su već poznati od prošlog tjedna. 1797 01:29:54,190 --> 01:29:55,200 Tako ćemo to učiniti. 1798 01:29:55,200 --> 01:29:58,870 >> Idemo naprijed i ščepati program koji zapravo koristi neke izraze, 1799 01:29:58,870 --> 01:30:00,720 Booleova izraz. 1800 01:30:00,720 --> 01:30:02,810 Pusti me naprijed ovdje i stvoriti novu datoteku. 1801 01:30:02,810 --> 01:30:06,090 Nazvat ću ovo condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Pusti me naprijed i uključuju CS50 knjižnicu. 1803 01:30:09,350 --> 01:30:12,640 I neka mi ići naprijed i uključuju standardni IO.h za naše funkcije, 1804 01:30:12,640 --> 01:30:14,690 i printf, i više respektivno. 1805 01:30:14,690 --> 01:30:18,900 Dopustite mi da si dati da predloženi od int glavna praznina, čije objašnjenje mi ćemo 1806 01:30:18,900 --> 01:30:20,360 vratiti se u budućnosti. 1807 01:30:20,360 --> 01:30:23,820 >> Sada neka mi ići naprijed i dati ja int preko get int. 1808 01:30:23,820 --> 01:30:25,970 Onda neka mi ići naprijed i učiniti. 1809 01:30:25,970 --> 01:30:30,150 Želim reći, ako sam je less-- neka je razlikovati pozitivne, negativne, 1810 01:30:30,150 --> 01:30:31,260 ili nula vrijednosti. 1811 01:30:31,260 --> 01:30:36,630 >> Dakle, ako je i manje od nule, pusti me samo ovaj program jednostavno reći, 1812 01:30:36,630 --> 01:30:42,370 negativan, kosih crta n, ostalo ako ja je veći od nule. 1813 01:30:42,370 --> 01:30:47,030 Sada sam, naravno, neće reći printf pozitivan, obrnute kose crte br. 1814 01:30:47,030 --> 01:30:50,690 I onda još if-- sam mogao to učiniti. 1815 01:30:50,690 --> 01:30:53,410 >> Što mogu učiniti ako sam jednak 0. 1816 01:30:53,410 --> 01:30:55,840 Ali ja bih se odluka na Najmanje jedna pogreška već. 1817 01:30:55,840 --> 01:30:59,480 Sjetite se da je znak jednakosti je nije jednako kao i mi ljudi to znaju. 1818 01:30:59,480 --> 01:31:01,010 >> No, to je operator zadatak. 1819 01:31:01,010 --> 01:31:05,640 A mi ne želimo da se 0 na Pravo i staviti ga u i na lijevoj strani. 1820 01:31:05,640 --> 01:31:11,810 Dakle, kako bi se izbjegle zabune, ili možda zloupotreba znaka jednakosti, 1821 01:31:11,810 --> 01:31:14,740 ljudi odlučili prije nekoliko godina da u mnogim programskim jezicima 1822 01:31:14,740 --> 01:31:18,000 kada želite provjeriti jednakost između lijeve i desne strane, 1823 01:31:18,000 --> 01:31:19,635 što zapravo koristiti jednak jednakima. 1824 01:31:19,635 --> 01:31:21,010 Znači li pogoditi znaka jednakosti dva puta. 1825 01:31:21,010 --> 01:31:25,600 Kada želite pridružiti s desna na lijevo, koristite jedan znak jednakosti. 1826 01:31:25,600 --> 01:31:29,360 Tako smo mogli to učinimo drugo ako ja jednak jednak nuli. 1827 01:31:29,360 --> 01:31:31,710 >> I onda mogao ići i otvorim vitičastim zagradama, 1828 01:31:31,710 --> 01:31:36,087 i reći: printf 0, kosih crta n, učinjeno. 1829 01:31:36,087 --> 01:31:38,170 Ali zapamtite kako se oni vilice na cesti može raditi. 1830 01:31:38,170 --> 01:31:39,836 I, stvarno, samo mislim o logici. 1831 01:31:39,836 --> 01:31:41,510 ja je broj. 1832 01:31:41,510 --> 01:31:43,320 To je cijeli broj, konkretno. 1833 01:31:43,320 --> 01:31:48,600 A to znači da će biti manje od 0, ili veći od 0, ili 0 ° C. 1834 01:31:48,600 --> 01:31:51,600 Dakle, postoji neka vrsta toga implicirana zadani slučaj. 1835 01:31:51,600 --> 01:31:54,920 >> I tako smo mogli, baš kao i Scratch, dijeliti s još ako se, 1836 01:31:54,920 --> 01:31:55,747 a samo reći drugo. 1837 01:31:55,747 --> 01:31:57,830 Logično, ako vam programer zna da postoji samo 1838 01:31:57,830 --> 01:32:01,635 tri kante u kojoj je scenarij može fall-- prvi, 1839 01:32:01,635 --> 01:32:03,510 druga ili treća u ovom case-- ne 1840 01:32:03,510 --> 01:32:07,100 smetaju dodajući još preciznost a dodatna logika tamo. 1841 01:32:07,100 --> 01:32:09,690 Samo naprijed s Zadana ovdje slučaj od drugdje. 1842 01:32:09,690 --> 01:32:11,950 >> Sada, idemo naprijed nakon spremanja toga napraviti 1843 01:32:11,950 --> 01:32:15,760 Uvjeti dot slash conditions-- Nije veliki korisničko sučelje, 1844 01:32:15,760 --> 01:32:18,914 jer nisam potaknuvši Korisnik, kao što sam spomenuo ranije. 1845 01:32:18,914 --> 01:32:19,580 No, to je u redu. 1846 01:32:19,580 --> 01:32:20,454 Mi ćemo i dalje ostane jednostavan. 1847 01:32:20,454 --> 01:32:21,890 Pokušajmo broj 42. 1848 01:32:21,890 --> 01:32:23,240 I to je pozitivno. 1849 01:32:23,240 --> 01:32:26,120 Pokušajmo broj negativno 42, negativan. 1850 01:32:26,120 --> 01:32:28,244 >> Pokušajmo vrijednost 0. 1851 01:32:28,244 --> 01:32:29,160 I doista, to radi. 1852 01:32:29,160 --> 01:32:33,900 Sada ćete vidjeti s problemima prije duge, ispitivanje stvari tri puta, 1853 01:32:33,900 --> 01:32:34,980 Vjerojatno nije dovoljno. 1854 01:32:34,980 --> 01:32:37,438 Vi vjerojatno želite testirati neke veće brojeve, neke manje 1855 01:32:37,438 --> 01:32:40,520 brojevi, neki kutak slučajevima, kako doći ćemo ih opisati. 1856 01:32:40,520 --> 01:32:42,500 >> No, za sada, to je prilično jednostavan program. 1857 01:32:42,500 --> 01:32:45,160 I prilično sam siguran, logično, da spada u tri slučaja. 1858 01:32:45,160 --> 01:32:49,360 I doista, iako smo upravo usredotočeni na potencijalne mane 1859 01:32:49,360 --> 01:32:53,480 nepreciznosti i preljevom, u Stvarnost u kojoj su mnogi od CS50 probleme, 1860 01:32:53,480 --> 01:32:56,000 nećemo brinuti o, sve vrijeme, 1861 01:32:56,000 --> 01:32:59,050 ta pitanja preljeva i nepreciznosti zbog, u stvari, u C, 1862 01:32:59,050 --> 01:33:01,889 to je zapravo nije sve što je lako izbjeći te stvari. 1863 01:33:01,889 --> 01:33:04,180 Ako želite brojati veći i veći, i veći, 1864 01:33:04,180 --> 01:33:07,510 ispada postoje tehnike vi mogu koristiti, često uključuje stvari zove 1865 01:33:07,510 --> 01:33:11,240 knjižnice, zbirke koda, to drugi ljudi pisali da možete koristiti, 1866 01:33:11,240 --> 01:33:13,910 i drugih jezika kao Java i drugi, zapravo 1867 01:33:13,910 --> 01:33:15,800 čine ga puno lakše računati čak i veći. 1868 01:33:15,800 --> 01:33:19,810 Dakle, to je stvarno neki od tih opasnosti funkcija jezika koji koristite. 1869 01:33:19,810 --> 01:33:22,710 I u narednim tjednima, mi ćemo vidjeti koliko opasno C stvarno 1870 01:33:22,710 --> 01:33:24,950 može biti ako se ne koristi pravilno. 1871 01:33:24,950 --> 01:33:27,610 Ali od tamo, a uz Python i JavaScript, bit 1872 01:33:27,610 --> 01:33:32,620 mi sloj na neke dodatne zaštite, i pokrenuti manje od tih rizika. 1873 01:33:32,620 --> 01:33:35,820 >> Tako ćemo napraviti malo više Zanimljiva logika u našem programu. 1874 01:33:35,820 --> 01:33:39,110 Pa neka mi ići naprijed i stvoriti program koji se zove Logičke 1875 01:33:39,110 --> 01:33:43,804 Samo tako da mogu igrati s nekim Stvarni logika, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Ja ću samo kopirati i zalijepiti neke broj od ranije pa se vratim 1877 01:33:46,870 --> 01:33:49,950 na ovom lijepom polazište. 1878 01:33:49,950 --> 01:33:53,980 >> Neka mi ovaj put napraviti char C. Ja sam će mu dati ime C 1879 01:33:53,980 --> 01:33:58,510 samo zato što je konvencionalna, dobiti znak od korisnika. 1880 01:33:58,510 --> 01:34:00,730 I neka je pretvarati se kao Ja provedbu dijela 1881 01:34:00,730 --> 01:34:04,130 tog Rm programa, ukloniti Program prije toga zatraži korisniku 1882 01:34:04,130 --> 01:34:05,400 ukloniti datoteku. 1883 01:34:05,400 --> 01:34:06,750 Kako bismo to mogli učiniti? 1884 01:34:06,750 --> 01:34:11,090 >> Želim reći, ako je C jednak jednak, citat citat, 1885 01:34:11,090 --> 01:34:16,304 y, onda ću pretpostaviti da je korisnik odabrao da. 1886 01:34:16,304 --> 01:34:17,470 Samo ću ispisati da. 1887 01:34:17,470 --> 01:34:19,440 Ako je to zapravo pisanje uklanjanje programa, 1888 01:34:19,440 --> 01:34:21,420 bismo mogli ukloniti datoteku s više linija koda. 1889 01:34:21,420 --> 01:34:22,461 No, mi ćemo i dalje ostane jednostavan. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Inače, ako c jednak jednak n- i sad ovdje, ja ću reći, 1892 01:34:31,250 --> 01:34:32,980 korisnik mora značiti br. 1893 01:34:32,980 --> 01:34:34,360 I onda drugo, znate što? 1894 01:34:34,360 --> 01:34:36,200 Ne znam što drugo korisnik će se upisati. 1895 01:34:36,200 --> 01:34:38,533 Dakle, ja sam samo htjela reći da je to je greška, što god 1896 01:34:38,533 --> 01:34:40,070 on ili ona zapravo upisali. 1897 01:34:40,070 --> 01:34:41,180 >> Dakle, ono što se ovdje događa? 1898 01:34:41,180 --> 01:34:44,530 Postoji temeljna razlika u odnosu na ono što sam učinio u prošlosti. 1899 01:34:44,530 --> 01:34:49,300 Dvostruki navodnici, dvostruki navodnici, dvostruka citati, a ipak, jednostruke navodnike, 1900 01:34:49,300 --> 01:34:50,170 jednostruke navodnike. 1901 01:34:50,170 --> 01:34:52,860 Ispada u C, da kada želite napisati niz, 1902 01:34:52,860 --> 01:34:56,680 vi koristiti dvostruke navodnike, baš kao što imamo koristim sve ovo vrijeme s printf. 1903 01:34:56,680 --> 01:35:02,030 >> Ali ako želite da se bave samo jedan znak, tzv char, 1904 01:35:02,030 --> 01:35:03,780 onda zapravo koristiti jednostruke navodnike. 1905 01:35:03,780 --> 01:35:05,450 Oni od vas koji su programirani prije, možda nemate 1906 01:35:05,450 --> 01:35:07,850 morao brinuti o tome Razlika u nekim jezicima. 1907 01:35:07,850 --> 01:35:09,450 U C, ona je važna. 1908 01:35:09,450 --> 01:35:12,560 I tako kad ja dobiti char i ja želim usporediti taj char koristeći jednakima 1909 01:35:12,560 --> 01:35:18,350 jednaka nekom pismu kao što su y ili n, i ja, doista, potrebno je imati jednostruke navodnike. 1910 01:35:18,350 --> 01:35:19,770 >> Sada, neka je ići naprijed i učiniti. 1911 01:35:19,770 --> 01:35:26,180 Idemo naprijed i ne čine logičke dot slash logično. 1912 01:35:26,180 --> 01:35:27,305 I sada sam se od vas zatraži. 1913 01:35:27,305 --> 01:35:30,638 Dakle, vjerojatno, bolje korisničko iskustvo zapravo bi mi reći što učiniti ovdje. 1914 01:35:30,638 --> 01:35:33,030 Ali ja ću se samo slijepo kažu y za da, u redu, lijepo. 1915 01:35:33,030 --> 01:35:35,780 >> Idemo ponovno aktivirati, n za ne, lijepo. 1916 01:35:35,780 --> 01:35:39,610 Recimo kao nekim ljudima koje znam, moji caps lock uključen prečesto. 1917 01:35:39,610 --> 01:35:43,740 Pa ja kapitala Y, ući, pogrešku. 1918 01:35:43,740 --> 01:35:46,130 U redu, to nije točno ono što sam očekivao. 1919 01:35:46,130 --> 01:35:48,170 Doista, računalo radi doslovno ono 1920 01:35:48,170 --> 01:35:51,794 Rekao sam da do-- provjeriti mala y i mala n. 1921 01:35:51,794 --> 01:35:53,960 Ovo se ne osjećam kao dobar korisničko iskustvo, ipak. 1922 01:35:53,960 --> 01:35:59,010 Pusti me tražiti i prihvatiti ili mala slova ili gornji slučaj. 1923 01:35:59,010 --> 01:36:02,090 Tako ispada, možda želite reći nešto kao u nule, 1924 01:36:02,090 --> 01:36:08,150 kao što su doslovno ili C jednaka jednaka kapitala jedan citirani y. 1925 01:36:08,150 --> 01:36:11,400 Ispada, C nema to doslovna riječ ili. 1926 01:36:11,400 --> 01:36:12,880 >> No, ona ima dvije okomite pruge. 1927 01:36:12,880 --> 01:36:15,463 Morate držati Shift obično, ako koristite američku tipkovnicu, 1928 01:36:15,463 --> 01:36:18,910 i udario u okomitu traku Ključ iznad povratka ključ. 1929 01:36:18,910 --> 01:36:22,410 No, to okomita traka okomita traka znači ili. 1930 01:36:22,410 --> 01:36:26,220 >> Ako, s druge strane, željeli smo reći i, kao u nule, 1931 01:36:26,220 --> 01:36:28,180 smo mogli učiniti ampersand ampersand. 1932 01:36:28,180 --> 01:36:31,330 To nema logičnog smisla ovdje, jer čovjek ne bi mogao 1933 01:36:31,330 --> 01:36:37,110 upisali oba y i mala y i kapitala Y kao isti znak. 1934 01:36:37,110 --> 01:36:39,470 Dakle, ili je ono što želimo ovdje. 1935 01:36:39,470 --> 01:36:46,280 >> Dakle, ako sam to učiniti na oba mjesta, ili C jednak jednaka kapital N, sad ponovi, 1936 01:36:46,280 --> 01:36:49,390 čine logičnim, repriza logično. 1937 01:36:49,390 --> 01:36:51,200 Sada, ja mogu upisati y. 1938 01:36:51,200 --> 01:36:53,920 I ja mogu to učiniti opet sa kapitala Y ili grad N. 1939 01:36:53,920 --> 01:36:56,630 I ja sam mogao dodati u dodatni Kombinacije dalje. 1940 01:36:56,630 --> 01:36:58,810 >> Dakle, to je logično Program utoliko što je sada 1941 01:36:58,810 --> 01:37:01,940 Odjavljujem logično za ova vrijednost ili je ta vrijednost. 1942 01:37:01,940 --> 01:37:06,420 A ja ne moram nužno, se s još dva oklijevanja ili drugo oklijevanja. 1943 01:37:06,420 --> 01:37:09,960 Ja zapravo mogu kombinirati neke od vezana logika zajedno na ovaj način. 1944 01:37:09,960 --> 01:37:11,950 Tako će to biti bolje dizajniran da jednostavno 1945 01:37:11,950 --> 01:37:17,490 govoreći, ako je C jednak mala slova y, ispisati da, još ako je c jednak kapitala Y, 1946 01:37:17,490 --> 01:37:20,074 ispisati da, još ako je c jednak lower-- drugim riječima, 1947 01:37:20,074 --> 01:37:21,990 ne morate imati sve više i više grana. 1948 01:37:21,990 --> 01:37:28,840 Možete kombinirati neke od protuvrijednosti grane Logično, što je na ovaj način. 1949 01:37:28,840 --> 01:37:34,150 >> Tako ćemo pogledati samo jedan Konačni sastojak, jedan konačni konstrukt, 1950 01:37:34,150 --> 01:37:34,847 da je C dopušta. 1951 01:37:34,847 --> 01:37:36,930 A mi ćemo se vratiti u Budućnost drugima još. 1952 01:37:36,930 --> 01:37:41,400 A onda ćemo zaključiti gledajući na ne ispravnosti code-- 1953 01:37:41,400 --> 01:37:46,070 uzimajući kod u našem mišljenju, ali dizajn koda i posaditi one sjemenke rano. 1954 01:37:46,070 --> 01:37:51,337 >> Pa neka mi ići naprijed i otvoriti novu datoteku ovdje. 1955 01:37:51,337 --> 01:37:51,920 Znaš što? 1956 01:37:51,920 --> 01:37:54,450 Idem ponovno provesti da isti program, 1957 01:37:54,450 --> 01:37:55,940 ali s drugačijim konstrukt. 1958 01:37:55,940 --> 01:38:00,110 >> Dakle, mi ćemo vrlo brzo dati sebe Pristup uključiti CS50.h 1959 01:38:00,110 --> 01:38:04,150 za CS50 knjižnici, standardni Io.h za printf. 1960 01:38:04,150 --> 01:38:06,510 Daj mi moju int glavni prazninu. 1961 01:38:06,510 --> 01:38:09,310 I onda ovdje, neka mi ići naprijed i učiniti. 1962 01:38:09,310 --> 01:38:12,010 >> Char c dobiva dobili char, baš kao i prije. 1963 01:38:12,010 --> 01:38:16,770 I ja ću koristiti novi konstrukt now-- prebaciti, na što lik? 1964 01:38:16,770 --> 01:38:19,820 Dakle, prekidač je vrsta kao što su prebacivanje u vlaku pjesme. 1965 01:38:19,820 --> 01:38:22,070 Ili, stvarno, to je vrsta if drugo, ako je drugo, ako, 1966 01:38:22,070 --> 01:38:23,980 ali napisano nešto drugačije. 1967 01:38:23,980 --> 01:38:25,490 >> Prekidač izgleda ovako. 1968 01:38:25,490 --> 01:38:29,060 Imate prekidač, i što onda znak ili broj koji želite pogledati, 1969 01:38:29,060 --> 01:38:32,000 onda neki vitičastim zagradama kao u Scratch, samo reci ne ove stvari. 1970 01:38:32,000 --> 01:38:33,480 I onda imaju različite slučajeve. 1971 01:38:33,480 --> 01:38:34,830 >> Ne koristiti ako je i ostalo. 1972 01:38:34,830 --> 01:38:37,050 Vi doslovno koristiti slučaj riječi. 1973 01:38:37,050 --> 01:38:38,790 A ti bi rekao nešto poput ovoga. 1974 01:38:38,790 --> 01:38:43,820 >> Dakle, u slučaju malih slova y, ili u slučaju kapitala Y, 1975 01:38:43,820 --> 01:38:47,350 ići naprijed i ispisati da. 1976 01:38:47,350 --> 01:38:49,020 A onda pobjeći iz prekidača. 1977 01:38:49,020 --> 01:38:49,580 To je to. 1978 01:38:49,580 --> 01:38:50,880 Gotovi smo. 1979 01:38:50,880 --> 01:38:57,270 >> Inače, ako, da tako kažemo, mala slova n, odnosno kapitala N, 1980 01:38:57,270 --> 01:39:02,560 onda ići naprijed i print kako ne, a onda slomiti. 1981 01:39:02,560 --> 01:39:08,022 Else-- i ova vrsta je zadani slučaj indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 i samo za dobru mjeru, iako logično ova pauza nije potrebna 1983 01:39:10,980 --> 01:39:12,896 jer smo na kraju prekidača u svakom slučaju, 1984 01:39:12,896 --> 01:39:14,520 Ja sam sada izlaska iz prekidača. 1985 01:39:14,520 --> 01:39:16,280 Dakle, ovo izgleda malo drugačije. 1986 01:39:16,280 --> 01:39:18,272 >> No, logično, to je zapravo ekvivalent. 1987 01:39:18,272 --> 01:39:19,980 A zašto bi vam koristiti jedan na drugi? 1988 01:39:19,980 --> 01:39:23,220 Ponekad, samo osobnih preferencija, ponekad estetika, 1989 01:39:23,220 --> 01:39:25,420 ako gledam na to Sada, postoji nešto 1990 01:39:25,420 --> 01:39:27,510 rekao je da se za čitljivost ovog zakona. 1991 01:39:27,510 --> 01:39:30,690 Mislim, nikad ne smeta činjenica da je ovaj kod je novo za mnoge od nas u sobi. 1992 01:39:30,690 --> 01:39:33,515 >> No, to je samo vrsta je prilično. 1993 01:39:33,515 --> 01:39:37,760 Vidite mala slova y, kapitala Y, mala slova n, glavni N zadana, 1994 01:39:37,760 --> 01:39:40,150 to je samo vrsta skokova se na vas na način 1995 01:39:40,150 --> 01:39:42,200 da, vjerojatno, možda Iz prethodnog primjera 1996 01:39:42,200 --> 01:39:45,780 s MS-e, kao i okomite trake a drugo oklijevanja, ne bi mogli imati. 1997 01:39:45,780 --> 01:39:51,600 Dakle, ovo je stvarno stvar osobnog izbor, stvarno, ili čitljivost, 1998 01:39:51,600 --> 01:39:52,360 koda. 1999 01:39:52,360 --> 01:39:58,230 >> No, u smislu funkcionalnosti, pusti me ići naprijed i napraviti prekidač, dot slash 2000 01:39:58,230 --> 01:40:05,830 prekidač, a sada pisanje malim slovima y, kapitala Y, mala slova n, glavni N, 2001 01:40:05,830 --> 01:40:09,250 David ponovno pokušati, jer to je ni jedan znak. 2002 01:40:09,250 --> 01:40:12,050 Učinimo x, greška, kako se i očekivalo. 2003 01:40:12,050 --> 01:40:15,640 I logically-- i to je nešto Ja bi potaknuti na opću, čak 2004 01:40:15,640 --> 01:40:17,790 iako smo samo češanje Površina neke od tih značajki. 2005 01:40:17,790 --> 01:40:20,560 >> I to možda neće biti očite kod vas sami sjesti na tipkovnici, 2006 01:40:20,560 --> 01:40:21,370 Kako ovo radi? 2007 01:40:21,370 --> 01:40:22,240 Što bi to učinili? 2008 01:40:22,240 --> 01:40:25,630 Prekrasna stvar o vlasništvo laptop ili stolno računalo, ili pristup 2009 01:40:25,630 --> 01:40:29,290 na računalo s prevodilac, i sa uređivač koda kao što je ovaj, 2010 01:40:29,290 --> 01:40:32,990 se gotovo uvijek može odgovoriti na ova Pitanja za sebe samo iz pokušaja. 2011 01:40:32,990 --> 01:40:36,570 >> Na primjer, ako je retoričko Pitanje pri ruci bili su, 2012 01:40:36,570 --> 01:40:39,540 što se događa ako ste zaboravili pauze izjave? 2013 01:40:39,540 --> 01:40:41,400 Koji je zapravo vrlo uobičajena stvar za napraviti, 2014 01:40:41,400 --> 01:40:43,540 jer to ne izgleda kao da ih je zaista potrebno. 2015 01:40:43,540 --> 01:40:46,790 Oni zapravo ne dovrši svoj mislio kao zagradi ili kovrčava 2016 01:40:46,790 --> 01:40:47,714 Brace radi. 2017 01:40:47,714 --> 01:40:49,630 Idemo naprijed i rekompiliranje kod i vidjeti. 2018 01:40:49,630 --> 01:40:53,690 Na taj način bi prekidač, dot slash sklopke. 2019 01:40:53,690 --> 01:40:56,435 Recimo tip malim slovima y, gornji slučaj, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Tako sam upisao y. 2022 01:41:00,700 --> 01:41:04,420 >> Program je rekao da, ne, greška, kao da je mijenja svoj um. 2023 01:41:04,420 --> 01:41:09,280 Ali to vrsta bila, jer ono što se događa s prekidačem je prvi slučaj da je 2024 01:41:09,280 --> 01:41:13,899 Utakmica u biti znači, hej računalo, izvršava sve koda ispod njega. 2025 01:41:13,899 --> 01:41:16,690 A ako ne kažem pauze, ili ne kažem pauzu, ili ne reći pauzu, 2026 01:41:16,690 --> 01:41:19,540 računalo će puhati kroz sva ta linija 2027 01:41:19,540 --> 01:41:22,779 i izvršiti sve od njih sve dok se dobiva na tom kovrčavom braće. 2028 01:41:22,779 --> 01:41:24,320 Tako su kočnice doista potrebno. 2029 01:41:24,320 --> 01:41:27,120 Ali takeaway ovdje, kad u nedoumici, probajte nešto. 2030 01:41:27,120 --> 01:41:29,510 Možda spasiti svoj kod prvog, ili ga spremiti u extra datoteku 2031 01:41:29,510 --> 01:41:32,930 ako si stvarno zabrinut zabrljati gore i da se oporavi 2032 01:41:32,930 --> 01:41:34,430 rad koji znate da radi. 2033 01:41:34,430 --> 01:41:35,410 >> No, pokušajte stvari. 2034 01:41:35,410 --> 01:41:38,074 I nemojte biti kao boj se, možda, onoga što računalo može učiniti, 2035 01:41:38,074 --> 01:41:39,490 ili da je možda nešto pokvariti. 2036 01:41:39,490 --> 01:41:42,790 Uvijek možete vratiti u nekoj ranijoj verziji. 2037 01:41:42,790 --> 01:41:45,640 >> Tako ćemo završiti gledajući u dizajnu koda. 2038 01:41:45,640 --> 01:41:49,020 Imamo tu sposobnost sada pisati uvjeti i napišite petlje, 2039 01:41:49,020 --> 01:41:50,850 i varijable, i poziv funkcije. 2040 01:41:50,850 --> 01:41:54,590 Pa, iskreno, mi smo vrsta natrag na gdje smo bili prije tjedan dana s nule, 2041 01:41:54,590 --> 01:42:00,120 iako s manje uvjerljiv tekstualnog okoliš od nule dopušta. 2042 01:42:00,120 --> 01:42:03,990 >> Ali primijetiti kako brzo smo stekli da vokabular, čak i ako je 2043 01:42:03,990 --> 01:42:07,570 će potrajati neko vrijeme da sjedne, tako da smo sada mogu koristiti ovaj riječnik 2044 01:42:07,570 --> 01:42:10,320 više pisati zanimljive programe. 2045 01:42:10,320 --> 01:42:12,940 I neka je korak za bebe prema tome, kao što slijedi. 2046 01:42:12,940 --> 01:42:14,890 Pusti me naprijed i stvoriti novu datoteku ovdje. 2047 01:42:14,890 --> 01:42:17,750 >> Idem nazvati ovo prototype.c, te uvesti 2048 01:42:17,750 --> 01:42:20,954 po prvi put, sposobnost kako napraviti svoj vlastiti funkcije. 2049 01:42:20,954 --> 01:42:22,870 Neki od vas možda ima to učinili s nule, 2050 01:42:22,870 --> 01:42:25,430 u kojem možete stvoriti svoje vlastite prilagođene blokovi u nule, 2051 01:42:25,430 --> 01:42:27,892 a zatim ih povucite na mjesto gdje god želite u C. 2052 01:42:27,892 --> 01:42:30,100 I u većini programa jezici, možete to učiniti upravo 2053 01:42:30,100 --> 01:42:33,580 that-- napraviti svoj vlastiti funkcije, ako oni ne postoje. 2054 01:42:33,580 --> 01:42:38,660 >> Tako, na primjer, neka mi samo naprijed i uključuju CS50.h, a uključuju 2055 01:42:38,660 --> 01:42:43,110 standardni IO.h, int glavna nevažeće. 2056 01:42:43,110 --> 01:42:46,020 I sada imamo placeholder spremni otići. 2057 01:42:46,020 --> 01:42:48,550 Držim tiskanja stvari kao što su imena ljudi danas. 2058 01:42:48,550 --> 01:42:51,910 I da se osjeća da bismo mogli Ne bi bilo lijepo da postoji 2059 01:42:51,910 --> 01:42:53,936 bili funkciju pod nazivom Naziv ispisa? 2060 01:42:53,936 --> 01:42:55,060 Ne moram koristiti printf. 2061 01:42:55,060 --> 01:42:56,976 Ne moram se sjetiti svi format kodovi. 2062 01:42:56,976 --> 01:43:00,050 Zašto ne ja, ili zašto nije netko prije mene, 2063 01:43:00,050 --> 01:43:02,980 stvoriti funkciju pod nazivom ispis ime, da dati neki naziv, 2064 01:43:02,980 --> 01:43:03,980 jednostavno ga ispisuje? 2065 01:43:03,980 --> 01:43:08,700 >> Drugim riječima, ako kažem, hej, Računalo, daj mi niz 2066 01:43:08,700 --> 01:43:11,870 pitajući korisnika za takve, preko CS50 je doći string funkcije. 2067 01:43:11,870 --> 01:43:15,090 Hej, računalo, staviti da string u varijabla u lijevoj strani, 2068 01:43:15,090 --> 01:43:16,150 i nazvati to je. 2069 01:43:16,150 --> 01:43:22,150 A onda, hej računalo, samo naprijed i ispisati to ime osobe, učinjeno. 2070 01:43:22,150 --> 01:43:26,240 >> Sada, to bi bilo lijepo, jer ovaj program, podesno zove, 2071 01:43:26,240 --> 01:43:29,170 govori mi ono što je trebao učiniti putem imena onih funkciju a. 2072 01:43:29,170 --> 01:43:32,930 Pusti me i napraviti prototip, Enter. 2073 01:43:32,930 --> 01:43:34,930 I, na žalost, to ne ide letjeti. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, linija 7, karakter 5, pogreška, implicitno izjava 2075 01:43:39,430 --> 01:43:42,960 od funkcije ime za ispis nevaljana u C99, C99 2076 01:43:42,960 --> 01:43:45,130 što znači verziju C koji je izašao 1999. godine. 2077 01:43:45,130 --> 01:43:45,730 To je sve. 2078 01:43:45,730 --> 01:43:48,780 >> Dakle, ne znam što sve je to još uvijek znači. 2079 01:43:48,780 --> 01:43:50,810 Ali ja ne priznaju grešku u crvenom. 2080 01:43:50,810 --> 01:43:51,770 To je prilično očito. 2081 01:43:51,770 --> 01:43:53,769 >> A čini se da je s zeleni lik ovdje, 2082 01:43:53,769 --> 01:43:57,520 problem vezan uz ime pisača, otvorite zagrada s, zatvoreni navodnik, polu-debelo crijevo. 2083 01:43:57,520 --> 01:44:01,800 No, implicitno deklaracija Funkcija nismo vidjeli ukratko ranije. 2084 01:44:01,800 --> 01:44:04,880 To znači, jednostavno, da je jeka ne znam što mislim. 2085 01:44:04,880 --> 01:44:09,000 >> Ja sam se na vokabular riječi da je nikada nije vidio ili je prije učio. 2086 01:44:09,000 --> 01:44:11,950 I tako sam ga morati naučiti što ova funkcija znači. 2087 01:44:11,950 --> 01:44:13,590 Tako ću ići naprijed i učiniti. 2088 01:44:13,590 --> 01:44:17,970 >> Ja ću ići naprijed i provoditi moja funkcija zove Ispis Ime. 2089 01:44:17,970 --> 01:44:24,720 A ja ću reći, kako slijedi, da To čini, printf, Hello, posto 2090 01:44:24,720 --> 01:44:27,760 s, kosih crta n, ime i prezime, točka-zarez. 2091 01:44:27,760 --> 01:44:29,250 Pa što sam upravo učinio? 2092 01:44:29,250 --> 01:44:31,325 >> Tako ispada da provesti vlastitu funkciju, 2093 01:44:31,325 --> 01:44:33,845 mi vrsta posuditi neke od istu strukturu kao glavni 2094 01:44:33,845 --> 01:44:35,720 da smo upravo bili uzimati zdravo za gotovo, a ja 2095 01:44:35,720 --> 01:44:37,730 znam samo kopiranje i lijepljenje ljepušan velik dio onoga 2096 01:44:37,730 --> 01:44:39,170 Sam pisao u prošlosti. 2097 01:44:39,170 --> 01:44:40,570 Ali primijetite uzorak ovdje. 2098 01:44:40,570 --> 01:44:43,750 Interesi, Main, Void ćemo zafrkavati, osim prije dugo što to zapravo znači. 2099 01:44:43,750 --> 01:44:46,160 >> Ali danas, samo primijetiti paralelizam. 2100 01:44:46,160 --> 01:44:48,210 Void, naziv print, Naziv niz, tako da 2101 01:44:48,210 --> 01:44:50,310 ljubičasta ključne riječi, koje ćemo početi 2102 01:44:50,310 --> 01:44:54,067 pozivom na vrstu povrata, naziv funkcija, te ulazni. 2103 01:44:54,067 --> 01:44:56,400 Dakle, zapravo, možemo destilirati ova vrsta kao što su prošlog tjedna 2104 01:44:56,400 --> 01:44:59,030 kao, to je ime, odnosno Algoritam koda smo 2105 01:44:59,030 --> 01:45:00,761 ide na write-- algoritam se temelji 2106 01:45:00,761 --> 01:45:02,010 šifra ćemo pisati. 2107 01:45:02,010 --> 01:45:03,180 >> To je njegov unos. 2108 01:45:03,180 --> 01:45:04,670 To je njegov izlaz. 2109 01:45:04,670 --> 01:45:08,730 Ova funkcija, naziv ispisa je osmišljen kako bi se string zove ime, 2110 01:45:08,730 --> 01:45:11,350 ili bilo što, što je ulaz, a zatim nevažeće. 2111 01:45:11,350 --> 01:45:13,904 To ne vraća ništa, kao što su dobili niz ili dobiti int radi. 2112 01:45:13,904 --> 01:45:15,570 Dakle, to će mi ruku nešto natrag. 2113 01:45:15,570 --> 01:45:17,960 To je samo ide da imaju nuspojava, da tako kažemo, 2114 01:45:17,960 --> 01:45:19,570 ispisa ime osobe. 2115 01:45:19,570 --> 01:45:22,260 Dakle primijetiti, linija 7, ja mogu nazvati naziv ispisa. 2116 01:45:22,260 --> 01:45:25,920 Linija 10, mogu definirati ili provoditi naziv ispisa. 2117 01:45:25,920 --> 01:45:28,450 No, na žalost, to nije dovoljno. 2118 01:45:28,450 --> 01:45:31,230 >> Pusti me naprijed i rekompiliranje to nakon spremanja. 2119 01:45:31,230 --> 01:45:33,910 Opa, sad, ja sam to napravio još gore, čini se. 2120 01:45:33,910 --> 01:45:37,027 Dakle implicitno deklaracija Naziv Funkcija ispisa je nevažeći. 2121 01:45:37,027 --> 01:45:38,360 A, opet, ima više pogrešaka. 2122 01:45:38,360 --> 01:45:41,430 Ali kao što sam upozorio ranije, ako se osvaja sa, 2123 01:45:41,430 --> 01:45:44,850 ili malo tužno vidjeti tolike pogreške, usredotočiti se samo na prvi 2124 01:45:44,850 --> 01:45:47,500 u početku, jer bi to moglo samo imali kaskadni učinak. 2125 01:45:47,500 --> 01:45:51,970 Dakle, C, ili zveket točnije, još uvijek ne priznaje naziv ispisa. 2126 01:45:51,970 --> 01:45:54,580 >> A to je zato što zveket, po dizajnu, je vrsta nijem. 2127 01:45:54,580 --> 01:45:56,280 On samo radi ono što ga kažem. 2128 01:45:56,280 --> 01:46:00,950 I to ne samo tako da u cilju u kojoj ste ga kažem. 2129 01:46:00,950 --> 01:46:05,270 >> Tako sam to naznačio glavni na liniji četiri, kao što smo radili prilično često. 2130 01:46:05,270 --> 01:46:07,980 Ja sam je definirano ime za ispis na liniji 10. 2131 01:46:07,980 --> 01:46:11,793 Ali ja pokušavam koristiti Naziv ispisa na liniji sedam. 2132 01:46:11,793 --> 01:46:13,670 >> To je prerano, još uvijek ne postoji. 2133 01:46:13,670 --> 01:46:19,150 Tako sam mogao biti pametan i biti, OK, neka je samo igrati zajedno, 2134 01:46:19,150 --> 01:46:23,680 i premjestiti ime za ispis prema gore ovdje, i ponovno sastaviti. 2135 01:46:23,680 --> 01:46:24,550 O moj Bože. 2136 01:46:24,550 --> 01:46:25,260 Upalilo je. 2137 01:46:25,260 --> 01:46:26,670 To je kao jednostavan kao taj. 2138 01:46:26,670 --> 01:46:28,120 >> Ali logika je upravo to. 2139 01:46:28,120 --> 01:46:30,870 Morate naučiti jeka što je definiranjem funkciju na prvom mjestu. 2140 01:46:30,870 --> 01:46:31,920 Zatim ga možete koristiti. 2141 01:46:31,920 --> 01:46:33,940 Ali, iskreno, to se osjeća kao sklizak padini. 2142 01:46:33,940 --> 01:46:35,773 >> Dakle, svaki put kad pokrenete u problem, samo sam 2143 01:46:35,773 --> 01:46:39,450 će istaknuti i kopirati kod Napisao sam, izrezati i zalijepiti ovdje. 2144 01:46:39,450 --> 01:46:41,370 I, svakako, mogli bismo dovijati neke scenarije 2145 01:46:41,370 --> 01:46:43,286 gdje jedna funkcija možda trebate nazvati drugu. 2146 01:46:43,286 --> 01:46:46,030 I jednostavno ne mogu staviti svaki Funkcija iznad svake druge. 2147 01:46:46,030 --> 01:46:47,930 >> Tako ispada da postoji bolje rješenje. 2148 01:46:47,930 --> 01:46:50,100 Možemo ostaviti to biti. 2149 01:46:50,100 --> 01:46:53,677 I, iskreno, to je uglavnom lijepo, i zgodan i dobar dizajn 2150 01:46:53,677 --> 01:46:56,760 staviti glavna prvo, jer, opet, Glavni baš kao i kada je zelena zastava pritisne, 2151 01:46:56,760 --> 01:46:59,027 to je funkcija dobiva pogubili po defaultu. 2152 01:46:59,027 --> 01:47:01,110 Tako da kao što bi dobro staviti je na vrhu datoteke 2153 01:47:01,110 --> 01:47:03,560 tako da kada ste vi ili bilo druga ljudska gleda datoteke 2154 01:47:03,560 --> 01:47:06,360 znate što se događa Samo čitajući Glavna prvi. 2155 01:47:06,360 --> 01:47:15,360 Tako ispada, možemo reći jeka proaktivno, hej, zveket, na liniji četiri, 2156 01:47:15,360 --> 01:47:17,940 Obećajem da ću provoditi funkcija zove Ispis 2157 01:47:17,940 --> 01:47:22,600 Ime koje ima niz naziva ime kao ulaz, i vraća ništa, praznina. 2158 01:47:22,600 --> 01:47:24,770 A ja ću doći oko njegovu provedbu kasnije. 2159 01:47:24,770 --> 01:47:25,680 >> Ovdje dolazi Main. 2160 01:47:25,680 --> 01:47:29,130 Glavni je sada na liniji 9 mogu koristiti Ispis Naziv jer jeka 2161 01:47:29,130 --> 01:47:32,600 je vjerujući da je, na kraju, to će naići na definiciju 2162 01:47:32,600 --> 01:47:34,880 provedbe Ispis imena. 2163 01:47:34,880 --> 01:47:37,390 Tako je nakon spremanja moj dosje, neka mi ići naprijed i učiniti prototip, 2164 01:47:37,390 --> 01:47:38,498 izgleda dobro ovaj put. 2165 01:47:38,498 --> 01:47:43,470 Dot udarac, prototip, neka me ići naprijed i upišite ime. 2166 01:47:43,470 --> 01:47:48,440 David, zdravo David Zamila, zdravo Zamila, i, štoviše, sada to radi. 2167 01:47:48,440 --> 01:47:52,200 >> Tako je sastojak ovdje je da imamo napravili prilagođenu funkciju, kao običaj 2168 01:47:52,200 --> 01:47:54,219 Blok Blok smo ga zove. 2169 01:47:54,219 --> 01:47:57,010 No, za razliku od nule, gdje možete samo ga stvoriti i početi koristiti, 2170 01:47:57,010 --> 01:47:59,330 sada moramo biti malo više pedantan, 2171 01:47:59,330 --> 01:48:03,410 i zapravo vlak jeka koristiti ili da ga očekuju. 2172 01:48:03,410 --> 01:48:09,140 Sada, kao usput, zašto sve ovo vrijeme ima smo bili samo slijepo vjere, uključujući 2173 01:48:09,140 --> 01:48:12,170 CS50.h, uključujući i standardne IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> Pa, što se ispostavilo, Među nekoliko drugih stvari, 2175 01:48:15,190 --> 01:48:18,550 sve što je u tim dot h datoteke, koje se dogoditi da se slika. 2176 01:48:18,550 --> 01:48:20,460 Oni zaglavlje datoteke, da tako kažemo. 2177 01:48:20,460 --> 01:48:23,270 Oni još uvijek pisana u C. No, oni su druga vrsta datoteke. 2178 01:48:23,270 --> 01:48:28,690 >> Za sada, možete prilično mnogo pretpostaviti da je sve što je unutar CS50.h 2179 01:48:28,690 --> 01:48:33,360 je li netko-linijski brodovi kao što je ovaj, a ne za funkcije nazivaju Ispis Ime, 2180 01:48:33,360 --> 01:48:36,840 ali za dobiti String, Get Float, i nekoliko drugih. 2181 01:48:36,840 --> 01:48:41,510 A tu su i slični prototipovi, jedan linijski brodovi, unutar standardne IO.h 2182 01:48:41,510 --> 01:48:46,241 za printf, koji je sada u moja funkcija ispisa Naziv. 2183 01:48:46,241 --> 01:48:49,490 Dakle, drugim riječima, cijelo vrijeme mi smo upravo slijepo kopiranje i lijepljenje 2184 01:48:49,490 --> 01:48:51,780 su to, uključuju da, što se događa? 2185 01:48:51,780 --> 01:48:55,310 To su samo neka vrsta tragove da jeka, sto funkcijama 2186 01:48:55,310 --> 01:49:00,170 su, doista, provode, samo drugdje u različite datoteke 2187 01:49:00,170 --> 01:49:02,440 drugdje u sustavu. 2188 01:49:02,440 --> 01:49:05,160 >> Stoga smo provoditi naziv ispisa. 2189 01:49:05,160 --> 01:49:07,910 Ona ima tu nuspojavu ispis nešto na ekranu. 2190 01:49:07,910 --> 01:49:10,170 Ali to zapravo ne ruka me nešto natrag. 2191 01:49:10,170 --> 01:49:12,200 Kako ćemo ići oko provodi program koji 2192 01:49:12,200 --> 01:49:14,510 nema ruku mi nešto natrag? 2193 01:49:14,510 --> 01:49:15,580 >> Pa, pokušajmo. 2194 01:49:15,580 --> 01:49:21,360 Pusti me naprijed i provoditi datoteka zove return.c 2195 01:49:21,360 --> 01:49:24,530 tako da možemo pokazati kako nešto kao što su dobili String ili dobiti Int, 2196 01:49:24,530 --> 01:49:27,340 je zapravo povratak nešto natrag korisniku. 2197 01:49:27,340 --> 01:49:29,840 Idemo naprijed i definirati int glavni prazninu. 2198 01:49:29,840 --> 01:49:33,230 >> A, opet, u budućnosti, mi ćemo objasniti što je to int i tu prazninu 2199 01:49:33,230 --> 01:49:34,090 zapravo radi. 2200 01:49:34,090 --> 01:49:35,840 Ali danas, mi ćemo uzeti zdravo za gotovo. 2201 01:49:35,840 --> 01:49:39,970 Ja ću ići naprijed i printf, za dobar korisničko iskustvo, x je. 2202 01:49:39,970 --> 01:49:44,360 A onda ću čekati korisnički mi dati x S dobiti int. 2203 01:49:44,360 --> 01:49:48,459 >> A onda ću ići naprijed i ispisati x na kvadrat. 2204 01:49:48,459 --> 01:49:50,500 Dakle, kada imate samo tipkovnica, ljudi obično 2205 01:49:50,500 --> 01:49:52,600 koristiti malo mrkve simbol na tipkovnici 2206 01:49:52,600 --> 01:49:55,330 zastupati u vlasti , ili eksponent. 2207 01:49:55,330 --> 01:49:58,960 Dakle, x na kvadrat je prisutan i. 2208 01:49:58,960 --> 01:50:00,660 >> A sada ću to učiniti. 2209 01:50:00,660 --> 01:50:03,940 Ja samo mogu do-- što je x kvadrat? x na kvadrat je x puta x. 2210 01:50:03,940 --> 01:50:06,690 >> I mi to učinio neki prije vremena već danas. 2211 01:50:06,690 --> 01:50:08,730 To ne osjećaju kao sve što je veliki napredak. 2212 01:50:08,730 --> 01:50:09,570 Znaš što? 2213 01:50:09,570 --> 01:50:13,100 Idemo iskoristiti nešto od te ideje od zadnjeg puta apstrakcije. 2214 01:50:13,100 --> 01:50:16,080 >> Ne bi li bilo lijepo da postoji funkcija zove 2215 01:50:16,080 --> 01:50:18,460 trg koji radi upravo to? 2216 01:50:18,460 --> 01:50:20,640 Još uvijek, na kraju od dan, čini istu matematiku. 2217 01:50:20,640 --> 01:50:22,410 Ali neka apstraktna daleko je ideja o preuzimanju 2218 01:50:22,410 --> 01:50:25,280 jedan broj pomnožen drugi, i samo dati mu ime, 2219 01:50:25,280 --> 01:50:27,360 kao što je trg ovu vrijednost. 2220 01:50:27,360 --> 01:50:29,560 >> I, drugim riječima, u C, idemo stvoriti funkciju 2221 01:50:29,560 --> 01:50:32,660 zove trg koji radi upravo to. 2222 01:50:32,660 --> 01:50:34,600 To će se zvati trg. 2223 01:50:34,600 --> 01:50:35,790 To će uzeti int. 2224 01:50:35,790 --> 01:50:37,820 I mi ćemo vam samo zovu ga n, po defaultu. 2225 01:50:37,820 --> 01:50:39,403 >> Ali mi smo ga mogli nazvati nešto što želimo. 2226 01:50:39,403 --> 01:50:42,900 I sve to će to učiniti, doslovno je povratak 2227 01:50:42,900 --> 01:50:45,810 rezultat n puta n. 2228 01:50:45,810 --> 01:50:48,980 No, budući da je povratak nešto, što 2229 01:50:48,980 --> 01:50:53,690 je ključna riječ u ljubičasto imamo nikada nije vidio prije, sam, na liniji 11, 2230 01:50:53,690 --> 01:50:55,410 Ne mogu samo reći void ovaj put. 2231 01:50:55,410 --> 01:51:01,320 >> Void, u primjeru smo upravo vidjeli umjesto naziva pisača, samo znači, 2232 01:51:01,320 --> 01:51:02,190 učini nešto. 2233 01:51:02,190 --> 01:51:04,170 No, ne ruka me nešto natrag. 2234 01:51:04,170 --> 01:51:06,790 U tom slučaju, ja želim da se vrati n puta n, 2235 01:51:06,790 --> 01:51:08,460 ili što god da je, taj broj. 2236 01:51:08,460 --> 01:51:12,460 >> Tako da ne mogu reći, hej, računalo, I vratiti ništa, praznina. 2237 01:51:12,460 --> 01:51:16,166 To će se vratiti, po prirodi, int. 2238 01:51:16,166 --> 01:51:17,790 I to je sve što se ovdje događa. 2239 01:51:17,790 --> 01:51:20,070 >> Ulaz na kvadrat će biti int. 2240 01:51:20,070 --> 01:51:24,760 I tako da ga možemo koristiti, mora ime, N. To će izlaz 2241 01:51:24,760 --> 01:51:26,240 int da ne treba ime. 2242 01:51:26,240 --> 01:51:29,590 Možemo ga ostaviti na glavni, ili tko je pomoću me zapamtiti ovu vrijednost ako smo 2243 01:51:29,590 --> 01:51:31,120 želim s vlastitim varijable. 2244 01:51:31,120 --> 01:51:33,230 >> A, opet, jedini novi ključna riječ ovdje je povratak. 2245 01:51:33,230 --> 01:51:34,480 A ja sam samo radi neke matematike. 2246 01:51:34,480 --> 01:51:41,825 Da sam zaista želio biti nepotrebno, Mogao sam reći int proizvod dobiva n puta n. 2247 01:51:41,825 --> 01:51:44,170 >> A onda bih mogao reći, vratiti proizvod. 2248 01:51:44,170 --> 01:51:47,360 Ali, opet, na moje točke ranije to jednostavno nije dobra design-- 2249 01:51:47,360 --> 01:51:50,060 kao što su, zašto uvesti ime, simbol, kao što su proizvod, 2250 01:51:50,060 --> 01:51:51,570 samo da ga odmah vratiti? 2251 01:51:51,570 --> 01:51:53,670 Malo je čišći, malo čvršće, tako 2252 01:51:53,670 --> 01:51:59,380 govoriti, samo da kažem povratak n puta n, dobili osloboditi od ove linije uopce. 2253 01:51:59,380 --> 01:52:02,860 >> A to je samo manji broj za čitanje, manje prilika za pogreške. 2254 01:52:02,860 --> 01:52:05,180 I neka je vidjeti ako to zapravo sada radi. 2255 01:52:05,180 --> 01:52:09,380 Sada ću otići naprijed i napravi povrat. 2256 01:52:09,380 --> 01:52:11,460 >> Uh, implicitno deklaracija funkcije. 2257 01:52:11,460 --> 01:52:14,080 JA je napravio ovu grešku i prije, nije velika stvar. 2258 01:52:14,080 --> 01:52:18,950 Pusti me samo upisati ili istaknuti i kopirati, točno isti funkciju prototipa, 2259 01:52:18,950 --> 01:52:21,342 ili potpis, funkcije se ovdje. 2260 01:52:21,342 --> 01:52:22,800 Ili bih mogao kontrolirati cijelu funkciju. 2261 01:52:22,800 --> 01:52:23,841 >> No, to je malo lijen. 2262 01:52:23,841 --> 01:52:24,870 Dakle, nećemo to učiniti. 2263 01:52:24,870 --> 01:52:27,960 Sada, neka mi povratak opet, dot povratak kose crte. 2264 01:52:27,960 --> 01:52:32,790 >> x je 2. x na kvadrat 4. x je 3. x na kvadrat je 9. 2265 01:52:32,790 --> 01:52:35,300 A funkcija čini Sada se radi. 2266 01:52:35,300 --> 01:52:36,550 Dakle, u čemu je razlika ovdje? 2267 01:52:36,550 --> 01:52:42,520 Imam funkciju koja se zove trg, u ovom slučaju, koji sam stavio na ulaz. 2268 01:52:42,520 --> 01:52:43,830 I ja sam se vratiti izlaz. 2269 01:52:43,830 --> 01:52:46,210 Pa ipak, prije, ako Otvaram drugi primjer 2270 01:52:46,210 --> 01:52:51,640 od ranije, što zvao prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Imao sam naziv ispisa, koji se vratio praznina, da tako kažemo, 2272 01:52:54,770 --> 01:52:58,730 Ili se vratio ništa i naprosto nuspojava. 2273 01:52:58,730 --> 01:53:00,230 >> Dakle, ono što se ovdje događa? 2274 01:53:00,230 --> 01:53:03,520 Pa, razmislite funkciju dobili niz samo na trenutak. 2275 01:53:03,520 --> 01:53:06,570 Mi smo koristili funkciju dobili niz na sljedeći način. 2276 01:53:06,570 --> 01:53:10,464 >> Mi smo imali funkciju dobiti niz, kao što su CS50.h, 2277 01:53:10,464 --> 01:53:16,624 uključuju standardni IO.h, int, glavni, prazninu. 2278 01:53:16,624 --> 01:53:18,790 I onda svaki put sam zove get niz do sada, 2279 01:53:18,790 --> 01:53:23,260 Ja sam rekao nešto slično, niz s dobiva dobili niz, jer get string-- 2280 01:53:23,260 --> 01:53:27,880 nazovimo to get.c-- get string Sama vraća string koji mogu onda 2281 01:53:27,880 --> 01:53:32,050 koristiti i reći zdravo, zarez, posto s, kosih crta n, a. 2282 01:53:32,050 --> 01:53:35,660 >> Dakle, ovo je isti primjer, Stvarno, da smo imali ranije. 2283 01:53:35,660 --> 01:53:37,920 Na taj način dobili niz vraća vrijednost. 2284 01:53:37,920 --> 01:53:41,260 No, prije nekoliko trenutaka, print string ne vratiti vrijednost. 2285 01:53:41,260 --> 01:53:42,721 To jednostavno ima nuspojava. 2286 01:53:42,721 --> 01:53:44,220 Dakle, to je temeljna razlika. 2287 01:53:44,220 --> 01:53:46,710 Vidjeli smo drugačiji vrste funkcija sada, 2288 01:53:46,710 --> 01:53:49,490 od kojih su se vratili vrijednosti, od kojih ne. 2289 01:53:49,490 --> 01:53:51,890 Dakle, možda je string, ili int ili float. 2290 01:53:51,890 --> 01:53:53,480 Ili možda je to samo praznina. 2291 01:53:53,480 --> 01:53:55,710 >> A razlika je da ove funkcije koje 2292 01:53:55,710 --> 01:53:59,940 dobiti podatke i vratiti vrijednost zapravo donosi nešto natrag do stola, 2293 01:53:59,940 --> 01:54:01,110 da se tako izrazim. 2294 01:54:01,110 --> 01:54:03,710 Dakle idemo naprijed i pogledajte jedan završni set 2295 01:54:03,710 --> 01:54:09,129 primjera koji daje osjećaj, sad, od kako smo mogli, doista, sažetak bolje, 2296 01:54:09,129 --> 01:54:11,670 i bolje, i bolje, ili više, i više, i više, kako bi 2297 01:54:11,670 --> 01:54:13,810 za pisanje, u konačnici, bolje koda. 2298 01:54:13,810 --> 01:54:16,860 Idemo naprijed, te u duhu od nule, učinite sljedeće. 2299 01:54:16,860 --> 01:54:21,700 >> Pusti me naprijed i uključuju CS50.h i standard IO.h. 2300 01:54:21,700 --> 01:54:24,010 Pusti me naprijed i dati ja int, glavni, nevažeće. 2301 01:54:24,010 --> 01:54:27,380 I neka mi samo naprijed, to nazivamo cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> I neka mi ići naprijed i samo kao što su grebanje, ispisati kašalj / N. 2303 01:54:35,510 --> 01:54:37,170 I želim to učiniti tri puta. 2304 01:54:37,170 --> 01:54:39,670 Tako sam, naravno, samo ide kopirati i zalijepiti tri puta. 2305 01:54:39,670 --> 01:54:46,440 Ja sam sada ide kako bi kašalj dot kose crte kašalj. 2306 01:54:46,440 --> 01:54:50,120 Idemo si dati malo više prostora Ovdje, Enter, kašalj, kašalj, kašalj. 2307 01:54:50,120 --> 01:54:53,970 >> Tu je, očito, već prilika za poboljšanje. 2308 01:54:53,970 --> 01:54:55,679 Ja sam kopirati i zalijepiti nekoliko puta danas. 2309 01:54:55,679 --> 01:54:58,261 Ali to je bilo samo zato da nisam morate upisati što više znakova. 2310 01:54:58,261 --> 01:55:00,250 I dalje mijenjati ono ta linija koda su. 2311 01:55:00,250 --> 01:55:04,240 >> Ove tri linije su identične, koji osjeća lijen i doista jest, 2312 01:55:04,240 --> 01:55:07,110 i vjerojatno nije pravi pristup. 2313 01:55:07,110 --> 01:55:11,029 Dakle, s tim što sastojak možemo poboljšati ovaj kod? 2314 01:55:11,029 --> 01:55:12,570 Nemamo kopirati i zalijepiti kod. 2315 01:55:12,570 --> 01:55:15,070 >> I doista, u bilo koje vrijeme ako se osjećate sami kopiranja i lijepljenja, 2316 01:55:15,070 --> 01:55:17,700 i ni mijenjanja koda, izgledi su da postoji bolji način. 2317 01:55:17,700 --> 01:55:19,470 I, doista, ne postoji. 2318 01:55:19,470 --> 01:55:22,510 Dopustite mi ići naprijed i učiniti for petlje, iako sintaksa ne bi mogli 2319 01:55:22,510 --> 01:55:24,570 doći prirodno još. 2320 01:55:24,570 --> 01:55:29,494 >> Učinite to tri puta, jednostavno tako što je following-- 2321 01:55:29,494 --> 01:55:31,160 i ja slučajno znam iz prakse. 2322 01:55:31,160 --> 01:55:32,810 No, imamo niz primjera sada. 2323 01:55:32,810 --> 01:55:34,950 I vidjet ćete na internetu više referenci na mjestu. 2324 01:55:34,950 --> 01:55:37,790 >> To je sintaksa na liniji 6, koji baš kao Scratch koji se ponavlja 2325 01:55:37,790 --> 01:55:40,090 blok, ponoviti sljedeće tri puta. 2326 01:55:40,090 --> 01:55:41,340 To je malo čarobno za sada. 2327 01:55:41,340 --> 01:55:43,050 Ali to će dobiti više, i više upoznati. 2328 01:55:43,050 --> 01:55:45,050 >> I to će se ponoviti linija osam tri puta, 2329 01:55:45,050 --> 01:55:52,390 tako da ako sam ponovno sastaviti make kašalj, dot smanjiti kašalj, kašalj, kašalj, kašalj. 2330 01:55:52,390 --> 01:55:54,030 Ona još uvijek radi na isti način. 2331 01:55:54,030 --> 01:55:55,550 Tako da je sve u redu i dobro. 2332 01:55:55,550 --> 01:55:58,200 Ali to nije jako rastresen. 2333 01:55:58,200 --> 01:55:59,371 >> To je savršeno točno. 2334 01:55:59,371 --> 01:56:01,370 No, ona se osjeća kao da mogla biti prilika, 2335 01:56:01,370 --> 01:56:03,750 kako u svijetu Scratch, na kakve početak 2336 01:56:03,750 --> 01:56:07,530 dodati neke semantiku ovdje, tako da Ne samo da su neki za petlju, 2337 01:56:07,530 --> 01:56:09,867 i funkcija koja govori kašalj ili ne kašlje. 2338 01:56:09,867 --> 01:56:10,450 Znaš što? 2339 01:56:10,450 --> 01:56:12,620 Pokušat ću biti Malo hladnije od toga, 2340 01:56:12,620 --> 01:56:16,090 i zapravo napisati funkciju koja ima neke nuspojave, zovu ga kašalj. 2341 01:56:16,090 --> 01:56:20,830 >> I to traje ni ulaz, a vraća nikakvu vrijednost kao izlaz. 2342 01:56:20,830 --> 01:56:22,680 Ali znate što to radi? 2343 01:56:22,680 --> 01:56:29,370 To ne učinimo, printf, citat citat, kašalj. 2344 01:56:29,370 --> 01:56:32,380 >> I sada ovdje, idem ići naprijed i za int, 2345 01:56:32,380 --> 01:56:36,070 ja dobiva nulu, i manje od 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Idem ne radi printf, što je nedvojbeno implementacija niska razina 2347 01:56:39,770 --> 01:56:40,270 detalj. 2348 01:56:40,270 --> 01:56:41,353 Ne zanima me kako kašalj. 2349 01:56:41,353 --> 01:56:43,240 Samo želim koristiti funkciju kašalj. 2350 01:56:43,240 --> 01:56:44,840 A ja sam samo nazvati kašalj. 2351 01:56:44,840 --> 01:56:46,204 >> Sada, primijetit dihotomiju. 2352 01:56:46,204 --> 01:56:49,370 Kada pozovete funkciju, ako ne žele dati to ulazi, potpuno u redu. 2353 01:56:49,370 --> 01:56:51,780 Dovoljno je učiniti Otvorena zagrada, u neposrednoj blizini zagrada, i gotovi ste. 2354 01:56:51,780 --> 01:56:56,271 >> Kada definirate funkciju, ili proglasiti funkciju je prototip, 2355 01:56:56,271 --> 01:56:58,770 Ako unaprijed znate da to nije će poduzeti bilo kakve argumente, 2356 01:56:58,770 --> 01:57:01,170 kažu praznina u tim zagradama tamo. 2357 01:57:01,170 --> 01:57:05,660 I to čini sigurni da vas neće slučajno ga krivo. 2358 01:57:05,660 --> 01:57:07,020 Dopustite mi ići naprijed i učiniti kašalj. 2359 01:57:07,020 --> 01:57:08,540 I, naravno, ja sam pogriješio. 2360 01:57:08,540 --> 01:57:10,410 >> Kvragu, tu je da implicitna izjava. 2361 01:57:10,410 --> 01:57:11,325 No, to je u redu. 2362 01:57:11,325 --> 01:57:12,590 To je lako popraviti. 2363 01:57:12,590 --> 01:57:18,240 Samo moram prototip viši u mojoj datoteci nego što sam zapravo ja ga koristi. 2364 01:57:18,240 --> 01:57:20,070 >> Pa sad neka mi kašalj opet lijepo. 2365 01:57:20,070 --> 01:57:20,790 Sada se to radi. 2366 01:57:20,790 --> 01:57:22,930 Provjerite kašalj, kašalj, kašalj, kašalj. 2367 01:57:22,930 --> 01:57:25,930 Dakle, možda mislite da smo stvarno nešto više od inženjerstvo ovaj problem. 2368 01:57:25,930 --> 01:57:26,763 I doista, mi smo. 2369 01:57:26,763 --> 01:57:28,870 Ovo nije dobro Kandidat programa 2370 01:57:28,870 --> 01:57:31,930 u ovom trenutku za refactoring, i radi ono što je 2371 01:57:31,930 --> 01:57:35,645 zove hijerarhijska dekompozicija, gdje vam se neka kod, a zatim 2372 01:57:35,645 --> 01:57:38,790 Vi vrsta faktor stvari, tako što pripisati više semantika s njima, 2373 01:57:38,790 --> 01:57:40,930 i ponovno ga u konačnici dugoročno. 2374 01:57:40,930 --> 01:57:43,490 No, to je blok zgrada prema više sofisticirane programe 2375 01:57:43,490 --> 01:57:45,600 da ćemo početi pisanje prije dugo da 2376 01:57:45,600 --> 01:57:50,090 omogućuje nam da imaju vokabular kojom napisati bolje koda. 2377 01:57:50,090 --> 01:57:52,920 I, doista, neka je vidjeti ako mi Ne mogu generalizirati ovo dalje. 2378 01:57:52,920 --> 01:57:57,984 >> Čini se malo hromu da sam, uglavnom, morate brinuti o ovom darn for petlje, 2379 01:57:57,984 --> 01:57:59,400 i opet i opet zove kašalj. 2380 01:57:59,400 --> 01:58:03,050 Zašto ne mogu samo reći kašalj, molim kašalj tri puta? 2381 01:58:03,050 --> 01:58:08,170 Drugim riječima, zašto ne mogu jednostavno dati doprinos na kašalj, a to je činiti? 2382 01:58:08,170 --> 01:58:11,270 >> Zašto ne mogu samo reći, u Glavni kašalj tri puta. 2383 01:58:11,270 --> 01:58:13,150 A sada, to je vrsta čaroban. 2384 01:58:13,150 --> 01:58:14,540 Vrlo je iterativan ovdje. 2385 01:58:14,540 --> 01:58:15,940 I to je, doista, beba korak. 2386 01:58:15,940 --> 01:58:19,250 >> Ali samo sposobnost za reći o linija osam, kašalj tri puta, 2387 01:58:19,250 --> 01:58:20,730 to je samo tako mnogo više čitati. 2388 01:58:20,730 --> 01:58:24,210 I, plus, ne moram znati ili briga kako kašalj se provodi. 2389 01:58:24,210 --> 01:58:26,460 I doista, kasnije u pojam i za konačne projekte, 2390 01:58:26,460 --> 01:58:29,150 ako se borila projekt s kolega ili dva kolege, 2391 01:58:29,150 --> 01:58:32,370 shvatit ćete da idete moraju ili žele podijeliti posao. 2392 01:58:32,370 --> 01:58:34,650 >> A ti si idući u ištanje to odlučiti unaprijed, tko će učiniti što, 2393 01:58:34,650 --> 01:58:35,483 iu kojoj komada? 2394 01:58:35,483 --> 01:58:37,520 I to ne bi bilo lijepo Ako, na primjer, 2395 01:58:37,520 --> 01:58:40,100 uzeti zadužen za pisanje Main, ispunjavanja. 2396 01:58:40,100 --> 01:58:43,470 I vaš cimer, ili vaš partner općenitije, 2397 01:58:43,470 --> 01:58:45,230 brine o provedbi kašalj. 2398 01:58:45,230 --> 01:58:49,540 >> I ova podjela, te Zidovi apstrakcije, 2399 01:58:49,540 --> 01:58:52,310 ili slojeva apstrakcije ako ćete, su super moćni, 2400 01:58:52,310 --> 01:58:55,480 jer posebno za veće, složenijih programa i sustava, 2401 01:58:55,480 --> 01:59:00,070 to vam se više ljudi za izgradnju stvari zajedno, i na kraju 2402 01:59:00,070 --> 01:59:02,680 bod svoj rad zajedno na ovaj način. 2403 01:59:02,680 --> 01:59:05,332 Ali, naravno, mi potrebno je odmah popraviti kašalj. 2404 01:59:05,332 --> 01:59:07,290 Moramo reći kašalj da, hej, znaš što? 2405 01:59:07,290 --> 01:59:11,230 Ti si idući u morati uzeti input-- pa nije praznina, nego int i sada. 2406 01:59:11,230 --> 01:59:15,170 Idemo naprijed i staviti u kašalj int. ja dobiva nula. 2407 01:59:15,170 --> 01:59:16,890 >> je i manje od koliko puta. 2408 01:59:16,890 --> 01:59:18,550 rekao sam tri prije. 2409 01:59:18,550 --> 01:59:20,420 Ali to nije ono što želim. 2410 01:59:20,420 --> 01:59:25,520 Želim da kašlje da se generalizirati na podržavaju bilo koji broj ponavljanja. 2411 01:59:25,520 --> 01:59:28,800 >> Pa, zapravo, to je n da želim, što god se korisnik mi govori. 2412 01:59:28,800 --> 01:59:31,620 Sada, mogu ići naprijed i reći ispisa kašalj. 2413 01:59:31,620 --> 01:59:34,750 I bez obzira što je broj korisnik prolazi, 2414 01:59:34,750 --> 01:59:36,890 Ja ću ponoviti da je mnogo puta. 2415 01:59:36,890 --> 01:59:39,160 >> Tako da je na kraju krajeva, Program je identičan. 2416 01:59:39,160 --> 01:59:42,820 Ali primijetiti sve ove stvari čak mogao biti u nekoj drugoj datoteci. 2417 01:59:42,820 --> 01:59:45,620 Zapravo, ne znam Na trenutak kako printf provodi. 2418 01:59:45,620 --> 01:59:47,980 >> Ne znam u ovom trenutku kako doći string, ili se int, ili se plovak 2419 01:59:47,980 --> 01:59:48,646 provode. 2420 01:59:48,646 --> 01:59:50,930 A ja ne želim vidjeti ih na mom ekranu. 2421 01:59:50,930 --> 01:59:55,320 Kao što je, ja sam počinju da se usredotočite na moj program, a ne te funkcije. 2422 01:59:55,320 --> 01:59:59,070 >> I tako, doista, čim početi faktoring kod kao što je ovo, 2423 01:59:59,070 --> 02:00:01,397 bismo mogli ni pomaknuti kašalj u zasebnu datoteku? 2424 02:00:01,397 --> 02:00:02,730 Netko drugi bi mogao provesti. 2425 02:00:02,730 --> 02:00:06,810 I vi i vaš program postati vrlo lijepa i vrlo čitljiv, 2426 02:00:06,810 --> 02:00:10,830 vjerojatno, zapravo četiri Program crta upravo tamo. 2427 02:00:10,830 --> 02:00:13,510 >> Dakle idemo naprijed sada i napraviti još jednu promjenu. 2428 02:00:13,510 --> 02:00:16,180 Uočite da je moj prototip mora promijeniti do vrha. 2429 02:00:16,180 --> 02:00:18,390 Pa neka mi riješili to tako Ja ne bi vikao na. 2430 02:00:18,390 --> 02:00:22,580 >> Provjerite kašalj, neka mi pokrenuti kašalj jednom više, još uvijek radi istu stvar. 2431 02:00:22,580 --> 02:00:26,010 Ali sada, primijetit ćemo imati sastojak za jednu konačnu verziju. 2432 02:00:26,010 --> 02:00:26,940 Znaš što? 2433 02:00:26,940 --> 02:00:29,040 Ne želim da se samo kašalj, nužno. 2434 02:00:29,040 --> 02:00:30,802 Želim imati nešto općenitije. 2435 02:00:30,802 --> 02:00:31,510 Dakle, znate što? 2436 02:00:31,510 --> 02:00:32,450 Želim to učiniti. 2437 02:00:32,450 --> 02:00:37,140 Želim imati, baš kao i ispočetka ne, pravo glasa blok, ali ne samo 2438 02:00:37,140 --> 02:00:38,680 reći nešto malo više puta. 2439 02:00:38,680 --> 02:00:41,510 Želim reći vrlo specifičan niz. 2440 02:00:41,510 --> 02:00:43,850 I, dakle, ne znam želite da se samo reći kašalj. 2441 02:00:43,850 --> 02:00:47,660 Želim reći što god Niz je prošao u. 2442 02:00:47,660 --> 02:00:49,960 >> Dakle primjetiti, ja sam generalizirati to tako da je sada 2443 02:00:49,960 --> 02:00:53,110 recimo osjeća kao dobro ime za to, kao što su grebanje, 2444 02:00:53,110 --> 02:00:55,530 traje dva argumenta, za razliku od nule. 2445 02:00:55,530 --> 02:00:56,570 Jedan od njih je niz. 2446 02:00:56,570 --> 02:00:57,300 Jedan od njih je int. 2447 02:00:57,300 --> 02:00:58,130 >> I da ih mogu prebaciti. 2448 02:00:58,130 --> 02:01:00,713 Samo sam vrsta kao ideju kažu string, a zatim 2449 02:01:00,713 --> 02:01:01,940 koliko puta kasnije. 2450 02:01:01,940 --> 02:01:03,970 Void je znači još ne vraća se ništa. 2451 02:01:03,970 --> 02:01:06,428 To su samo vizualna strana učinci, kao što je s [? Jordan?] 2452 02:01:06,428 --> 02:01:08,240 verbalno nuspojava deranja. 2453 02:01:08,240 --> 02:01:12,630 Još uvijek se nešto n puta, 0 do, ali ne i jednako br. 2454 02:01:12,630 --> 02:01:14,540 To znači da ukupna n puta. 2455 02:01:14,540 --> 02:01:16,540 I onda samo isprintati što god da je struna. 2456 02:01:16,540 --> 02:01:19,060 Tako sam zapravo generalizirati ova linija koda. 2457 02:01:19,060 --> 02:01:22,460 Tako sada, kako mogu implementirati funkcija kašalj? 2458 02:01:22,460 --> 02:01:25,520 >> Ja mogu učiniti void kašalj. 2459 02:01:25,520 --> 02:01:28,501 A ja još uvijek mogu uzeti u tome mnogo puta želite kašalj. 2460 02:01:28,501 --> 02:01:29,250 Ali znate što? 2461 02:01:29,250 --> 02:01:31,240 Ja sada mogu čamac za reći. 2462 02:01:31,240 --> 02:01:36,540 >> Mogu nazvati reći s Riječ kašalj, prolaze u n. 2463 02:01:36,540 --> 02:01:40,410 A ako želim provesti i, samo za zabavu, A kihanje funkcija, 2464 02:01:40,410 --> 02:01:42,290 Mogu kihanje neki broj puta. 2465 02:01:42,290 --> 02:01:47,300 I ja mogu držati ponovnog n, jer primijetiti da m u ovom kontekstu ili opseg 2466 02:01:47,300 --> 02:01:49,470 postoji samo unutar ove funkcije. 2467 02:01:49,470 --> 02:01:52,767 >> I n u ovom kontekstu samo postoji unutar ove funkcije ovdje. 2468 02:01:52,767 --> 02:01:54,600 Dakle, mi ćemo se vratiti ta pitanja opsega. 2469 02:01:54,600 --> 02:02:01,160 I ovdje, ja sam samo htio reći, achoo, a zatim n puta, točka-zarez. 2470 02:02:01,160 --> 02:02:04,340 >> A sada, ja samo trebate posuditi one u službi potpisa ovdje. 2471 02:02:04,340 --> 02:02:06,290 Dakle, kašalj je ispravan. 2472 02:02:06,290 --> 02:02:10,090 Praznina kihanje je sada točno. 2473 02:02:10,090 --> 02:02:12,390 >> I još uvijek samo trebate reći. 2474 02:02:12,390 --> 02:02:18,990 Zato ću reći, recimo string s, int n, točka-zarez. 2475 02:02:18,990 --> 02:02:22,010 Tako sam pretjerano projektirana pakao iz ovog programa. 2476 02:02:22,010 --> 02:02:23,760 >> I to ne znači to je 2477 02:02:23,760 --> 02:02:26,343 ono što bi trebalo učiniti prilikom pisanja čak i najjednostavniji programa. 2478 02:02:26,343 --> 02:02:29,280 Uzmi nešto što je očito stvarno jednostavan, jako kratko, 2479 02:02:29,280 --> 02:02:31,800 i ponovno provesti ga koristeći način previše koda. 2480 02:02:31,800 --> 02:02:34,560 No, što zapravo ćete vidjeti, a Vrijeme osvrnuti na ovim primjerima, 2481 02:02:34,560 --> 02:02:38,610 i shvatiti, oh, to su koraci uzeli smo zapravo generalizirati, 2482 02:02:38,610 --> 02:02:40,797 da faktor nešto, sve dok se na kraju dan 2483 02:02:40,797 --> 02:02:42,380 moj broj je zapravo prilično razumno. 2484 02:02:42,380 --> 02:02:45,960 Jer ako želim kašalj tri puta onda kihanje tri puta, 2485 02:02:45,960 --> 02:02:50,420 Ja sam jednostavno ide na ponoviti to, Program čine kašalj, i pokrenuti kašalj. 2486 02:02:50,420 --> 02:02:53,620 A ja imam tri kašalj i tri kiše. 2487 02:02:53,620 --> 02:02:55,990 >> I tako to je osnovni paradigma, ako će, 2488 02:02:55,990 --> 02:03:00,110 za kako bismo mogli ići o zapravo provodi program. 2489 02:03:00,110 --> 02:03:03,220 Ali neka je samo vidjeti sad što je to smo radili sve ovo vrijeme, 2490 02:03:03,220 --> 02:03:06,940 i što neki od završnih komada Iza ovog jednostavnog naredbe. 2491 02:03:06,940 --> 02:03:09,620 Na kraju krajeva, mi smo Koristim zveket kao naš prevodilac. 2492 02:03:09,620 --> 02:03:11,494 Mi smo pisali izvor kod, pretvoriti ga 2493 02:03:11,494 --> 02:03:12,820 putem jeka u strojni kod. 2494 02:03:12,820 --> 02:03:15,540 >> I mi smo koristili napraviti samo kako bi se olakšalo naše tipke tako 2495 02:03:15,540 --> 02:03:20,740 da ne moramo zapamtiti ti vračanja sama jeka. 2496 02:03:20,740 --> 02:03:22,640 No, ono što je napraviti zapravo radi? 2497 02:03:22,640 --> 02:03:24,750 I, s druge strane, što je Jeka zapravo radi? 2498 02:03:24,750 --> 02:03:28,790 >> Ispada, iako smo pojednostavljeno današnja rasprava govoreći: 2499 02:03:28,790 --> 02:03:33,090 što se izvorni kod, prođe ga kao ulaz za prevodilac, koji vam daje 2500 02:03:33,090 --> 02:03:35,750 izlaz stroja kod, ispada da postoji 2501 02:03:35,750 --> 02:03:37,420 nekoliko različitih koraka tamo. 2502 02:03:37,420 --> 02:03:41,940 I sastavljanje se događa da se krovna izraz za cijela hrpa koraka. 2503 02:03:41,940 --> 02:03:43,970 Ali neka je samo zafrkavati ovo jako brzo. 2504 02:03:43,970 --> 02:03:48,070 >> Ispada da smo radili više stvari svaki put kad sam pokrenuti program, 2505 02:03:48,070 --> 02:03:50,990 ili svaki put kad sam sastaviti program danas. 2506 02:03:50,990 --> 02:03:55,020 Dakle, predobrada se odnosi na učinimo ništa u C programu, 2507 02:03:55,020 --> 02:03:58,720 kao što ćemo vidjeti opet i opet, koji počinje s ovim hash simbolom, 2508 02:03:58,720 --> 02:04:03,320 ili hashtag simbol ovdje, znači to je Preprocessoru direktiva. 2509 02:04:03,320 --> 02:04:07,330 To znači, u tom slučaju, ej računalo, učiniti nešto s tom datotekom 2510 02:04:07,330 --> 02:04:09,430 prije nego što zapravo sastaviti svoj vlastiti kod. 2511 02:04:09,430 --> 02:04:15,220 >> U ovom slučaju, hash uključuju jest u biti, C način da se kaže, 2512 02:04:15,220 --> 02:04:19,325 hej računalo, ići dobiti sadržaj od CS50.h i zalijepite ih ovdje. 2513 02:04:19,325 --> 02:04:22,170 Hej računalo, ići dobiti Sadržaj standardnog IO.h, 2514 02:04:22,170 --> 02:04:24,690 gdje god da se nalazi na hard disk, zalijepite ga ovdje. 2515 02:04:24,690 --> 02:04:27,390 Dakle, te stvari dogoditi Prvi tijekom predobradi. 2516 02:04:27,390 --> 02:04:28,880 >> I zveket se sve to za nas. 2517 02:04:28,880 --> 02:04:30,510 I to ga čini tako prokleto brzo, ti uopće ne 2518 02:04:30,510 --> 02:04:32,000 vidi četiri različita stvari događa. 2519 02:04:32,000 --> 02:04:34,100 Ali to je prvi takav korak. 2520 02:04:34,100 --> 02:04:35,560 >> Što se zapravo događa sljedeće? 2521 02:04:35,560 --> 02:04:38,320 Pa, sljedeći službeni korak je sastavljanje. 2522 02:04:38,320 --> 02:04:40,385 I ispada da sastavljanju programa 2523 02:04:40,385 --> 02:04:44,060 tehnički znači da ide od izvorni kod, ono mi smo 2524 02:04:44,060 --> 02:04:47,890 piše danas, u nešto zove montaže kod, nešto 2525 02:04:47,890 --> 02:04:49,260 da izgleda malo drugačije. 2526 02:04:49,260 --> 02:04:51,050 >> A, u stvari, možemo vidjeti vrlo brzo. 2527 02:04:51,050 --> 02:04:53,890 Dopustite mi zapravo ide u moj IDE. 2528 02:04:53,890 --> 02:04:58,050 Pusti me naprijed i otvoren hello.c, što je prvi program s kojim smo 2529 02:04:58,050 --> 02:04:59,120 počela je danas. 2530 02:04:59,120 --> 02:05:04,130 I neka mi ići naprijed i pokrenuti zveket A malo drugačije, zveket-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 što se zapravo događa na daj mi neku drugu datoteku hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> A mi ćemo vjerojatno nikada opet vidjeti ovu vrstu koda. 2533 02:05:10,330 --> 02:05:13,030 Ako uzmete nižu razinu Sustavi klase poput CS61, 2534 02:05:13,030 --> 02:05:14,920 vidjet ćete puno više ove vrste koda. 2535 02:05:14,920 --> 02:05:17,020 No, to je zbirni jezik. 2536 02:05:17,020 --> 02:05:22,050 To je X86 zbirni jezik da CPU koji je u podlozi 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE zapravo ne razumije. 2538 02:05:24,460 --> 02:05:27,060 >> I grobni kao što to radi gledaj, to je nešto 2539 02:05:27,060 --> 02:05:29,180 računalo razumije prilično dobro. 2540 02:05:29,180 --> 02:05:30,790 Pod q, ovo je oduzimati. 2541 02:05:30,790 --> 02:05:31,660 Postoji pokreta. 2542 02:05:31,660 --> 02:05:35,730 >> Postoji zove funkcija ovdje x oring, pokret, dodatak, pop, 2543 02:05:35,730 --> 02:05:36,430 povratak. 2544 02:05:36,430 --> 02:05:38,850 Dakle, postoji neki vrlo Upute za niske razine 2545 02:05:38,850 --> 02:05:41,280 da CPU razumjeti da aludirao sam ranije. 2546 02:05:41,280 --> 02:05:43,100 To je ono što Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Postoje obrasci nula i jedinica koje 2548 02:05:45,030 --> 02:05:51,800 preslikati na njih arcanely sročeni, ali nešto dobro imenovan, upute, 2549 02:05:51,800 --> 02:05:52,780 da se tako izrazim. 2550 02:05:52,780 --> 02:05:54,780 To je ono što se događa kada sastaviti svoj kôd. 2551 02:05:54,780 --> 02:05:58,560 Možete dobiti montaža jezik iz nje, što 2552 02:05:58,560 --> 02:06:04,680 znači treći korak je okupiti da se kod montaže kod u konačnici, 2553 02:06:04,680 --> 02:06:09,080 stroj code-- nula i jedinica, a ne tekst koji smo upravo vidjeli maloprije. 2554 02:06:09,080 --> 02:06:13,370 >> Dakle, predobrada to naći i zamijeniti, i nekoliko drugih stvari. 2555 02:06:13,370 --> 02:06:16,430 Sastavljanju uzima svoj izvor broj od C, izvorni kod 2556 02:06:16,430 --> 02:06:18,980 koje smo pisali, do montaže kod koje smo upravo je pogledao. 2557 02:06:18,980 --> 02:06:22,170 Montaža traje taj sklop kod za nula i jedinica 2558 02:06:22,170 --> 02:06:24,680 da CPU stvarno hoće razumjeti na kraju dana. 2559 02:06:24,680 --> 02:06:27,630 A povezivanje je posljednji korak što se događa za us-- opet, 2560 02:06:27,630 --> 02:06:29,830 tako brzo da uopće ne notice-- da kaže, 2561 02:06:29,830 --> 02:06:32,460 hej računalo, uzmi sve nula i one koje 2562 02:06:32,460 --> 02:06:36,750 rezultat prikupljanja Davidovu kod, a njegova glavna funkcija je u ovom slučaju. 2563 02:06:36,750 --> 02:06:39,160 >> I hej računalo, ići dobiti sve nula i jedinica 2564 02:06:39,160 --> 02:06:42,180 da je osoblje CS50 napisao unutar CS50 knjižnici. 2565 02:06:42,180 --> 02:06:43,440 Pomiješajte one se u Davida. 2566 02:06:43,440 --> 02:06:46,648 I hej računalo, ići dobiti sve nule i one koje je netko drugi pisao godina 2567 02:06:46,648 --> 02:06:47,470 Prije za printf. 2568 02:06:47,470 --> 02:06:49,880 I dodati one Into the Cijela stvar, tako da imamo 2569 02:06:49,880 --> 02:06:52,870 dobio moj nula i jedinica, The CS50 osoblja nula i jedinica, 2570 02:06:52,870 --> 02:06:55,370 u printf nula i jedinica, i sve ostalo što koristite. 2571 02:06:55,370 --> 02:07:00,410 >> Svi su se u kombinaciji zajedno u jedan Program se zove, u ovom slučaju, zdravo. 2572 02:07:00,410 --> 02:07:03,141 Dakle, od sada, mi ćemo jednostavno koristiti sastavljanje riječi. 2573 02:07:03,141 --> 02:07:06,390 A mi ćemo uzeti zdravo za gotovo da kada kažemo, sastaviti svoj program, to znači, 2574 02:07:06,390 --> 02:07:08,849 hej obaviti pred-obradu, montažu i povezivanje. 2575 02:07:08,849 --> 02:07:11,890 No, tu je zapravo neki sočan stvari tamo događa ispod haube. 2576 02:07:11,890 --> 02:07:13,723 A pogotovo ako dobiti znatiželjan neko vrijeme, 2577 02:07:13,723 --> 02:07:15,900 možete početi poking oko sebe na ovoj nižoj razini. 2578 02:07:15,900 --> 02:07:19,660 No, za sada, neće shvatiti među takeaways za danas 2579 02:07:19,660 --> 02:07:23,420 sasvim jednostavno početak procesa, 2580 02:07:23,420 --> 02:07:26,700 uzimajući sviđa nešto kao zdravo svijetu. 2581 02:07:26,700 --> 02:07:29,575 Doista, većina onoga što smo učinili danas sigurno neće potonuti u super brzo. 2582 02:07:29,575 --> 02:07:31,491 I to će potrajati neko put, a neki praksa. 2583 02:07:31,491 --> 02:07:33,864 A izgledi su, od vas će sortirati od žele pogoditi tipkovnicu 2584 02:07:33,864 --> 02:07:34,780 ili vikati na ekranu. 2585 02:07:34,780 --> 02:07:35,880 I sve to je u redu. 2586 02:07:35,880 --> 02:07:38,320 Iako, možda i pokušajte da ne to učiniti u knjižnici toliko. 2587 02:07:38,320 --> 02:07:40,820 >> I na kraju, vi ćete biti u mogućnosti da, za početak 2588 02:07:40,820 --> 02:07:44,580 gledajući uzorke, kako u dobrim koda koje ste napisali i grešaka 2589 02:07:44,580 --> 02:07:45,370 da ste napravili. 2590 02:07:45,370 --> 02:07:48,965 I baš kao proces postaje TF ili CA je kao, 2591 02:07:48,965 --> 02:07:51,590 vi ćete početi da se bolje i bolje vide te obrasce, 2592 02:07:51,590 --> 02:07:53,774 i samo rješavanje vašeg vlastiti problemi u konačnici. 2593 02:07:53,774 --> 02:07:56,940 U međuvremenu, tu će biti dosta nas posuditi vam podršku, i dobiti 2594 02:07:56,940 --> 02:07:57,481 kroz ovo. 2595 02:07:57,481 --> 02:07:59,450 A u članke za sve probleme 2596 02:07:59,450 --> 02:08:01,366 ćete biti vođeni kroz sve naredbe 2597 02:08:01,366 --> 02:08:05,330 da ja sigurno znam iz puno prakse do sada, 2598 02:08:05,330 --> 02:08:07,380 ali možda su letjeli nad glavom za sada. 2599 02:08:07,380 --> 02:08:08,580 I to je sasvim u redu. 2600 02:08:08,580 --> 02:08:11,230 >> No, u konačnici, idete početi pojavljivanje uzoraka. 2601 02:08:11,230 --> 02:08:14,260 I nakon što se posljednjih sve od glupe detalje, kao što su zagrade, 2602 02:08:14,260 --> 02:08:16,710 i vitičastim zagradama, a točkom sa zarezom, i stvari, iskreno, 2603 02:08:16,710 --> 02:08:19,360 to uopće nije intelektualno zanimljiv. 2604 02:08:19,360 --> 02:08:22,690 I to nije cilj uzimanje bilo uvodnom klase. 2605 02:08:22,690 --> 02:08:24,410 To su ideje koje će važno. 2606 02:08:24,410 --> 02:08:26,659 >> To je petlje i uvjeti i funkcije, 2607 02:08:26,659 --> 02:08:30,552 i snažnije apstrakcija, i faktoring koda, 2608 02:08:30,552 --> 02:08:33,510 i dobar dizajn, a dobro stil, i na kraju ispravnost 2609 02:08:33,510 --> 02:08:37,330 svog koda, to je u konačnici će najviše smeta. 2610 02:08:37,330 --> 02:08:40,925 Dakle, sljedeći tjedan ćemo uzeti ove ideje koje smo prvi put vidjeli u nule 2611 02:08:40,925 --> 02:08:42,800 a sada su prevedene do C. A mi ćemo početi 2612 02:08:42,800 --> 02:08:45,740 predstaviti prvi od Naravno u stvarnom svijetu domene. 2613 02:08:45,740 --> 02:08:50,140 >> Mi ćemo se usredotočiti na svijetu sigurnosti, točnije kriptografija, 2614 02:08:50,140 --> 02:08:51,980 umjetnost remećenje informacije. 2615 02:08:51,980 --> 02:08:54,000 A među prvima Problemi vi sami 2616 02:08:54,000 --> 02:08:56,840 dobit će pisati dalje igranje s nekim od sintakse 2617 02:08:56,840 --> 02:08:59,880 i rješavanju nekih logično problemi, u konačnici ne zadugo, 2618 02:08:59,880 --> 02:09:03,960 zapravo otimati, ili šifriranje, i na kraju dešifriranje podataka. 2619 02:09:03,960 --> 02:09:06,470 I sve što smo učinili Danas će prilično niska 2620 02:09:06,470 --> 02:09:09,190 razina, samo će omogućiti nam da se jedan, i jedan, 2621 02:09:09,190 --> 02:09:13,550 i još jedan korak naprijed ka pisanje najzanimljiviji kod gostiju. 2622 02:09:13,550 --> 02:09:15,050 >> Dakle, više na taj sljedeći tjedan. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEO PLAYBACK] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Što mi možete reći o zadnji put kad ga je vidjela? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 Što mogu reći, stvarno? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Mislim, to je kao i svaki drugi pre-proizvodnja proba 2631 02:09:35,340 --> 02:09:40,510 osim što je nešto rekao na samom kraju da zaglavi sa mnom. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Ovo Je CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -To Je cut svima, velik posao na probi. 2636 02:09:52,190 --> 02:09:53,070 >> -To Je ručak? 2637 02:09:53,070 --> 02:09:54,986 >> Da, ti i ja mogu zgrabite sendvič malo. 2638 02:09:54,986 --> 02:09:58,380 Pusti me samo ispitati s David jako brzo. 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 >> [END PLAYBACK]