1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
[Přehrávání hudby] 

ANDI PENG: Toto je CS50, a vítejte na týden dva oddílu. To je ve skutečnosti, zatímco týden dva z našich class-- Vlastně, První týden jsme měli bod. Show rukou, kolik z vás všech přišel se do super sekce minulý týden? OK, to je v pořádku. To je v pohodě. Jak mnozí z vás sledoval Super část minulý týden? DOBŘE. A vy jste udělali v pohodě Na problém nastavit jednu? Takže budu brát tak, že máme parta opravdu inteligentních dětí V této třídě a věci bude v pořádku. DOBŘE. Tak first-- 

Za prvé, jsme jen tak krátce jít přes agendu na dnešek. Promluvíme si o kurzu logistice. Mnoho z vás asi S dotazy týkajícími se , jak to běží v tomto kurzu. Budeme na ně odpovědět. Chystáme se krátce projít smyčky v případě, některý z vás minul Super sekci. Promluvíme si o mapování ASCII. Promluvíme si o polích, funkce, argumenty příkazového řádku. A konečně, co vy asi všichni Opravdu chci být zde a dozvíte se o, je vaše pset2. Budeme mít nějaké pěkné triky a tipy na to, jak to udělat. 

DOBŘE. Také, za druhé, máme spousta cukroví zde. Každý, kdo má rád cukroví, jen přijít sem. Chyť některé z nich. Mám spoustu. Máme tunu v kanceláři. Já opravdu nechci jíst sladkosti celý den. Měli byste sníst všechny sladkosti, Vzhledem k tomu, přinesl jsem tu pro vás. Jen jíst sladkosti. Bude tam cukroví každá část. 

Takže nejprve, kdo jsem? Jmenuji se Andi Peng. Já jsem hlava TA CS50 tady v Yale. A kromě že budu také be-- pokud by se někdo jako-- běžícího kamaráde, vaše rameno k pláči na. V případě, že noc před Due vašeho pset je, Máte tušení, co se děje, prašti mě. Budeme spolu politovat, et cetera. Jen vím, že jsem tady jako zdroj pro vás jako přední linii který vám pomůže zjistit, jak kluci k řešení problémů v CS50 a mimo něj. 

Můj email je andi.peng@yale.edu. Budu také vyslat jednotlivce e-mail se svým telefonním číslem v něm takže ne každý na internet můžete podívat na moje telefonní číslo. Neváhejte mi zavolat kdykoli. Vážně, můj telefon je obvykle se vázal k ruce. I nemusí odpovídat během pár minut. I nesmí reagovat do pár hodin. Ale můžu vám zaručit, je-li jste mi e-mail, pokud se mi říkat, textové mě, budu reagovat do 24 hodin. Častokrát, budu reagovat dříve že, protože chápu, že každý má nějaké problémy, a chcete, aby vaše odpovědi třeba zodpovědět velmi rychle. 

Nicméně, pokud zavoláte me 30 minut před že kus, který je kvůli čtvrtek night-- být jako, Andi, pomozte mi, Nemám started-- mohu dát vám, že rameno k pláči na. Ale to může být čas přemýšlet o tom, Jak to udělat, že příště. DOBŘE. Chybička se vloudila. Jak se mohu vrátit? Tam jedeme. 

Takže v tomto kurzu, máme ton podpory pro každého. Kromě právě sekce, která sem vás každý týden trávit 90 nádherné minut se mnou, máme také úřední hodiny. Kolik z vás má již byl na pracovní dobu o pomoc? Skvělý. To je opravdu dobré vidět, protože jsme má tým více než 45 TA a CAS trénoval na tento kurz, který se zde za pomoc vám kluci s vašimi psets. 

Mondays, že jsou drženy v TEAL třída v 17. Hill House zde na Yale. Úterý a ve čtvrtek, oni se konala v commons. 8:00 do 11:00 skoro každý všední den. Pojď, pojď ven. Jakýkoliv problém, ne problem-- Jen pojď, a pak budeme vám pomohl ven s tím. 

Za druhé, kromě úředních hodinách a profily, máme také šortky. Má někdo někdy viděl pár z šortky nebo návody ve videích na internetových stránkách? DOBŘE. Takže jsou opravdu, opravdu užitečná. Naše krásná produkce Harvard tým tamhle na té škole up na sever, oni natočili a produkoval Tyto neuvěřitelné Walkthrough videa. 

Budou vás krok za krokem jak jít o řešení problému. Častokrát, pokud jste zmateni o jednoduchý koncept, ojedinělá koncepce, se podívat, protože jsme pravděpodobně krátká na to někde na našich webových stránkách. A je to obvykle skvělý zdroj hledat, když jste poprvé ztratil o tom, jak zvládnout problém. 

Za třetí, máme také study50 a reference50. Tak studie 50 na webové stránky je jen odkaz. To je, myslím, study.cs50.net nebo něco takového. Jen to google. Máme spoustu snímků připravených. Máme spoustu šortky a walkthroughs-- věci všechny sestavené velmi pěkný a čistý pro vás všechny procházet, vidět žádné koncepty že jste zmatená o. To by pravděpodobně pokryt tamhle study50. 

Reference50-- podobné. Máme spoustu různých poznámek snadno dostupné pro dispozici. A konečně, máme to, co je volal CS50 Diskutovat, fórem, na kterém, v případě, že noc před děláte vaše problémy, říkají, máte nějakou otázku. Přihlaste se do CS50 diskutovat. Zašlete svůj dotaz. A pak jeden z hundreds-- Možná, thousands-- vrstevníků přičemž této třídy on-line se přihlásit. A možná někdo může dostat vaše odpověď před TA. Je to v podstatě jen on-line fórum, které můžeme všichni použít diskutovat o naše problémy. To je hustý. 

DOBŘE. Takže problém sady. Chystáme se přímo v tlustý problému set dva. Mnozí z nás již se snažil prostřednictvím problému nastavit jeden. Již víme, že snad čekají na poslední noc, aby se váš pset není nejchytřejší věc v CS50. 

Tipy a tipy v podstatě pro Úspěch je přečíst celý spec. Kolik z vás má již číst spec pro pset 2? DOBŘE. To je pevná částka. Vím, že vy jste pravděpodobně uznáno teď jsou specifikace jsou opravdu dlouhé. Jsou to opravdu, opravdu dlouho. 

Je to opravdu těžké číst každý řádek tohoto pečlivě slovo za slovem. Chcete-li jen sbírat tam, kde to vám řekne, abyste něco udělali. Mohu vám zaručit, nedělej to. Pokud to uděláte, budete pravděpodobně bude chybět někam kde to vám řekne jak začít problém nebo vám to řekne, co má jméno váš problém nebo to vám řekne, To je pravděpodobně nejlepší způsob, začít dělat váš problém. A pak budeš ztracen. 

Při pokusu o čtení vašich spec v polovině, hodně důležité information-- v tom, že nejste bude moci opravdu přístupem. Tak si přečtěte celý spec. Zkuste si přečíst celý spec Než přijdete do oddílu, proto, že potom, když jsme mluvit o pset, my všichni můžeme mít představu o tom, co se děje. 

Za druhé, to je pojem že budu rád odkaz hodně průběhu semestru. Ale v podstatě, sejdeme na půli cesty, je to tak? Já, jako TA a Jason jako kurz Manažer a Scaz jako profesor a David jako profesor a všichni ostatní krásné TA v tomto kurzu, asistenti v tomto course-- budeme v našich silách, aby bylo zajištěno, že jsou nastaveny až uspět v tomto kurzu. Budeme se držet oddíl. Budeme se držet úřední hodiny. Budeme odpovídat na váš telefon hovory, odpovědět na vaše e-maily, udělat vše, co je v našich silách, aby se že vaše otázky jsou zodpovězeny. 

Nicméně, pomáhají nám příliš. Seznamte se nás na půli cesty. Přijedete-li do úřední hodiny ne mít uplynulý k bodu, ne mít viděný přednášek,, které nemají představu, co se děje, bude jako, pomoz mi. Já budu rád, dobře, je mi líto. To může být čas, aby půjčovat že rameno k pláči na, protože si nejsem jistý, co mohu udělat, aby vám pomohl pokud nechcete zkusit alespoň pomoc si trochu na začátku. Seznamte se nás na půli cesty. Víte, přijďte připraveni odpovědět a získat připraveni se zapojit do materiálu. To dělá věci tak moc jednodušší pro všechny zúčastněné. Jo, to je docela hodně to. 

Třídění. Takže na osnovy, je to docela do hloubky o tom, jak třídy. Ale v podstatě, členění v tomto je 50% z vaší třídy budou psets, které je krásné, protože to je kde trávíte drtivá většinu svého času na kurzu. Kvízy 40%, a vaše závěrečný projekt bude 10%. Dvě budou kvízy celé Průběh semestru. Myslím si, že časy a data jsou také uvedeny na osnovy. 

Způsob, jakým budeme být třídění své psets je to, že mají v podstatě čtyři hodnoty, které jsme přiřadit každé platové třídě. Máme hodnotu rozsahu, správnost, design a styl. Takže jak vidíte, že je to druh naší Vzorec pro výpočet psets. Tři dáváme nejvíce hmotnost na správnost, protože samozřejmě svým trenérem by mělo být testování pro případy že chceme, aby testování. 

Vy všichni mají check50 k dispozici. Je to velmi užitečná funkce že vy můžete vše nahrát svůj kód na naše servery, kde budeme kontrolovat to za vás. A jste viděli ty, zamračený tváře, smajlíky. Jsou to opravdu, opravdu užitečné. Prosím, být student, který rád pokusů hardcode všechny odpovědi na ně. Určitě jsem viděl pset kde někdo viděl všechny hodnoty check50 a oni jen pevně dáno, pokud in-- toto číslo, tisknout toto číslo. Je-li tento počet, vytiskněte tohoto čísla. Nedělej to. 

I když technicky check50 je správné, váš způsob řešení Problém je, není správné. Takže stačí použít check50 střídmě. Ale také ujistit, že jste pochopit, jak to funguje, program funguje kromě check50, protože nemůžeme testovat každý možný případ check50. Budeme testovat některé z nich. 

Design je v podstatě, jak dobře navržená je váš kód? Jste-li copy-vložení násobek řádků kódu mnohokrát. Možná, že nemáte dost nejlepší design v kódu. Možná je na čase, aby dodat, že smyčky. V podstatě, tady je to prostě všechno o snaze udělat svůj kód, se snaží napsat svůj kód, jak efektivně jak je možné, aby váš program běží co nejrychleji. 

A konečně, máme styl. Takže styl je trochu libovolná, subjektivní pojem. Vím, že jsme oficiálně mít styl 50 průvodce pro CS50, kde to vám řekne, ach, ty by měl mít prostor zde. Měli byste jaký formát váš kód tímto způsobem. Ty by měly jmenovat věci tímto způsobem. 

Nemám opravdu jedno, samo o sobě, jak zvolíte styl svůj kód, tak dlouho, jak si pobyt v souladu. Například, pokud chcete zanechat mezeru po svém čtyřech před čtyřmi smyčky, jen to, že pokaždé. Nepoužívejte druh dělat. Nedělej to jindy. Pokud si chcete udržet kudrnaté šle prostor určitým způsobem, Vždycky to udělat takhle. Nepoužívejte druh to někde tu a tam někde ne. Když jsme třídění, je to opravdu těžké když mám tušení, jak jste formátování kódu, věci jsou šílený a na místě. Máte-li jen držet to konzistentní, je to mnohem jednodušší pro mě jako větší aby bylo možné přečíst váš kód. Je to mnohem jednodušší pro vás jako student aby bylo možné prohlédnout kódu a vidět, co je špatného to lomítko proč tam problémy. Styl je jedna z nejjednodušších věcí, vy můžete udělat, aby se plný skóre. V podstatě, pokud jste právě jedno, pokud platíte pět minut pozornosti aby váš kód každý týden, měli byste se dostat plný styl bodů. 

