1 00:00:00,000 --> 00:00:03,353 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Ciao a tutti. 4 00:00:06,050 --> 00:00:07,777 Questo è il supersection di CS50. 5 00:00:07,777 --> 00:00:09,860 Sezioni assegnati non sarà partire per un'altra settimana. 6 00:00:09,860 --> 00:00:11,580 E così oggi, sono qui with-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to realtà dare un'occhiata al problema 9 00:00:14,163 --> 00:00:16,110 impostare uno, il corso del prime settimane di materiale, 10 00:00:16,110 --> 00:00:19,780 farti orientato con CS50 IDE, un po ' di Linux, il sistema operativo che è 11 00:00:19,780 --> 00:00:22,290 esecuzione su IDE, nonché guardare alcune delle transizione 12 00:00:22,290 --> 00:00:25,730 da zero a C leader fino a un problema impostare. 13 00:00:25,730 --> 00:00:28,340 >> Quindi, senza ulteriori indugi, in problema impostare una, 14 00:00:28,340 --> 00:00:30,520 si sta andando ad essere introdotto per CS50 IDE, che 15 00:00:30,520 --> 00:00:33,230 è questa programmazione web-based ambiente che usiamo per 16 00:00:33,230 --> 00:00:34,280 scrivere programmi. 17 00:00:34,280 --> 00:00:37,280 E 'stato progettato per apparire molto ricorda un tipico computer 18 00:00:37,280 --> 00:00:39,430 sistema che esegue un operativo sistema chiamato Linux. 19 00:00:39,430 --> 00:00:42,440 Ma è nella cosiddetta nuvola, il che significa tutti in classe 20 00:00:42,440 --> 00:00:45,100 può effettivamente avere la sua conto proprio e usarlo, pure. 21 00:00:45,100 --> 00:00:48,950 >> Così la maggior parte di voi probabilmente non hanno mai usato un ambiente Linux prima o forse 22 00:00:48,950 --> 00:00:50,447 anche un ambiente a riga di comando. 23 00:00:50,447 --> 00:00:52,280 E una riga di comando ambiente è diverso. 24 00:00:52,280 --> 00:00:53,200 E 'tutto testuale. 25 00:00:53,200 --> 00:00:54,730 E 'tutto i comandi della tastiera. 26 00:00:54,730 --> 00:00:59,480 E non è mousing, nessuna icona, senza finestre di dialogo, nessun menu. 27 00:00:59,480 --> 00:01:00,212 E 'puramente testo. 28 00:01:00,212 --> 00:01:01,920 Così in un primo momento, che tipo di si sente come un passo 29 00:01:01,920 --> 00:01:04,434 indietro in termini di sofisticazione. 30 00:01:04,434 --> 00:01:06,600 Ma finisce per essere un sacco più potente, certamente, 31 00:01:06,600 --> 00:01:08,510 per uno scienziato informatico, in ultima analisi. 32 00:01:08,510 --> 00:01:09,540 >> Quindi, diamo uno sguardo. 33 00:01:09,540 --> 00:01:13,850 Eccomi a CS50.io, attraverso la quale è possibile accedere al CS50 IDE. 34 00:01:13,850 --> 00:01:17,414 E proprio come in Scratch, c'è tre aree principali di questa schermata. 35 00:01:17,414 --> 00:01:20,080 Così sul lato sinistro, abbiamo quale sarà il browser di file. 36 00:01:20,080 --> 00:01:22,413 E c'è questa cartella in superiore, che è in questo momento vuoto 37 00:01:22,413 --> 00:01:24,690 da quando mi sono liberato di tutti i miei file prima supersection. 38 00:01:24,690 --> 00:01:27,599 Ed è qui che faremo salvare i file C che scriviamo. 39 00:01:27,599 --> 00:01:30,890 In alto a destra, abbiamo un posto dove tutto il nostro codice sta per ottenere scritta. 40 00:01:30,890 --> 00:01:34,610 E in effetti, se clicco questo plus, questo sta per farmi scegliere Nuovo File. 41 00:01:34,610 --> 00:01:38,310 E qui posso iniziare a scrivere codice C o, davvero, qualsiasi numero di altre lingue. 42 00:01:38,310 --> 00:01:42,670 >> E quindi nella parte inferiore dove dice jharvard @ ide50-- e la tua volontà 43 00:01:42,670 --> 00:01:45,080 dire qualcosa di un po different-- cosa si chiama? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Finestra Terminale. 46 00:01:49,310 --> 00:01:49,570 Già. 47 00:01:49,570 --> 00:01:51,810 Così la finestra del terminale è la cosiddetta linea di comando 48 00:01:51,810 --> 00:01:55,540 interfaccia tramite la quale è possibile interagire con il sistema operativo sottostante. 49 00:01:55,540 --> 00:01:58,220 E per ora, stiamo andando a fare molto poco uso di questo-- 50 00:01:58,220 --> 00:02:01,170 solo per la compilazione, a guardare i messaggi di errore che vediamo, 51 00:02:01,170 --> 00:02:02,347 e di eseguire i nostri programmi. 52 00:02:02,347 --> 00:02:04,680 Ma alla fine, stiamo andando a fare molto di più, pure. 53 00:02:04,680 --> 00:02:07,490 E si può anche installare il software e gestire il vostro spazio di lavoro 54 00:02:07,490 --> 00:02:09,066 all'interno CS50 IDE, pure. 55 00:02:09,066 --> 00:02:10,440 Ma più che un'altra volta. 56 00:02:10,440 --> 00:02:12,689 >> Quindi cerchiamo di andare avanti e scrivere un programma molto semplice basta 57 00:02:12,689 --> 00:02:15,064 di passare attraverso un warm-up di hello.c, che è forse 58 00:02:15,064 --> 00:02:16,480 il programma più semplice si può scrivere. 59 00:02:16,480 --> 00:02:18,330 Ho già aperto una nuova scheda. 60 00:02:18,330 --> 00:02:24,310 Ho intenzione di andare avanti e dire includere io.h. norma 61 00:02:24,310 --> 00:02:25,325 Poi int main (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 E poi printf ("ciao, mondo" backslash n, vicino citazione, 64 00:02:35,200 --> 00:02:39,480 chiudere parentesi e virgola. 65 00:02:39,480 --> 00:02:39,990 >> Tutto ok. 66 00:02:39,990 --> 00:02:41,700 Così ora si noti la mia finestra è senza titolo. 67 00:02:41,700 --> 00:02:44,840 Così sto andando molto rapidamente per salire su File, Salva. 68 00:02:44,840 --> 00:02:46,910 Ed è importante che Io chiamo questo non "ciao". 69 00:02:46,910 --> 00:02:49,243 Quindi un errore molto comune, soprattutto in problema dell'insieme uno, 70 00:02:49,243 --> 00:02:52,530 è di chiamare accidentalmente solo il tuo programma di "acqua" o "avidi" o "Mario" 71 00:02:52,530 --> 00:02:53,890 o "credito" o simili. 72 00:02:53,890 --> 00:02:55,970 Ma si vuole realmente fare Assicuratevi di avere l'estensione del file 73 00:02:55,970 --> 00:02:58,928 perché questo è l'unico modo che il compilatore e anche l'editor di codice 74 00:02:58,928 --> 00:03:00,710 sa che sei in realtà la scrittura di codice C. 75 00:03:00,710 --> 00:03:02,280 Così mi permetta di andare avanti e fare clic su Salva. 76 00:03:02,280 --> 00:03:05,710 >> E ora, anche, che cosa CS50 IDE ha fatto per noi è è anche 77 00:03:05,710 --> 00:03:07,120 sintassi evidenziata tutto. 78 00:03:07,120 --> 00:03:08,822 Così è fatto tutto molto colorato. 79 00:03:08,822 --> 00:03:10,780 E l'intero scopo di che non è funzionale. 80 00:03:10,780 --> 00:03:14,290 E 'solo per attirare gli occhi per la concettualmente diversi pezzi 81 00:03:14,290 --> 00:03:15,310 di questo programma. 82 00:03:15,310 --> 00:03:17,570 Quindi cerchiamo di andare avanti e compilare questo. 83 00:03:17,570 --> 00:03:19,490 E posso compilare questo in un paio di modi. 84 00:03:19,490 --> 00:03:22,010 E nella prima settimana, il modo vecchia scuola abbiamo fatto 85 00:03:22,010 --> 00:03:26,250 era letteralmente al "hello.c clang." Comando line-- 86 00:03:26,250 --> 00:03:27,596 E poi mi ha colpito Invio. 87 00:03:27,596 --> 00:03:29,720 E nulla sembra accadere nella finestra del terminale. 88 00:03:29,720 --> 00:03:32,654 Ma che cosa ha fatto cambiare nell'IDE? 89 00:03:32,654 --> 00:03:35,320 Dove, ancora una volta, IDE significa solo Ambiente di sviluppo integrato. 90 00:03:35,320 --> 00:03:38,360 E 'un modo elegante per dire questo sviluppo integrato 91 00:03:38,360 --> 00:03:40,620 ambiente per lo sviluppo di software. 92 00:03:40,620 --> 00:03:42,477 Allora, cosa è cambiato nell'interfaccia utente? 93 00:03:42,477 --> 00:03:44,310 Che cosa avete notato è diverso, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: ho notato una cosa sotto il IDE50 cartella qui. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Sì. 96 00:03:47,850 --> 00:03:50,230 Così qui, non solo dobbiamo "hello.c." 97 00:03:50,230 --> 00:03:53,120 Abbiamo anche "a.out", che è razza di nome muto per un programma. 98 00:03:53,120 --> 00:03:56,430 Ma in effetti, è il nome predefinito di un programma quando si compila il codice basta 99 00:03:56,430 --> 00:03:59,110 e non dire al compilatore quale file di output. 100 00:03:59,110 --> 00:04:01,790 Quindi, se voglio correre questo, bisogno di dire la compiler-- 101 00:04:01,790 --> 00:04:05,340 o meglio, ho bisogno di dire l'area di lavoro che ho 102 00:04:05,340 --> 00:04:09,780 desidera eseguire il programma chiamato "a.out". 103 00:04:09,780 --> 00:04:10,550 Invio. 104 00:04:10,550 --> 00:04:12,474 E c'è "ciao, "ora il" ./ "mondo.. 105 00:04:12,474 --> 00:04:13,390 in realtà è importante. 106 00:04:13,390 --> 00:04:16,050 Anche se di solito abbiamo solo scrivere i nomi dei comandi, 107 00:04:16,050 --> 00:04:19,060 quando si tratta di un programma che hai scritta, si vuole dire "./" 108 00:04:19,060 --> 00:04:22,460 perché che racconta esplicitamente Linux che si desidera eseguire un programma chiamato 109 00:04:22,460 --> 00:04:26,930 "a.out" che è in questo, dove puntino significa che questo elenco che sono attualmente 110 00:04:26,930 --> 00:04:31,600 in, che risulta essere chiamato spazio di lavoro, "a.out. 111 00:04:31,600 --> 00:04:35,410 Perché se ho appena detto "a.out," Enter, Ho intenzione di ottenere "a.out comando non 112 00:04:35,410 --> 00:04:38,035 trovato "perché la computer-- perché ho inventato "a.out;" 113 00:04:38,035 --> 00:04:40,910 non è venuto con il computer-- non sa dove cercarlo, 114 00:04:40,910 --> 00:04:43,590 anche se è giusto sotto il naso, per così dire. 115 00:04:43,590 --> 00:04:44,090 OK. 116 00:04:44,090 --> 00:04:49,910 Così abbiamo potuto cambiare questo a essere "clang -o ciao hello.c." 117 00:04:49,910 --> 00:04:53,030 E se premi invio, quale programma è questa intenzione di uscita per me? 118 00:04:53,030 --> 00:04:55,710 Qual è il nome del file? 119 00:04:55,710 --> 00:04:57,500 Sì, in parte posteriore. 120 00:04:57,500 --> 00:04:58,479 Giusto. "Ciao." 121 00:04:58,479 --> 00:05:00,520 Quindi, "ciao" sta per essere il nome del programma 122 00:05:00,520 --> 00:05:04,610 perché abbiamo usato un cosiddetto argomento della riga di comando, che è solo 123 00:05:04,610 --> 00:05:08,120 un modo di cambiare il comportamento il compilatore effettivamente uscita 124 00:05:08,120 --> 00:05:09,450 un nome file specifico. 125 00:05:09,450 --> 00:05:12,400 E in effetti, se io lo zoom fuori e cercare qui, 126 00:05:12,400 --> 00:05:17,430 ora ho solo "a.out" e "ciao.c", ma anche "ciao", così. 127 00:05:17,430 --> 00:05:22,410 Così ora posso fare "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 E c'è "ciao, mondo". 129 00:05:23,640 --> 00:05:25,640 Ma lastly-- e questo sarà ora la convenzione 130 00:05:25,640 --> 00:05:27,590 usiamo tutta la semestre, typically-- 131 00:05:27,590 --> 00:05:30,070 è che si può anche semplicemente dire "fare ciao." 132 00:05:30,070 --> 00:05:33,370 E in effetti, sta dicendo che è in su fino ad oggi perché esiste già. 133 00:05:33,370 --> 00:05:37,860 Lasciami andare avanti e rimuovere, con il comando rm, entrambi "a.out" - 134 00:05:37,860 --> 00:05:39,644 e dire "togliere regolare a.out file?" 135 00:05:39,644 --> 00:05:41,810 Ciò significa che solo, sei tu sicuri di voler cancellare? 136 00:05:41,810 --> 00:05:42,880 Io vado a dire di sì. 137 00:05:42,880 --> 00:05:46,690 E poi ho intenzione di togliere "ciao", ma non "hello.c." 138 00:05:46,690 --> 00:05:49,920 Sto per dire "sì" in modo esplicito, ma "y" è sufficiente, come bene. 139 00:05:49,920 --> 00:05:52,140 >> E ora notare se io tipo ls-- che, ricordo, 140 00:05:52,140 --> 00:05:55,540 significa list-- elenca tutto dei file nella mia cartella. 141 00:05:55,540 --> 00:05:57,850 E in effetti, se io lo zoom fuori e guardare in alto a sinistra, 142 00:05:57,850 --> 00:05:59,730 conferma che ciò che è in questa cartella, anche 143 00:05:59,730 --> 00:06:04,990 anche se è etichettato come IDE50 qui e non di lavoro, è solo "hello.c." 144 00:06:04,990 --> 00:06:09,152 Così ora qui, se io fare "fare ciao," Enter, 145 00:06:09,152 --> 00:06:12,360 ora vedo un comando molto più lungo, ma un più sofisticato di comando che sta succedendo 146 00:06:12,360 --> 00:06:13,940 per essere utile nelle settimane a venire. 147 00:06:13,940 --> 00:06:16,720 E ora posso dire "./ciao." 148 00:06:16,720 --> 00:06:19,257 >> Quindi facciamo un rapido giro comandi di qualche altro Linux. 149 00:06:19,257 --> 00:06:21,840 Allora perché non facciamo un passo indietro ed effettivamente guardare C più 150 00:06:21,840 --> 00:06:25,020 in generale, la transizione da zero a C, e poi concludere con uno sguardo 151 00:06:25,020 --> 00:06:27,305 al primo problema ambientato in C. Va bene. 152 00:06:27,305 --> 00:06:30,430 Quindi ho intenzione di andare avanti e appena pulito il mio spazio di lavoro con Control-L solo 153 00:06:30,430 --> 00:06:31,429 per mantenere lo schermo pulito. 154 00:06:31,429 --> 00:06:33,520 Ma che non ha funzionale impatto altrimenti. 155 00:06:33,520 --> 00:06:35,820 >> Ricordiamo che abbiamo visto alcuni comandi ora. 156 00:06:35,820 --> 00:06:39,900 Così abbiamo visto clang, che in genere si non dovranno eseguire più manualmente. 157 00:06:39,900 --> 00:06:41,650 Ti invece fanno uso. 158 00:06:41,650 --> 00:06:45,290 Ma abbiamo anche visto ls, che mostra un elenco dei file nella mia directory. 159 00:06:45,290 --> 00:06:48,750 E ora perché è there-- c'è due file ora, "ciao" e "hello.c." 160 00:06:48,750 --> 00:06:52,240 Perché c'è una stella o un asterisco dopo "ciao"? 161 00:06:52,240 --> 00:06:54,900 Cosa significano che, in base su quello che abbiamo visto nella prima settimana? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 Cosa ne pensi? 164 00:07:00,400 --> 00:07:02,742 Che cosa significa la stella? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: For-- il programma "ciao"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Ciao *". 167 00:07:05,530 --> 00:07:06,330 Già. 168 00:07:06,330 --> 00:07:07,760 O si? 169 00:07:07,760 --> 00:07:08,639 Oh, eseguibile. 170 00:07:08,639 --> 00:07:09,180 Giusto. 171 00:07:09,180 --> 00:07:10,890 Quindi questo significa che "ciao" è eseguibile. 172 00:07:10,890 --> 00:07:13,430 Così infatti, ecco perché Posso fare "./ciao." 173 00:07:13,430 --> 00:07:13,930 Tutto ok. 174 00:07:13,930 --> 00:07:15,179 Allora, cosa altro posso fare qui? 175 00:07:15,179 --> 00:07:17,290 Beh, si scopre che posso creare anche le directory. 176 00:07:17,290 --> 00:07:20,924 Quindi lasciami andare avanti e creare, per esempio, una directory "pset1". 177 00:07:20,924 --> 00:07:23,590 E la specifica problema set vi farà fare esattamente questo, 178 00:07:23,590 --> 00:07:25,260 quindi non c'è bisogno di ricordare oggi. 179 00:07:25,260 --> 00:07:27,340 Ma "mkdir pset1" sembra avere alcun impatto. 180 00:07:27,340 --> 00:07:30,540 Ma ancora una volta, nessun messaggio di errore è generalmente una buona cosa. 181 00:07:30,540 --> 00:07:34,060 Quindi, se digito "ls" now-- ah, ora Ho un file eseguibile denominato 182 00:07:34,060 --> 00:07:36,570 "ciao", un file C denominato "hello.c." 183 00:07:36,570 --> 00:07:40,860 E poi la barra finale, in modo da parlare, significa che si tratta di una directory. 184 00:07:40,860 --> 00:07:42,510 >> Così in effetti, ora voglio aprirlo. 185 00:07:42,510 --> 00:07:45,730 E non fare doppio clic su di esso come in una GUI, un ambiente grafico. 186 00:07:45,730 --> 00:07:48,550 Io invece dico "cd pset1". 187 00:07:48,550 --> 00:07:49,640 Invio. 188 00:07:49,640 --> 00:07:53,100 Niente di interessante sembra avere successo tranne il mio piccolo prompt 189 00:07:53,100 --> 00:07:57,300 qui-- questo è il modo di ricordare di Linux me dove sono io, così che cosa cartella è aperta. 190 00:07:57,300 --> 00:08:00,080 E 'solo che mi dice in modo esplicito al contrario di grafica. 191 00:08:00,080 --> 00:08:05,100 E se digito "ls", perche 'vedo un altro Sollecita subito, pensi, 192 00:08:05,100 --> 00:08:07,269 quando ho elencare il contenuto della pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Probabilmente no avere nulla in là. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Sì. 195 00:08:09,630 --> 00:08:11,510 Allora noi non abbiamo, ovviamente, creato nulla in là 196 00:08:11,510 --> 00:08:13,150 perché ho appena creato la directory. 197 00:08:13,150 --> 00:08:17,690 Ora, se ho voluto creare una file-- per esempio, ho potuto creare un nuovo file. 198 00:08:17,690 --> 00:08:20,190 E poi potrei andare a Salva e salvarlo come, 199 00:08:20,190 --> 00:08:23,090 come, "mario.c" se si sta facendo l'edizione standard di pset uno. 200 00:08:23,090 --> 00:08:27,610 E poi, come qualsiasi Mac o PC, semplicemente scegliere il pset1 cartella ", Salva. 201 00:08:27,610 --> 00:08:28,740 E ora il file è vuoto. 202 00:08:28,740 --> 00:08:31,160 Ma andiamo zoom di nuovo per un secondo. 203 00:08:31,160 --> 00:08:32,470 Facciamo ls qui. 204 00:08:32,470 --> 00:08:34,470 Ora vediamo "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Quindi c'è un paio di altri comandi che sono la pena tenere a mente sulla tempo-- 206 00:08:37,850 --> 00:08:41,200 chiaro, o Control-L è quello che ho stato colpito; mkdir abbiamo visto; 207 00:08:41,200 --> 00:08:45,240 rm abbiamo visto, così, che è per la rimozione o l'eliminazione di un file. 208 00:08:45,240 --> 00:08:49,310 Attenzione è possibile also-- e se si guarda a tutorial online, potrai rm -rf 209 00:08:49,310 --> 00:08:52,630 è un modo molto comune di dire eliminare una cartella che ha roba in esso. 210 00:08:52,630 --> 00:08:54,280 Basta essere super, super attento. 211 00:08:54,280 --> 00:08:58,780 -rf significa ricorsivamente cancellare qualunque essa sia 212 00:08:58,780 --> 00:09:01,150 si sta cercando di eliminare e con forza eliminarlo. 213 00:09:01,150 --> 00:09:04,630 Quindi mezzi ricorsiva se si tratta di una cartella con una cartella con una cartella con una cartella, 214 00:09:04,630 --> 00:09:05,690 eliminare tutti loro. 215 00:09:05,690 --> 00:09:08,680 E significa forzatamente fare nemmeno chiedere a me sì o no, sono io sicuro? 216 00:09:08,680 --> 00:09:11,960 Quindi è un modo super pericoloso l'eliminazione di un sacco di roba in fretta. 217 00:09:11,960 --> 00:09:17,210 Ma beware-- troppo spesso fa un intrepido studente accidentalmente eliminare, ad esempio, pset 218 00:09:17,210 --> 00:09:18,000 uno, per esempio. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: E se solo fare -r, che stanno andando 220 00:09:19,833 --> 00:09:21,870 per chiedere loro di ogni singolo file. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Qual è moderatamente fastidioso. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Sì. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Ecco perché molti di noi, se stesso compreso, 224 00:09:25,813 --> 00:09:27,070 Sono l'abitudine di usare rf. 225 00:09:27,070 --> 00:09:27,861 Ma è pericoloso. 226 00:09:27,861 --> 00:09:29,010 Così il compratore si guarda. 227 00:09:29,010 --> 00:09:31,050 E poi è una specie di mv interessante di nome. 228 00:09:31,050 --> 00:09:33,600 Quindi questo è il comando di spostamento, che si sente un po 'strano 229 00:09:33,600 --> 00:09:37,260 perché si può infatti utilizzare per spostare file da un posto all'altro. 230 00:09:37,260 --> 00:09:39,970 Ad esempio, supponiamo che ho incasinato. 231 00:09:39,970 --> 00:09:43,660 Supponiamo che ho creato un nuovo file per il pset. 232 00:09:43,660 --> 00:09:46,320 E ho salvato come "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Ma supponiamo che ho accidentalmente salvarlo in IDE50-- così nel mio lavoro per sé 234 00:09:49,970 --> 00:09:51,580 e non in pset1. 235 00:09:51,580 --> 00:09:53,960 >> Si può vedere quanto in alto a sinistra. 236 00:09:53,960 --> 00:09:55,284 C'è "greedy.c." 237 00:09:55,284 --> 00:09:56,450 E ci sono alcune soluzioni. 238 00:09:56,450 --> 00:09:58,324 Quindi si, posso usare il modo facile da usare eccellente 239 00:09:58,324 --> 00:09:59,740 di appena drag & drop. 240 00:09:59,740 --> 00:10:01,910 E che sarebbe in realtà risolvere questo problema. 241 00:10:01,910 --> 00:10:04,967 Ma oggi, stiamo cercando di guardare modi più arcani ma potenti 242 00:10:04,967 --> 00:10:05,550 di fare questo. 243 00:10:05,550 --> 00:10:07,880 Così mi permetta di prendere "ls" in pset1. 244 00:10:07,880 --> 00:10:09,690 E vedo solo "mario.c." 245 00:10:09,690 --> 00:10:13,450 Lasciami andare avanti e fare "cd ..". 246 00:10:13,450 --> 00:10:15,320 Quindi ancora una volta è la directory del CD cambiamento. 247 00:10:15,320 --> 00:10:18,130 ".." Significa che cosa, però? 248 00:10:18,130 --> 00:10:21,100 L'ultima volta che ho detto "cd pset1 "per andare in pset1. 249 00:10:21,100 --> 00:10:24,360 Così, quando dico "cd ..", che cosa sto facendo? 250 00:10:24,360 --> 00:10:24,910 Indietro. 251 00:10:24,910 --> 00:10:25,150 Già. 252 00:10:25,150 --> 00:10:26,750 >> Così sta andando il cosiddetto genitore. 253 00:10:26,750 --> 00:10:29,730 Andare ad un livello superiore, come uscendo da una cartella. 254 00:10:29,730 --> 00:10:30,500 Così Invio. 255 00:10:30,500 --> 00:10:31,900 E infatti, guarda quello che ha fatto. 256 00:10:31,900 --> 00:10:37,070 Mi ha commosso solo nello spazio di lavoro, invece di in pset1, che è in lavoro. 257 00:10:37,070 --> 00:10:39,710 E ora, se digito "ls", c'è un sacco di roba. 258 00:10:39,710 --> 00:10:41,650 In c'è "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Così ora mi ha lasciato usare mv letteralmente spostare "greedy.c" in pset1. 260 00:10:48,720 --> 00:10:51,120 E così un sacco di comandi Linux lavorare esattamente come questo. 261 00:10:51,120 --> 00:10:54,470 Prendono senza argomenti o prendono uno argomento o prendono due riga di comando 262 00:10:54,470 --> 00:10:55,449 argomenti e così via. 263 00:10:55,449 --> 00:10:57,240 E in questo caso, è letteralmente fare quello 264 00:10:57,240 --> 00:11:01,670 si dice, anche se succinctly-- spostare greedy.c in pset1. 265 00:11:01,670 --> 00:11:02,310 Invio. 266 00:11:02,310 --> 00:11:03,310 Nulla sembra accadere. 267 00:11:03,310 --> 00:11:06,180 Ma se lo faccio di nuovo un ls, avido è andato. 268 00:11:06,180 --> 00:11:12,437 E se lo faccio "cd pset1", Enter, e poi ls di nuovo, ora è nel posto giusto. 269 00:11:12,437 --> 00:11:14,270 Per inciso, se per alcuni reason-- soprattutto 270 00:11:14,270 --> 00:11:16,194 se avete intermittente la connettività di rete 271 00:11:16,194 --> 00:11:18,360 o si sta camminando in giro campus con il coperchio del portatile 272 00:11:18,360 --> 00:11:20,180 chiuso e poi aprirlo di nuovo e il vostro spazio di lavoro 273 00:11:20,180 --> 00:11:21,730 sembra un po 'fuori sincrono, un grosso problema. 274 00:11:21,730 --> 00:11:23,646 Basta caricare il tuo browser finestra, e dovrebbe 275 00:11:23,646 --> 00:11:26,339 risincronizzazione in modo che con la mano sinistra file browser appare esattamente 276 00:11:26,339 --> 00:11:27,380 come la finestra del terminale. 277 00:11:27,380 --> 00:11:27,921 Da non preoccuparsi. 278 00:11:27,921 --> 00:11:31,460 In caso di dubbio, ricaricare la pagina, così fino a quando hai salvato i file già. 279 00:11:31,460 --> 00:11:31,960 OK. 280 00:11:31,960 --> 00:11:34,710 Così mv può essere utilizzato anche per rinominare i file. 281 00:11:34,710 --> 00:11:36,760 E diamo uno sguardo a questo comando finale qui. 282 00:11:36,760 --> 00:11:39,950 Così suppose-- e questo è eccellente comuni, troppo, presto. 283 00:11:39,950 --> 00:11:46,400 Alcuni studenti di tanto in tanto creare un file chiamato, diamo say-- qual è un altro? 284 00:11:46,400 --> 00:11:47,730 Come "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Quindi mi limiterò a gridare, per senza motivo, in tutte le protezioni. 286 00:11:51,080 --> 00:11:53,190 Ma questo non è il corretto nome per il file 287 00:11:53,190 --> 00:11:56,660 se non altro perché il nostro problema impostato specifica non l'ha detto 288 00:11:56,660 --> 00:11:59,430 per salvare il file come tutte le protezioni "WATER.C." 289 00:11:59,430 --> 00:12:01,320 Invece, ci aspettiamo "water.c" in minuscolo. 290 00:12:01,320 --> 00:12:03,140 E, infatti, questo è problematico perché check50, 291 00:12:03,140 --> 00:12:04,370 un programma che si sta andando per rispondere a problemi 292 00:12:04,370 --> 00:12:07,350 impostare uno che verifica automaticamente la correttezza del codice 293 00:12:07,350 --> 00:12:11,615 sta per urlare a voi se non è possibile trovare "water.c" in lettere minuscole. 294 00:12:11,615 --> 00:12:12,712 >> Quindi ho bisogno di risolvere questo problema. 295 00:12:12,712 --> 00:12:14,920 Tanti modi diversi per tale scopo, il primo dei quali 296 00:12:14,920 --> 00:12:18,330 sarebbe quello di Control-clic o clic destro il nome del file e basta cambiare Rinomina. 297 00:12:18,330 --> 00:12:19,740 Tutto bene per farlo. 298 00:12:19,740 --> 00:12:21,820 Ma ancora una volta, oggi, diamo fare un po 'di fantasia. 299 00:12:21,820 --> 00:12:26,680 Usiamo mv cambiare "WATER.C" a "water.c." 300 00:12:26,680 --> 00:12:30,690 Così si può utilizzare anche il primo argomento per rinominare al secondo argomento 301 00:12:30,690 --> 00:12:34,455 Se il secondo argomento non è in Infatti, una cartella o un nome di directory. 302 00:12:34,455 --> 00:12:35,120 >> Tutto ok. 303 00:12:35,120 --> 00:12:39,560 E, infine, un po 'trick-- quindi sono in mia directory di lavoro in questo momento. 304 00:12:39,560 --> 00:12:43,660 Se voglio entrare in pset uno, Posso certamente digitare "cd pset1". 305 00:12:43,660 --> 00:12:47,260 Ma è così noioso digitare "pset1" o più nomi di file o nomi di directory 306 00:12:47,260 --> 00:12:47,980 ancora. 307 00:12:47,980 --> 00:12:51,960 Quindi molto spesso in Linux, cosa si può fare è iniziare a digitare "pse" 308 00:12:51,960 --> 00:12:56,100 e appena annoiarsi, premere Tab, e lasciare la figura del computer fuori per voi. 309 00:12:56,100 --> 00:12:58,190 Super disponibile a entrare in quella abitudine. 310 00:12:58,190 --> 00:13:01,079 L'unico problema è se avete più file o cartelle a partire 311 00:13:01,079 --> 00:13:02,870 con la lettera "p" o "ps", si potrebbe avere 312 00:13:02,870 --> 00:13:05,525 digitare un paio di più prima che il computer sa cosa fare. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Ci piace scorciatoie. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: questa volontà risparmiare così tanto tempo. 315 00:13:08,695 --> 00:13:11,930 E anche, come abbiamo detto in conferenza, è può scorrere verso l'alto nella storia, su e giù, 316 00:13:11,930 --> 00:13:15,461 per trovare recente esecuzione comandi, pure. 317 00:13:15,461 --> 00:13:15,960 Tutto ok. 318 00:13:15,960 --> 00:13:20,904 Così ora, diamo la nostra attenzione indietro di un semplice programma, ciao mondo. 319 00:13:20,904 --> 00:13:22,195 Così abbiamo compilato esattamente questo. 320 00:13:22,195 --> 00:13:24,050 E ora perché non ci prendiamo uno sguardo ai tipi di dati 321 00:13:24,050 --> 00:13:26,776 e poi la transizione da un po 'di corrispondenti blocchi Scratch a C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Quindi, ora che hai iniziato scrittura di programmi in C, 324 00:13:30,031 --> 00:13:32,530 stiamo per iniziare a parlare sui tipi di dati e variabili. 325 00:13:32,530 --> 00:13:37,570 Così alcuni tipi di dati che si vorrebbe sapere da adesso 326 00:13:37,570 --> 00:13:39,400 sono quelli che sono evidenziato in blu. 327 00:13:39,400 --> 00:13:42,420 Così abbiamo int prima, che sta per intero. 328 00:13:42,420 --> 00:13:46,075 E questo vale interi, come si potrebbe avere guessed-- così 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 e tutti gli altri interi che si può pensare. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: E anche negativo. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: E anche quelli negativi, sì. 332 00:13:50,220 --> 00:13:51,450 E 0. 333 00:13:51,450 --> 00:13:54,250 Poi abbiamo carri allegorici, che sono numeri floating point. 334 00:13:54,250 --> 00:13:58,360 Ecco, questo è tutti i numeri reali che hanno punti decimali. 335 00:13:58,360 --> 00:14:03,960 Così 5.0, 5.2, e ancor più le cifre dopo la virgola, 336 00:14:03,960 --> 00:14:05,620 così, e anche quelli negativi. 337 00:14:05,620 --> 00:14:07,530 Poi abbiamo char che è un personaggio. 338 00:14:07,530 --> 00:14:10,240 Quindi penso che abbiamo parlato di questo in conferenza oggi. 339 00:14:10,240 --> 00:14:15,682 Ma abbiamo le lettere, per example-- A, B, C-- che può essere memorizzato come un char. 340 00:14:15,682 --> 00:14:18,390 Ma poi abbiamo un sacco più simboli che possono essere immagazzinate come un char. 341 00:14:18,390 --> 00:14:22,380 E quelli vengono memorizzate come ASCII. 342 00:14:22,380 --> 00:14:25,280 >> E poi abbiamo bool, quali sono booleani. 343 00:14:25,280 --> 00:14:29,067 E quelli restituiscono true o False o 1 e 0, rispettivamente. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: E ricordare che bool proviene dalla biblioteca CS50. 345 00:14:31,650 --> 00:14:33,300 Quindi non è costruito in C, ma è super utile 346 00:14:33,300 --> 00:14:34,850 per avere la nozione di vero e falso. 347 00:14:34,850 --> 00:14:36,990 E anche se si potrebbe think-- fatto divertente. 348 00:14:36,990 --> 00:14:43,700 Un bool bisogno tecnicamente quanti bit, veramente, per rappresentare Vero contro Falso? 349 00:14:43,700 --> 00:14:47,910 Quanti bit pensi si avrebbe bisogno, al massimo? 350 00:14:47,910 --> 00:14:48,790 Sì, solo uno. 351 00:14:48,790 --> 00:14:52,077 Così si scopre che C Non si può fare solo un po '. 352 00:14:52,077 --> 00:14:54,160 La più piccola unità di misura si può ottenere è otto. 353 00:14:54,160 --> 00:14:57,090 Quindi è un po 'uno spreco che siete utilizzando un intero byte o otto bit, 354 00:14:57,090 --> 00:14:58,340 per rappresentare Vero o Falso. 355 00:14:58,340 --> 00:15:01,807 Ma questo è solo il modo in cui è implementato in C dalla biblioteca CS50. 356 00:15:01,807 --> 00:15:04,890 MARIA: E poi quelli che siamo non andare a parlare nel modo più ampio 357 00:15:04,890 --> 00:15:08,060 destra now-- doppio, quello è per i galleggianti più grandi. 358 00:15:08,060 --> 00:15:09,811 Lungo lungo e corto sono anche per gli interi. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: In effetti. 360 00:15:10,643 --> 00:15:13,190 In hacker, edizione di pset uno, che usiamo molto lungo. 361 00:15:13,190 --> 00:15:15,801 Ma per l'edizione standard, non dovrebbe essere necessario. 362 00:15:15,801 --> 00:15:16,300 MARIA: Freddo. 363 00:15:16,300 --> 00:15:17,361 OK. 364 00:15:17,361 --> 00:15:20,110 Così operators-- si dovrebbe essere probabilmente familiarità con la maggior parte di questi. 365 00:15:20,110 --> 00:15:22,620 Inoltre, +; sottrazione, -. 366 00:15:22,620 --> 00:15:24,070 Per la moltiplicazione, abbiamo la *. 367 00:15:24,070 --> 00:15:25,900 Quindi non la X che usiamo di solito. 368 00:15:25,900 --> 00:15:27,840 Divisione, abbiamo la barra rovesciata. 369 00:15:27,840 --> 00:15:31,380 E modulo è il nostro ultimo operatore ci accingiamo a parlare in questo momento. 370 00:15:31,380 --> 00:15:35,610 È un operatore che ci permette di prendere il resto di una divisione. 371 00:15:35,610 --> 00:15:40,630 Quindi, se abbiamo 4% 2, 4 diviso da 2 è 2 con un residuo di 0. 372 00:15:40,630 --> 00:15:41,740 Quindi 4% 2 è 0. 373 00:15:41,740 --> 00:15:42,950 4% 3 è 1. 374 00:15:42,950 --> 00:15:44,870 4% 5 è 4, come si potrebbe immaginare. 375 00:15:44,870 --> 00:15:48,860 E ricordate quando si utilizzano tutti questi ai gestori di utilizzare le regole PEMDAS. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Quindi, per essere chiari, se si fare 4% 2, perché è quello 0, esattamente? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Perché 4 diviso 2 è 2 con il resto di 0. 378 00:15:57,480 --> 00:16:00,752 Così modulo che ci dà resto come opposto al risultato della divisione. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: E in effetti, che cosa troveremo questo utile 380 00:16:02,960 --> 00:16:05,640 per è che in alcuni problemi che non è necessariamente uno, 381 00:16:05,640 --> 00:16:08,040 se si vuole avere la effetto di restringere te 382 00:16:08,040 --> 00:16:10,720 ad un intervallo di numeri come 0 a qualcosa, 383 00:16:10,720 --> 00:16:13,904 è possibile utilizzare modulo per avvolgere prima di quanto come 2 miliardi 384 00:16:13,904 --> 00:16:16,320 o il valore di 4 miliardi di dollari che di cui abbiamo parlato in conferenza. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Sì. 386 00:16:16,870 --> 00:16:19,429 E anche in "greedy" potremmo. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Sì, in problema impostato uno, pure. 388 00:16:21,345 --> 00:16:22,520 MARIA: Sì, bello. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: buon suggerimento. 390 00:16:24,340 --> 00:16:25,750 MARIA: Siamo spiacenti. 391 00:16:25,750 --> 00:16:28,590 Booleano expressions-- così per gli operatori booleani, 392 00:16:28,590 --> 00:16:31,770 ci accingiamo a parlare di tutto di questi che vedete qui. 393 00:16:31,770 --> 00:16:35,310 Quindi in questo momento, abbiamo due segni di uguale incluso eguali. 394 00:16:35,310 --> 00:16:38,650 Così quelli sono per il confronto. 395 00:16:38,650 --> 00:16:40,830 Finora abbiamo visto solo un segno di uguale. 396 00:16:40,830 --> 00:16:44,870 Questo è quando si assegna un valore di una variabile. 397 00:16:44,870 --> 00:16:50,160 Quindi, se abbiamo visto int n = 5, allora abbiamo assegnato 5 alla variabile n. 398 00:16:50,160 --> 00:16:55,600 Ma se vogliamo usare == per confronto, siamo in grado di controllare se n == 5. 399 00:16:55,600 --> 00:16:58,310 E se n == 5, allora è vero. 400 00:16:58,310 --> 00:17:01,950 >> Operatori booleani così ci permettono, in fondo, 401 00:17:01,950 --> 00:17:04,670 per valutare booleano espressioni true o false. 402 00:17:04,670 --> 00:17:07,819 Quindi non abbiamo la equals-- punto esclamativo e uguali. 403 00:17:07,819 --> 00:17:14,240 Così potremmo anche controllare se n non è uguale 5-- così n! = 5. 404 00:17:14,240 --> 00:17:17,640 Meno di, minore o uguale a, maggiore di, maggiore o uguale a, 405 00:17:17,640 --> 00:17:20,720 e poi abbiamo la logica E e la logica OR. 406 00:17:20,720 --> 00:17:24,060 E quelli permettono di valutare molteplici espressioni booleane insieme 407 00:17:24,060 --> 00:17:27,930 a venire fondamentalmente insieme come una intera espressione booleana. 408 00:17:27,930 --> 00:17:34,970 Quindi, se vogliamo trovare un numero, dire, cioè superiore a 5 ma inferiore a 15 409 00:17:34,970 --> 00:17:39,810 Allo stesso tempo, useremmo l' operatore logico AND per vedere se n è 410 00:17:39,810 --> 00:17:42,937 maggiore di 5 && n inferiore a 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: E qui, troppo, è davvero facile 412 00:17:44,770 --> 00:17:47,290 presto per sbaglio utilizzare solo un singolo commerciale 413 00:17:47,290 --> 00:17:48,572 o una singola barra verticale. 414 00:17:48,572 --> 00:17:51,280 E si spera il compilatore urlare contro di voi, perché in realtà 415 00:17:51,280 --> 00:17:52,530 hanno un significato molto diverso. 416 00:17:52,530 --> 00:17:55,660 Per i curiosi, sono utilizzato per operazioni bit per bit, 417 00:17:55,660 --> 00:17:57,197 operano sui singoli bit. 418 00:17:57,197 --> 00:17:58,780 Ma si desidera la coppia di loro qui. 419 00:17:58,780 --> 00:18:01,560 E super importante è che primo, il segno di uguale, 420 00:18:01,560 --> 00:18:05,270 che è l'operatore di uguaglianza come contrasto con l'operatore di assegnazione. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: E la barra verticale è situato tra il Cancella e ritorno. 422 00:18:08,552 --> 00:18:09,260 DAVID MALAN: Sì. 423 00:18:09,260 --> 00:18:11,420 In una tipica tastiera americana. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Sì. 425 00:18:13,190 --> 00:18:15,890 Quindi cerchiamo di saltare a destra in istruzioni condizionali. 426 00:18:15,890 --> 00:18:18,300 In Scratch, hai già visto, probabilmente, 427 00:18:18,300 --> 00:18:22,730 se le dichiarazioni che consentono di controllare se qualcosa è vero, allora 428 00:18:22,730 --> 00:18:23,660 fare qualcosa di diverso. 429 00:18:23,660 --> 00:18:28,410 Così si potrebbe avere voluto per verificare se il vostro sprite è 430 00:18:28,410 --> 00:18:31,410 toccando un altro sprite o il bordo dello schermo. 431 00:18:31,410 --> 00:18:35,520 E allora si potrebbe avere voluto terminare il gioco o fare qualcos'altro. 432 00:18:35,520 --> 00:18:40,000 Così la sintassi per tale è "if (condizione)." 433 00:18:40,000 --> 00:18:46,820 Quindi, se il vostro sprite sta toccando qualcosa, poi non è all'interno delle parentesi graffe. 434 00:18:46,820 --> 00:18:48,980 >> Poi abbiamo if-else. 435 00:18:48,980 --> 00:18:54,080 Altrimenti ci permette di fare qualcosa se la condizione che 436 00:18:54,080 --> 00:18:55,870 verificare in principio non è vero. 437 00:18:55,870 --> 00:19:01,530 Quindi, se lo sprite sta toccando il confine farlo, altrimenti fare qualcosa di diverso. 438 00:19:01,530 --> 00:19:04,030 Così altrimenti fare qualcosa di diverso. 439 00:19:04,030 --> 00:19:07,530 Poi abbiamo un breve esempio di questo. 440 00:19:07,530 --> 00:19:11,551 Quindi, se (military_time <12), si vogliono printf "Buongiorno!" 441 00:19:11,551 --> 00:19:13,300 Altrimenti andremo a printf "Buona sera!" 442 00:19:13,300 --> 00:19:14,860 Esempio di base. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: Good. 444 00:19:15,680 --> 00:19:16,760 >> MARIA: Freddo. 445 00:19:16,760 --> 00:19:18,560 Così ora abbiamo istruzioni switch. 446 00:19:18,560 --> 00:19:21,960 Passare le dichiarazioni in generale possa ci permettono di fare un sacco della stessa cosa 447 00:19:21,960 --> 00:19:25,070 che abbiamo appena parlato circa con if. 448 00:19:25,070 --> 00:19:29,440 Ad esempio, in questo momento abbiamo la forma generale l'istruzione switch 449 00:19:29,440 --> 00:19:33,870 che ci permette di prendere una variabile chiamata n 450 00:19:33,870 --> 00:19:37,670 e confrontarlo con un sacco di valori diversi, che qui 451 00:19:37,670 --> 00:19:40,010 hanno chiamato Constant1, constant2. 452 00:19:40,010 --> 00:19:41,150 Possiamo avere molto di più. 453 00:19:41,150 --> 00:19:42,930 E quelli sono chiamati casi. 454 00:19:42,930 --> 00:19:46,280 >> Quindi, se abbiamo un interruttore statement-- e questo funziona 455 00:19:46,280 --> 00:19:50,580 solo per integers-- abbiamo variabile in questo caso che è n. 456 00:19:50,580 --> 00:19:53,840 Se la variabile n è pari a Constant1, abbiamo 457 00:19:53,840 --> 00:19:59,720 eseguirà alcuni frammento di codice o qualcosa che vogliamo fare. 458 00:19:59,720 --> 00:20:01,280 E poi ci sarebbe rompere. 459 00:20:01,280 --> 00:20:04,820 Così la pausa significa che l'istruzione switch 460 00:20:04,820 --> 00:20:08,120 si fermerà l'esecuzione se n è pari a Constant1, 461 00:20:08,120 --> 00:20:09,752 e allora il vostro programma continuerà. 462 00:20:09,752 --> 00:20:11,835 Sarà uscire dal passare dichiarazione e che sarà 463 00:20:11,835 --> 00:20:13,520 continuare a fare qualcosa di diverso. 464 00:20:13,520 --> 00:20:17,204 >> Se, tuttavia, n non è uguale Constant1, quindi caso per constant2 465 00:20:17,204 --> 00:20:17,870 saranno controllati. 466 00:20:17,870 --> 00:20:21,750 Quindi, se n è uguale a constant2, che altro frammento di codice verrà eseguito. 467 00:20:21,750 --> 00:20:23,850 E poi romperà se questo è uguale ad esso. 468 00:20:23,850 --> 00:20:27,580 E allora possiamo avere also-- non necessariamente, though-- un caso di default, 469 00:20:27,580 --> 00:20:32,290 che accadrà se n non è uguale uno dei casi che hai elencato. 470 00:20:32,290 --> 00:20:35,400 E nel caso di default, abbiamo anche non hanno bisogno di una pausa necessariamente 471 00:20:35,400 --> 00:20:39,271 perché l'istruzione switch saprà che ha bisogno di terminare dopo il default 472 00:20:39,271 --> 00:20:40,270 caso se questo è il caso. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Ma stilisticamente, abbiamo sempre messo in là. 474 00:20:42,140 --> 00:20:42,540 >> MARIA: Sì. 475 00:20:42,540 --> 00:20:42,710 >> DAVID MALAN: Sì. 476 00:20:42,710 --> 00:20:44,750 Così, soprattutto quando si inizia, soprattutto se tra i meno 477 00:20:44,750 --> 00:20:47,458 comodo, vorrei personalmente solo raccomandare bastone con i se 478 00:20:47,458 --> 00:20:51,564 e IFS-elses e if-else-if-elses e così via se solo 479 00:20:51,564 --> 00:20:53,480 perché sono un po ' più semplice. 480 00:20:53,480 --> 00:20:56,142 Questa è una bella ottimizzazione, o a volte anche esteticamente 481 00:20:56,142 --> 00:20:57,350 rende il codice più leggibile. 482 00:20:57,350 --> 00:20:59,599 Ed infatti, probabilmente di metà semestre vedremo un problema 483 00:20:59,599 --> 00:21:02,504 set dove solo un aspetto migliore e più facile da leggere per gli esseri umani 484 00:21:02,504 --> 00:21:03,670 utilizzando un'istruzione switch. 485 00:21:03,670 --> 00:21:05,460 Ma non preoccuparti aggrappato a questo troppo presto. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Sì. 487 00:21:05,680 --> 00:21:08,840 Se si dispone di un sacco di istruzioni if, potrebbe non solo essere molto leggibile. 488 00:21:08,840 --> 00:21:10,965 Potrebbe non essere molto veloce per voi di passare attraverso di essa. 489 00:21:10,965 --> 00:21:13,230 Quindi passare dichiarazioni possono essere molto utile, pure. 490 00:21:13,230 --> 00:21:17,900 E anche, non remember-- non fare dimenticate di mettere le interruzioni in là. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Non ricordare questo. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Perché allora si potrebbe cadere attraverso da un caso all'altro. 493 00:21:24,890 --> 00:21:27,930 Quindi diciamo che caso Constant1 non ha avuto un istruzione break in esso. 494 00:21:27,930 --> 00:21:31,920 Poi potremmo cadere attraverso caso constant2 dentro. 495 00:21:31,920 --> 00:21:35,070 E noi non vogliamo farlo se abbiamo già raggiunto caso Constant1 496 00:21:35,070 --> 00:21:37,830 ed è pari a n. 497 00:21:37,830 --> 00:21:45,100 >> Così, per esempio, se abbiamo una variabile n che contiene un numero di classe, 498 00:21:45,100 --> 00:21:48,990 e vogliamo vedere che cosa classe è-- se n è uguale a 50, 499 00:21:48,990 --> 00:21:51,957 stiamo andando a stampare "CS50 è Introduzione alla Informatica I. " 500 00:21:51,957 --> 00:21:53,040 Poi andremo a rompere. 501 00:21:53,040 --> 00:21:53,920 E questo è tutto. 502 00:21:53,920 --> 00:21:55,950 Se, invece, n è uguale a 51, stiamo andando 503 00:21:55,950 --> 00:21:58,494 stampare "CS51 è Introduzione di Informatica II. " 504 00:21:58,494 --> 00:21:59,910 Poi, ancora una volta, stiamo andando a rompere. 505 00:21:59,910 --> 00:22:05,080 Tuttavia, se poi mettiamo 124, 61, qualsiasi altro numero che si potrebbe pensare, 506 00:22:05,080 --> 00:22:06,890 o il programma non sta andando riconoscere che. 507 00:22:06,890 --> 00:22:09,010 Così sta andando a dire: "Mi dispiace, io sono non hanno familiarità con quella classe. " 508 00:22:09,010 --> 00:22:10,009 E sta andando a rompere. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Così si può veramente vedere il se, altrimenti se, altrimenti idea qui. 510 00:22:12,847 --> 00:22:15,430 E 'solo la sintassi diversa per esprimono la stessa idea. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Esattamente. 512 00:22:17,690 --> 00:22:19,480 Ora abbiamo i nostri operatori ternari. 513 00:22:19,480 --> 00:22:24,900 Così gli operatori ternari hanno tre parts-- una condizione, 514 00:22:24,900 --> 00:22:27,220 qualcosa da fare se tale condizione è vera, 515 00:22:27,220 --> 00:22:29,730 e poi qualcosa da fare se tale condizione è falsa. 516 00:22:29,730 --> 00:22:33,400 Quindi, vedete, in fondo, la sintassi di questo qui. 517 00:22:33,400 --> 00:22:37,792 Abbiamo il punto interrogativo, e poi the-- quello che chiamiamo questo? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: Il colon. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colon. 520 00:22:39,100 --> 00:22:39,599 Grazie. 521 00:22:39,599 --> 00:22:41,880 Scusate. 522 00:22:41,880 --> 00:22:45,800 Quindi diamo un'occhiata al nostro esempio per vedere se siamo in grado di dare un senso a questo-- 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Quindi qui vediamo il nostro operatore booleano == che confronta il class_num variabile 525 00:22:52,580 --> 00:22:53,100 50. 526 00:22:53,100 --> 00:22:55,150 Negozi in modo class_num un intero. 527 00:22:55,150 --> 00:22:58,180 E se questo intero pari al 50, poi siamo 528 00:22:58,180 --> 00:23:02,810 andando a memorizzare "David Malan" all'interno del professore stringa. 529 00:23:02,810 --> 00:23:05,912 Se il numero di classe non lo fa uguale a 50, "Non David Malan" 530 00:23:05,912 --> 00:23:07,120 sta per essere il professore. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Grazie. 532 00:23:08,630 --> 00:23:12,110 E così questo sembra equivalente a quello che, diresti, a prima vista? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: A me sembra come se-else. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Sì. 536 00:23:20,709 --> 00:23:24,020 E in effetti, questo è una specie di una bella uno di linea, 537 00:23:24,020 --> 00:23:27,520 per così dire, di applicazione esattamente la logica di if-else 538 00:23:27,520 --> 00:23:29,010 ma facendo tutto in un solo passaggio. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Esattamente. 540 00:23:29,860 --> 00:23:30,360 Già. 541 00:23:30,360 --> 00:23:33,520 Quindi, se-else potrebbe prendere un sacco di spazio. 542 00:23:33,520 --> 00:23:36,283 Potrebbero essere troppo lungo per qualcosa di semplice come questo. 543 00:23:36,283 --> 00:23:38,350 Quindi questo può essere molto succinta e molto bello. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Così ora stiamo andando in guardando l'esecuzione di nuovo e di nuovo qualcosa, 546 00:23:46,820 --> 00:23:50,060 quindi il controllo per un condizionare più volte 547 00:23:50,060 --> 00:23:53,510 e poi continuare a fare qualcosa mentre quella condizione è vera. 548 00:23:53,510 --> 00:23:56,740 Quindi questo ci porta piacevolmente in loop mentre. 549 00:23:56,740 --> 00:23:59,270 >> A sinistra, abbiamo il nostro primo ciclo while. 550 00:23:59,270 --> 00:24:03,840 Così, mentre qualcosa è vero, fare ancora e ancora qualcosa. 551 00:24:03,840 --> 00:24:08,850 Quindi assicuratevi di notare che il nostro condizioni qui viene convalidato in alto. 552 00:24:08,850 --> 00:24:14,150 Considerando che, con il nostro secondo loop-- chiamiamo che un do-while loop-- facciamo qualcosa, 553 00:24:14,150 --> 00:24:15,890 allora controlliamo per una condizione. 554 00:24:15,890 --> 00:24:17,980 E se tale condizione continua ad essere vero, 555 00:24:17,980 --> 00:24:20,150 torniamo indietro e fare la cosa di nuovo. 556 00:24:20,150 --> 00:24:23,360 La differenza principale è dove la condizione viene verificata per. 557 00:24:23,360 --> 00:24:29,260 Il codice può mai essere eseguito se la condizione non è 558 00:24:29,260 --> 00:24:30,430 vero con il ciclo while. 559 00:24:30,430 --> 00:24:33,050 Mentre con il do-while cappio, abbiamo il codice 560 00:24:33,050 --> 00:24:35,380 che viene sempre eseguito almeno una volta. 561 00:24:35,380 --> 00:24:37,470 E poi mentre la condizione continua ad essere vero, 562 00:24:37,470 --> 00:24:39,960 siamo in grado di tornare indietro e scorrere di nuovo dentro. 563 00:24:39,960 --> 00:24:43,625 Allora perché pensi che useremmo un do-while nel corso di un ciclo while? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Destra. 566 00:24:48,720 --> 00:24:52,600 Quindi, se vogliamo indurre il utente per una sorta di ingresso, 567 00:24:52,600 --> 00:24:55,400 se vogliamo chiedere loro di inserire il proprio nome, 568 00:24:55,400 --> 00:24:57,342 vogliamo chiedere almeno una volta. 569 00:24:57,342 --> 00:24:59,050 E se non entrano quel nome, non siamo 570 00:24:59,050 --> 00:25:00,740 andando a chiedere loro di nuovo perché abbiamo già conosciamo. 571 00:25:00,740 --> 00:25:02,656 Ma se non entrano il loro nome, o se si 572 00:25:02,656 --> 00:25:05,787 inserire qualcosa che è ovviamente non è un nome, 573 00:25:05,787 --> 00:25:08,120 abbiamo ancora voglia di continuare chiedendo loro su per il loro nome. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: E in conferenza abbiamo avuto una in questo modo con il int ottenere positivo 575 00:25:10,710 --> 00:25:13,550 ad esempio, dove non c'è niente da verificare in primo luogo perché non avete anche 576 00:25:13,550 --> 00:25:14,190 ottenuto un int. 577 00:25:14,190 --> 00:25:16,680 Così vogliamo fare questo-- ottenere un int dalla user-- 578 00:25:16,680 --> 00:25:18,860 quindi controllare, forse, ancora e ancora e ancora. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Esattamente. 580 00:25:21,030 --> 00:25:22,060 Per loops-- OK. 581 00:25:22,060 --> 00:25:25,842 Per cicli possono permetterci di fare quasi la stessa identica cosa, pure. 582 00:25:25,842 --> 00:25:27,300 In realtà è la stessa identica cosa. 583 00:25:27,300 --> 00:25:30,190 Quindi non c'è niente che si può fare con i cicli for 584 00:25:30,190 --> 00:25:32,840 che non sarebbe in grado a che fare con i loop mentre. 585 00:25:32,840 --> 00:25:36,900 Ma per i cicli possono sembrare un po ' po 'più complicato sintatticamente 586 00:25:36,900 --> 00:25:39,730 perché hanno tre parti all'interno di quello che 587 00:25:39,730 --> 00:25:42,990 era prima solo il condizioni con loop mentre. 588 00:25:42,990 --> 00:25:48,260 Quindi la prima parte che si mare, più a sinistra, abbiamo "int nani = 0" 589 00:25:48,260 --> 00:25:51,490 Quindi questo è dove siamo inizializzare la nostra variabile. 590 00:25:51,490 --> 00:25:55,210 >> Poi abbiamo un punto e virgola e "nani <7." 591 00:25:55,210 --> 00:25:57,100 Quindi questo è dove fuori condizione è in realtà. 592 00:25:57,100 --> 00:26:00,170 In modo che è quello che avremmo mettere solo nel mentre loop-- 593 00:26:00,170 --> 00:26:01,880 "mentre nani <7." 594 00:26:01,880 --> 00:26:05,380 Qui, che va nella bel mezzo del nostro ciclo for. 595 00:26:05,380 --> 00:26:07,190 Quindi, "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 E poi la nostra ultima parte è "nani ++," che è dove noi aggiorniamo il nostro variabile. 597 00:26:11,350 --> 00:26:15,470 Quindi la cosa importante da realizzare è che questo 598 00:26:15,470 --> 00:26:22,010 sta per passare attraverso questo ciclo for sette volte ed eseguire sette volte. 599 00:26:22,010 --> 00:26:24,020 Così abbiamo sette nani, e sono tutti 600 00:26:24,020 --> 00:26:26,020 per dire, "Sono qui per aiutarvi, Biancaneve " 601 00:26:26,020 --> 00:26:28,860 perché sono pronti per aiutare Biancaneve. 602 00:26:28,860 --> 00:26:33,600 >> Con cicli while, avremmo fatto l'inizializzazione e l'aggiornamento 603 00:26:33,600 --> 00:26:37,490 non dentro la condizione, di nuovo, ma prima o all'interno di while 604 00:26:37,490 --> 00:26:40,210 fare in modo che we-- perché abbiamo sempre bisogno di quelle parti. 605 00:26:40,210 --> 00:26:42,835 Quindi, per fare in modo che abbiamo loro, ci sarebbe stato ancora li aggiunto 606 00:26:42,835 --> 00:26:44,580 su, non solo all'interno delle parentesi. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: E così sembra like-- nella conferenza, per esempio, 608 00:26:47,288 --> 00:26:50,250 Ho quasi sempre utilizzare, come, ie n variabili e piuttosto noioso. 609 00:26:50,250 --> 00:26:53,050 Sembra che è possibile utilizzare più abilmente chiamato variabili, anche. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Sì, è davvero molto bello utilizzare le variabili un po 'più descrittivo 611 00:26:56,300 --> 00:26:59,400 perché soprattutto se qualcun altro è leggendo il tuo code-- forse sei grader 612 00:26:59,400 --> 00:27:00,940 o se si sta collaborando con somebody-- 613 00:27:00,940 --> 00:27:03,481 si vuole fare in modo che essi capire quello che stai facendo. 614 00:27:03,481 --> 00:27:05,750 615 00:27:05,750 --> 00:27:06,400 >> OK. 616 00:27:06,400 --> 00:27:11,435 Quindi questo è qualcosa di molto funky-- per il ciclo all'interno di un ciclo for. 617 00:27:11,435 --> 00:27:13,060 Non so se abbiamo visto prima. 618 00:27:13,060 --> 00:27:13,830 Probabilmente no. 619 00:27:13,830 --> 00:27:17,750 Ma possiamo effettivamente avere questo-- così loop invece di loop. 620 00:27:17,750 --> 00:27:25,130 Così qualcuno vuole camminare forse me attraverso quello che sta succedendo qui? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Mi prendo una pugnalata. 623 00:27:29,490 --> 00:27:29,970 MARIA: Freddo. 624 00:27:29,970 --> 00:27:30,636 DAVID MALAN: OK. 625 00:27:30,636 --> 00:27:34,690 Così, spoiler-- vogliamo stampare la roba che è nell'angolo in basso a destra 626 00:27:34,690 --> 00:27:35,190 Là. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Giusto. 628 00:27:35,450 --> 00:27:35,710 Si si. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: per questo abbiamo solo mettere che esempio di output lì. 630 00:27:38,043 --> 00:27:42,590 Così posso dedurre dalla più in alto ciclo che sei 631 00:27:42,590 --> 00:27:45,680 iterare sopra le righe le ciclo più esterno, per così dire. 632 00:27:45,680 --> 00:27:48,107 E stai iterare su colonne con il ciclo più interno. 633 00:27:48,107 --> 00:27:50,190 E intuitivo, questo spetti spera senso 634 00:27:50,190 --> 00:27:52,070 perché per natura ogni programma che abbiamo visto 635 00:27:52,070 --> 00:27:55,570 prima, printf, che è il funzione che stiamo usando, in ultima analisi, 636 00:27:55,570 --> 00:27:58,190 ha la possibilità di stampare roba sostanzialmente fuori riga per riga. 637 00:27:58,190 --> 00:27:59,960 Come, una volta che hai emesso una nuova linea, non c'è 638 00:27:59,960 --> 00:28:02,876 nessun raddoppio indietro e qualcosa di stampa alto nello schermo, almeno 639 00:28:02,876 --> 00:28:04,530 non usare printf come questo. 640 00:28:04,530 --> 00:28:07,750 >> E così a questo proposito, si fa senso che il ciclo più esterno 641 00:28:07,750 --> 00:28:10,930 dovrebbe riferirsi alle righe perché per ogni riga data, 642 00:28:10,930 --> 00:28:13,650 si sta andando a voler stampare XXXXX, e poi 643 00:28:13,650 --> 00:28:15,520 passare alla riga successiva, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Così righe vengono prima. 645 00:28:17,317 --> 00:28:19,150 E poi all'interno di ogni fila, di stampare le colonne. 646 00:28:19,150 --> 00:28:21,160 Se si è tentato di farlo nel di fronte, probabilmente non sarebbe 647 00:28:21,160 --> 00:28:21,690 venire fuori come si intende. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Sì. 649 00:28:22,190 --> 00:28:24,950 Non potevamo tornare a la riga precedente con printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: E che cosa è interessante per chat di oggi di portata, 651 00:28:27,658 --> 00:28:31,600 in realtà, è che la riga è un int che è dichiarato nel ciclo più in alto. 652 00:28:31,600 --> 00:28:34,030 Ma si noti che è ancora all'interno di, per così dire, 653 00:28:34,030 --> 00:28:35,982 le parentesi graffe che seguire immediatamente, 654 00:28:35,982 --> 00:28:38,440 anche se non è tecnicamente all'interno di tali parentesi graffe. 655 00:28:38,440 --> 00:28:41,750 Così fila è portata per la totalità del frammento di codice, 656 00:28:41,750 --> 00:28:44,690 sia all'interno del ciclo for esterno e all'interno del ciclo for interno. 657 00:28:44,690 --> 00:28:48,050 Ma al contrario, dove è la colonna di portata? 658 00:28:48,050 --> 00:28:49,810 La colonna variabile? 659 00:28:49,810 --> 00:28:51,310 Sì, solo nel ciclo all'interno. 660 00:28:51,310 --> 00:28:54,280 E va bene perché non accediamo al di fuori delle sue parentesi graffe. 661 00:28:54,280 --> 00:28:57,280 Tutto quello che facciamo è di stampare un nuovo riga alla fine molto lì. 662 00:28:57,280 --> 00:28:58,670 Così che in realtà è OK. 663 00:28:58,670 --> 00:29:03,740 >> Quindi questo ha l'effetto, sembra che, di fare tre righe e quattro colonne. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Giusto. 665 00:29:04,370 --> 00:29:06,270 Quindi, prima passiamo attraverso la nostra prima fila. 666 00:29:06,270 --> 00:29:10,520 E proprio nella nostra prima fila, facciamo il quattro colonne all'interno della prima riga. 667 00:29:10,520 --> 00:29:11,980 Quindi noi stampiamo quattro X di. 668 00:29:11,980 --> 00:29:15,800 E poi possiamo uscire dal ciclo for, dal momento che abbiamo già stampati quattro X di. 669 00:29:15,800 --> 00:29:17,100 E stampiamo una nuova linea. 670 00:29:17,100 --> 00:29:19,920 E poi andiamo attraverso il stesso processo per altre due righe 671 00:29:19,920 --> 00:29:21,170 , per un totale di tre. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: E vale la pena notare che sia solo un prodotto del tipo di carattere, il fatto 673 00:29:23,530 --> 00:29:25,680 che l'output di esempio sembrano così molto più alto, 674 00:29:25,680 --> 00:29:27,520 come se non c'è più righe di colonne. 675 00:29:27,520 --> 00:29:29,824 Ma è solo perché il X è più alto che largo. 676 00:29:29,824 --> 00:29:32,740 Questo è tutto quello che sta accadendo lì, più lo spazio bianco tra le righe. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Giusto. 678 00:29:33,281 --> 00:29:34,792 Raffreddare. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: Va bene. 680 00:29:35,750 --> 00:29:39,830 Così un rapido sguardo a un problema impostato, prendere tutte le domande, e poi aggiornare? 681 00:29:39,830 --> 00:29:40,330 Tutto ok. 682 00:29:40,330 --> 00:29:43,164 Quindi, in un problema di set, ci sono tre le sfide principali, in ultima analisi. 683 00:29:43,164 --> 00:29:44,955 Ma prima, troverete che il problema impostato 684 00:29:44,955 --> 00:29:47,900 specifica, come con molti la pset questo autunno, sta andando a camminare 685 00:29:47,900 --> 00:29:50,691 attraverso alcuni esercizi di riscaldamento, puntare su alcune risorse 686 00:29:50,691 --> 00:29:52,440 che si può o può non hanno visto già. 687 00:29:52,440 --> 00:29:54,440 Ad esempio, CS50 dispone di una suite di cortometraggi, 688 00:29:54,440 --> 00:29:56,481 che sono brevi video, non dissimile, ma che 689 00:29:56,481 --> 00:29:58,460 sono specific-- molto argomento forse cinque minuti, 690 00:29:58,460 --> 00:30:02,360 10 minuti di lunghezza su loop o su condizioni o su algoritmi 691 00:30:02,360 --> 00:30:04,125 o in seguito di più argomenti avanzati, pure. 692 00:30:04,125 --> 00:30:06,000 E generalmente incorporiamo quelli nel problema 693 00:30:06,000 --> 00:30:07,950 set modo che gli studenti una risorsa con cui 694 00:30:07,950 --> 00:30:10,840 di rivedere il materiale che potrebbe avere già venire a lezione o sezione. 695 00:30:10,840 --> 00:30:13,220 Ma in questo modo è più mirato e più a portata di mano. 696 00:30:13,220 --> 00:30:15,928 >> Tendiamo anche a incorporare nel problema imposta cose chiamate procedure dettagliate. 697 00:30:15,928 --> 00:30:20,790 Quindi, quasi tutti gli esempi che faccio in conferenza, in scena qui, abbiamo anche 698 00:30:20,790 --> 00:30:24,565 hanno sparato sulla macchina fotografica in promuovere una più lenta, 699 00:30:24,565 --> 00:30:28,760 una guida più intima da me su il mio portatile di quel codice, riga per riga 700 00:30:28,760 --> 00:30:31,427 in modo tale che in classe, faremo spesso sfogliare qualcosa o qualcuno 701 00:30:31,427 --> 00:30:33,260 si interject con un rispondere ad una domanda. 702 00:30:33,260 --> 00:30:35,820 Ma non necessariamente affondare in per tutto il pubblico. 703 00:30:35,820 --> 00:30:38,230 In modo da trovare il codice procedure dettagliate per la maggior parte degli esempi 704 00:30:38,230 --> 00:30:40,950 che facciamo qui a lezione in modo che si può camminare attraverso di essa al proprio ritmo 705 00:30:40,950 --> 00:30:43,580 e riavvolgere o avanzare velocemente o saltare del tutto, se volete. 706 00:30:43,580 --> 00:30:45,356 >> C'è spesso un paio di domande warm-up che 707 00:30:45,356 --> 00:30:47,105 vi chiedo di ordinare di rafforzare questo materiale 708 00:30:47,105 --> 00:30:50,250 e assicurarsi che si sta comodi prima si procede con il resto del pset. 709 00:30:50,250 --> 00:30:51,700 E poi, naturalmente, c'è il pset stesso. 710 00:30:51,700 --> 00:30:53,450 E una delle cose siamo molto deliberatamente 711 00:30:53,450 --> 00:30:57,202 fare in CS50 è quasi ogni interessante o intellettualmente poco interessante 712 00:30:57,202 --> 00:30:58,910 passo meccanico che si potrebbe avere a che fare 713 00:30:58,910 --> 00:31:00,519 è quasi sempre molto ben documentato. 714 00:31:00,519 --> 00:31:03,560 Nel corso del termine, faremo iniziare a porre domande più retoriche 715 00:31:03,560 --> 00:31:06,187 come ricordarsi come fare questo o quello? 716 00:31:06,187 --> 00:31:08,520 Ma in generale, troverete che gli insiemi di problemi si ottiene 717 00:31:08,520 --> 00:31:10,269 attraverso la meccanica di qualcosa in modo che 718 00:31:10,269 --> 00:31:14,160 interessanti, sfide intellettuali sono in ultima analisi a sinistra per voi studente. 719 00:31:14,160 --> 00:31:17,390 >> Detto questo, Zamyla, ai quali siamo tenuto oggi mi riferisco a lezione, 720 00:31:17,390 --> 00:31:20,190 è uno dei nostri personale di lunga data membro che detiene anche procedure dettagliate 721 00:31:20,190 --> 00:31:24,520 sui problemi specifici pset come Mario e avido, anche se non l'acqua di quest'anno. 722 00:31:24,520 --> 00:31:26,540 Ed è a quelli walkthroughs che spesso 723 00:31:26,540 --> 00:31:29,450 offre alcuni suggerimenti e trucchi per come procedere, non ti dice 724 00:31:29,450 --> 00:31:31,810 esattamente che cosa fare, ma rather-- come una condizione, 725 00:31:31,810 --> 00:31:35,200 se si will-- dando almeno paio di idee in modo che sia a voi, 726 00:31:35,200 --> 00:31:37,830 in ultima analisi, decidere come avvicinarsi a loro. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: come una sorta di alto livello comprensione della logica di ciò 728 00:31:41,200 --> 00:31:42,220 noi vi stiamo chiedendo di fare. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Esattamente. 730 00:31:42,485 --> 00:31:44,190 E, infatti, di Zamyla procedure dettagliate sono destinate 731 00:31:44,190 --> 00:31:46,190 per rispondere alla frequente domanda posta da dove 732 00:31:46,190 --> 00:31:48,610 faccio Ho cominciato, soprattutto quando questi lunghi specifiche sono 733 00:31:48,610 --> 00:31:51,960 un po 'scoraggiante dato tutto il testo e le immagini che hanno in loro. 734 00:31:51,960 --> 00:31:54,890 >> Così water.c, troverete dopo aver completato esso, 735 00:31:54,890 --> 00:31:56,920 è in realtà relativamente semplice. 736 00:31:56,920 --> 00:31:58,882 Assolutamente sono un mucchio di andare a battere voi 737 00:31:58,882 --> 00:32:01,840 la testa contro il muro cercando di capire perché non è la compilazione 738 00:32:01,840 --> 00:32:03,450 o perché non è in esecuzione in modo corretto. 739 00:32:03,450 --> 00:32:05,040 Ma una volta che il gioco è fatto con esso e una volta che hai 740 00:32:05,040 --> 00:32:07,620 trascorso qualche tempo a lottare con qualsiasi dei bug che si potrebbe avere, 741 00:32:07,620 --> 00:32:09,490 troverete che è un breve programma. 742 00:32:09,490 --> 00:32:11,770 Si può fare in pochi linee di codice, molti dei quali 743 00:32:11,770 --> 00:32:15,030 che abbiamo visto qui in conferenza già, se si assemblano i mattoni giusti. 744 00:32:15,030 --> 00:32:16,810 >> E come si consiglia qui, sta andando a chiedere 745 00:32:16,810 --> 00:32:22,250 di specificare quanti minuti qualcuno sta facendo la doccia nel campus. 746 00:32:22,250 --> 00:32:24,779 Specifichiamo nel problema impostare la velocità di flusso di acqua 747 00:32:24,779 --> 00:32:27,320 in, come, una doccia a basso flusso testa, proprio come la clip Seinfeld 748 00:32:27,320 --> 00:32:29,180 abbiamo visto ieri o sul loro opposto. 749 00:32:29,180 --> 00:32:30,971 E poi avete appena per fare un po 'di matematica, 750 00:32:30,971 --> 00:32:34,710 really-- aritmetica utilizzando C per raccontare noi quanti, circa, bottiglie d'acqua 751 00:32:34,710 --> 00:32:37,720 è che equivale a se siamo prendendo una doccia n minuti. 752 00:32:37,720 --> 00:32:41,389 >> Ora, in mario.c, questo sta andando essere un programma leggermente più lungo. 753 00:32:41,389 --> 00:32:42,930 Non è ancora in corso per essere così a lungo. 754 00:32:42,930 --> 00:32:45,130 Solo poche righe più lunghe di water.c. 755 00:32:45,130 --> 00:32:48,230 Ma sarà occasione per ricreare la vecchia scuola Mario 756 00:32:48,230 --> 00:32:50,670 piramide di Super Mario Fratelli o alcuni di follow-on. 757 00:32:50,670 --> 00:32:53,510 Non sta andando a guardare come più bella o colorata come quella lì. 758 00:32:53,510 --> 00:32:56,468 Stiamo solo andando a utilizzare piccoli hashtags come abbiamo qui sullo schermo 759 00:32:56,468 --> 00:32:58,120 usando il testo ASCII. 760 00:32:58,120 --> 00:33:00,362 Ma sarà approssimare la stessa idea. 761 00:33:00,362 --> 00:33:02,570 E sta andando essere un esercitare che a prima vista 762 00:33:02,570 --> 00:33:04,720 sembra abbastanza simple-- solo stampare una semplice piramide. 763 00:33:04,720 --> 00:33:07,345 Ma ci sono un paio di caratteristiche qui che sono interessanti. 764 00:33:07,345 --> 00:33:12,400 Si noti che il bordo di destra la piramide ha in realtà due di larghezza. 765 00:33:12,400 --> 00:33:14,570 Quindi ci sono due uguali colonne di altezza, che 766 00:33:14,570 --> 00:33:16,804 lo rende richiedono un po ' po 'di pensiero per fare 767 00:33:16,804 --> 00:33:19,720 Assicurati di ottenere che esattamente a destra, come rispetto a solo un perfettamente angolato 768 00:33:19,720 --> 00:33:20,220 linea. 769 00:33:20,220 --> 00:33:23,340 Ecco, questo è un po 'un caso d'angolo ma corrisponde al gioco vero e proprio. 770 00:33:23,340 --> 00:33:27,610 >> Ed è anche non-ovvio a prima sguardo come stampare lo spazio bianco. 771 00:33:27,610 --> 00:33:29,430 Così, quando guardo il esempio di output qui-- 772 00:33:29,430 --> 00:33:32,440 ed è anche in essa spec-- tipo di assomiglia un rettangolo, 773 00:33:32,440 --> 00:33:35,120 ma una diagonale della rettangolo è stato tagliato fuori, 774 00:33:35,120 --> 00:33:37,320 ed è solo spazi bianchi, per così dire. 775 00:33:37,320 --> 00:33:40,100 E così un frequenti domanda qui è sempre, beh, 776 00:33:40,100 --> 00:33:43,302 Come faccio a spostare i hashtag sulla destra? 777 00:33:43,302 --> 00:33:44,760 O come faccio a stampare gli spazi vuoti? 778 00:33:44,760 --> 00:33:46,860 Ed è effettivamente più facile rispetto alla maggior parte degli studenti pensano. 779 00:33:46,860 --> 00:33:47,360 Destra? 780 00:33:47,360 --> 00:33:51,620 Si può approssimare visivamente da solo premendo la barra spaziatrice una o due volte 781 00:33:51,620 --> 00:33:52,700 o tre volte. 782 00:33:52,700 --> 00:33:56,260 >> E così, anche se con printf abbiamo quasi stampare sempre una stringa o un int 783 00:33:56,260 --> 00:33:59,950 o una parola come "ciao, mondo "o una serie di parole di, 784 00:33:59,950 --> 00:34:03,560 si può anche semplicemente stampare citazione, spazio, unquote. 785 00:34:03,560 --> 00:34:06,320 E che in realtà dare un spazio bianco lì. 786 00:34:06,320 --> 00:34:08,330 Modo da tenere a mente e Non pensare troppo questo. 787 00:34:08,330 --> 00:34:10,570 È davvero necessario decidere riga per riga per riga, 788 00:34:10,570 --> 00:34:14,280 non dissimile tuo esempio un poco fa, come molti di quelli 789 00:34:14,280 --> 00:34:18,420 colonne devono essere spazi bianchi e quanti di loro dovrebbero essere hashtag. 790 00:34:18,420 --> 00:34:21,560 Ci vorrà un po 'di tempo, ma è in ultima analisi, un puzzle di logica di sorta. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Sì. 792 00:34:22,060 --> 00:34:25,060 Ma la logica di andare riga per riga sta per essere molto utile qui. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Sì. 794 00:34:25,810 --> 00:34:28,976 Credo che il codice di esempio si gave-- anche se non era un programma completo. 795 00:34:28,976 --> 00:34:34,247 Hai ancora bisogno di int e principale e stdio.h vuoto e #include, 796 00:34:34,247 --> 00:34:35,580 un sacco di roba da lezione. 797 00:34:35,580 --> 00:34:37,629 Ma i mattoni sembrano essere lì. 798 00:34:37,629 --> 00:34:39,920 E poi, infine è qualcosa un po 'più algoritmico. 799 00:34:39,920 --> 00:34:43,210 Così si scopre che ogni volta che andare in CVS o qualsiasi negozio di alimentari 800 00:34:43,210 --> 00:34:47,810 e qualcuno ti porge al bollette cassiere o monete come il cambiamento, 801 00:34:47,810 --> 00:34:50,620 si scopre che essi, gli esseri umani, anche se non lo sappiano o no, 802 00:34:50,620 --> 00:34:53,300 sono probabilmente utilizzando ciò che è chiamato un algoritmo greedy, 803 00:34:53,300 --> 00:34:58,170 per cui se si sta dovuto, dire, $ 21 nel cambiamento perché per qualche motivo 804 00:34:58,170 --> 00:35:01,580 hai comprato qualcosa di molto costoso con un grande conto alla CVS, 805 00:35:01,580 --> 00:35:05,910 sarebbe davvero fastidioso se la cassiere ti ha dato di 21 camere singole o, peggio 806 00:35:05,910 --> 00:35:07,629 tuttavia, un sacco di monete. 807 00:35:07,629 --> 00:35:10,670 Piuttosto, ciò che una persona ragionevole è probabilmente intenzione di fare è che stanno andando 808 00:35:10,670 --> 00:35:14,224 per afferrare un $ 20 e poi a $ 1-fattura, e voi mano solo due fatture in quel caso. 809 00:35:14,224 --> 00:35:17,390 MARIA: Così stanno cercando di ridurre al minimo il cambiamento che danno di nuovo voi. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Esattamente. 811 00:35:17,850 --> 00:35:19,540 E lo stesso accordo con le monete, pure. 812 00:35:19,540 --> 00:35:23,040 Se stai dovuto, dire, $ 0,50, speriamo che non si vuole 50 centesimi. 813 00:35:23,040 --> 00:35:25,500 Voi invece volete due quartieri, per esempio. 814 00:35:25,500 --> 00:35:27,540 Ora, questo non assumere che il cassiere ha 815 00:35:27,540 --> 00:35:29,940 abbastanza di ogni denominazione che lui o lei potrebbe voler dare voi. 816 00:35:29,940 --> 00:35:32,148 Ma noi consentiamo di assumere tanto nel problema. 817 00:35:32,148 --> 00:35:35,590 E l'obiettivo, infine, è quello implementare in codice C un algoritmo greedy. 818 00:35:35,590 --> 00:35:37,344 Così l'utente è autorizzato digitare quanto 819 00:35:37,344 --> 00:35:40,510 cambiare lui o lei è dovuto con dollari e centesimi, una specie di virgola mobile 820 00:35:40,510 --> 00:35:41,590 valore probabilmente. 821 00:35:41,590 --> 00:35:45,530 E poi si deve fare due conti e capire algoritmicamente, beh, 822 00:35:45,530 --> 00:35:49,020 quante monete posso dare si minimamente per darvi 823 00:35:49,020 --> 00:35:50,270 esattamente quella quantità di cambiamento. 824 00:35:50,270 --> 00:35:53,470 Ma ci sara 'un poche parti difficili qui, giusto? 825 00:35:53,470 --> 00:35:56,236 Come se ci fosse tutto problema imprecisioni. 826 00:35:56,236 --> 00:35:56,860 MARIA: Esattamente. 827 00:35:56,860 --> 00:35:59,114 Punto in modo floating valori hanno imprecisioni. 828 00:35:59,114 --> 00:36:00,780 Abbiamo parlato di questo in conferenza oggi? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Abbiamo fatto il l'ultima volta a lezione. 830 00:36:02,340 --> 00:36:03,506 Abbiamo parlato di imprecisioni. 831 00:36:03,506 --> 00:36:08,840 E tu non vuoi ingannare l'utente di quanto il cambiamento che lui o lei è dovuto. 832 00:36:08,840 --> 00:36:11,290 E così la procedura dettagliata, in la specifica problema set, 833 00:36:11,290 --> 00:36:15,990 dare qualche pensiero, in ultima analisi, da come è possibile attenuare quelli imprecisione 834 00:36:15,990 --> 00:36:17,280 errori, potenzialmente. 835 00:36:17,280 --> 00:36:21,050 E 'evitabile, certamente, per gli ingressi di cui stiamo parlando. 836 00:36:21,050 --> 00:36:23,590 E, infatti, pennies-- forse ci rimandiamo a Zamyla, 837 00:36:23,590 --> 00:36:25,136 Credo che, per i trucchi lì. 838 00:36:25,136 --> 00:36:27,760 Quindi in ultima analisi, si trova un progressione dei problemi di questa settimana, 839 00:36:27,760 --> 00:36:30,700 il primo dei quali è piuttosto piccolo, poi mezzo, poi un po 'più grande. 840 00:36:30,700 --> 00:36:33,200 Ma tutti utilizzare l'edificio isolati da questa settimana passata, 841 00:36:33,200 --> 00:36:35,280 da questo supersection, prescrizioni di problema 842 00:36:35,280 --> 00:36:36,710 ti mette a innumerevoli risorse. 843 00:36:36,710 --> 00:36:41,000 Ma ancora, se non del tutto in difficoltà, soprattutto tra quelli meno confortevole 844 00:36:41,000 --> 00:36:42,917 con precedenti conoscenze, venire a orario d'ufficio 845 00:36:42,917 --> 00:36:44,958 il Lunedi e Martedì e Mercoledì e Giovedi. 846 00:36:44,958 --> 00:36:46,950 Vai a CS50 discutere via il sito web del corso, 847 00:36:46,950 --> 00:36:49,080 tramite il quale è possibile chattare con il personale e compagni di classe. 848 00:36:49,080 --> 00:36:51,670 >> Ma alla fine, penso che il miglior consiglio è solo iniziare presto. 849 00:36:51,670 --> 00:36:54,711 Non è il tipo di classe che si dovrebbe essere pset di partenza il Mercoledì 850 00:36:54,711 --> 00:36:56,640 notte, o peggio notte di Giovedi. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Il mio miglior consiglio è di aver iniziato da Lunedi. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: Lunedi. 853 00:36:59,900 --> 00:37:02,490 Quindi, se non avete iniziato already-- no. 854 00:37:02,490 --> 00:37:04,732 Ma anche se non Lunedi, quindi Martedì. 855 00:37:04,732 --> 00:37:05,690 Prima è meglio è. 856 00:37:05,690 --> 00:37:08,605 E questo è il motivo per il Naturalmente ha tanti giorni di ritardo è 857 00:37:08,605 --> 00:37:10,535 per darvi un po 'di un pressione psicologica 858 00:37:10,535 --> 00:37:13,684 iniziare prima, ma ancora lasciare le cose scivolare quando le cose prendono più tempo 859 00:37:13,684 --> 00:37:14,350 quello che ti aspetta. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: E si vuole fare uso di orari d'ufficio per quanto è possibile, anche. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Tutte le domande? 862 00:37:20,291 --> 00:37:20,790 Tutto ok. 863 00:37:20,790 --> 00:37:22,930 Beh, perché non aggiornare qui? 864 00:37:22,930 --> 00:37:23,487