[MUZYKA GRY] ALLISON Buchholtz-AU: Cześć wszystkim. Witamy na twój pierwszy oficjalna sekcja CS50. Jak możesz, zobacz to Sekcja CS50-jak, po prostu podciągnąć nasz program na dziś. Więc, kim jestem, a jestem pewien, jesteś wszystkim zastanawiać. Jestem twoim TF. Nie jestem po prostu losowo uczeń kto podszywa się pod swoją TF. I mam zamiar przejść przez rodzaj mają odcinki popłynie, Oczekiwania mamy, Środki, tak dalej, i tak dalej. Mamy zamiar rozmawiać o tablicach, ASCII funkcje, argumenty wiersza polecenia, i to nie jest na tutaj, ale Będę również pomagać Ci rodzaj przemyśleć następnym pset na ten tydzień. Której jestem pewien, że wszyscy doceniają. Tak więc, najpierw question-- kim jestem, oprócz swojej wybujałej TF tutaj. Jestem Alison Buchholtz-Au. To jest mój drugi rok TFing CS50. Ja też TF CS51 wiosną. Można zobaczyć tam ponownie jeśli zdecydujesz się wziąć. Jestem również PAF, więc każdy Freshmen-- i jeśli nie jesteś studentem pierwszego roku, To jest mój trzeci rok jako doradztwo kolegów. Jestem bardzo dobrze zorientowani w doradzimy Ci życie i kursów w ciągu CS, a nie w CS. Jestem Informatyka Koncentrator. Jestem starszy Adams House, w najlepszym domu. I zanim przeszedłem do CS mój Sophomore Wiosna, I był rzeczywiście inżynier biomedyczny. Miałem zamiar iść do szkoły medycznej. Chciałem być chirurgiem uraz. I że ma całkowicie zmieniło od Wziąłem CS50. Wziąłem kurs mój Sophomore jesień. To był mój pierwszy wprowadzenie do CS historii. Byłem jednym z 78%, którzy miał zerowe doświadczenie w najbliższych, i to całkowicie zmieniło moje życie. A teraz jestem w pracy na Microsoft, a piękny TF. I CS50 jest prawdopodobnie jednym z najlepszych doświadczeń że miałem tu na Harvard-- zarówno biorąc klasę i są w stanie pomóc uczyć studentów jak ty. Tak więc jestem bardzo podekscytowany że jesteś tu wszyscy. W przypadku, gdy przyszedł późno, nie jest cukierek, który powinien czuć swobodnie się chwycić, lub wysłać ktoś złapać go dla Ciebie. jest OK. Nie chcę tego jeść. Mój pokój ma wystarczająco dużo czekolady, więc wszyscy, powinien spróbować i zakończyć to. Wiem, że są 100 sztuk, ale jak, godzina czwarta w poniedziałek, Myślę, że każdy może użyć trochę cukru. Więc wszyscy, którzy są oficjalnie w mojej sekcji powinien zdobyć e-mail ode mnie z moim numerem telefonu, e-mail address-- prosimy dodać mnie na Gchat, prosimy, aby dodać mnie na Facebooku, a także dla reszty z was, możesz napisz do mnie tutaj. Istnieją dwa H użytkownika. Każdy zawsze robi jak dwie L's lub dwa C-tych. Dwa H w nazwisku. W przeciwnym razie to będzie odbijać, a Nie zamierzam dostać pocztę. Więc nie krępuj się napisz do mnie, kontakt ze mną w każdej chwili. Nie mogą wrócić do można w ciągu 24 minut ale obiecuję wrócić w ciągu 24 godzin. Jeśli zadzwonisz do mnie pół godziny przed Twój pset wynika, że ​​jesteś niczym, Nie mam pojęcia co robię Allison. Pomóż mi. Zamierzam cię uspokoić, a na koniec dnia jeśli dzwonisz do mnie pół godziny przed Twój pset wynika z niczym pisemnej, Mam zamiar być jak, dobrze, być może nadszedł czas, aby wykorzystać te późne dni. Więc odpowiem na wszystkie swoje wnioski w bardzo odpowiednim czasie. Mój telefon jest zwykle przywiązany do moich rąk. I zazwyczaj reaguje znacznie szybciej niż 24 godzin, ale mogę tylko gwarancja Odpowiedź 24 godzin. Dobrze. Więc dlaczego tu jesteśmy? Ponadto, jeśli masz pytania na za każdym razem, proszę dać mi znać. I dużo mówić. Mówię szybko, ale proszę zapraszam do mnie przerwać. To daje mi oddychanie pokój również. Więc odcinki są razem dla nas tak naprawdę nurkowania w, dostać jakieś praktyczne doświadczenia, przejść przez wymienione tematy, które nas w klasie lub w materiały do ​​nauki, które zalecamy, aby was w Internecie. A my faktycznie przejść przez niektóre z tych środków w nieco. Więc niektóre wskazówki dotyczące wsparcia sekcji. CS50-- jedna z rzeczy, która sprawia, to jeden z moich ulubionych zajęć ma poczucie, że nigdy nie jesteś sam. Mamy ponad 100 pracowników ludzie, którzy są tutaj, aby pomóc. Mamy dyżury Od poniedziałku do czwartku. Więc nie jest tak wielu ludzi, którzy kocham klasę tak samo jak ja i którzy są naprawdę tutaj bo chcą tu być. Większość z nas to studenci, a to jest jak w piątej klasie oprócz reszcie naszej pracy. I to jest dużo pracy, ale robimy to dlatego, że go kocham, i naprawdę kocham was uczyć i pomaga dzielić nasze emocje na ten temat i tej klasy. Więc proszę skorzystać. Przyjdź i porozmawiaj z nami. Ja się samotny, gdy moi uczniowie nie mów do mnie, więc jeśli chcesz, się spędzać czas ze mną. To będzie wielki. Sekcja jest oczywiście tak jeden z największych rzeczy. Pojedziemy przez rzeczy że nauczyłem się w wykładzie zrobić kilka krótkich przykładów kiedy mamy czas, i ogólnie rodzaj dowiedzieć się o rzeczach, powinien być myślenie o za ustawić twój problem. Shorts-- ile osób faktycznie oglądaliśmy wideo z podstaw krótki? Każdy, kto rozpoznaje mnie? To są bardzo duże. Powinno się oglądać tych. Wiele pracy zostało wprowadzone do nich. A oni po prostu miało być bite-size kawałki, aby tylko oglądać dla trzech lub czterech minut i uzyskać lepsze zrozumienie koncepcji. Spacer throughs-- jak Obserwowałem wiele osób walk-through dla poprzednich? Zamyla jest niesamowity, prawda? Jak pragnę ja Zamyla czasem. Więc na pewno korzystać z walk-through. Ona jest rozbicie go na kawałki małe, bite-size. A kiedy masz te ogromne Dane z Twoich zbiorów problemowych, to będzie bardzo ważne aby być w stanie po prostu znaleźć gdzieś na początku i przez to działają powoli. Dobra, mamy również Study50, który jest study50.harvard.edu, wierzę. Można tylko Google studiować, i będzie to wymyślić. Jest to jeden z najlepsze zasoby mamy. Jest PowerPoints z notatkami i praktyki problemów dla Ciebie z rozwiązań, które w rzeczywistości może przejść. Więc jeśli kiedykolwiek chcesz więcej praktyki, więcej niż my w sekcji lub więcej niż swoich zbiorów problemowych, to jest Naprawdę miejsce Zachęcam do zrobienia. Został zbudowany przez latem niektóre z moich bardzo dobrych przyjaciół. I to jest niesamowite. W rzeczywistości, wiele slajdów że będę użyciem sekcji będzie pochodzić z Study50. Tak dużo TFS używać. I wreszcie, jak jak podano wyżej, godziny pracy. Jeśli masz problemy z w odrabianiu prac domowych, jesteś kłopoty z Koncepcja, przyjdź do godzin pracy. Idź na początku tygodnia, jeśli możesz. Zejdź na quad, dlatego, że jest trochę daleko. Nikt nie lubi chodzić tam. Ale to na swoją korzyść, bo wtedy jesteś będzie mieć wszystkie te TFS, [Niesłyszalne] Cię otacza. A szczególnie teraz, tylko wskazówka, czwartki są bardzo teraz w chłód Mather, ponieważ swoimi psets spowodowane są w czwartki. I wiedząc, chce używać jeszcze swoich późnych dni. Więc jeśli masz Kłopot z koncepcji, istnieje wiele TF którzy są w stanie Ci pomóc. Więc wyjdzie Mather w czwartek. Jeśli chcesz się ze mną zobaczyć, Mam zamiar tam być. Ja zazwyczaj robi własną pracę domową, bo nikt nie chce mojej pomocy. Więc przyjdź do nas. Spotkaj się z nami w połowie drogi. Tak jak wiele osób wzięło udział wykład lub oglądał go w Internecie? Jak wielu ludzi, udał się do Super rozdział w zeszłym tygodniu? Fajne. To naprawdę spora liczba. Jak wielu z was czytać spec tego tygodnia, dla Pset? Och, jestem dumny z was! Więcej cukierki dla was wszystkich. Dobra, więc to, co mamy na myśli "Nas spotkać w połowie drogi", jest że tylko część jest naprawdę będzie bardzo przydatne dla Ciebie jeśli się w po przeczytaniu Twojego Specyfikacja dla Pset. Bo kiedy przejść przegląd rzeczy powinny być patrząc na, to nie będzie do tyle sens, jeśli Ciebie nie wiem co ustawić twój problem będzie prośbą do zrobienia. Jeśli nie przychodzą do sekcji, oczywiście Nie może być tak, że przydatna. I nie zamierzam go osobiście, jeśli nie przychodzą do mojej sekcji teraz, ale na pewno należy. Jeśli nie możesz, oglądać je online. Są tam powodu. Kopalnia będzie właśnie tam. Jak można zauważyć, mamy nagrywany, więc to będzie tam na was. Jak dobrze, będzie lectures-- to oczywiście gdzie dostajesz zacząć od swojego materiału tutaj. Tak więc na pewno będę próbować i pomóc jak mogę, ale mogę tylko poznać do tej pory. Musisz rodzaju nas spotkać w połowie drogi. Grading-- tak, wszyscy który dostał maila ode mnie, jesteś moim oficjalnym sekcja. Będę klasyfikacji swoich psets. A ja po prostu chcę powiedzieć jedną rzecz, że naprawdę powinieneś zwrócić uwagę na są komentarze. Komentarze są często bardziej użyteczne niż rzeczywisty wynik możemy dać. A komentarze są rzeczywiście gdzie spędzam dużo czasu kiedy jestem klasyfikacji. Więc byłbym wdzięczny to jeśli je czytać. I są one rzeczywiście jak masz zamiar aby dowiedzieć się więcej o projekcie i stylu i rzeczy, które są trochę mniej cięcia i suche. Tak naprawdę zwrócić uwagę do tych uwag. Jeśli masz pytania na ich temat, lub pytania o swój wynik, proszę przyjść do mnie porozmawiać albo przed sekcją, Prawdopodobnie będę wychodzić w holu, czy później. Jeśli chcesz zaplanować jeden-na-jednego spotkania o tym, jak można poprawić później zestawy problem, po prostu daj mi znać. A potem tylko kilka wskazówek dla was. Tak więc jednym z największych rzeczy Zawsze podkreślam, do mojej sekcji kiedy uczysz się, jak kod jest pisać rzeczy na papierze pierwsze. Jeśli masz plan gry dla gdzie kod musi iść i to, co musi zrobić i to w podziale na małe kawałki Pseudokod Kod napisałeś się, masz zamiar być mniej prawdopodobne, aby błędy składniowe lub stworzyć pętlę, że jeśli nie mają innego. Jeśli wiesz, gdzie jesteś będzie ogólnie jesteś mniej prawdopodobne, aby te małe błędy, które czasem biorą cię godziny do ustalenia, ponieważ jesteś jak, których mi brakuje tego uchwytu? W tym pamiętać, użyj Style50. Zwłaszcza, gdy jesteś zamiar godzinach pracy, jeśli kod jest wszystkim przełącza się na jednej stronie, Oczywiście to jest polityka że możemy powiedzieć, naprawić tak, że wygląda jak mówi Style50 powinien, a następnie będziemy Ci pomóc. Więc to ułatwić Ci życie. To będzie uczynić nasze życie łatwiejszym. Wszyscy są szczęśliwsi. Każdy dostaje lepsze oceny. Czy to nie jest to, co wszyscy chcemy? Więc pisać rzeczy na papierze przed Czy kiedykolwiek dotknąć komputer. Mówić rzeczy na wysokim poziomie, a upewnij się, że wiesz, dokąd idziesz. A jeśli nie jesteś pewien, usiąść z kimś i chodzić ich przez krok po kroku jaki kod ma robić. Dziewięć razy na 10, będziesz jak, och, zapomniałem się jeśli warunek lub zapomniałem tutaj lub średnikiem Jestem aktualizację tej zmiennej źle. To są moje wskazówki do sukcesu. Tak więc od około połowy z was patrzeć jakbyś uczestniczył super-punkt, Jestem po prostu będzie bardzo krótko przejść pętli, które nie były na naszym pierwotnym porządku obrad. Ale są one bardzo ważne. I tak mam zamiar rodzaju prędkości przez tych, zanim przejdziemy do naszej rzeczywistej sekcji. Zanim to zrobię, to nie każdy questions-- logistycznie, osobiście, czy jest cokolwiek chcesz wiedzieć o mnie lub o sekcja lub klasy w ogóle? Wszystko dobrze? OK, fajnie. Piękny. Więc loops-- chłopaki powinni wszystko rozpoznać te elementy od podstaw. Więc pętle są w zasadzie tylko droga dla nas, aby coś zrobić pewną liczbę razy, niektóre powtórzono Działanie w oparciu o niektóre warunkowy. Mamy więc trzy różne rodzaje. Mamy dla pętli while i do-while. Więc dla loops-- musimy po prostu bardzo Ogólny układ tu na pętli. I to jest wielki, gdy wiesz, jak wiele razy coś musi wykonać. Kiedy mówimy o inne pętle, będziesz dlaczego to jest ważne rozróżnienie. Ale dla pętli są czegoś zestawu. Wiesz, możesz albo obliczyć liczbę czy wiesz ile razy chce to powtarzane na początku. Więc jeśli widzisz tutaj, my mamy tylko ogólny rodzaj z szkielet ramy dla pętli tutaj. Więc dla inicjalizacji, to gdzie zmienne są inicjowane. Z Mario, jestem pewien, że chłopaki nie coś jak int i jest równa 0. To miejsce, gdzie to się stanie, w kolorze niebieskim. Masz swój stan, który sprawdzane jest, co za każdym razem. Jeżeli ten warunek jest spełniony, to Reszta kodu jest wykonywany. Pokochasz go uruchomić again-- i zapytać. A potem mamy aktualizację, gdzie jesteś aktualizacji zmiennej. Tak więc, ponownie, z jak Mario, jestem pewien, zrobiliście coś takiego ja plus plus. Więc za każdym razem w pętli Ran mam zaktualizowane tak że kiedy byliśmy sprawdzenie go przed niektóre warunki, to się zmienia. Bo jeśli tylko mają zmienną statyczną, jeżeli wykonuje po raz pierwszy, to po prostu będzie wykonać nieskończenie. Więc musisz upewnić się, że zmiana zmiennej prawidłowo. I mamy też po prostu reprezentacja wizualna tam. Każdy dobry? Na pętli. Gdyby widzieli to w Pset. Fajne. Więc tutaj jest po prostu łatwe przykładem. Broszura ta jest CS50! 10 razy. I tak mamy inicjalizacji, jak widzimy tam, z int i równa 0, dla i jest mniej niż 10, i ja plus plus. I będzie to wydrukować, że 10 razy. Tak więc, podczas gdy pętle są loops-- wielki, kiedy nie koniecznie muszą wiedzieć, ile razy to zamierza aktualizacji na początku. Trzeba tylko trochę warunkiem, że jest zaznaczone. I to może być coś jak while-- Weźmy przykład z Pset. Jeśli Mario, próby Wejście liczba ujemna. Prawda? Miałeś ponownie zapyta swojego użytkownika. Więc można powiedzieć, dobrze, jeżeli użytkownik wprowadzi coś mniej niż zero, ponownego szybkiego im. I jestem pewien, że może mieć było coś, że niektórzy z was używane w kodzie. Więc jest to prosta sprawa. Trzeba natomiast niektóre warunkowe, które jest zaznaczone za każdym razem kod przechodzi do wykonania. Jeśli wartość true, możemy go uruchomić. W przeciwnym razie nie mamy. A co naprawdę I coś important-- że Dawid mówił o w lecture-- są szelki. Cokolwiek w ciągu szelki to, co wykonywane. Jeśli zapomnisz tych szelki, to będzie tylko się bezpośrednio z linii po natomiast został wykonany. Więc jeśli masz trzy rzeczy, które powinny kiedy to się stało warunek jest spełniony, i nie masz te szelki, tylko Pierwszą rzeczą, będzie się działo. Więc być bardzo świadomy gdzie umieścić swoje szelki. Jeśli trzymać się Style50, to na pewno pomoże. Fajne. Więc to jest odliczanie od 10 do zera. I jak widać tutaj, że zainicjować niektóre licznik poza nim. Jedna rzecz, że jest inaczej nie jesteśmy inicjowanie naszą zmienną w naszej pętli while. Jest inicjowane poza nim. Jesteśmy po prostu tylko wprowadzenie warunkują w naszej chwilę. Tak więc w tym przypadku jest to, gdy liczba jest większa niż zero. I wydrukować co nasza liczba jest a potem zmniejszyć naszą zmienną. I to jest też inna sprawa zauważyć. Nasza aktualizacja nie nastąpi to w ciągu że pierwsza część pętli while. To rzeczywiście się stało w ciągu szelki, ciało tekstu. Więc nie, natomiast loops-- do-while pętli są idealne do weryfikacji użytkownika. Tak więc niektórzy z was mogą mieć stosowany również w ten zbior. Można powiedzieć, zrobić, jak, poprosić użytkownika o wejściu. I wtedy, gdy, jak, wejściowego jest mniejsza niż pewna liczba. Więc dla wyraźnego przypadku z Mario, to byłoby zrobić printf, wprowadź liczbę całkowitą, a nawet całkowita wynosi getint. A potem faktycznie wykonać pierwszy tego kodu. Będziesz rzeczywiście jakieś liczby całkowitej. I wtedy można powiedzieć, podczas gdy że liczba całkowita jest mniejsza niż zero. Więc co to będzie zrobić, to jest to będzie wykonywać co najmniej raz. To będzie sprawdzić stan. Jeśli warunek jest prawda, to będzie działać ponownie. Więc zrób pętle są jednocześnie idealne dla walidacji użytkownika, bo wiesz, kod będzie wykonywać co najmniej raz, natomiast z podczas pętli, nie jesteś zagwarantować, że jest to zamierza wykonać jeden raz. To będzie sprawdzić stan Pierwsza, a następnie zdecydować, aby go wykonać, podczas gdy będzie zrób wykonać pierwszy kod a następnie sprawdzić, czy trzeba go powtórzyć. Czy to rozróżnienie sens dla wszystkich? OK. Fajne. Tak więc w tym przypadku, jest to rodzaj o co mi chodzi, to re-monity aż Ciebie się liczbę dodatnią. Tak więc wiemy, że printf "Wpisz liczbę dodatnią" i faktycznie, że z prośbą o wejście stanie się co najmniej raz. Jeśli użytkownik jest zły i utrzymuje wprowadzania numeru, który negatywnie wie, ile razy będzie to wykonać. Ale ten kod jest gwarantowana wykonać co najmniej raz. I dlatego to jest świetne walidacji wejścia. I że będzie używany dość bit. Wszystko w porządku, jakieś pytania do tej pory? Mamy dobre? Mówię za szybko? Jesteśmy dobrzy? OK. Niesamowite Więc mamy zamiar iść do przodu i mówić o tablicach. Fajne. Tablice są w zasadzie tak tylko struktury danych które pozwalają nam przechowywać rzeczy tego samego rodzaju. Więc jeśli kiedykolwiek tablicę, to albo po prostu będzie mieć ints czy to jest po prostu będzie musiał pływaków czy to tylko będzie miał znaki. Nie będziesz mieć z int char pacą z podwójnie. Jedna rzecz. Tablice są tylko jeden rozmiar, lub są one tylko jeden rodzaj. Mamy tu więc szereg wielkości trzy z trzech liczb całkowitych w nim. Mogli pływaków, ale jesteśmy powiedzieć, że są ints. Więc jedna rzecz zdaje sobie sprawy, że tablice to zestaw rozmiar podczas inicjalizacji im, a oni nie są easily-- ponieważ wszystkie są mniej wygodne, należy po prostu myśleć o nich jako nie jest w stanie rozciągać się w rozmiarze. Jednak duża wyruszył Twoja tablica na początku, to rozmiar to będzie na pobyt, ponieważ tablice są ciągłe bloki pamięci. A kiedy wy się do nieco bardziej o tym, jak pamięć rzeczywiście ułożone na dyski i na sterty i stosu, będzie to zrobić trochę więcej sensu. Ale może po prostu myśleć o niczym, to tylko rząd przestrzeni na dysku. I nie można zagwarantować, że nie będzie wolne miejsce po nim. Można zainicjować tablicę trzech, a następnie być może zainicjować kolejną tablicę pięciu później, i to tuż po tym. Więc jeśli było przejść obok miejsce trzy w tej pierwszej tablicy można byłoby pisać nad czymś innym. Więc tablice are-- dla was, po prostu myśleć o nich jak o stałej wielkości. Więc tworzenie array-- idziesz aby to zrobić, trzeba sporo. Tak więc w ten sam sposób, że mamy ogólna struktura naszej pętli, mamy piękny generała Struktura naszej tablicy. Ponieważ są one z jednego typu wszystko elementy w tablicy są jednego rodzaju, musisz zainicjować co ten typ jest. Więc, jak widać tutaj, mamy ładny mały typ danych wspornik. Więc jeśli tworzymy int tablica, która będzie int. Jeśli tworzymy char tablicy, to będzie znak. Jeśli tworzymy ciąg tablicy, to będzie ciąg. A następnie nazwa tablicy, cokolwiek chcesz go mieć. Więc może to a może wyniki testów to studenci, a może to cukierki. Cokolwiek zdecydujesz się wymienić swoje tablica, to co to będzie. A następnie w nawiasach, będziesz mają rozmiar, który chcesz. Tak, mamy 10 uczniów lub przechowywania mamy przechowywania 15 rodzajów cukierków? Co nie. Tak więc w naszym przykładzie tutaj, tworzymy tablicę wielkości trzech facetów, których zobacz tutaj po prawej stronie. A kiedy po raz pierwszy zainicjować to wszystko jest ustawione na zero. Więc to po prostu, że jakby czystej karty. Mamy wszystkie te przestrzenie, mamy wszystko pola te możemy umieścić nasze dane do, ale to tylko puste w chwili obecnej. Tak więc, jeśli chcemy rzeczywiście przypisać je te wartości, robimy tak tuż pod tutaj widać. Więc trzeba bez względu na nazwę swojego Tablica jest wskaźnik, a następnie, co chcesz. Więc po prostu odnosi się do indeksu, jak, co gniazdo patrzymy. I ważne jest, aby zauważyć, jest to, że tablice są indeksowane od zera. Więc jeśli chcemy pierwszego miejsca w pamięci z naszej tablicy, to będzie zero. Jeśli chcemy, drugi, to będzie jeden. Jeśli chcemy na trzecią, to będzie dwóch. Tak dalej, i tak dalej. Który jest również dlaczego, konwencjonalnie, kiedy robimy dla loops-- jestem pewien Chłopaki zastanawiali się, dlaczego zaczynamy na 0 w stosunku 1? A to dlatego, że gdy przejście się za pomocą tablic, to odwzorowuje prawidłowo. Więc jeśli chcesz iteracji do tablicy, to sprawia, że ​​dużo więcej sensu zrobić i równa 0, bo wiedzieć, że będzie odpowiadać do pierwszego miejsca w pamięci. Wszyscy dobrze się z tym? Fajne. A potem na dole jest tu tylko inny sposób zainicjować tablicę. Nadal masz typ danych i nazwę, lecz faktycznie wprowadzenie tam wielkości, można po prostu zrobić pustych nawiasów. A następnie z nich kręcone szelki na dole można tylko, że wejście danych które mają być oddzielone przecinkami. A to automatycznie powiedzieć, OK, rozumiem że masz trzy rzeczy w tych szelek. Więc wiem, że muszę przeznaczyć trzy bloki pamięci, a następnie zapisać te. Więc pierwsza wersja można użyć jeśli pytasz użytkownika do wejścia wartości, aby można było iterację tablicy i ask-- trochę int do wejścia im. Jeśli znasz wartości wcześniej, to sprawia, że ​​o wiele więcej sensu używać drugi sposób. Ale w większości przypadków, może nie wiedzieć co te wartości będą. Fajne. Jeszcze jakieś pytania? W porządku. Tak więc jeden dostęp elements-- z wielkich rzeczy na temat tablic jest to, że są one losowo dostępu, co oznacza, że ​​was nie patrzeć na każdym bloku. Jeśli wiesz, że ciebie chcą, co jest w bloku dwa, można po prostu powiedzieć, daj mi blokować dwa. I dlatego te Wskaźniki są tak ważne, i tak faktycznie do nich dostęp. Więc w tym przypadku, jak widzieliśmy wcześniej, kiedy byliśmy przypisanie wartości, w jednym przed, mieliśmy nazwę i Strona chcieliśmy dostęp, prawda? Tak więc w ten sam sposób, to wszystko mamy zrobić, aby rzeczywiście wyciągnąć, że z danych. Mamy nazwę i ma indeks, który chcemy. Tak więc w tym przypadku, dla pętli tu, na dole, ktoś wiedzieć, co robi, co by to wydrukować? MMHMM? Dokładnie. Więc tak, to jest po prostu iteracja. i jest równe zero-- możemy chodzić za pomocą kodu po prostu szybko. i jest równa zero, i jest mniejsza niż trzy w tym momencie, prawda? Tak, że sprawdza się. I możemy powiedzieć, OK, druk f co jest w temperaturze i. I tu jest zero, kiedy pierwszy raz iteracji, więc idziemy do tego pierwszego miejsca, i powiedzieć, OK, 65 jest Numer chcemy wydrukować. Więc to wydrukować 65 a następnie zrobić nową linię. i aktualizuje, więc drukuje 87. Aktualizuje go ponownie, i będzie to wydrukować 30. Każdy fajny? Niesamowite. Dobrze. Więc tutaj jest trochę jednego coś mówię, jak można śledzić czyjś wynik i dlaczego należy użyć pierwszy sposób inicjalizacji zamiast tego drugiego sposobu. A to po prostu przechodzi. I zauważyć, że mają rozmiar klasy 30. A my to inicjuje tablicę int, które jest wielkości 30. A potem mamy iteracji przez i jesteśmy prosi użytkownika do wejścia wyniki dla każdego z nich i przyporządkowywanie go określonego miejsca w pamięci gdzieś w tej tablicy. Cool? Czy to ma sens dla każdego? MMHMM? Więc hashtag określić rozmiar klasy 30 jest dyrektywa preprocesora, co oznacza po prostu, że gets-- ma zrobić jak proces kompilacji. Możesz myśleć o tym jako zmiennej globalnej. Sposób, w jaki to zrobić jest typically-- pozwala kodu zostać łatwiej zmianie. Więc powiedzmy, że nasza wielkość klasy nagle przechodzi od 30 do 15, gdybym nie zdefiniowano to w ten sposób, że tak przejść przez mojego całego programu i zmienić każde wystąpienie 30 do 15. Ale z tego, mogę zmienić jeden miejsce, i wszystko inne zmiany. Jeśli kiedykolwiek chcesz zrobić hash określić w przypadku, dokąd się wybierasz, śledzenie niektórych ustawić liczbę punktów dla klasy lub używasz liczby które będą stosowane, jak, przez bardzo długi programu, to lepszego zdefiniowania, że ​​na początku tak, że jeśli kiedykolwiek zmienia, otrzymasz zmienić jedno miejsce, a nie 100. Tak? STUDENT: Między robić i po prostu deklarując [niesłyszalne] na na górze. ALLISON Buchholtz-AU: Więc to ma do czynienia z efficient-- to trochę poza zakresem co można zawrzeć w tym rozdziale. To musi zrobić więcej wydajności i jak to wszystko naprawdę pracy w procesie kompilacji. Jeśli chcesz naprawdę wiedzieć o tym, że jestem szczęśliwy, wysłać e-mail z zasobów temat. Hash określić bywa korzystne do rzeczy. I jak kodować więcej, rodzaj uczyć się niuansów od kiedy należy stosować globalne kontra mieszania zdefiniować. Ale na razie, tak naprawdę nie ma martwić się o to że na krótką odpowiedź. Wszyscy dobrze się z tym? A także, jeśli chcesz używać skrótu określić, to naprawdę ważne, aby zauważyć, że nazwa powinna być we wszystkich czapkach. Nie jesteśmy po prostu robi Wielkość klas jest dramatyczna. Powinna ona być w rzeczywistości we wszystkich czapkach. Fajne. Wszystko inne nie? Jesteśmy dobrzy? Piękny. Witaj. OK, więc chcę, żebyście spojrzeć na to i zobacz, czy możesz znaleźć błąd. Dam wam wskazówkę. Jest gdzieś w tym dla pętli. MMHMM? STUDENT: powinna być mniejsza niż równa 2. ALLISON: Więc to może być mniejsza lub równe 2, albo może być mniejsza niż 3. A co to uzasadnienie, że? STUDENT: [niesłyszalne], 0, 1, 2. ALLISON: Dokładnie. Tak więc w macierzy o rozmiarze n, my tylko indeksy n minus jeden. Fajne. A potem możemy się naprawdę szalona i dostać tablice wielowymiarowe. Jednym z problemów, gdy wziąłem go w moim roku wymagane tablice wielowymiarowe, i myślę, że jeden z nich może wymagać to w tym roku, więc być wygodne. Owinąć głowę wokół niego teraz. Będzie ona wyjść na jaw ty, ale w chłodnym sposób. Tak naprawdę można tylko myśleć tablic wielowymiarowych jako tablice tablic. Tak więc można trochę pomyśleć o tej górze wiersz jako pierwszy kawałek pamięci. I to jest jeden Drugi kawałek pamięci, i jest ostatni wiersz Trzeci fragment pamięci. Oraz w tym, tam tablica. Ale oczywiście, łatwiej przedstawiać w ten sposób. Więc zainicjować jej w ten sam sposób. To jest znak Płyta z trzech przez trzy. Więc masz trzy rzędy i trzech kolumn. Jesteśmy reprezentujący to w ten sposób. I czy to na dostęp sam sposób, kolumna przez rząd. I tak 1,1 jak widzimy tutaj. Przypisujemy zero, zero, tam. 2,0 i 0,2. Więc po prostu dostęp them-- jeśli ktoś kiedykolwiek zrobić algebry liniowej, w ten sam sposób można uzyskać dostęp do elementu matrice, to sam pomysł tutaj. Więc można odnosić go do matematyki. Nie musisz martwić się zbyt dużo teraz o tym. Dobrze jest mieć ekspozycję, wiedzieć, że można to zrobić. Można utworzyć kilka szalony number-- można tworzenie tablic jest szalone wszystko co mam do powiedzenia. [Niesłyszalne] To staje się trochę szalony, ale to jest naprawdę fajne. Niesamowite. A potem, tak, mamy tu przykład. Oblicza długość łańcucha znaków. Tak jak wiele osób wiedział, że struny, że używasz są tylko tablice znaków? OK, tak. Więc może myślicie, że nie ma używane tablice przed, ale każdej chwili używasz getString w Biblioteka CSView, jesteś właściwie tylko z prośbą o Tablica znaków. A my dbać o wszystko że w back-end dla Ciebie. Ale były za pomocą tablice od rozpoczęcia. Po prostu nie wie jeszcze. A gdy masz tablicę znaków lub tablica, która jest przechowywania ciąg, Ostatnią rzeczą jest zawsze to, co jest nazywa terminator null, które to właśnie tutaj. I jest na koniec każde słowo, które przechowujemy. Więc jeśli chcemy dowiedzieć się, długość łańcucha, można powiedzieć, dobrze, wiesz, Zawartość tego bloku nie jest równa naszej terminatora zerowej. Oznacza to, że istnieje pewne znak, że rzeczywiście istnieje dbają o to część słowa. Zwiększyć długość. I wtedy, kiedy rzeczywiście dostać się do koniec słowa, będzie to rozwiązać i będzie to powrót naszą długość dla nas. MMHMM? STUDENT: Czy przestrzeń liczone jako terminator null? ALLISON: Przestrzeń jest więc nie terminator null. Więc jeśli masz multiple-- miejsca jest rzeczywiście szczególna wartość ASCII. Student: Co wykrzyknik ponownie równa? ALLISON: Tak, to jest to, czego dotyczą. Jeśli kiedykolwiek usłyszysz mnie w godzinach pracy, Ja zawsze nazywam to, jak, bang równa. Więc huk nie jest. Więc to nie jest równa. Więc jeśli próbujesz sprawdzić, czy coś jest fałszywe, wiesz zawsze, bez względu na huk zmienna jest, a jeśli jest to fałszywe, to wartość true, a ty fajne rzeczy można zrobić z tym. Więcej o tym później. Fajne. Wszystko jest dobre? Niesamowite. Więc teraz nadszedł czas na swoich facetów pracować, ponieważ rozmawiałem. Więc chcę, żebyś po prostu utworzyć tablicę z liczb całkowitych jeden, dwa, trzy, a następnie zostały one wydrukowane. Nie musisz tego robić, jak, Głównym, bla, bla, bla, cokolwiek. Chcę tylko, aby zainicjować tablicy, a następnie utworzyć pętli wydrukować je out-- lub pętli while, do Ciebie. Ja po prostu dać kilka minut do pracy na to. Idę odpocząć mój głos. Jeśli masz jakieś pytania, jestem szczęśliwy podjechać i porozmawiać z wami. Zapraszam do rozmowy ze sobą. Zdobądź więcej cukierków. W rzeczywistości, po prostu będę chodzić z cukierków. Jak to jest? Czy chcesz jakieś? Ktoś jeszcze w tym pokoju ma cukierki? Można także wziąć więcej niż jeden, chłopaki. Weź garść, jeśli chcesz. Jak również może. Każdy dobry jeszcze? OK. Również mam zamiar stworzyć anonimowy Google Formularz, a wy może złożyć tylko zwrotne po każdej sekcji czy jest coś, co chcesz ulepszyć lub coś, co chcesz zrobić. Jeśli jestem zbyt pełen werwy dla ciebie, mogę tonu w dół. Że będę tworzyć i wysyłać, że do was wszystkich potem. Dobrze. Zacznijmy więc małe. Jak chcemy zainicjować naszą tablicę? Co rodzaj naszej tablicy? Int, prawda? OK, więc to, co chcesz zadzwonić do tablicy? Tablica int, chłodny. W porządku, więc mamy tablicę int int równa, i co mamy po to? STUDENT: [niesłyszalne] wsporniki. ALLISON: Szelki. A następnie wewnątrz szelki? Jeden przecinek dwa przecinek trzy. Fajne. Tak, że wszystko jest w porządku. Więc teraz mamy do pętli. Tak więc w pierwszej części naszych pętli, co mamy? STUDENT: i jest równa 0? ALLISON: Tak int i jest równa 0, i to co jest dla nas warunek? Co i będzie mniej niż? Mniej niż trzy, a jak możemy Update? ja plus plus, aktualizując je o jeden. I wtedy będziemy mieć niektóre printf od liczby całkowitej, i co to jest, że w ubiegłym część, która rzeczywiście powiedzieć, co należy drukować? Będzie to nazwa Tablica, która jest int tablica, prawda? A co jest w nawiasach int tablicy? i. [? Więc?] Nazywa mój Przykładem, ale tam. Nie jest tak źle. Każdy dobry? Fajne. Tak skończymy z tablic. Gratulacje. Udało się iteracji przez wszystkie the-- tak? STUDENT: [niesłyszalne] ALLISON: Tak. STUDENT: Mam pytanie. Czy ma wcięcie szelki? ALLISON: Więc należy wyrównać szelki z pętli for, a następnie wszystko wewnątrz szelki powinny być wcięte. STUDENT: OK, powinien pętli jest wcięte? ALLISON: na pętli nie muszą być wcięte w tym momencie. Jeżeli jesteś w głównym, jeśli my rzeczywiście miał tu główną funkcję, to być wcięte z głównym. Ale w tym przypadku, to w porządku. Tak, pytanie. STUDENT: Czy trzeba mieć wsporniki po przykład? ALLISON: Tak, jeśli jesteś inicjowanie to w ten sposób. Więc pamiętaj, że jest to drugi sposób inicjalizacji tablicy gdzie mamy szelki a następnie nasz rzeczywisty Dane oddzielone przecinkami wewnątrz. STUDENT: Myślałem, że nie było Wsporniki dla tego przykładu. ALLISON: Nie, oni są szelki. Są szelki. Jeśli inicjalizacji ten drugi sposób, to szelki. Gdybyśmy mieli do powiedzenia, jeśli int example-- chcieliśmy tylko pustą tablicę o wskazówki, byłoby int przykład wsporniki trzy. Wsporniki stanowią rozmiar. Gdy masz szelki, to rzeczywiste dane jesteś wprowadzenie do niego w ten sposób. Możemy przejść z powrotem bardzo szybko. Więc w tym jednym, to tylko nasze Początkowa tablica, inicjalizacji. I tu jesteśmy indywidualnie przypisywanie plamy im więc ten reprezentuje indeks naszych tablica, dlatego mamy wsporniki. Ale tutaj, jeśli zauważysz, mamy Zostawiliśmy wsporniki bez wielkości, i zainicjować go z rzeczywiste dane all-in-one z szelkami. STUDENT: Dlaczego więc nie mamy Uchwyty w tym przykładzie? ALLISON: Tak, w której części? DLA STUDENTÓW: nie chcemy powiedzmy, int przykład wsporniki równa szelki [niesłyszalne] Uchwyty na przykład. ALLISON: Och, przepraszam. Masz rację. Mamy wsporniki tam. Sorry chłopaki, moje złe. Tak, trzeba mieć Uchwyty po np. Masz absolutną rację. STUDENT: [niesłyszalne] nie robi. ALLISON: Nie, trzeba mieć wsporniki, bo w przeciwnym razie to nie zamierza zadeklarować tablicę. STUDENT: [niesłyszalne]. Przepraszam za to. ALLISON: Niestety, trzeba Uchwyty po np. Literówka. Dobry chwyt, złota gwiazda dla Ciebie. Ponadto, jeśli zadaje pytanie, czy chłopaki po prostu powiedz mi swoje nazwiska, Chciałbym tego. Chciałbym być w stanie znać wszystkie swoje nazwiska. Nie zamierzam na zimno wzywam was, tak naprawdę czy po prostu chcesz wiedzieć, swoje nazwiska. Więc proszę mi powiedzieć, w rzeczywistości wasze nazwiska. LEAH: Leah. ALLISON: Leah. OK, więc functions-- wiem w skrócie mówili o tym podczas wykładu. Więc funkcje są rodzajem tylko jak te małe rzeczy, bite-size gdzie można przejść się wejść, coś magiczne dzieje, i masz wyjścia. Fajne. Więc rzeczywiście używane Wiele z nich już. Pobierz int, uzyskać ciąg, druku f. To są wszystkie funkcje gdzie po prostu zadzwonić do nich, istnieje wiele magicznych rzeczy dzieje się w tle że nie koniecznie zobaczyć, i masz, co chcesz. Albo przynajmniej można dostać co masz nadzieję, że chcesz. I w zasadzie punktem funkcji, i jednym z głównych tematów CS, jest złamać kod do opanowania sztuki. Kiedy zacząć pisać Programy te bardzo długie, lub w Scratch, kiedy trzeba było Ten wspaniały pomysł na grę, musisz być w stanie go złamać do, jak, OK, jak mam zacząć? Jakie są małe kawałki, które trzeba? Och, muszę zapytać użytkownik czegoś. Teraz muszę coś wydrukować. Och, muszę obliczyć tę wartość. I uczenia się, jak zerwać swoje Kod i duże problemy, mają w tych małych kawałków i tworzenie funkcji jest rzeczywiście jednym z duże kamienie węgielne CS. Więc można myśleć tylko jako o funkcji jak czarną skrzynkę, magiczna czarna skrzynka, które można umieścić rzeczy w a masz jakieś wyjście. A reszta programu nie musi koniecznie wiedzieć co się dzieje w tym czarnym pudełku. Wszystko to troszczy się o to, co idzie i co wychodzi. Fajne. Więc dlaczego funkcje? Organization-- jak powiedziałem, gdy jesteś do czynienia z bardzo dużymi bazami kodów, jak organizować kod będzie znacznie łatwiejsze, jeśli używasz funkcji. Ponieważ będziesz mógł się, jak, to OK, co to jest funkcja i Oto, co drugi robi. I można łatwo zobaczyć jak to wszystko do siebie pasuje. Więc łamiąc go na wszystko Te zarządzalne podczęści. Więc simplification-- jestem pewien, że chłopaki wszystko widział to, jak powiedziałem, z początku. Masz ten wielki pomysł, a jesteś jak, jak to wszystko działa? Ale jeśli to podejście fragmentaryczne, można powiedzieć, OK, jak mogę zrobić jeden sprite unosić się na ekranie? To jest trochę łatwiej. Tak dobre wykorzystanie marek funkcyjnych kod o wiele łatwiejsze do odczytania. Ułatwia to w celu debugowania, które w można dostać się do późniejszych zbiorów problemowych, będziesz naprawdę Chcesz być w stanie to zrobić. I są też łatwiejsze do projektowania i realizacji. Możesz kodować się mała działa stosunkowo szybko i upewnić się, że działa kontra stara stworzyć cały ten długi program i rodzaj przejść i zobaczyć, co działa, a co nie. A następnie ponownego wykorzystania. Więc trzeba tylko funkcje do zapisu raz a następnie można je stosować tyle razy, ile to możliwe. Więc to, jak ekologiczny w pewnym sensie. Gdybyś miał takie rzeczy jak druk f, gdzie miał pisać magię, która wykracza na tyle wydrukować f każdej chwili chcesz coś wydrukować, można byłoby bardzo chory i zmęczony przez koniec. Jedną z rzeczy, które będziesz dowiedzieć się, w późniejszych klas CS, lub jeden z najlepszych rad uzyskaÄ jest, jeśli kopiowanie i wklejanie Kod powinien to prawdopodobnie funkcja. Jeśli masz dokładnie takie same wszystkie linie na całym kodzie, jeśli uwzględnić je, Twój kod będzie prawdopodobnie być, jak, pięć razy krótsze i być o wiele bardziej czytelny. I zamiast próbować rozwiązać wszystkie te różne miejsca, gdzie rzeczy może pójść nie tak, masz jedną funkcję że można dostać się do rozwiązywania problemów. I obiecuję, dużo tego może wydawać rodzaju abstrakcyjne teraz, ale jak masz na później i później problemem ustawia, będzie to zrobić dużo więcej sensu i naprawdę być prowadzone w domu. Czy są jakieś pytania o funkcji do tej pory? Dlaczego mamy je za pomocą? Wiem, że nie dostał w piaszczysty Nitty jeszcze. Więc definiowania function-- tak jak tablice, musimy to jakieś of-- Ogólnie jest po prostu wyjście. Więc jest to funkcja, która jest po prostu będzie kostka jakieś wejście. A na następnej stronie, rzeczywiście, mamy wszystkie te niesamowite małe rzeczy tutaj. Więc może każdy przeczytać , z ciekawości, że? Wiem, fioletowy i czarny może być trochę trudne. Ale wielkie rzeczy do know-- więc pierwszy jeden tutaj jest nasz typ zwracany. Więc to mówi o wyjściu tej funkcji, podczas gdy w tym przypadku wkładamy w jakiś numer, co mamy się, że liczba kostkę. Więc powinno być int w tym przypadku. Może to być podwójne lub coś jeszcze później, ale w tym wypadku to int. Z c, zawsze trzeba typ zwracanej. To będzie int. To będzie pływak. To będzie podwójna. Ale trzeba określić co funkcja ta ma zamiar wrócić. Inaczej będzie krzyczeć na ty, i nie będzie skompilować. Będziesz smutna, i będę smutny. I to nie tylko dobre. OK. A potem mamy nazwę funkcji. I jak widać tutaj, zc nie to jest bardzo spójna paradygmat. Jaki jest Twój typ, co to jest nazwa, i niektóre inne, co w końcu. Więc mamy typ zwracany, nasza nazwa funkcji, a następnie mamy nagłówek z nasza lista parametrów. Więc lista parametrów jest to, co jest funkcja ta zajmie się? Lista parametrów jest po prostu synonimem, jakie są nasze wejść? W ten sam sposób, w jaki zdefiniować naszą funkcję i nadać mu powrót typu, każdy z naszych wejść musi mieć typu powiązanego z nim. Więc wiemy, co nasza funkcja może rzeczywiście pracować. Więc w tym przypadku, mamy kilka int wejście. Więc jeszcze raz, to będzie typ i co dzwonisz go. A potem, jak widać tutaj mamy nasze ciało. Więc mamy trochę int wyjście, które jest tylko nasze czasy wejść sam się Sam czasy, które po prostu kostki go. A potem wracamy, że wyjście. Więc, jak widać tutaj, mamy int razy int razy int, dlatego zwraca int, który została uznana za nie. Więc wszystko jest spójne. Wszystko jest szczęśliwy. Twoja funkcja będzie działać. A to jest po prostu ogólnie rzecz. Więc zawsze zwracany typ, imię i nazwisko, a lista parametrów. Każda rzecz w swoim lista parametrów, lub wejście, musi mieć typu powiązanego z nim. I wtedy masz swoje tu z tym, co ciało chcesz zrobić z wejścia. A potem oczywiście ci Aby powrócić coś. Czasami po prostu wrócić funkcje. W rzeczywistości nie wrócić coś do użycia. Ale trzeba wrócić w jakiś sposób. A kiedy robisz własne funkcje, możemy dostać się, że trochę głębiej. Osobiście, jeśli chcesz, istnieje wiele różnych rzeczy można tam robić. Każdy dobry? Wszystko na tej liście, że mnie chcesz aby przejść, że nie rozumiesz? Wszyscy dobrze nie? Fajne. Niesamowite. OK, więc mamy wprowadzenie teraz to wszystko razem. Tak więc mamy pewne wejście int kostki, więc jest to kompletny program tutaj. Aż do teraz, mam rodzaj został dając Ci fragmenty, które mogą guys się dzieje w programie. Mamy właśnie patrząc na funkcje. Ale tu jest cały program. Tak jak wielu z was pamięta Prototyp słowo z wykładu? Fajne. Mamy jeden. Jak się nazywasz? STEPH: Steph. ALLISON: Steph? OK, super. Więc, czy pamiętasz, co prototyp? STUDENT: Mówisz [niesłyszalne] zanim faktycznie sobie z tym poradzić. ALLISON: Czy pamiętasz dlaczego? Student: Nie. ALLISON: OK. Gold Star. Więc tak, mamy prototyp wcześniej, ponieważ w przeciwnym razie, nasz kompilator będzie krzyczał na nas. To będzie powiedzieć, OK, co to jest funkcja kostki? Jak, dosłownie powiedział mi nic na ten temat. To jak, kiedy Wchodzisz do sali, i ktoś, jak, nie ma dzisiaj quiz. A ty, ty jesteś jak Nigdy nie powiedział mi o tym. Nie jestem zadowolony z nas. Prototyp jest w zasadzie jak Twój program nauczania mówiąc wyglądać. Głowy do góry. Nie będzie w tym dniu quizu. Nie freak out, gdy się do niego. Masz zamiar być w porządku. Więc nie jest powiedzieć prototyp Głównym, będę korzystać z tej funkcji. Obiecuję, że definiuję ją później. Nie freak out na mnie. Wystarczy skompilować i robić to, co ci każę. Mamy więc tam prototyp wystarczy, aby uczynić nasz kompilator szczęśliwy. I to w zasadzie, że obietnica zdefiniowano tę funkcję później i że nie tylko dzwoni to coś, że to przypadkowe nie wiem, co masz będzie robić. Więc w tym przypadku, mamy tu głównego. Mamy zainicjować jakąś całkowitą x. To dwa. Mamy zamiar wydrukować co x jest. Jedziemy z Cube x. Jak widać, mamy deklaracja funkcji tutaj, że my mówił o wcześniej. To będzie kostka x, a następnie, jeśli pamiętam, w rzeczywistości funkcję kostki zwraca liczbę całkowitą us, który jest przechowywany w x znowu tak, że możemy drukować osiem lub kostki x teraz. Czy to ma sens dla każdego? Jesteśmy dobrzy? Dobrze. Niesamowite. Dobrze. Ilu z was To tak to pamiętam jest w zasadzie tylko jedno stos a kupa, tylko wizualizacja jak pamięć jest przechowywana tutaj. Więc po prostu chcesz, aby Upewnij się, że rozumiesz jak są one reprezentowane w pamięci. Jeśli na zajęcia, jak CS61 i rzeczy później, można dostać się do nauczyć się tego o wiele więcej w głębi, i to jest naprawdę fajne. Gorąco polecam. Ale teraz, dam Ci szeroki przegląd więc nie masz do znać piaszczysty Nitty. Więc szczycie segmentu tylko tekst, który zawiera aktualne zer i jedynek, binarny na to. I jest używany do przechowywania zmienne globalne, jeśli masz jakiekolwiek. Jak poruszać się w dół, my mają, jak widać tutaj, inicjowane danych odinicjowany Dane, a następnie sterty. Więc tak naprawdę nie mówić o sterty teraz. Dostaniemy się do niego później. Na razie jestem po prostu będzie fala ręce i być jak, nie musisz o tym wiedzieć teraz. Ale będziemy mówić trochę nieco o stos. Więc stos jest where-- mamy powiększanie. Jest to rzeczywiście jak programu po prostu spojrzał na występuje w pamięci. Więc co się dzieje, to, co czas nazywamy funkcję, mamy to, co się nazywa stos ramki, co jest jednym z nich. Więc Main parametry. To są rzeczy, które przechodzą do magistrali. Więc oni są tu na dole, ponieważ jest to pierwsza rzecz, którą nazywamy. A następnie dostać się do Main mieszkańców, a gdy mówimy, że, rozumiemy zmienne lokalne które są przechowywane w główne. Więc mieszkańców tutaj będzie, jak, x wynosi dwa, w tym przypadku. Dlatego, że jest zlokalizowana w głównym. Czy wszyscy pamiętają zakres, dzieje się, że w wykładzie? OK. Tak, tylko, że zmienne są inicjowane w ciągu głównym. To dlatego mamy główny [? wokal. ?] A następnie w ciągu głównym, nazywamy kostkę. Prawda? Tak więc mamy kolejną klatkę z parametrami sześcianu. Tak więc w tym przypadku sześcianu Parametry są teraz x, że minęliśmy się, dwa, że ​​minęliśmy się. A potem miejscowi sześcianu, który jest gdzie rzeczywiste organizowania kostek dzieje. A potem wraca. Więc co się dzieje, jest jak kostka faktycznie robi co to robić, to zwraca. Kiedy wraca, to rama opuszcza, i powrócił do jej głównego. A następnie w ciągu głównym, mamy rzeczywiście można je wydrukować. Więc kiedy jesteś powrocie coś, gdy funkcja zwraca, to jak przekazanie tych wartości do Ramka pod nim, a następnie odchodzi. I rzeczy muszą wykonać w kolejności. A kiedy się do większych programów, możemy chłodniejsze i bardziej skomplikowane schematy. Ale teraz, to jest tylko ogólny przegląd tak masz rodzaj Zrozumienie tego, co dzieje się, gdy jesteś wywołanie funkcji i jak to faktycznie wygląda w pamięci. Cool? Każdy dobry? Niesamowite. Więc to jest taki, który jest tylko próbuje zamienić rzeczy. Jak widzimy tutaj, mamy nasz prototyp funkcji tak, że nasz kompilator nie krzyczał na nas. Mamy kilka głównych, a my Aby przełączyć x i y. Nie zrobili tego demo w jeszcze wykładzie mają? Oni nie mają? OK. Tak więc mamy zamiar udać nad tym samym krótko. Dostaniesz więcej na ten przykład w głębi, myślę, że w tym tygodniu. A następnie w przyszłym tygodniu możemy naprawdę zanurzyć się, dlaczego to nie działa. Więc mamy tę pustkę FUNCTION here-- wymiany. Więc nieważne, po prostu oznacza, że nic nie jest zwracana. I mamy wymiany int int a i b. I mamy pewne tymczasowe Zmienna to. zostaje przypisany do B, a następnie b zostaje przydzielony do temp tak że A i B na Wartości są teraz włączone. Ale fabuła skręt, to nie działa. I część faktycznie ma do czynienia z faktem, że i b tutaj, te, które przejdzie w tutaj, w rzeczywistości kopie xi y. Więc kiedy funkcja właściwie zwraca, włącza, ale nie kopie Rzeczywista x i y jest. Więc jeden sposób, aby myśleć o to that-- udawać są wymiany. OK? Tak więc w głównym, mamy xiy zainicjowany. Ale kiedy faktycznie idą w górę do tych ramek z wymiany, przekazujemy wartości ponad do niego i są one inicjowane. I zawsze tylko żyć tutaj. Więc i b żyć tutaj. A oni się zamienili. Ale kiedy wrócimy, my nie zrobić coś z i b. b urlop z naszej funkcji. I tak xiy pozostają takie same. Dostaniesz więcej, w jaki sposób to naprawić i jak właściwie radzić sobie z tym później. Ale to tylko jedna rzecz do rodzaju pamiętać. Użyj go na przyszłość. Nie martw się, jeśli nie sprawiają, że cały sens w świecie. Są to kopie jest największą rzeczą. Jeśli masz zamiar wziąć coś od, że zdałeś w kopii. Więc oryginały pozostaną takie same. Każdy dobry? Fajne. Tak więc argumenty wiersza polecenia. Jestem pewien, że na początku wszyscy faceci miał te wielkie, jak, int główne przestrzenie. I jesteś jak, OK chłodzie. I naprawdę nie obchodzi. To jest po prostu to, co mam napisać. Ale w swoich nowych programów, szczególnie w tym Pset, i dlaczego jest kreda na ziemi? Przy następnej Pset, jesteś będzie widząc to. Int main, int arg c, ciąg łuk przeciwko, wsporniki. Tak, od tego, co tylko dowiedziałem się dzisiaj, co myślimy, że drugi parametr lub, że drugim elementem jest tutaj? Jest to tablica. Jaki typ tablicy? Tablica ciąg, tak. Fajne. Tak, to w jaki sposób masz zamiar być deklarując je teraz. Czy ktoś pamięta co to oznacza? Nie? Hmm? STUDENT: arg c. ALLISON: Tak arg c utrzymuje licznik. To int. Jest to liczba, prawda? Więc co o tym myślisz, że liczba jest? Tak. Tak arg c jest liczba łańcuchów które składają się z linii poleceń. Więc gdybyśmy do-- rzeczywiście, istnieją przykłady po tym więc nie będę się przed siebie. To, że liczba strun po prostu zrobić swój wiersz polecenia. Więc kiedy zrobić, jak, kropka slash Mario, to jeden ciąg, który sprawia, że ​​się. W tym kawałku, możesz być w rzeczywistości karmienie rzeczy w linii poleceń, a jestem pewien, że faceci, którzy Przeczytałem spec piłę. Tak więc w tych przypadkach, może będziesz mają dwa lub trzy argumenty. To będzie przydatna rzecz w użyciu. A potem arg v, jak powiedzieliśmy, jest tylko tablica ciągów. Tak, że rzeczywiście przechowuje co Ci wejście do linii poleceń. Więc mamy te. Masz jakieś kropki ukośnik skopiować plik_we strumienia błędów. Tak więc, jeśli arg c oznacza liczbę łańcuchów które przekazujemy do polecenia linii, co jest naszym arg c w tym przypadku? Trzy. Dokładnie. Więc co jest arg przeciwko zera? Więc co jest pierwszą rzeczą, mamy zapisane? Dot slash egzemplarz, dokładnie. A potem drugi będzie plik_we. Trzecia będzie plik_wy. Więc co o arg v trzy? Byłoby null, bo to koniec naszej tablicy, prawda? Fajne. A potem co z szóstego? To trochę podchwytliwe pytanie. Owski. Czy wiemy, co to jest? To nieokreślone. Nie mamy pojęcia, co to może być. To, co jest w porządku po tablicy w pamięci, i nie mamy pojęcia, co to jest. I to jest niebezpieczne, by dotknąć tych, rzeczy, bo dla wszystkich wiesz, to jest jakaś część pamięci, która Cię nie powinno być dostępu lub wartość null. I może to zrobić szalone rzeczy. Nazywa się zbyt indeksowania Twój zobowiązany do macierzy. Nie idź poza granice swojej Tablica lub złe rzeczy mogą się zdarzyć. Wracasz i jak, prawa fizyki zostały zniszczone czy coś. Fajne. Czy to ma sens dla każdego? Nie jest tak źle. Więc teraz, wszyscy są ulubiona część, ocena pset. Yay! OK. Więc dla tych z was, którzy nie przeczytać specyfikację Pset, robisz niektóre naprawdę fajne rzeczy z kryptografii. Masz zamiar stworzyć Ceasar Cipher i Szyfr Vigenère'a. Powinno się czytać speca, zobaczyć, jak te prace. A jeśli masz jakieś problemy o co powinno być w rzeczywistości robi, proszę przyjść do mnie porozmawiać, napisz do mnie lub mnie tekst. Jestem w pobliżu. Tak więc są trzy główne rzeczy tutaj, że my chce rozmawiać about-- tylko rodzaj przedłużenia wykładu. Rzeczy, które może nie wiedzieć o, pomocnych wskazówek i narzędzi. Więc mamy zamiar zrobić szybki przegląd ASCII, dlatego, że będzie to bardzo ważne dla Vigenère w Cipher. Jedziemy do konwersji Wejścia linii poleceń, które będzie bardzo pomocne dla cesarza Cipher. A potem modulo. Fajne. Tak, mapy znaków ASCII liczb. To jest wielki chart. Powinieneś mieć to zakładka gdzieś. Będziemy chcieli go Twoja pierwsza średniookresowy. Jestem pewien, że każdy ma to wykres na swojej kartce średniookresowej. Więc się go nauczyć. Uwielbiam go. Należy zachować. To będzie przydatne. A wszystko to jest kodowanie że mapy alfabetyczny, numeryczny, i innych znaków do numery dla naszego komputera. Oczywiście, ponieważ w koniec, wszystko, co możemy zapisać dostanie przerobiony do zer i jedynek, więc musimy w jakiś sposób do reprezentowania tekstu i znaków, że wszyscy jesteśmy przyzwyczajeni jako jakiejś liczby. Tak więc, jak widzimy tutaj, mamy wielkie litery, które jest tuż obok. To 65. A małe jest 97. Więc można dowiedzieć out-- jak powiedziałem wcześniej, jeśli miał szereg wielokrotności struny, co każdy z nich mieć terminator null. Byłoby to miejsce. Przestrzeń ma własną special-- I zapomnieć, gdzie jest tutaj. Ach. 32 miejsca. Więc wszystko, co do niego mapy. Mamy więc ASCII matematyki. Pro tip-- w Vigenère użytkownika, można się pokusić do konwersji liczb do liczb całkowitych, ale lepsza praktyka aby móc wykorzystać znaki takie jak ten kiedy rzeczywiście ich manipulacji. Tak więc, jeśli chcesz używać numerów, można. Ale jest lepszy sposób, albo sposób, że mamy tendencję do was jak to zrobić, jest w ten sposób, gdzie jesteś faktycznie odjęcie znaków. Więc chcę, żebyście rodzaj zrozumieć te obecnie. Dlaczego nie spróbować co drugi? Więc pierwszy, ten trzeci i piąty. Bo chcę, aby upewnić się, że mówimy o wszystkim musimy rozmawiać. Jestem po prostu powiedzieć, jeden z ważne rzeczy to-- oh czekaj, chłopaki nie widziałem tego. OK, tak jak pierwsze trzy. Zróbmy to. Ponieważ mamy rozmawiać o modulo. Wiem. Matematyka jest trudna. Możesz używać kalkulatora. Jest OK. Albo podciągnąć tabelę ASCII, ponieważ jesteś prawdopodobnie będzie chciał tego. Fajne. Więc ja szybko chodzić wy przez te. Więc ludzie tabele ASCII zatrzymał się? Jaki jest nasz numeryczny Numer dla małych liter A? STUDENT: Siedem. ALLISON: Tak małe jest 97 i 65 jest wielkie. Tak więc 97 minus 65? Grupa docelowa: 32? ALLISON: 62, tak. Więc w tym przypadku, co to wydrukować? To pierwszy? Jeśli mamy procent d, co by to wskazuje? STUDENT: liczba. ALLISON: Jesteśmy drukowania z rzeczywistej liczby. Więc jesteśmy naprawdę dzieje wydrukowanie 32 tutaj. A gdyby to było procent c, 32 da nam miejsca. Tak rozumiejąc, że Znaki mogą być drukowane zarówno liczby, jak i rzeczywiste postacie jest bardzo ważne, i zwracając uwagę na rzeczywiste typy że robimy tutaj. Fajne. Tak więc dla każdego drugiego z nich, co będziemy drukować? STUDENT: charakter. ALLISON: charakter. Fajne. Więc jeśli chcecie wiedzieć, ci może pracować to na własną rękę. Jeśli masz problemy, napisz do mnie. Ale druga będzie wydrukować małą b. Trzecia będzie wydrukować wielkie B. czwarty będzie drukować z wielkiej litery C i ostatni będą małe litery A. I ostatni jedno- jesteśmy naprawdę dzieje aby dostać się do tego, co ten szalony procent oznacza znak nawet w kilka slajdów. Więc spróbuj tych, na własną rękę. Jeśli masz problemy, Proszę się ze mną rozmawiać. Jeśli jesteś zwykle w hali D. Adamsa, prawdopodobnie znajdziesz mnie w pobliżu. Tak, atoi. Jak wielu z was nie widziałem tego Funkcja lub słyszał o nim w ogóle? Każdy, kto? Fajne. Więc co tak naprawdę stoi dla ASCII do liczby całkowitej. Więc co można zrobić, to, z Cezarem, dla tych, którzy przeczytali specyfikację, masz zamiar zrobić kropka slash Cezara po piszesz program, a następnie masz zamiar Wejście numer, że niektóre Do zakodowania swojej tajne wiadomości z. Ale, jeśli pamiętamy, wszystkie nasze Wejścia są przechowywane jako ciągi znaków. Prawda? Mamy arg v tablicę to wszystko, łańcuch typu. Więc jeśli po prostu spróbować ciągnąć ten jeden, to będzie myślę, że to numer jeden lub cokolwiek użyte jest w rzeczywistości charakter. Więc dostaniesz niektóre szalone wyniki. Więc jeśli naprawdę chcesz przekształcić na liczbę całkowitą że można użyć do manipulowania Twoje słowo lub wiadomość, będziemy chcieli używać atoi. atoi tylko konwertuje ciąg na int. Więc jeśli mamy ciąg 12, jeśli nazywamy atoi 12, czy co, że wejście jest, to rzeczywiście powrót ci całkowitą. Nie znak lub ciąg 12. Który, po uruchomieniu dodać, że z numerami, będą bardzo różne, ponieważ ciąg 12 W niektórych liczba szalony ASCII, ale całkowita 12 jest w rzeczywistości 12, który jest to, co chcesz. A więc chcesz, aby upewnić się używać atoi. Będziesz chciał to w Cezara, bo Ciebie Potrzebujemy dostarczonych przez int użytkownika w wierszu poleceń. Ale kiedy go umieścić w poleceniu linia, jest przechowywany jako ciąg na początku. Czy to ma sens? Nie koniecznie potrzebują tego Vigenère. Z Vigenère, jak powiedziałem wcześniej, należy spróbować użyć Matematyka ASCII, który wygląda bardziej jak tego, gdzie jesteś w rzeczywistości za pomocą znaków, które mamy wam. Fajne. Wszyscy tam dobrze? Niesamowite. Więc modulo. Więc co jeśli podane to ogromna liczba dla Cezara? Masz ten pomysł, że jeśli jesteś na Z i jesteś otrzymuje numer dwa, oznacza to, że need-- Z staje się drugim list po sobie, prawda? Więc trzeba jakoś owinąć wokół, i modulo jest sposób, aby to zrobić. Więc to nie jest to daje resztę podziału Pierwszy numer przez sekundę. I mamy kilka przykładów na sprawiają, że trochę więcej betonu. Ale w zasadzie, można użyć modulo kiedy chcesz zrobić coś owinąć wokół. Więc jeśli tylko chcesz numery jeden do osiem, można używać na wszelkie inne modulo liczba, i będzie zawsze zwrócić liczbę od zera do ośmiu. Więc jeśli jakiś examples-- mamy 55 modulo 10, to po prostu daje resztę 55 podzielone przez 10, co byłoby 5. A następnie trzy modulo pięć, ktoś odgadnąć, co to będzie? Trzy. Więc jeśli masz mniejsza liczba przed Modulo, nie może iść w równomiernie. To zero. Więc po prostu zwraca sam numer. Więc osiem modulo osiem będzie? STUDENT: Zero. ALLISON: Zero. Bo to idzie równo. 16 modulo 15? Publiczność: Jeden. ALLISON: Fajne. I to ten ostatni jest po prostu pokazać you-- można się zastanawiać, OK, jaka jest kolejność operacji tutaj? Czy dzielimy pierwszy? Czy mamy modulo pierwszy? Więc Modulo posiada ten sam priorytet jak podział lub mnożenia, i jego wiązanie lewe. Tak jest w ten sam sposób. Byś zawsze nawiasów, następnie mnożenie, dzielenie, i modulo w kolejności od lewej do prawej. Tak więc standardowe zasady. Wystarczy umieścić go w tej samej kategorii jak podział i mnożenie. Tak więc w tym przypadku byłoby mają jeden plus 2 daje nam trzy. Mnożymy to przez 2, więc mamy sześć. Mamy modulo, że przez 2, co daje nam? STUDENT: 0. ALLISON: 0. A następnie dodać 2, więc dostać dwa w tym ostatnim przypadku. Więc modulo-- jesteś na pewno będzie myśleć o sposobach zawierają że kiedy owijania około alfabetu. Jeśli jesteś na Z i trzeba przenieść przekazania trzy miejsca aby dostać się do C, tam, że cała koncepcja owijania wokół. Więc zostawię go wy, aby dowiedzieć się jak dokładnie masz zamiar go używać. Ale na pewno przydatnym narzędziem dla Pset tym tygodniu. Naprawdę podoba mi się to. Jest to jeden z moich ulubionych psets. Następnie po to zrobić, jeśli masz znajomych, można, jak, wysłać do siebie w tajemnicy komunikaty i upewnić się, że działa. Bo to będzie go lub cokolwiek odszyfrować. Dużo zabawy. I to jest koniec odcinka. Skończyłem wcześnie. Mam jeszcze 15 minut chłopaki, więc jeśli jest coś że chcesz iść na dalej, byłbym szczęśliwy, aby to zrobić. Wszelkie inne pytania dotyczące Twój pset dla tych z was, którzy rozpoczęli lub przeczytać specyfikację. Wszystko, co mówiliśmy o w ostatniej godzinie i 15 minut, że chcesz mnie lubisz do rodzaju rehash, byłbym szczęśliwy. Albo możemy zadzwonić przerywa, i można wszystko zostawić i zabrać ze sobą więcej cukierków jak przejść. Ale czy są jakieś ociąganie pytania, proszę dać mi znać. Można również przyjść i mów do mnie później. Obiecuję, że nie gryzą. Coś jeszcze? Każdy jest dobry? Każdego z nas, jak uczucie mogą obsługiwać ten zbior? Masz zamiar być w porządku chłopaki. Godziny pracy są tam nie bez powodu. Fajne. W porządku. Cóż, w takim razie, dziękuję wszyscy tak bardzo za przybycie. Mam nadzieję, że do zobaczenia w przyszłym tygodniu. Nie będzie więcej cukierków. Nie może być inne fajne rzeczy. I czekam na coraz poznać was wszystkich w tym roku.