A konečně, máme to, co se nazývá multiplikátor rozsah. Scope-- Vím, že je to velký slovo, a to zejména v této třídě. Ale rozsah, všechno to znamená je to, že se snažíte se psets, jak nejlépe své schopnosti. Pokud zapnete ve třech out z vašich čtyř problémů a ani pokus o poslední z nich, budete pravděpodobně prohraje nějaké body na rozsahu. 

Dokonce i když si jen začít problém, dělat to nejlepší, jít přes něj. I když to nefunguje, zapněte jej v, protože to ukazuje a dokazuje, nám, že se snažíte, aby jste se pokusili problém set jak nejlépe své schopnosti. A pak vám můžeme dát plný počet bodů pro oblast působnosti. 

Rozsah je také velmi důležité, když jsme my mluvit o nejnižším pset skóre poklesem. Takže v průběhu z semestr, vy kluci mají devět psets. A my bude skutečně klesá nejnižší výsledek z těch devíti, ale pouze pokud máte plné šíři bodů. 

Takže pokud se dáte v neúplné pset, bohužel, nemůžeme klesnout, že jeden, Protože váš rozsah body nebyly dokončeny. Takže i když máte hrozný týden kam umírání a jste nemocná nebo Váš pes zemře, vaše kočka zemře, a vy jste přetížené s domácími úkoly, Jen pokus o pset. Udělej to, jak nejlépe své schopnosti. Pokud to nefunguje, na tom nezáleží. Stačí zapnout ji. Přinejmenším můžeme dát vám body za snahu. 

A pro úsilí v této třídě. V nejméně nejnižšího bodového pádu pro úsilí. Tak jo. To je docela hodně to. Má někdo nějaké dotazy tak, daleko na tom, jak ročníku ve třídě? Nebo některý z nich? Některé z nich tak far-- profily, úřední hodiny? Bezva. DOBŘE. 

Tak to je téma, které není člověk opravdu rád mluvit. Nemám opravdu rád o tom mluvit. Vy jste opravdu nechceme slyšet mě mluvit o tom. Ale bohužel, my všichni musí o tom mluvit. David strávil 20 minut přednáška o tom mluví. A to je předmětem akademické poctivosti. 

Takže jsme všichni tady pravděpodobně psaný esej někdy v našem Yale kariéře. Jsme pravděpodobně dostali rozhovor, kde jsme bylo řečeno, že nebude napodobit svou esej, protože práce není naše. Ve vědě o počítačích, máme stejný druh konceptu. Veškeré práce, které odešlete, vše kód, který napíšete by měl být kód, který jste napsali. Nemělo by to být kód, který jste si zkopírován z někde jinde. Nemělo by to být kód, který jste googled a svalil na a nemáte opravdu vědět, jestli to funguje. Ty druh mít smysl co to dělá, ale ne tak docela. Pokud si nejste jisti, v podstatě, je to jen být rozumná. Na našich osnov, máme celý seznam věcí, vidíme za přiměřenou oproti není rozumné. 

Například, rozumný je vy a váš přítel o tom, co je nejlepší způsob, jak jít o logicky řešení problému. To je docela rozumné. To, co by nebylo rozumné, je, pokud vás kluci se dali dohromady, zadali stejný kód, a obrátil se ve stejném kódu. To není rozumné. Totéž, druh eseje. Pokud chcete diskutovat se svým přítelem, hej, To je to, co chci psát. To jsou kroky, které jsem si chtějí trvat, než psát o tom, skvělé. To je nádherné. Prosím, navzájem mezi sebou spolupracují. Pokud vy začít píše totéž, otáčet ve stejném eseji, to je méně v pořádku. Takže v případě pochybností, prostě nedělejte to. 

Zde jsme v CS50, máme skripty že běh automatizovat testování nejen správnost kódu, ale i jedinečnost kódu. Takže prosím, nedávejte nám v poloze aby musel postoupit svůj případ k EXCOMM. Prosím, jen tak pro každého, ať to prostě aby to nádherný zážitek. Každý, kdo se učí lépe, my všichni jsou šťastnější, a my jsme všichni nastaven tak, aby uspět v tomto kurzu. Něco, co je to velmi jedinečné o této třídě že Myslím, že každý by měl opravdu věnovat pozornost, je, že máme co se nazývá lítost klauzule v našich osnov. Takže v podstatě, do 72 hodin, v případě, si myslíte, že jste udělali něco si nejste úplně jistý byl vhodné, prosím, pojď k nám. Slibujeme vám, že do 72 hodin budeme zpracovávat případ sami bez odkazu na vyšší autorita v administraci. 

Takže pokud jste přišel ke mně a řekl: Andi, hej, je mi opravdu líto, ale myslím, že je pár řádků v My Kód včera v noci, že jsem tak trochu googled, vystoupil z Stack Overflow, kopírovat a vložit, a já jsem opravdu, opravdu líto o tom, dejte mi vědět. Prosím tě, nech to hnisat a jen doufám, že jsem to chytit. Budeme ho chytit. Stačí přijít ke mně. Dejte mi vědět do 72 hodin. Budeme vymyslet řešení. A slibujeme, že nebudeme odkazovat na univerzitní orgány v podstatě. Takže je to ve vašem nejlepším zájmu jen být upřímný s každým jež se podílejí na průběhu. 

DOBŘE. DOBŘE. Takže teď, rychle, než I dál, má někdo S dotazy týkajícími se logistiky o tom, jak kurzech budeme provozovat, jak úseky jdou spustit, něco z toho? DOBŘE. To jo. 

Diváků: [Neslyšitelné]? ANDI PENG: Jo. Tak quizzes--, jak mnozí z vás jsou v sekci pondělí / středa? Jak mnozí z vás jsou v úterý / čtvrtek? OK, tak je to solidní rozkol zde. Takže způsob, jakým jsme se spustit je to na Yale je, že jsme budou mít dva oddělené quizzes-- jeden pro každou section-- že budou přijata během vyučování. Myslím, že je říjen, konec října, něco takového, jako jeden týden v kvízu. Jo, takže stačí přijít do třídy. Na tomto pondělí nebo ve středu, budete mít kvíz. Na tomto úterý nebo ve čtvrtek, budete mít jiný kvíz. Ale stejný materiál se bude vztahovat. To jo. Dobrá otázka. To jo. 

Diváků: Kam jít na kontrolu našich známky? 

ANDI PENG: Jo. Tak jsem se Rozeslat e-mail, co každý týden když kvízy jsou graded-- nebo, Omlouvám se, pokud psets jsou odstupňovány. Psets jsou obvykle se v poledne nebo v pátek. Tak jsem slíbit, že budu pokusit se dostat zpět k vám podle poledne následujícího pátek. 

Kdykoliv jsem Grade A pset, pošlu out oznámení na stupni knize že vám řekne své skóre si můžete prohlédnout on-line. Takže hned tento týden poté, co jsem dokončit třídění minulého týdne psets, vy dostanete e-mail Oznámení ti, hej je to kde na vás go zobrazit své třídy. A můžete vidět každý rozpis svých tříd. Můžete vidět připomínky. Oh, rychlá věc také. Komentář Sekce v velký kniha je místo, kde budu asi tráví většinu svého času třídění. Takže jedna věc, která je opravdu důležité, když kluci prohlížíte Vaše stupně na vašem psets není jen hledá na fyzické skóre ale také, že čas na opravdu číst mé komentáře. 

Často, který vám dává zpětnou vazbu o tom, jak jste řešení problému. Pokud potřebujete udělat, něco, co trochu lepší, konstruktivní kritika je obvykle nejlépe podat v těchto komentáři části. Takže, prosím, prosím, já jdu trávit čas psát komentáře. Prosím, bych opravdu si toho vážím jestli vy by četl tyto připomínky. DOBŘE. Bezva. 

Dobře. Tak jsme se chystáte začít mluvit a jen přezkoumání rychle některé z materiálu z týden nula jen tak jsme na pravé straně pro začínající problémy tento týden. Takže zatímco smyčka je jeden ze tří druhů smyček jsme diskutovali dříve v této třídě. 

Smyčka while nezbytně je psán v syntaxi kde, zatímco určité stavu, to opakovaně, že jo? Myslete na to v této grafice zde. Budete začínat ve určitý bod v kódu. Budeš vstoupit do stavu smyčky if-- Nemám víš-- x je menší než jedna. 

Pokud je to pravda, budete k provedení těla smyčky. A budete dál dělat že opět, znovu, nad a over-- což je důvod, proč je to loop-- dokud se váš stav se stává false. Takže tímto způsobem, while je jedním ze způsobů, jak jednodušších psát nějaký druh podmínky, že je třeba opakovat znovu a znovu a znovu. Jen si dejte pozor, kdykoli píšete nějaký druh smyčky že máte stav výstupních stejně jako aktualizaci bez ohledu na to je tak, aby vaše smyčka není jen spustit znovu a znovu donekonečna. V každém případě, budete se chcete ujistit, že měníte nějaký aspekt kódu nebo na konci smyčky jen aby se ujistil, že máte způsob, pro pokrok v dosahování stavu že chcete setkat na konec. Znamená to, že smysl pro všechny? My prostě nechci být zmítá v této spirále kde jdeme dokola a dokola a neexistuje žádný způsob, jak prolomit smyčky. A každý v podstatě smyčka má způsob, jak dělat to. DOBŘE. 

Za druhé, mnozí z vás ve vašich Mario psets pravděpodobně musel zaměstnat tento typ smyčky. To je nazýváno dělat, zatímco smyčka. Za prvé, může mi někdo říct, jaký je rozdíl mezi úkoly while a když je smyčka? To jo. 

Diváků: Kutil while běží na prvním [neslyšitelných]. 

ANDI PENG: Jo, přesně tak. Takže dělat, zatímco smyčka vždy dělá, co je uvnitř úkolů, v závorkách tam a dělá, že podmínka před kontrolou the-- líto, Znamená to, že kód před kontrola pro podmínku. A to je zvláště důležité pro nás zde v této třídě, protože většina časy budeme chtít vyzvat uživatel na nějaký vstup. A pak, v závislosti na vstupní dávají nám, pak můžeme hodnotit, oh, dělat musíme je znovu výzvu? 

Takže Mario, pokud uživatel vám dal negativní výška, například, budete na první řádek a dělat, co je uvnitř. Pak budete kontrolovat chvíli. Víte, je negativní 1, je skutečnost, že kladné číslo? Pokud to není, já jdu dozadu a opakujte dělat a opakování a opakovat a opakovat, dokud nebudou Nakonec vám číslo, které se vám líbí, že všichni můžeme použít v našem kódu. Je to docela důležité, v podstatě žádný vstup uživatele. Mohu vám zaručit, jakýkoliv tentokrát v pset kde Vás žádáme o vstupu nějaký druh kódu, my jsme pravděpodobně bude, aby vám test případ, ve kterém jsme dám ti něco špatného, ​​že je to pokusí zlomit váš kód. 

Pokusíme-li se vás zeptat na vstupní an integer, můžeme jen dát řetězec a uvidíte, jak byste zvládnout. Pokud bychom vás požádat, abyste zaměstnat věku, vám může dát záporné číslo vidět, jak byste zvládnout. Jen se ujistěte, vy jste testováním případy, ve kterých se nechcete dostat to nejlepší vstup, řekněme. A dělat, zatímco smyčka je často nejlepší způsob, jak navrhnout svůj kód tak, že splňuje tento obor. DOBŘE. 

