1 00:00:00,000 --> 00:00:03,353 >> [MUSIC JOC] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Buna ziua, toată lumea. 4 00:00:06,050 --> 00:00:07,777 Acest lucru este supersecțiune CS50 lui. 5 00:00:07,777 --> 00:00:09,860 Secțiuni atribuite nu va începe pentru încă o săptămână. 6 00:00:09,860 --> 00:00:11,580 Și așa astăzi, eu sunt aici aplice: 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to de fapt aruncăm o privire la problema 9 00:00:14,163 --> 00:00:16,110 stabilit o, cursului Primele săptămâni de material, 10 00:00:16,110 --> 00:00:19,780 sa te orientat cu IDE CS50, un pic Linux, sistemul de operare care este 11 00:00:19,780 --> 00:00:22,290 rulează pe IDE, precum uita-te la o parte din tranziția 12 00:00:22,290 --> 00:00:25,730 la zero pentru a C de conducere până la problema seta o. 13 00:00:25,730 --> 00:00:28,340 >> Deci, fără alte formalități, în probleme stabilească un, 14 00:00:28,340 --> 00:00:30,520 ai de gând să fie prezentat CS50 IDE, care 15 00:00:30,520 --> 00:00:33,230 este acest programare web-based mediu pe care le folosim pentru 16 00:00:33,230 --> 00:00:34,280 pentru a scrie programe. 17 00:00:34,280 --> 00:00:37,280 A fost proiectat pentru a arata foarte amintește de un calculator tipic 18 00:00:37,280 --> 00:00:39,430 sistem de operare care rulează un sistem numit Linux. 19 00:00:39,430 --> 00:00:42,440 Dar e în așa-numitul nor, ceea ce înseamnă toți în clasa 20 00:00:42,440 --> 00:00:45,100 poate avea de fapt, lui sau a ei cont propriu și-l utilizați, de asemenea. 21 00:00:45,100 --> 00:00:48,950 >> Deci cele mai multe dintre voi, probabil, nu au folosit niciodată un mediu Linux, înainte de sau poate 22 00:00:48,950 --> 00:00:50,447 chiar un mediu de linie de comandă. 23 00:00:50,447 --> 00:00:52,280 Și o linie de comandă mediu este diferit. 24 00:00:52,280 --> 00:00:53,200 Totul este text. 25 00:00:53,200 --> 00:00:54,730 Este toate comenzile de la tastatură. 26 00:00:54,730 --> 00:00:59,480 Și nu e mouse-ului, nu icoane, ferestre de dialog, nu meniuri. 27 00:00:59,480 --> 00:01:00,212 E pur text. 28 00:01:00,212 --> 00:01:01,920 Deci, la început, a fel de se simte ca un pas 29 00:01:01,920 --> 00:01:04,434 înapoi în ceea ce privește sofisticare. 30 00:01:04,434 --> 00:01:06,600 Dar se termină prin a fi o mulțime mai puternic, cu siguranță, 31 00:01:06,600 --> 00:01:08,510 pentru un om de stiinta de calculator, în cele din urmă. 32 00:01:08,510 --> 00:01:09,540 >> Deci, haideți să aruncăm o privire. 33 00:01:09,540 --> 00:01:13,850 Iată-mă la CS50.io, prin care vă puteți conecta la IDE CS50. 34 00:01:13,850 --> 00:01:17,414 Și la fel ca în Scratch, nu e trei domenii principale în acest ecran. 35 00:01:17,414 --> 00:01:20,080 Deci pe partea stângă, avem ceea ce va fi browser-ul de fișiere. 36 00:01:20,080 --> 00:01:22,413 Și mai e la acest dosar top, care este acum gol 37 00:01:22,413 --> 00:01:24,690 când am scăpat de toate mele fișiere înainte supersecțiune. 38 00:01:24,690 --> 00:01:27,599 Și asta e în cazul în care ne vom salva fișiere C pe care le scrie. 39 00:01:27,599 --> 00:01:30,890 La partea din dreapta sus, avem un loc unde toate codul nostru va fi scrise. 40 00:01:30,890 --> 00:01:34,610 Și într-adevăr, dacă am faceți clic pe acest plus, acest este de gând să permiteți-mi să aleagă New File. 41 00:01:34,610 --> 00:01:38,310 Și aici eu pot începe să scrie cod C sau, într-adevăr, orice număr de alte limbi. 42 00:01:38,310 --> 00:01:42,670 >> Și apoi în partea de jos unde spune jharvard @ ide50-- și a ta va 43 00:01:42,670 --> 00:01:45,080 spune ceva un pic different-- ceea ce a fost numit acest lucru? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Fereastră terminal. 46 00:01:49,310 --> 00:01:49,570 Da. 47 00:01:49,570 --> 00:01:51,810 Deci fereastra terminalului este așa-numitul prag comandă 48 00:01:51,810 --> 00:01:55,540 interfață prin care puteți interacționa cu sistemul de operare de bază. 49 00:01:55,540 --> 00:01:58,220 Și de acum, vom face uz de foarte putin astea-- 50 00:01:58,220 --> 00:02:01,170 doar pentru a compila, să se uite la mesaje de eroare pe care le vedem, 51 00:02:01,170 --> 00:02:02,347 și pentru a rula programele noastre. 52 00:02:02,347 --> 00:02:04,680 Dar în cele din urmă, vom pentru a face mult mai mult, de asemenea. 53 00:02:04,680 --> 00:02:07,490 Și puteți instala software-ul chiar și de a administra spațiul de lucru 54 00:02:07,490 --> 00:02:09,066 în CS50 IDE, de asemenea. 55 00:02:09,066 --> 00:02:10,440 Dar mai multe despre asta altă dată. 56 00:02:10,440 --> 00:02:12,689 >> Așa că hai să mergem mai departe și scrie un program foarte simplu doar 57 00:02:12,689 --> 00:02:15,064 pentru a merge printr-un warm-up de hello.c, care este, probabil, 58 00:02:15,064 --> 00:02:16,480 cel mai simplu program de se poate scrie. 59 00:02:16,480 --> 00:02:18,330 Am deschis deja o filă nouă. 60 00:02:18,330 --> 00:02:24,310 Am de gând să merg mai departe și spune includ io.h. standard de 61 00:02:24,310 --> 00:02:25,325 Apoi int principal (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 Și apoi printf ("Bună ziua, lume" backslash n, citat de aproape, 64 00:02:35,200 --> 00:02:39,480 paranteze apropiate, și punct și virgulă. 65 00:02:39,480 --> 00:02:39,990 >> In regula. 66 00:02:39,990 --> 00:02:41,700 Deci, acum observa fereastra mea este un titlu. 67 00:02:41,700 --> 00:02:44,840 Așa că am de gând foarte repede pentru a merge până la fișier, Salvare. 68 00:02:44,840 --> 00:02:46,910 Și este important ca Eu numesc acest lucru nu "salut". 69 00:02:46,910 --> 00:02:49,243 Deci, o greșeală foarte frecvente, în special în problema stabilească un, 70 00:02:49,243 --> 00:02:52,530 este de a apela accidental doar dvs. Programul "apă" sau "lacom" sau "Mario" 71 00:02:52,530 --> 00:02:53,890 sau "credit" sau altele asemenea. 72 00:02:53,890 --> 00:02:55,970 Dar de fapt, doriți să faceți vă că aveți extensia de fișier 73 00:02:55,970 --> 00:02:58,928 deoarece aceasta este singura cale prin care compilatorul și, de asemenea, editorul de cod 74 00:02:58,928 --> 00:03:00,710 știe că ești scris de fapt de cod C. 75 00:03:00,710 --> 00:03:02,280 Așa că lasă-mă să merg mai departe și faceți clic pe Salvare. 76 00:03:02,280 --> 00:03:05,710 >> Și acum, de asemenea, ceea ce CS50 IDE a făcut pentru noi este, de asemenea, că este 77 00:03:05,710 --> 00:03:07,120 sintaxă evidențiată totul. 78 00:03:07,120 --> 00:03:08,822 Așa că a făcut totul foarte colorat. 79 00:03:08,822 --> 00:03:10,780 Și întregul scop de care nu este funcțională. 80 00:03:10,780 --> 00:03:14,290 E doar pentru a atrage ochii la conceptual diferite piese 81 00:03:14,290 --> 00:03:15,310 din acest program. 82 00:03:15,310 --> 00:03:17,570 Așa că hai să mergem mai departe și compila acest lucru. 83 00:03:17,570 --> 00:03:19,490 Și eu pot compila acest în câteva moduri. 84 00:03:19,490 --> 00:03:22,010 Și în săptămâna unu, mod old-school am făcut 85 00:03:22,010 --> 00:03:26,250 a fost literalmente la comandă line-- "hello.c zăngănit." 86 00:03:26,250 --> 00:03:27,596 Și apoi m-am lovit Enter. 87 00:03:27,596 --> 00:03:29,720 Și nimic nu pare să se întâmple în fereastra de terminal. 88 00:03:29,720 --> 00:03:32,654 Dar ce a făcut o schimbare în IDE? 89 00:03:32,654 --> 00:03:35,320 În cazul în care, din nou, IDE înseamnă doar Mediu de dezvoltare integrat. 90 00:03:35,320 --> 00:03:38,360 Este un mod fantezist de a spune această dezvoltare integrată 91 00:03:38,360 --> 00:03:40,620 mediu pentru dezvoltarea de software. 92 00:03:40,620 --> 00:03:42,477 Deci, ce sa schimbat in UI? 93 00:03:42,477 --> 00:03:44,310 Ce ai observat asta e diferit, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Am observat ceva sub IDE50 dosarul aici. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Da. 96 00:03:47,850 --> 00:03:50,230 Deci aici, nu numai avem "hello.c." 97 00:03:50,230 --> 00:03:53,120 Avem, de asemenea "a.out", care este un fel de nume prost pentru un program. 98 00:03:53,120 --> 00:03:56,430 Dar, într-adevăr, e numele implicit pentru o Programul atunci când compilați doar codul 99 00:03:56,430 --> 00:03:59,110 și nu spun compilatorului ce fișier de ieșire. 100 00:03:59,110 --> 00:04:01,790 Deci, dacă vreau să ruleze acest lucru, am Trebuie să-i spuneți compiler-- 101 00:04:01,790 --> 00:04:05,340 sau, mai degrabă, trebuie să spune spațiul de lucru pe care am 102 00:04:05,340 --> 00:04:09,780 doriți să rulați programul numit "a.out." 103 00:04:09,780 --> 00:04:10,550 Introduce. 104 00:04:10,550 --> 00:04:12,474 Și nu există "Bună ziua, lumea. "Acum" ./ ". 105 00:04:12,474 --> 00:04:13,390 este, de fapt important. 106 00:04:13,390 --> 00:04:16,050 Chiar dacă în mod normal ne-am numai scrie numele de comenzi, 107 00:04:16,050 --> 00:04:19,060 atunci când este un program ai scris, tu vreau să spun "./" 108 00:04:19,060 --> 00:04:22,460 pentru că spune în mod explicit Linux pe care doriți să rulați un program numit 109 00:04:22,460 --> 00:04:26,930 "a.out", care este în acest sens, în cazul în care punct înseamnă că acest director sunt în prezent 110 00:04:26,930 --> 00:04:31,600 în, care se întâmplă să fie numit spațiu de lucru, "a.out. 111 00:04:31,600 --> 00:04:35,410 Pentru că dacă am spus "a.out," Enter, Mă duc pentru a obține "a.out comanda nu 112 00:04:35,410 --> 00:04:38,035 găsit ", deoarece computer-- pentru că am inventat "a.out;" 113 00:04:38,035 --> 00:04:40,910 aceasta nu a venit cu computer-- nu știe unde să-l caute, 114 00:04:40,910 --> 00:04:43,590 chiar dacă este corect sub nasul meu, ca să spunem așa. 115 00:04:43,590 --> 00:04:44,090 BINE. 116 00:04:44,090 --> 00:04:49,910 Deci, am putea schimba acest lucru fi "zăngăni -o salut hello.c." 117 00:04:49,910 --> 00:04:53,030 Și dacă am lovit Enter, ce program se întâmplă acest lucru pentru ieșire pentru mine? 118 00:04:53,030 --> 00:04:55,710 Care este numele fișierului? 119 00:04:55,710 --> 00:04:57,500 Da, în spate. 120 00:04:57,500 --> 00:04:58,479 Asta e corect. "Salut." 121 00:04:58,479 --> 00:05:00,520 Deci "hello" va fi numele programului 122 00:05:00,520 --> 00:05:04,610 pentru că ne-am folosit de așa-zisul argument linie de comandă, care este doar 123 00:05:04,610 --> 00:05:08,120 un mod de schimbarea comportamentului compilatorul de fapt, de ieșire 124 00:05:08,120 --> 00:05:09,450 un nume de fișier specific. 125 00:05:09,450 --> 00:05:12,400 Și într-adevăr, dacă am zoom afară și privi în sus aici, 126 00:05:12,400 --> 00:05:17,430 acum am nu numai "a.out" și "hello.c", dar și "salut", precum și. 127 00:05:17,430 --> 00:05:22,410 Deci, acum pot face "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 Și nu există "Salut, lume." 129 00:05:23,640 --> 00:05:25,640 Dar lastly-- și această va fi acum convenția 130 00:05:25,640 --> 00:05:27,590 am utilizate în întreaga semestru, typically-- 131 00:05:27,590 --> 00:05:30,070 este, de asemenea, puteți pur și simplu spune "a face salut." 132 00:05:30,070 --> 00:05:33,370 Și într-adevăr, se spune că e sus până în prezent, pentru că există deja. 133 00:05:33,370 --> 00:05:37,860 Lasă-mă să mergeți mai departe și a elimina, cu comanda rm, atât "a.out" - 134 00:05:37,860 --> 00:05:39,644 și spune "elimina a.out fisier obisnuit?" 135 00:05:39,644 --> 00:05:41,810 Asta înseamnă doar, ești Sigur doriți să-l ștergeți? 136 00:05:41,810 --> 00:05:42,880 Am de gând să spun da. 137 00:05:42,880 --> 00:05:46,690 Și apoi am de gând pentru a elimina "salut", dar nu "hello.c." 138 00:05:46,690 --> 00:05:49,920 Am de gând să spun "da" în mod explicit, dar "y" este suficient, de asemenea. 139 00:05:49,920 --> 00:05:52,140 >> Și acum observați dacă tip ls-- care, amintesc, 140 00:05:52,140 --> 00:05:55,540 înseamnă list-- listeaza toate dintre fișierele din folderul meu. 141 00:05:55,540 --> 00:05:57,850 Și într-adevăr, dacă am zoom afară și uita-te la stânga sus, 142 00:05:57,850 --> 00:05:59,730 se confirmă faptul că ceea ce este în acest dosar, chiar 143 00:05:59,730 --> 00:06:04,990 deși este etichetat ca IDE50 aici și nu spațiu de lucru, e doar "hello.c." 144 00:06:04,990 --> 00:06:09,152 Deci, acum aici, dacă am nu "face salut," Enter, 145 00:06:09,152 --> 00:06:12,360 acum văd o comandă mult mai mult, dar o comandă mai sofisticate, care va 146 00:06:12,360 --> 00:06:13,940 pentru a fi utile în săptămânile ce vor urma. 147 00:06:13,940 --> 00:06:16,720 Și acum pot să spun "./hello." 148 00:06:16,720 --> 00:06:19,257 >> Deci, haideți să aruncăm un tur rapid comenzi alt Linux. 149 00:06:19,257 --> 00:06:21,840 Atunci de ce nu facem un pas înapoi și de fapt se uite la C mai 150 00:06:21,840 --> 00:06:25,020 în general, trecerea de la zero la C, și apoi se încheie cu o privire 151 00:06:25,020 --> 00:06:27,305 la prima problemă stabilit în C. În regulă. 152 00:06:27,305 --> 00:06:30,430 Deci, am de gând să merg mai departe și doar curat up spațiu de lucru mea cu control-L doar 153 00:06:30,430 --> 00:06:31,429 pentru a menține ecranul curat. 154 00:06:31,429 --> 00:06:33,520 Dar asta nu are nici o funcțională impact altfel. 155 00:06:33,520 --> 00:06:35,820 >> Reamintim că am văzut câteva comenzi acum. 156 00:06:35,820 --> 00:06:39,900 Deci am văzut zăngănit, care, în general, vă nu va trebui să mai execute manual. 157 00:06:39,900 --> 00:06:41,650 Vom folosi în loc de make. 158 00:06:41,650 --> 00:06:45,290 Dar am văzut, de asemenea, LS, care arată o lista cu fișierele din directorul meu. 159 00:06:45,290 --> 00:06:48,750 Și acum, de ce este there-- Sunt două fișiere acum, "Bună ziua" și "hello.c." 160 00:06:48,750 --> 00:06:52,240 De ce există o stea sau o asterisc după "salut"? 161 00:06:52,240 --> 00:06:54,900 Ce a semnifica faptul că, pe baza pe ceea ce am văzut în săptămâna unul? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 Tu ce crezi? 164 00:07:00,400 --> 00:07:02,742 Ce semnifică steaua? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: For-- programul "Hello"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Hello *". 167 00:07:05,530 --> 00:07:06,330 Da. 168 00:07:06,330 --> 00:07:07,760 Oh da? 169 00:07:07,760 --> 00:07:08,639 Oh, executabil. 170 00:07:08,639 --> 00:07:09,180 Asta e corect. 171 00:07:09,180 --> 00:07:10,890 Deci asta înseamnă că "hello" este executabil. 172 00:07:10,890 --> 00:07:13,430 Deci, într-adevăr, de aceea Pot face "./hello." 173 00:07:13,430 --> 00:07:13,930 In regula. 174 00:07:13,930 --> 00:07:15,179 Deci, ce altceva pot face aici? 175 00:07:15,179 --> 00:07:17,290 Ei bine, se pare că pot crea, de asemenea directoare. 176 00:07:17,290 --> 00:07:20,924 Așa că lasă-mă să merg mai departe și de a crea, de exemplu, un director "pset1". 177 00:07:20,924 --> 00:07:23,590 Și caietul de sarcini problema set va avea faci exact acest lucru, 178 00:07:23,590 --> 00:07:25,260 astfel încât să nu trebuie să vă amintiți de azi. 179 00:07:25,260 --> 00:07:27,340 Dar "pset1 mkdir" pare pentru a avea nici un impact. 180 00:07:27,340 --> 00:07:30,540 Dar, din nou, nu un mesaj de eroare este, în general, un lucru bun. 181 00:07:30,540 --> 00:07:34,060 Deci, dacă am de tip "ls" now-- ah, acum Am un fișier executabil numit 182 00:07:34,060 --> 00:07:36,570 "Bună ziua", un fișier numit C "hello.c." 183 00:07:36,570 --> 00:07:40,860 Și apoi slash la sfârșit, astfel încât să vorbesc, înseamnă că acest lucru este un director. 184 00:07:40,860 --> 00:07:42,510 >> Deci, într-adevăr, acum vreau să-l deschid. 185 00:07:42,510 --> 00:07:45,730 Și eu nu dublu click pe el ca într-un GUI, un mediu grafic. 186 00:07:45,730 --> 00:07:48,550 Eu spun în schimb "CD pset1." 187 00:07:48,550 --> 00:07:49,640 Introduce. 188 00:07:49,640 --> 00:07:53,100 Nimic interesant pare a avea sa întâmplat cu excepția mica mea promptă 189 00:07:53,100 --> 00:07:57,300 here-- acesta este modul lui de a reaminti Linux mi unde sunt, deci ce dosarul este deschis. 190 00:07:57,300 --> 00:08:00,080 E doar mi-a spus în mod explicit spre deosebire de grafic. 191 00:08:00,080 --> 00:08:05,100 Și dacă tastați "ls," De ce am vedea un alt cere imediat, crezi, 192 00:08:05,100 --> 00:08:07,269 când am lista conținutul pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: probabil că nu au nimic acolo. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Da. 195 00:08:09,630 --> 00:08:11,510 Deci nu avem în mod evident, creat ceva acolo 196 00:08:11,510 --> 00:08:13,150 pentru că tocmai am creat directorul. 197 00:08:13,150 --> 00:08:17,690 Acum, dacă am vrut să creeze un file-- pentru exemplu, am putea crea un nou fișier. 198 00:08:17,690 --> 00:08:20,190 Și apoi am putea merge la Salvați și salvați-l ca, 199 00:08:20,190 --> 00:08:23,090 cum ar fi, "mario.c" dacă faci ediția standard a PSET unul. 200 00:08:23,090 --> 00:08:27,610 Și apoi, ca orice Mac sau PC, doar alegeți folderul "pset1, Salvare. 201 00:08:27,610 --> 00:08:28,740 Și acum fișierul este gol. 202 00:08:28,740 --> 00:08:31,160 Dar să zoom din nou pentru un al doilea. 203 00:08:31,160 --> 00:08:32,470 Să facem LS aici. 204 00:08:32,470 --> 00:08:34,470 Acum vom vedea "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Deci nu e câteva alte comenzi care sunt în valoare de având în minte pe time-- 206 00:08:37,850 --> 00:08:41,200 clar, sau Control-L este ceea ce am fost lovit; mkdir am văzut; 207 00:08:41,200 --> 00:08:45,240 rm am văzut, de asemenea, care este pentru îndepărtarea sau ștergerea unui fișier. 208 00:08:45,240 --> 00:08:49,310 Feriți-vă puteți also-- și dacă te uiți la tutoriale on-line, veți rm -rf 209 00:08:49,310 --> 00:08:52,630 este un mod foarte frecvente de a spune șterge un folder care are lucruri in ea. 210 00:08:52,630 --> 00:08:54,280 Doar fi super, super-atent. 211 00:08:54,280 --> 00:08:58,780 -rf înseamnă recursiv șterge tot ce este 212 00:08:58,780 --> 00:09:01,150 pe care încercați să ștergeți și forțat-l ștergeți. 213 00:09:01,150 --> 00:09:04,630 Deci, recursiv mijloace, dacă este un dosar cu un dosar cu un dosar cu un dosar, 214 00:09:04,630 --> 00:09:05,690 șterge toate. 215 00:09:05,690 --> 00:09:08,680 Și forța înseamnă nici măcar nu Spune-mi da sau nu, nu-i sigur? 216 00:09:08,680 --> 00:09:11,960 Deci, este un mod foarte periculos de ștergerea o mulțime de lucruri rapid. 217 00:09:11,960 --> 00:09:17,210 Dar de prea multe ori beware-- face o Intrepid elev șterge accidental, să zicem, PSET 218 00:09:17,210 --> 00:09:18,000 o, de exemplu. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: Și dacă ei doar face -r, vor 220 00:09:19,833 --> 00:09:21,870 pentru a le cere despre fiecare singur fișier. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Care este moderat enervant. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Da. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Deci, de aceea atât de mulți dintre noi, de sine inclus, 224 00:09:25,813 --> 00:09:27,070 Sunt în obiceiul de a folosi -rf. 225 00:09:27,070 --> 00:09:27,861 Dar e periculos. 226 00:09:27,861 --> 00:09:29,010 Deci, ai grija cumpărător. 227 00:09:29,010 --> 00:09:31,050 Și apoi mv este un fel de interesant numit. 228 00:09:31,050 --> 00:09:33,600 Deci aceasta este comanda mișcare, care se simte un pic ciudat 229 00:09:33,600 --> 00:09:37,260 pentru că puteți într-adevăr să-l utilizați muta fișiere dintr-un loc în altul. 230 00:09:37,260 --> 00:09:39,970 De exemplu, să presupunem că am dat peste cap. 231 00:09:39,970 --> 00:09:43,660 Să presupunem că am creat un nou fișier pentru PSET. 232 00:09:43,660 --> 00:09:46,320 Și l-am salvat ca "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Dar să presupunem că am accidental salvați-l în IDE50-- astfel încât în ​​spațiul de lucru meu sine 234 00:09:49,970 --> 00:09:51,580 și nu în pset1. 235 00:09:51,580 --> 00:09:53,960 >> Puteti vedea la fel de mult la stânga sus. 236 00:09:53,960 --> 00:09:55,284 Nu e "greedy.c." 237 00:09:55,284 --> 00:09:56,450 Și există câteva soluții. 238 00:09:56,450 --> 00:09:58,324 Deci unul, pot folosi super-mod user-friendly 239 00:09:58,324 --> 00:09:59,740 de doar glisarea și fixarea-l. 240 00:09:59,740 --> 00:10:01,910 Și de fapt care ar rezolva această problemă. 241 00:10:01,910 --> 00:10:04,967 Dar astăzi, noi încercăm să se uite la modalitățile mai Arcane, dar puternic 242 00:10:04,967 --> 00:10:05,550 de a face acest lucru. 243 00:10:05,550 --> 00:10:07,880 Deci, lasă-mă să iau "ls", în pset1. 244 00:10:07,880 --> 00:10:09,690 Și văd doar "mario.c." 245 00:10:09,690 --> 00:10:13,450 Lasă-mă să mergeți mai departe și de a face "cd ..". 246 00:10:13,450 --> 00:10:15,320 Deci CD din nou, este director schimbare. 247 00:10:15,320 --> 00:10:18,130 ".." Înseamnă ceea ce, totuși? 248 00:10:18,130 --> 00:10:21,100 Ultima dată când i-am spus "CD pset1 "pentru a merge în pset1. 249 00:10:21,100 --> 00:10:24,360 Așa că atunci când spun "cd ..", ce fac? 250 00:10:24,360 --> 00:10:24,910 Înapoi. 251 00:10:24,910 --> 00:10:25,150 Da. 252 00:10:25,150 --> 00:10:26,750 >> Deci o să așa-numitele părinte. 253 00:10:26,750 --> 00:10:29,730 Du-te un nivel mai sus, cum ar fi ieșirea dintr-un folder. 254 00:10:29,730 --> 00:10:30,500 Deci Enter. 255 00:10:30,500 --> 00:10:31,900 Și într-adevăr, uite ce a făcut. 256 00:10:31,900 --> 00:10:37,070 Mi mutat în spațiu de lucru în loc de în pset1, care este în spațiul de lucru. 257 00:10:37,070 --> 00:10:39,710 Și acum, dacă mă tip "ls", există o grămadă de lucruri. 258 00:10:39,710 --> 00:10:41,650 Acolo este "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Deci, acum lasă-mă să folosesc mv pentru a literalmente muta "greedy.c" în pset1. 260 00:10:48,720 --> 00:10:51,120 Și astfel o mulțime de comenzi Linux lucra exact ca aceasta. 261 00:10:51,120 --> 00:10:54,470 Ei iau nici un argument sau care le iau unul argument sau le iau două linie de comandă 262 00:10:54,470 --> 00:10:55,449 argumente și așa mai departe. 263 00:10:55,449 --> 00:10:57,240 Și în acest caz, este literalmente face ceea ce 264 00:10:57,240 --> 00:11:01,670 se spune, deși succinctly-- muta greedy.c în pset1. 265 00:11:01,670 --> 00:11:02,310 Introduce. 266 00:11:02,310 --> 00:11:03,310 Nimic nu pare să se întâmple. 267 00:11:03,310 --> 00:11:06,180 Dar dacă am face un ls din nou, lacom este plecat. 268 00:11:06,180 --> 00:11:12,437 Și dacă fac "CD pset1", Enter, și apoi ls din nou, acum e în locul potrivit. 269 00:11:12,437 --> 00:11:14,270 Ca o paranteza, dacă pentru unele reason-- special 270 00:11:14,270 --> 00:11:16,194 dacă aveți intermitent conectivitate în rețea 271 00:11:16,194 --> 00:11:18,360 sau te plimbi în jurul valorii de campus cu capac laptop 272 00:11:18,360 --> 00:11:20,180 închis și apoi deschideți-l în sus din nou și spațiul de lucru 273 00:11:20,180 --> 00:11:21,730 pare oarecum din sincronizare, nu e mare lucru. 274 00:11:21,730 --> 00:11:23,646 Doar reîncărcați browser-ul dvs. fereastră, și ar trebui 275 00:11:23,646 --> 00:11:26,339 RESYNC astfel încât-stânga browser de fișiere arată exact 276 00:11:26,339 --> 00:11:27,380 ca fereastra terminal. 277 00:11:27,380 --> 00:11:27,921 Nu vă faceți griji. 278 00:11:27,921 --> 00:11:31,460 Dacă aveți dubii, reîncărcați pagina, astfel încât timp cât ați salvat deja fișierele. 279 00:11:31,460 --> 00:11:31,960 BINE. 280 00:11:31,960 --> 00:11:34,710 Deci mv poate fi de asemenea utilizat pentru a redenumi fișiere. 281 00:11:34,710 --> 00:11:36,760 Și haideți să aruncăm o privire la această comandă finală aici. 282 00:11:36,760 --> 00:11:39,950 Deci suppose-- și acest lucru este super-comun, de asemenea, de timpuriu. 283 00:11:39,950 --> 00:11:46,400 Unii studenți, ocazional, a crea un fișier numit, să say-- ce e altul? 284 00:11:46,400 --> 00:11:47,730 Ca și "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Așa că voi striga doar, pentru nici un motiv, în toate capacele. 286 00:11:51,080 --> 00:11:53,190 Dar acest lucru nu este Numele corect pentru fișierul 287 00:11:53,190 --> 00:11:56,660 dacă numai pentru că problema noastră set caietul de sarcini nu ți-a spus 288 00:11:56,660 --> 00:11:59,430 pentru a salva fișierul ca toate capacele "WATER.C." 289 00:11:59,430 --> 00:12:01,320 În schimb, ne așteptăm "water.c" cu litere mici. 290 00:12:01,320 --> 00:12:03,140 Și, în fapt, aceasta este problematică, deoarece check50, 291 00:12:03,140 --> 00:12:04,370 un program mergi să se întâlnească în probleme 292 00:12:04,370 --> 00:12:07,350 set una care testează în mod automat corectitudinea codului 293 00:12:07,350 --> 00:12:11,615 va striga la tine să în cazul în care nu se poate găsi "water.c" în toate litere mici. 294 00:12:11,615 --> 00:12:12,712 >> Așa că am nevoie pentru a remedia acest lucru. 295 00:12:12,712 --> 00:12:14,920 Atât de multe moduri diferite de a face acest lucru, dintre care primul 296 00:12:14,920 --> 00:12:18,330 ar fi Control-clic sau clic-dreapta numele fișierului și doar schimba Redenumire. 297 00:12:18,330 --> 00:12:19,740 Total fin pentru a face acest lucru. 298 00:12:19,740 --> 00:12:21,820 Dar, din nou, astăzi, să face un pic crescator. 299 00:12:21,820 --> 00:12:26,680 Să folosim mv pentru a modifica "WATER.C" la "water.c." 300 00:12:26,680 --> 00:12:30,690 Astfel încât să puteți utiliza, de asemenea, primul argument să-l redenumiți la al doilea argument 301 00:12:30,690 --> 00:12:34,455 dacă al doilea argument nu este în De fapt, un folder sau un nume de director. 302 00:12:34,455 --> 00:12:35,120 >> In regula. 303 00:12:35,120 --> 00:12:39,560 Și, în fine, un pic trick-- așa că eu sunt în directorul meu spațiu de lucru în acest moment. 304 00:12:39,560 --> 00:12:43,660 Dacă vreau să intru în PSET unul, Am posibilitatea să tastați cu siguranță "CD pset1." 305 00:12:43,660 --> 00:12:47,260 Dar e atât de plictisitor să tastați "pset1" sau mai nume de fișiere sau nume de directoare 306 00:12:47,260 --> 00:12:47,980 încă. 307 00:12:47,980 --> 00:12:51,960 Deci, de foarte multe ori în Linux, ceea ce poti sa faci este începeți să tastați "PSE" 308 00:12:51,960 --> 00:12:56,100 și doar se plictisesc, lovit Tab, și să cifra de calculator-l pentru tine. 309 00:12:56,100 --> 00:12:58,190 Super util pentru a intra în acest obicei. 310 00:12:58,190 --> 00:13:01,079 Singura captura este dacă aveți mai multe fișiere sau foldere care încep 311 00:13:01,079 --> 00:13:02,870 cu litera "p" sau "PS", s-ar putea avea 312 00:13:02,870 --> 00:13:05,525 să tastați câteva mai înainte ca calculator știe ce să facă. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Ne place comenzi rapide. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Aceasta va salva atât de mult timp. 315 00:13:08,695 --> 00:13:11,930 Și, de asemenea, așa cum am spus în prelegerea, ai Puteți derula în istorie, sus și în jos, 316 00:13:11,930 --> 00:13:15,461 pentru a găsi recent executat comenzi, precum și. 317 00:13:15,461 --> 00:13:15,960 In regula. 318 00:13:15,960 --> 00:13:20,904 Deci, acum, să ne îndreptăm atenția înapoi la un program simplu, salut lume. 319 00:13:20,904 --> 00:13:22,195 Deci ne-am alcătuit această exact. 320 00:13:22,195 --> 00:13:24,050 Și acum, de ce nu luăm o privire la tipurile de date 321 00:13:24,050 --> 00:13:26,776 și apoi trecerea de la unele blocuri Scratch corespunzătoare C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Deci, acum că v-ați început scrierea programelor în C, 324 00:13:30,031 --> 00:13:32,530 vom începe să vorbesc despre tipurile de date și variabile. 325 00:13:32,530 --> 00:13:37,570 Astfel încât unele tipuri de date pe care le ar dori să știe de acum 326 00:13:37,570 --> 00:13:39,400 sunt cele care sunt evidențiate în albastru. 327 00:13:39,400 --> 00:13:42,420 Deci avem Int în primul rând, care vine de la întreg. 328 00:13:42,420 --> 00:13:46,075 Și care deține numere întregi, în timp ce poate avea atât guessed-- 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 și orice alte numere întregi care vă puteți gândi. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: Și, de asemenea negativ. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: Și, de asemenea cele negative, da. 332 00:13:50,220 --> 00:13:51,450 Și 0. 333 00:13:51,450 --> 00:13:54,250 Apoi, avem flotoare, care sunt numere în virgulă mobilă. 334 00:13:54,250 --> 00:13:58,360 Deci, asta e toate numerele reale care au puncte zecimale. 335 00:13:58,360 --> 00:14:03,960 Deci 5.0, 5.2, și chiar mai mult cifre după virgulă, 336 00:14:03,960 --> 00:14:05,620 precum și, de asemenea cele negative. 337 00:14:05,620 --> 00:14:07,530 Apoi, avem char, care este un personaj. 338 00:14:07,530 --> 00:14:10,240 Deci, cred că am vorbit despre acest curs în ziua de azi. 339 00:14:10,240 --> 00:14:15,682 Dar avem scrisori, pentru example-- A, B, C- care pot fi stocate ca un char. 340 00:14:15,682 --> 00:14:18,390 Dar atunci avem mult mai multe simboluri care pot fi stocate ca un char. 341 00:14:18,390 --> 00:14:22,380 Iar cei sunt stocate ca ASCII. 342 00:14:22,380 --> 00:14:25,280 >> Și apoi ne-am bool, care sunt Booleans. 343 00:14:25,280 --> 00:14:29,067 Iar cei evalua la True sau False sau 1 și 0, respectiv. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: Și amintesc că bool vine de la biblioteca CS50. 345 00:14:31,650 --> 00:14:33,300 Deci nu este construit în C, dar este foarte util 346 00:14:33,300 --> 00:14:34,850 pentru a avea noțiunea de adevărat și fals. 347 00:14:34,850 --> 00:14:36,990 Și chiar dacă te s-ar putea think-- fapt distractiv. 348 00:14:36,990 --> 00:14:43,700 O bool are nevoie de punct de vedere tehnic cât de multe biți, cu adevărat, pentru a reprezenta Adevărat Fals față? 349 00:14:43,700 --> 00:14:47,910 Câți biți crezi ai avea nevoie, maxim? 350 00:14:47,910 --> 00:14:48,790 Da, doar unul. 351 00:14:48,790 --> 00:14:52,077 Deci, se dovedește că C Nu vă pot da doar un singur bit. 352 00:14:52,077 --> 00:14:54,160 Cea mai mică unitate de măsură puteți obține este de opt. 353 00:14:54,160 --> 00:14:57,090 Deci, este un pic risipitor ei te folosind un întreg octet, sau opt biți, 354 00:14:57,090 --> 00:14:58,340 pentru a reprezenta adevărate sau false. 355 00:14:58,340 --> 00:15:01,807 Dar asta e doar modul în care aceasta este implementat în C prin bibliotecă CS50. 356 00:15:01,807 --> 00:15:04,890 MARIA: Și apoi cei care suntem Nu vorbi despre cum larg 357 00:15:04,890 --> 00:15:08,060 drept now-- dublu, asta e flotoare mari. 358 00:15:08,060 --> 00:15:09,811 Lung lung și scurt sunt, de asemenea, pentru numere întregi. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: Într-adevăr. 360 00:15:10,643 --> 00:15:13,190 În hacker ediție a PSET o, de fapt, vom folosi mult timp lung. 361 00:15:13,190 --> 00:15:15,801 Dar pentru ediția standard nu ar trebui să fie necesară. 362 00:15:15,801 --> 00:15:16,300 MARIA: cool. 363 00:15:16,300 --> 00:15:17,361 BINE. 364 00:15:17,361 --> 00:15:20,110 Deci ar trebui să fie operators-- probabil, familiarizat cu cele mai multe dintre acestea. 365 00:15:20,110 --> 00:15:22,620 Plus, +; scădere, -. 366 00:15:22,620 --> 00:15:24,070 Pentru multiplicare, avem *. 367 00:15:24,070 --> 00:15:25,900 Deci, nu X pe care le de obicei folosesc. 368 00:15:25,900 --> 00:15:27,840 Divizare, avem backslash. 369 00:15:27,840 --> 00:15:31,380 Și modulo este ultima noastră operator care vom vorbi despre acum. 370 00:15:31,380 --> 00:15:35,610 Este un operator care ne permite să ia restul unei diviziuni. 371 00:15:35,610 --> 00:15:40,630 Deci, dacă avem 4% 2, 4 divizat de 2 este 2, cu un rest de 0. 372 00:15:40,630 --> 00:15:41,740 Deci 4% 2 este 0. 373 00:15:41,740 --> 00:15:42,950 4% 3 este 1. 374 00:15:42,950 --> 00:15:44,870 4% 5 este de 4, așa cum ați putea fi ghicit. 375 00:15:44,870 --> 00:15:48,860 Și amintiți-vă atunci când se utilizează toate acestea operatorilor de a utiliza regulile PEMDAS. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Deci să fie clar, dacă face 4% 2, de ce este că 0, mai exact? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Deoarece 4 împărțit la 2 este 2, cu un rest de 0. 378 00:15:57,480 --> 00:16:00,752 Deci, modulo ne dă ca rest ca spre deosebire de rezultatul diviziei. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: Și într-adevăr, ceea ce vom găsi acest ajutor 380 00:16:02,960 --> 00:16:05,640 este faptul că în unele probleme asta nu e neapărat o, 381 00:16:05,640 --> 00:16:08,040 dacă doriți să aveți efect restrângerea tine 382 00:16:08,040 --> 00:16:10,720 la un interval de numere ca 0 prin ceva, 383 00:16:10,720 --> 00:16:13,904 puteți utiliza modulo să-și încheie în jurul valorii de mai devreme decât ca 2 miliarde 384 00:16:13,904 --> 00:16:16,320 sau valoarea pe care 4 miliarde pe care am vorbit despre în curs. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Da. 386 00:16:16,870 --> 00:16:19,429 Și chiar și în "lacomi" ne-ar putea. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Da, în problemă stabilit o, de asemenea. 388 00:16:21,345 --> 00:16:22,520 MARIA: Da, frumos. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: Bun indiciu. 390 00:16:24,340 --> 00:16:25,750 MARIA: Îmi pare rău. 391 00:16:25,750 --> 00:16:28,590 Boolean expressions-- așa pentru operatori booleeni, 392 00:16:28,590 --> 00:16:31,770 vom vorbi despre toate dintre acestea pe care le vezi aici. 393 00:16:31,770 --> 00:16:35,310 Deci, chiar acum, avem două semne egale enumerate pentru egali. 394 00:16:35,310 --> 00:16:38,650 Deci, acestea sunt pentru comparație. 395 00:16:38,650 --> 00:16:40,830 Până acum, am văzut doar o singură egal semn. 396 00:16:40,830 --> 00:16:44,870 Asta e atunci când ne-am atribui o valoare unei variabile. 397 00:16:44,870 --> 00:16:50,160 Deci, dacă am văzut int n = 5, atunci am alocat 5 la n variabile. 398 00:16:50,160 --> 00:16:55,600 Dar dacă vrem să utilizați pentru == comparație, putem verifica dacă n == 5. 399 00:16:55,600 --> 00:16:58,310 Și dacă n == 5, atunci e adevărat. 400 00:16:58,310 --> 00:17:01,950 >> Operatorilor astfel Boolean ne permite, practic, 401 00:17:01,950 --> 00:17:04,670 pentru a evalua Boolean expresii de adevărate sau false. 402 00:17:04,670 --> 00:17:07,819 Deci, nu avem equals-- semnul exclamării și egali. 403 00:17:07,819 --> 00:17:14,240 Deci, am putea verifica, de asemenea, în cazul în care n nu egal cu 5-- astfel n! = 5. 404 00:17:14,240 --> 00:17:17,640 Mai puțin, mai mică sau egală cu, mai mare decât, mai mare sau egal cu, 405 00:17:17,640 --> 00:17:20,720 și apoi avem logică ȘI și SAU logic. 406 00:17:20,720 --> 00:17:24,060 Iar cei ne permit sa evalueze mai multe expresii booleene împreună 407 00:17:24,060 --> 00:17:27,930 să vină împreună, ca practic o expresie booleană întreg. 408 00:17:27,930 --> 00:17:34,970 Deci, dacă vrem să găsim un număr, să zicem, care este mai mare decât 5, dar mai mică de 15 409 00:17:34,970 --> 00:17:39,810 în același timp, vom folosi logic operatorului pentru a vedea dacă n este 410 00:17:39,810 --> 00:17:42,937 mai mare de 5 && n mai puțin de 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: Și aici, de asemenea, este foarte ușor 412 00:17:44,770 --> 00:17:47,290 devreme pentru a accidental utilizați doar un singur ampersand 413 00:17:47,290 --> 00:17:48,572 sau un singur bară verticală. 414 00:17:48,572 --> 00:17:51,280 Și, sperăm, compilatorul va tipa la tine, deoarece acestea de fapt 415 00:17:51,280 --> 00:17:52,530 au o semnificație foarte diferite. 416 00:17:52,530 --> 00:17:55,660 Pentru cei curioși, sunt folosit pentru operațiuni la nivel de bit, 417 00:17:55,660 --> 00:17:57,197 operează pe biți individuali. 418 00:17:57,197 --> 00:17:58,780 Dar tu faci vrei o pereche de ei aici. 419 00:17:58,780 --> 00:18:01,560 Și super-important este faptul că Primul, semnul egal, 420 00:18:01,560 --> 00:18:05,270 care este operatorul egalitate ca spre deosebire de operatorul de atribuire. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: Și bara verticală este situat între șterge și retur. 422 00:18:08,552 --> 00:18:09,260 DAVID MALAN: Da. 423 00:18:09,260 --> 00:18:11,420 Pe o tastatură tipic american. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Da. 425 00:18:13,190 --> 00:18:15,890 Deci, haideți să sari direct în Declarații condiționată. 426 00:18:15,890 --> 00:18:18,300 În Scratch, ai deja văzut, probabil, 427 00:18:18,300 --> 00:18:22,730 dacă declarațiile pe care le permit să verifica dacă ceva este adevărat, atunci 428 00:18:22,730 --> 00:18:23,660 face altceva. 429 00:18:23,660 --> 00:18:28,410 Deci s-ar putea fi vrut pentru a verifica dacă Sprite este 430 00:18:28,410 --> 00:18:31,410 atingând un alt Sprite sau frontiera a ecranului. 431 00:18:31,410 --> 00:18:35,520 Și apoi s-ar putea fi vrut să termina jocul sau de a face altceva. 432 00:18:35,520 --> 00:18:40,000 Deci, sintaxa pentru care este "în cazul în care (condiție)." 433 00:18:40,000 --> 00:18:46,820 Deci, dacă Sprite dvs. atinge ceva, atunci nu este în interiorul acolade. 434 00:18:46,820 --> 00:18:48,980 >> Apoi, avem dacă-altceva declarații. 435 00:18:48,980 --> 00:18:54,080 Altele ne permite să facem ceva în cazul în care condiția ca noi 436 00:18:54,080 --> 00:18:55,870 verifica la început nu este adevărat. 437 00:18:55,870 --> 00:19:01,530 Deci, dacă sprite atinge frontieră a face acest lucru, altfel fac altceva. 438 00:19:01,530 --> 00:19:04,030 Deci, în caz contrar face altceva. 439 00:19:04,030 --> 00:19:07,530 Atunci avem o scurtă exemplu în acest sens. 440 00:19:07,530 --> 00:19:11,551 Deci, dacă (military_time <12), ne-am doresc să printf "Bună dimineața!" 441 00:19:11,551 --> 00:19:13,300 Altfel vom printf "Bună seara!" 442 00:19:13,300 --> 00:19:14,860 Exemplu de bază. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: Bine. 444 00:19:15,680 --> 00:19:16,760 >> MARIA: cool. 445 00:19:16,760 --> 00:19:18,560 Deci, acum avem declarații de comutare. 446 00:19:18,560 --> 00:19:21,960 Comuta declarații în general, poate ne permit să facă o mulțime de același lucru 447 00:19:21,960 --> 00:19:25,070 care tocmai am vorbit despre cu if. 448 00:19:25,070 --> 00:19:29,440 De exemplu, chiar acum avem forma generală a switch 449 00:19:29,440 --> 00:19:33,870 care ne permite să ia o variabilă numit n 450 00:19:33,870 --> 00:19:37,670 și compara cu o mulțime de valori diferite, care ne aici 451 00:19:37,670 --> 00:19:40,010 au numit constant1, constant2. 452 00:19:40,010 --> 00:19:41,150 S-ar putea avea o mult mai mult. 453 00:19:41,150 --> 00:19:42,930 Și acestea sunt numite cazuri. 454 00:19:42,930 --> 00:19:46,280 >> Deci, dacă avem un comutator statement-- și funcționează această 455 00:19:46,280 --> 00:19:50,580 doar pentru integers-- avem o variabilă în acest caz, care este n. 456 00:19:50,580 --> 00:19:53,840 Dacă n este variabila egală cu constant1, am 457 00:19:53,840 --> 00:19:59,720 va executa unele fragment de cod sau ceva ce vrem să facem. 458 00:19:59,720 --> 00:20:01,280 Și apoi ne-ar rupe. 459 00:20:01,280 --> 00:20:04,820 Deci pauza înseamnă că declarația comutator 460 00:20:04,820 --> 00:20:08,120 se va opri de executare în cazul în care n este egal cu constant1, 461 00:20:08,120 --> 00:20:09,752 și apoi programul va continua. 462 00:20:09,752 --> 00:20:11,835 Se va ieși afară din comuta declarație și că va 463 00:20:11,835 --> 00:20:13,520 continua să facă altceva. 464 00:20:13,520 --> 00:20:17,204 >> Dacă, totuși, n nu este egal constant1, apoi de caz pentru constant2 465 00:20:17,204 --> 00:20:17,870 vor fi verificate. 466 00:20:17,870 --> 00:20:21,750 Deci, dacă n este egal cu constant2, celălalt fragment de cod va fi executat. 467 00:20:21,750 --> 00:20:23,850 Și apoi voi rupe dacă acest lucru este egal cu acesta. 468 00:20:23,850 --> 00:20:27,580 Si atunci putem avea also-- nu în mod necesar, though-- un caz implicit, 469 00:20:27,580 --> 00:20:32,290 care se va întâmpla în cazul în care n nu este egal oricare dintre cazurile pe care le-am enumerate. 470 00:20:32,290 --> 00:20:35,400 Iar în cazul implicit, avem, de asemenea nu au nevoie de o pauză în mod necesar 471 00:20:35,400 --> 00:20:39,271 deoarece declarația comutator va ști care are nevoie pentru a încheia după implicit 472 00:20:39,271 --> 00:20:40,270 caz dacă e cazul. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Dar stilistic, am mereu pus-o acolo. 474 00:20:42,140 --> 00:20:42,540 >> MARIA: Da. 475 00:20:42,540 --> 00:20:42,710 >> DAVID MALAN: Da. 476 00:20:42,710 --> 00:20:44,750 Deci, mai ales atunci când la început, mai ales dacă printre cei mai puțin 477 00:20:44,750 --> 00:20:47,458 confortabil, aș personal doar recomanda stick cu IS 478 00:20:47,458 --> 00:20:51,564 și FI-elses și dacă-altceva-dacă-elses și așa mai departe, dacă numai 479 00:20:51,564 --> 00:20:53,480 pentru că sunt un pic mai simplă. 480 00:20:53,480 --> 00:20:56,142 Aceasta este o optimizare frumos, sau uneori chiar estetic aceasta 481 00:20:56,142 --> 00:20:57,350 face codul mai ușor de citit. 482 00:20:57,350 --> 00:20:59,599 Și, de fapt, probabil la mijlocul-semestru vom vedea o problemă 483 00:20:59,599 --> 00:21:02,504 stabilit în cazul în care doar arata mai bine și mai ușor de citit pentru oameni 484 00:21:02,504 --> 00:21:03,670 prin utilizarea unui comutator declarație. 485 00:21:03,670 --> 00:21:05,460 Dar nu vă faceți griji cu privire la agățându-se de acest lucru prea devreme. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Da. 487 00:21:05,680 --> 00:21:08,840 Dacă aveți o mulțime de if, doar nu s-ar putea să fie foarte ușor de citit. 488 00:21:08,840 --> 00:21:10,965 S-ar putea să nu fie foarte rapid pentru tine de a merge prin ea. 489 00:21:10,965 --> 00:21:13,230 Deci trece declaratii pot fi foarte util, de asemenea. 490 00:21:13,230 --> 00:21:17,900 Și, de asemenea, nu amintește-ți nu uita pentru a pune în pauzele de acolo. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Nu-mi amintesc asta. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Pentru că atunci s-ar putea cădea prin de la un caz la altul. 493 00:21:24,890 --> 00:21:27,930 Deci, haideți să spunem acest caz constant1 nu are un motto pauză în ea. 494 00:21:27,930 --> 00:21:31,920 Atunci am putea cădea prin constant2 caz interior. 495 00:21:31,920 --> 00:21:35,070 Și nu vreau să fac că, dacă am ajuns deja caz constant1 496 00:21:35,070 --> 00:21:37,830 și este egal cu n. 497 00:21:37,830 --> 00:21:45,100 >> Deci, de exemplu, în cazul în care avem o variabilă n care conține un număr de clasă, 498 00:21:45,100 --> 00:21:48,990 și vrem să vedem că ceea ce clasa este-- dacă n este egal cu 50, 499 00:21:48,990 --> 00:21:51,957 vom pentru a imprima "CS50 este Introducere în Informatică I. " 500 00:21:51,957 --> 00:21:53,040 Atunci vom rupe. 501 00:21:53,040 --> 00:21:53,920 Si asta e. 502 00:21:53,920 --> 00:21:55,950 Dacă, totuși, n este egal la 51, vom 503 00:21:55,950 --> 00:21:58,494 pentru a imprima "CS51 este Introducere la Informatică II. " 504 00:21:58,494 --> 00:21:59,910 Apoi, din nou, vom rupe. 505 00:21:59,910 --> 00:22:05,080 Cu toate acestea, în cazul în care atunci am pus 124, 61, orice alt număr care v-ar gândi, 506 00:22:05,080 --> 00:22:06,890 sau program nu este de gând să recunoască faptul că. 507 00:22:06,890 --> 00:22:09,010 Deci o să spună, "Îmi pare rău, eu sunt nu sunt familiarizați cu această clasă. " 508 00:22:09,010 --> 00:22:10,009 Și se va rupe. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Deci, puteți vedea cu adevărat if, else if, idee mai aici. 510 00:22:12,847 --> 00:22:15,430 E doar diferit sintaxa pentru exprimând aceeași idee exact. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Exact. 512 00:22:17,690 --> 00:22:19,480 Acum avem operatorii noștri ternare. 513 00:22:19,480 --> 00:22:24,900 Operatorilor astfel ternare au trei parts-- o condiție, 514 00:22:24,900 --> 00:22:27,220 ceva de a face în cazul în care această condiție este adevărată, 515 00:22:27,220 --> 00:22:29,730 și apoi să facă ceva dacă această condiție este falsă. 516 00:22:29,730 --> 00:22:33,400 Deci, vedeți, practic, sintaxa ca aici. 517 00:22:33,400 --> 00:22:37,792 Avem semnul de întrebare, și apoi the-- ce noi numim acest lucru? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: colon. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colon. 520 00:22:39,100 --> 00:22:39,599 Multumesc. 521 00:22:39,599 --> 00:22:41,880 Scuze. 522 00:22:41,880 --> 00:22:45,800 Deci, să ne uităm la exemplul nostru pentru a vedea dacă putem face sens de astea-- 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Deci, aici vedem operatorul nostru Boolean == care compară class_num variabilă 525 00:22:52,580 --> 00:22:53,100 la 50. 526 00:22:53,100 --> 00:22:55,150 Magazine Deci class_num un număr întreg. 527 00:22:55,150 --> 00:22:58,180 Și dacă întreg este egal cu 50, atunci suntem 528 00:22:58,180 --> 00:23:02,810 merge pentru a stoca "David Malan" în interiorul profesorul șir. 529 00:23:02,810 --> 00:23:05,912 Dacă numărul clasă nu egal 50, "nu David Malan" 530 00:23:05,912 --> 00:23:07,120 va fi profesor. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Mulțumesc. 532 00:23:08,630 --> 00:23:12,110 Și așa mai departe acest lucru pare echivalent cu ceea ce, ai spune, la prima vedere? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: Mie mi se pare ca în cazul în-altceva declarații. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Da. 536 00:23:20,709 --> 00:23:24,020 Și, de fapt, acest lucru este un fel de o destul de o linie, 537 00:23:24,020 --> 00:23:27,520 ca să spunem așa, pentru punerea în aplicare exact logica în cazul în care-altceva 538 00:23:27,520 --> 00:23:29,010 dar face totul într-un singur pas. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Exact. 540 00:23:29,860 --> 00:23:30,360 Da. 541 00:23:30,360 --> 00:23:33,520 Declarații așa că, dacă-ar mai putea să ia o mulțime de spațiu. 542 00:23:33,520 --> 00:23:36,283 Acestea ar putea fi prea mult timp pentru ceva la fel de simplu ca asta. 543 00:23:36,283 --> 00:23:38,350 Deci, acest lucru poate fi foarte succint și foarte frumos. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Deci, acum vom uita la în executare ceva nou și din nou, 546 00:23:46,820 --> 00:23:50,060 astfel de verificare pentru o condiționează de mai multe ori 547 00:23:50,060 --> 00:23:53,510 și apoi continuă să facă ceva în timp ce această condiție este adevărată. 548 00:23:53,510 --> 00:23:56,740 Deci, acest lucru ne aduce frumos în timp ce buclele. 549 00:23:56,740 --> 00:23:59,270 >> La stânga, avem primul nostru buclă în timp ce. 550 00:23:59,270 --> 00:24:03,840 Deci în timp ce ceva este adevărat, face nou și din nou ceva. 551 00:24:03,840 --> 00:24:08,850 Deci, asigurați-vă că pentru a observa că ne condiție aici este validată în partea de sus. 552 00:24:08,850 --> 00:24:14,150 Întrucât cu doua loop-- noastră noi numim că un do-timp loop-- facem ceva, 553 00:24:14,150 --> 00:24:15,890 apoi vom verifica pentru o stare. 554 00:24:15,890 --> 00:24:17,980 Și dacă această condiție continuă să fie adevărat, 555 00:24:17,980 --> 00:24:20,150 ne întoarcem și de a face din nou un lucru. 556 00:24:20,150 --> 00:24:23,360 Deci, diferența principală este în cazul în care condiția este verificat pentru. 557 00:24:23,360 --> 00:24:29,260 Și codul nu poate fi niciodată executat în cazul în care condiția nu este 558 00:24:29,260 --> 00:24:30,430 adevărat cu bucla în timp ce. 559 00:24:30,430 --> 00:24:33,050 Întrucât, cu do-timp bucla, avem codul 560 00:24:33,050 --> 00:24:35,380 care este întotdeauna execută cel puțin o dată. 561 00:24:35,380 --> 00:24:37,470 Și apoi, în timp ce starea de continuă să fie adevărat, 562 00:24:37,470 --> 00:24:39,960 ne putem întoarce și repeta din nou în interior. 563 00:24:39,960 --> 00:24:43,625 Deci, de ce crezi că ne-ar folosi un do-timp bucla pe o buclă în timp ce? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Dreapta. 566 00:24:48,720 --> 00:24:52,600 Deci, dacă vrem să solicita utilizator pentru un fel de intrare, 567 00:24:52,600 --> 00:24:55,400 dacă vrem să le cerem pentru a introduce numele lor, 568 00:24:55,400 --> 00:24:57,342 vrem cel puțin să le cereți o dată. 569 00:24:57,342 --> 00:24:59,050 Și în cazul în care intră acest nume, nu suntem 570 00:24:59,050 --> 00:25:00,740 O să-i întreb din nou pentru că o știm deja. 571 00:25:00,740 --> 00:25:02,656 Dar în cazul în care nu intră numele lor, sau în cazul în care 572 00:25:02,656 --> 00:25:05,787 introduceți ceva care este evident, nu un nume, 573 00:25:05,787 --> 00:25:08,120 tot doresc să continue cerându-le pe de numele lor. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: Și în curs am avut o ca acest lucru cu int pozitiv obține 575 00:25:10,710 --> 00:25:13,550 exemplu, în cazul în care nu este nimic de verifica la început, pentru că nu au nici măcar 576 00:25:13,550 --> 00:25:14,190 primit un Int. 577 00:25:14,190 --> 00:25:16,680 Deci, vrem sa facem asta: obține un întreg de la user-- 578 00:25:16,680 --> 00:25:18,860 apoi verifica, probabil, din nou și din nou și din nou. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Exact. 580 00:25:21,030 --> 00:25:22,060 Pentru loops-- OK. 581 00:25:22,060 --> 00:25:25,842 Pentru bucle poate permite să facem aproape exact același lucru, de asemenea. 582 00:25:25,842 --> 00:25:27,300 Este de fapt exact același lucru. 583 00:25:27,300 --> 00:25:30,190 Deci nu e nimic care se poate face cu bucle pentru 584 00:25:30,190 --> 00:25:32,840 că nu ar fi capabil a face cu bucle de timp. 585 00:25:32,840 --> 00:25:36,900 Dar pentru bucle poate părea un pic pic mai complicat sintactic 586 00:25:36,900 --> 00:25:39,730 pentru că au trei părți în interiorul ceea ce 587 00:25:39,730 --> 00:25:42,990 a fost înainte Doar condiție cu bucle de timp. 588 00:25:42,990 --> 00:25:48,260 Deci prima parte pe care le mare, stânga-cele mai multe, avem "int = 0. pitici" 589 00:25:48,260 --> 00:25:51,490 Deci acest lucru este în cazul în care ne-am inițializarea variabilei noastre. 590 00:25:51,490 --> 00:25:55,210 >> Atunci avem un punct și virgulă și "pitici <7." 591 00:25:55,210 --> 00:25:57,100 Deci acest lucru este în cazul în care în condiție este de fapt. 592 00:25:57,100 --> 00:26:00,170 Deci asta este ceea ce ne-ar trebui pune doar în timp ce loop-- 593 00:26:00,170 --> 00:26:01,880 "în timp ce pitici <7." 594 00:26:01,880 --> 00:26:05,380 Aici, că îndreaptă în mijloc de pentru noastre bucla. 595 00:26:05,380 --> 00:26:07,190 Deci "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 Si apoi ultimul nostru este parte "pitici ++," care este în cazul în care ne-am actualizat variabila noastră. 597 00:26:11,350 --> 00:26:15,470 Deci cel mai important lucru pentru a realiza acest lucru este faptul că 598 00:26:15,470 --> 00:26:22,010 este de gând să treacă prin această buclă de de șapte ori și să execute șapte ori. 599 00:26:22,010 --> 00:26:24,020 Deci avem șapte pitici, și toate sunt 600 00:26:24,020 --> 00:26:26,020 va spune, "Sunt aici pentru a vă ajuta, Albă ca Zăpada " 601 00:26:26,020 --> 00:26:28,860 pentru că ei sunt gata pentru a ajuta la Albă ca Zăpada. 602 00:26:28,860 --> 00:26:33,600 >> Cu timp bucle, ne-ar fi făcut inițializarea și actualizarea 603 00:26:33,600 --> 00:26:37,490 nu în interiorul condiției, din nou, dar fie înainte, fie în interiorul buclei în timp ce 604 00:26:37,490 --> 00:26:40,210 să vă asigurați că we-- deoarece avem mereu nevoie de acele părți. 605 00:26:40,210 --> 00:26:42,835 Deci, pentru a vă asigura că avem ei, ne-am fi încă le-a adăugat 606 00:26:42,835 --> 00:26:44,580 pe, doar nu în interiorul paranteze. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: Și așa se pare like-- în curs, de exemplu, 608 00:26:47,288 --> 00:26:50,250 Aproape că am să folosiți întotdeauna, cum ar fi, eu și n și variabile destul de plictisitor. 609 00:26:50,250 --> 00:26:53,050 Se pare ca poti folosi mai mult numit inteligent variabile, de asemenea. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Da, e de fapt foarte frumos de a utiliza variabile un pic mai mult descriptive 611 00:26:56,300 --> 00:26:59,400 pentru că mai ales în cazul în care cineva este lectură code-- dumneavoastră poate esti elev de clasa 612 00:26:59,400 --> 00:27:00,940 sau dacă sunteți colaborare cu somebody-- 613 00:27:00,940 --> 00:27:03,481 doriți să vă asigurați că acestea înțeleg ce faci. 614 00:27:03,481 --> 00:27:05,750 615 00:27:05,750 --> 00:27:06,400 >> BINE. 616 00:27:06,400 --> 00:27:11,435 Deci, acest lucru este ceva foarte funky-- pentru bucla în interiorul unui pentru buclă. 617 00:27:11,435 --> 00:27:13,060 Nu știu dacă am văzut acest lucru înainte. 618 00:27:13,060 --> 00:27:13,830 Probabil ca nu. 619 00:27:13,830 --> 00:27:17,750 Dar putem avea, de fapt asta: așa buclele loc de bucle. 620 00:27:17,750 --> 00:27:25,130 Deci, nimeni nu vrea să meargă, poate, mi prin ce se întâmplă aici? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Voi lua o lovitură de cuțit. 623 00:27:29,490 --> 00:27:29,970 MARIA: cool. 624 00:27:29,970 --> 00:27:30,636 DAVID MALAN: OK. 625 00:27:30,636 --> 00:27:34,690 Deci, spoiler-- vrem să imprimați lucruri care este în colțul din dreapta jos 626 00:27:34,690 --> 00:27:35,190 Acolo. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: dreapta. 628 00:27:35,450 --> 00:27:35,710 Da da. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: Deci Tocmai am pune că producția proba acolo. 630 00:27:38,043 --> 00:27:42,590 Deci, eu pot deduce din cel mai important bucla că ești 631 00:27:42,590 --> 00:27:45,680 iterarea peste rândurile de bucla exterioară, ca să spunem așa. 632 00:27:45,680 --> 00:27:48,107 Și tu iterarea peste coloane cu cel mai intim bucla. 633 00:27:48,107 --> 00:27:50,190 Și intuitiv, acest ar trebui să sperăm are sens 634 00:27:50,190 --> 00:27:52,070 deoarece prin natura fiecare program am vazut 635 00:27:52,070 --> 00:27:55,570 înainte, printf, care este Funcția folosim, în cele din urmă, 636 00:27:55,570 --> 00:27:58,190 are capacitatea de a imprima lucruri în esență linie cu linie. 637 00:27:58,190 --> 00:27:59,960 Ca, odată ce ați scoasă o nouă linie, nu e 638 00:27:59,960 --> 00:28:02,876 nici dublarea înapoi și imprimarea ceva mai mare în ecranul, cel puțin 639 00:28:02,876 --> 00:28:04,530 Nu utilizați printf așa. 640 00:28:04,530 --> 00:28:07,750 >> Și astfel, în această privință, face sensul că bucla exterior 641 00:28:07,750 --> 00:28:10,930 Trebuie referire la rândurile deoarece pentru fiecare rând dat, 642 00:28:10,930 --> 00:28:13,650 ai de gând să doriți să imprima XXXXX, și apoi 643 00:28:13,650 --> 00:28:15,520 trece la rândul următor, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Deci rânduri sunt pe primul loc. 645 00:28:17,317 --> 00:28:19,150 Și apoi în fiecare rând, imprimați coloane. 646 00:28:19,150 --> 00:28:21,160 Dacă ați încercat să-l do opus, nu ar fi, probabil 647 00:28:21,160 --> 00:28:21,690 ieși așa cum intenționați. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Da. 649 00:28:22,190 --> 00:28:24,950 Noi doar nu a putut reveni la rândul anterior cu printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: Și ce e interesant pe chat-ul de astăzi despre domeniul de aplicare, 651 00:28:27,658 --> 00:28:31,600 de fapt, este că rând este un int care este declarat în cel mai de sus bucla. 652 00:28:31,600 --> 00:28:34,030 Dar observați că este încă interiorul, ca să spunem așa, 653 00:28:34,030 --> 00:28:35,982 acolade care imediat urmat, 654 00:28:35,982 --> 00:28:38,440 chiar dacă nu este punct de vedere tehnic în aceste acolade. 655 00:28:38,440 --> 00:28:41,750 Deci rând este în domeniul de aplicare pentru toate elementele de fragmentul de cod, 656 00:28:41,750 --> 00:28:44,690 atât în ​​interiorul de exterior pentru bucla și în interiorul interior pentru bucla. 657 00:28:44,690 --> 00:28:48,050 Dar în schimb, în ​​cazul în care este coloana in domeniu? 658 00:28:48,050 --> 00:28:49,810 Coloana variabilă? 659 00:28:49,810 --> 00:28:51,310 Da, numai în bucla interior. 660 00:28:51,310 --> 00:28:54,280 Și asta e în regulă pentru că nu avea acces la se în afara bretele sale buclat. 661 00:28:54,280 --> 00:28:57,280 Tot ce facem este imprima o nouă linie la sfârșitul acolo. 662 00:28:57,280 --> 00:28:58,670 Așa că, de fapt, este în regulă. 663 00:28:58,670 --> 00:29:03,740 >> Deci acest lucru are ca efect, se pare ca, de a face trei rânduri și patru coloane. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: dreapta. 665 00:29:04,370 --> 00:29:06,270 Deci, în primul rând ne-am trece prin primul rând. 666 00:29:06,270 --> 00:29:10,520 Și în primul rând nostru, facem patru coloane din interiorul primului rând. 667 00:29:10,520 --> 00:29:11,980 Așa că am imprima patru X-. 668 00:29:11,980 --> 00:29:15,800 Și apoi vom puteți ieși din bucla pentru, deoarece ne-am imprimat deja patru X-. 669 00:29:15,800 --> 00:29:17,100 Și am imprima o nouă linie. 670 00:29:17,100 --> 00:29:19,920 Și apoi vom merge prin același procedeu de mai multe două rânduri 671 00:29:19,920 --> 00:29:21,170 pentru a face un total de trei. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: Și este demn de remarcat faptul că este doar un artefact al fontului, faptul 673 00:29:23,530 --> 00:29:25,680 că exemplul de ieșire par atât de mult mai înalt, 674 00:29:25,680 --> 00:29:27,520 ca și cum nu e mai mult rânduri decât coloane. 675 00:29:27,520 --> 00:29:29,824 Dar e doar pentru că X este mai inalt decat este larg. 676 00:29:29,824 --> 00:29:32,740 Asta e tot ce se întâmplă acolo, plus spațiul alb dintre linii. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: dreapta. 678 00:29:33,281 --> 00:29:34,792 Misto. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: Bine. 680 00:29:35,750 --> 00:29:39,830 Deci, o privire rapidă la problema stabilească un, ia orice întrebări, și apoi amâne? 681 00:29:39,830 --> 00:29:40,330 In regula. 682 00:29:40,330 --> 00:29:43,164 Deci, în problema stabilit o, nu e trei provocări primare, în cele din urmă. 683 00:29:43,164 --> 00:29:44,955 Dar, mai întâi, veți găsi că problema setat 684 00:29:44,955 --> 00:29:47,900 caietul de sarcini, ca și în mulți, psets aceasta toamna, este de gând să te plimbi 685 00:29:47,900 --> 00:29:50,691 prin câteva exerciții de încălzire, ați subliniat câteva resurse 686 00:29:50,691 --> 00:29:52,440 pe care le poate eventual nu s-au văzut deja. 687 00:29:52,440 --> 00:29:54,440 De exemplu, CS50 are o suită de pantaloni scurți, 688 00:29:54,440 --> 00:29:56,481 care sunt scurte videoclipuri, nu spre deosebire de acest lucru, dar că 689 00:29:56,481 --> 00:29:58,460 sunt foarte specific-- subiect Poate cinci minute, 690 00:29:58,460 --> 00:30:02,360 10 minute în lungime pe bucle sau privind condițiile sau pe algoritmi 691 00:30:02,360 --> 00:30:04,125 sau mai târziu pe mai subiecte avansate, precum și. 692 00:30:04,125 --> 00:30:06,000 Și, în general, ne-am embed cei în problema 693 00:30:06,000 --> 00:30:07,950 seturi astfel încât studenții au o resursa cu care 694 00:30:07,950 --> 00:30:10,840 să revizuiască materiale care ar putea avea deja veni în curs sau secțiune. 695 00:30:10,840 --> 00:30:13,220 Dar în acest fel este mai concentrat și mai la indemana lor. 696 00:30:13,220 --> 00:30:15,928 >> De asemenea, avem tendința de a încorpora în probleme stabilește lucruri numite walkthroughs. 697 00:30:15,928 --> 00:30:20,790 Deci, aproape toate exemplele pe care le fac în curs, pe scena aici, avem, de asemenea 698 00:30:20,790 --> 00:30:24,565 au împușcat pe aparat de fotografiat în avansa o mai lent, 699 00:30:24,565 --> 00:30:28,760 o prezentare mai intim de mine pe laptop-ul meu din același cod, linie cu linie 700 00:30:28,760 --> 00:30:31,427 astfel încât, în clasă, vom adesea degresat prin ceva sau cineva 701 00:30:31,427 --> 00:30:33,260 va intervin cu o răspunde la o întrebare. 702 00:30:33,260 --> 00:30:35,820 Dar nu în mod necesar chiuveta în pentru toată lumea în public. 703 00:30:35,820 --> 00:30:38,230 Astfel încât veți găsi codul walkthroughs pentru majoritatea exemplelor 704 00:30:38,230 --> 00:30:40,950 ceea ce facem aici, în curs, astfel încât să poate merge prin ea în ritmul propriu 705 00:30:40,950 --> 00:30:43,580 și înapoi sau rapid înainte sau sări cu totul, dacă doriți. 706 00:30:43,580 --> 00:30:45,356 >> Există de multe ori câteva întrebări Warm-up care 707 00:30:45,356 --> 00:30:47,105 vă întreb pentru a sorta de consolida acest material 708 00:30:47,105 --> 00:30:50,250 și asigurați-vă că sunteți confortabil înainte a continua cu restul de PSET. 709 00:30:50,250 --> 00:30:51,700 Și apoi, desigur, acolo e PSET sine. 710 00:30:51,700 --> 00:30:53,450 Și unul dintre lucrurile am foarte în mod deliberat 711 00:30:53,450 --> 00:30:57,202 face în CS50 este aproape în fiecare neinteresant sau neinteresant intelectual 712 00:30:57,202 --> 00:30:58,910 pas mecanic care s-ar putea trebuie să faci 713 00:30:58,910 --> 00:31:00,519 este aproape întotdeauna foarte bine documentat. 714 00:31:00,519 --> 00:31:03,560 Pe parcursul termenului, vom începe să pună întrebări retorice mai 715 00:31:03,560 --> 00:31:06,187 ca amintiți-vă cum se face acest lucru sau că? 716 00:31:06,187 --> 00:31:08,520 Dar, în general, veți găsi că seturile problemă te 717 00:31:08,520 --> 00:31:10,269 prin mecanica de ceva, astfel încât 718 00:31:10,269 --> 00:31:14,160 interesante provocări, intelectuale sunt în cele din urmă a plecat să-ți student. 719 00:31:14,160 --> 00:31:17,390 >> Cu care a spus, Zamyla, la care ne-am păstrate de trimitere astăzi în curs, 720 00:31:17,390 --> 00:31:20,190 este unul dintre personalul nostru de mult timp membru care deține, de asemenea, walkthroughs 721 00:31:20,190 --> 00:31:24,520 pe probleme specifice, cum ar fi PSET mario și lacomi, deși nu uda in acest an. 722 00:31:24,520 --> 00:31:26,540 Și este în cele walkthroughs că de multe ori 723 00:31:26,540 --> 00:31:29,450 oferă câteva sfaturi și trucuri pentru cum să procedeze, nu vă spun 724 00:31:29,450 --> 00:31:31,810 exact ce să fac, dar rather-- ca o condiție, 725 00:31:31,810 --> 00:31:35,200 dacă will-- oferindu-vă cel puțin o cateva idei, astfel încât este de până la tine, 726 00:31:35,200 --> 00:31:37,830 în cele din urmă, pentru a decide cum să le abordeze. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: ca un fel de nivel înalt înțelegere a logicii a ceea ce 728 00:31:41,200 --> 00:31:42,220 noi vă cerem să faci. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Exact. 730 00:31:42,485 --> 00:31:44,190 Și, de fapt, Zamyla lui walkthroughs sunt destinate 731 00:31:44,190 --> 00:31:46,190 Pentru a răspunde la frecvent întrebare pusă de unde 732 00:31:46,190 --> 00:31:48,610 nu am inceput, mai ales atunci când aceste specificații sunt lungi 733 00:31:48,610 --> 00:31:51,960 un pic descurajatoare dat tot textul și imagini pe care le au în ele. 734 00:31:51,960 --> 00:31:54,890 >> Deci water.c, veți găsi după ce ați terminat, 735 00:31:54,890 --> 00:31:56,920 este, de fapt relativ simplu. 736 00:31:56,920 --> 00:31:58,882 Absolut sunt o grămadă de gând să-bang-ului vă 737 00:31:58,882 --> 00:32:01,840 capetele de perete încercând să dau seama de ce nu este compilarea 738 00:32:01,840 --> 00:32:03,450 sau de ce nu execută corect. 739 00:32:03,450 --> 00:32:05,040 Dar, odată ce ați terminat cu ea și odată ce ați 740 00:32:05,040 --> 00:32:07,620 petrecut ceva timp lupte cu orice de bug-uri pe care le-ar putea avea, 741 00:32:07,620 --> 00:32:09,490 veți găsi că este un program foarte scurt. 742 00:32:09,490 --> 00:32:11,770 Aceasta se poate face în doar câteva linii de cod, dintre care cele mai multe 743 00:32:11,770 --> 00:32:15,030 am vazut aici, în curs deja, în cazul în care va asambla blocurile potrivite. 744 00:32:15,030 --> 00:32:16,810 >> Și, după cum vă sugerăm aici, o să ceară 745 00:32:16,810 --> 00:32:22,250 să specificați cât de multe minute cineva este de a lua un duș în campus. 746 00:32:22,250 --> 00:32:24,779 Mentionam în problema stabili rata de curgere a apei 747 00:32:24,779 --> 00:32:27,320 în, cum ar fi, un duș cu debit scăzut cap, la fel ca clipul Seinfeld 748 00:32:27,320 --> 00:32:29,180 am văzut ieri sau opusul acestora. 749 00:32:29,180 --> 00:32:30,971 Și apoi doar ai pentru a face un pic de matematica, 750 00:32:30,971 --> 00:32:34,710 really-- aritmetică folosind C pentru a spune ne cât de multe, aproximativ, sticle de apă 751 00:32:34,710 --> 00:32:37,720 este că, echivalent cu dacă suntem ținând seama de o cabină de duș n-minute. 752 00:32:37,720 --> 00:32:41,389 >> Acum, în mario.c, acest lucru se întâmplă să fie un program de puțin mai lungă. 753 00:32:41,389 --> 00:32:42,930 Tot nu va fi atât de mult. 754 00:32:42,930 --> 00:32:45,130 Doar câteva linii mai lungi de water.c. 755 00:32:45,130 --> 00:32:48,230 Dar va fi oportunitate pentru a recrea vechi scoala Mario 756 00:32:48,230 --> 00:32:50,670 piramida de la Super Mario Brothers sau unele follow-on. 757 00:32:50,670 --> 00:32:53,510 Nu va arata la fel de frumoasa pentru a sau fel de colorat ca să rețină acolo. 758 00:32:53,510 --> 00:32:56,468 Noi doar de gând să utilizeze hashtags mici ca avem aici pe ecran 759 00:32:56,468 --> 00:32:58,120 folosind text ASCII. 760 00:32:58,120 --> 00:33:00,362 Dar va aproxima aceeași idee. 761 00:33:00,362 --> 00:33:02,570 Și se va fi un exercită că la prima vedere 762 00:33:02,570 --> 00:33:04,720 pare destul de simple-- doar imprima o piramidă simplu. 763 00:33:04,720 --> 00:33:07,345 Dar există câteva caracteristici o aici, care sunt interesante. 764 00:33:07,345 --> 00:33:12,400 Observați că marginea din dreapta a piramida are de fapt două lățime. 765 00:33:12,400 --> 00:33:14,570 Deci nu e de două egal coloane înălțime, care 766 00:33:14,570 --> 00:33:16,804 face aceasta necesită un pic pic de gândire pentru a face 767 00:33:16,804 --> 00:33:19,720 vă că aveți că exact drept, așa cum spre deosebire de doar un unghi perfect 768 00:33:19,720 --> 00:33:20,220 linia. 769 00:33:20,220 --> 00:33:23,340 Așa că e un pic de un caz de colț dar se potrivește cu jocul actual. 770 00:33:23,340 --> 00:33:27,610 >> Și este, de asemenea, non-evident, la prima privire modul de imprimare în spațiul alb. 771 00:33:27,610 --> 00:33:29,430 Așa că, atunci când mă uit la ieșire here-- eșantion 772 00:33:29,430 --> 00:33:32,440 și este, de asemenea, în spec-- ea un fel de arata ca un dreptunghi, 773 00:33:32,440 --> 00:33:35,120 dar un diagonală a dreptunghi a fost tăiat, 774 00:33:35,120 --> 00:33:37,320 și este doar spații albe, ca să spunem așa. 775 00:33:37,320 --> 00:33:40,100 Și astfel o des cerut Întrebarea aici este întotdeauna, bine, 776 00:33:40,100 --> 00:33:43,302 cum pot muta hashtags peste la dreapta? 777 00:33:43,302 --> 00:33:44,760 Sau cum imprim spațiile goale? 778 00:33:44,760 --> 00:33:46,860 Și este de fapt mai ușor decât majoritatea studenților cred. 779 00:33:46,860 --> 00:33:47,360 Dreapta? 780 00:33:47,360 --> 00:33:51,620 Puteți să-l aproxima vizual de doar lovind bara de spațiu o dată sau de două ori 781 00:33:51,620 --> 00:33:52,700 sau trei ori. 782 00:33:52,700 --> 00:33:56,260 >> Și astfel, chiar dacă cu printf ne aproape imprima întotdeauna un șir sau un int 783 00:33:56,260 --> 00:33:59,950 sau un cuvânt ca "Bună ziua, lumea "sau serie de cuvinte, 784 00:33:59,950 --> 00:34:03,560 puteți, de asemenea, pur și simplu imprima Citat, spațiu, încheiat citatul. 785 00:34:03,560 --> 00:34:06,320 Și care va oferi de fapt ai un spatiu alb acolo. 786 00:34:06,320 --> 00:34:08,330 Astfel încât să păstreze în minte și Nu gândi prea asta. 787 00:34:08,330 --> 00:34:10,570 Trebuie într-adevăr să decidă rând de rând cu rând, 788 00:34:10,570 --> 00:34:14,280 nu spre deosebire de exemplul tău un clipă în urmă, cât de mulți dintre cei 789 00:34:14,280 --> 00:34:18,420 coloane ar trebui să fie spații albe și cât de multe dintre ele ar trebui să fie hashtags. 790 00:34:18,420 --> 00:34:21,560 Acesta va lua un pic de timp, dar este în cele din urmă un puzzle logică de felul. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Da. 792 00:34:22,060 --> 00:34:25,060 Dar logica de a merge rând cu rând va fi foarte util aici. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Da. 794 00:34:25,810 --> 00:34:28,976 Cred că acest cod de probă vă gave-- chiar deși nu a fost un program complet. 795 00:34:28,976 --> 00:34:34,247 Ai nevoie de încă Int și principal și stdio.h gol și #include, 796 00:34:34,247 --> 00:34:35,580 o mulțime de lucruri de la curs. 797 00:34:35,580 --> 00:34:37,629 Dar blocurile par a fi acolo. 798 00:34:37,629 --> 00:34:39,920 Și apoi în cele din urmă este ceva un pic mai mult algoritmic. 799 00:34:39,920 --> 00:34:43,210 Deci, se dovedește că de fiecare dată când du-te în CVS sau orice magazin 800 00:34:43,210 --> 00:34:47,810 și cineva te dă la facturile casier sau monede ar fi schimbările, 801 00:34:47,810 --> 00:34:50,620 se dovedește că acestea, oamenii, dacă sunt sau nu-l cunosc sau nu, 802 00:34:50,620 --> 00:34:53,300 sunt, probabil, folosind ceea ce este numit un algoritm greedy, 803 00:34:53,300 --> 00:34:58,170 care dacă sunteți dator, să zicem, $ 21 în schimbare, deoarece pentru un motiv oarecare 804 00:34:58,170 --> 00:35:01,580 ai cumparat ceva foarte ieftin cu un proiect de lege foarte mare la CVS, 805 00:35:01,580 --> 00:35:05,910 ar fi foarte enervant dacă casier ți-a dat 21 de single sau, mai rău 806 00:35:05,910 --> 00:35:07,629 totuși, o mulțime de monede. 807 00:35:07,629 --> 00:35:10,670 Mai degrabă, ceea ce o persoană rezonabilă este probabil de gând să faci este au de gand 808 00:35:10,670 --> 00:35:14,224 pentru a apuca un 20- $ și apoi un proiect de lege-1 $, și voi preda doar două proiecte de lege în acest caz. 809 00:35:14,224 --> 00:35:17,390 MARIA: Așa că te caută să reducă la minimum schimbarea pe care le dau înapoi. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Exact. 811 00:35:17,850 --> 00:35:19,540 Și aceeași afacere cu monede, de asemenea. 812 00:35:19,540 --> 00:35:23,040 Dacă sunteți dator, să zicem, $ 0,50 sperăm că nu vrei 50 mărunțiș. 813 00:35:23,040 --> 00:35:25,500 Vrei loc doi trimestre, de exemplu. 814 00:35:25,500 --> 00:35:27,540 Acum, acest lucru nu presupune care casierul a 815 00:35:27,540 --> 00:35:29,940 destul de fiecare denominațiune care el sau ea ar putea să doriți să vă dau. 816 00:35:29,940 --> 00:35:32,148 Dar noi vă permit să-și asume la fel de mult în problema. 817 00:35:32,148 --> 00:35:35,590 Și poarta în cele din urmă, este de a pună în aplicare în cod C-un algoritm greedy. 818 00:35:35,590 --> 00:35:37,344 Deci utilizatorului i se permite să tastați în cât de mult 819 00:35:37,344 --> 00:35:40,510 schimba el sau ea se datorează cu dolari și cenți, un fel de virgulă mobilă 820 00:35:40,510 --> 00:35:41,590 Valoarea probabil. 821 00:35:41,590 --> 00:35:45,530 Și apoi ce trebuie sa faci matematica și dau seama algoritmic, bine, 822 00:35:45,530 --> 00:35:49,020 cât de multe monede pot da vă minim pentru a vă oferi 823 00:35:49,020 --> 00:35:50,270 exact acea cantitate de schimbare. 824 00:35:50,270 --> 00:35:53,470 Dar nu va fi o câteva piese de complicat aici, nu? 825 00:35:53,470 --> 00:35:56,236 Ca nu e întreg problemă imprecizie. 826 00:35:56,236 --> 00:35:56,860 MARIA: Exact. 827 00:35:56,860 --> 00:35:59,114 Deci punctul plutitoare Valorile au imprecizie. 828 00:35:59,114 --> 00:36:00,780 Am vorbit despre acest lucru in curs de astăzi? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Am facut ultima dată în curs. 830 00:36:02,340 --> 00:36:03,506 Am vorbit despre imprecizie. 831 00:36:03,506 --> 00:36:08,840 Și nu vrei să trișeze utilizator de cât de mult schimba el sau ea se datorează. 832 00:36:08,840 --> 00:36:11,290 Și astfel de revizuire, în caietul de sarcini problema stabilit, 833 00:36:11,290 --> 00:36:15,990 da unele crezut, în cele din urmă, cu privire la cum poti atenua aceste imprecizie 834 00:36:15,990 --> 00:36:17,280 erori, potențial. 835 00:36:17,280 --> 00:36:21,050 Este evitată, cu siguranță, pentru intrările vorbim despre. 836 00:36:21,050 --> 00:36:23,590 Și, de fapt, pennies-- poate vom amâna la Zamyla, 837 00:36:23,590 --> 00:36:25,136 Cred că, pentru trucuri de acolo. 838 00:36:25,136 --> 00:36:27,760 Deci în cele din urmă, veți găsi o progresie de probleme în această săptămână, 839 00:36:27,760 --> 00:36:30,700 dintre care primul este destul de mic, apoi mediu, apoi un pic mai mare. 840 00:36:30,700 --> 00:36:33,200 Dar toate le folosesc clădirii blocuri din această săptămână trecut, 841 00:36:33,200 --> 00:36:35,280 din acest supersecțiune, set specificație problemă 842 00:36:35,280 --> 00:36:36,710 te pune la resurse nenumărate. 843 00:36:36,710 --> 00:36:41,000 Dar totuși, dacă la toate lupta, în special în rândul celor mai puțin confortabil 844 00:36:41,000 --> 00:36:42,917 cu nici un fundal prealabilă, vin la ore de birou 845 00:36:42,917 --> 00:36:44,958 luni și marți și Miercuri și joi. 846 00:36:44,958 --> 00:36:46,950 Du-te la CS50 Discuta prin site-ul cursului, 847 00:36:46,950 --> 00:36:49,080 prin care puteți chat cu personalul și colegii. 848 00:36:49,080 --> 00:36:51,670 >> Dar în cele din urmă, cred că cel mai bun sfat este doar începe devreme. 849 00:36:51,670 --> 00:36:54,711 Nu e genul de clasa pe care le ar trebui să fie începând psets miercuri 850 00:36:54,711 --> 00:36:56,640 noapte, sau mai rău joi seara. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: cel mai bun Sfatul meu este să fi început de luni. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: luni. 853 00:36:59,900 --> 00:37:02,490 Deci, dacă nu au început already-- nr. 854 00:37:02,490 --> 00:37:04,732 Dar chiar dacă nu luni, apoi marți. 855 00:37:04,732 --> 00:37:05,690 Mai devreme cu atât mai bine. 856 00:37:05,690 --> 00:37:08,605 Și asta e motivul pentru care Desigur are atât de multe de întârziere zile este 857 00:37:08,605 --> 00:37:10,535 pentru a vă oferi un pic de o presiune psihologică 858 00:37:10,535 --> 00:37:13,684 pentru a începe mai devreme, dar încă să lucruri alunecare atunci când lucrurile dura mai mult 859 00:37:13,684 --> 00:37:14,350 decât vă așteptați. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: Și vrei să facă uz de orelor de serviciu la fel de mult ca tine poate, de asemenea. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Orice întrebări? 862 00:37:20,291 --> 00:37:20,790 In regula. 863 00:37:20,790 --> 00:37:22,930 Ei bine, de ce nu ne suspenda aici? 864 00:37:22,930 --> 00:37:23,487