[MUZYKI] ANDI PENG: Jest CS50 i Zapraszamy do tygodnia dwóch sekcji. To jest rzeczywiście, podczas gdy tydzień dwie rzeczywistości naszych class--, w pierwszym tygodniu mieliśmy sekcję. Pokaż rąk, jak wielu z was wszystkich Super sekcji przyszedł w zeszłym tygodniu? OK, to jest OK. Dobrze. Jak wielu z was oglądał Super rozdział w zeszłym tygodniu? OK. I zrobiliście dobrze od problemu ustawić jeden? Więc mam zamiar wziąć to, że mamy kilka bardzo inteligentnych dzieci w tej klasie i rzeczy będzie dobrze. OK. Więc first-- Po pierwsze, jesteśmy po prostu będzie krótko przejść do porządku obrad dzisiejszego. Porozmawiamy o logistyce kursu. Wielu z was zapewne pytań dotyczących jak rzeczy działają w tym kursie. Będziemy na nie odpowiedzieć. Idziemy na krótko przejść na pętli w przypadku którykolwiek z was brakowało super-punkt. Porozmawiamy o mapowanie ASCII. Porozmawiamy o tablicach, funkcji, argumenty wiersza poleceń. I wreszcie, co faceci chyba wszystko naprawdę chcesz być tutaj, aby dowiedzieć się o, jest twoja pset2. Będziemy mieć jakieś fajne sztuczki i porad, jak to zrobić. OK. Ponadto, po drugie, mamy wiele cukierki tutaj. Każdy, kto lubi słodycze, właśnie tutaj. Zdobędą. Mam kilka. Mamy mnóstwo w biurze. I naprawdę nie chcę jeść słodycze przez cały dzień. Powinniście zjeść wszystkie cukierki, bo przywiózł go tutaj dla was. Wystarczy jeść słodycze. Będzie cukierki każda sekcja. Więc po pierwsze, kim jestem? Nazywam się Andi Peng. Jestem głową TA z CS50 tutaj w Yale. I oprócz że ja również być: czy ktoś like-- swój bieg kolego, twoje ramię płakać się. Jeśli w nocy Due to Twój pset, w nie masz pojęcia, co się dzieje, hit me up. Będziemy litować razem, et cetera. Wystarczy wiedzieć, że jestem tutaj jako zasobów dla Ciebie, jako pierwszej linii w pomoc chłopaki dowiedzieć się, jak do rozwiązywania problemów w CS50 i poza nią. Mój e-mail jest andi.peng@yale.edu. Ja też wysłać osobę emaila z moim numerem telefonu w nim tak, że nie każdy na Internet może zobaczyć mój numer telefonu. Zapraszam do mnie zadzwonić w każdej chwili. Poważnie, mój telefon jest zwykle montowane na mojej dłoni. I może nie odpowiadać w ciągu kilku minut. I nie może odpowiedzieć w ciągu kilku godzin. Ale mogę ci zagwarantować, jeśli mi e-mail, jeśli mnie zadzwonić, mnie tekst, będę odpowiedzi w ciągu 24 godzin. Często będę odpowiadać przed , że ponieważ rozumiem że każdy ma jakieś problemy, i chcesz swoje odpowiedzi należy odpowiedzieć bardzo szybko. Jednakże, jeśli zadzwonisz mnie na 30 minut przed że kawałek, który jest spowodowany czwartek night-- być jak Andi, pomóż mi, Nie started-- może dam ci, że ramię w wypłakać. Ale może to być czas, aby pomyśleć o jak tego nie robić, że następnym razem. OK. Ups. Jak mogę wrócić? No to jedziemy. Więc w tym oczywiście, mamy ton wsparcia dla każdego. Oprócz prostu sekcje tutaj, co cię co tydzień się spędzić 90 wspaniałe minut ze mną, mamy także dyżury. Jak wielu z Was już byłem w godzinach pracy urzędu o pomoc? Wielki. To jest naprawdę dobry, aby zobaczyć, bo posiada ponad 45 pracowników i TAs urzędów przeszkoleni w tym oczywiście, że są tutaj za pomoc chłopaki ze swoimi psets. Poniedziałki są one przechowywane w TEAL W klasie 17 Hill House tutaj w Yale. Wtorki i czwartki, są one przechowywane w świetlicy. 08:00 do 11:00 prawie codziennie. Chodź, chodź. Każdy problem, nie problem-- po prostu wejdź, a następnie pomożemy Ci się z tym. Po drugie, oprócz godzin biurowych i sekcje, mamy także szorty. Czy ktoś kiedykolwiek widział kilka z Szorty i solucje w wideo na stronie internetowej? OK. Więc oni są naprawdę pomocne. Nasz piękny produkcji Harvard zespół tam na tej szkole północy, mają nakręcony i wyprodukowany Te niesamowite filmy przeglądowych. Zabiorą Cię krok po kroku przez jak go o rozwiązanie problemu. Często, jeśli mylić temat prosty pomysł, to wyjątkowa koncepcja, spojrzeć, bo prawdopodobnie krótkie na nim gdzieś na naszej stronie internetowej. I to zazwyczaj wielki zasób szukać, gdy jesteś pierwszy stracił na jak radzić sobie problem. Po trzecie, mamy także study50 i reference50. Więc studiować 50 na strona jest po prostu link. Jest to, jak sądzę, study.cs50.net czy coś takiego. Wystarczy google. Mamy wiele slajdów przygotowanych. Mamy wiele szorty i walkthroughs-- rzeczy wszystkie skompilowane bardzo ładne i miłe dla wszystkich was przeglądać, zobaczyć koncepcje że jesteś zagubiony. To by chyba być pokryte tam w study50. Reference50-- podobna. Mamy wiele różnych notatek łatwo dostępne do Państwa dyspozycji. I wreszcie, mamy to, co jest nazywa CS50 Omów, forum, na którym, jeśli w nocy robisz swoje problemy, powiedzmy, masz pytanie. Zaloguj się, by CS50 Omów. Zamieść swoje pytanie. I wtedy jeden z hundreds-- być może, thousands-- rówieśników przy tej klasy Internecie będzie zalogować. A może ktoś może uzyskać Twoja odpowiedź, zanim puszki TA. Jest to w zasadzie tylko forum internetowe, które wszyscy możemy używać, aby omówić swoje problemy. To super. OK. Więc problemem ustawia. Jesteśmy na temat prawa w grube problemu ustawić dwa. Już Wiele z nas ma zmagały poprzez problemu ustawić jedną. Wiemy już, że być może czeka na ostatniej nocy, aby zrobić swoje pset nie jest najmądrzejszą rzeczą do zrobienia w CS50. Porady i wskazówki głównie dla Sukces jest przeczytać całą specyfikację. Jak wielu z Was już przeczytać specyfikację dla pset 2? OK. To solidny kwotę. Wiem, że faceci mają zapewne uznane teraz specyfikacje są naprawdę długie. Są bardzo, bardzo długo. To naprawdę trudne, aby przeczytać każdy wiersz tego starannie słowo po słowie. Chcesz po prostu przejrzeć gdzie mówi ci coś zrobić. Gwarantuję wam, nie rób tego. Jeśli to zrobisz, jesteś prawdopodobnie będzie miss gdzieś gdzie mówi, jak rozpocząć problem i mówi, co nazwa Twój problem i mówi ci, jest to chyba najlepszy sposób zacząć robić problemu. A potem będziesz utracone. Podczas próby, aby przeczytać w połowie spec,, wiele ważne information-- się, że nie jesteś będzie w stanie naprawdę dostępem. Więc przeczytać całą specyfikację. Spróbuj przeczytać całą specyfikację przed przyjazdem do sekcji, bo wtedy, gdy mówić o pset, wszyscy możemy mieć pomysł z tego, co się dzieje. Po drugie, jest to koncepcja że będę chciał odwołać dużo przez cały semestr kursu. Ale zasadniczo, z nami spotkać w połowie drogi, prawda? Ja, jako TA i Jason jako oczywiście Menedżer i Scaz jako profesor i David jako profesor i wszystkie inne piękne TAs w tym kursie, pomocnicy w tym course-- zrobimy co w naszej mocy aby upewnić się, że są ustawione się do osiągnięcia sukcesu w tym kursie. Będziemy trzymać sekcji. Będziemy trzymać godziny pracy. Odpowiemy na telefon wzywa odpowiedzieć na wiadomości e-mail, zrobić wszystko, aby się, że Twoje pytania. Jednak nam pomóc też. Spotkaj się z nami w połowie drogi. Jeśli przyjeżdża się do godzin pracy biura Nie udała się do sekcji, nie widząc na wykłady, nie mając pomysł, co się dzieje, jest tak, pomóż mi. Mam zamiar być jak, dobrze, przepraszam. To może być czas pożyczać że się płakać na ramieniu, bo nie jestem pewien, co można zrobić, aby pomóc jeśli nie spróbować co najmniej pomoc się trochę na początku. Spotkaj się z nami w połowie drogi. Wiesz, proszę przyjść przygotowany do odpowiedzi i uzyskać gotowa zaangażować się w materiale. To sprawia, że ​​rzeczy tak dużo łatwiejsze dla wszystkich zaangażowanych. Tak, to dość dużo. Klasa. Więc na programie nauczania, to całkiem szczegółowe dotyczące Jak klasę. Ale zasadniczo, podział w tym jest 50% swojej klasie będą psets, które jest piękny, bo to gdzie jesteś wydatków zdecydowana Większość swojego czasu kurs na. Quizy 40%, a swoje Ostateczny projekt będzie 10%. Będą dwa konkursy w całej przebieg semestru. Myślę, że czas i data są również wymienione w programie nauczania. Sposób, w jaki będziemy być klasyfikacji swoich psets jest to, że mamy w zasadzie cztery wartości, które możemy przypisać do każdej klasy. Mamy wartości zakresu, poprawności, design i styl. Tak więc, jak widać, jest to rodzaj naszego wzór na obliczenie psets. Trzy dajemy najbardziej wagi do poprawności, bo oczywiście trenera Należy badania przypadków że chcemy, aby przetestować. Chłopaki mają check50 do Państwa dyspozycji. Jest to bardzo przydatna funkcja że chłopaki mogą wszystko przesłać kod do naszych serwerów, gdzie sprawdzimy to za Ciebie. A widzieliście te frowny twarze, buźki. Oni są naprawdę pomocne. Proszę nie być Student, który lubi prób hardcode we wszystkich odpowiedzi na nie. Ja na pewno widział pset gdzie ktoś widział wszystkie wartości check50 i po prostu ciężko kodowane in-- jeśli ta liczba, wydrukować ten numer. Jeśli ten numer, wydrukować tego numeru. Nie rób tego. Nawet jeśli technicznie check50 jest prawidłowe, Twój sposób rozwiązania Problemem nie jest poprawne. Więc po prostu użyć check50 oszczędnie. Ale również upewnić się, że zrozumieć, jak to działa, program funkcjonuje Oprócz check50, ponieważ nie możemy przetestować każdy możliwe przypadek check50. Będziemy testować niektóre z nich. Projekt jest w istocie, jak dobrze zaprojektowane jest kod? Jeśli jesteś kopiowaniem wklejanie wielu linii kodu wiele, wiele razy. Może nie mają dość najlepszy projekt w kodzie. Może nadszedł czas, aby dodać tę pętlę. Zasadniczo, tutaj to jest po prostu wszystko o próbuje zrobić swój kod, próbuje pisać kod tak skutecznie, jak to możliwe, że program działa jak najszybciej. Wreszcie, mamy styl. Więc styl jest swego rodzaju arbitralne, subiektywne określenie. Wiem, że oficjalnie ma styl 50 Podręcznik dla CS50, gdzie mówi ci, oh, Należy mieć tu miejsca. Powinieneś rodzaj formatu Twój kod w ten sposób. Należy wymienić rzeczy w ten sposób. I naprawdę nie obchodzi, per se, jak wybrać do stylu kodu, tylko tak długo, jak pobyt spójne. Na przykład, jeśli chcesz opuścić swoje miejsce po czterech przed czterech pętli, po prostu to zrobić za każdym razem. Nie rodzaju zrobić. Nie rób tego innym razem. Jeśli chcesz zachować kręcone szelki miejsca w pewien sposób, tak zawsze robią to w ten sposób. Nie rodzaju zrobić to gdzieś tu i gdzieś tam nie ma. Gdy mamy do klasyfikacji, to naprawdę trudne jeśli nie mam pojęcia, jak jesteś formatowanie kodu, rzeczy są głupi i nie na miejscu. Jeśli tylko zachować spójny, to znacznie łatwiejsze dla mnie, tym większa aby być w stanie odczytać kodu. Jest to o wiele łatwiejsze dla Ciebie jako student aby być w stanie spojrzeć przez kod i zobaczyć, co się dzieje z to slash, dlaczego nie ma problemów. Styl jest jednym z najłatwiejszych rzeczy Chłopaki można zrobić, aby uzyskać pełne wyniki. Zasadniczo, jeśli tylko obchodzi, jeśli płacisz pięć minut uwagi do kod każdego tygodnia, należy być uzyskanie pełnych punktów za styl. Wreszcie, mamy to, co się nazywa mnożnik zakresu. Scope-- Wiem, że to duża tekstu, szczególnie w tej klasie. Ale zakres, to wszystko środki jest to, że próbujesz z psets do najlepiej jak potrafisz. Jeśli z kolei w trzech z swoich czterech problemów i nawet nie próba ostatni, prawdopodobnie jesteś stracić kilka punktów na zakres. Nawet jeśli po prostu zacząć ten problem, jak najlepiej, aby przejść przez to. Nawet jeśli to nie działa, włącz je w, dlatego, że pokazuje, i pokazuje, nam, że starasz, że próbowano problemu ustawić najlepiej, jak potrafisz. I wtedy możemy dać ci pełne punkty dla zakresu. Zakres jest również bardzo ważne, bo gdy my mówić o najniższym wynikiem pset spadku. Tak więc w ciągu z Semestr, macie dziewięć psets. A my faktycznie spada najniższy wynik spośród tych dziewięciu, ale tylko wtedy, gdy masz pełne punkty zakresie. Więc jeśli skręcić w niepełnej pset, niestety, nie możemy spaść, że jeden, ponieważ swoim zakresem punkty nie zostały zakończone. Więc nawet jeśli masz okropny tydzień dokąd się wybierasz, umierania i jesteś chory lub pies umiera, twój kot umiera, i jesteś przeciążony w odrabianiu prac domowych, po prostu próba pset. Zrób to najlepiej jak potrafisz. Jeśli to nie działa, to nie ma znaczenia. Wystarczy włączyć go. Przynajmniej możemy dać Ci punkty za wysiłek. A dla wysiłku w tej klasie. Co najmniej najniższym spadku ocenę wysiłku. O tak. To dość dużo. Czy ktoś ma pytania, tak Jak daleko od stopnia w klasie? Lub któregokolwiek z nich? Każdy z nich tak far-- sekcje, godziny pracy? Chłodny. OK. Więc to jest to temat, który nie naprawdę lubi rozmawiać. Naprawdę nie lubię o tym mówić. Wy naprawdę nie chcę usłyszeć mi o tym mówić. Ale niestety, wszyscy trzeba o tym mówić. David spędził 20 minut wykład o tym mówić. I to jest przedmiotem uczciwości akademickiej. Więc my wszyscy tutaj, prawdopodobnie napisał kiedyś esej w naszej karierze Yale. Mamy prawdopodobnie dostał rozmowę, gdzie mamy kazano nie popełnić plagiat nasz esej, dlatego, że praca nie jest nasza. W informatyce, mamy tego samego rodzaju koncepcji. Wszystkie prace, które można złożyć, cały kod, który piszesz powinien być kod, który napisałeś. Nie powinien być kod, który już skopiowane z innego miejsca. Nie powinien być kod, który masz google i koleś w i naprawdę nie wiem, czy to działa. Jesteś rodzaju mają poczucie co robi, ale nie do końca. W przypadku wątpliwości, w zasadzie, to jest po prostu rozsądne. Na naszym programie nauczania, mamy cała lista rzeczy widzimy, jak rozsądne w porównaniu nie rozsądne. Na przykład, racjonalne to ty i twój przyjaciel Omawiając jaki jest najlepszy sposób, aby przejść o logiczne rozwiązanie problemu. To dość rozsądne. Co nie byłoby rozsądne jest, jeśli dostaliście razem, wpisany ten sam kod, i zwrócił się w tym samym kodzie. To nie jest rozsądne. Samo, rodzaj eseju. Jeśli chcesz, aby omówić z przyjacielem, hej, to jest to, co chcę pisać. Oto kroki, które chcę się o tym pisać, to świetnie. Wspaniale. Proszę współpracują ze sobą. Jeśli faceci zaczynają pisząc to samo, z kolei w tym samym eseju, to mniej OK. Tak więc w razie wątpliwości, po prostu nie rób tego. Tutaj, w CS50, mamy skrypty że prowadzony do automatyzacji przetestować nie tylko poprawność kodu, ale także niepowtarzalność kodu. Więc proszę nie stawia nas w pozycji z konieczności odnoszą sprawę do ExComm. Proszę, po prostu dla wszystkich, po prostu uczynić to wspaniałe doświadczenie. Każdy uczy się lepiej, wszyscy są szczęśliwsi, i są ustawione do skorzystać z kursu. Coś, co jest bardzo Wyjątkowość tej klasie że myślę, że każdy powinien naprawdę zwrócić uwagę na to, że mamy co nazywa żal Klauzula w naszym programie nauczania. Więc zasadniczo, w ciągu 72 godzin, jeśli uważasz, że zrobiłeś coś nie jesteś pewien, został stosowne, proszę przyjść do nas. Obiecujemy, że w ciągu 72 godzin będziemy sobie sprawę sami bez odnoszenia się do poziomu wyższego organ administracji. Więc jeśli przychodzą do mnie i mówią: Andi, hej, naprawdę mi przykro, ale myślę, że istnieje kilka linii w moim Kod ostatniej nocy, że trochę google, Wysiedliśmy Stack Przepełnienie, kopiować i wklejać, i jestem bardzo, bardzo przykro o tym, daj mi znać. Proszę, nie tylko niech jątrzyć i po prostu nadzieję, że złapię go. Będziemy go złapać. Wystarczy przyjść do mnie. Daj mi znać, w ciągu 72 godzin. Dowiemy się rozwiązanie. I obiecujemy, że nie będziemy odnosić się do Władze uczelni zasadniczo. Więc jest to w najlepszym interesie, po prostu być uczciwym wobec siebie zaangażowane w czasie. OK. OK. Więc teraz, szybko, zanim I przejść, czy ktoś pytań dotyczących logistyki od tego, jak kursy mamy zamiar uruchomić, jak sekcje będą do pracy, z tego? OK. Tak. PUBLICZNOŚCI: [niesłyszalne]? ANDI PENG: Tak. Więc quizzes--, jak wielu z was jest w sekcji poniedziałek / środa? Jak wielu z was jest w we wtorek / czwartek? OK, więc jest to stałe podzielone tutaj. Tak więc sposób, w jaki prowadzimy że w Yale jest to, że będziemy mieć dwa oddzielne quizzes-- jeden dla każdego section--, że będą podejmowane podczas zajęć. Myślę, że to październik, koniec października, coś takiego, jak jeden tydzień quizu. Tak, tak, po prostu przyjść na zajęcia. Na tej poniedziałek lub środę, weźmiesz udział w quizie. Na tej wtorek lub czwartek, musisz podjąć inną quiz. Ale ten sam materiał będzie pokryty. Tak. Dobre pytanie. Tak. PUBLICZNOŚCI: Dokąd przejść, by sprawdzić nasze oceny? ANDI PENG: Tak. Więc będzie Wysyłając e-mail, co w tygodniu kiedy quizy są graded-- lub, Przepraszam, jeśli psets są klasyfikowane. Psets są zwykle okazało przed południem lub w piątek. Więc obiecuję, że będę postarać się je z powrotem do Ciebie od południa następnego piątku. Ilekroć Grade A pset, poślę z powiadomienia na książki gatunku które mówi, swój wynik można przeglądać online. Tak dobrze w tym tygodniu, po I zakończenie klasyfikacji zeszłotygodniowe psets, chłopaki dostaną e-mail zawiadomienie z informacją, hej, to jest, gdy cię przejść do przeglądania klas. I można zobaczyć, co podział swoich klasach. Możesz zobaczyć komentarze. Och, szybkie rzeczą również. Sekcja komentarz w wielkim Książka jest gdzie będę prawdopodobnie spędzają większość mojego czasu klasyfikacji. Więc jedna rzecz, która jest bardzo ważne, kiedy Ci faceci są sprawdzające twoje stopnie na swoim psets jest nie tylko patrząc w wyniku fizycznego ale także poświęcenie czasu na naprawdę przeczytać moje komentarze. Często, który daje informacje zwrotne o tym, jak masz rozwiązanie problemu. Jeśli trzeba zrobić coś nieco lepiej, konstruktywna krytyka jest zwykle najlepiej podane w tych komentarzach. Więc proszę, proszę, będę spędzić czas pisania komentarzy. Proszę, ja naprawdę wdzięczny jeśli faceci będą czytać te komentarze. OK. Chłodny. W porządku. Tak więc mamy zamiar zacząć mówić i po prostu przeglądając szybko część materiału z Tydzień zera tak jesteśmy po prawej stronie dla począwszy tego tygodnia problemów. Więc pętli while jest jednym z trzech rodzajów pętli omówiono wcześniej w tej klasie. Pętla natomiast zasadniczo jest napisane w składni W przypadku, gdy podczas pewnego warunku to zrobić wielokrotnie, prawda? Pomyśl o tym w tej grafice tutaj. Masz zamiar rozpocząć się pewien punkt w kodzie. Masz zamiar wprowadzić warunek pętli if-- Nie know-- x jest mniejsza niż jeden. Jeśli to prawda, masz zamiar wykonać ciała pętli. I masz zamiar to robić to ponownie, ponownie, ponownie nad i over--, dlatego, że jest to loop-- aż warunek staje się fałszywe. Tak więc w ten sposób pętli jest prostsze sposoby napisać jakikolwiek warunkiem, że musi powtarzać w kółko. Wystarczy być ostrożnym, gdy piszesz jakiejkolwiek pętli że masz warunek wyjścia, jak oraz jako aktualizacja cokolwiek to jest tak, że pętla nie tylko uruchomić w kółko w nieskończoność. W każdym razie, będziesz chce, aby upewnić że jesteś zmieniając pewne aspekty kod lub na końcu pętli by upewnić się, że masz sposób od postępu w kierunku stanu że chcesz się spotkać do końca. Czy to ma sens dla każdego? Po prostu nie chcę być wciągnąć w spiralę gdzie idziemy dookoła i nie ma sposobu, aby przerwać pętlę. I każda pętla zasadniczo ma sposób to robić. OK. Po drugie, wielu z was w Twoich psets Mario prawdopodobnie miał zatrudniać Ten rodzaj pętli. To się nazywa robić podczas pętli. Przede wszystkim, może ktoś mi powiedzieć, jaka jest różnica między zrobienia pętli while i pętli while jest? Tak. PUBLICZNOŚCI: The Do pętli while pracuje na pierwszym [niesłyszalne]. ANDI PENG: Tak, dokładnie. Więc zrób while zawsze robi cokolwiek jest wewnątrz do, wewnątrz nawiasów tam i robi tego warunku przed sprawdzeniem the-- przykro, robi tego kodu przed sprawdzanie warunku. A jest to szczególnie istotne dla nas tutaj, w tej klasie, bo większość czasu będziemy chcieli skłonić użytkownik z jakiegoś rodzaju wejścia. A następnie, w zależności od wejście dają nam, wtedy możemy ocenić, oh, nie musimy skłonić je ponownie? Tak więc w Mario, jeżeli użytkownik dała ci ujemna wysokości, na przykład, idziesz do pierwszego wiersza i robić, co jest w środku. Potem idziesz do sprawdzenia czasu. Wiesz, jest ujemna 1, jest to, że liczbę dodatnią? Jeśli tak nie jest, mam zamiar iść z powrotem i powtórzyć zrobić i powtórki i powtarzać i powtarzać, dopóki nie wreszcie daje liczbę, która Ci się podoba, że wszyscy możemy zatrudnić w naszym kodzie. Jest to dość ważne dla zasadniczo wprowadzania danych przez użytkownika. Mogę zagwarantować żadnej Czas w pset gdzie prosimy o wejście każdy rodzaj kodu, jesteśmy Prawdopodobnie będzie Ci przypadek testowy, w którym jesteśmy zamiar dać ci coś złego, że to zamiar spróbować złamać kod. Jeśli staramy się prosić o wejście całkowitą, może po prostu dać ciąg i zobaczyć, jak można sobie z tym poradzić. Jeśli poprosimy Cię zatrudnić wiek, możemy daje liczbę ujemną aby zobaczyć, jak można sobie z tym poradzić. Wystarczy upewnić się, chłopaki są badania dla przypadki, w których nie dostaniesz najlepszy wejście, powiedzmy. I zrób pętli while jest często najlepszym sposób zaprojektować swój kod tak że spełnia ten zakres. OK. OK. Więc to jest chyba najbardziej Kompleks pętli z trzech że poznaliśmy już tak daleko. I wydaje się bardzo przerażające na początku. Ale gwarantuję Ci, po was się zawiesić, jak korzystać z pętli for, jest to jeden z najbardziej przydatnych rzeczy, najbardziej użytecznych narzędzi w arsenale do przesuwania do przodu w tej klasie. Tak na przykład, w zera, mieliśmy to bardzo prosty blok że po prostu powiedział powtórzyć pewne Określenie pewną liczbę razy. Przy okazji, SAJ-- to Scaz Andi Jason. My często podpisać nasze maile Saj. Jeśli mówimy Saj, nie należy mylić. To tylko my. Tak więc w Scratch, mogliśmy mieć blok, który powiedział, powtarzam kocham Saj! 10 razy. Bardzo prosta. Logika, że ​​jest bardzo, bardzo proste, prawda? Chcę najpierw przejść przez pierwszy czas i zobaczyć, że po raz drugi i zobaczyć, że po raz trzeci, itd i tak dalej, aż dojdziesz do 10. A sposób, które reprezentujemy, że w Kod jest tylko poprzez proste dla pętli. Więc dla, masz zamiar zadeklarować zmienna tutaj, w tym przypadku, przy wew. Jedziemy do jej nazwiska. Mamy zamiar zainicjować go na 0. I edycja zatrzymanie jest Będzie i mniej niż 10. A aktualizacja będzie i ++. I w pętli, to będzie wykonać aż ostatecznie uderza koniec condition-- w którym przypadku, to będzie złamać pętli. Nie powinno być rzeczy, które Cię faceci mają wszelkiego rodzaju widział i miał do czynienia z problem ustawione. Czy ktoś ma jakieś pytania dotyczące tej chwili dla pętli? OK. Wielki. OK. Więc dla tych z was, którzy mają przeczytać specyfikację pset na ten tydzień wiemy, że będziemy musieli zatrudnić coś, co nazywa ASCII i tabela ASCII. Dawid w wykładzie podszedł krótko w jaki sposób komputery essentially-- wszystko zakodowana jest w komputer, w binarny, w zer i jedynek. A sposób, że komputery są w stanie do przechowywania różnych wartości oprócz z zer i jedynek są poprzez określanie te numery do reprezentowania innych cyfry lub zasadniczo inne znaki. Tak więc w tym przypadku, ASCII table-- wszystko robi jest mapa znaków lub znaków, do liczb. Więc pliku kodu źródłowego w Twój computer-- widzi, hej, kilka zer i jedynek, zer i jedynek, zer i jedynek. To, co zapisane w Rzeczywista pamięć komputera. Ale kiedy my, ludzie chcą komunikować się z komputerem want-- to znaczy, na przykład, jeśli chcę z wielkiej litery A, Mam zamiar potrzebny jakiś sposób opowiadania komputer, oh, po wpisaniu wielkiej litery A, to znaczy reprezentacja w formacie binarnym. I tak, jak nam się to, że jest rzucił dowolna rzecz zwana tablicę ASCII, gdzie my, jako ludzie, jako programiści, jakiś czas temu, arbitralnie postanowił, że my zamierzali przypisać te liczby wartości do tych znaków. Więc chłopaki mogą google to on-line. Myślę, że link do niego w swoich pset-- tabeli ASCII tylko mapa, ASCII stół. To po prostu przekłada binarny numery na znaki. I to będzie bardzo przydatne do zestawu problemów gdy chcesz obliczyć coś lub jeśli Aby wyświetlić pewne znaków lub liczbami całkowitymi lub manipulować niektórych znaków. To będzie bardzo ważne, aby wszystkie wiedzieć, jak poruszać tablicę ASCII. Tak więc, na przykład, z wielkimi A jest reprezentowany przez liczbę 65. A małe reprezentowany przez 97. Dlatego tak ważne jest, aby wiedzieć, że Różnica pomiędzy tymi dwoma wartościami jest 32. Często, jeśli chcesz przekonwertować z jednego do drugiego, z tą różnicą, 32. I nie martw się, jeśli jesteś miły mylić w tej sprawie na początku. Pójdziemy nad tym, jak to będzie Zatrudniamy to w rzeczywistym kodzie. OK. Więc dla tych z laptopami na zewnątrz, nie krępuj się podciągnąć tablicę ASCII, bo to będzie prawdopodobnie wymagają wy odwołać jakie znaki są. OK. Więc wiedząc, że pewne znaków map do określonych numerów, gdybym miał działać tylko pierwszy linia, która code-- printf a, małe litery na minus wielkie litery A. Czy ktoś mają odgadnąć, co będzie drukowanie teraz z ekranu? Tak więc przede wszystkim, co czyni w małe reprezentują? Jaki numer jest, że kodowane w tabeli ASCII. Przepraszam? PUBLICZNOŚCI: 97? ANDI PENG: 97, świetnie. I to, co jest wielkie litery A? PUBLICZNOŚCI: 65. ANDI PENG: Więc co jest 97 minus 65? PUBLICZNOŚCI: 32. ANDI PENG: OK. Więc co myślicie będzie stanie, gdy wejście że linia kodu do mojego komputera? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Niestety, mówić. Bez obaw. Jest to bardzo bezpieczne środowiska, minus aparat. Wszyscy będziemy to-- bez obaw. Po prostu wszyscy będziemy udawać, jak to jest po prostu nam krew w żyłach w tym pokoju. Bez obaw. Nie pytanie jest zbyt głupi. Brak odpowiedzi jest głupia odpowiedź. Jestem prawdopodobnie będzie popełniać błędy w trakcie mojego nauczania. Poważnie, chłopaki, po prostu wygadać go. Bądź pewny siebie, wiesz? Więc co to było? Kto powiedział, że ostatni odpowiedź? OK. Krzyczeć, że ładne i jasne. PUBLICZNOŚCI: 32? ANDI PENG: 32. OK, niech ten kod i sprawdzić, czy to co się dzieje. OK. Jak tak chłopaki mogą rodzaju zobacz, typowy zapis skończyłem założyć tutaj jak będziemy zatrudniać każdy rodzaj programu w naszym komputerze. Mamy funkcję main w naszej głównej funkcji. Mam zamiar po prostu skopiować i wklej wiersz kodu. Należy także uważać, kiedy faceci kopiowania i wklejania kodu. Czasami niektórzy operatorzy Nie wklej ponad poprawnie. W tym przypadku, minus znak był rzeczywiście myślnik. A więc komputer nie go podnieść. Musiałem więc wrócić i fizycznie wpisywać tego. Wystarczy być ostrożnym, gdy wy robicie to. OK. Mamy zamiar uruchomić to tutaj. Więc jedziemy do cd do naszego sekcja2. Zadzwoniłem ten program asciimath. Więc pamiętaj, kiedy uruchomić dowolny Program, chcemy skompilować go poprzez uruchomienie go za pośrednictwem naszej marki. A potem chcemy faktycznie uruchomić program wykonując dot-slash. Więc będziemy ./asciimath. Racja, nie idziemy. I widzimy 32. Bardzo dobrze. Zasługujesz na cukierka. Cukierki dla Ciebie. Przepraszam. W porządku. OK. Tak więc możemy wrócić do naszego przykładu tutaj. Ach, nie. Aaa. OK. Idę do utrzymania go w taki sposób. OK. OK. Tak jak wy może zobaczyć, co możemy zrobić, wiele bardzo ciekawych rzeczy, wiele bardzo fajnych rzeczy, dużo bardzo skomplikowane rzeczy z udziałem Znaków ASCII i numery. Gdy dojdziesz do linii pięć, to dużo, aby podążać. Nie zamierzamy iść po rozdziale. Zapraszam do, jeśli możesz, Przyczyną tego, że na papierze najpierw na to, co dzieje się, kiedy należy wybierzemy taki łańcuch wartości. Na przykład w tym ostatnim wierszu mamy z-- która reprezentuje pewną number-- A-- który również reprezentuje pewne number-- plus 1 modulos 26 oraz małe litery a. Jeśli faceci czytaj dalej przez nich, ci mogą zobaczyć wzór pojawią się w jak mamy manipulować kod. Gorąco, gorąco polecam po rozdziale was wszystkich faceci iść do przodu i wejście wszystkich osób w komputerze i zobaczyć, jakie numery wychodzą i rozumowania poprzez dlaczego te są dzieje, bo dla psets to będzie bardzo ważne aby zrozumieć dlaczego pewne rzeczy się dzieją. Wszystkie te slajdy będzie online. Więc nie ma obaw o próby fizycznie skopiować notatki. Wszystko jest w Internecie. Ten sam odcinek będzie online. Cały mój kod źródłowy, który Używam będzie online. Tak. Czy masz jeszcze pytania? PUBLICZNOŚCI: Co to jest modulos? ANDI PENG: OK. Więc modulo jest operator, który będzie być bardzo ważne, aby pset twoich ludzi damska tutaj. Więc sposób, że operatorzy w C, w pracy programowania jest to, że masz to, co się nazywa symbol podziału i symbol modułu, która jest jak znak procent. Tak więc w C, kiedy to zrobić liczbę całkowitą podzielona przez liczbę całkowitą z kreską, C ma tendencję do wycięcia od wszystkich miejsc po przecinku, ponieważ liczba całkowita chce do konwersji na liczbę całkowitą. To nie będzie chciał być podwójne z kilka dziesiętnych wszystko po to. Więc jeśli mam 3 podzielone przez 2, to będzie do odcięcia 0,5 i po prostu daje 1. Więc to jest coś być bardzo ostrożnym, gdy jesteś robi jakiejkolwiek matematyki w zakresie programowania, jest to, że numery można dostać Nie mogą być numery że można było myśleć, dlatego też zaokrąglanie w twoim ostatnia pset jest tak ważne. Modulo daje resztę. Tak na przykład, jeśli zrobiłem 3 modulo 2-- więc 3 procent podpisania 2-- to daje resztę tego. Więc 3 podzielone przez 2 1.5. Jest 1 pozostała część 1. To daje 1, w którym Jest to pozostałą część. Więc kiedy chłopaki idą poprzez tabeli ASCII, modulo będzie w końcu jest coś, co jest bardzo ważne, i omówimy to później. OK. Więc coś, co jest ładne, całkiem nowy i dość wyjątkowy że mamy omówione w tym tygodniu jest pojęcie, co tablica jest. Tak więc tablica jest pierwszą typ struktury danych że będziemy spotkać się w tej klasie. Wszystko jest to struktura danych jakaś arbitralna, dosłownie rzeczy takie jak struktury że my jako programiści stworzyli, które umieściliśmy w naszym kodzie, że mogą zawierać inne fragmenty kodu. Więc w tym sensie, w array-- myśleć o tym jak szafka, gdzie po otwarciu inna półki swojej szafce, można uzyskać dostęp do różnych rzeczy. W pamięci, tablica jest po prostu robi to samo na komputerze. Możesz mieć inny blocks-- my Nazywamy je indices-- tablicy. To tak jak w bloku, półka pamięci które stworzyliśmy w swoim komputer, który można wprowadzić pewne rzeczy w różnych miejscach. Więc z tablicy, można Zawsze trzeba specify-- musisz określić uznającej Tablica w następującym formacie. Będziesz pierwszy określić typ danych które chcesz utworzyć tablicy. Jeśli chcę tablicę liczb całkowitych, Mam zamiar umieścić int tam. Jeśli chcę tablicę łańcuchów, Mam zamiar umieścić tam sznurki, nazwa macierzy, a następnie będziesz mieć nawiasów kwadratowych. I wewnątrz nawiasów kwadratowych, jesteś będzie mieć rozmiar macierzy. Coś, co naprawdę ważne, aby należy pamiętać podczas tworzenia macierzy jest , że po utworzeniu Tablica, że ​​rozmiar nie może zmienić. Więc jeśli wiesz, że teraz masz tablicę wielkości 10, wiesz, że ja będę miała 10 komórek wewnątrz lub 10 indeksów w tej tablicy, i nigdy nie będzie rozszerzyć lub zmniejszyć nie wiem co, i że nie ma obecnie zaledwie 10 przecznic od miejsca przydzielone w pamięci, które mogą przechowywać do 10 rzeczy, bez względu na już wprowadzone. Więc w ten sposób, typ danych tablicy, Struktura danych, która jest tablicą bardzo różni się od niektórych innych będziemy być obejmujące później w tym kursie. Tak. Na przykład, jeśli chcesz utworzyć tablicę wielkości 3, które zawarte zmienne integer-- Oh, przepraszam, od temperature-- i temperatury, z Oczywiście, jest liczbą całkowitą. Więc tworzymy int, który jest typ danych, co chcemy zapisać. Jedziemy do wywołania tej temperatury ze względu na nomenklaturę nazewnictwa coś, co wszyscy rozumiemy. A my będziemy mieć nawiasów kwadratowych. I chcemy trzy numery. Tak więc mamy zamiar umieścić trzy w jej wnętrzu. Coś, co naprawdę Ważne, aby pamiętać, jest to, że tablice są indeksowane zera. Wszystko to oznacza, że ​​Ciebie rozpoczyna się wskaźnikiem 0, i uruchomić się poprzez rozmiar tablicy minus 1. Tak na przykład tutaj, tablicę o rozmiarze 3. To będzie w stanie trzymać trzy wartości. Ale numery themselves--, że Numer, tablica, że ​​indeks, tablica, są 0 do 2. Więc chłopaki, jest bardzo, bardzo ostrożny, gdy przechodzisz problemów przedstawionych i tworzenia jakiejkolwiek tablicy, ponieważ wiele razy, że to bardzo, bardzo łatwo zapomnieć, że. I rzeczywiście nie mają indeks 3, że obecnie tylko mają indeks 2. A jeśli spróbujesz dostęp trzeci indeks, to będzie, co to nazywa terminator null. To nie dzieje się naprawdę istnieje w tablicy. A komputer jest nie spodoba. Dlatego należy zachować ostrożność, kiedy masz dostęp do rzeczy, po prostu aby upewnić się, że pamiętasz że tablice są indeksowane zera. OK. Tak więc pierwszym przykładem jest to jednym ze sposobów tworzenia tablicy. Drugi przykład mam Poniżej znajduje się oddzielny sposób tworzenia co ma te same dane Struktura, że ​​my właśnie wprowadzane. Więc zamiast fizycznie działa przez i wprowadzenie w temperaturze od 0 równa się cokolwiek, temperatura 1 równa się niezależnie, Temperatura 2 równa cokolwiek, mogłem właściwie tylko bezpośrednio stworzyć to wszystko w jednej linii do temperatury nawiasach kwadratowych równa. Oraz zawiadomienie w tej sprawie, nie trzeba określić jak duży tablica jest, ponieważ komputer będzie przejść i zobaczyć, że nie jest trzy elementy w tych klamrach. I to będzie wiedzieć, OK, Potrzebuję tablicę wielkości 3. Nie masz zamiar trzeba Wejście to w następujący sposób. A także, tak, w ten sposób. Czy ktoś ma pytania dotyczące sposobu robimy tablice lub jak struktura tablicy działa? Tak. PUBLICZNOŚCI: [niesłyszalne]? ANDI PENG: Tak, dokładnie. Więc jeśli było zadeklarować i zainicjować tablica następującej metody, który jest drugi sposób, można po prostu zostawić tych. I komputer automatycznie wie, że to musi liczyć, jak wiele elementów są w tych klamrach, oddzielając przecinkami. Więc tutaj widzą 65, 87, 30. Więc komputer wie, oh, tam trzy liczby całkowite. Wiem, że aby stworzyć nazwę tablicy Temperatura trzy elementy w nim. Dobre pytanie. Tak. PUBLICZNOŚCI: Czy to nie jest możliwe, aby stworzyć tablicą różnych typów danych które mogą być wprowadzone do niego? Na przykład, z liczb całkowitych [niesłyszalne]? ANDI PENG: Dla celów tej klasy, nie teraz. Podczas tworzenia danych struktury jak tablica, mówisz komputer, hej, potrzebuję cię przeznaczyć tyle Pamięć w moim dysku twardym, przy czym każda komórka będąc Pewna liczba bitów. Pamiętaj, dowiedzieliśmy się w tym tygodniu zerowej, że różne dane typy mają różne rozmiary? Tak na przykład, ciągiem jest różna ilość przestrzeni niż char, który jest różna ilość miejsca od liczby całkowitej. A więc jeśli nie podasz i mieszać i łączyć, jakie rodzaje zmiennych masz komputer z systemem użytkownika będzie bardzo zdezorientowany. A to nie będzie wiedzieć ile pamięci dać. Tak więc dla celów prawej teraz, komputery mogą tylko rozpoznaje jeden rodzaj tablicy. Dobre pytanie. OK. Więc Naturalnie, Pytanie drugie mamy to dobrze, że teraz mamy stworzył Tablica i umieściliśmy wszystkie te rzeczy w tablicy, jak my jesteśmy będzie miał do niego dostępu? Więc typowa struktura, że ​​zawsze dostęp do tablicy jest nasz piękny na pętli. Obiecuję, chłopaki, że będziemy zobaczyć wiele tego faceta tutaj. Zasadniczo, kiedy tylko chcesz aby wprowadzić wartości do tablicy lub chcesz ich dostępu, Najlepszym sposobem na to jest dla pętli, bo w pętli for, to wiem, ile razy jesteś będzie chciał uruchomić przez tablicę, bo masz edycję zatrzymania, prawda? I za każdym razem uruchomić za pośrednictwem, można uzyskać dostęp do inny element tablicy. A także, że jest to powód, dla którego zwykle zaczynamy pętli na wartość 0, bo gdy masz dostęp do tablic, można uzyskać dostęp do wskaźnika zerowego. I tak to paralele bardzo ładnie. Wy nie chciał się Napisać do int i jest równa 1. i jest mniejsza lub równa 3. Ale to nie działa już tak dobrze tutaj, bo tylko mają elementy się z 0, 1 i 2. I tak, jeśli były, aby rozpocząć Twój i na elemencie 1, 2 i 3, masz zamiar skończyć z systemem poza granicami macierzy, i złe rzeczy się wydarzy. Więc mam nadzieję, że chłopaki zobaczyć segue dlaczego we wcześniejszych klasach my was uczyć jak prowadzić i sformatować pętli for sposób, że byliśmy. To dlatego, że teraz mamy przesiedli się do tablic, można zobaczyć, dlaczego 0 pożycza Sam bardzo ładnie do dostępu. Tak, jak nam się to, że jest that-- jestem tylko drukowanie go tutaj dla dobra drukowania go. Ale mam zastępczy, przecinek. A rzeczywista użytkowanie Część dzieje. Nazwa tablicy nazwano temperatury. Więc jest to temperatura i i-ty element tablicy. Więc jak dla pętli biegnie, to będzie zaczynać się od 0. To będzie wydrukować 0-ty wskaźnik tej tablicy. Wtedy to będzie drukować na pierwszym elemencie. Wtedy to będzie drukować z drugiej. A potem mamy zamiar złamać. Czy wszyscy są jasne jak to się dzieje? Wielki. W porządku. Więc tutaj mamy drogę mówiąc, jeśli nie chcemy do twardego kod in-- mnie jako programista. Nie chciałem, aby faktycznie fizycznie umieścić w każdy pojedynczy element tej tablicy. Gdybym chciał, a nie mają wartości wejściowych użytkownika, jaki jest najlepszy sposób to zrobić? Cóż, tutaj Stworzyłem ten piękny funkcji, w którym mogę zadeklarować tablicę. Więc int scores-- niech po prostu powiedzieć, że chcesz, aby tablicą, która odbyła się gatunki wszystkich 18 od tutaj w tej części studentów. Myślę, że mamy trochę więcej niż 18 dzieci dzisiaj. Ale ze względu na przykład, w niech po prostu założyć, że mieliśmy 18. Chciałbym stworzyć wyniki nazwą tablicy z Typ int, ponieważ wyniki, oczywiście, są liczbami. I zamierzam mieć 18 w nawiasach kwadratowych, bo to, jak wielu studentów I Chcesz być w stanie przechowywać dziesiątki. I sposób chciałbym wypełnić tablica jest, że będę uruchomić go za pomocą pętli for, z Oczywiście, gdzie 0 oznacza mój 0-ty indeksu. A następnie 18 jest moja zatrzymując edycję, bo nie ma 18 elementów w tablicy. A potem mam zamiar zrobić printf, Enter wynik dla student-- bla bla bla. Czy ktoś może mi powiedzieć, dlaczego tu jestem drukowania ja plus 1, a nie ja? To trochę trick Pytanie, raczej nie. Faktycznie nie fizycznie wpływa na funkcjonowanie kodu. Tak. PUBLICZNOŚCI: [niesłyszalne] 0? ANDI PENG: Tak, dokładnie. Jest to trochę niewygodne powiedzieć, hej, jesteś 0-ci uczeń w tej klasie. To trochę dziwne. Tak więc my, jako ludzie, nie lubię myśleć o tym, jak komputery myśleć. Dlatego, mimo że w komputer, to przechowywania wartości W 0-tym indeksie, kiedy Jesteśmy ludźmi, nie bardzo odnieść się do siebie jako zero. Kiedy więc po prostu wydrukować, że Mam zamiar wydrukować i dodaj 1 dla zachowania jasności. Więc podczas drukowania, mam zamiar być w stanie wydrukować studentów 1 do 18. Faktycznie nie wpływ bieg kodu w żaden sposób, sposób wydrukować. Ale uważaj, gdy jesteś faktycznie dostępu do tablicy. Kiedy widzisz wyniki I, zauważyć tutaj, że jestem naprawdę dostępu do indeksu 0TH i nie 1 plus 0-- lub 1 plus 1, w tym przypadku, indeks tak że to rzeczywiście jasne. Czy każdy rodzaj OK jak to działa poprzez iz każdym indeksie jestem wprowadzenie wartości do tablicy i tworząc tablicę z 18 liczb że użytkownik zamierza wprowadzić? OK. Chłodny. OK. Przechodzimy teraz do czegoś, co jest dość istotne dla tego kawałka ustawić, jak również. Wiem, że w wykładzie David-- Przepraszam, że masz pytanie? PUBLICZNOŚCI: Czy można je powiększyć? ANDI PENG: Tak, więc spróbowałem. Ale nie wiem. Z jakiegoś powodu, to wersja programu PowerPoint to naprawdę nie działa oraz z wyświetlaczem. Więc my po prostu się aby utrzymać go w ten sposób. Wszystkie te będą przesyłane w Internecie. Przepraszam chłopaki. Tak. OK. Tak więc możemy również ciągi. Więc jeśli rzeczywiście faceci notice-- I wiem, Rob podszedł to w tym wykładzie że did-- ciąg jest faktycznie po prostu tablica znaków, jeśli myślisz o tym, prawda? Łańcuch jest nazwa lub zdanie lub słowo, prawda? Gdybym miał stworzyć ciąg nazwie Tylko Andi-- moje imię, A-N-D-I. Myślisz, że jak tylko jednej zmiennej. Ale tak naprawdę, to w podziale do zaledwie tablicy znaków. Więc nie ma to postać z zapisanego w wartości tablicy. Ma charakter n przechowywane w drugi indeks i tak dalej, i tak dalej. Tak więc w taki sposób, że rzeczywiście tego rodzaju struktury ustawić w miejsce dla naszych strun. Więc, gdybym wejścia w Słowo "jeść" - tak słowa ciąg jest równy uzyskać ciąg. Gdybym był wprowadzić słowo "jeść", które jest fizycznie sposób, że mój komputer zapisuje ten ciąg w mojej pamięci. A jeśli chcę uruchomić poprzez które i drukiem, że out-- więc na na I równa zero, pamiętam, w wykładzie, że pokryte czymś, co się nazywa strlen, lub długość łańcucha. Bo w rzeczywistości nie wiedzieć, jak duża tablica jest niezależnie od ich inputting-- użytkownika Na przykład, wprowadzane słowo "jeść", i wiem, to długo, trzy znaki, prawda? Więc może umieścić tam w trzech i wszystko będzie dobrze. Ale jeśli coś wejściowego użytkownika to inna liczba wartości, będziesz nie być w stanie naprawdę wiedzieć, że podczas programowania kodu. Tak więc sposób, w jaki traktujemy przypadków testowych jak to jest, że mamy coś nazywa strlen, który jest po prostu funkcja który mówi, jak długo ciąg jest. Więc strlen słowa. Moje słowo jest jeść. n wynosi strlen o słowa. Czy ktoś może mi powiedzieć, co to wartość rzeczywiście jest tam? Co n reprezentujący prawo teraz, w tym przypadku, gdybym miał jeść? PUBLICZNOŚCI: 3. ANDI PENG: 3, dokładnie. Mamy więc do int i równa zero, n jest równe 3, zasadniczo. A ja ma zamiar uruchomić dopóki jest to mniej niż 3i ++. I to będzie w zasadzie przejść przez i zrobić to samo. To będzie wydrukować każda wartość i daje E-A-T. To tylko oznaczający inny sposób pisania. To będzie bardzo pomocne. Tak. PUBLICZNOŚCI: Co korzyści z wprowadzenia n wynosi strlen słowo wewnątrz, że pętli [niesłyszalne]? ANDI PENG: Tak. Więc gdybym to-- powiedzieć, na przykład, gdybym miał to zrobić, a następnie do-- oop--, że w moim kodu, byłoby faktycznie robi tak samo. , Tak, że Dawid wyjaśnił jednak to podczas wykładu, jeśli ktoś z was chłopaki pamiętam, było to, że, jak ludzie, jak programistów, naprawdę spróbować programie Nasi kod tak, że nasz komputer ma do pracy możliwie jak najmniejszy, więc że nasz kod jest bardzo wydajny. Więc gdybym miał, że nie, co by się stało w moim pętli for jest to, że ja pierwszy zadeklarować zmienna o nazwie i będzie 0. Mam zamiar sprawdzić, oh, co jest strlen od słowa? Och, strlen 3. Tak jest i mniej niż trzy? Tak to jest. Idę biegać. A potem drugi raz z powrotem około pętla, mam zamiar zwiększyć i. i będzie jeden. A ja ma zamiar sprawdzić, oh, ale co to jest strlen słowa? Och, to trzy. A nie, że wydają rodzaju marnotrawstwa, za każdym razem poprzez pętlę, do kontroli funkcji, chociaż z strlen o słowie nigdy nie zmieni? Więc jest to dodatkowa moc dla komputera. Kiedy zaczynasz mówić o rzeczach, że są miliardy i miliardy i miliardy miejsc długie, wyobrazić sobie komputer konieczności fizycznego przejść i sprawdzić wszystko to za każdym razem. Dlatego, aby po prostu ze względu na efektywność, mamy tendencję, aby to zrobił, ponieważ w ten sposób jesteśmy tylko wywołanie funkcji raz na początku a każdy czas przechodzi przez to będzie do przechowywania wartości 3 tam, że nie trzeba ciągle sprawdzać za każdym razem. Tak. PUBLICZNOŚCI: Niestety. Tylko [niesłyszalne]. Można to zrobić int n wynosi strlen i umieścić że wyżej zewnątrz pętli for równie dobrze? ANDI PENG: Tak. Można to zrobić, absolutnie. Powodem mamy to tutaj jest dlatego, że sposób, w jaki na prace pętli jest to, że się nazywa zmienna lokalna w tym sensie, że wszystko, co masz tworząc wewnątrz pętli for istnieje tylko wewnątrz pętli for. Więc zmienna i tylko istnieje w tych wsporników. I tu zmienne n także istnieje tylko w tych wsporników. Więc jeśli było używać strlen z słowo kilka razy w dół poniżej, absolutnie najlepszym sposobem, aby to zrobić byłoby zadeklarować go na szczyt więc nie musisz robić to raz. Tak. PUBLICZNOŚCI: Dlaczego masz Nowa linia po procentach widząc, jeśli chcesz umieścić wszystkie litery obok oddzielić? ANDI PENG: Och, chciałem wydrukować je wszystkie na każdej linii. To nie ma znaczenia. Tak, to jest formatowanie. To dobre pytanie, choć. Tak, jeśli chcę wydrukować to wszystko tylko na jednej linii, Nie chciałbym mieć myślnik w. OK. Każdy dobry? OK. Chłodny. Więc myślę, że mówił mało. Kolej chłopaki do uruchomienia poprzez Kod i powiedz mi, co jest nie tak tutaj. Gdzie jest błąd? Więc jak widać, już uznany za Nowa tablica typu String o nazwie klasy. A ja wprowadzane Sam, Jess, i Kim do niego. A ja próbuje wydrukować wszystkie elementy tablicy. Czy ktoś może mi powiedzieć, dlaczego ma dać mi problemy? Dam ci faceci 10 sekundy, aby myśleć o tym. OK. Tak? PUBLICZNOŚCI: Czy lewica centrum równe 3 lub [niesłyszalne]? ANDI PENG: Racja. Więc ile razy jest to rzeczywiście będzie prowadzony przez tę pętlę? PUBLICZNOŚCI: Cztery. ANDI PENG: Dokładnie. Zapowiada się poprzez cztery razy. To będzie przebiegać przez w 0, 1, 2 i 3, ponieważ ich elementem jest i jest mniejsza niż lub równa 3. To się nie zatrzymać, kiedy to 2. Zapowiada się utrzymać dzieje, dopóki nie natrafi 3. A jak wiemy, jest tylko trzy elementy w naszej rzeczywistej tablicy. Jeśli staramy się, aby uzyskać dostęp czwarty Element lub indeks 3, masz zamiar uderzyć gdzieś w pamięci, które nie istnieją. To się nazywa terminator null. Nic ci się nie będzie. Komputer nie będzie być bardzo szczęśliwy z tobą. Tak. Czy ktoś ma pytania dlaczego to się dzieje? To wspólny obszar, aby uniknąć. Tak. PUBLICZNOŚCI: Nie pierwszy przesuń również ciąg 2? ANDI PENG: Nie Więc zasadniczo, gdy robisz tablicę, że prawy nawias tam, że number-- wszystkie to jest informacją, jest to, jak wiele elementów mam. To nie jest właściwie mówi mi indeksy niczego. Więc w tym przypadku, wiem, że chcesz pisać w trzech miejscach, w trzech miejscach fizycznych do posiadać co chcę trzymać. Więc dlatego liczba trzy jest tam. Jednak gdybym chciał rzeczywiście do niego dostęp, gdybym chciał powiedzieć, printf Numer Uchwyt klasy, a następnie masz zamiar faktycznie wprowadzone indeks fizyczna nie. Tak, dobre pytanie. PUBLICZNOŚCI: Tak jest fizyczne Strona ma być [niesłyszalne]? ANDI PENG: Przykro mi. Można mówić trochę? PUBLICZNOŚCI: Więc to indeks fizyczna [Niesłyszalne] każdy z pudełka? [Niesłyszalne]? ANDI PENG: Tak. Więc mam zamiar wrócić do tutaj. Pomyśl o tutaj. Mamy tablicę wielkości 3. Są trzy miejsca, jak, fizyczne zastępcze tutaj. Ale są nazwany 0, 1 i 2. Więc gdybym chciał uzyskać do nich dostęp, sposób, w jaki do nich dostęp jest printf od co chciałem tutaj. Trzeba by wydrukować z nazwą tego, Bo wtedy komputera wie, oh, muszę szukać w tej tablicy dla indeksu 0TH. Tak. Ale wielkość tego nie zmieni. Rozmiar jest 3, niezależnie w jaki sposób można je oznaczyć. OK. Każdy dobry? PUBLICZNOŚCI: Więc za każdym razem [niesłyszalne]? ANDI PENG: OK. Więc w tym przypadku naprawdę nie dostać się do niego w tej chwili w toku. Ale wiem, że string-- jak ja powiedziałem, ciąg jest zasadniczo tablica znaków. Więc jeśli utworzyć tablicę strun, I rodzaju mają tablicę tablicy znaków, prawda? Tak więc w tym przypadku, bo mają tablicę łańcuchów, jeśli były do ​​wejścia naprawdę długie słowo, które nadal zajmuje tylko jedno miejsce, ponieważ jest to jeden ciąg. Ale jeśli było myśleć o postacie z tej tablicy, to, że bierze się dużo więcej znaków niż każdy z pozostałych słów są. Nie bardzo ważne teraz. Ale to tylko ogólnie jak to działa. OK. Więc to jest coś, dam ci zrobić dużo w ciągu semestru. Muszę odpocząć mój głos. Chłopaki muszą stymulować siebie. Wielu z was zapewne spać teraz. Jestem wprowadzania losowych problemów gdzie jako klasy lub z partnerem, obok Ciebie idą spędzić kilka minut rozmowy o tym, jak pójdziemy na temat rozwiązywania lub tworzenia programu, takich jak ten. Więc teraz, chcemy stworzyć program-- będziemy nazywać upper.c--, że konwertyci mała litera słowa do wyższej klasy string-- wielkie, przepraszam. Słowo w warkoczach, przepraszam, jest synonimem. Mam zamiar je zmienić oznacza to samo. Tak. Potrwać kilka minut. Nie muszą być napisany w dowolnym języku. Wystarczy w kodzie pseudokod lub logicznie jak będzie nawet zabrać taki problem. Tak. [SIDE ROZMOWA] Zauważyłem również, że chłopaki can-- I niby zobaczyć już program. Myślę, że mój brak Tryb prezenter jest problem. Ale jest ok. [SIDE ROZMOWA] Tak, proszę, chłopaki. Przyjdź po słodycze. Przyjdź po słodycze. PUBLICZNOŚCI: Tak! [SIDE ROZMOWA] ANDI PENG: Również, tak, Zacznę rzucać cukierki na ludzi, którzy nie odpowiadają na pytania. Więc powinny odpowiedzieć na pytania. Albo Przypuszczam ludzi, którzy należy odpowiedzieć na pytania. Tak, odwrót. [SIDE ROZMOWA] PUBLICZNOŚCI: [niesłyszalne] ANDI PENG: Tak. Tak. [SIDE ROZMOWA] Dobra, chłopaki. Weźmy, na przykład, jeszcze 10 sekund. [SIDE ROZMOWA] OK, chłopaki. Więc zanim zaczniemy próby faktycznie fizycznie napisać kod, dobry zwyczaj, aby rozwijać to, że chcemy pierwszego rodzaju powodu logicznie jak by to zrobić. Chcesz, aby upewnić się, przed tobą fizycznie rozpocząć próby do kodu w Mario, które sprawiają, pamiętaj, że masz swój Pseudokod. Że bierze cię przez co jest potrzebne do stworzenia tak , że kiedy fizycznie Napisać program później, jesteś w stanie lepiej wychwycić błędy w kodzie i tego typu rzeczy. Więc będziemy po prostu zacząć by-- w języku angielskim, w Pseudokod, Czy ktoś chce dać mi ogólny wyjaśnienie od tego, jak będziemy za to zabrać? Tak. PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Jasne, nie ma obaw. PUBLICZNOŚCI: Czy można zwrócić się do niego i zapytać ktoś, aby uzyskać ciąg 1-- Tak, ciąg, i wtedy-- ANDI PENG: Tak, tak, to jest to dobry początek. Zacznę pisanie, przepraszam, jak mówisz. Więc-- PUBLICZNOŚCI: --The małe Liczby są wyższe, prawda? Lub małe litery mają wysokie numery? ANDI PENG: Dokładnie. PUBLICZNOŚCI: Więc odejmiemy 32 z tego co [niesłyszalne]. ANDI PENG: Świetnie. Więc my niby mają ogólny sens od tego, jak pracować nad tym problemem. Wiedząc, że mamy trochę nauczyłem sposób fizyczny, że struny są przechowywane w pamięci, Co ty już wiem, że będziesz prawdopodobnie napisać w kodzie aby poruszać się w ciągu? PUBLICZNOŚCI: Dla pętli. ANDI PENG: A dla pętli, dokładnie. Wielki. Więc my niby mają ogólny pseudokod zapisane że niby daje Ci zauważa tego, jak ruszy o rozwiązaniu problemu. Teraz, że masz to, ci może odwołać go na później kiedy starasz się właściwie napisać kod. Tak naprawdę możemy go tutaj. A ja mam funkcję o nazwie upper.c-- tam to jest-- się tylko z pustego szablonu teraz, że chłopaki będą mi pomóc dowiedzieć się, w jaki sposób napisać ta linia nie code-- linii kodu. To będzie kilka linii kodu. Podczas uruchamiania jakichkolwiek pusty pset, co jest pierwszą rzeczą, którą trzeba pamiętać, aby zrobić? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Wielka Tak. Zawierać. stdio.h. Często jest to jeden z najbardziej proste błędy ludzi będzie, gdy są pisania, że ​​Będą zapomnij zawierać ważne biblioteki muszą. Więc jeśli to godziny pracy i jesteś podobny, Nie wiem, dlaczego mój kod nie działa. Czy możesz mi powiedzieć, dlaczego to nie działa? Mamy zamiar powiedzieć, czy #include? Należy go #include. OK. Mamy więc standard I / O tutaj. Jest to, że tylko biblioteki będziemy potrzebować tutaj? Co jeszcze możemy zrobić? Przepraszam. Ktoś po prostu krzyczeć go? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Proszę bardzo. OK. A jak mam go o rozpoczęciu jakiejkolwiek funkcji, każdy rodzaj funkcji głównego w naszym programie? Int main. OK. Co mogę umieścić wewnątrz tutaj? Co jest pierwszą rzeczą, którą chcesz zrobić? Jeśli chcemy uzyskać ciąg od użytkownika, co będziemy mieć robić na pierwszej linii? Niestety, chłopaki po prostu czuć swobodnie mówić i głośno. Wystarczy krzyknąć cokolwiek. PUBLICZNOŚCI: Zapytaj użytkownika? ANDI PENG: Jak mamy to zrobić? Ask-- mam zamiar wpisać "zwrócić się do użytkownika"? PUBLICZNOŚCI: printf. ANDI PENG: OK. Printf. Co chcę do printf? PUBLICZNOŚCI: Wpisz coś. ANDI PENG: Jak to? Chłopaki, udawać, że jestem komputer. Fizycznie mi na każdym kroku że muszę wpisać tutaj? Czy robię coś źle? Powinienem był wpisany coś? PUBLICZNOŚCI: Musisz cytaty. ANDI PENG: Muszę cytaty? OK. OK. PUBLICZNOŚCI: A potem nowa linia. Średnik. ANDI PENG: średnikiem? OK. Dobry. PUBLICZNOŚCI: A może określić że chcesz go małymi literami? ANDI PENG: Świetnie. Chłopaki śmieją się ze mnie zapominając umieścić średnik. Gwarantuję, gdzieś w toku tej klasie będziesz zapomnij umieścić średnik, i to zajmie Ci trzy godziny, aby dowiedzieć dlaczego kod nie działa. To stało się dla nas wszystkich. To prawdopodobnie będzie ci się stało. Pobierz w dobrym zwyczaju używając średników. OK. PUBLICZNOŚCI: Czy chcesz zrobić ukośnik w? ANDI PENG: Jasne. Chcesz zrobić ukośnik w? PUBLICZNOŚCI: Tak. ANDI PENG: Świetnie. OK. Co mam teraz zrobić? PUBLICZNOŚCI: Uzyskaj ciąg. ANDI PENG: Uzyskaj ciąg. Więc co mam wpisać? Ktoś? PUBLICZNOŚCI: String s. ANDI PENG: String s. PUBLICZNOŚCI: GetString. ANDI PENG: Ktoś, może mi, gdzie możesz powiedzieć funkcja ta GetString pochodzi? PUBLICZNOŚCI: string.h. ANDI PENG: string.h? Myślisz, że to od string.h? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Proszę bardzo. To od CS50.h. Jeśli zawsze mylić na którym plik biblioteki jest lub pliku nagłówka jest, google dosłownie string.h, i powiem ci jakie są wszystkie funkcje które są w string.h. OK. Więc teraz, że stworzyłem ciąg i mam skłonić użytkownika do niego, I już zapisana w zmiennej nazwanych s, co muszę teraz zrobić? PUBLICZNOŚCI: Sprawdź, czy to małymi literami. ANDI PENG: Słucham? PUBLICZNOŚCI: Sprawdź, czy to małymi literami. ANDI PENG: Dobra, zróbmy to. Jak mogę to zrobić? W rzeczywistości, dla celów klasy teraz, jesteśmy po prostu będzie Zakładam, że wszystko Wejście to jest, że już małe. Jeśli chcesz sprawdzić, byś wystarczy dodać instrukcji warunkowej że sprawdził, że przebiegł każdy element tablicy i sprawdzić, czy jest to pomiędzy pewnymi wartościami. Nie pamiętam, co liczba od wartości małymi literami są. Możesz to sprawdzić w tabeli ASCII. Ale tak, to jest bardzo dobry punkt. Ale teraz, jesteśmy po prostu będzie Zakładamy, że wszystkie sznurki mamy wejście są małymi literami. OK. Więc jak pójdę temat ten problem dalej? PUBLICZNOŚCI: Dla pętli. ANDI PENG: Dla pętli? OK. Powiedz mi, co wpisać. PUBLICZNOŚCI: Dla int i jest równa 0. ANDI PENG: OK. PUBLICZNOŚCI: Och, faktycznie, to ci zrobić przecinek i zrobić n równa strlen. ANDI PENG: Tak ważną rzeczą że myślę, że ona zauważyłem tutaj jest to, że nie mają do powiedzenia int n drugi raz to zrobił. Wystarczy wiedzieć, że w sposób dla Pętla kiedy oświadczając, faktycznie nie potrzebujesz INT drugi raz zrobić zmienną. Można powiedzieć, n strlen. PUBLICZNOŚCI: S. ANDI PENG: s. OK. PUBLICZNOŚCI: Wtedy średnik. ANDI PENG: Jasne. PUBLICZNOŚCI: A potem [niesłyszalne] n. Wtedy i ++. ANDI PENG: Świetnie. W porządku. Co chcemy wewnątrz tego pętli teraz? Pamiętaj, że jeśli mamy zamiar uruchomić poprzez ciąg i uruchomić za pomocą tablicy, chcemy, by sprawdzić, co się w nim. Co będziemy potrzebować? Jest to rodzaj Najtrudniejsze teraz. Każdy, kto ma przypuszczenie? OK. Więc po pierwsze, w jaki sposób możemy nawet uzyskać dostęp? Jak możemy nawet najpierw sprawdzić, czy dostęp do elementu w tablicy? Jak mamy to zrobić? Co znajduje się zapis używamy, aby to zrobić? Jaka jest nazwa tej tablicy o nazwie? To się nazywa ów, prawda? Pamiętaj, dowolny ciąg jest zawsze tablicą. Więc s uchwyt i, prawda? Bo to jest aktualna wartość lub wartość indeksu sprawdzamy. I mamy zamiar ustawić, że równe to-- chcemy wartość małą, prawda? Chcemy to zmienić lower-- Przepraszamy, ale chcą się wielkimi literami. Chcemy, aby włączyć małe litery Wartość w wielką literą. I tak like-- Przykro mi, jak masz na imię? PUBLICZNOŚCI: Heidi. ANDI PENG: Słucham? PUBLICZNOŚCI: Heidi. ANDI PENG: Heidi. Podobnie jak Heidi powiedział początkowo, że jesteśmy prawdopodobnie będzie potrzebował the-- jesteśmy Prawdopodobnie będzie musiał odjąć 32 ze wszelkich charc, że jest, prawda? Ze względu na ASCII Stół, różnica od małej litery i wielka litera jest 32. Więc kiedy to robimy, jesteśmy prawdopodobnie będzie chciał odjąć 32, prawda? Tak więc mamy zamiar zrobić S I. Czy wszyscy zrozumieć, dlaczego to zrobiłem? Bo teraz, w naszej tablicy, sprawdzamy indeks 0TH, prawda? A w 0TH indeks łańcuch, to jest pierwszy znak. A to znak jedziemy założyć, że to małe. Jeśli chcemy, aby to wielkie, że trzeba odjąć 32 od jego wartości, ponieważ w naszym ASCII Stół, to jak mamy to do następnego odpowiadającej wartość, która sprawia, że ​​wielkie litery. Czy wszyscy rozumieją, że? Tak. PUBLICZNOŚCI: Można również czy małe litery w minus-- ANDI PENG: Tak, tak, to jest rzeczywiście bardzo dobre. Mam zamiar wrócić do tego, pytanie po tym jak to zrobić. Tak. A potem, jeśli chcę zobaczyć, co się dzieje, Jestem prawdopodobnie będzie Aby wydrukować, prawda? Ktoś mi powiedzieć, co Chcę wydrukować tutaj. PUBLICZNOŚCI: printf procent c odwrotny ukośnik [niesłyszalne]. To wartość [niesłyszalne] s i. ANDI PENG: s i, przepraszam? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Nie wiem. Co myślisz? PUBLICZNOŚCI: Cóż, ja wouldn't-- Myślę, że nie będzie bring-- Wziąłbym go przez wewnątrz, ponieważ [niesłyszalne]. ANDI PENG: Och, zrobiłby to? PUBLICZNOŚCI: Tak. ANDI PENG: Zostawmy to tak to jest, a ja wyjaśnić, dlaczego później. Pamiętaj, nawet jeśli posiada uchwyt na miejsce, chcesz umieścić nawiasy wokół niego. W porządku. Tak to powinno być tu solidną funkcję. Załóżmy, uruchom go i zobacz czy to kompiluje. Sprawdź, górna. O o. To nie wygląda zbyt dobrze. Czemu to się dzieje? Jak w przypadku każdego błędu, chcesz iść z powrotem i zacząć od pierwszego, ponieważ powoduje zazwyczaj jeden błąd wiele innych błędów po niej. Tutaj widzimy upper.c: 18: 25, który mówi mi w tym programie o nazwie upper.c, na linii 18, błąd niejawnie deklarując biblioteka funkcji strlen z typem unassigned-- bla, nie wiem, co się dzieje po tym. Wszystko to mówi mi teraz jest że coś się dzieje na strlen. I komputer się mylić, bo To jak, nie wiem, co strlen jest? Co oznacza, że ​​prawdopodobnie powiedzieć ci brakuje? PUBLICZNOŚCI: tracisz [niesłyszalne]. ANDI PENG: Masz rację. Dokładnie. Tak to jest, gdy jest to ważne jest, aby upewnić się, że każda funkcja używać w Kod jest o prawidłową nagłówek plik do biblioteki, albo masz zamiar uzyskać wiele błędów a kod nie będzie wiedzieć, co się dzieje. Tak więc mamy zamiar to string.h tutaj. Teraz, gdy staramy się skompilować górnej. Skompilować poprawnie. Miejmy uruchomić ten program. Więc wpisać coś w małej litery. Co ty faceci chcą wpisać? Krzyczeć coś. Dobrze, Charly właśnie wszedł. Będziemy wpisać nazwę Charly jest. Charly małymi literami. I miejmy nadzieję, miejmy nadzieję, że jest to będzie krzyczeć i wypluć Charly wielkimi literami. Hura! czy wszyscy zrozumieć, jak Poszedłem na temat rozwiązywania tego? Sposób, że mogę manipulować za pomocą liczb całkowitych rozwiązać coś, Chcę to zrobić w struny, dlatego, znaków i liczb całkowitych odwoływać się w taki sam sposób, ponieważ mapowanie ASCII. Tak, aby wrócić do punktu, jeśli chciał umieścić tutaj zamiast 32 wielkie Minusem małe litery sprawiedliwy jak że, że będzie działać równie dobrze, bo to jest po prostu tylko Różnica pomiędzy tymi dwiema wartościami. Jeśli chcę, aby ten again-- Charly. O nie. Myślę, że poszliśmy w złym kierunku, tak? PUBLICZNOŚCI: [niesłyszalne] małe litery a. ANDI PENG: Proszę bardzo. Tak. A z pluje Charly. Dlatego należy zachować ostrożność podczas jesteś odjęcie wartości pamiętać, który z nich jest większa niż druga. Na przykład, tutaj zapomniałem że mała litera a jest w rzeczywistości większe niż wielkie litery A więc kiedy próbował odjąć im w inny sposób ok, mam negatywny 32. I mój komputer to: Nie wiem co to jest. To prawdopodobieństwo tylko niektóre losowo wartość, która nie jest bardzo dobra. A więc upewnij się, że jesteś odjęcie w odpowiedniej długości aby znaleźć żądany znak. OK. Czy ktoś wiedzą jak my udał się do pisania tej funkcji? OK. Tak właściwie, to funkcja już istnieje w bibliotece nazywa ctype.h. Biblioteki nazywa ctype.h. Funkcja ta w rzeczywistości jest już napisane dla Ciebie. To się nazywa, aby górne. A więc dla celów Ten zbior, będziesz do stwierdzenia, że ​​naprawdę chcesz używać wiele funkcji zawartych w bibliotece ctype. Do górnej, w celu obniżenia, jest górna, jest lower-- są to wszystkie funkcje że będziesz w stanie używać bardzo, bardzo szybko w swoim własnym kodem, który robi dokładnie to, co to robi. Pisaliśmy, jak konwertować ciąg znaków na wielkie litery. Ale w rzeczywistości jest to kod że ktoś inny napisał i że można uzyskać dostęp do przez inną funkcję. Tak? PUBLICZNOŚCI: Tak po prostu skopiować tam jest i zrobić to dla każdej litery? ANDI PENG: Tak, bo ja nie dbają o wartości a. Właśnie obchodzi, że różnica między nimi jest 32, prawda? Różnica pomiędzy małymi literami b i wielkie litery B jest również 32. I różnica pomiędzy C i wielkie litery C jest zawsze 32. Muszę dbać o Różnica pomiędzy tymi dwoma, ponieważ wszystkie litery według tego samego wzoru, prawda? Jeśli mam różnicę pomiędzy jednym z nich, Wiem, jaka jest różnica pomiędzy nimi jest. Dobre pytanie. Tak. Każdy dobry? OK. Oop. OK. Więc to jest inna koncepcja będzie bardzo przydatne, jak ty dalej rozwijać Twój kod jest ta idea tworzenia funkcji i abstrakcji. Więc teraz, my wszyscy podjęte algebry. W algebrze, to uczy, że nie ma to wspaniała rzecz nazywa funkcję Maszyna, gdzie jeśli Ciebie Wejście jeden rodzaj numeru, przebiega przez tego wspaniałego funkcji i się pojawia innego wyjścia, prawda? W kodzie, to samo dzieje się w jakiejkolwiek funkcji. Więc mogłem fizycznie Napisać w moim ciele mojego kodu głównym stwierdzenie, że faktycznie robi co organizm kodu robi. Ale poza tym, mogę również Napisać wiele różnych funkcji że zrobić wiele różnych rzeczy. Na przykład, już ve rozpocząć korzystanie z niektórych z nich. Printf-- czyli Funkcja, że ​​ktoś inny napisał już, że możemy wywołać w naszym kodzie. Do upper-- w tym wypadku upper-- jest inna funkcja pisaliśmy, że my może wywołać w naszym kodzie. A więc myślę, dlaczego mamy nawet funkcje? Dlaczego nie możemy po prostu rzuć go w tej samej linii kodu? To sprawia, że ​​łatwo dla każdego. Cóż, rozumowanie, że Jest to przede wszystkim organizacji. To naprawdę irytujące dzieje poprzez kod czyjejś i jedna funkcja jak printf. Jeśli faceci rzeczywiście wiedział, co Funkcja printf wiązało się pisać, to, jak, 1000 linii kodu. Jeśli za każdym razem chciałem do printf coś, Miałem napisać 1000 linii kodu, to byłoby naprawdę denerwujące czytać, dobrze? Dlatego właśnie stworzył ten abstrakcyjny funkcji że mamy już kogoś inny napisał gdzieś indziej. I za każdym razem musimy użyć go w nasz kod, musimy po prostu powiedzieć printf. I to jest w stanie korzystać z funkcji ktoś napisał w naszym kodzie. To sprawia, że ​​łatwiej organizacyjnie do odczytu kodu. Po drugie, jest to uproszczenie. Upraszcza czynności mamy podjąć, aby rozwiązać nasz problem. Printf, funkcje takie jak printf, Funkcje takie jak do górnej Są to wszystko rzeczy, które pozwalają nam uproszczenia naszego kodu w dół, tak jest łatwiej. I ostatnia rzecz to możliwość ponownego użycia. Tak więc fakt, że mamy funkcja nazywa się printf które możemy nazwać wiele różnych Czasy i pozwala się do wielokrotnego użytku. Gdybym miał napisać printf, Ja napiszę tylko raz. Istnieje tylko w tym jednym miejscu. Gdybym chciał zrobić to ponownie, chciałbym trzeba skopiować i wkleić wszystko to do mojej drugiej linii kodu. Dlatego jeśli utworzyć funkcję że istnieje poza naszym głównym, możemy po prostu wezwać go i ponownego wykorzystania go, gdy musimy więc, że jest to dużo łatwiejsze Programy dla nas pisać. Więc sposób, że my rzeczywiście Napisać funkcja jest bardzo podobny, prawda? Jest to rodzaj pierwszy przypadek, w którym będziesz zobaczyć ujęcie funkcji w stylu różni się od naszej int main pustkę. W tym przypadku, gdybym chciał Napisać funkcję o nazwie q, prawda? A wartość int tutaj to wszystko mówi mi, co chcę tego funkcjonować, aby powrócić do mnie? Jeśli chcę kostka liczbę całkowitą, Będę chciał wejścia. Są to parametry. Zamierzam wejść wartość typu int. I mam zamiar wrócić inna wartość typu int. I tutaj, jak ty widać, wszystko robię jest powieszchnia co mój wkład jest w mojej mocy, a jego zwrot. Więc wszystko, funkcja ta nie jest ma jakieś liczby całkowitej. Mnoży je przez siebie dwa razy tak, że kostki w mocy. A następnie powraca cokolwiek to wyjście jest. Więc w tym przypadku, to dwie linie Kod, który mieliśmy napisać extra. Ale jeśli chcemy zadzwonić od tego wiele razy, jest to dużo łatwiejsze do wpisania, że ​​jeden Linia tutaj to w kostce niż muszą przejść wiele razy. Więc sposób, że w zasadzie dowolny formatowania jakiejkolwiek funkcji będzie istnieć, to jak tutaj. Mamy więc nazwę funkcji. W tym przypadku, to się nazywa kostki. A my nazwiemy to sześcian, ponieważ jest to łatwe do zapamiętania. Możesz nazwać to kwadrat i może rzeczywiście być pokrojone w kostkę. Nie ma znaczenia. Tylko nazwa, że ​​jesteś przypisując swoją funkcję. Prawo to tutaj, int, jest Typ parametru trzeba. Więc co z tej funkcji potrzebują w celu prowadzenia? Cóż, to musi wejście. Nazwałam go wejście. Możesz nazwać to, co chcesz. Ale muszę coś z typu int. To będzie właściwie wykonywać to, co jest wewnątrz tutaj, Ciało funkcji. A następnie zwracany typ tu, to int-- wszystko, co każe mi się że ta funkcja jest zamiar wrócić do mnie w int. Więc to będzie podjąć w int, i to będzie oddać int. Czy wszyscy rozumieją, w jaki sposób Formatowanie tego typu działa? Chłodny. OK. Więc nie martwi się, czy to wydaje trochę abstrakcyjne teraz. To jest coś, co będziemy mówić. Będziemy nurkować głębiej później w toku. Sposób, że każdy rodzaj wyższym poziomie abstrakcja z tych rzeczy działają jest to, że w pamięci w komputer, wszystko przechowuje się w tym typie stosu, powiem. Dlatego tam na górze. Nie wiem, czy Ciebie chłopaki widzą, że dobrze. Postaram się przybliżyć. Tutaj, na górze, to mają tekst fizycznej z tego, co komputer jest interpreting-- wszystkie zera i jedynki, że istnieje w naszym komputerze. A potem mamy zainicjowany niezainicjalizowane danych i danych, co nazywamy zmienne globalne. Więc zmiennych, które istnieją we wszystkich programach i przez cały, zasadniczo, kod. Nie martw się, jeśli jesteście rodzaj wiadomo na ten temat. To naprawdę nie ma znaczenia teraz. A potem mamy to, co jest nazywany sterty w stosie. Pomyśl o stos dosłownie jak stos rzeczy, stos inaczej rzeczy pchanych na szczycie od siebie, które przechowują różne zmienne i składni w kodzie. A potem tutaj na samym dole, mamy zmienne środowiskowe z tego, co realizujemy w ciągu tylko twoja mała linia kodu. A my po prostu będzie, aby powiększyć w od rzeczywistej części stosu. Więc tutaj, jeśli były, aby powiększyć w na tym obszarze tylko stos, jest to, na co wygląda. I to jest rzeczywiście bardzo ważne kiedy ludzie mówią o funkcji, ponieważ informacja, że pamięci komputera jest przechowywanie zmiennych oraz funkcje i parametry zarówno twój Funkcja oraz główne zmienne w różnych miejscach. Więc teraz, głównym jest rzeczywistej funkcji że jesteś wykonywania w kodzie. Zapisaniu tutaj jego parametry i przechowywane tutaj jego zmienne lokalne. Zmienna lokalna po prostu oznacza każdą zmienną które istnieją tylko wewnątrz tej funkcji. I na górze to, masz to oddzielna funkcja o nazwie Cube. Musisz to parametry a także tych mieszkańców. A powód można zobacz tutaj jest to, że to, co Sześcian ma się dzieje, gdy w sposób wartość z funkcji main jest to, że w rzeczywistości jest to, że przez kopiowanie. Więc gdybym chciał sześcianu 2 i powrót 8, że 2 jest rzeczywiście wprowadzane jako parametr i to skopiowane tak, że masz to istniejąca w dwóch różnych miejscach w pamięci. I trzeba być bardzo ostrożnym na zapamiętywaniu, które jeden z tych, jesteś rzeczywiście manipulacji. A przykładem tego, co się stało to byłoby bardzo, bardzo źle istnieje tutaj. Więc tutaj, mam, w teorii, program tutaj, główną funkcją że jestem deklarując int x jest równa 1. Jestem deklarując kolejny int y jest równa 2. A potem biegnę go dzięki tej funkcji zwane wymiany, gdzie zakładamy, że to zamiana dwóch wartości. A potem mam zamiar wydrukować je, prawda? To jest to, co chcę zrobić ten program. Warto więc przyjść i spojrzeć. Więc jeśli rzeczywiście napisać inny funkcji, jak widać, Mamy tu naszą główną funkcję. A potem mamy swoje Druga funkcja tutaj. Void Swap. Nieważne, po prostu oznacza, że ​​jest to Nie zamierzam powrócić niczego. Nazwa funkcji jest zwane wymiany, a to będzie wlotowych dwóch zmiennych, int a i int b, z [niesłyszalne] funkcji. Więc zasadniczo tu jesteśmy przechodząc X i Y do tej funkcji. A gdybyśmy tworzenie this-- więc chcemy do tworzenia wartości tymczasowe, prawda? Mamy zamiar przypisać ją do a. A potem będzie teraz równe b. Oraz b będzie powrotem gdzie wartość temperatura była, który jest a, bo gdy chcesz wymieniać rzeczy, nie można po prostu lubię ich wymiany. Musisz zachować jedną z nich tutaj tak, że zapamiętuje co to, ponieważ po zamienić, zapomnienia co to oryginalna wartość było, prawda? Tak w teorii, tym programie powinien działać, prawda? Gdybym chciał zamienić dwa, powinni zamienić. Więc uruchom go i zobacz czy działa. Tak jak chłopaki widzą, x był kiedyś 1 i y był kiedyś 2. A jeśli go wydrukować, x jest jeszcze 1 i Y 2. Hmm, ten program nie wydaje się być działa tak, że chcę go do pracy. Czy ktoś chce zrobić zdjęcie na zgadywać, dlaczego tak się dzieje? Ma to związek ze sposobem, że różne rzeczy są przechowywane w różnych miejscach pamięci. OK. Więc chłopaki nie muszą się martwić za dużo teraz o tym. Ale wiem, że Cube lokalne zmienne a, b, bo tutaj w naszej funkcji, my oświadczył aib jako zmiennych występujących w obrębie kostki, że funkcja. Ale jak widać, parametry to biorąc w były przechowywane są tutaj. Ale nie były w rzeczywistości powrocie nic. Nie byliśmy rzeczywiście się zmienia x i y. Byliśmy po prostu zmienia a i b. Mieliśmy kopiowane x i y w coś, co nazywa a i b. Ale my nigdy nie manipulowane x i y sami. Czy wy widząc jak to się dzieje? Jest to, że my po prostu skopiować go powyżej, ale nie właściwie utrzymane tor, gdzie były one w pamięci. A więc teraz komputer szuka, och, mam uruchomić tę rzecz przez ten piękny funkcji. Ale xiy są nadal x i y. Nic się nie stało je ze względu na fakt że tych parametrów i zmienne lokalne są przechowywane w innej miejsce w pamięci. I to jest na wyższym poziomie Koncepcja, że ​​będziesz zacząć widzieć później w toku. Ale po prostu wiem, że to jest problem, że może się zdarzyć i że uda nam się wymyślić sposoby, w jaki sposób sobie z tym w dalszej części kursu. OK. W porządku. Tak więc ostatnia koncepcja jesteśmy naprawdę będzie obejmować że będzie przydatna dla pset w tym tygodniu są tak zwane Argumenty wiersza poleceń. Więc Rob w swoim wykładzie przeszedł rodzaj krótko, jak te prace. Zasadniczo wiem, że kiedy piszesz jak głównej funkcji, kiedy napisał funkcje wcześniej w przeszłości, mieliśmy int main pustkę. A powód mieliśmy nieważne istnieje dlatego, że nasze programy nie potrzeba wartości wejściowych do pracy, prawda? Kiedy wpadłem Mario, nie muszę faktycznie wystarczy wpisać coś kiedy prowadził Mario. Mógłbym poprosi użytkownika później. Ale nie zawsze tak było. Na przykład, w tym Problem tygodnia zestawy, masz zamiar zostać poproszony, że w Oprócz uruchamiania programu, będziesz chciał wejścia pewne rzeczy prosto jak Ciebie uruchomić program. Więc sposób to zrobić nazywa argument linii poleceń, które jest jak argument można wprowadzić bezpośrednio jak próbujesz uruchomić program. Zatem zapis tego, to jest dość skomplikowane, patrząc, ale to naprawdę nie jest, że trudne. Więc int main-- to tylko twoja główną funkcją. Do argc przecinkami nawiasach łańcuch argv. Więc wszystko, co mówi, że to int wszystko argc-- się informacją, jest to, że są to liczba Argumenty komputer powinien spodziewać. Więc jedna rzecz, która jest naprawdę ważne, aby śledzić jest fizyczne nazwa programu liczy się jako jeden z tych argumentów. Więc jeśli chciałem mieć swój program uruchomić plus jeden dodatkowy wiersz polecenia Argument, że jestem naprawdę będziemy mieć dwa. Argc rzeczywiście będzie dwa. I wtedy łańcuch argv bracket-- wszystko, co robi, to daje mi tablica łańcuchów to będzie po prostu wyświetlić i zapisać to, co wszystkie te argumenty wiersza poleceń są. Tak na przykład, jeśli chcę mieć to Program, ./copy plik_wejściowy plik_wy, prawda? To po prostu typowy poleceń Linuksa. Czym właściwie jest argc? Jak wiele argumentów wiersza poleceń są tam rzeczywiście w tym jest? Wszystko to robi, to zrobić kopię plik_we nazwy jednego pliku i kopiuje go do inny plik, prawda? To wszystko to robi. Jak widać, robię to w jednej linii bez faktycznie potrzeby programu. Jaki jest nasz argc w tym przypadku? Jak wiele argumentów mamy? PUBLICZNOŚCI: Trzy? ANDI PENG: Mamy trzy, dokładnie. Więc to jest bardzo intuicyjny w po prostu uważam, że to jest po prostu plik_we i plik_wy. Ale wiem, że nazwa fizycznego z Program używasz liczy się jako jeden. Tak więc w tym przypadku argc faktycznie trzy. Jak o to, co jest argv 0? Pamiętać, wszystkie z Argumenty wiersza poleceń były przechowywane w tablicy ciągów. Więc jeśli spróbuję do niego dostęp, co by argv Uchwyt 0 mi dać? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Dokładnie. To daje mi kropkę slash kopię, bo to element 0-te, Pierwszym elementem mojej tablicy. Co argv 1? PUBLICZNOŚCI: plik_we. ANDI PENG: plik_we, dokładnie. Co argv 2? PUBLICZNOŚCI: plik_wy. ANDI PENG: plik_wy. To jest trochę skomplikowane. Co myślicie argv 3 będzie dając mnie gdybym próbował wydrukować, że na zewnątrz? PUBLICZNOŚCI: [niesłyszalne]? ANDI PENG: Czy masz rękę? Tak. PUBLICZNOŚCI: Alternatywą. ANDI PENG: Dokładnie. Więc pamiętaj, w wykładzie, że ma na końcu coś prąd terminator null nazywa? Zajmiemy się tym również dalej w klasie. Ale wiem, że w zapisie, sposób, w jaki komputer wie, że to koniec tablicy jest to, że to wrzuca coś zwane null terminator lub myślnik zero. Więc jeśli próbujesz uzyskać dostęp do argv 3, masz zamiar uderzyć tą kreskę 0. Jest to tym bardziej podchwytliwe pytanie. Co argv 4? Więc to jest przeszłość terminator null, przeszłości granice naszej tablicy. Co sądzisz będzie stanie, gdy staramy się zrobić? PUBLICZNOŚCI: [niesłyszalne]? ANDI PENG: Słucham? Powiedzieć, że nieco głośniej? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Tak. To jest nazwa z Obszar będziesz najprawdopodobniej uzyskać. Ale wiem, że argv 4-- , który pozwala na dostęp miejsca w Twoim komputerze pamięci, że naprawdę nie powinny stykać się ze względu teraz wiesz, co argv jest. Wiesz, że jest to tablica wielkości 3 że ma dot kopiowania, plik_we i outfile. Jeśli staramy się iść tak daleko poza to, że jesteś obok null terminator, komputer ma prawdopodobnie przechowywać coś w argv 4. I naprawdę nie powinno być posiadać dostęp do argv 4, bo masz plik Szafa i jesteś tylko prawo dostępu do tych trzech półkach. Ale jeśli starają się dotrzeć daleko poza półka od tego, gdzie są dopuszczone, masz zamiar zacząć ingerować inne rzeczy w pamięci komputera. To będzie naprawdę, naprawdę zły. Więc po prostu wiedzieć. Należy być bardzo ostrożnym, że Ciebie nie po prostu losowo zacząć dostęp do elementów w tablicy, że nie były w to, co chcieliśmy stworzyć. Tak. OK. Tak więc mamy zamiar zrobić kolejny Terminal przykładem. OK. Więc Rob szybko w wykładzie na drugi dzień poszedł z tego przykładu, gdzie miał int main int argc łańcuch argv wsporniki, które mówi mi, że jestem będzie mieć argumenty wiersza polecenia. Ma, jeśli argc równa równa 2-- pamiętać, równa równi oznacza porównanie. Jeśli jest równa 2, to jestem do druku hello, co pierwszy element tablicy jest. Else print, hello world. Co to będzie stało w istocie? Może ktoś po prostu wyjaśnić w Angielski co ten program robi? Tak. PUBLICZNOŚCI: Jeśli ktoś wpisaniu polecenia i powiedział, że ich imię i nazwisko, nie będzie po prostu wydrukować Pierwszy z nich i powiedzieć cześć, co twoje imię ma. ANDI PENG: OK, niech go uruchomić. Tak na przykład, gdybym miał zrobić ten plik, aby przywitać to-- komentarzy to-- co chcesz mi wejście? PUBLICZNOŚCI: Imię i nazwisko. ANDI PENG: Imię i nazwisko? Przeznaczone? PUBLICZNOŚCI: Tak. ANDI PENG: Czy ktoś mógłby mi teraz, co jest argc? Właśnie tam? UPS przepraszam. Pozwól mi wrócić. Jak wiele argumentów wiersza poleceń are-- wy naprawdę nie można zobaczyć. Ale postaram się przybliżyć. Próbuję. Tak, nie trzy, prawda? To kropka ukośnik witam, to Andi, i to Peng. Więc co myślicie tego Program ma być drukowanie? Och. Przepraszam. Błędna nazwa. To drukowanie, hello world. Czy ktoś chce wyjaśnić dlaczego tak się dzieje? Tak? PUBLICZNOŚCI: [niesłyszalne]. ANDI PENG: Dokładnie. Więc tutaj są uzależnione to, że jeżeli argc równa równa 2. Tak tylko w przypadku, gdy istnieje dwa argumenty wiersza poleceń. Potem idę do drukowania, witam, cokolwiek to jest. Ale jeszcze, mam zamiar wydrukować tylko, Hello World. Więc czy ktoś chce dać mi przykład od tego, jak będę w stanie rzeczywiście dostać to, aby wydrukować wartość argv 1? Co musiałbym wejścia tutaj? Tylko jedna rzecz, prawda? Ponieważ kropka hello to już liczy się jako pierwszy argument. Mam tylko jeden. Więc dot witam, czy po prostu zrobić Andi. Witaj, Andi. Czy wszyscy rozumieją dlaczego tak się dzieje? Tak. PUBLICZNOŚCI: Tak przestrzeni między Komenda line-- jest [niesłyszalne]? ANDI PENG: Nie Więc przestrzeni w linii poleceń Argument, x, aby powiedzieć komputer że jest to początek nowego łańcucha. Więc łańcuch argv here-- Przechowuje wszystkich argumentów wiersza poleceń w łańcuchach. I tak przestrzeń, w wierszu poleceń argument-- wszystko, co robi, jest powiedzieć, to jest na końcu jednego łańcucha i nadszedł czas, aby przejść do innego. Tak. To jest bardzo ważne dla Twój pset, bo jesteś będzie testowanie tych. Więc czy ktoś ma Wszelkie pytania w tej sprawie? Ok fajnie. Tak? PUBLICZNOŚCI: Więc byłoby powodu umieścić całkowitą calc argumentów zamiast z [niesłyszalne] będzie, gdy chcesz do wpisania dodatkowych informacji [Niesłyszalne]? ANDI PENG: Tak, dokładnie. Niektóre programy wymagają wprowadzić argument wiersza poleceń które przechodzi i który wykorzystuje to. Tak. PUBLICZNOŚCI: Co z tego, [niesłyszalne]? ANDI PENG: No i co mam zmienić to w moim programie? PUBLICZNOŚCI: Tylko 3. ANDI PENG: Dlaczego jest to, że dzieje, o tym sądzisz? PUBLICZNOŚCI: Ponieważ [niesłyszalne]. PUBLICZNOŚCI: Musiałbyś zmienić na 2 [niesłyszalne]. PUBLICZNOŚCI: 1 i 2. ANDI PENG: 1 i 2, dokładnie. Więc w tym przypadku, prawdopodobnie chcesz mieć dwa printf statements-- który drukowane argv 1 i ten, który wydrukowany argv 2. Tutaj. Może faktycznie zrobić bardzo szybko. Proszę bardzo. Och. Nie do końca to, czego chciał. Ale jeśli faceci poeksperymentować z formatowanie, to wyjdzie. Tak. Chłodny. Wiem, że jesteśmy nieco mało czasu. Ale ja po prostu się szybko wydać Kilka minut przechodzi helpful-- PUBLICZNOŚCI: Masz dwie minuty. ANDI PENG: Mam dwie minuty? Dziękuję. Kilka krótkich porad pset. Więc dla tego pset, bardzo polecam, jak powiedziałem, każdy przeczytać specyfikację. Będziesz pisać trzy programs-- jednego nazywa initials.c, jeden o nazwie caesar.c, jeden o nazwie vigenere.c. Kilka ważnych wskazówek, które wy naprawdę chcą do utrzymania w mind-- tak istnieje funkcja nazywa atoi-- jak chciałbym powiedzieć, trois. Jasne, czy to właściwie jak to powiedzieć. Ale wszystko, co robi, to wprowadzanie. Konwertuje ciąg do int. Tak więc reprezentuje ASCII do I liczby całkowitej. To tylko konwersja ASCII wartości do liczby całkowitej wartości. Więc pamiętaj argv, tablicy, która zawiera wszystkich komend linii arguments-- przechowuje je wszystkie jako łańcuchy. I tak, jeśli chcesz być w stanie mają jeden z nich stanie się całkowitą, będziesz mieć używać o tej wartości. Modulo, jak omówiliśmy wcześniej w klasie dzisiaj, pozwala mieć reszta co masz. Więc jeśli mamy naprawdę duża liczba w Cezara, co, jeśli mamy do końca z ciągu Vigenère? Jak masz zamiar być w stanie aby ta owinąć wokół? Jeśli uderzę oo a chcę to, aby wrócić do a, jak ja mam się że do zawinięcia? Prawdopodobnie chcesz użyć modulo gdzieś tam. Po drugie, rozglądając biblioteka. ctype.h. To nowa biblioteka mamy. Znajdziesz wiele naprawdę przydatne functions-- isupper, islower, toupper, tolower, isalpha, et cetera. Wszystkie funkcje, które będą bardzo przydatne kiedy próbuje dowiedzieć się, jest postać małą literą? Jak przekonwertować ten Ciąg na wielkie litery? Wszystkie te rzeczy będzie bardzo, bardzo pomocne dla zbior. OK. Godziny urzędowania tonight są od 8:00 do 11:00 w klasie TEAL jutro a także w środę i czwartek wieczorem. Godziny pracy są w świetlicy. Bardzo proponuję wam wszystko zacząć od razu, dlatego, że nie chcę być, że Dzieciak, który w czwartek wieczorem ma problemy złożeniem pset i jest jak, nie wiem, co robić. Zacząłem, skończyłem, składane. Spróbuj dać sobie trochę miejsca, ponieważ zawsze występują problemy kodu. Chcesz się upewnić, że sobie dużo czasu, aby móc aby zakończyć psets. Chłodny. Będę obijać się tutaj. PUBLICZNOŚCI: Czy to w Internecie już? ANDI PENG: Nie wiem, czy to już w Internecie, ale to będzie. Będę obijać się tutaj, jeśli ktoś ma jakieś pytania już. Dziękuję za przyjście.