DOBŘE. Takže to je pravděpodobně nejvíce Komplex smyčka ze tří že jsme se podíval na tak daleko. A zdá se, velmi děsivé na prvním místě. Ale já vám zaručit, jakmile vámi dostanete na kloub, jak používat pro smyčce, je to jedna z nejužitečnějších věcí, nejužitečnějších nástrojů ve vašem arzenálu pro posun vpřed v této třídě. 

Tak například, v Scratch, měli jsme tento velmi jednoduchý blok že právě řekl zopakovat jisté věty určitý počet opakování. Mimochodem, SAJ-- to je Scaz Andi Jason. My často podepsat naše e-maily Saj. Říkáme-li, Saj, nenechte se zmást. To jen my. 

Takže Scratch, jsme byli schopni mít blok, který řekl, opakuji Miluji Saj! 10 krát. Velmi jednoduché. Logika, že je velmi, velmi jednoduše, že? Chci nejprve projít první čas a vidím, podruhé a vidím, potřetí, tak dále a tak dále, dokud nenarazíte na 10. 

A tak, jak bychom si představovat, že v kód je jen pomocí jednoduchého pro smyčky. Takže, budete deklarovat Váš variabilní tady, v tomto případě, s int. Budeme se jmenovat to i. Chystáme se inicializovat ji na hodnotu 0. A zastavení vydání je bude i je menší než 10. A aktualizace bude i ++. 

A v rámci smyčky, bude to vykonat až nakonec ji narazí na konec condition--, ve kterém případ, že to bude přerušení smyčky. Tam by měly být věci, které vás kluci mají všechny druhy neviděli a musel udělat pro váš problém nastavit jeden. Má někdo nějaké otázky, pokud jde o smyčky právě teď? DOBŘE. Skvělý. 

DOBŘE. Takže pro ty z vás, kteří mají přečtěte pset spec pro tento týden víme, že budeme muset zaměstnávat něco, co nazývá ASCII a ASCII tabulky. David v přednášce přešel krátce jak počítače essentially-- všechno je kódován v počítači binární, v nul a jedniček. A tak, že počítače jsou schopny ukládat různé hodnoty navíc se nul a jedniček jsou prostřednictvím mapování tato čísla reprezentovat další číslice nebo v podstatě jiné znaky. 

Takže v tomto případě ASCII table-- vše, co dělá je mapa znaků nebo znaků, na čísla. Takže souboru zdrojového kódu v Váš computer-- to vidí, hej, parta nul a jedniček, nuly a jedničky, nuly a jedničky. To je to, co se skladuje v skutečné paměti vašeho počítače. 

Ale když my lidé chtějí komunikovat s počítačem, my want-- říkat, například, pokud chci velká písmena A, Budu potřebovat nějaký způsob, vyprávění počítač, oh, když jsem typ s velkým písmenem A, mám na mysli toto zastoupení v binární. 

A tak způsob, jak to udělat, je hodil libovolná, čemu se říká tabulku ASCII, kde jsme, jako lidé, as programátoři, před nějakým časem, jsme se rozhodli, že svévolně se chystá přiřadit tyto čísla Hodnoty těchto znaků. 

Takže vy můžete google tento online. Myslím si, že je tu odkaz na něj ve vašem pset-- jen mapa ASCII tabulky, ASCII stůl. Prostě to překládá binární Čísla do znaků. A to bude velmi užitečné pro váš problém set kdykoli budete chtít spočítat něco, nebo pokud vás chcete zobrazit určitý znaky nebo celá čísla nebo manipulovat určité znaky. Bude to velmi důležité, že jste všichni vědět, jak se orientovat tabulku ASCII. 

Tak například na velká písmena A je reprezentována počtem 65. A malá je zastoupen 97. Proto je důležité vědět, že Rozdíl mezi těmito dvěma hodnotami je 32. Častokrát, pokud potřebujete převést z vzájemně k sobě, je rozdíl 32. A nebojte se, pokud jste typ zmatený o tom na prvním místě. Půjdeme nad tím, jak bychom zaměstnávají to ve skutečném kódu. 

DOBŘE. Takže pro ty z vás, s notebooky ven, neváhejte a vytáhnout tabulku ASCII, proto, že tyto budou pravděpodobně vyžadují vy odkazovat jaké postavy jsou. DOBŘE. 

Tak s vědomím, že určitá Pro znaky na určitá čísla, kdybych běžet jen první řádek, který code-- printf A, malá písmena a, minus velká písmena A. Má někdo mají hádat o tom, co by bylo vytisknout z obrazovky právě teď? 

Tak v první řadě, co dělá Malá písmena představují? To, co je to číslo zakódován v tabulce ASCII. Litovat? 

Diváků: 97? 

ANDI PENG: 97, velký. A co je s velkým písmenem A? 

Diváků: 65. 

ANDI PENG: Takže to, co je 97 mínus 65? 

Diváků: 32. ANDI PENG: OK. Tak co vy na to bude stane, když vstup, který řádek kódu do mého počítače? 

Diváků: [Neslyšitelné]. ANDI PENG: Je nám líto, ozvěte se. Bez obav. Jedná se o velmi bezpečný životní prostředí, bez fotoaparátu. Všichni budeme to-- bez starostí. Jen my všichni budeme předstírat, že je to jen my zchlazení v této místnosti. Bez obav. No otázka je příliš hloupý. Žádná odpověď je hloupá odpověď. Jsem asi bude dělat chyby V průběhu mého učení. Vážně, chlapi, jen rychle odpovědět na to. Buďte si jisti, v sobě, víš? Tak co to bylo? Kdo řekl, že poslední odpověď? DOBŘE. Shout, že pěkné a jasné. 

Diváků: 32? 

ANDI PENG: 32. OK, pojďme spustit tento kód a uvidíme, jestli to je to, co se stane. DOBŘE. Tak jako vy můžete druh vidět, typické notaci jsem nastavit zde, jak bychom zaměstnáváme nějaký druh programu v našem počítači. Máme hlavní funkci v naší hlavní funkce. Já jsem prostě jít ke kopírování a vložte tento řádek kódu. Rovněž buďte opatrní, když kluci kopírování a vkládání kódu. Někdy se některé subjekty nemají vložit přes správně. V tomto případě je minus znamení byl vlastně pomlčka. A tak se počítač ani si to vyzvednout. Takže jsem se musel vrátit a fyzicky přepište to. Jen si dejte pozor, když vy děláte to. 

DOBŘE. Chystáme se spustit tohle. Takže jdeme na CD do našeho section2. Svolal jsem tento program asciimath. Takže pamatujte, že když jsme se spustit některý Program, chceme nejprve zkompilovat spuštěním to prostřednictvím naší značce. A pak chceme skutečně spustit Program tím, že dělá DOT-lomítko. Takže budeme ./asciimath. 

Dobře, jdeme tam. A vidíme, 32. Výborně. Zasloužíte si bonbon. Candy pro vás. Litovat. Dobře. DOBŘE. Takže se můžeme vrátit k našemu příkladu zde. Aah, no. Aah. DOBŘE. Já jsem prostě jít, aby to takhle. DOBŘE. DOBŘE. Tak jako vy můžete vidět, můžeme to udělat spousta velmi zajímavých věcí, spousta velmi cool věcí, hodně velmi komplikované věci zahrnující Znaky a čísla ASCII. Jakmile se dostanete dolů na linku pět, to je hodně sledovat spolu. Nebudeme jít prostřednictvím sekce. Neváhejte a, pokud je to možné, Důvod, proč na papír nejprve o tom, co by mělo být děje, když zadáte takový řetězec hodnot. Například, v tomto posledním řádku, máme Z-, která představuje určitý number-- je-- což také představuje některé number-- navíc 1 módulos 26 a malá písmena a. 

Pokud jste kluci číst dál Přes tyto, vám může vidět vzor přijít v Jak jsme manipulaci kód. Velmi, velmi naznačují po část vy všichni kluci do toho pusťte a vstup Všichni, kdo ve vašem počítači a uvidíte, jaký druh Čísla jsou coming out a úvaha, proč přes to jsou děje, protože pro vaše psets bude to opravdu důležité, abyste pochopili proč některé věci se dějí. Všechny tyto diapozitivů bude on-line. Takže žádné obavy o snaze fyzicky kopírovat si poznámky. Všechno je online. To samo o sobě část bude on-line. Celý můj zdrojový kód, který Běžím bude on-line. To jo. Věděli jste stále máte dotaz? Diváků: Co je módulos? ANDI PENG: OK. Takže modulo je operátor, který to bude být dost důležité pset vašich kluci Dětské sem. Takže způsob, že provozovatelé v C a v programování práci je to, že jste to, co se nazývá Divize symbol a symbol modul, což je stejně jako znak procent. 

Tak v C, když budeš dělat celé číslo děleno celé číslo s lomítkem, C má tendenci chcete snížit off všechny desetinných míst, proto, že celé číslo chce převést na celé číslo. To nebude chtít být double s partou desetinná všechno po něm. 

Takže pokud mám 3 děleno 2, bude to odříznout 0,5 a jen dát 1. Tak to je něco, co bude velmi opatrní, když jste dělá nějaký druh matematiky v programování, je to, že čísla dostanete nemusí být čísla že jste si mysleli, což je důvod, proč zaokrouhlování ve vašem Poslední pset je tak důležité. 

Modulo vám dává zbytek. Tak například, pokud jsem udělal 3 modulo 2-- tak 3 procenta znamení 2-- to by vám na zbytek tohoto. Takže 3 děleno 2 je 1.5. Je to 1 Zbývající část 1. To by vám na 1, který je na zbytek tohoto. 

Takže když vy jste v pohybu ze stolu ASCII, modulo skončí na něco, co je velmi důležité, a budeme diskutovat, že později. 

DOBŘE. Takže něco, co je hezká, docela nový a dost jedinečné že jsme o tom mluvili týden koncept toho, co je pole. Takže pole je první druh datové struktury že budeme setkávají v této třídě. Všechna datová struktura je, je nějaký svévolný, doslova věci, jako je struktura že my jako programátoři vytvořili, že jsme vložili do našeho kódu, který může obsahovat další kusy kódu. 

Takže v tomto smyslu, array-- myslet na to jako kartotéce, kde pokud otevřete jiný police z vašeho kartotéce, máte přístup různé věci. V paměti, pole je jen to, totéž na vašem počítači. Můžete mít různé blocks-- my nazývají indices-- z pole. Je to stejně jako blok, polici paměti že jsme vytvořili v rámci svých počítač, který můžete zadat některé věci v různých prostorech. 

Takže s množstvím, vy vždy musí specify-- musíte zadat deklarování pole v následujícím formátu. Budeš jako první určit typ dat že chcete vytvořit z pole. Pokud chci pole celých čísel, Já dám int právě tam. Pokud chci pole řetězců, Chystám se dát řetězce tam, jméno vašeho pole, a poté budete mít hranaté závorky. A uvnitř hranatých závorek, že jste bude mít velikost vašeho pole. 

Něco, co je opravdu důležité, mějte na paměti při vytváření polí je to, že jakmile se vytvořit pole, se tato velikost nezmění. Takže pokud víte, že právě teď Máte pole o velikosti 10, víte, že budu mít 10 buněk během nebo 10 ukazatelů v rámci tohoto pole, a to nikdy rozšířit nebo zmenšit bez ohledu na to, a že je tu v současné době jen 10 bloků prostoru přidělené v paměti, která může uložit do 10 věcí, o co jste dal. 

