PROFESOR: Więc porządek obrad w tym tygodniu, a nie, że wiele rzeczy. Ale mam nadzieję, że bardzo, bardzo pomocne i istotne dla was w tym tygodniu. Ale mamy zamiar spędzić może 15, 20 minut po prostu szybko talking o listy linków. Listy linków zamiar być pokryte w quizie. Więc może to być bardzo pomocne aby dowiedzieć się trochę o tym, co to jest. Mamy zamiar wydać ogromna Większość dzisiejszym odcinku będzie ponad Quiz zero problemów praktycznych. I wtedy będziemy zapisać może 20, 30 minut Na koniec dla jakichkolwiek pytań zalegających ktoś ma. A potem, w ostatnim pięć minut, idę wygłosi przemówienie pompy aż do quizu. Wy wszyscy chcą tu być za to. Dlatego, że będzie to dobry czas. W porządku, więc niektóre Materiał na liście linków. Jak oni zwykle skonstruowane jest masz, co się nazywa węzeł, prawda? Musisz te rzeczy zwanych węzły, które są structury. Pójdę na temat tworzenia węzeł w następnym slajdzie. Ale przede wszystkim związane list jest to dane zostały połączone razem za pomocą wskaźników. I tak atutem mamy korzystania z połączonej listy powyżej, Być może, podobnie jak tablica, jest fakt, że w tablicy potrzebny jest jeden ciągły blok Pamięć w tym samym miejscu, jeden po drugie, aby być w stanie mieć. Natomiast połączonej listy, można losowych trochę bitów pamięci całego komputera nawleczone razem przez wskaźniki. I w ten sposób może uzyskać dostęp do informacji że przychodzi jeden po drugiej po kolei bez potrzeby tylko ogromny kawał Pamięć gdzieś w komputerze. I tak jest to jeden z głównych powodów, dla których używamy listę linków. Po drugie, jest to bardzo łatwe do dynamicznie zmienić rozmiar listę linków, ponieważ w tablicy, kiedy zadeklarować tablicę, masz pewną wartość. Powiedzmy, że chciał stworzyć tablica z 10 liczb. Utworzyć tablicę 10 liczby całkowite, i to jest to. To 10. Nie wiem, co robić po tym. Gdybym chciał zrobić z niego 11, nie może tego zrobić. Jeśli chcę, aby on 9, nie może tego zrobić. Podczas gdy w liście łączy, można dodać i usunąć i wstawić tam, gdzie chcesz. Możesz dynamicznie zmienić rozmiar zorganizować tu swoją strukturę danych. A to daje nam wiele więcej dodał elastyczność że zazwyczaj nie mają z tablicami. Każdy mylić się na podstawowym struktura, jak lista link jest i dlaczego musimy użyć jeden na tablicy? Tak, pójdziemy nad szczegółowo jak faktycznie stworzyć. Ale to tylko rodzaj ogólny sens teraz. Chłodny. I tak tablice są nawleczone razem z tych ślicznych małych rzeczy zwane węzły. Cały węzeł jest to typ struktury. Pamiętaj, że struktura jest jeśli chcesz w celu utworzenia pewnego rodzaju zmienną w C, który nie ma już istnieje, Ty, jako programista, może faktycznie stworzyć go sam. A więc ten typ danych strukturę nazywa się węzeł została rzeczywiście stworzony przez nas, że nie istnieje w C na własną rękę. A sposób, że cię stworzyć jeden to masz nagłówek typedef struct, która informuje kompilator jestem o w celu utworzenia Struct. Jedziemy nazwę to "węzeł". A w środku będziemy zadeklarować zmienną w, który będzie przechowywać wartość. A potem mamy również zamiar mają wskaźnik nazywany "obok" który wskazuje na następny węzeł listy łącza. A potem dokończyć off po prostu powtarzając węzeł znowu tak kompilator wie, OK że to koniec mojej struktury. I tak, w ten sposób, jesteśmy rodzajem tworzenia śliczny tablicę Takie rzeczy z Wartość i ze wskaźnikiem. I można połączyć je wszystkie razem z tymi wskaźnikami. Tak, że wszystkie one mogą być miły połączone razem w łańcuchu. Chłodny. Słychać, że nieco lepiej? PUBLICZNOŚCI: Tak. PROFESOR: Wszystko w porządku. Więc sposób, że jak chłopaki widzą, typowa lista Link jest skonstruowany to masz głowę. Musisz wartość głowy, która nie jest wskazywanego przez inny wskaźnik. Ale to będzie wskazywać na, lub odniesienie, inny węzeł. Węzeł po zamierza odwoływać się Węzeł po tym, i tak dalej, i tak dalej aż w końcu trafić koniec listy linków. I po prostu nie będzie miał tam wskaźnik. I tak, myśleć jak, na łańcuchu, a nawet jeśli ktoś z was facetów wykonane, nie wiem, jak z Loops owocowe kiedy byłeś mały. Byś ciąg je razem i nosić je na szyi. Że to jest dokładnie to samo. Masz te małe rzeczy, które Ciąg razem, że może do jednego punktu Po tym, w jednej po go, i tak dalej, i tak dalej dopóki masz łańcuch struktury danych że można używać jak chcesz. Więc sposób, że to my by zazwyczaj wstawić lub usunąć każdy węzeł z linkiem Lista jest bardzo różne w zależności od miejsca, że ​​węzeł jest. Tak więc, na przykład, ponieważ Wskaźniki są zawsze wskazując na określonej wartości, podczas usuwania lub wstawiania węzła, chcesz, aby upewnić się, że wskaźnik to wszystko wskazuje na właściwe rzeczy. Więc jeśli chcesz potencjalnie wstawienia nowy węzeł o wartości jednej wewnątrz segregowanych linku lista, wszyscy wiemy tutaj z obrazu, który będzie przejść między głową a dwa, prawda? Ponieważ jeden pasuje tam. Ale sposób, w jaki to robimy jest pierwszym dereferencji wskaźnika od głowy i wysyłania, że ​​do jednego. Ale dochodzimy do problemu tutaj. Czy każdy może zobaczyć, co problem jest gdybyśmy pierwszej dereference wskaźnik od głowy do jednego? Jaki problem może wpadniemy jeśli spróbujemy dodać to do przodu naszej tablicy? PUBLICZNOŚCI: [niesłyszalne] PROFESOR: Dokładnie. Więc tutaj mamy wskaźnik, który był raz wskazując od głowy do dwóch. Ale jeśli pozbyć się, że wskaźnik, skieruj go do jednego, teraz nie mam pojęcia gdzie się udać, aby znaleźć dwa. Ponieważ, jak już mówiłem, że masz Olbrzym fragment pamięci w komputerze. Wszystkie te węzły mogłyby losowo przeplatane w dowolnym miejscu na komputerze. I nie wiem jak aby go o znalezienie tego. I tak trzeba mieć wskaźniki skierowaną do wszystkich węzłów w końcu. Albo jeśli przypadkowo dereference jednym bez pierwszej przypisywania wartość pierwsze, jesteś po prostu stracić wszystko później. Więc co mamy zamiar zrobić to, byś pierwszy Aby utworzyć wskaźnik na węzeł chcesz wstawić. Skierować go do miejsca, gdzie chce, aby wstawić go do, i potem ci może wskazywać głowę do jednego. Czy to ma sens, aby wszyscy tutaj? Wielki. Pomyśl o tym, jak po prostu jak łańcuch. Jeśli dodać łańcuch, jest to swego rodzaju intuicyjne jak bym go o wstawienie tego. OK, więc, że jest o wiele krótszy niż myślałem, że będzie, Spiel pięć minut na listach link. Wystarczy więc chłopaki mają Podstawową ideą, co to jest. Tutaj mamy porządek quizie zera. Nie pozwól zastraszyć. Wiem, że jest wiele informacji. To wygląda bardzo groźnie. To także wiele, I myślę, CSC rodzaju warunkach. Rzeczy takie jak struny w systemie szesnastkowym, wskaźniki, alokacje pamięci dynamicznej Warunki są bardzo groźnie brzmiące. Ale mamy zamiar je łamać w dół, zrobić jakieś problemy praktyczne tak, że wy wszyscy są gotowe do tego testu. Jak wielu z was ma już rozpoczął studia? OK, chłopaki prawdopodobnie chcesz rozpocząć się zaczyna na tym, ponieważ quiz jest jutro. Lub czwartek dla niektórych z was. Tak, więc mamy zamiar iść na niektórych problemów praktycznych. Jeśli wy wszyscy chcą brać na kartce papieru, ołówek. Jedziemy po prostu spędzić Zdecydowana większość dzisiejszego odcinka dzieje się tak, że niektórzy faceci mają pomysł, czego się spodziewać w quizie. OK. Kilka logistyczne Szczegóły, jak również, dla każdego która nie jest do tego połączenia jest, jeżeli idziesz do cs50.yale.edu, z przodu tej strony znajduje się link że mówi: "O Quiz Zero". Link zabierze cię tam. Jeśli nie masz go odczytać, należy ją przeczytać. Bo to mówi, naprawdę ważne informacje dotyczące quizu. Mam zamiar wyciągnąć na to uwagę od że tylko dlatego, fizycznie, jeśli ludzie nie wiedzą, gdzie iść, będziemy mieli problemy. I tak, jeśli chodzi o ostatnią A N, przejdź do auli szkoły prawniczej. A jeśli Twoja ostatnia zaczyna się od P do Z, przejdź do Davies Auditorium. I to dotyczy tylko osób w dziale środę. Jeśli bierzesz udział w quizie na temat Czwartek, idziesz do SSS 114 Wykład, gdzie zazwyczaj jest. PUBLICZNOŚCI: [niesłyszalne] PROFESOR O do Z, będziesz aby przejść do sali Davies. Mam zamiar to zmienić, prawda? Och, tak, po prostu nie automatycznie. O tak, to jesteś Christa. Tak, mój błąd. Tak, O do Z, będziesz aby przejść do Davies Auditorim. Mam zamiar rozwiązać ten problem raz przesłać. Tak. I wtedy też coś Ważne, aby pamiętać, jest to, że środa, jeśli są oficjalnie uczestniczących w sekcji środę, trzeba wziąć quiz w środę. A jeśli uczestniczących w czwartek, trzeba wziąć quiz czwartek. I to w czasie zajęć. Gdzie, myślę, że to jest jak 1:00 do 02:15 w środy i 02:30 do 03:45 w czwartki. Jeśli masz nierozwiązywalne konflikty, Wymówek Deana są jedyną rzeczą, niestety, możemy podjąć. Dlatego, że miał Zdecydowana większość wniosków aby przełączyć ze środy na czwartek. Których nie możemy uczcić chyba mamy wniosek dziekana. OK. Więc zanim zaczniemy na zasadzie Kilka problemów praktycznych, Idę tylko przejść Pomocne wskazówki Andy'ego sukcesu. Wy, kiedy uczysz się, że naprawdę chcesz ćwiczyć pisanie kodu ręcznie. Po raz pierwszy kiedykolwiek wziął quiz CS, nie miałem Praktyka pisania kodu ręcznie przed i to było bardzo szokujące, jak trudne to było. Kiedy wy nie dostać się do zwyczaj wpisywania się wszystkiego, chodzi bardzo naturalny sposób bycia stanie się autocompleted wsporniki i średniki tam. Kiedy piszesz go ręcznie, czasami jest to bardzo, bardzo łatwo zapomnieć, średnik, lub zapomnij zamknąć nawias, lub zapomnij zamknąć dwukropek, czy coś takiego. Więc kiedy piszesz kod ręcznie, to jest bardzo różny charakter. Więc chłopaki, podczas pracy przez niektóre z problemów praktycznych, byłoby dobrze, aby naprawdę ćwiczyć dzisiaj. Lub jutro, przypuszczam, jeśli jesteś biorąc udział w quizie na czwartek. Po drugie, mamy ostatni, jak, Osiem roku warto praktyce quizy on-line. Tegoroczna quizu będzie prawdopodobnie bardzo podobne do wszystkich z nich. Wszyscy są bardzo podobne. Ci rodzaj dostać się do styl rodzaju pytań o co prosimy, rodzaj Funkcje, które będziemy pisać je, et cetera, et cetera. Więc weź quizy praktyce w szczególności w ramach ograniczeń czasowych. 75 minut zrobić quiz jest nie dużo czasu. To bardzo, bardzo długo. A więc wy naprawdę chcesz aby upewnić się, że chłopaki są w zwyczaju pisania Kod ręcznie szybko. Bo nie chcesz pierwszy czas, aby zobaczyć, quiz o tej długości być na quiz. Chłopaki naprawdę chcesz się upewnić, że ćwiczysz wcześniej. Po czwarte, chcesz przeglądu Sekcja wykładowe i slajdy. Nie musisz zapamiętać rzeczy. Właściwie każdy pozwolił jeden arkusz białego papieru notatki, przód i tył. Możecie piszesz. Jeśli znajdziesz się potrzeby, aby zapamiętać coś, umieścić go w dół na tej kartce. Gwarantuję Ci, że nie chcesz, aby utknąć w środku tego quizu jest podobny, oh yeah, co jest czas pracy tego rodzaju porównaniu tego rodzaju. Wystarczy umieścić go w dół i skopiuj go prosto z blachy notatki. Wtedy może faktycznie wystarczy użyć mózg, aby myśleć o problemach zamiast przypomnieć fakty. I tak naprawdę skorzystać wszelkich informacji niszowych , że uważasz, że potrzebujesz do zapamiętania, rzuć go na karcie przeglądu. OK, wszelkie pytania logistycznie dotyczące quizu zanim zaczniemy niektóre Problemy quizów ćwiczyć? Tak? PUBLICZNOŚCI: Nie miałem szansy patrzeć na quizu [niesłyszalne] ale to będzie Program zazwyczaj, Czy jest tam też będzie, jak, pytania wiedzy? PROFESOR To dużo. Tak, tak, że będzie opisany w quizie jest-- ułożyła niektóre problemy praktyczne które wyciągnąłem ze wszystkich quizów. Ale zobaczysz, że nie ma dwóch głównych rodzaje pytań będziemy was pytać. Jeden szczegół bardzo niski poziom rzeczy. Damy Ci mały kawałek kodu i powiedzieć, czy jest błąd tutaj? Co będzie drukowanie tutaj? Jaki będzie ten kod produkcji, et cetera. Tak szczegółowe informacje dotyczące bardzo niskim poziomie. A w odwrotną stronę, będziemy mieć bardzo Wysoki poziom pytań opartych na wiedzy. Czy możesz wyjaśnić, co Różnica pomiędzy poszukiwania binarnego i przeszukiwanie liniowe jest? Dlaczego mielibyśmy używać jednego nad innymi? Być może to, co jest GDB? Dlaczego chcemy używać GDB? Wyższy poziom, bardziej fundamentalne zrozumienie pytania. Więc zobaczysz mieszaninę dwa z nich na quiz. Coś jeszcze, zanim prosto do niego? OK. PUBLICZNOŚCI: Jeszcze jedno. PROFESOR: Aha, jeszcze jedno. Przepraszam. PUBLICZNOŚCI: Tak, to wszystko w porządku. Więc mówisz, że 75 minut jest zbyt krótki, jak to jest mało prawdopodobne, że skończymy? Czy, jak, 75 minut Jest dokładnie tak, jak wiele czasu tak musielibyśmy gdybyśmy byli odpowiednio przygotowane? PROFESOR: OK, więc Quiz jest wyzwaniem. Jest to z pewnością wyzwanie. Znajdą się na krótki czas. Prawdopodobnie będzie hit, jak 10, 15 minut, aby przejść, i jest jak cholera. Mam tak dużo do zrobienia. I to jest całkowicie w porządku. Każdy będzie czuć się w ten sam sposób. Wystarczy być bardzo świadomi ile masz czasu. A więc dlatego mówię ci faceci quizy praktyk. Bo to naprawdę daje wielkie poczucie czego quiz będzie podobne. Więc jeśli znajdziesz się być stanie zakończeniu praktyki quizy w dobrej ilości Czas, można chodzić się dobrze, to nie będzie problem w środę lub czwartek. Chłodny. Więc jeśli wszyscy wants-- myślę większość ludzi ma arkuszy papieru się już. Mam zamiar w zasadzie tylko daje przykładowe pytania, Ci faceci, podobnych, kilka minut, aby je zrobić. I pójdziemy nad jako klasy co odpowiedzi na nie są. Więc jest to bardzo typowe na początku pytanie, które będziesz proszę cię, tylko konwersja liczby pomiędzy różnymi systemami. Binarne, jak faceci mogą Przypomnijmy, jest bazą dwóch. Dziesiętny jest bazą 10, lub co jak ludzie zwykle interpretują. Szesnastkowy jest bazą 16, która jest równa zero do dziewięciu, a także przez F. Więc nie cztery numery jestem prosząc was do konwersji tutaj. Dam chcesz, trzy do czterech minut na przemyślenie, jak pójdziemy na temat rozwiązywania tego. PUBLICZNOŚCI: Czy wolno kalkulatory? PROFESOR: Nie będzie trzeba kalkulatory, tak. Myślę, że podstawowym dodatkiem, jak sądzę, jest wszyscy faceci będą proszeni zrobić. I tak I niby mają poczucie od kiedy każdy jest zrobione, spojrzeć w górę, fala, nie wiem, uśmiech, wygląda na szczęśliwego, gdy skończysz. Tak. Może jeszcze kilka minut. OK, niech wprowadzą go w. Ja celowo będzie Ci faceci mniej czasu niż to prawdopodobnie trzeba zrobić niektóre z tych problemów, po prostu dlatego, że chcę, aby upewnić się, że mamy przez kilka problemów. Jeśli nie więc nie ma obaw mają szansę, aby zakończyć. Całkowicie OK, tak długo, jak trzeba pomysł, jak go o to. Więc zrób pierwszy. Więc po pierwsze, czy ktoś chce mi powiedzieć binarnie, co zrobić, każdy z tych cyfr stanowią z punktu widzenia ich wartości? Tak? PUBLICZNOŚCI: Dwa do Moc zero, dwa do jednego. PROFESOR: Dokładnie. Więc. Dobra, więc zazwyczaj kiedy jesteśmy w bazie 10 wszystkie te reprezentują to, jak, 10 do podstawy zera, co? To twoja czyjeś miejsce. Wszystkie twoje miejsce 10 jest to 10 do zasilania jednego. Miejsce Ci 100 jest 10 do potęgi dwóch. Cokolwiek baza jesteś w będzie do czynienia z dokładnie tej samej rzeczy, po prostu w innej bazie. Więc binarny, wszystko to jest baza dwa. Idziesz do konwersji wszystkich cyfry na dwa, aby cokolwiek mocy tej cyfry. I tak, w tym sensie, że może mieć łatwiejszy sposób jest w stanie dodać lub Podsumowując wszystkie numery w porządku do przeliczenia na podstawie 10. Więc czy ktoś chce mi powiedzieć, co Odpowiedź na pierwsze z nich jest w bazie dziesięciu? PUBLICZNOŚCI: Dwa, [niesłyszalne] PROFESOR: Tak. PUBLICZNOŚCI: 42. PROFESOR: 42, proszę. Więc sposób mamy tę odpowiedź była przez robi dwóch pierwszych, które jest dwa. Plus dwa trzecie, które jest osiem. Plus dwa do piątej, która to co pozostało ponad. Zsumować je i jest to 42. Czy ktoś jest zdezorientowany, w jaki sposób mamy to? Tak więc podstawowym dodatkiem, jak Powiedziałem, powinno być OK. Jeśli nie, cóż, możemy praktykować, że zbyt. Ale to wszystko jest w porządku. Chłodny. Czy ktoś chce dać mi odpowiedzieć na drugim, jak również? 50? Dobry. Każdy mylić na temat mamy, że albo? Fajne, będę mieć odpowiedzi na następnym slajdzie. Więc nie ma obaw, jeśli Ciebie należy skopiować go w dół. OK, więc szesnastkowy jest nieco trudniejsze. ale mam zamiar pokazać wam skrót dla, jak to zrobić. Więc szesnastkowym, jak ty pamiętaj, że wszystko to jest być 16. A ponieważ my jako ludzie faktycznie nie mają 16 numerów do reprezentowania, że możemy przejść od zera do dziewięciu, które nasz pierwszy 10 wartości, a następnie robimy od A do F, które są następne sześć wartości. A więc najprostszym sposobem, aby przejść od dowolną liczbę binarną na szesnastkowy jest przełamanie ich na pół. A więc każda liczba binarna damy że prawdopodobnie będzie osiem cyfr. Możesz po prostu złamać je się w środku. Więc pierwsze jedno- jeden jeden, jeden jeden, jeden, jeden, jeden jeden. Niby, że go, wiesz, rysować ukośnik lub przecinek między nimi. A może po prostu konwersji bezpośrednio cokolwiek to jest do pierwszej liczba szesnastkowy, a co tu jest drugi z szesnastkowym. Więc pamiętaj, ze wspólnej notacji, co wartości szesnastkowe zacząć? PUBLICZNOŚCI: Zero. PROFESOR 0X. Tak więc wiemy, że za każdym razem prosić, przekonwertować dowolną liczbę do szesnastkowy, lub w dowolnym momencie widać żadnej Numer, który zaczyna się od 0X, wiesz, że jest to wartość szesnastkowa. I wtedy masz zamiar zostać poproszony o ustalić, co te dwie cyfry to. I tak, jak to zrobić, liczenie się że połowa i liczenie się, że połowa. Tak więc w tym przykładzie, jaki będzie jeden, jeden, jeden, jeden być? Jaką wartość miałoby to być? Byłoby F, prawda? To byłoby 15. Tak więc będzie to F. One Jeden z nich, jeden, jeden tu również F. Tak jeden, jeden, jeden, jeden, jeden, jeden, jeden, jeden w systemie szesnastkowym, wszystko to jest 0xFF. Bo to połowa reprezentowany F, wartość 15, a to połowa reprezentowany F, wartość 15. Bo pamiętam, że jesteśmy licząc od zera do dziewięciu. A jest, jak 10, B jest jak 11, F 15. Czy to ma sens dla wszystkich how mamy z dwójkowego na szesnastkowy? PUBLICZNOŚCI: A więc jak mamy 15 od jednego, jeden, jeden, jeden? PROFESOR: Tak, to jest binarny, prawda? Wyobraź sobie, to tylko liczba binarna. Więc masz dwa do zerowego, które jest jednym. PUBLICZNOŚCI: Och, OK. Więc po prostu wynieść go na zewnątrz. PROFESOR: Tak, a następnie w sumie, że po prostu się. To wszystko to jest. PUBLICZNOŚCI: OK. PROFESOR OK. PUBLICZNOŚCI: Więc idziesz z binarny na dziesiętne na szesnastkowe? PROFESOR: To jest Najprostszym sposobem, aby to zrobić, tak. Nie idziesz na dziesiętne, ponieważ dziesiętny ma tylko zera do dziewięciu. Jesteśmy po prostu rodzaj Ten podział na dwa. PUBLICZNOŚCI: [niesłyszalne] używając po przecinku znaleźć co pasuje do w systemie szesnastkowym. PROFESOR: To znaczy, że jesteś liczenie się za pomocą podstawy matematyki. PUBLICZNOŚCI: Tak. PROFESOR: Tak, bardzo dużo. To jest nieco mylące. Ale wiem, że Ciebie może podzielić się niezależnie wartość ta jest w zaledwie pół. Spójrz, co to jest w formacie binarnym? Jaki numer jest? To będzie coś od zera do F. Tu również będzie coś od zera do F. I wtedy można po prostu umieścić tych dwóch tam. PUBLICZNOŚCI: OK. PROFESOR: Tak. OK. Więc chłopaki chcą spróbować następny wtedy? Zero, jeden, zero on, jednego, zero, jeden zero. Dam wam jak 30 sekund, ponieważ zapewne nie wiedział, sztuczka się, jak to zrobić wcześniej. OK, ktoś chce uzyskać to można sobie strzelać? 0X5A. PROFESOR 0X5A. 5a. Dobry. Więc to tutaj, by być: chcesz nam powiedzieć, jak masz to? Po pierwsze, jak nie masz pięć? PUBLICZNOŚCI: Ponieważ zera, jeden, zero, jeden jest pięć. PROFESOR: Czy wszyscy rozumieją Dlatego zero, jeden, zero, jeden pięć? Masz je tutaj. Nie masz nic w dwa do pierwszej. W dwóch do drugiego, ci mieć jeden, który jest cztery. Więc dodać Four Plus jeden, masz pięć. Każdy dobry? OK. A potem, co to było i dlaczego? Jaki numer robi odpowiadać? PUBLICZNOŚCI: 10. PROFESOR: A co to na podstawie dwóch? PUBLICZNOŚCI: [niesłyszalne] PROFESOR: Dokładnie. Więc ta druga wartość tutaj byłoby 0X5A. Wszyscy dobrze na jak konwertować? To dużo prostsze, niż myślisz, że jest. Chcę tylko, aby upewnić się, wiesz, pomocne wskazówki i sztuczki dla, jak to zrobić. PUBLICZNOŚCI: Dlaczego po prostu podzielić jest w środku takiego? Wystarczy być tak, OK, idę tylko dbają o tych pierwszych [niesłyszalne]? PROFESOR Bo to rzeczywiście sposób wartości szesnastkowe są reprezentowane. 0X, że faktycznie oznacza nic innego, jak mówi ci że jest to liczba szesnastkowa. A to zawsze oznacza pierwsze cztery cyfry. A to zawsze oznacza cztery ostatnie cyfry. I tak te dwie cyfry po prostu odpowiadać różnym bitów. PUBLICZNOŚCI: Więc będziemy always-- PROFESOR: Jesteś zawsze dostanie osiem bitów wartości. PUBLICZNOŚCI: Czy to jest po prostu lubię rzeczy tutaj lub, że rzeczy na całym? PROFESOR: To tylko rzecz w komputerach, yep. PUBLICZNOŚCI: OK. Niesamowite. PROFESOR także, więc w tym przykładzie mamy przeliczone z binarnego na dziesiętny, i od dwójkowego na szesnastkowy. Chcecie, aby upewnić się, że również ćwiczyć będzie na odwrót. Więc jeśli dałem ci 0xFF, można wyciągnąć, że w pliku binarnego, prawda? Konwertowanie F na binarny, który jest jeden, jedna, jeden, konwersji F na binarny, który jest jeden, jeden, jeden, jeden. Więc możemy poprosić zrobić na odwrót. Więc dziesiętny na binarny, lub szesnastkowy na binarny. Więc chcesz, aby trzeba wiedzieć, w obie strony. Będziemy prawdopodobnie zadać ci Połączenie tych dwóch. Tak, masz pytanie? Mogę see-- jesteś dobry? PUBLICZNOŚCI: Tak. PROFESOR OK. Czy jestem dobra, aby usunąć ten? Wielki. W porządku, więc odpowiedzi są tutaj, jeśli ktoś jest ciekawa później i się mylić. OK. PUBLICZNOŚCI: Czy to ważne, jeśli założymy nasze listy w stolicy lub małymi literami? PROFESOR: To nie, ponieważ w systemie szesnastkowym, zgodnie z konwencją, Wszystkie znaki są wielkie litery. Więc od A do F są będzie wielkie. Jeśli umieścisz małe litery a, nie wiem, jeśli chcemy koniecznie zaznaczyć to źle. Ale teoretycznie, to nie jest technicznie jak powinniśmy go mieć. Tak więc wszystkie one powinny być wielkie. Tak, dobre pytanie. OK. Drugie pytanie. Rozważmy ten piękny program, tutaj. Zadam pytanie, Przyjdę ten powrót. Tak więc, po pierwsze, co jest w środku standardu io.h to interesujące dla programu? Po drugie, co to nieważne oznacza w trójce? I po trzecie, co powoduje powrót do zera z Głównym, jak linia sześciu, na ogół oznacza? Jeśli chcecie napisać te w dół, ponieważ muszę wrócić do slajdu, tak więc można zobaczyć kod. Jest to przykład jak, może wyższy poziom, gdzie pytanie, prosimy jakie rzeczy oznacza w programie. Każdy dobry dla mnie wróć do slajdu? Ok fajnie. Więc dam wam jak może trzy minut, aby spojrzeć na ten jeden bardzo szybko. OK, więc ten jeden jest jak dość łatwe, koncepcyjnie. Czy ktoś chce mi powiedzieć, co jest Pierwszy wewnątrz przez hash tym nasz standardowy plik biblioteki io.h? Dlaczego potrzebujemy tej biblioteki zawarte w tym programie? Co tutaj mamy to potrzebne? Tak? PUBLICZNOŚCI: Czy to jest, gdy umieścić że printf? PROFESOR: Dokładnie. Więc printf, w dowolnym momencie brać dane od użytkownika i wydrukować coś na ekranie, to standardowe wejście, wyjście biblioteki. Pomyśl o tym, że way-- wejście, wyjście. Czy mam wyjście? Tak. Więc wiem, że zawsze będę się Potrzebuję biblioteki NORMALIZUJ i.o. Tak printf jest funkcją przez które musimy przejść i hashtag obejmują Standardowa biblioteka i.o. OK. Po drugie, co to nieważne oznacza? Mamy int main (void), co robi unieważnić tu na myśli na linii trzech? Tak, w plecy. PUBLICZNOŚCI: [niesłyszalne] PROFESOR: Dokładnie. Więc pamiętaj, nauczyliśmy począwszy od naszej pset że można rzeczywiście określić wiersza poleceń Argumenty, że program, który Ciebie Główną funkcją, trwa w was, użytkownik, nazwać. Jeśli mamy nieważne, to znaczy, że Ciebie może po prostu uruchomić program bezpośrednio bez żadnych argumentów wiersza poleceń. Każdy jasne, że? OK. I wreszcie dlaczego męczyć się robi ten powrót zera tutaj? Dlaczego mamy nawet int main? Dlaczego nie możemy po prostu void main pustkę? Tak? PUBLICZNOŚCI: Tak, tak, że możemy mieć pewność, że program jest wychodzenia z powodzeniem, jak przeciwny, jeżeli został zaliczony. A my wiemy, że to jest inny rodzaj błędu. PROFESOR: Tak, dokładnie. To jest po prostu bardzo konwencjonalne rzeczy, które robimy, jest to, że tylko na koniec Twój program, tak aby upewnić się, że swojej głównej funkcji działa poprawnie, zawsze chcemy zrobić zerową rentowność. Mimo, że może niekoniecznie nie widzisz, że drukowane w dowolnym miejscu. Bo jak programistów, wiesz, jeśli masz wiele różnych linii kodu i nie wiesz, gdzie są one nie tak, i jeśli błąd się dzieje chcesz upewnij się, że masz ten błąd. I tak zazwyczaj, jeśli coś pójdzie nie tak będziemy mieli powrót jednego tylko aby upewnić się, wiemy, że to jest. Więc jeśli widzisz powrót zero, które zwykle oznacza, że ​​program jest wykonane pomyślnie. Dobry? Chłodny. OK, drugi program tutaj. Uważają, że. A jeśli faceci zobaczyć float, chłopaki mogą prawdopodobnie mieć dobry pomysł, co Mam zamiar poprosić. Więc kiedy ten program wykonuje, jak widać, Oświadczam pływaka w mojej głównej funkcji. Jestem nazywając to "odpowiedź", a ja ustawienie że równa jeden podzielone przez 10. Jestem drukowania, do jednego miejsca po przecinku, że pływak. A potem wracam do zera. Więc przy realizacji programu, że powrót do chciwy teraz Ten program wypisuje 0.0. Jak wszyscy wiemy, mam nadzieję, że wszyscy wiem, jeden podzielone przez 10 nie jest 0,00, to 0,1. Ale dlaczego ten program myśli że 1 dzieli się przez 10 odbitek do 0,1 innym niż 0,1? Dam wam chłopaki może jak 30 sekundy po prostu szybko o tym myśleć i wrócę do programu. OK. Każdy, kto chce dać mu szansę? W trzech zdaniach lub mniej, bo zazwyczaj jesteśmy zamierza ograniczyć wszystkie odpowiedzi do trzech zdaniach lub mniej więc nie tylko regurgitate losowe rzeczy na quiz. Tak, zrobić zdjęcie. PUBLICZNOŚCI: Więc myślę, że jest to coś o nazwie, jak, [niesłyszalne] Tak, że może być, na przykład, nie może być, na przykład, 0,09, że tam, gdzie można wydrukować pierwszy cyfrowy, to byłoby na 0.0? PROFESOR: Zamknij, nie całkiem. Christabell? PUBLICZNOŚCI: Jesteś podzielenie jednego i 10, i są one zarówno liczby całkowite. I tak droga, że ​​to będzie przechowywanie jest liczbą całkowitą. I tak najbliższej liczby całkowitej byłoby 0.0. I tak to jest 0,1. PROFESOR: Tak, to jest naprawdę dobry. To jest prawidłowa odpowiedź. Więc jest to bardzo mylące Koncepcja dla wielu dzieci. A ja naprawdę chcę, aby upewnić się, że ten jest wzmocniony w głowie każdego z nas. Więc to, co nazywamy pływające Punkt nieścisłości, gdy powodem, dlaczego wiele z programów w chciwi Początkowo nie było, bo pracują zapomniałeś oddać zmiennej. Więc co Christabell powiedział była całkowicie poprawne. Pływak jest z natury nieprecyzyjne. Ponieważ w komputerze, w prawo, mamy skończoną ilość bitów pamięci możemy użyć do reprezentowania liczb. Tak więc, na przykład, to CS50 ID jest-- Myślę, że to komputer 64-bitowy. Pływak może być reprezentowany tylko przez skończoną ilość tych bitów. I tak 0,1 z nieskończoną zer, To było 0,1 jest, prawda? Ale nie możemy właściwie przechowywać ta liczba w naszym komputerze. Po prostu nie mają mało pamięci, aby to zrobić. I tak najbliższym przybliżeniem co jest przechowywane w pamięci w rzeczywistości coś 0,000 czegoś, coś, coś, coś. Która, gdy obcina Opisz zaokrągla się do 0,0. A więc w tym przykładzie tylko jeden które wykazuje wiele problemów mamy gdy jesteśmy starając się niewłaściwie zrobić matematyki bez rzucania jako inny liczby całkowitej. Więc po prostu uważać na tego happeningu. Na quizy, jeśli daje blok kodu i to jak, co wypisuje na końcu? A jeśli to jakiś przypadkowy wartość, którą Powinniście wiedzieć, dlaczego tak się dzieje. Tak? PUBLICZNOŚCI: Obetnij się pozbyć wszystko po pewnym momencie? [NIESŁYSZALNY] PROFESOR: Tak, tak, rzeczywiście jest to bardzo zły przykład, bo 0,100, co właściwie by obciąć do 0,1. Ale jeśli było uruchomić it-- ja nie Pamiętam, bo w zeszłym roku, że prowadził ją w innym programie. Biegli go w coś, co nazywa CS50 Urządzenie, które różni się od identyfikatora. To był system 32-bitowy, jak sądzę. I tak były różne numery. Ale w zasadzie, po prostu wiem, że cała koncepcja obcinania i jak to po prostu odcina od rzeczy. I tak, jeśli to rounds-- PUBLICZNOŚCI: Bez zaokrąglenia. PROFESOR: Dokładnie. Tak. Chłodny. Witam, w plecy. Jesteśmy po prostu się na niektóre PYTANIA Quiz. W porządku. Więc rozważyć inny program tutaj. Mam zamiar dać ci faceci kilka minut do zapoznania się nad tym. To jest coś, co było dla bardzo niedawno, że myślę, że wiał dużo z was umysły facetów jest. Ale będziemy rozmawiać przez to ponownie tylko Aby upewnić się, rozumiem tego do końca. OK. OK. Każdy, kto potrzebuje więcej czasu na przeczytać tego kodu? OK. Więc wydaje mi się, że w tym programie jestem tworząc dwa ciągi używając getString. Jeden zwane s oraz jeden o nazwie t. A jeśli są one równe wynosi wzajemnie powinien wydrukować "You wpisz to samo. " Ale elsewise, to wydrukować, "You wpisane różne rzeczy ", prawda? Wydaje się bardzo, bardzo proste. Ale jednak, gdybym rzeczywiście spróbować napisać program, wydaje się, że nawet wtedy, gdy wejściowe dokładnie te same struny, nadal drukuje, "You wpisane różne rzeczy! " Czy ktoś chce wziąć Strzał, dlaczego ten program zawsze odpowiada, że ​​wejścia różnią się, nawet kiedy same słowa są takie same? Więc gdybym input-- David miłość używać przykład jak mamy, prawda? Małe litery M-O-M do S, T równa małą M-O-M. Jeśli wpadłem to poprzez że kod, dlaczego to wydrukować "wpisane różne rzeczy?" Czy ktoś potrzebuje więcej czas, aby pomyśleć o tym? OK, myślę, że jesteśmy dobrzy. Tak? PUBLICZNOŚCI: OK, więc jest to coś, o gdzie jest przechowywany w pamięci, prawda? PROFESOR: Tak. PUBLICZNOŚCI: Gdzie to jest jak, jeśli to ciąg s jest przechowywany w pamięci spot-- Jestem wynalezienie this-- wynosi zero. PROFESOR: Jasne. PUBLICZNOŚCI: A ciąg t przechowuje się w miejscu pamięci jak, 167, a następnie zera nie równa 167. PROFESOR: Dokładnie. OK, więc pamiętam to niesamowite Objawienie wyjaśniliśmy was w ubiegłym tygodniu, że struny naprawdę nie istnieje? Gdy tworzymy coś, co nazywa Ciąg jesteśmy w rzeczywistości, tworząc coś, co nazywa gwiazda char. Które wszystkim jest to wskaźnik do ciąg lub tablicy znaków. A więc w tym przykładzie, jeśli były do ​​wejścia M-O-M drodze że mój komputer będzie przechowywać to w obrębie pamięci backslashem zera, prawda? Te cztery litery, znaki, będą przechowywane gdzieś. A potem te cztery znaków, backslash zero, są przechowywane gdzie indziej, prawda? Nie mam pojęcia, gdzie adresy to, że są gdzieś w moim komputerze. Ale ja nie wiem dokładnie, gdzie się znajdują. Kiedy utworzyć ciąg s, wszystko, co jest naprawdę jest wskaźnikiem do zacząć od tego ciągu. A gdy tworzę ten t wartość, wszystko, co jest wskaźnikiem do tutaj. I tak, gdy starasz zrównywanie i sprawdzić, aby sprawdzić, czy s jest równe równa t, komputer jest tak naprawdę powrót do masz adres tego m i adres tego m. I dlatego, że są dwa oddzielne kawałki danych które są przechowywane w dwóch różnych Adresy w komputerze, komputer nigdy nie będzie rozpoznaje je jako takie same. Czy ktoś chce daje szansę na to, co musiałby zrobić, jeśli chcemy poprawić to i mają prawidłową uruchomiony program w zamian? Pomyśl o tym przez kilka sekund. Czego potrzebujemy, aby zmienić uzyskać ten funkcjonowania programu sposób, w jaki ma to działać? Tak, chcę wziąć ukłucie na to? PUBLICZNOŚCI: Czy możemy spróbować dereference wskaźnik i sprawdzić przez tablicę? PROFESOR: To jeden ze sposobów, aby to zrobić. Więc, jak masz na imię jeszcze raz? Przykro mi, przypominają mi. Zee: Zee. PROFESOR: Tak, tak, to, co Zee Sugeruje absolutnie działa. Dobrze? Moglibyśmy wyłuskanie wskaźnika i rzeczywiście iść i dostęp Dane fizyczne wewnątrz tutaj. A może po prostu porównać cały ekran. Można powiedzieć, OK, wskaźnik, daj mi co jest w środku tutaj. To zwróci m. I chciałbym powiedzieć, wskaźnik, daj mi co jest w środku tutaj. Zwraca m. Czy te spotkanie? Tak. Następnie przejdziemy. Wciąż sprawdzenie całą dwa struny aż do góry do końca i sprawdzić, czy te są równe, jeśli wszystkie wartości są równe. A jeśli wszystkie wartości są równe, to wiemy, słowa są prawdziwe. Absolutnie, to w jaki sposób to zrobić? Czy ktoś mylić na cokolwiek z tego? Cała koncepcja tego, jak struny są naprawdę tylko wskaźniki, i jak tak naprawdę nie istnieje? I dlaczego mamy błędy jak sposób, w jaki ją dostać? Bo gwarantuję ci faceci, wskaźniki i przydział ciąg i pamięć będą pochodzić. Tak? PUBLICZNOŚCI: [niesłyszalne] dereference to, po prostu umieścić gwiazdę [niesłyszalne] PROFESOR: Racja. Więc derererence środek do pointer aby przejść do tego adresu wskaźnika i uzyskania danych, wartość istnieje. A sposobem na to jest gwiazda wskaźnik. Nie należy mylić tego. PUBLICZNOŚCI: [niesłyszalne]. PROFESOR: Tak. PUBLICZNOŚCI: Więc może po prostu napisać jeśli gwiazdy s równe równi gwiazda t. PROFESOR: No, nie. Nie. PUBLICZNOŚCI: To nie jest wystarczająco dobre, prawda? PROFESOR: Nie, bo jesteś tylko sprawdzanie pierwszą literę. Prawdopodobnie będzie trzeba jakąś pętlę, że iteracji każdy znaków w obu ciągów. Tak. Więc jeśli chcesz po prostu sprawdzić, jeśli zaczęło się to samo, możesz zrobić, jeśli, gwiazdy s jest równa Star T. Wtedy wiesz, że przynajmniej Zaczęło się od tego samego znaku. Tak? PUBLICZNOŚCI: Tak droga robisz, że będzie jak wbudowany do pętli lub wskaźnik? PROFESOR: Tak. Dość dużo tylko do pętli. Pamiętaj, Dawid w klasie wspomniano wolny lukrem składniowym? I miał to bardzo mylące rzeczą Star T plus jeden, gdzie byłoby zintegrowanie przez i przesuń wskaźnik? Łatwiejszy sposób prowadzenia jest to po prostu t i. Więc to tylko tablicą. Sposób, że masz do Pętla, która biegła od zera do i, gdzie i ma długość z ciąg, można po prostu Napisać, że zamiast robi Cała wskaźnik, rzeczą odniesienia. Więc te rzeczy są dokładnie równowartość w komputerze. Wy prawdopodobnie nie będzie musisz wiedzieć, że ale dobrze jest po prostu rodzaj mają z tyłu swój umysł. Wystarczy wiedzieć, że komputer rozpoznaje różne bloki kodu tak samo. Bo to jest po prostu znacznie bardziej użytkownik przyjazny dla nas, aby przedstawić to jak jest tablica. To jest po prostu łatwiejsze. PUBLICZNOŚCI: Więc używać strlen lubić, get-- PROFESOR: Tak. PUBLICZNOŚCI: OK. PROFESOR: Mógłbyś używać strlen lub, jeśli nie mają strlen można po prostu zrobić się aż trafisz ukośnik zerowe dla obu stron. Albo będzie działać. Tak. PUBLICZNOŚCI: Więc jest to, aby każdy dereference pojedynczy znak, jakbyśmy byli w rzeczywistości pisząc ten kod, możemy może po prostu zrobić t wsporniki I jak z gwiazdą przed nim? PROFESOR: Tak, równa jest równa s Uchwyt ja, a potem ruszać I w dół, aż dojdziesz do końca. Tak, to co byś zrobił. A ja rzeczywiście następny przykład, gdy w rzeczywistości Napisać strlen więc chłopaki będą rodzajem z dostać się bawić z nim trochę. Tak jest z każdym, jasne tylko pamięci, smyczki, wskaźniki, adresy jakości? Niektóre koncepcje wyższego poziomu, które można będzie na pewno muszą wiedzieć, na quizu jutro. W porządku. Dobry. Tak. OK, więc jedna rzecz, że będziemy też zapytać Ci, jak to zrobić, co roku w quizie, jest, Przypuszczam, że zapomniałeś (co wydaje się zapominać robić raz w roku) w którym plik nagłówka strlen jest zadeklarowana. A więc musimy go przepisać siebie. Oto lista wytycznych że możemy przedstawić Państwu faceci, gdy pojawi się założyć, że y ciąg nie będzie null. Możesz założyć, że ów będzie zakończona lewym ukośnikiem zera. Więc wiesz, że to, co to się kończy. I, na przykład, że długość cześć będzie pięć. Tak więc można przyjąć, że cześć będzie pięć, H-E-L-L-O. Nie musisz zakładać, że backside braku kont dla długości. To ostatnia rzecz, tu nie martwić się o całkowitą przepełnienia. Czy ktoś pamięta co jest liczbą całkowitą przepełnienia? PUBLICZNOŚCI: wykracza poza Długość [niesłyszalne]. PROFESOR: Tak, można wyjaśnić nieco, co to oznacza? PUBLICZNOŚCI: Tak, myślę, że wraca na przykład obcinanie wcześniej. Ale jeśli masz tylko tyle numerów które wykraczają poza ilość bitów że rzeczywiście można przypisać że to po prostu rodzaj odcięty. PROFESOR: Tak, tak, na typowy komputer, ile bitów mamy? PUBLICZNOŚCI: 32? PROFESOR: Tak, 32, tuż. A więc to, co cztery miliard, dwa miliardy? Cztery miliardy, do czterech miliardów całkowite dodatnie, prawda? Dwa miliardy negatywne, dwa miliardy pozytywne, zależy od tego, jak chcesz to zrobić. I tak w zasadzie możemy mieć wystarczającej liczby całkowite, które mogą pójść w górę do dwóch do 31 minus 1, prawda? Bo raz trafiliśmy dwa do 32-giej, my nie ma tego dużo pamięci w naszym komputerze. A więc, teoretycznie, ja może pochodzić z wielu że jest, jak, dwa do 46.. Jest to liczba ogromna dupa, ale teoretycznie można. I tak jest w przypadku przepełnienia całkowita próba stworzyć liczbę całkowitą, która wykracza poza to, co komputer jest w stanie przechowywać. I tak wy dla ten przykład nie mają martwić się o nas dając giganta ciąg znaków, który jest dwa do 32. znaków długi. To byłoby naprawdę oznacza. Dobrze, więc ja tylko da wy struktury podłoża tego. Masz zamiar stworzyć Funkcja o nazwie int strlen gdzie przepustkę, gwiazda znak lub ciąg znaków, wskaźnik do łańcucha nazywane s. Wszystko w porządku, każdy skopiować że w dół. Chłodny. Oops-- inny sposób. Więc to jest trochę jak trudniejszy kawałek problemu, więc dam wam może pięć do Sześć minut do rodzaju burzy mózgów i pisać tej funkcji na zewnątrz. PUBLICZNOŚCI: Nie Konto dla [niesłyszalne], nie musimy korzystać z całkowitą? PROFESOR: Nie, nie. Dam ci faceci podpowiedź. Pętli while może być tutaj bardzo przydatne. Tak. Oto słodycze. Cukierki będą również dostępne quizu, myślę. Więc chłopaki będą wszystkie słodzone się jutro. Czy ja-- masz go. PUBLICZNOŚCI: OK. PROFESOR: Tak. Być może 30 sekund lub tak. W porządku, jeśli jesteś nie zrobił, nie ma obaw. Będziemy poruszać się przez to razem. OK. Więc mam zamiar tylko Layout Podstawowa struktura tej funkcji tutaj. Int strlen. Po pierwsze, nie każdy chce powiedzieć mi, co to int oznacza? Musimy mieć w tej funkcji. PUBLICZNOŚCI: strlen [niesłyszalne]. PROFESOR: Dokładnie. Więc cokolwiek się dzieje tutaj, musimy zwrócić liczbę całkowitą. I tak jak określono w Spec, chcemy return-- Idź do niego facetów, po prostu wracamy. Wszystko jest dobrze. Jedz wszystko tak nie mam aby zabrać ją z powrotem, faktycznie. Int prostu oznacza, że ​​jesteś będzie powrót liczbę całkowitą. Co to jest znak gwiazdki s? Co to znaczy? PUBLICZNOŚCI: Jak, co jest wejście w. PROFESOR: Dokładnie. A co jest niemal samo, jak gwiazdy char? PUBLICZNOŚCI: String? PROFESOR: Dokładnie. Więc robimy to daje ten wskaźnik do łańcucha. OK. Chłodny. Nie należy również zapominać, gdy zapomnimy dać te wsporniki, nie zapomnij, aby to zrobić sam. Bo teoretycznie, kod jest nieprawidłowe, jeśli zapomnisz je pisać. Tylko zawsze zwracać uwagę. Podobne, małe rzeczy że nie zauważysz gdy jesteś programowania na komputerze przenośnym, bo twój laptop nie jest dla Ciebie? Nie zapomnij, kiedy piszesz ręcznie. Tak? PUBLICZNOŚCI: Ale jak błędna? Jak, nie mamy całego problemu złego? PROFESOR: Nie, nie. Nie martw się. To rzeczywiście teoretycznie możliwe aby uzyskać maksymalną liczbę punktów na pytanie nawet jeśli kod będzie nigdy nie zabraknie w prawdziwym życiu. Proponuję nie próbuj aby tak się stało. Na przykład, jak gdyby wszystko to tutaj ma rację, ale zapomnieć dwukropek lub nawias, Twój kod nie będzie właściwie działać. Ale możemy być miłosierni. Tak? PUBLICZNOŚCI: Czy trzeba wypowiedzieć się na temat naszego pisma? PROFESOR: Nie, nie, nie martwi się o to. Nie komentując. Styl powinien być dobry. Jak, nie smush wszystko na jednej linii. My nie będzie zadowolony z wami, jeśli to zrobisz. Czy ktoś chce dał mi pierwszą linię? Wskazówkę, że to bardzo łatwe. Tak? PUBLICZNOŚCI: Int, n równa się zero. Wystarczy ustawić licznik. PROFESOR Dlatego chcemy niektóre rodzaj licznika, prawda? Idę go nazwać "liczyć" ze względu na czytelność. Co chcemy aby ustawić go równa? PUBLICZNOŚCI: Zero. PROFESOR: Tak. Średnik. Jest również bardzo dziwne średniki rysowania. Wystarczy ćwiczyć robić. Dlatego chcemy, aby najpierw licznik typu int. Ponieważ chcemy, aby policzyć, jak wiele znaków lub liter w tym ciągu, prawda? Bardzo łatwe pierwszy krok. OK, może trochę bardziej skomplikowane teraz, jak będziemy to robić? Czy ktoś chce daj mi wiersz kodu który może być w stanie pomóc pętli po co to jest? Tak, odważna dusza w plecy? PUBLICZNOŚCI: OK, więc gdy punkt gwiazdki, Yeah, gwiazda s, nie jest równa zeru, to coś zrobić? PROFESOR: To jest bardzo, bardzo blisko. Naprawdę blisko. Więc mam zamiar zająć dwie rzeczy z tym. Przede wszystkim, to nie jest dokładnie zero. Co to jest? To terminator null, który jest odwrotny ukośnik zero. Tak więc są one różne w warunki jak są one przechowywane. Więc jesteś naprawdę blisko. A po drugie, nie chcemy po prostu przesuń wskaźnik. Chcemy, aby faktycznie Dostęp do wartości, prawda? I tak, w jaki sposób to zrobić? Bardzo łatwe. Nie myśl o wskazówki, nie myśl o wspomnieniach. Wróć do tygodnia dwóch tego kursu. PUBLICZNOŚCI: [niesłyszalne]. PROFESOR dzień, pamiętasz? Jakie struny? Jak są one przechowywane w pamięci? PUBLICZNOŚCI: Oni podniósł. PROFESOR Są one hodowane. Więc jak mamy dostęp każda postać w środku? PUBLICZNOŚCI: [niesłyszalne]. PROFESOR: Dokładnie. Więc while-- co wnika tutaj? S z - PUBLICZNOŚCI: I. PROFESOR: Och, ja nie istnieje, prawda? PUBLICZNOŚCI: Och, liczyć? PROFESOR: Możemy tylko używać liczyć, nie możemy? PUBLICZNOŚCI: Przykro mi, ale nazywa się I. PROFESOR: Tak, to wszystko jest dobre. Mamy zmienną tutaj to już zadeklarowana jako naszego licznika. Więc dlaczego nie możemy po prostu użyć, że Do przemieszczania się po pętli while? Czy to ma sens? Tak więc, podczas gdy ów z count-- czy ktoś chce dać mi, co się dzieje po tutaj? PUBLICZNOŚCI: To nie równa. PROFESOR: Nie jest równe, prawda? To huk jest równy, Wykrzyknik równa, co faceci chcą Nazywamy to nie equal-- PUBLICZNOŚCI: [niesłyszalne]. PROFESOR: Tak. Pamiętaj apostrof jest dla char, cudzysłowy są na sznurku. Należy uważać, aby podczas korzystania z nich. Więc kiedy patrzymy przez tablica, ostatni znak, wiemy, że nie chcemy to być odwrotny ukośnik zero. Tak więc, podczas gdy. Nie jesteśmy na końcu łańcucha. Co chcemy zrobić w środku? PUBLICZNOŚCI: Chcemy, aby dodać do Licznik więc liczy Plus Plus? PROFESOR: Dokładnie. Więc tutaj mamy zamiar zrobić liczyć, liczyć oraz plusem. Brakuje jeszcze jedną linię. Jesteśmy prawie na miejscu. Co my zapominając zrobić? PUBLICZNOŚCI: Wracając do zera? PROFESOR: Chcesz wrócić do zera? PUBLICZNOŚCI: Nie, wracając do strlen. Czekać. PROFESOR: Co jest przechowywane w? PUBLICZNOŚCI: hrabia. Liczyć. PROFESOR: Dokładnie. Więc będziemy liczyć powrócić. Bo to, co jesteśmy tu robisz ultimately-- mamy zmienną licznika, który jest zamierza zwiększyć za pośrednictwem naszego łańcucha. Mamy zamiar jechać dalej, utrzymać dzieje, dookoła w tej pętli. I choć nie jesteśmy na końcu tego Łańcuch, który jest terminator null. I za każdym razem idziemy przez to, dodajemy do naszego licznika. I jedziemy dalej wzdłuż w tej tablicy. I na koniec, kiedy już hit NUL, wiemy, oh, możemy przerwa, powrót liczyć. Mamy strlen. Czy wszyscy się jak ten został wdrożony? Podczas loops-- Wiem, że nie mają zrobić zbyt wiele z nich, ale są zazwyczaj bardzo, bardzo przydatne, jeśli nie wiem co masz zatrzymania Warunkiem niekoniecznie musi być. Pytanie? PUBLICZNOŚCI: możemy napisać pusty pod warunkiem, podczas gdy? PROFESOR ile? Tak, więc w tym problemu miałem cię ludzie zakładają, że ów nie będzie null. Bo pamiętam, teoretycznie, gdybym dał ci wskaźnik, który był zbyt duży, pamięci, to daje null, prawda? To właśnie operacyjny System zrobi. Więc jeśli nie trzeba by założyć, s będzie null, trzeba sprawdzić. Więc tu, byś zrobił, gdyby ów równa jest równa null, powrót jednego. Coś takiego. PUBLICZNOŚCI: [niesłyszalne] do zera. PROFESOR: OK, powiem Ci, dlaczego nie możemy tego zrobić. Bo pamiętam, w pamięci, w prawo, tutaj. Pójdziemy tutaj. Masz gigantyczne bloki pamięci wszystkich z sieci które przechowują różne wartości, prawda? A więc wszystko ciąg jest-- dla przykład, jeśli mamy wejście witam, byłoby H-E-L-L-O backslash zero, prawda? A potem, kto wie, jak przypadkowe rzeczy, które są tu po nim. My właściwie nie wiem, co tam jest. I tak, jeśli były do ​​zrobienia zamiast backslashem zerowej, null, to nie może być null. Bo to po prostu może oznaczać, niektóre losowe inne rzeczy które nie należą w ciąg. I tak droga, że ​​zawsze wiemy, że ciąg kończy się odwrotnym ukośnikiem zera. I tak, że zawsze jak my sprawdzić, na koniec łańcucha. Null, oznacza to wszystko, jeśli masz nieistniejące wskaźnik przede wszystkim lub jeśli twoja pamięć jest tak duża, że nie możesz go zwrócić, to byłoby puste. Więc być bardzo ostrożnym przy różnicowaniu różnica wartości null i backslash zero. Tak. Każdy OK z tym? OK. Miałem więc chłopaki napisać strlen. Realnie możemy również poprosić piszesz z A do I należy pamiętać, że "Atwoa" lub cokolwiek chcecie to nazwać? Ta funkcja w Vigenère i Cezara, które konwertuje wartość ASCII na liczbę całkowitą? To także ma pochodzić na ostatnie konkursy funkcji prosiliśmy was napisać. Prawie żadnej funkcji że już używany i jest Bardzo łatwo napisać samemu, Czujniki jak jest niższa, jest wyższa, aby obniżyć do cholewki. Funkcje, które będą przekształcały Łańcuch z małych liter na wielkie litery. Wszyscy wiemy, jak to zrobić, prawda? To całkiem proste. Po prostu chcę, aby upewnić się, że can-- to ten sam proces myślowy. Po prostu iterację i kolei rzeczy. Albo liczyć lub gdy włączeniu rzeczy inaczej. Chciałbym suggest-- I Nie wiem, czy będziemy zapytać zapamiętać co kapitałowych, lub Z kapitału lub małe litery A lub małe z są w ASCII, ale chciałbym zaproponować chyba pisać, że w przypadku my robimy. Tak macie odniesienie. Jak wielkie litery A jest, co, 197? A potem małe jest jak 50 coś. 65, tak, proszę. Więc po prostu bardzo dużo wiedzieć, Różnica między nimi jest 32. To bardzo ważne. Tak. Jestem dobry w tej sprawie? OK. PUBLICZNOŚCI: Moglibyśmy teoretycznie napisać z nich w dół, a także na naszej little-- PROFESOR się teoretycznie może po prostu skopiować funkcję dół. To prawda. PUBLICZNOŚCI: Nie [niesłyszalne]. Profesor: Macie arkusz. Macie arkusz notatki. Możesz go wpisać. Można go napisać. Możesz robić, co chcesz z nim. Tak. Więc teoretycznie, jeśli chcesz, idź. PUBLICZNOŚCI: [niesłyszalne] ale tak naprawdę nie koniecznie trzeba pamiętać wartość, możemy po prostu użyć do górnej lub niższe funkcji, prawda? PROFESOR: Tak. Ale jeśli daliśmy ci pytanie które mówi, napisz do górnej, wtedy musiałby napisać. Więc chłopaki można zakładać, że Ciebie faceci mają dostęp do wszystkich funkcji, ale jeśli chcesz używać do górnej lub niższa, co masz również zrobić? PUBLICZNOŚCI: [niesłyszalne] używać CS50 [niesłyszalne] PROFESOR Czy CS50.h? Należy uważać, aby nie. Tak więc, aby górne, na mniejsze, jest wyższa jest niższa funkcje, które wymagają manipulacji ciąg są wszystkie w obu ASCII lub w bibliotece matematycznej lub w bibliotece smyczkowy. Więc jeśli faceci używać tych funkcje, należy uważać, aby pamiętać, uwzględnienie tego nagłówka. Więc może też coś cię chcesz dołączyć do arkusza, jakie są nagłówek? Jakie są biblioteki używałeś? Jakie funkcje są wewnątrz tych bibliotek? To ważne. Tak? PUBLICZNOŚCI: Moglibyśmy Policjant na zewnątrz i zrobić hashtag przez absolutnie każda litera, jaką kiedykolwiek widać jak na wszystkie pytania? PROFESOR: Można było. Nie wiem, jak szczęśliwy będziemy mieć do stopnia że quizu kiedy każdy kawałek kodu jest dwa razy tak długo jak to musi być. Nie wiem, moglibyśmy zdjąć punkty za styl. Ale teoretycznie swojej Kod byłoby w porządku. Wy mogli policjanta na zewnątrz i po prostu to wszystko. To też dobrze, tak. PUBLICZNOŚCI: [niesłyszalne]. PROFESOR: Tak. Proponuję nie robić, że choć. Tak. PUBLICZNOŚCI: Spoko. PROFESOR: Dobre pytanie. PUBLICZNOŚCI: Tak, najgorszy scenariusz. PROFESOR: W najgorszym przypadku. Jeśli całkowicie zapomnieć, może to zrobić. Tak. Tak, kod jest właśnie tam. Kiedyś n zamiast liczyć, ale ci wiesz, co płynie swoim statkiem. PUBLICZNOŚCI: Czekaj, więc nie trzeba Hashtag to dlatego, że jesteśmy począwszy od int? PROFESOR: Tak, ja po prostu założyć, że poproszono nas napisać funkcję. Jeśli chcesz być bezpieczne, prawdopodobnie mógłby ją tam umieścić. Ale ja po prostu nie przeszkadzało, tak. Ja nawet nie wiem, czy Ciebie potrzebuje biblioteki do tego. Ponieważ nie jesteś naprawdę drukowania z niczego, ani nic, prawda? Tak, nie wiem, czy trzeba bibliotekę. OK. Jest to również nieco bardziej wraz linie manipulacji pamięci. Taki trochę skomplikowane. Pomyśl o tym. Masz funkcję o nazwie func. Mogłem nazwał go cokolwiek, ale ja wybieram nazwać func. Mam go ponad moim głównym. Pamiętaj, że chcesz mieć funkcja po głównym, chcesz się upewnić, że to prototyp góry. Jednak w tym przypadku tak krótki że czułem, że mogłem po prostu umieścić go na szczycie głównej. Nie trzeba mieć prototyp, bo to już napisane powyżej. Więc wszystko robię w moim głównym funkcji tworzy całkowitą x jest równa 10. Dzwonię do mojej funkcji FUNC a następnie drukować coś. A następnie, że rzeczywiście co func robi. Chcecie przemyśleć to. Bo to jest trochę skomplikowane. Jest to bardzo, bardzo trudne, w rzeczywistości. Zastanów się, co to Program będzie wyprowadzanie. Dam ci faceci dwie minuty. Dobre rozmowy? PUBLICZNOŚCI: Tak. PROFESOR: Tak. W porządku, więc jest to trudne powodu. I dlatego chciałem przynieść to uwagę wszystkich. Czy ktoś chce mi dać sugestia, próba? Co by to wydrukować? Całkowicie w porządku, jeśli jesteś w błędzie. Tak? PUBLICZNOŚCI: Myślę, że to 100 a następnie 10 na dwie oddzielne linie. PROFESOR I 10? Czy ktoś ma jakieś inne domysły? Tak? PUBLICZNOŚCI: Może tylko 10, ponieważ func nic nie wraca? PROFESOR: OK, więc mają liczbę domysły jeden Domyślam się, że numer dwa to po prostu będzie wydrukować 10. Czy ktoś ma jakieś inne domysły? OK. Warto więc przejść przez to, prawda? Zawsze, gdy masz kawałek kodu, nie tylko patrzeć na niego i być jak, ah, to jest tyle rzeczy! Jestem tak zdezorientowany! Jak, uspokoić się w dół. Po prostu wiem, że można po prostu patrzeć przez linię kodu po linii. To wszystko to jest. To jak czytanie książki. Więc z dowolnej funkcji, zawsze zaczynają się głównym. Więc będziemy zaczynają się int main pustkę, nawet programu już zaniedbany, prawda? Zaczynają się w głównym pustkę. Int x jest równa 10. Więc mam zamiar usunąć ten. Mam zamiar wyciągnąć pamięć tak Ciebie faceci mogą rodzaj zobaczyć co się dzieje. Pamiętaj, tu mamy stos? Tutaj mamy nasze kupie gdzieś tutaj. Stos rośnie, prawda? I w stos, masz funkcjonować zasilania, jak również wszystkie sieciowego zmiennych lokalnych. Więc tutaj, int x równa 10. W ramach naszej głównej funkcji jesteśmy tworząc zmienną x. Jesteśmy ustawienie, które wynosi 10. Tutaj masz trochę x, i jesteś ustawienie, które wynosi 10, w prawo, ciągu głównym. Każdy dobry? Funkcjonować. Więc teraz, w ramach naszego głównego Funkcja, że ​​dzwonisz funkcja pisaliśmy powyżej. Więc my teraz wprowadzić drugą funkcję. Mamy zamiar stworzyć inny zmienna int x równa 100. Co tu się dzieje na stosie? Co się dzieje, gdy nazywasz Funkcja, która tworzy nowe zmienne? Co dzieje się tutaj na stosie? PUBLICZNOŚCI: [niesłyszalne] pali na górze? PROFESOR: Tak. Więc faktycznie tworzy kopię. A to niby stosach na górze. Pomyśl z stack-- stos książek, stos wszystko. Pale na górze, najpierw w zeszłym się, trwać, pierwsze wyszło. Więc to będzie stworzyć x tutaj. Że będzie musiał wszystkie funcs zmienne. Wielki. Więc teraz mamy dwie różne x, że stanowią dwie bardzo różne rzeczy. Następnie jedziemy do wydrukowania z liczby całkowitej x. Warto więc wydrukować 100, prawda? Bo tutaj jest to 100. Więc to jest pierwsza rzecz, że to będzie wydrukować. Jak to funkcja zwraca nic, teraz, że funkcja, że ​​linia w głównym skończone. Wszyscy dobrze się ze mną do tej pory? Więc jesteśmy teraz przez dwa z trzy linie naszej głównej funkcji. Teraz jedziemy do trzeciej linii. Jedziemy do printf. Co to jest x ciągu głównym? Co oznacza, że ​​reprezentują? Jaką wartość ma x teraz? PUBLICZNOŚCI: 100. PROFESOR: To jest 100? PUBLICZNOŚCI: Jeszcze 10. PROFESOR: Jeszcze 10. Tak. Bo pamiętam, w ramach nasz func, x jest równa 100. Ale jeśli wrócimy z powrotem do naszej głównej funkcji, zmienna jest przechowywane w inne miejsce na naszej stosie. Więc teraz musimy wrócić do Głównym stos, zasilacz zmiennych lokalnych. I tu x jest równa 10. I tak mamy zamiar wydrukować 10. Więc była absolutną rację. Mamy zamiar mieć Wyjście 100 i 10. Tak? PUBLICZNOŚCI: Kiedy malloc, to, że jest to sterty lub stos, który jest [niesłyszalne]? PROFESOR: Kiedy malloc, bierzesz pamięci ze sterty i alokację. Tak, że nie trzeba zadzierać ze nic z tego. Sądzę więc, że większy wynos tutaj jest coś, co nazywa zakres. Dla tych z Was, którzy byli na sesja opinię w nocy, rozmawialiśmy o tym przez chwilę. Zakres określa, jak i gdy istnieją zmienne. Lub w co ramek nie istnieją zmienne. Dość dużo zasada ogólnie jest twój variables-- jeśli ich tworzenia wewnątrz kręcone braces-- istnieją tylko wewnątrz tych klamrach. Tak na przykład w naszym funkcji func, widzisz te dwie klamry. Jeśli tworzysz coś w jej wnętrzu, Szanse są robisz jest tworząc stos i przechowywania, które nie. Samo w głównym. To tylko przechowywany wewnątrz główne. Także chcesz być bardzo, bardzo ostrożny. Ponieważ zakres nadaje również Sam różnych przykładach. Tak więc na przykład dla Pętla, na int i jest równa 0. I jest mniejsza niż, nie wiem, 10. Ja plus plusem. I masz kodu wewnątrz niego, prawda? Skąd ta zmienna, I właściwie tylko istnieje? Tylko wewnątrz twój pętli. Więc założę wielu z was ma prawdopodobnie napotkał ten błąd, gdy robisz programów w swoich psets. Ilu z was próbowało wykorzystać I poza pętli for i miał błąd? Jak przypisań liczb całkowitych czy coś takiego? Powodem, dla którego tak się dzieje dlatego tutaj jesteś tworząc coś, że tylko istnieje w twój pętli. A jeśli spróbujesz go używać, i nie rzeczywiście istnieją poza nim. Więc w zasadzie komputer, mówiąc: nie wiem, co mówisz. Wiem tylko, że byłem tutaj, ale teraz już nie. Więc gdybym miał stworzyć dla pętli wewnątrz, prawda? I mam zamiar stworzyć kolejny, jak int j, i to zrobić cokolwiek. I masz kod wewnątrz od że pętla, tylko j istnieje tutaj. Ale istnieje również w i. I tak j istnieje tylko w ramach tej pętli, podczas gdy ja istnieje w całej sprawie. Każdy, jasne? To samo z instrukcji warunkowych jeśli chcesz stworzyć niczego. To samo z pętli natomiast jeśli chcesz stworzyć coś. To coś się bardzo, bardzo ostrożny. Więc to był naprawdę dobry problemem w Wyczuwam, że wykazała dwie rzeczy. Wykazano pierwsze, zakres. I wykazał również alokacji pamięci. Bo faceci powinni wiedzieć, że funkcje rosną w górę stosu. I że podczas rozmowy funkcje, tworzysz zasadniczo nowy stos pamięci. To bardzo różni się od jaka jest twoja pamięć sieci. Tak. Uff! Każdy OK na to? To było mylące. Bardzo dobre tematy przejść, bo pewnie masz dostanie niektóre trudne takie rzeczy w quizie. Tak. Chłodny. Powiem masz 100 na jednym Linia i 10 z drugiej strony. Tak, bardzo dobrze. OK, teraz chłopaki dostaną szansę być TAS. Otrzymasz odpowiedzi na wszystkie piękne e-maile, że czasami. Tak więc, drodzy Andi, widzę, myślę, że coś jest nie tak z moim kompilatora. Jestem pewien, że mój kod jest poprawny, ale wciąż otrzymuję błąd segmentacji za każdym razem uruchomić. Co się dzieje? Proszę o pomoc, dużo miłości. Jeśli dostaliście coś takiego że jak byś odpowiedział? Są to w rzeczywistości bardzo często pytania, które cię zapytać. Czy w przypadku, damy ci Scenariusz, damy nas najlepiej Domyślam się, co się dzieje. Każdy, kto ma ukłucie na to, co się dzieje? Tak? PUBLICZNOŚCI: Może dereferencjonowane null, coś takiego jak wskaźnik wskazuje na coś zerowej. PROFESOR: Tak, to by być Przykładem, kiedy to się stanie. Ale co jest tym większy obraz z tego, co tu się dzieje? PUBLICZNOŚCI: Czy starasz aby uzyskać dostęp do pamięci, że nie jesteś ma mieć dostęp? PROFESOR: Dokładnie. Więc myślę usterki seg, pozabilansowym limity, ograniczonego obszaru w pamięci że nie powinno być wzruszające. Więc dość dużo, gdy starasz do index-- jak na przykład już ogłoszony Tablica od zera do dziewięciu. Ale spróbować dotknąć tego 10th wartości, nie masz dostępu do tego. Ponieważ nie zadeklarował go. A więc komputer będzie przyjrzeć się, że będzie jak, uh oh, starasz się iść poza granice indeksu. Mam zamiar dać ci usterka segmentacji. Pomyśl, jak segmencie, prawda? Dodatkowy odcinek, usterka podczas próby naruszenia coś i nie powinno tam być. Segmentacja jest usterka w każdej chwili spróbuj dotknąć rzeczy że nie powinno być wzruszające. Tak częste przykłady indeks. Oczywiście, jeśli starasz dotykać, że był pusty, które również działa tak dobrze. Jeśli wskaźnik próbował dotykać rzeczy, które nie powinny dotykać, że może również pracować jako dobrze. Najczęściej będziesz Widać to w tablicy. Każdy dobry? PUBLICZNOŚCI: Więc jeśli chcesz aby uzyskać dostęp do 10-punkt i nie tylko granica dziewięciu czy coś. PROFESOR: Tak, dokładnie. Dość dużo. Chłodny. Szanowny Andi. Mamy więc te wspaniałe rzeczy nazywane rodzaju. Jeśli Merge sort-- jak my Piła w przykładzie, kiedy Dawid cały rzecz w class-- dlaczego, czy to o wiele szybciej niż każdy z innych rodzajów, dlaczego nawet trudu, wiedząc, każdy z innych rodzajów? Co to jest to pytanie bardzo prośbą? Co znajduje się w trzech word-- PUBLICZNOŚCI: Co to jest kompromis? PROFESOR: Dokładnie. Właśnie to pytanie pyta. Co to jest kompromis między Sortowanie przez scalanie wierszy innych rodzajów? PUBLICZNOŚCI: Bierze pamięć, prawda? PROFESOR: Czy wyjaśnić, że nieco więcej? Najpierw wyjaśnijmy sklep seryjnej. Jak Scalanie rodzaj pracy? PUBLICZNOŚCI: Tak to działa, dzieląc wszystko na pół a następnie wprowadzenie go razem i realokacji go w porządku, jak w każdym czasie scalania zestawów. PROFESOR: Dość dużo. Więc mogę zwrócić na to uwagę, ale to będzie zabrać mi pięć minut, aby wyciągnąć go na zewnątrz. Spójrz na slajdach sekcji gdzie pokryte sortowanie przez scalanie. Dokładnie. Więc sposób Merge prace sortowania jest to dzieli rzeczy na pół, a potem po prostu patrzy na Pierwsze wartości wszystkich z nich i sortuje tylko. Stale tworzy nowe tablice i stawia rzeczy bardziej i bardziej w porządku. I tak, podczas gdy to jest naprawdę, naprawdę szybko, bo it's-- wiesz, wyszukiwanie binarne jest n log n. Tworzysz tak wielu różne tablice, że jesteś przy użyciu dużej ilości pamięci. I tak, podczas gdy jest to szybsze, kompromis tutaj jest to, że używasz więcej pamięci. I tak, wskazówkę, sortuje i wyszukiwania zostały pokryte dużo więcej w tym roku niż miało to miejsce w poprzednich latach. Powinniście zobaczyć, że odpowiednio w quizie odzwierciedlenie. I na pewno spędzić czas będzie nad tym, co wszystkich innych rodzajów są, wyszukiwania, jak binarny, jak liniowa praca wyszukiwarek. Jak może pseudocode kodować te na zewnątrz. Jaki jest czas uruchomione? Coś w czasie uruchomionych jest bardzo łatwe do kopiowania w dół na arkuszu notatki, dobrze? To naprawdę trudne, gdy jesteś w środku testy i masz do tego dowiedzieć. Skopiuj go w dół. Gwarantuję Ci, że jesteś będzie trzeba wiedzieć. Jakie są kompromisy? Najgorszy przypadek, najlepsze scenariusze dla wszystkich z nich, bardzo poznać. Tak? PUBLICZNOŚCI: Czy musimy wiesz jak kod sortowanie przez scalanie? Podobnie jak, nie musimy pamiętam rekurencyjnych? PROFESOR I bardzo wątpię, po prostu bo to jak dość skomplikowane. Ale to nie może być niemożliwe, jeśli my prosimy użyć pseudocode go. Tak. Tak, OK, jeszcze jedno. To może pochodzić w Ci ostatni kawałek w nieco. Tak? Czy wszyscy słyszeć? OK, więc dość dużo przede wszystkim, jaki rodzaj programu będzie co daje moc takiego? Pamiętaj poprosiliśmy was poznać ten nowy typ debugowania narzędzie? Jaka była nazwa tego? Valgrind, tuż Był to program, w którym można nazwać, że mogłem śledzić wszystkie pamięci jesteś używając w swoim programie i się dzieje. Więc jeśli masz coś, jak, zdecydowanie stracił, 40 bajtów w jednym bloku. Prawdopodobnie nie jesteś pamiętając, aby go uwolnić. Bo jeśli używasz bajtów pamięci, co oznacza, że ​​masz dostęp do tej pamięci, ale nie udało się uwolnić. Więc chcesz, aby pamiętaj, że jesteś również za pomocą free-- że to function-- aby uwolnić wszystkich pamięci przesunięte przez malloc. Chłodny. Więc tym slajdzie, będę musiał go. Jest wszędzie w wielu wykłady w wielu slajdach sekcji. Naprawdę chcesz się upewnić, po prostu wiem wszystko. Albo w arkuszu notatki czy Ciebie chcesz go zapamiętać, nie krępuj się. To naprawdę, naprawdę, naprawdę ważne. Również bardzo dobry Pytanie, które możemy poprosić. Dlaczego wygląd Selection sort-- jest Wybór sort-- wszystkie czasy pracy są n do kwadratu. Niezależnie od tego, w jaki sposób lista przychodzi do Ci, jak, dlaczego więc jest wybór sort-- Dam ci faceci 30 Drugi o tym myśleć. Bo to trochę mylące. Wiąże się to trochę myślenia pojęciowego. Dlaczego czasów pracy byłby taki sam w zarówno najgorsze i najlepsze scenariusze? Tak? PUBLICZNOŚCI: Ponieważ Wybór rodzaju każdego pozycji lub miejsca w tej małej tablicy rzecz, albo cokolwiek. Tak więc nawet w najlepszym przypadku, nawet jeśli jest to całkowicie sortowane, to nadal ma być jak, OK, jeden. W moim pierwszym miejscu mam jeden. I przejść przez wszystkie z nich. OK jeden jest najmniejsza. A potem to idzie jeszcze raz i jest tak, OK, dwa to najmniejsza z wszystkich rzeczy. Ale to musi jeszcze sprawdzić każdy jeden. PROFESOR: Tak. Tak na przykład, powiedzmy, Mamy listę, już klasyfikowane, tablica jeden do pięciu. Sposób, w rodzaju wyboru jest to, że przechodzi przez sprawdza te dwa. Następnie sprawdza te dwa. A następnie sprawdza i sprawdza. To ciągle sprawdzanie wszystkich z nich, niezależnie od tego, czy to faktycznie sortowane. Bo to jest po prostu sposób, w jaki to rodzaj działa. A tak, to pytanie jest trochę jak koncepcyjne pytanie poprosimy. W przypadku, gdy po pierwsze, do wiem, jakiego rodzaju wyboru jest, w prawo, aby być w stanie odpowiedzieć na pytanie. Musisz być w stanie zrozumieć koncepcyjnie, co się dzieje. A potem można go stosować i myślę, OK niech po prostu wyobrazić sobie najgorszy scenariusz. Oni wszyscy są w porządku malejącym. Jak to wpływa na to? Co jeśli to zamówienie rosnąco? Jeśli to już klasyfikowane? Jak to wpływa na czas pracy? A następnie Wybór rodzaju, można zauważyć, które w rzeczywistości nie ma znaczenia. Ponieważ jesteś sprawdzanie wszystkich wartości bez względu na to, co się dzieje. I tak dobre rzeczy do zapamiętania. Dlaczego niektóre rodzaje różnią się od innych i jak najlepsze i najgorsze scenariusze wpłynie na wszystkie z nich. Będę naprawdę strzałem w rodzaju dlatego, że będzie na quiz. Tak. OK. Jest sześć minut przed końcem. Mogę wziąć trzy minuty pytań. Mogę też obijać się jak 20 minut po sekcji jeśli chcesz zadać pytania, jak również. Czy ktoś po prostu bardzo krótkie pytania lub problemy koncepcyjne są jasne, w tej chwili? Tak? PUBLICZNOŚCI: Czy możesz opowiedzieć trochę Trochę o Operatory bitowe? PROFESOR: Tak. Operatory bitowe są tak coś, co prawdopodobnie może po prostu chcesz umieścić na swojej karcie. Więc quickly-- nie chcę iść za dużo w głębi dlatego, Harvardzie, w ich przeglądu Sesja, pokryte go całkiem dobrze. Operatory bitowe, nie pięć z nich, prawda? Jest to, co jest x lub funkcji, nie ma znaku &, który jest i. Rura, która jest albo. I wtedy masz dwa różne rodzaje zmian. Jeśli dam ci dwie wartości, o ile Daję wam, jak, jeden do jeden. Co by to ocenić na? Jeśli dam ci prawdziwe i prawdziwe, prawda? Co prawda czy fałsz? Mimo to prawda, prawda? Ponieważ nie OR. Będziemy najprawdopodobniej daje numery. Więc pamiętaj, jeden równa prawda, zero równa się fałszywe. I możemy dać ci te rzeczy i proszę nam powiedzieć, co się dzieje. Harvard obejmuje go w pierwszym 10 minut z ich sesji studyjnej naprawdę, naprawdę dobrze. Więc chłopaki chcą, aby upewnij się, spojrzeć wstecz na to. PUBLICZNOŚCI: Czy pisa5 będzie na quiz? PROFESOR: Nie Nawet nie patrzeć na pisa5 teraz. To trudne. Wystarczy nawet nie patrząc na pisa5. Jednak, jak kilka wskazówek i sugestie, ja proponuję zacząć pisa5 tak szybko, jak quiz jest skończona. To będzie najtrudniejsza tygodniu, ale wtedy ludzie będą przekazywane go na wzgórzach toczenia zielony i szczenięta, i to jest w porządku. Ta klasa dostaje znaczące łatwiejsze po piątym pset. Godziny urzędowania: PUBLICZNOŚCI jest niedziela, poniedziałek? PROFESOR: Tak, tak, godziny pracy będzie w niedzielę do poniedziałku do zbior. Godziny urzędowania tonight zasadniczo będzie tylko przegląd w quizie. Jeśli ktoś chce przyjść i zapytać TAS pytanie, będziemy tam. Wezmę może jeszcze jedno pytanie jeśli ktoś ma pytanie? Tak? PUBLICZNOŚCI: Kiedy jesteś określające węzły, [niesłyszalne] jeśli powiesz gwiazdę węzła, a następnie obok, automatycznie wykonuje komputer Rozumiem, że jesteś odwołując się do innego wskaźnika? PROFESOR: Nie PUBLICZNOŚCI: Musisz ponownie połączyć go [niesłyszalne]? PROFESOR: Więc w zasadzie struktura węzła jest, pamiętaj, to jak utworzyć węzeł i to masz wskaźnik zwany dalej. Wszystko robisz jest o struktura istnieje. Musisz przypisać że wyżeł gdzieś. Więc komputery nie wiedzieć, co robi jeszcze. Trzeba rzeczywiście przypisać go, gdy tworzysz swoją połączonej listy. I to właśnie przede wszystkim zbior 5 będzie dalej. Więc nie ma obaw o którykolwiek z tym już teraz. PUBLICZNOŚCI: Więc nie trzeba koncentrują się zbytnio na liście łączy, po prostu ogólna koncepcja? PROFESOR Zaledwie dość dużo stosy, Link kolejki, listy, drzewa, tablice z cebulą. Wystarczy być w stanie wiedzieć, czym one są. Nie będziemy prosić chcesz coś konkretnego dlatego, że tak naprawdę nie zrobić już pset że obejmuje żadnej z tych rzeczy jeszcze. Tak więc w ostatnim dwie minuty przed I was wyzwoli zabić ten quiz. Dość dużo, jak, zastanowić się, jak znacznie wy doszli w tej klasie. Pamiętam, że kiedy tydzień dwa tej klasy, niektórzy z was spędzić trzy godziny pisania wody. Jak długo zajmie ci faceci pisać teraz wodę? 30 sekund, może być? Pomyśl o tym, jak bardzo chłopaki nauczyli. CS jest naprawdę ciężko, z zastrzeżeniem. Nie ma co do tego wątpliwości. Trudno, to dlaczego nikt nie bada go. To jest po prostu ciężko. I to jest całkowicie w porządku. I jestem bardzo dumny, że wszyscy tak daleko. Psets nie są łatwe. Biorą dużo czasu. Chłopaki, ja nigdy nie poprosi Cię o Napisać gra 15 lub Vigenère na zbior. Nie trzeba się po prostu wariować o tym. Wszystko testujemy tutaj jest ocena Twój koncepcyjne wiedzy, jak również jako jedne z podstawowych umiejętności kodowania. Ten test jest przeznaczony do być naprawdę trudne. Podobnie jak to jest przeznaczone , aby nie dostać 100. Jest przeznaczony również dla Ciebie, aby pewnie nie być w stanie do końca w 75 minut. I to jest całkowicie w porządku. Jestem studentem ja. Wiem, Nienawidzę, kiedy idę z quizie być jak cholera. To było naprawdę trudne. Prawdopodobnie co się happen-- i to jest całkowicie w porządku, Mówię wam teraz. Środki na te rzeczy nie są wysokie w ogóle. A dla tych z was, którzy zostały uzyskanie, jak, trójek na swoich zbiorów problemowych, to nie znaczy, że jesteś dostanie 60 procent w tej klasie. Jeśli masz 60% na Quiz, że nie znaczy masz zamiar dostać D w tej klasie. Widzimy, zwłaszcza ja, na tych, w moim dziale, Widzę, jak bardzo wy wszyscy pracujemy. I śledzić, że. Wy będzie dobrze. Nie ma pamięci instytucjonalnej szczęście na koniec semestru. Bo wszystkie dzieci z Harvardu mówią ich przyjaciele, oh, wszystko będzie w porządku. Nikt nie mówi wam, że tutaj. Więc muszę powiedzieć wam, że tutaj. Wy będzie dobrze. Jestem bardzo dumny z wszystkich was. Test będzie trudno. Badania dla niego, a potem po prostu wyrzucić. Przygotuj się uczyć nowych rzeczy. I jeść słodycze. Mamy mieć dużo cukierków. Pobierz sen sen. Nie, nie spać, ponieważ To byłoby naprawdę źle. CS jest dużo logiki. Jeśli nie spać, nie może działać, i mózg nie może funkcjonować. I będę tutaj następnym 20 minut, jeśli ktoś chce obijać. Macie zamiar go zabić. Powodzenia.