Takže tímto způsobem, typ dat pole, datová struktura, která je pole je velmi odlišná od některých jiných budeme pokrývat později v tomto kurzu. To jo. Například, pokud jste chtěli vytvoření pole o velikosti 3, které obsažené proměnné integer-- oh, promiň, z temperature-- a teploty, z Samozřejmě, že je celé číslo. 

Takže bychom vytvářet int, což je datový typ, co chceme uložit. Budeme volat toto teplotám kvůli nomenklatury pojmenování něco, co jsme všichni pochopili. A budeme mít hranaté závorky. A chceme tři čísla. Takže jdeme dát Tři uvnitř ní. 

Něco, co je opravdu důležité mít na paměti, je to, že pole jsou indexovány nulu. Vše, co znamená, že vás začít s indexem 0, a můžete spustit nejvýše prostřednictvím Velikost pole minus 1. Tak například zde, jsme mají celou řadu velikosti 3. Bude to být schopni držet tři hodnoty. Ale čísla, které themselves-- číslo, pole, že index, pole, jsou 0 až 2. Tak kluci, být opravdu, ale opravdu opatrný, když jdete do vašich problémů stanovených a vytvořit nějaký druh pole, protože mnoho časů to je opravdu, ale opravdu snadné zapomenout, že. Já vlastně nemám index 3, a to v současné době právě já mají index 2. A pokud se pokusíte Přístup třetí index, že to bude to, co je volal null zakončení. Nebude to ve skutečnosti existují v matici. A je počítač nebude líbit, že. Takže buďte opatrní, kdykoli máte přístup k věci, jen aby zajistily, že si pamatujete že pole jsou nula-indexovány. 

DOBŘE. Takže první příklad je jen Jeden způsob, jak vytvořit pole. Druhý příklad mám Níže je jen samostatný způsob vytvoření toho, co je stejná data struktura, která jsme právě zadává. Takže místo toho, fyzicky běží až do konce a uvedení teploty 0 rovná cokoliv, teplota 1 odpovídá za jakýchkoliv, teplotní 2 rovná cokoliv, mohl jsem vlastně jen přímo vytvořit to všechno na jednom řádku do teplotních hranatých závorek rovná. 

A upozornění v tomto případě nepotřebujete určit, jak velký je váš pole je, protože počítač to bude projít a vidět, že je tu tři prvky v těchto složených závorkách. A že to bude vědět, OK, Potřebuji pole o velikosti 3. Nebudete muset Vstup to následujícím způsobem. 

A také, jo, že cesta. Má někdo otázky o tom, jak děláme pole nebo jak struktura pole funguje? To jo. 

Diváků: [Neslyšitelné]? ANDI PENG: Jo, přesně tak. Takže pokud jste byli deklarovat a inicializovat pole následující metoda, což je druhý způsob, můžete jen nechat ty. A počítač automaticky ví, že je třeba počítat, kolik prvků jsou v těchto složených závorek, oddělená čárkami. 

Tak tady vidí 65, 87, 30. Takže počítač ví, oh, tam tři celá čísla. Vím, že vytvořit název pole Teplota se třemi prvky v něm. Dobrá otázka. To jo. 

Diváků: Není to možné vytvořit pole s různými typy dat které by mohly být zapsány do něj? Například, s celými čísly [neslyšitelných]? ANDI PENG: Pro účely této třídy, ne, právě teď. Při vytváření dat strukturu jako pole, mluvíte počítač, hej, potřebuju tě na tolik přidělit paměť v mém pevném disku, se každá buňka být určitý počet bitů. 

Nezapomeňte, jsme se naučili v týdnu nula, že různé údaje typy mají různé velikosti? Tak například řetězec je do různé míry prostoru než char, který je jiný množství prostoru z celé číslo. A tak pokud nechcete specifikovat a vy kombinovat, jaké druhy proměnných Máte počítač se bude velmi zmatený. A to nebude vědět, kolik paměti dát. Takže pro účely práva Nyní mohou pouze počítače rozpoznat jeden typ pole. Dobrá otázka. DOBŘE. 

Tak přirozeně se Druhá otázka, máme Je dobře, teď, když jsme vytvořen pole a my jsme dát všechny tyto věci v poli, jak jsme bude mít přístup? Tak typická struktura, že vždy přístup pole je naše milá pro smyčce. Slibuji vám, hoši, že budeme vidět hodně tohohle chlapíka tady. 

V podstatě, kdykoliv budete chtít vložit hodnoty do pole nebo chcete-li přístup k nim je Nejlepší způsob, jak to je pro smyčce, proto, že v cyklu for, ty vím, kolikrát jste bude chtít projít pole, proto, že máte stop vydání, ne? A pokaždé, když spustíte pomocí můžete přistupovat jiný prvek pole. 

A také, to je důvod, proč typicky začneme dotazy pro smyčky na hodnotu 0, protože při přístupu polí, můžete přistupovat k nulové index. A tak se vyrovná velmi pěkně. Vy mohou chtěli psát pro int i = 1. i je menší než nebo roven 3. 

Ale to by nefungovalo úplně as Tak tady, protože jste jen mají prvky 0, 1 a 2. A tak pokud jste se začít Váš i na prvku 1, 2, a 3, budete skončit běh mimo hranice svého pole, a špatné věci se bude dít. 

Takže doufám, že vy vidět segue proč v předchozích třídách jsme učili vám kluci, jak spustit a Formátování pro smyčce tak, že jsme byli. Je to proto, že nyní máme přešla do polí, můžete vidět, proč 0 propůjčuje sama o sobě velmi pěkně k přístupu. 

Takže způsob, jak to udělat, je, že jsem that-- stačí vytisknout to tady kvůli tisku to. Ale já mám svou zástupnou, čárka. A skutečný přistupující část se děje. Název pole byl nazýván teplota. Takže je to teplota a i-tý prvek pole. 

Tak jako pro smyčka prochází, to bude začínat na 0 ° C. Bude to pro vytištění 0. index tohoto pole. Pak to bude tisknout out prvního prvku. Pak to bude tisknout z druhé. A pak budeme zlomit. Je jasné, na každý jak se to děje? Skvělý. 

Dobře. Takže tady máme způsob, jak řka, pokud bychom nechtěli na hard-kódu mě in-- jako programátor. Nechtěl jsem, aby skutečně fyzicky dal v každém jednotlivém prvku tohoto pole. Kdybych chtěl, aby místo toho mají vstupní uživatelské hodnoty, to, co je nejlepší způsob, jak to udělat? 

No, tady jsem vytvořil tento krásný funkce, , ve kterém mohu prohlásit pole. Tak int scores-- pojďme jen říct, chceme, aby se polem, které držel jakostí všechny 18 studentů zde v této části. Myslím si, že máme trochu více než 18 dětí dnes. Ale například příčinu, pojďme se jen předpokládat, jsme měli 18. Chtěl bych vytvořit název pole skóre s typu int, protože skóre, samozřejmě, jsou čísla. A já budu mít 18 v hranatých závorkách, protože to je to, kolik studentů I chtějí mít možnost ukládat skóre. 

A jak já bych naplnit pole je, že bych spusťte jej přes smyčky for, ze Samozřejmě, kde 0 je mým 0. index. A pak s 18 být mým zastavení vydání, protože tam je 18 prvků v poli. A pak budu dělat printf, Enter skóre pro student-- bla tlachy. 

Může mi někdo říct, proč tady jsem si tisk i plus 1, a ne já? Je to trochu trik otázka, opravdu ne. To není ve skutečnosti fyzicky ovlivňují chod kódu. To jo. 

Diváků: [Neslyšitelné] 0? ANDI PENG: Jo, přesně tak. Je to trochu trapné říkat, hej, jste 0. studentka v této třídě. Je to trochu divné. Takže nás, jako lidé, to opravdu jako přemýšlet o tom, jak počítače myslet. Takže i když v počítač, je to ukládání hodnot v 0-tého indexu, kdy Jsme lidé, my opravdu Líbí se odkazovat na sebe jako nula. Takže když jsem se stačí vytisknout to, Jdu k tisku a přidat 1 jen z důvodu jasnosti. Takže když jsem tisknout, já budu schopna vytisknout studenty 1 až 18. To není ve skutečnosti vliv běh kódu jakýmkoliv způsobem, jak vytisknout. 

Ale pozor, když jste ve skutečnosti přístup pole. Když vidíte skóre i, Všimněte si, že jsem vlastně přístupu k 0. index a ne 1 plus 0-- nebo 1 plus 1, v tomto případě, tak index že je to vlastně jasné. Jsou všichni trochu OK na jak to běží přes a s každým indexem Jsem uvedení hodnoty do pole a vytvoření pole s 18 čísel že uživatel bude vstup? DOBŘE. Bezva. 

DOBŘE. Nyní přejdeme na něco, co je docela relevantní pro tento kus nastavena stejně. Vím, že v přednášce, David-- Omlouvám se, jste měli dotaz? 

Diváků: Můžeš to zvětšit? 

ANDI PENG: Jo, tak jsem se snažil. Ale já nevím. Z nějakého důvodu, to verze aplikace PowerPoint je opravdu nefunguje dobře s displejem. Takže jsme jen tak aby to takhle. Všechny tyto budou odeslány online. Omlouváme se, chlapi. To jo. DOBŘE. 

Takže můžeme mít i řetězce. Takže pokud vy skutečně notice-- I vím, Rob šel přes to v této přednášce že did-- řetězec je ve skutečnosti jen pole znaků, pokud si myslíte o tom, že jo? Řetězec je název nebo věta nebo slovo, že jo? 

Pokud bych měl vytvořit řetězec s názvem Andi-- jen moje jméno, A-N-D-I. Myslíte si, že o tom, jak jen jedné proměnné. Ale ve skutečnosti, je to v členění do pouhých pole znaků. Takže to dostal charakter uložené v hodnotě pole. Má to charakter n uloženou ve druhý index, a tak dále a tak dále. 

Tak takovým způsobem, jsme ve skutečnosti tento druh struktury nastavena místo pro naše řetězce. Tak tady, když jsem byl na vstup do Slovo "jíst" - takže řetězec slovo rovno dostat řetězec. Pokud bych měl zadat slovo "jíst", že je fyzicky tak, že můj počítač ukládá tento řetězec v mé paměti. 

A když jsem chtěl běžet přes to a tisku, že out-- takže i do se rovná nule, pamatujte, že na přednášce jsme vztahuje něco, co nazývá strlen, nebo délku řetězce. Protože nemám vlastně vědět, jak velký je pole v jakékoliv inputting-- uživatele 

Například jsem zadány slovo "jíst," a já vím, To je dlouhá tři znaky, je to tak? Takže jsem mohl dát do tří tam a všechno bude v pořádku. Ale pokud vstupního uživatel něco to je jiný počet hodnot, budete mít potíže s opravdu vím, že když naprogramujete váš kód. 

Takže způsob, jakým nakládáme s testovací případy takhle je to, že máme něco volal strlen, což je jen funkce že vám řekne, jak dlouho je řetězec. Takže strlen slova. Mé slovo je jíst. n se rovná strlen Word. Může mi někdo říct, co to hodnota vlastně je tady? Co n představující právo Nyní, v tomto případě, kdybych měl jíst? 

Diváků: 3. 

ANDI PENG: 3, přesně tak. Takže máme za int i rovná nula, n je rovno 3, v podstatě. A i bude běžet dokud je to méně než 3i ++. A to bude v podstatě jít až do konce a udělat to samé. Bude to vytisknout všechny hodnoty a dá vám JÍST. Je to jen naznačovat jiný způsob psaní. To bude velmi užitečné. To jo. Diváků: Co je výhody uvedení n se rovná strlen slovo uvnitř, že pro smyčce [neslyšitelných]? ANDI PENG: Jo. Takže když jsem byl to-- říkat, například, kdybych to udělat, a poté do-- oop--, že v mém kódu, to by skutečně dělá rád stejné věci. Nicméně způsob, jakým, že David je vysvětleno to během přednášky, jestli někdo z vás kluci pamatovat, bylo to, že, jak je lidé, jako programátoři, opravdu snažit programu Naši kód tak, že náš počítač má pracovat co nejmenší, tak že náš kód je velmi efektivní. 

Takže když jsem měl, že tam, co by se stalo, přes můj pro smyčku je, že jsem se poprvé prohlásit proměnná pojmenovaná i bude 0. Jdu zkontrolovat, oh, co je strlen aplikace Word? Ach, ta strlen je 3. Takže je i méně než tři? Ano je. Jdu běhat. 

A pak podruhé se zpátky smyčky, budu zvyšovat i. i bude jeden. A já se chystá kontrolovat, oh, ale co je to strlen slova? Oh, to je tři. A dělá, že se zdá trochu zbytečné, pokaždé, když spustíte přes smyčku, , které mají být kontrolu funkce, i přesto, že strlen slova Nikdy se právě mění? 

Takže je to navíc moc pro počítač. Když začnete mluvit o věcech, že jsou miliardy a miliardy a miliardy míst dlouhá, představte si svůj počítač museli fyzicky projít a zkontrolovat všechny, že každý jednotlivý čas. To je důvod, proč dělat jen v zájmu efektivity, máme tendenci to prostě udělat, protože tímto způsobem, že jsme jen volání funkce jednou na začátku, a že pokaždé to prochází to jde který bude ukládat hodnotu 3 tam, že nemáte muset neustále kontrolovat pokaždé. To jo. 

Diváků: Omlouvám se. Jen [neslyšitelný]. Mohl byste to v pravý n rovná strlen a dal že nad vnější straně pro smyčky také? ANDI PENG: Jo. Dalo by se to udělat, absolutně. Důvod, proč to máme tady je protože způsob, jakým cyklu for práce je, že to říká lokální proměnná v tom smyslu, že všechno, co jste vytváří uvnitř smyčky for existuje pouze uvnitř cyklu for. 

Takže proměnná i jediný existuje v těchto závorkách. A tady proměnné n i existuje pouze v těch závorkách. Takže pokud jste měli používat strlen z Slovo několikrát dole pod námi, absolutně nejlepší způsob, jak to udělat by bylo prohlásit ji na vrchol takže nemusíte dělat to jednou. To jo. Diváků: Proč máte nový řádek po procent vidět, pokud chcete, aby všechny dopisy vedle oddělit to? 

ANDI PENG: Oh, chtěl jsem se vytisknout všechny na každém řádku. Nezáleží na tom. Jo, je to formátování. To je dobrá otázka, ačkoli. Jo, kdybych chtěl vytisknout to vše na jediném řádku, Já bych neměla pomlčku. DOBŘE. Všichni dobře? DOBŘE. Bezva. 

Takže myslím, že jsem mluvil dost. Vy jste na řadě, aby projít kód a řekni mi, co je špatně. Kde je chyba? Takže jak vidíte, já jsem deklaroval nová pole typu string s názvem třídy. A já jsem zadaná Sam, Jess, a Kim se do něj. A já jsem se snaží vytisknout všechny prvky pole. Může mi někdo říct, proč to se chystá dát mi problémy? Dám vám kluci 10 sekund přemýšlet o tom. 

DOBŘE. To jo? 

Diváků: Je levý střed rovno 3 nebo [neslyšitelných]? ANDI PENG: Správně. Takže kolikrát je to vlastně bude projít této smyčky? 

Publikum: Čtyři. 

ANDI PENG: Přesně tak. Bude to přes čtyři krát. Bude to projít při 0 ° C, 1, 2, a 3, protože jejich prvkem je i je menší než nebo rovno 3. Nebude to zastavit, když je to 2. Bude to mít děje, dokud nenarazí 3. A jak víme, je tu jen tři prvky v naší aktuální poli. 

Pokud se pokusíte o přístup čtvrtý prvek nebo index 3, budete hit někam v paměti, že neexistuje. Jmenuje se null zakončení. Nic se tam bude. Počítač nebude být s tebou velmi spokojený. To jo. Má někdo otázky o tom, proč, co se děje? To je společný prostor, aby se zabránilo. To jo. 

Diváků: Does not první posuňte také řetězec 2? ANDI PENG: Ne. Takže v podstatě, pokud děláš pole, že držák pravý tam, že všechny number-- je to, že musíte, je, jak mnoho prvků mám. Není to vlastně říká me indexy cokoliv. Takže v tomto případě, vím, že chci psát třech místech, se třemi místy do fyzické držet co chci držet. Takže to je důvod, proč je tam číslo tři. Nicméně, pokud jsem chtěl skutečně přístup, pokud jsem chtěl říci, printf třídy číslo konzola, pak budete skutečně dát fyzická index tam. Jo, dobrá otázka. 

Diváků: Takže je fyzická index měl být [neslyšitelných]? ANDI PENG: Je mi to líto. Můžeš mluvit trochu? 

Diváků: Takže je fyzický index [Neslyšitelný] každé z krabic? [Neslyšitelných]? 

ANDI PENG: Jo. Takže já půjdu zpátky do právě zde. Myslete na přímo tady. Máme pole o velikosti 3. Je tu tři místa, jako je, fyzikální zástupné symboly tady. Ale oni s názvem 0, 1 a 2. Takže když jsem chtěl pro přístup k nim, tak, že jsem se k nim je printf všeho, co jsem chtěl tady. Budete muset vytisknout se jménem toho, protože pak v počítači ví, oh, musím se podívat V tomto poli pro 0TH indexu. To jo. Ale velikost se nemění. Velikost je 3, bez ohledu na to na to, jak je popsat. DOBŘE. Všichni dobře? Diváků: Takže pokaždé, když jsem [neslyšitelných]? ANDI PENG: OK. Takže v tomto případě jsme opravdu nemám dostat se do toho teď v kurzu. Ale vím, že string-- jako já řekl dříve, řetězec je v podstatě řada znaků. Takže když jsem vytvořit pole, řetězců, druh I mají celou řadu pole znaků, že jo? 

Takže v tomto případě, protože jsem mají pole řetězců, pokud jste byli na vstup opravdu dlouhé slovo, že stále zabírá pouze jeden prostor, protože to je jeden řetězec. Ale pokud byste měli myslet na znaky tohoto pole, Pak je to brát spoustu více znaky než kterýkoli z Jinými slovy, jsou. Ne opravdu důležité právě teď. Ale to je jen obecně jak to funguje. 

DOBŘE. Takže to je něco, co tě nechám dělat hodně v průběhu semestru. Musím si odpočinout můj hlas. Vy potřebujete stimulovat sami. Mnoho z vás asi spát právě teď. Jsem zadání náhodné problémy kde jsme jako třída nebo s partnerem vedle vás jdou strávit pár minut diskutovat na tom, jak by šlo o řešení nebo vytvoření programu, jako je tento. 

Takže teď, chceme vytvořit program-- budeme nazývat upper.c-- že konvertité malé písmeno slovo horní třídy string-- velká písmena, je mi líto. Word v řetězcích, sorry, je synonymem. Chystám se je změnit znamenat totéž. 

To jo. Vezměte pár minut. Nemusí to být napsán v jakémkoli jazyce. Právě v pseudokódu kódu nebo logicky, jak bychom dokonce jít dělat takový problém. To jo. 

[SIDE ROZHOVOR] 

Také jsem si všiml, že vy can-- Druh já vidět už program. Myslím, že můj nedostatek Režim moderátorka je problém. Ale to je v pořádku. 

[SIDE ROZHOVOR] Ano, prosím, chlapi. Pojďte si bonbón. Pojďte si bonbón. 

Hlediště: Ano! 

[SIDE ROZHOVOR] ANDI PENG: Také, jo, Začnu házet cukroví na lidi, kteří nemají odpověděl na otázky. Takže byste měli všechny odpovědi na otázky. Nebo Myslím, že lidi, kteří se odpovídat na otázky. Jo, jiná cesta kolem. 

[SIDE ROZHOVOR] Diváků: [Neslyšitelné] 

ANDI PENG: Jo. To jo. 

[SIDE ROZHOVOR] 

Dobře, chlapi. Vezměte, jako, 10 vteřin. 

[SIDE ROZHOVOR] 

OK, chlapi. Takže než začneme se snaží vlastně fyzicky psát kód, dobrý zvyk rozvíjet je, že Chceme prvního druhu rozumu logicky, jak bychom to udělat. Chcete, aby se ujistil, před vámi fyzicky začít se snaží kód V Mario, že uděláte jisti, že máte pseudocode. To znamená, že vás jimi to, co potřebujete vytvořit tak , že když vás fyzicky napsat svůj program později, budete schopni lépe zachytit chyby v kódu a podobné věci. 

Takže budeme jen začít by-- v angličtině, v pseudokódu, někdo chce dát mi obecný výklad o tom, jak bychom jít asi dělá? To jo. 

Diváků: [Neslyšitelné]. ANDI PENG: Jasně, žádný strach. Diváků: Můžeš to zeptat nebo požádat někdo se dostat řetězec 1-- jo, řetězec, a pak-- 

ANDI PENG: Ano, takže je to dobrý začátek. Začnu psát, je mi líto, jak mluvíte. Tak-- 

Publikum: --the malá písmena Čísla jsou vyšší, ne? Nebo malá písmena vysoký počet? ANDI PENG: Přesně tak. Diváků: Takže my odečteme 32 od toho, co [neslyšitelných]. 

ANDI PENG: Skvělé. Takže jsme druh má všeobecný pocit o tom, jak pro práci o tomto problému. S vědomím, že jsme se trochu naučil fyzický tak, že struny jsou uloženy v paměti, Co si již vím, že budete pravděpodobně muset psát v kódu aby se pohybovat řetězce? 

Obecenstvo: pro smyčce. ANDI PENG: A pro smyčce, přesně tak. Skvělý. A tak jsme trochu mít obecný pseudokód napsáno tento druh dává bere na vědomí, jste na tom, jak by se pohybovala o řešení tohoto problému. Nyní, když máte tento, ty může odkazovat na později o tom, kdy se snažíte vlastně napsat svůj kód. Takže můžeme skutečně jít sem. A já mám funkci nazvanou upper.c-- tam to je-- toho jen prázdným vzorem právě teď, že vy se chystáte pomozte mi zjistit, o tom, jak psát tato řada code-- není řádek kódu. Bude to více řádků kódu. 

Při spuštění žádný druh prázdného pset, co je První věc, kterou musím pamatovat na dělat? 

Diváků: [Neslyšitelné]. 

ANDI PENG: Velká Jo. Zahrnout. stdio.h. Často se jedná o jeden z nejvíce jednoduché chyby lidé bude dělat, když jsou psaní, je to, že budete zapomněl pro zahrnutí důležité knihovna, co potřebují. Takže pokud je to úřední hodiny a jste jako, Já nevím, proč můj kód nefunguje. Můžeš mi říct, proč to nefunguje? Chystáme se říct, jste #include? Měli byste ho #include. DOBŘE. 

Takže máme standard I / O zde. Je to jediná knihovna budeme potřebovat tu? Co jiného se budeme dělat? Litovat. Někdo prostě ječet to? 

Diváků: [Neslyšitelné]. ANDI PENG: Tady to je. DOBŘE. A jak mám jít o zahájení žádný druh funkce, nějaký druh hlavní funkce v rámci našeho programu? Int main. DOBŘE. Co jsem dal sem dovnitř? Co je první věc, kterou chcete udělat? Pokud chceme získat řetězec od uživatele, co s tím budeme mít dělat na této první linii? Omlouváme se, ale vy jste prostě pocit zatím mluvit a nahlas. Jen křičet cokoliv. 

Diváků: Požádejte uživatele? ANDI PENG: Jak to uděláme? Ask-- budu psát "požádat uživatele"? 

Diváků: printf. 

ANDI PENG: OK. Printf. Co chci, aby printf? 

Diváků: Zadejte něco. 

ANDI PENG: Jako, že? Chlapi, předstírat, že jsem počítač. Fyzicky mi na každém kroku že musím psát sem? Dělám něco špatně? Měl jsem napsal něco? 

Diváků: Potřebujete uvozovek. 

ANDI PENG: Potřebuji uvozovky? DOBŘE. DOBŘE. 

Diváků: A pak nový řádek. Středník. ANDI PENG: středníkem? DOBŘE. Dobrý. 

Diváků: A možná specifikovat že to chceš malými písmeny? 

ANDI PENG: Skvělé. Vy jste mi smát zapomněl dát středník. Já vám zaručit, někde v průběhu této třídy, zapomeneš dát středník, a to bude trvat tři hodiny přijít proč váš kód nefunguje. Stalo se to pro všechny z nás. To bude pravděpodobně se vám nestane. Buďte v dobrém zvyku používat středníky. DOBŘE. 

Diváků: Chcete udělat zpětné lomítko v? 

ANDI PENG: Jistě. Chcete udělat zpětné lomítko v? 

Diváků: Ano. 

ANDI PENG: Skvělé. DOBŘE. Co mám dělat dál? 

Diváků: Získat řetězec. ANDI PENG: Získat řetězec. Tak co mám psát? Někdo? 

Diváků: String s. 

ANDI PENG: String s. Diváků: GetString. ANDI PENG: Někdo, můžete mi říct, kde tato funkce GetString přichází z? 

Diváků: string.h. 

ANDI PENG: string.h? Myslíte si, že je to z string.h? 

Diváků: [Neslyšitelné]. 

ANDI PENG: Tady to je. Je to od CS50.h. Pokud jste stále zmateni na kde Soubor knihovny je nebo soubor záhlaví je, satelitní doslova string.h, a já ti řeknu, jaké jsou všechny funkce které jsou v string.h. DOBŘE. 

Takže teď, že jsem vytvořil řetězec A já jsem vyzve uživatele pro to, Já jsem uložen v proměnné pojmenované s, co musím udělat teď? 

Diváků: Zkontrolujte, zda je malými písmeny. ANDI PENG: Sorry? Diváků: Zkontrolujte, zda je malými písmeny. ANDI PENG: Dobře, pojďme to udělat. Jak to mám udělat? Ve skutečnosti, pro účely třídy právě teď, my jen tak předpokládat, že vše, že vstup je již malými písmeny. Pokud byste chtěli zkontrolovat, že ne stačí přidat podmíněného příkazu že zkontroloval, že proběhl každý prvek pole a kontrolovat, jestli je to mezi určitými hodnotami. Zapomněl jsem, co se počet hodnot malá písmena jsou. Můžete to najít na stole ASCII. Ale jo, to je opravdu dobrý bod. Ale právě teď, budeme jen tak předpokládat, že všechny řetězce jsme vstup jsou malými písmeny. DOBŘE. 

Tak jak bych jít o tento problém bude dál? Obecenstvo: pro smyčce. ANDI PENG: Pro smyčku? DOBŘE. Řekni mi, co mám psát. 

Obecenstvo: pro int i = 0. 

ANDI PENG: OK. 

Publikum: Oh, vlastně, a pak vás udělat čárku a dělat n rovná strlen. 

ANDI PENG: So Důležité že si myslím, že je tady všimla je to, že jsme neměli říkat int n podruhé jsme to udělali. Jen vím, že v pro smyčka, když jste deklarování, jste skutečně nepotřebujete INT podruhé, co udělat proměnnou. Můžete říci n strlen. 

Diváků: S. 

ANDI PENG: s. DOBŘE. 

Diváků: Pak středník. 

ANDI PENG: Jistě. 

Diváků: A pak [neslyšitelný] n. Pak jsem ++. 

ANDI PENG: Skvělé. Dobře. Co chceme dovnitř z toho pro smyčky teď? Pamatujte, že pokud budeme projít řetězec a běh přes pole, Chceme, aby zkontrolovat věci v něm. Co budeme potřebovat? To je tak trochu choulostivé části teď. Každý, kdo má hádat? 

DOBŘE. Takže nejprve, jak jsme se dokonce přistupovat? Jak jsme se i první kontrola, nebo přístup k prvku v poli? Jak to uděláme? Co je to notace používáme k tomu, že? Jaký je název tohoto pole jmenuje? Jmenuje se to, jo? 

Pamatujte si, že libovolný řetězec je vždy pole. Takže s držák i, že jo? Vzhledem k tomu, že je aktuální hodnota nebo hodnota indexu jsme kontrolu. A budeme se nastavit, že rovné to-- chceme malá písmena hodnotu, je to tak? Chceme se obrátit, že lower-- Omlouváme se, chceme velkými písmeny. Chceme otočit malými písmeny hodnota do velká písmena. A tak jako-- Je mi to líto, jak se jmenuješ? 

Diváků: Heidi. 

ANDI PENG: Sorry? 

Diváků: Heidi. 

ANDI PENG: Heidi. Jako řekla Heidi zpočátku, my jsme nejspíš bude potřebovat the-- jsme pravděpodobně bude muset odečíst 32 z jakéhokoli charc to je, že jo? Vzhledem k tomu, na ASCII stůl, rozdíl mezi malým písmenem a velké písmeno je 32. Takže, když to děláme, jsme nejspíš bude chtít odečíst 32, ne? 

Takže budeme dělat S i. Má každý pochopit, proč jsem to udělal? Protože právě teď, v našem poli, jsme kontrolu 0. index, že jo? A v 0. indexu řetězec, to je první znak. A že postava jedeme předpokládat, že je to malá písmena. Pokud chceme, aby to velká písmena, my muset odečíst 32 z jeho hodnoty, proto, že v naší ASCII stůl, to je, jak jsme si to na další odpovídající hodnota, která dělá to velká. Rozumějí, že? To jo. 

Diváků: Mohl byste také to malá písmena a minus-- 

ANDI PENG: Jo, tak to je ve skutečnosti opravdu dobře. Chystám se vrátit k tomu Otázka poté, co jsme udělat. To jo. A pak, když chci zjistit, co se děje, Já nejspíš chcete vytisknout, ne? Někdo mi řekl, co Chci vytisknout zde. 

Publikum: printf procent c zpětné lomítko [neslyšitelných]. To je hodnota [neslyšitelný] s i. 

ANDI PENG: s i, omlouvám? Diváků: [Neslyšitelné]. ANDI PENG: Já nevím. Co myslíš? 

Publikum: No, já wouldn't-- Myslím, že by nebylo bring-- Vzal bych ji z dovnitř, protože [neslyšitelný]. ANDI PENG: Oh, bys udělal? Diváků: Jo. ANDI PENG: Nechme to tak, jak to je, a já ti to vysvětlím, proč později. Pamatujte si, že i když mají zástupnou, Chcete-li vložit závorky kolem něj. Dobře. Tak by to mělo být solidní funkci zde. Pojďme jej spustíme a uvidíme, jestli to přeloží. Udělat horní. Uh-oh. To nevypadá moc dobře. Proč se to děje? Stejně jako u jakékoli chyby, chceš jít zpět a začít s první, neboť obvykle jednou příčin chyb spousta jiných chyb po něm. Zde vidíme upper.c: 18: 25, který říká, mě v tomto programu s názvem upper.c, na lince 18, error implicitně deklarovat knihovna funkcí strlen s typem unassigned-- blah, nevím co se děje po tom. 

Vše, co to je mi říct, teď je že se něco děje na strlen. A počítač je zmatená, protože je to jako, já nevím, co je strlen? Co to asi řeknu vám chybí? 

Diváků: Ty chybí [neslyšitelných]. 

ANDI PENG: Máš pravdu. Přesně tak. Takže tohle je místo, kde je to důležité se ujistit, že každá funkce, kterou používáte ve vašem kód má správnou hlavičku soubor pro knihovnu, nebo jinak budete mít spoustu chyb a váš kód nebude vědět, co se děje. Takže budeme tu zahrnout string.h. 

Teď, když se snažíme sestavit horní. Kompilace správně. Pojďme tento program spustit. Takže psát něco malými písmeny. Co si kluci chcete psát? Shout něco. Dobře, Charly právě vešel. Budeme psát Charly jméno. 

Charly malými písmeny. A doufejme, doufejme, že to je jít vykřiknout a vyplivnout Charly velkými písmeny. Hurá! to všichni pochopili, jak Šel jsem o řešení, že? Tak, že mohu manipulovat pomocí celých čísel vyřešit něco, Chci dělat v řetězcích, proto, že postavy a celá čísla mohou odkazovat stejným způsobem, protože mapování ASCII. 

Takže jít zpět do bodu, když jsem chtěl dát tu namísto 32 velká mínus malá písmena spravedlivý jako že, že bude fungovat stejně i, protože to je prostě jen Rozdíl mezi těmito dvěma hodnotami. Pokud chci, aby tento again-- Charly. Ale ne. Myslím si, že jsme se vydali špatným směrem, jo? 

Diváků: [Neslyšitelné] malá písmena a. 

ANDI PENG: Tady to je. Jo. A z plive Charly. Takže buďte opatrní při jste odečtením hodnoty mít na paměti, který z nich je větší než druhý. Například, tady jsem zapomněl že malá a je ve skutečnosti větší než velká písmena A. takže když jsem se Snažil se jim odečíst na druhou stranu kolem, mám negativní 32. A můj počítač byl rád, Já nevím, co to je. Je to pravděpodobnost, jen nějaký náhodný hodnota, která není moc dobré. A tak se ujistěte, že jste se odečte ve správné délce najít požadovaný znak. DOBŘE. Je někdo zmatený o tom, jak šlo o psaní této funkce? DOBŘE. Takže ve skutečnosti, funkce již existuje v knihovně s názvem ctype.h. Knihovně se jmenuje ctype.h. Tato funkce je ve skutečnosti již napsán pro vás. Je to jen na horní. 

A tak pro účely tento pset, budete zjistíte, že opravdu chcete použít mnoho funkcí obsahovala v knihovně CType. Chcete-li horní, snížit, je horní, je lower-- ty jsou všechny funkce že budete moci používat velmi, velmi rychle ve vlastním kódu, který dělá přesně to, co to dělá. Napsali jsme na to, jak převést řetězec na velká písmena. To je však ve skutečnosti kód že někdo jiný napsal a že můžete přistupovat přes jinou funkci. To jo? 

Diváků: Takže stačí zkopírovat je tam a to pro každou dopis? 

ANDI PENG: Jo, protože se mi nelíbí péče o hodnotách a. Jen mě to zajímá, že rozdíl mezi nimi je 32, ne? Rozdíl mezi malými písmeny b a velká písmena B, je také 32. A rozdíl mezi C a velká písmena C je vždy 32. 

Jen jsem se starat o rozdíl mezi těmito dvěma, protože všechny dopisy následovat stejný vzor, ​​je to tak? Mám-li rozdíl mezi jedním z nich, Vím, jaký je rozdíl mezi všemi z nich je. Dobrá otázka. To jo. Všichni dobře? DOBŘE. OOP. 

DOBŘE. Takže další koncept, který je Bude velmi užitečné jako vy pokračovat ve vývoji váš kód je tento nápad, vytváření funkcí nebo abstrakci. Takže teď jsme všichni vzít algebry. V algebře, budete se učí, že existuje to úžasná věc s názvem funkce Stroj, kde pokud jste vstup jednoho druhu čísla, to projde této nádherné funkce a se objeví jiný výstup, ne? V kódu, totéž se děje v nějakém druhu funkce. 

Tak jsem mohl fyzicky napsat v mém těle mém kódu hlavní prohlášení, že vlastně dělá bez ohledu na tělo kódu dělá. Ale mimo to, že mohu také napsat mnoho různých funkcí, že dělat mnoho různých věcí. Například, máme již začali používat některé z nich. Printf--, že je Funkce, že někdo jiný již napsal, že můžeme zavolat našeho kódu. K upper-- v tomto případě, upper-- je další funkce psali jsme, že my může zavolat našeho kódu. A tak myslím proč máme dokonce funkce? Proč ne my jen plop to vše ve stejném řádku kódu? To usnadňuje pro každého. 

No, důvody, které je v první řadě, organizace. Je to opravdu nepříjemné jít prostřednictvím kódu něčí a jednu funkci, jako printf. Pokud vy vlastně ví, co Funkce printf znamenalo psát, je to, jako, 1000 řádků kódu. 

Pokud pokaždé, když jsem chtěl printf na něco, Musel jsem psát 1000 řádků kódu, to by bylo opravdu otravné číst, v pořádku? To je důvod, proč jsme právě vytvořil tento abstraktní funkce že máme už někoho jiný napsal někde jinde. A pokaždé, když musíme použít v náš kód, budeme muset říci printf. A to je schopen používat funkci někdo jiný něco napsal do našeho kódu. To usnadňuje organizačně přečíst kód. 

Za druhé, je to zjednodušení. To zjednodušuje kroky, které máme aby k vyřešení náš problém. Printf, funkce jako printf, funkce, jako na horním jsou všechno věci, které nám umožňují, aby zjednodušit náš kód dolů, takže je to jednodušší. A poslední věc, kterou je znovupoužitelnost. 

Takže k tomu, že máme funkce nazvaná printf které můžeme nazvat mnoho různých časy a umožňuje, aby byly znovu použitelné. Pokud bych měl napsat printf, Jen jsem jednou napsat. Existuje pouze v tomto jednom místě. Kdybych chtěl udělat znovu, udělala bych to muset zkopírovat a vložit všechno do můj druhý řádek kódu. To je důvod, proč, když jsme vytvořit funkci že existuje mimo naše hlavní, můžeme jen vyzýváme to a znovu použít kdykoli Potřebujeme tak, že je to mnohem snazší pro nás jako programy psát. 

Takže tak, že bychom vlastně napsat funkce je velmi podobná, ne? To je tak trochu jako první případ, kdy jsme vám viz funkci Vezměte na stylu jiný než naše int main prázdnoty. V tomto případě, pokud jsem chtěl napsat funkci nazvanou q, že jo? 

A hodnota tady int vše je mi říct, Co chci to fungují tak, že se ke mně? Pokud chci, aby kostka celé číslo, Budu chtít, aby vstup. Jedná se o parametry. Chystám se vstupy hodnotu typu int. A já se vrátit jiný typ hodnota int. A tady, jako vy vidíte, všechno dělám je Cubing co můj vstup je jako můj výstup a vrácením. 

Takže všechno je tato funkce dělá, je zabere nějaký celé číslo. Dvakrát to násobí to samo o sobě tak, že se kostky v platnosti. A pak se to vrátí co to výstup je. Takže v tomto případě, je to dva řádky kód, který jsme museli psát navíc. Ale pokud jsme chtěli zavolat na těchto vícekrát, je to mnohem jednodušší psát, že jeden linka tady to je v krychli, než muset projít vícekrát. 

Takže tak, že v podstatě jakákoliv formátování pro nějaký druh funkce bude existovat jako je sem. Takže máme název funkce. V tomto případě, je to jen kostka. A my to jméno krychli z následujících důvodů je to snadno zapamatovatelné. Můžete pojmenovat je a náměstí to může být ve skutečnosti cubed. Nezáleží na tom. Jen jméno, které jste přiřazení svou funkci. 

Toto právo je zde, int, je typ parametru, který potřebujete. Takže to, co dělá tuto funkci je třeba, aby fungoval? No, musí na to mít vstup. Pojmenoval jsem ji vstupu. Můžete pojmenovat to, co chcete. Ale já potřebuji něco typu int. Bude to vlastně vykonat co je uvnitř tady, tělo funkce. A pak návratový typ tady, to int-- vše, co mi říká, je že tato funkce je vracet ke mně v int. Takže to bude trvat do int, a to bude vám zpět int. Má každý pochopit, jak formátování tohoto druhu funguje? Bezva. 

DOBŘE. Takže nemusíte mít strach, pokud se to zdá trochu abstraktní teď hned. To je něco, co budeme mluvit. Budeme ponořit hlouběji později v kurzu. Způsob, jakým nějaký druh vyšší úrovně abstrakce z těchto věcí práce je to, že v paměti, v počítač, všechno je uložen v tomto typu ze zásobníku, mám říct. 

Takže tam nahoře. Já nevím, jestli vás lidi vidět, že dobře. Pokusím se přiblížit. Zde v horní části, jsme mají fyzikální textu z toho, co je počítač interpreting-- všechny nuly a ty, které existují v našem počítači. A pak máme inicializaci datových a neinicializované dat, to, čemu říkáme globální proměnné. Takže proměnných, které existují ve všech programech a přes vaše celokrajné, v podstatě, kód. Žádné starosti, jestli vy jste druh nejasný na toto téma. Právě teď nezáleží. 

A pak máme to, co je volal haldy v zásobníku. Myslete na zásobníku doslova jako stejně jako hromadu věcí, hromadu jiný věci, tlačí na vrchol na sobě, že ukládat různé proměnné a syntax v rámci vašeho kódu. A pak tady na samém dně, máme proměnné prostředí na to, co se v rámci provádění Jen váš malý řádek kódu. 

A my jsme jen tak pro zvětšení v na skutečné části zásobníku. Tak tady, když jsme byli na zvětšení v jen na tuto oblast stohu, to je to, co to vypadá. A to je vlastně docela důležitá když kluci mluví o funkcích, protože oznámení, že paměti počítače ukládá proměnné a funkce a parametry obou vašich funkce a vaše hlavní proměnné na různých místech. 

Takže teď, hlavní je skutečné funkce že jste vykonávající v kódu. Vy jste jeho parametry uloženy zde a její lokální proměnné uloženy zde. Místní proměnná prostě znamená jakékoliv proměnné že existují pouze v rámci této funkce. A na vrcholu toho, máte to samostatná funkce nazývá krychle. Máte to parametry stejně jako ty místní. 

A důvod, proč můžete vidíte, je to, co se stane, když kostka má v Hodnota z vaší hlavní funkce je, že ve skutečnosti je to, že více než kopírování. Takže když jsem chtěl krychle 2 a vrátí 8, že 2 je vlastně zadaná jako parametr, a to zkopírovány tak, že máte to stávající ve dvou různých místech v paměti. A vy musíte být velmi opatrní na zapamatování, který z těch, jste skutečně manipulaci. A příklad toho, co se stalo že by bylo velmi, velmi špatný Existuje tady. 

Tak tady, mám, teoreticky, program tady, hlavní funkce že jsem deklarovat int x = 1. Jsem deklarovat další int y rovná 2. A pak jsem to běh Pomocí této funkce volal odkládacím prostorem, kde předpokládám, že je to vymění dvě hodnoty. A pak budu vytisknout je, že jo? To je to, co chci tento program dělat. 

Takže pojďme se přijít dolů a podívat se. Takže když jsem vlastně psát jiný funkce, jak můžete vidět, máme hlavní funkce zde. A pak Máme druhá funkce zde. Void swapu. Void prostě znamená, že je to nebude vracet nic. Jméno funkce je volal swapu, a to je jít na příjmu dvě proměnné, int a a int b, z vašeho [neslyšitelný] funkce. 

Takže v podstatě tady, my jsme kolem x a y do této funkce. A kdybychom se vytvořit tohle-- takže chceme vytvořit dočasný hodnotu, je to tak? Budeme přiřadit, že pro a. A pak bude nyní rovné b. A b bude zpátky kde byla hodnota temp, což je, protože když Chcete-li vyměnit věci, můžete nejen rád je vyměnit. 

Musíte mít jeden ven tady tak, že si pamatuje co to je, protože jakmile zaměňovat jedno, jste zapomněl co to původní hodnota byla, že jo? Takže v teorii, tento program by měly fungovat, ne? Kdybych chtěl prohodit dva, by měly vyměnit. Takže pojďme spustit, a uvidíme, jestli to funguje. 

Tak jako vy můžete vidět, x byl kdysi 1 a Y byl jednou 2. A když jsem vytisknout, x je stále 1 a y je 2. Hmm, tento program se nezdá být pracuje tak, že chci, aby to fungovat. Má někdo chtěl mít šanci na hádat, proč se to dělo? To má co do činění s tím, jak že různé věci jsou uloženy na různých místech v paměti. 

DOBŘE. Takže vy nemusíte mít strach příliš mnoho o tom právě teď. Ale vím, že kostka je místní proměnné byly a a b, protože tady v naší funkci, jsme prohlásil, A a B jako proměnné, které existují uvnitř krychle, že funkce. Ale jak vidíte, parametry, které je to přičemž v tu byly uloženy. Ale byli jsme vlastně vracet nic. Nebyli jsme skutečně mění, x a y. Jen jsme si změnu a a b. 

Měli jsme zkopírovali x a y do takzvaný a b. Ale my jsme vlastně nikdy manipulovat x a y sami. Vy jste kluci vidí jak se to děje? Je, že jsme prostě zkopírován u konce, ale my jsme vlastně stále trať, kde byli v paměti. 

A tak teď počítač hledá, oh, jsem spustit tuto věc prostřednictvím tento krásný funkce. Ale x a y jsou stále x a y. Nic se nestalo, aby je vzhledem k tomu, že těchto parametrů a lokální proměnné jsou uloženy v jiném místo v paměti. A to je na vyšší úrovni Koncept, že budeme začnete vidět později v kurzu. Ale vím, že je to o problém, který se může stát a že budeme vymyslet způsoby, jak na to, jak se s tím později v kurzu. DOBŘE. Dobře. Takže poslední koncept jsme opravdu pokrýt že to bude užitečné, pro pset tento týden jsou, co se nazývá argumenty příkazového řádku. Tak Rob ve své přednášce prošel druh krátce na to, jak tyto práce. V podstatě víme, že když píšete jako hlavní funkci, kdy jsme napsal funkcí předtím, než v minulosti, jsme měli int main neplatné. A důvod, proč jsme měli tam void bylo proto, že naše programy, není je třeba, aby vstupní hodnoty pro spuštění, je to tak? Když jsem běžel Mario, nepotřeboval jsem skutečně stačí napsat do něčeho když jsem běžel Mario. Mohl bych vyzvat uživatele později. Ale to není tak být vždy. 

Například, v tomto týden problém soupravy, budete dotázáni, že v Kromě spuštění vašeho programu, budete chtít vstup některé věci v přímé, jak budete spusťte program. Takže způsob, jak to udělat, je nazýván příkazového řádku argument, který je jako argument můžete zadat přímo jak se snažíte spustit program. 

Takže zápis pro to, je to docela složité vypadající, ale je to opravdu není tak obtížné. Tak int main-- to je jen vaše hlavní funkce. Do argc čárkou řetězec argv závorkách. Takže vše, co říká, je, že to int argc-- vše, co říkám je to, že to jsou počet argumenty počítač by měl očekávat. 

Takže jedna věc, která je opravdu důležité sledovat je fyzický název vašeho programu se počítá jako jeden z těchto argumentů. Takže když jsem chtěl mít svůj program spustit a ještě jeden další příkazový řádek Argument, že jsem vlastně bude mít dva. Argc to vlastně bude dva. A pak řetězec argv bracket-- vše, co dělá, to dává mi Pole řetězců, které je bude jen zobrazovat a ukládat co všechny tyto argumenty příkazového řádku jsou. 

Tak například, když jsem chtěl, aby to Program, ./copy vstupní-soubor výstupní-soubor, je to tak? To je jen typický příkaz Linux. Co je to vlastně argc? Kolik argumenty příkazového řádku jsou tam vlastně v tom? To vše dělá, je vytvořit kopii infile názvu jednoho souboru a zkopíruje jej do jiný soubor, že jo? To je všechno tohle dělá. Jak můžete vidět, dělám to na jeden řádek aniž by ve skutečnosti potřebovat program. 

Jaká je naše argc v tomto případě? Kolik argumenty máme? Publikum: Tři? ANDI PENG: Máme tři, přesně tak. Takže je to velmi intuitivní Jen si myslím, že je to jen infile a outfile. Ale ví, že fyzikální název z Program vedete počítá jako jeden. Takže v tomto případě, argc je vlastně tři. Jak o tom, co je argv 0? Pamatujte si, že všechny argumenty příkazového řádku byly uloženy v pole řetězců. Takže když se snažím přistupovat to, co by argv držák 0 mi dal? 

Diváků: [Neslyšitelné]. ANDI PENG: Přesně tak. Bylo by mi tečku lomítko kopii, protože to je 0. prvek se První prvek mé pole. Co argv 1? 

Diváků: INFILE. ANDI PENG: INFILE, přesně tak. Co argv 2? Diváků: outfile. ANDI PENG: outfile. To je nyní trochu složitější. Co vy na to argv 3 se bude mi dávat když jsem se snažil vytisknout to přišel? 

Diváků: [Neslyšitelné]? 

ANDI PENG: Měli jste ruku? To jo. 

Diváků: Alternativní. 

ANDI PENG: Přesně tak. Takže pamatujte na přednášce, že jsme mají na konci závodní něco volal null terminátor? Dostaneme se do toho také dále ve třídě. Ale vím, že v zápisu, jak váš počítač ví, že je to konec matice je to, že jí dá něco, co nazývá null terminátor nebo pomlčka nula. 

Takže pokud se pokusíte o přístup argv 3, budete hit tohoto pomlčku 0. To je ještě o chyták. Co argv 4? Tak tohle je minulost null terminátor, kolem hranice naší nabídku. Co myslíš, že se chystá stane, když se snažíme dělat, že? 

Diváků: [Neslyšitelné]? ANDI PENG: Sorry? Řekněme, že to trochu hlasitěji? 

Diváků: [Neslyšitelné]. ANDI PENG: Ano. To je jméno z Oblast, budete s největší pravděpodobností dostat. Ale vím, že argv 4-- který vám umožní přístup místa počítače paměť, která vás opravdu nesmí dotýkat, protože teď víte, co argv je. Víte, že je to pole velikosti 3 která má dot kopírovat, INFILE a outfile. 

Pokusíte-li se jít tak daleko za tím že jste v minulosti null zakončení, váš počítač má pravděpodobně uloženo něco v argv 4. A opravdu by neměl být povolen vstup do argv 4, protože máte soubor skříň a vy jste jen umožněn přístup k těmto třem policemi. Ale pokud se pokusíte dostat daleko za police na to, kde jsou povoleny, se chystáte začít hrát s další věci v paměti počítače. To bude opravdu, ale opravdu špatné. Takže jen vím, že. Buďte velmi opatrní, abyste nejsou jen náhodně spustit přístup k prvků v poli, které nebyli v tom, co jste chtěli vytvořit. Jo. 

DOBŘE. Takže budeme dělat další terminál příklad zde. DOBŘE. Tak Rob rychle v přednášce druhý den šel prostřednictvím tohoto příkladu, kde měl int main int argc řetězec argv konzoly, který mi říká, že jsem bude mít argumenty příkazového řádku. 

Má-li argc rovná rovná 2-- pamatovat, rovná se rovná znamená srovnání. Pokud je roven 2, pak jsem do tisku ahoj, bez ohledu na prvním prvek pole je. Else tisk, hello world. Co to bude se stalo v podstatě? Může někdo vysvětlit, jen v Angličtina, co tento program dělá? To jo. 

Diváků: Pokud někdo zadali v příkazu a že jejich jméno a příjmení, to nebude jen vytisknout První a říkají, ahoj, bez ohledu na vaše křestní jméno je. 

ANDI PENG: OK, pojďme spusťte jej. Tak například, pokud bych měl dělat tento soubor, aby ahoj to-- ahoj to-- to, co chceš, abych na vstup? 

Diváků: Jméno a příjmení. 

ANDI PENG: Jméno a příjmení? Prostory? 

Diváků: Jo. 

ANDI PENG: Může někdo říct, mě právě teď, co je argc? Právě tam? Jejda, promiň. Nech mě jít zpátky. Kolik argumenty příkazového řádku are-- vy nemůžete opravdu vidět. Ale budu se snažit přiblížit. Snažím se. Jo, je tu tři, ne? Je to tečka lomítko ahoj, to je Andi, a to je Peng. 

Tak co si vy myslíte, že to Program se bude tisknout ven? Aha. Promiň. Nesprávný název. Je to vytisknout, hello world. Má někdo chtěl vysvětlit Proto, že se to děje? To jo? 

Diváků: [Neslyšitelné]. ANDI PENG: Přesně tak. Tak tady, jsou podmíněné je, je-li argc rovná se rovná 2. Takže pouze v případě, že je tu dva argumenty příkazového řádku. Pak jdu k tisku, Dobrý den, ať je to cokoliv. Ale jinak, budu vytisknout pouze, hello world. Takže to někdo bude chtít dát mi příklad o tom, jak budu moci skutečně si to vytisknout hodnotu argv 1? 

Co bych musel vstup tady? Jen jedna věc, že ​​jo? Vzhledem k tomu, tečka hello to již se počítá jako první argument. Mám ještě jeden jediný. Takže dot ahoj když jsem prostě Andi. Dobrý den, Andi. Rozumějí Proto, že se to děje? To jo. 

Diváků: Takže prostor mezi Příkaz line-- je to [neslyšitelný]? ANDI PENG: Ne. Tak prostoru v příkazovém řádku Argument, x, říci svůj počítač že se jedná o začátek nového řetězce. Takže string argv here-- ukládá všechny vaše příkazy řádku argumenty v řetězcích. A tak se prostor v příkazovém řádku argument-- vše, co dělá, je říci vám, to je na konci jednoho řetězce a je čas přejít na jiný. 

To jo. To je docela důležité pro Váš pset, protože jsi bude testování těchto. Takže má někdo jakékoliv dotazy na to? OK v pohodě. To jo? 

Diváků: Takže důvod, proč byste místo toho dát argument celého čísla Calc ze dne [neslyšitelný] bude, když budete chtít zadejte doplňující informace [Neslyšitelných]? 

ANDI PENG: Jo, přesně tak. Některé programy budou vyžadovat, abyste vložit argument příkazového řádku že prochází, a který používá, které. To jo. Diváků: Takže co když [neslyšitelných]? 

ANDI PENG: No, co mám do té doby změnit v mém programu? 

Diváků: Just 3. 

ANDI PENG: Proč je to, že děje, myslíš, že? 

Diváků: Vzhledem k tomu, [neslyšitelných]. 

Diváků: Musel bys změňte ji na 2 [neslyšitelný]. 

Publikum: 1 a 2. ANDI PENG: 1 a 2, přesně tak. Takže v tomto případě, byste nejspíš Chcete mít dvou printf statements-- ten, který tištěný argv 1 a ten, že tištěný argv 2. Here. Já si skutečně udělat opravdu rychle. Tady máš. Aha. Ne tak docela, co jste chtěli. Ale pokud vy nepořádek kolem s formátování, bude to vyjde. To jo. Bezva. Vím, že jsme trochu málo času. Ale já jsem prostě jít rychle strávit pár minut procházejí helpful-- Diváků: Máte dvě minuty. ANDI PENG: Mám dvě minuty? Děkuji. Některé rychlé tipy pset. Takže pro tuto pset, vřele doporučuji, jak jsem řekl, všichni číst spec. Budete psát tři programs-- jeden volal initials.c, jeden s názvem caesar.c, jeden s názvem vigenere.c. Některé důležité tipů, které vy opravdu chcete udržovat v mind-- tak je tato funkce volal atoi-- jak jsem chtěl říci, je trois. Nejasné pokud je to ve skutečnosti, jak to říct. Ale všechno to dělá, je to zadáním. To převádí řetězec na int. Takže představuje ASCII i celé číslo. Je to jen konverze ASCII hodnoty na celé číslo hodnoty. Takže pamatujte argv, pole, který ukládá všechny vaše příkazy řádku arguments-- uloží je všechny jako řetězce. A tak pokud chcete být schopni mají jeden z nich stane celé číslo, budete mít použít zde tuto hodnotu. 

Modulo, jako bychom se vztahuje dříve ve třídě dnes, vám umožní mít Zbytek, co máte. Takže pokud máme opravdu, opravdu hojném počtu Caesar, co když budeme mít na konci z řetězce Vigenère? Jak se vám bude moci se dostat, že na obal kolem? Pokud bych hit z a já chci to se vrátit do A, Jak to mám dostat že na obal kolem? Pravděpodobně chcete použít modulo tam někde. 

Za druhé, procházet kolem vaše knihovna. ctype.h. To je nová knihovna, co máme. Zde najdete spoustu opravdu, ale opravdu užitečné functions-- isupper, islower, toupper, tolower, IsAlpha, et cetera. Všechny funkce, které budou velmi užitečné když se snažíte přijít na to, je to znak malé písmeno? Jak mohu převést tuto string na velká písmena? Všechny tyto věci budou velmi, velmi užitečné pro vaše pset. DOBŘE. 

Úřední hodiny jsou od 8:00 do dnes večer 11:00 v TEAL třídě zítra stejně jako ve středu a ve čtvrtek v noci. Úřední hodiny jsou ve sněmovně. Vysoce navrhnout vám kluci všechny začít hned, protože nechcete, aby se stát, že kluk, který ve čtvrtek v noci má problémy Odesláním pset a je jako, já nevím, co mám dělat. Začal, já jsem skončil, jsem předložil. Snažte se dát si nějaký prostor, protože vždy dojde k potížím kód. Chcete, aby se ujistil, že dáváš hodně času, aby bylo možné dokončit psets. Bezva. Budu viset tady. 

Diváků: už je to on-line? ANDI PENG: Já nevím, jestli je to on-line již, ale bude to. Jsem se, jestli někdo budu poflakovat tady má již nějaké otázky. Díky, že jsi přišel.