JASON Hirschhorn: Witamy do trzech tygodni każdy. Mamy dużo ludzi, ale ekscytujące odcinek przed nami. Więc po pierwsze, dlatego, że podjęliśmy pewne postępy w toku, ale wciąż dużo nauki do zrobienia, jestem zamiar pokazać wam pewne zasoby które powinny okazać się niezwykle pomocne, ponieważ nie tylko zbliżyć swoje Problem osiada, a także wszystkie trawienia materiał dajemy wam w wykłady i szorty i sekcji. Następnie jedziemy do spędzenia pierwszych 20 do 25 minut odcinek będzie ponad GDB, które mogą lub nie mogą mieć stosuje się w tym punkcie, ale niezwykle pomocne narzędzie, które będzie pomóc debugowania programów. Wielu z was może nie stosować w printf środek programu, aby dowiedzieć co wyniósł zmienna. GDB jest nawet lepiej niż printf i nie zepsuć swój kod, ponieważ uruchomić go na plik wykonywalny. Więc idziemy na 10 najbardziej przydatne Polecenia potrzebne do GDB, a my pójdzie na ćwiczenia razem tak w błąd ustawić trzy i poza nią, można można używać GDB pomóc debug programy. I wreszcie, mamy zamiar iść na niektóre algorytmów sortowania i wyszukiwania że widział w wykładzie, a my jesteśmy Kod będzie faktycznie, a nie tylko pseudokod, ale wyszukiwarka Kod binarny, Sortowanie bąbelkowe i wybór sortowania. Więc po pierwsze, chcę iść nad zasobami. Jest to obszerna lista, i to mniejsza czcionka bo miałem wiele do pasuje tutaj. Ale to nie tylko pomóc, znowu, z problemu oraz zestawy trawienie informacje nauczyłeś, ale na pewno, chodź razem quizu, to będzie być niezwykle pomocne. Więc po pierwsze, wykład zauważa. Jeśli pójdziesz do cs50.net/lectures i przewiń do konkretnego tygodnia i dnia, zobaczysz, że są uwagi dla każdego wykład, który nie jest po prostu zapis, ale edytowane wersja co zostało opisane w wykładzie z kodem Podziękowania fragmentów i inne smakołyki. Bardzo polecam na te. A potem, jak również, tam jest kod źródłowy dostępny z każdego wykładu. I znowu te slajdy będą również dostępny online w cs50.net/sections tego wieczoru. Drugi to tak co tydzień, że spodenki Tematy okładka, zwykle od 5 do 15 minut długości. A ci, mam nadzieję, że da ci świetny podkład na różne tematy. Po trzecie - i to jest nowy to roku - jest study.cs50.net. Jeśli jeszcze nie sprawdziliśmy to, że bardzo polecam, aby to zrobić. Można dostać się do wybrać temat. Mamy dziesiątki tematów na nie. Tak, na przykład, wybrać funkcje. To daje jakieś slajdy i zauważa na funkcji. To są rzeczywiście slajdy że TF zachęca do korzystania w czasie naszego prezentacje w sekcji. Istnieje również porady i wskazówki dotyczące postępowania z funkcji, a tam problemy praktyczne, które pomagają pracy z funkcji. Mamy również daje linki do mało Funkcje i czasy, że funkcje pojawiały się w wykładzie. Więc study.cs50.net, nowy to roku, fantastyczne zasobów. Następnie mam człowieka, który jest instrukcja polecenia, które można uruchomić na linii poleceń. Więc jeśli masz jakieś pytania dotyczące poleceń, na przykład, rand, które spotkałem w zeszłym tygodniu podczas sekcji i masz prawdopodobnie napotkał w Twój problem ustawić, gdy przechodzi wygenerować kod, ale po wpisaniu man rand, otrzymasz stronę, powie ci wszystko o rand. Daje ci to, czego potrzeba, Parametry to odbywa, jak również powrót Rodzaj i krótki opis tej funkcji. Dlatego sprawdź rand. To może być trochę rozwlekły i mylące, więc uważam, że czasami po prostu Googling to, co chcę wiedzieć jest Najlepszym sposobem, aby znaleźć odpowiedź. Więc ćwiczyć z Google. Uzyskać dobry w Google. Stanie się Twoim najlepszym przyjacielem. Jak Google, jeśli nie możesz go znaleźć w Google, cs50.net/discuss, to forum dyskusyjne. Szanse są, jeśli masz pytanie, jeden swoich rówieśników ma 700 +, które również pytanie i może prosić to już w dyskusji forum i go odpowiedzi. Tak więc, jeśli masz pytania lub wspólne masz pytanie, które naszym zdaniem Może inni ludzie mogą biegać w, sprawdź cs50.net/discuss. Wreszcie dwa ostatnie, jeśli chcesz porozmawiać z prawdziwym człowiekiem, biura godzin od poniedziałku do piątku. Istnieje również godziny Office Online dla studentów przedłużających. I ostatni, ale nie najmniej, ja, wykrzyknik. Macie moje informacje kontaktowe. Jeśli czegoś potrzebujesz, proszę nie prosimy o kontakt. Zawsze zachęcamy do tego. Bardzo niewielu z was dodaje mi Gchat, tak, że nie było rozczarowujące, ale miejmy nadzieję, że będziemy zmieniać między ten i następny rozdział. Wszelkie pytania do tej pory na temat zasobów? Świetnie. Wreszcie inna wtyczka do feedback, sayat.me/cs50. Możesz dać mi anonimowe informacje zwrotne o tym, jak to robię. To było bardzo pomocne w zeszłym tygodniu. Mam kilka uwag od was zaraz po sekcji, a także z inni uczniowie, którzy go obserwowali w ciągu tygodnia, a był niezwykle pomocny. Mam zamiar spróbować i ograniczyć korzystanie z mojego Słowo "słodki", ale pokażę moje entuzjazm i emocje w inny sposób. Ale były inne dodatkowe merytoryczne komentarze, zarówno plusy i Delta. Więc proszę, dam wam informacje zwrotne na swoich zbiorów problemowych. Zachęcamy, aby dać mi informacje zwrotne w moim nauczaniu. Jestem tu dla was. Świetnie. To wszystko, co mam do Pierwsza część. Czy ktoś ma jakiekolwiek pytania do tej pory? I mam uwagę do centrum kontroli. Studentów przedłużające się messaged mnie mówiąc, że nie dostaniesz żadnego dźwięku, ale to z mojej mocy, aby naprawić. Więc mam nadzieję, że dostanie rozwiązany wkrótce. Jeśli oglądasz w Internecie, hi, ale nie możesz mnie usłyszeć. Więc po pierwsze, będziemy przejść przez GDB. GDB, jak wspomniałem na początku, to narzędzie do debugowania znacznie lepiej niż printf. Więc zacząć z gdb, was, jeśli chcesz otworzyć swój urządzenia i wziąć plik Wysłałem e-mail do Ciebie wcześniej - plik ten będzie również dostępne online w trochę - i uruchomić GDB. / nazwę pliku. Po pierwsze, oczywiście, trzeba skompilować pliku, ponieważ działa tylko na GDB pliki wykonywalne. Ale jeśli kiedykolwiek chcesz rozpocząć GDB, pierwszą rzeczą, którą zrobisz, uruchomieniu gdb. / Cezara. Więc to jest nazwa programu jesteśmy zamiar iść z nim teraz. Więc mam zamiar napisać, co zrobić Cezara da mi plik wykonywalny tu zaznaczony na zielono. A potem mam zamiar uruchomić gdb. / Cesar. I już. Widać mamy jakiś tekst mówi mi o wersji GDB, dając mi niektóre informacje o gwarancji, a potem mają wiersz PKB, który wygląda sortowania z jak nasz linii poleceń, ale widać, że jest otwarty PAREN, GDB, zamknij nawias. Zanim będziemy kontynuować i debugowania tego pliku że wysłałem do was wszystkich, przyjrzyjmy kilka przydatnych poleceń więc mamy poczucie z tego, co się dzieje na pokrycie. Te polecenia są tutaj wymienione w Kolejność, w której na ogół z nich korzystać. Więc zaczynam mój program, uruchamiając GBD. / Nazwa programu, w tym przypadku, Cezar. A następnie pierwsze co robię 99,9% czasu jest typ przerwa na myśli. , Który wyznacza punkt załamania na Głównym. Zasadniczo, co robisz tam jest program będzie zatrzymać w Głównym, dzięki czemu można rozpocząć rozpatrywanie jej linię po linii, a nie działa wszystko droga przez. Można złamać w różnych punktach Twój kod, ale głównym jest zwykle Dobrym miejscem na rozpoczęcie. Następne polecenie uruchomić jest prowadzony. , Który rozpoczyna bieg programu, a jeśli chcesz wprowadzić wiersza poleceń argumenty, go uruchomić to polecenie. Uruchamiać z argumentami. Tak, ponieważ mamy zamiar na wersję C, która jest program wy napisał do pset dwóch - ta, oczywiście, ma kilka błędów w tym, że mam nadzieję, że znajdziemy - mamy zamiar uruchomić bieg z jakimś poleceniem Argumenty wiersza, ponieważ Cezar, jak wiecie za problem zestaw specyfikacji, wykonuje pewne Argumenty wiersza poleceń. Następne kilka poleceń, obok jeden jest w rzeczywistości nazywa się następny. Że weźmie ci linia po linii za pośrednictwem programu. Więc uderzenie n następnie enter powoduje przejście do następnej linii, wykonując poprzednia linia. Kroku nastąpi nie tylko Następna linia, ale zajmuje Ci funkcje wewnątrz. Więc jeśli masz napisane funkcję w kod lub jeśli chcesz poznać do i, na przykład, można trafić s, a zamiast iść do następnej linii Plik, który idziesz przez prawo teraz, będziesz faktycznie krok do funkcja i zobaczyć jej kod. Lista pokazuje, w bardzo przyjazny dla użytkownika Format, na 10 lub tak linie wokół , gdzie obecnie znajdują się w kodzie więc rzeczywiście można znaleźć w pliku zamiast przełączać się się między różnymi widokami. Wydruku jest jak printf, jak sama nazwa wskazuje. Który pokazuje, co równa zmiennej. Informacje mieszkańców jest bardzo pomocna. Jest to specjalna wersja druku. Informacje miejscowi pokazuje wszystkie lokalne zmienne, drukuje je wszystkie dla ciebie , które są obecnie dostępne. Tak więc ogólnie, zamiast wydrukować cztery zmienne, że jestem ciekaw, czy jestem w pętli, na przykład, po prostu napisać informacji mieszkańców, i będzie to do mnie to, co mogę pokazać mój licznik wynosi, jak również układu, który jestem pracy na równych sobie. Wreszcie, w dalszym ciągu. Wpisując przerwę przestaje ci na progu. Możesz chodzić po linii przez i linii z następnym kroku. Nadal prowadzi program do następnego Break Point lub do realizacji, jeśli nie ma więcej punktów przerwę. Wyłącz usuwa punkty popsuć jeśli postanowił była przerwa w głównym nieodpowiednie, chcesz ustawić go gdzieś indziej. I wreszcie q, quit, pobiera z GDB. Więc ten program. / Cezar, będziemy przejrzeć już teraz, a my zamierzasz używać GDB aby znaleźć błędy w tym programie. Pobiegłem wcześniej z tego programu Sprawdź 50, i mam jedno zmarszczenie brwi. Wszystko, co istnieje, jest skompilowany, to przepuszczono wiele badań, ale jakiś powód, że nie przeszedł piątą testy, obracając barfoo, wszystkie czapki, do E-D-U-I-R-R, wszystkie kapsle za pomocą trzech jako klucz. Mam dość blisko. Mam się o jedną literę. Więc jest jakiś mały błąd tutaj. Szukałem przez mój kod. Nie mogłem zrozumieć. Miejmy nadzieję, że chłopaki mogą mi pomóc dowiedzieć się, co to błąd jest. Więc to jest błąd, że jesteśmy poszukiwania. Przejdźmy do GDB. Znowu, ja uruchomić gdb. / Cezara, więc teraz jesteśmy w GDB. I to, co jest pierwsze co mam zrobić? Właśnie weszła GDB. Ktoś dał mi dobry polecenie, aby wejść. STUDENT: Break głównym. JASON Hirschhorn: Break głównym. Fantastyczne. Załóżmy, że cala typu Możecie obejrzeć tutaj lub po razem na komputerach. Złamać główny, a zobaczysz, Point Break ustalono na - to daje mi trochę dziwny adres pamięci, i to też daje mi numer linii. Gdybym miał spojrzeć w archiwum, Chciałbym zrozumieć, że main się na linii 21. Co należy uruchomić następny? Jest mój program działa? Nie. Więc co mam uruchomić następny? STUDENT: Run. JASON Hirschhorn: Run. Czy mogę po prostu run, czy powinien I dodać kilka innych rzeczy w? STUDENT: Uruchom z argumentem. JASON Hirschhorn: Uruchom z argumenty poleceń. A ponieważ jestem bardzo specyficzny debugowanie sprawa, że ​​należy wprowadzić linia argumentów poleceń. Więc będę działają trzy, co jest, ponownie, Wyjście dostałem od Odjazd 50. Uruchamianie programu. Idziemy przez kilka linii. Będziesz teraz zobaczyć, że jesteśmy na linii 21. Skąd mam wiedzieć, że jesteśmy na linii 21? Bo jeśli spojrzeć na lewo z mojego okna terminala, tam mówi wiersz 21. I to daje mi, naprawdę, Kod, który jest na linii 21. Więc misspoke wcześniej. Głównym rzeczywistości nie jest w linii 21. Głównym jest kilka linii powyżej 21. Ale na linii 21, która znajduje się gdzie mamy do zerwania. Ta linia kodu ma jeszcze nie wykonane. To jest ważne. Linia widzisz nie ma zostały jeszcze zrealizowane. To jest następna linia kodu masz zamiar wykonać. Więc następna linia, jak jesteście prawdopodobnie zna, jest to Stan sprawdzając, czy mam wszedł w linii poleceń. Oraz do i, co jest druga części, które robi? Co to jest na i? STUDENT: Zmiana na liczbę całkowitą. JASON Hirschhorn: Przepraszam? Student: To się zmienia Argument do liczby całkowitej. JASON Hirschhorn: Tak się i zmienia Arg V1 z łańcucha do liczby całkowitej. A następnie co to sprawdzanie? STUDENT: Jeśli jest drugi Argument wiersza poleceń, bok z uruchomieniem programu. JASON Hirschhorn: A co jest Druga połowa to Sprawdzenie wyrażenie logiczne? Ta część tu, do i? STUDENT: Jeśli jest ujemna. JASON Hirschhorn: Upewnienie się, co? STUDENT: upewniając się, że jest rzeczywiście pozytywne. JASON Hirschhorn: Dokładnie. Ten sprawdza, czy jest to ujemny, a jeśli jest ona ujemna, to przeczucie następnej linii potęgę być mi krzyczeć na użytkownika. Więc hit końca, aby wykonać tę linię. Nie widzimy, że linia, która wy może spodziewał się wrzask na użytkownika, a następnie wraca, bo linia ta nie wykonuje. Wszedłem 3. Więc nie, w rzeczywistości, wpisz dwa polecenia Argumenty wiersza, i 3 jest większa niż zero. Więc widzieliśmy ten wiersz, to wykonywane, ale nie krok wewnątrz jeśli warunek. Więc teraz, następne, widzę mam ustawienie klawisz int równa się i arg v1. Tak, że to ja tworząc klucz zmienny. Więc jeśli mogę wydrukować klucz teraz, bo że pozwala zobaczyć wartość wewnątrz zmiennej, Kluczem jest równa 47. To dziwne, ale oczywiście, to dlatego, że nie mają zrealizowane jeszcze tego wiersza. Więc teraz, jeśli hit n, wykonać tę linię, i zrobić przycisk drukowania, klucz będzie równa 3, co jest, co spodziewamy się równać. Więc jeszcze raz, w GDB, linii, którą zobaczyć, że nie zostały jeszcze zrealizowane. Musisz trafić N lub S lub numer innych poleceń do rzeczywistości wykonanie tej linii. Klawisz Print. Kluczowe jest przy 3. Tak daleko, tak dobrze. Ciąg jest zwykły tekst. Miejmy wykonać tę linię. Dostaję ciąg od użytkownika. Zobaczmy w czek 50, I Wprowadź barfoo wszystkie czapki, tak to co ja wprowadzić. Gdybym teraz wydrukować zwykły tekst. Zobaczysz, że jest równy ciąg. To daje mi jakieś inne dziwne szesnastkowy numer, ale to się dzieje w Fakt, że mój łańcuch jest barfoo. Gdybym chciał zobaczyć, co wyniosło na klucz ten punkt, w jaki sposób mogę sprawdzić klucz? STUDENT: klucz do druku. JASON Hirschhorn: klawisz Drukuj, dokładnie. I rzeczywiście, jest to skrót. Jeśli znudzi się pisanie drukiem, można po prostu wpisać p. Więc kluczem p robi samo dokładne. I znowu, widzę, że jest równa 3. Gdybym chciał się dowiedzieć, co zarówno klucz i barfoo wynosiła jednocześnie ale byłem zmęczony wpisując każdy jeden indywidualnie, ja może wpisać informacji mieszkańców. To daje mi klucz równa się 3. Zwykły tekst równa barfoo. To również daje mi te dwie dziwne rzeczy w górę, to zmienne i oraz ta zmienna n. Te są faktycznie istniejące w moim programie głównym. Nie spotkałem ich jeszcze, ale jako wstępne, te istnieją w moim pętli. Więc teraz, że równa jakiś dziwny numery, ponieważ nie było jeszcze zainicjowany, ale nadal istnieją w pamięci, więc oni po prostu ustawić do pewnej wartości śmieci. Ale rozumiem, klucz zwykły tekst tutaj. Więc mam zamiar wykonać tę linię, linia 34, na pętli. Jedziemy, aby przejść do do pętli przez naciśnięcie n. A my jesteśmy w środku pętli. Jesteśmy na naszej pierwszej kontroli. I znowu, to powinno wyglądać jakby znajomo, bo to było Program Cezar, który został napisany, ale ponownie, ma jakiś błąd. A teraz, jeśli mam informacji mieszkańców, bo jestem wewnątrz, że na pętli, zobaczysz że jest równy zeru, jak oczekujemy. To, co możemy ustawić go i zainicjowany to w pętli for. n wynosi 6. Że również sens, ponieważ ustawiona to do strlen zwykłego tekstu. Tak lubię robić informacji miejscowych lub wydrukować do zmiennej często, aby upewnić się, że wszystko jest zawsze to, co Spodziewam się, że aby dorównać. W tym przypadku, wszystko co się spodziewać, że na równi. Zacznijmy więc poruszanie się to dla pętli. Jestem na linii jest linia 36, ​​jeśli zwykły Tekst który jest większy niż a zwykły Tekst i jest mniejsze niż lub równe z. Wiem, że mój problem nie jest z moja pierwsza list, to z drugiej litery. Jeśli spojrzymy na Wyjazd 50, B idzie do e grzywny. Biorę A i pozostawienie go jako , nie zmieniając go do D. So coś jest nie tak z Drugi list. Więc mam zamiar przenieść nie w drugim. Ale gdybym chciał sprawdzić, co zwykły Tekst i wyniosła w tym zwłaszcza przypadek, myślę, że powinno być to, co? Co należy zwykły tekst i równe w tym Pierwsza runda za pośrednictwem pętli for? STUDENT: Zero? JASON Hirschhorn: Zwykły tekst z I? Tak powinno być stolicą B. I, oczywiście, jest równa zeru, ale czysty tekst Uchwyt Uchwyt zamknięty równa zera B bo struny, jak widzieliśmy w zeszłym tygodniu, jest tablica, więc dostajemy Pierwszy znak od tego. Więc jeszcze raz, jeśli wydrukowane zwykły tekst I, I mają w rzeczywistości uzyskać znak B. I to jest miłe, prawda? I w rzeczywistości nie mają zwykłego tekstu I. To nie jest jedna ze zmiennych ustawić lub zainicjowany, ale można drukować się całe mnóstwo rzeczy, jeśli chcesz. Ale przejdźmy przez. Jeżeli tekst jawny I jest większa niż A i tekstowy i jest mniejsze niż lub równe Z, który wyraźnie jest prawdą, ponieważ mamy B. Kapitał Zamierzam uruchomić niektóre komendy na nim. Widzieliśmy, że matematyki w zeszłym tygodniu, więc będziemy przyjąć za pewnik, że to działa prawo zgodnie Sprawdź 50. Te nawiasy klamrowe, pierwszy wykazały, że byłem wyjściu, jeśli Stan, drugi wykazały że mam wyjście dla pętli. A więc teraz, kiedy uderzył Dalej, zobaczymy jesteśmy z powrotem na pętli ponownie. Jedziemy przez do pętli ponownie. Niech rzeczywiście krok w sekundę iteracji pętli i rodzaju informacji miejscowi. Więc jesteśmy w drugiej iteracji naszej pętli for. I wynosi 1, co oczekujemy. N równa się 6, które oczekujemy. Kluczem jest równe 3, której oczekujemy. I zwykły tekst, zobaczysz, jest równa EARFOO teraz, już, bo nie barfoo w poprzednim iteracji B był zmienił się w stolicy E. Więc jesteśmy o na ten problem, więc to gdzie będziemy nurkować do debugowania. Ale czy ktoś ma jakieś pytania o tym, co zrobiliśmy do tej pory? Fantastyczne. Więc jesteśmy o tym, czy do wykonania Stan, wspornik tekstowy Zamknąłem Uchwyt większa niż A i zwykły tekst I mniejsza lub równa Z. Jednak zanim Ja się w to zagłębiał, bo to jest, gdy Wiem, że mój błąd jest, chcę zwrócić z prostym tekstem I. Tak postawmy wydruk. To nie równa się charakterem, tak aby wydaje się tak daleko, wszystko jest dobrze i dobrze. Więc oczekiwać tej linii na mojej logiki, linia ta powinna być prawda. To jest wielka litera. Ale gdybym hit n, zdajemy sobie sprawę, że ten linii, w rzeczywistości, nie wykonać. Skoczyłem do if. Dlaczego to się stało? STUDENT: Bo masz swój stan zwykłego tekstu jest większa ni, jest równy lub większy niż. JASON Hirschhorn: Więc miałem zwykłego tekstu I jest większa od nie większej niż lub równe. Tak wyraźnie, kapitał nie wyzwalać to, czy warunek, a my Nie wchodzić do niego, a my nie niezbędne zmiany. Tak, to jest to, rzeczywiście. Pomyślałem, mój błąd. Mogę iść z powrotem w moim pliku źródłowego, zmienić i zaktualizować go i uruchomić Sprawdź 50 ponownie. Ale zobaczymy, pedagogika jest tylko dla dobra, jeśli nie poddawać się. Indziej, jeśli nie wykonuje albo, ale co zamiast równa jest polecenie nie ulega zmianie. Więc to nie jest w ogóle zmieniło, a jeśli wydrukować zwykły tekst tutaj, zobaczymy dzieje przez to pętla w rezultacie nie istocie zmiany tego drugiego znaku w ogóle. To wciąż kapitał A. Więc znowu, my debugowany nasz błąd. Zdaliśmy sobie sprawę, że nie było niektóre logiki brakuje. A my debugowane go z wyprzedzeniem przed wykonywaniem tej linii, ale zauważyłeś miał po prostu naciśnij Dalej i przejść do tego jeszcze, jeśli, oznacza to, że jeśli warunek Nie było to prawdą. We nie w rzeczywistości uzyskać Wynik spodziewaliśmy. Tak więc możemy być poproszony, miał nie był tak bystry, by spojrzeć na że jeśli warunek i sprawdzić, czy w rzeczywistości, nasz stan należy ocenić na prawda w obecnym kontekście. To wszystko na debugowanie tego programu. Czy ktoś ma jakieś pytania? Jakie polecenie mogłem trafić rzucić GDB? Q. A potem będę się monit, wyjdz? Tak lub nie. Uderzę tak, a ja nie rzucić GDB. Więc to było szybkie podkład do GDB. Faktycznie, w rzeczywistej sytuacji, Zrobiłem to w godzinach pracy. I GDBed dokładnie ten program na godziny pracy z uczniem. I jeśli wrócimy do poleceń widzieliśmy przed wykorzystaliśmy przerwę main, pierwszy co zrobiliśmy. Użyliśmy bieg z argumentów wiersza poleceń, Druga rzecz, którą zrobił. Użyliśmy obok dużo, aby przejść nam przez linie. I znowu, wersja krótka z następnym jest n. To w nawiasach w kolorze szarym na slajdzie. Nie korzystaliśmy krok, ale nie koniecznie w tym przypadku. Ale możemy używać go w trochę później dzisiaj, gdybyśmy debugowania, dla przykład, wyszukiwanie binarne binarny gdy wyszukiwarka nazywa się oddzielne ale tam jest funkcja jakiś błąd z nim. Zamierzamy chcą wejść do wezwanie do poszukiwania binarnego i faktycznie debugowania. Lista nie używać albo dlatego, że mieliśmy dobre poczucie naszego kodu, ale jeśli chciał zorientować się, co kod było wokół, może po prostu użyć listy. Wydrukuj użyliśmy, informacji miejscowych użyliśmy. Nadal nie muszą korzystać z tego przypadek, ani nie musimy użyć wyłączyć, ale my korzystaliśmy rzucić. Ponownie, te 10 rozkazów praktykować je. Jeśli rozumiesz tych 10 poleceń, powinien być ustawiony na debugowanie dowolny problem z GDB. Więc mamy zamiar iść dalej, znowu do Sedno sekcji dziś będzie nad to sortowanie i wyszukiwanie algorytmy. Zanim to zrobimy tak, ponownie, żadnych pytań, komentarze, obawy o GDB? Tak jest u każdego będzie korzystać GDB zamiast printf? Więc wszyscy, dla dobra wieczne czasy, w wszyscy kiwając głowa ich prawo teraz, więc do zobaczenia w godzinach pracy i wszystkich was TFS i zobacz oni mówią, pokaż mi, jak używać GDB, a będziesz w stanie , aby pokazać im, prawda? Rodzaj? Być może z nadzieją. Fajne. Więc mamy zamiar przenieść się do sortowania i wyszukiwania. Zobaczysz mam listę już posortowane dla nas, ale to nie będzie Sprawa będzie zawsze. Tak w specyfikacji problemu ustawić Problem ustawić trzy, masz szorty które można oglądać, i faktycznie prosi, by oglądać te szorty. Także w wykładzie w zeszłym tygodniu pojechaliśmy Wiele z tych algorytmów, więc jestem Nie zamierzam spędzić czas w klasie dzieje kółko tych algorytmów lub rysunku zdjęcia, jak te algorytmy pracy. Ponownie, że informacje można ponownie oglądać Wykład, lub że informacje jest zrobione doskonale na szorty na te pytania, wszystkie które dostępne są w cs50.net. Więc zamiast tego, co mamy zamiar zrobić, to napisać te programy. Mamy poczucie, mentalny model, jak pracują, a więc to, co mamy zamiar zrobić, to zakodować je za prawdziwe. Zamierzamy włączyć ten model mentalny, że obraz, jeśli chcesz, do rzeczywisty kod. A jeśli były trochę mylić lub zamglone modelu mentalnego, całkowicie rozumiem. Nie jesteśmy rzeczywiście będzie skok do kodu razu. Tak więc, ta szybka w tym slajdzie pyta do kodu binarnego wyszukiwania, a faktycznie, iteracyjny wersja wyszukiwanie binarne, pierwszą rzeczą, jaką Naprawdę chcesz, aby zrobić to napisać Pseudokod. Więc trzeba to psychicznego modelu , jak binarny prace wyszukiwania. Wyjmij arkusz papieru, jeśli masz jedna łatwo dostępna, lub otworzyć edytor tekstu, i chciałbym wszyscy pisać. Weź cztery minuty napisać pseudokod dla wyszukiwania binarnego. Ponownie, myślę o tym modelu mentalnego. Przyjdę około razie pytań i możemy narysować obraz na zewnątrz. Ale najpierw, zanim zaczniemy programowanie, Chciałbym napisać pseudokod dla wyszukiwania binarnego więc kiedy nurkować w, mamy jakiś kierunek, jak gdzie powinniśmy udać. Student: Czy możemy założyć, tablicę wartości otrzymujemy już posortowane? JASON Hirschhorn: Tak dla wyszukiwania binarnego do pracy - doskonałe pytanie - jesteś wziąć w sortowane Tablica wartości. Więc założyć, to będzie działać. Wrócimy do tego slajdu. Zobaczysz w fioletowym funkcji deklaracja jest bool binary_search int wartość, int wartości, int n. Powinno to wyglądać znajomo, jeśli masz już zbliżył lub zdobyć swoje ręce brudne z zestawem problem. Ale to jest twoja deklaracja funkcji. Ponownie, nie trzeba się martwić o że dużo w tej chwili. Co naprawdę chcę ci zrobić, to wziąć czterech minut pseudokod dwójkowy sprawdzić, a potem pójdziemy na które jako grupy. I będę się wokół. Jeśli masz pytania, prosimy swobodnie podnieść rękę. Dlaczego nie wziąć dwie minuty , aby zakończyć się w Pseudokod? Wiem, że może się to wydawać śmieszne, że wydajemy tak dużo czasu na coś, co w rzeczywistości nie jest nawet w C, ale przede wszystkim dla nich więcej Problem trudnych algorytmów i Zestawy, które mamy, aby dowiedzieć się, począwszy pseudokod nie martwiąc o składni, po prostu martwić się o logika, jest bardzo pomocny. I w ten sposób, nie jesteś rozwiązywania dwa niezwykle trudne problemy na raz. Jesteś po prostu skupienie się na logice, i następnie przejść do składni. OK. Zacznijmy przechodzi pseudokod. Pisałem tutaj, binarny szukaj pseudokod. Będziemy pisać to na Zarządu łącznie. Albo ja napiszę to i dasz ja muszę się monity. Więc może ktoś mi dać pierwszy linia Pseudokod ty napisał do wyszukiwania binarnego? Tak, Annie? STUDENT: Chociaż długość Lista jest większa niż zero. JASON Hirschhorn: Chociaż długość z listy większa od zera. I znowu widzimy, niektóre patrząc C składniowe rzeczy tutaj. Ale większość jest w języku angielskim. Czy ktoś ma jakiś wiersz włożyli zanim w ich pseudo-kodu? STUDENT: Pobierz tablicę o sortowanie liczb. JASON Hirschhorn: Napisałeś "get Tablica z numerami segregowanych. "Za deklaracja funkcji, będziemy przechodzącej tablicę posortowanych numerów. STUDENT: [niesłyszalne]. JASON Hirschhorn: Tak będziemy mieć. Ale tak, jeśli nie mieliśmy, my będzie trzeba posortować naszą tablicę numery, ponieważ wyszukiwanie binarne działa tylko na sortowanie tablic. Tak więc, podczas gdy długość listy jest równa zeru, jestem zamiar umieścić w niektórych klamrach aby wyglądał trochę bardziej jak C. Ale jednocześnie wydaje się na mapie podczas pętli, więc wewnątrz tej chwili pętla co musimy zrobić dla wyszukiwania binarnego? Ktoś, kto mnie nie podano odpowiedzieć jeszcze, ale kto to napisał? STUDENT: Idź na środku listy. JASON Hirschhorn: Tom. Przejdź do środka listy. I pytanie obserwacji, co robimy raz jesteśmy na środek liście? Student: Czy czek czy to Numer szukasz. JASON Hirschhorn: Doskonały. Idź na środku listy i sprawdzić jeżeli nasza wartość jest tam - fantastyczne. Czy ktoś ma coś jeszcze , że było inaczej, niż jest? To się dokładnie zgadza. Pierwszą rzeczą, jaką możemy zrobić w poszukiwaniu binarnym jest iść do środka listy i sprawdzić, czy nasza wartość ma. Zakładam więc, jeśli nasza wartość jest nie, co robimy? STUDENT: Wracamy do zera [niesłyszalne]. JASON Hirschhorn: Tak, jeśli nasze wartość jest tam, znaleźliśmy go. Tak więc możemy powiedzieć, w jakiś sposób, to jednak Funkcja jest określona, ​​możemy poinformować użytkownika okazało się, że. Jeśli go tam nie ma, jednak, że jest gdzie ten dostaje trudne. Więc jeśli go tam nie ma, ktoś, kto Pracowałem na poszukiwania binarnego lub Teraz jest pomysł, co zrobimy? STUDENT: Pytanie. JASON Hirschhorn: Tak? Student: Czy tablica już posortowane? JASON Hirschhorn: Tak, zakładamy tablica jest już posortowana. Uczeń: Tak więc musisz sprawdzić, czy wartość, że widzisz, jest większa niż wartość, którą chcesz, możesz przejść do środka drugiej połowie. JASON Hirschhorn: Więc jeśli środek lista jest większa niż to, co mamy szukasz, to mamy to, co? Poruszamy się gdzie? STUDENT: Chcesz, aby przejść do połowa z listy numery niższe niż. JASON Hirschhorn: Więc będziemy Nazywamy to po lewej. Więc jeśli środkowa jest większa, możemy sprawdzić lewa połowa listy. A następnie przez wyszukiwanie, co mam na myśli poszukiwanie? STUDENT: [niesłyszalne]. JASON Hirschhorn: Idziemy do środka. My rzeczywiście powtórzyć to. Wracamy za pośrednictwem naszego pętli while. Dam ci ostatni - więcej, jeśli środkowy jest mniejszy niż robimy, co robimy tutaj? STUDENT: Idź w prawo. JASON Hirschhorn: Szukaj prawo. To wygląda dobrze, ale czy ktokolwiek ma coś, co może nam brakować lub wszystko, co można umieścić w pseudo-kodzie? Więc to jest to, co mamy do tej pory. Chociaż długość listy jest większa od zera, mamy zamiar iść do połowy listy i sprawdzić, czy nasza wartość ma. Jeśli środkowa jest wyższa, będziemy szukaj w lewo, jeszcze gdy środkowa jest mniej, będziemy szukać prawo. Więc wszyscy mieliśmy trochę znajomości terminy, których używamy w informatyce i narzędzia mamy. Ale można już zauważyć, że byliśmy mówienia w języku angielskim, ale okazało się, Wiele rzeczy, które wydawały się do mapy, aby narzędzia mamy w naszej kodowania zestawu narzędzi. Więc tuż nietoperza, nie jesteśmy będzie faktycznie zakodować jeszcze. Co widzimy tutaj, że mapy w języku angielskim na rzeczy, które możemy napisać w C? STUDENT: Podczas. JASON Hirschhorn: Podczas. Więc to, gdy tu mapy do tego, co? STUDENT: pętla while. JASON Hirschhorn: pętla while? Lub prawdopodobnie, bardziej ogólnie, pętla. Chcemy zrobić coś w kółko. Więc idziemy do kodu pętli. I już wiemy, bo zrobiliśmy to kilka razy, a my mają mnóstwo przykładów tam, jak właściwie napisać wskaźnik ten dla pętli. Tak że powinno być dość proste. Powinniśmy być w stanie dostać się, że zaczęła dość szybko. Co jeszcze zobaczymy w tutaj? Jakie inne konstrukcje składnie, rzeczy że jesteśmy zaznajomieni ze w C, mamy już mają poczucie Based od słów użyliśmy? Tak, Anno? [Niesłyszalne] tylko żartowałem. Anna, śmiało. STUDENT: Jeśli i inne. JASON Hirschhorn: Jeśli i inny - tutaj. Więc co ci wygląda? STUDENT: jeśli else. JASON Hirschhorn: Tak, warunki, prawda? Będziemy więc prawdopodobnie trzeba Napisać kilka warunków. I znowu, choć być może mylące pierwsze, na ogół mają poczucie teraz z jak napisać warunki i Składnia warunkach. A jeśli tego nie zrobimy, możemy tylko patrzeć Składnia warunków, wycinania i wklejania że, ponieważ wiemy, że Potrzebujemy tutaj warunek. Wszelkie inne rzeczy, widzimy, że na mapie rzeczy może musimy zrobić w C? Tak, Aleha? Student: To może być oczywiste, tylko o sprawdzenie, czy wartość jest równa coś. JASON Hirschhorn: Jak więc sprawdzić i - tak, przejdź do połowy listy i sprawdzić, czy nasza wartość jest tam? Jak to zrobić w C? Co jest składnia to? STUDENT: Równa, równa. JASON Hirschhorn: Równa, równa. Więc ten test prawdopodobnie będzie być równe, równa. Więc wiemy, że trzeba, że ​​gdzieś. I rzeczywiście, tylko w pisaniu, widzimy te inne rzeczy. Mamy zamiar zrobić kilka operatory porównania tam - fantastyczne. Tak to faktycznie wygląda, przez i duże, że nie napisałem Słowo jeszcze o kod C. Ale dostaliśmy model mentalny dół poprzez wykłady i tych szortów. Pisaliśmy pseudo-kod jako grupa. I już mamy 80%, jeśli nie 90% z tego, co musimy zrobić. Teraz musimy tylko kod to, co ponownie jest nietrywialne problemem do rozwiązania. Ale przynajmniej utknęliśmy na logice. Przynajmniej teraz, kiedy jedziemy do godzin pracy biura, Mogę powiedzieć, wiem, co muszę zrobić, ale można przypomnieć mi składni? Lub nawet jeśli godziny pracy są zatłoczone, ci Czy Google dla składni, a niż tkwić na logice. I znów, zamiast próbować rozwiązać logika i składnia wszystkie problemy jednocześnie jest często znacznie lepiej złamać te dwa trudne problemy od do Te dwa łatwiejsze i zrobić pseudo-kod, a potem kod w C Zobaczmy więc, co zrobiłem dla pseudo-kodu przed czasem. Chociaż długość listy jest większa od zera, w środku wygląda z wykazu. Jeśli znaleźć numer zwróciło prawda, jeszcze jeśli liczba wyższa, wyszukiwanie w lewo. Else if numer niższy, wyszukiwania Dobrze, return false. Tak, że wygląda niemal identycznie, jeśli nie niemal identyczne z tym, co napisał. Faktycznie, Tom, co powiedział pierwszy, Podaje pola listy i jeśli liczba znalezionych na dwa sprawozdania jest rzeczywiście to, co zrobiłem. I łączy się je tam. Powinienem słuchał Ci po raz pierwszy. Tak, że jest pseudo-kod mamy. Jeśli chcesz się teraz, przepraszam, przejdź z powrotem do naszego pierwotnego problemu. Niech kodu binary.c. Więc wdrożyć wersję iteracyjną wyszukiwanie binarne za pomocą następujących deklaracja funkcji. I nie trzeba skopiować to w dół jeszcze. Jestem rzeczywiście otworzy się tu binary.c. Więc jest deklaracja funkcji w środku ekranu. A zobaczysz, wziąłem pseudo-kod z moich stron, ale niemal identyczne do tego, co napisał, i umieścić, że dla Ciebie. Więc teraz, niech trwać pięć minut do kodu tej funkcji. I znowu, jeśli masz jakiekolwiek pytania, podnieść rękę, daj mi znać, będę się wokół. STUDENT: [niesłyszalne]. JASON Hirschhorn: Wziąłem więc binarne Wyszukiwanie w definicji góry, na linii 12. To, co mam do mojego slajdu. A potem wszystko to pseudo-kod po prostu skopiować i wkleić ze zjeżdżalnią, Pseudo-kod slajdów. Ja wciąż nie słysząc [niesłyszalne]. Więc jeśli masz zakończeniu wdrożenie, chcę to sprawdzić. Wysłałem e-mail plik helpers.h Ciebie wcześniej w tej klasie. I to będzie również dostępne w Internecie do pobrania dla osób ogląda tym razem sekcja opóźnione. A ja po prostu stosować podział rodzajowy Kod z pset3. Wziąłem więc find.C, używać pliku helpers.h zamiast pliku helpers.h , który jest podany w kodzie dystrybucji. I musiałem jeszcze jedną zmianę find.C zamiast po prostu dzwoni wyszukiwanie, zadzwoń binary_search. Więc jeśli chcesz, aby przetestować swój kod, wiem, że to jest, jak to zrobić. W rzeczywistości, kiedy będziemy działa ten kod teraz, po prostu zrobił kopię mój katalog pset3 znów zamienili się pliki pomocników, a następnie wykonane, że zmiany w find.C zadzwonić binary_search zamiast po prostu sprawdzić. JASON Hirschhorn: Tak. Masz pytanie? STUDENT: Nevermind. JASON Hirschhorn: Nie martw się. Dobrze, zaczynajmy. Będziemy kodować to jako grupa. Jedna uwaga. Ponownie, jest to, że można łatwo zamienione się do problemu ustawić trzy. Mam plik helpers.h które raczej niż helpers.h mamy podane, deklaruje binarnego wyszukiwania, bańka sortowania i wyboru Sortuj. W find.c zauważysz na linii, to, co jest, że linia 68, nazywamy plik binarny sprawdzić, a nie wyszukiwarek. Więc jeszcze raz, że jest dostępny kod online lub kod, który jesteś tworzenie teraz mogą być łatwo zamienione w na p ustaw 3, aby ją sprawdzić. Ale najpierw niech kodu binarnego wyszukiwania. Nasza deklaracja funkcji, wracamy bool. Bierzemy całkowitą zwaną wartość. Bierzemy tablicę liczb całkowitych o nazwie wartości, i bierzemy n będzie Powierzchnia matrycy. Na linii 10, tutaj, mam ostry m.in. stdbool.h. Czy ktoś wie dlaczego, że tam jest? Więc co to linia kodu zrobić? STUDENT: Pozwala na użyć typu zwracanej bool. JASON Hirschhorn: Dokładnie. Student: A to jest biblioteka, która pozwala korzystania z rodzaju powrotu bool. JASON Hirschhorn: Tak ostre m.in. stdbool.h linia daje mi pewne definicje i deklaracje na rzeczy że mam prawo do stosowania w ta biblioteka. Tak więc wśród tych, mówi, że nie ma Tego rodzaju nazywane bool i może być prawdziwe lub fałszywe. Więc to, co robi, że linia. A jeśli nie mam tej linii, chciałbym kłopoty na piśmie, to słowo tutaj, bool, właśnie tam. Dokładnie tak. Więc trzeba, że ​​w tym kodzie. OK. Więc to, ponownie, jest iteracyjny wersja, nie rekurencyjny jeden. Więc niech nam zacząć. Zacznijmy od tego pierwszego linia kodu pseudo. I miejmy nadzieję, że będzie - czy nie mam nadzieję. Mamy zamiar przejść się po pokoju. Pójdziemy linia po linii, a pomogę można dowiedzieć się, że musimy linii napisać pierwszy. Tak więc, podczas gdy długość listy jest większa od zera. Zacznijmy z przodu. Co należy napisać wiersz tutaj, w kodzie? STUDENT: Podczas nawias n jest większe niż 0. JASON Hirschhorn: Podczas n jest wielki niż 0. Tak więc brak jest wielkość listy i sprawdzamy, czy - [GŁOSY wstawienie] JASON Hirschhorn: - Słucham? STUDENT: Skąd wiemy, że n oznacza wielkość listy? JASON Hirschhorn: Przepraszam. Wg specyfikacji pset, wyszukiwanie Funkcje sortowania i trzeba napisać, n oznacza wielkość listy. Zapomniałem wyjaśnić, że tutaj. Ale tak. n oznacza wielkość lista, w tym przypadku. Tak więc, gdy n jest większe niż 0. OK. Które mogą okazać się nieco problematyczne chociaż, jeśli coś pójdzie dalej. Ponieważ nadal będziemy wiedzieć wielkość listy przez tę funkcja, ale powiedzieć, że zacząć z tablicy 5 liczb całkowitych. I przechodzimy i mamy teraz zmniejszyła go do Tablica 2 liczb całkowitych. Który 2 liczby całkowite to jest? Rozmiar jest 2 teraz, że chcemy patrzeć, ale czego 2 jest to, że? Czy to ma sens, to pytanie? OK. Ja to zapytać ponownie. Więc zacząć od tej tablicy 5 liczbami całkowitymi, a n jest równe 5, prawda? Będziemy przechodzić przez tutaj. będziemy prawdopodobnie zmienić rozmiar, Dobra, jak coś pójdzie dalej. Co jest, co mówimy, że chcemy zrobić. Nie chcemy, aby sprawdzić pełna rzeczą ponownie. Więc powiedzieć, że go zmienić na 2. Bierzemy połowę listę To dziwne. Tak po prostu odebrać 2. Więc teraz n jest równe 2. Przepraszam za kiepski markery kasowania suche. Prawda? A my przeszukiwaniu listy ponownie listę wielkości 2. Cóż, nasza tablica jest wciąż o rozmiarze 5. Mówimy, że tylko chcesz Szukaj 2 miejsca w nim. Więc czego 2 punkty są te? Czy to ma sens? Są one pozostawione 2 miejsc? Są odpowiednie 2 miejsca? Są środkowe 2 miejsc? Złamaliśmy problemu w dół, ale my właściwie nie wiem, która część Problem my wciąż patrząc na, po prostu o te 2 zmienne. Więc potrzebujemy trochę więcej czasu, gdy n jest większe niż 0. Musimy wiedzieć, gdzie to n jest w naszej rzeczywistej tablicy. Tak czy ktokolwiek ma zmieni się na tej linii? Większość z tych linii jest idealnie poprawne. Czy istnieje inny dodatek? Możemy zamienić coś z dla n do dokonać tej linii nieco lepiej? Mm-hm? Student: Czy można zainicjować zmienną jak długości do n to będzie następnie wykorzystywany później w funkcji? JASON Hirschhorn: Więc zainicjować zmiennej długości do n, i używamy tego później? Ale wtedy po prostu zaktualizować długość i my nadal działać w ten problem, gdzie ograniczyć długość naszego problemu, ale nigdy nie wiadomo, gdzie, tak naprawdę, że długość mapy na. Student: Czy to nie będzie się działo później, gdy mówisz, szukaj lewo, szukaj w porządku? Masz zamiar udać się do innego dziedzinie swojego - JASON Hirschhorn: Zamierzamy przejść do obszaru, ale jak wiemy, które mają iść do? Jeśli mamy tylko tablicę i ta n, skąd mamy wiedzieć, gdzie się go w tablicy. Z tyłu, tak? Student: Czy masz, jak, niższe związany i zmienna lub górną granicę coś w tym stylu? JASON Hirschhorn: OK. Tak więc jest to kolejny pomysł. A nie tylko śledzenie rozmiar, możemy śledzić niższa i Górna zmienna związana. Jak więc obliczyć wielkość od dolny i kres górny? [GŁOSY wstawienie] JASON Hirschhorn: odejmowanie. A także śledzenie niższe związany i górna granica, aby poinformować nas, my szukając tych dwóch? My szukając tych dwóch tutaj? My szukając dwa środkowe? Prawdopodobnie nie dwa środkowe, ponieważ to, w rzeczywistości, jest wyszukiwanie binarne. Ale teraz będziemy w stanie uzyskać rozmiar, a także graniczne tablicy. W istocie, jeśli mamy giganta książka telefoniczna, możemy zgrać go na pół. Teraz już wiemy, gdzie, że mniejsze Książka telefoniczna jest. Ale nie jesteśmy w rzeczywistości zgrywania książka telefoniczna na pół. Musimy jeszcze wiedzieć, gdzie nowe granice naszego problemu jest. Czy ktoś ma jakieś pytania o tym? Tak? Student: Czy to działa poprzez tworzenie zmienna, i, że po prostu przesunąć położenie i względem jego pozycja i długości, n? JASON Hirschhorn: A co to ja? Student: Jak i jest jak rodzaj - Jak można zainicjować i być pozycja środkowa tablicy. , A następnie, jeżeli wartość na pozycji i w środek tablicy w uznane być mniejsza niż wartość trzeba, i teraz się długość tablicy plus wartość i podzielić przez 2. Jak widzisz, można przesuwać i. - JASON Hirschhorn: Prawo. Student: - do - JASON Hirschhorn: Jestem więc niemal przekonany, że będzie działać. Ale punkt istota, potrzebne są dwa fragmenty informacji tutaj. Możesz zrobić to z początku i końca, czy można zrobić to z wielkości, a następnie niektóre znacznik. Ale trzeba dwa kawałki informacji tutaj. Nie można dostać się tylko z jednym. Czy to ma sens? Więc mamy zamiar przejść i mamy zamiar zrobić [niesłyszalne] i utworzyć kilka markerów. Więc co piszesz w kodzie? STUDENT: Powiedziałem tylko int granicę z nich jest równa 0. JASON Hirschhorn: Nazwijmy że int, począwszy. STUDENT: OK. JASON Hirschhorn: To sprawia, że więcej sensu dla mnie. A? STUDENT: powiedziałem, myślę, int kończąc. JASON Hirschhorn: int kończąc. Student: Przypuszczam, n minus 1, lub coś w tym stylu. Jak, ostatni element. JASON Hirschhorn: Więc napisał, int począwszy równymi 0, średnikiem i int końcówka jest równa n minus 1, średnik. Więc w zasadzie, co robimy o, 0 pierwszą pozycję. A jak wiemy w tablicach, nie wykraczają do n, idą do n minus 1. Więc mamy pewne granice naszej tablicy. I te początkowe granice stało się początkowe granice naszego problemu. OK. Tak, że brzmi dobrze. Następnie, jeśli wrócimy do tej linii, podczas gdy długość listy jest większe niż 0, co zamiast n, powinna kładziemy tutaj? STUDENT: Napisz kończąc minus początek. JASON Hirschhorn: Podczas zakończenia minus Początek jest większy niż 0? OK. I możemy, jeśli chcemy sprawiają, że nieco ładniejsza, co jeszcze możemy zrobić? Jeśli chcemy, aby oczyścić kod ten się trochę? Jak możemy pozbyć się 0? To jest po prostu kwestia stylu. To jest teraz prawidłowe. STUDENT: kończące się nie równa początek? JASON Hirschhorn: Co możemy zrobić? [GŁOSY wstawienie] STUDENT: Zakończenie jest większa? JASON Hirschhorn: Tak. Możemy tak zrobić, gdy kończy jest większa od początku. Prawo. Dodaliśmy zaczynając po drugiej stronie o tym, i pozbył się 0. Tak to właśnie wygląda trochę czystsze. OK. Tak więc, podczas gdy długość listy jest 0, pisaliśmy , że podczas zakończenia jest większa niż początek. Mamy zamiar umieścić w naszym konieczne nawiasy klamrowe, a następnie pierwszą rzeczą, chcemy zrobić, to patrzeć na je w małym listy. Ty? Czy możesz mi dać - STUDENT: Jeśli nawias Wartość nawias kwadratowy - JASON Hirschhorn: Jeśli nawiasy Wartość nawias kwadratowy. STUDENT: kończące się podzielić przez 2. JASON Hirschhorn: Koniec? STUDENT: Widzę problem z - JASON Hirschhorn: OK. Cóż, wygląda na środku. Skąd wiemy, co jest w środku? Tak. Więc pozwól mi usunąć ten kod. Skąd wiemy, co jest w środku? W nic, kiedy masz na początku i na koniec, jak znaleźć środkowy? Student: Ty średnio. Student: Ty je dodać razem, a następnie - JASON Hirschhorn: im Dodaj razem, a potem? Student: A ty średnia. Podzielić przez 2. JASON Hirschhorn: im Dodaj razem i podzielić przez 2. Tak int środkowy równa? Tom, możesz mi go dać? STUDENT: Początek oraz kończąc - JASON Hirschhorn: Początek Plus kończąc. STUDENT: Wszystko, wspornik, podzielić przez 2. JASON Hirschhorn: Wszystkie, w nawiasach, podzielona przez 2. Tak, że daje mi w środku o niczym, prawda? STUDENT: Musisz także zaokrąglić go. JASON Hirschhorn: Co robisz, znaczy, trzeba zaokrąglić go? [GŁOSY wstawienie] STUDENT: Bo jeśli jest to dziwne liczba, to jest to jak - JASON Hirschhorn: Dobrze, dobrze. Więc może zaokrąglić go. Ale jeśli jest to liczba nieparzysta, 5, mogę przy 1 od środka. Lub jeśli jest to liczba parzysta, a raczej to lepiej sprawa. Jeśli jest to 4, mamy tylko 4, mogę wziąć Pierwszy "średnim", cytuję, cytatu lub Drugi "średnim" jeden. Albo będzie działać na poszukiwania binarnego, więc właściwie nie trzeba go zaokrąglić. Ale jest jeszcze jedna rzecz, trzeba spojrzeć na tej linii. Możemy jeszcze nie zdaje sobie sprawy, ale wrócimy do tego. Ponieważ linia ta faktycznie nadal potrzebuje jednej rzeczy. Ale do tej pory, mamy napisane cztery linie kodu. Mamy nasz początek a kończąc znaczników. Mamy pętli while, która mapuje na bezpośrednio na naszej Pseudokod. Patrzymy na środku, który mapuje bezpośrednio na naszej Pseudokod. Powiedziałbym, że to idzie na środek z tej listy, ta linia kodu. A potem, gdy idziemy do środka lista, następną rzeczą, którą musisz zrobić, jest sprawdzić, czy nasza wartość jest dla pseudokod pisaliśmy wcześniej. Jak więc sprawdzić, czy nasza wartość znajduje się w środku liście? Ty. Dlaczego nie można tego zrobić? STUDENT: Jeśli nasza wartość jest w połowie jest równa cokolwiek ustawić - To znaczy równa równa - JASON Hirschhorn: To - OK. Student: Nie wiem, co Zmienna szukamy na jest jednak to, ponieważ - [GŁOSY wstawienie] STUDENT: [niesłyszalne]. JASON Hirschhorn: Dokładnie. Na deklaracji funkcji, szukamy wartości. Więc jesteśmy w poszukiwaniu wartości w postaci tablicy wartości. Więc jesteś dokładnie prawo. Zrobisz, jeśli wartość otwarty nawias nawias wspornika zamknięty równych średnim równa się wartości, a wewnątrz budynku co musimy zrobić? Jeśli nasza wartość jest tam, co Czy musimy zrobić? [GŁOSY wstawienie] STUDENT: Powrót do zera. JASON Hirschhorn: Zwraca true. STUDENT: Zwraca true. JASON Hirschhorn: Michael, co to linia zrobić? STUDENT: [niesłyszalne] prowadzi program jej przebieg, a to jest ponad, i masz co trzeba zrobić? JASON Hirschhorn: program czy co? W tym przypadku? STUDENT: funkcja. JASON Hirschhorn: funkcja. I tak, aby powrócić do tego, co nazywa się go i nadać jej wartość, prawda. Dokładnie tak. Główny. Co jest typ zwracany z głównym, Michael? STUDENT: int liczba całkowita? JASON Hirschhorn: int, dokładnie. Całkowitą. To była tylko kwestia, aby upewnić wy były na wierzchu. Co to zazwyczaj powrócić, jeśli wszystko pracuje dobrze? STUDENT: zero. JASON Hirschhorn: zero. Dokładnie tak. STUDENT: Jeśli to tylko zwraca true, nie ma informacji poświęca o tym, co - Och, to jest po prostu mówiąc, że wartość jest w środku tablicy. JASON Hirschhorn: Dokładnie. Ten program nie jest udzielanie informacji gdzie dokładnie wartość. To tylko mówiąc, tak, okazało się, to, czy nie, nie to znaleźć. Jeśli więc znaleźć numer, zwraca true. Cóż, tak naprawdę to zrobiłam naprawdę szybko z tej jednej linii kodu. Więc przenieść tę linię Pseudokod. Student: Nie musimy zmiany tablicy? Powinny być wartości, a nie wartość, prawda? JASON Hirschhorn: Przepraszam. Dziękuję. Uczeń: Tak. JASON Hirschhorn: Ta linia powinny być wartości. Dokładnie tak. OK. Więc my spojrzał na liście średniej. Jeśli liczba znalezionych powrót prawda. Kontynuując z naszej Pseudokod, jeśli środkowa jest wyższa, wyszukiwanie w lewo. Więc musiałem się tutaj, jeśli liczba wyższa, wyszukiwanie w lewo. Konstantyn, możesz dać mnie ta linia kodu? STUDENT: Jeśli wartość środku - JASON Hirschhorn: Więc jeśli wartość - jeśli wartości wspornik otwarty nawias Uchwyt środkowy blisko - STUDENT: jest mniejsza niż wartość? JASON Hirschhorn: Czy mniej niż. STUDENT: Mniej niż wartości. JASON Hirschhorn: Wartość. Cóż, tak naprawdę, chcesz sprawdzić, czy numer - Przepraszam. To jest trochę mylące. Ale inny, jeśli liczba w środku listy jest większa. STUDENT: Oh, OK. JASON Hirschhorn: ja zmienić. Else if środkowa jest wyższa, mamy Aby wyszukać lewo, OK? A co robimy wewnątrz tego, czy warunek? Uczeń: Czy mogę zrobić małe zmiany Stan, zmień go na inny, jeśli? JASON Hirschhorn: if? OK. Więc ten kod zostanie wykonany o taki sam. Ale Zaletą korzystania, jeśli jeszcze jeśli if lub if, else if, else Oznacza to, że tylko jeden z nich będzie być sprawdzone, nie wszystkie trzy, potencjalnie. I to sprawia, że ​​trochę ładniejszy na komputerze, który jest uruchomić program. Tak [? Konstantyn,?] jesteśmy w środku tej linii, inny, jeśli wartości, Uchwyt Uchwyt środkowy blisko jest większa niż wartość. Co musimy zrobić? Musimy sprawdzić w lewo. Jak to robimy? Mam zamiar dać początek. Mamy te dwie rzeczy nazywane początek i koniec. Więc to, co musi się zdarzyć na początek? Jeśli chcesz sprawdzić lewej lista, mamy naszą aktualną początek. Co trzeba zrobić? STUDENT: Ustawiamy początek na środku plus 1. JASON Hirschhorn: Więc jeśli jesteśmy wyszukiwanie w lewo? STUDENT: Niestety, w środku minus - więc zakończenie będzie w średnim minus 1 i początek - JASON Hirschhorn: I co dzieje się na początku? Student: To pozostaje taka sama. JASON Hirschhorn: Tak sens pozostaje ten sam. Jeśli mamy wyszukiwanie w lewo, jesteśmy z użyciem takiego samego początku - Dokładnie tak. I kończąc? Niestety, to, co robi kończąc równa ponownie? STUDENT: Bliski minus 1. JASON Hirschhorn: Bliski minus 1. Teraz, dlaczego minus 1, a nie tylko w średnim? STUDENT: środkowa jest z obraz już, bo mieliśmy zaznaczone, że jest to obecnie? JASON Hirschhorn: To Dokładnie tak. Bliski jest z obrazu. Mamy już sprawdzone pola. Więc nie chcemy "pola", cytat cytatu, aby nadal być w Tablica szukamy. Więc to jest fantastyczne. Else if wspornik środkowy jest większe wartości niż wartość kończąc równych Bliski minus 1. Jeff, co z tym ostatnim wierszu? STUDENT: Else. Wartości jest mniejsza niż środkowa wartość? JASON Hirschhorn: będziemy dajesz mi innego. Tak więc, jeśli nie dasz mi - Uczeń: Tak więc zaczynając będzie środkowa oraz 1. JASON Hirschhorn: Początek równi środkowy oraz 1 znów do tego samego Dlatego, że Konstantyn dał nam wcześniej. I na koniec, który nie dał ja jeszcze linijka kodu? Return false, Aleha, co Nie piszemy tutaj? STUDENT: return false. JASON Hirschhorn: return false. Musimy to zrobić, bo jeśli nie go znaleźć, trzeba powiedzieć, że nie go znaleźć. A my powiedzieliśmy, że będziemy wracać bool, więc na pewno trzeba zwrócić gdzieś bool. Więc ten kod. Jestem rzeczywiście będzie - więc jesteśmy w terminalu. Będziemy wyczyścić nasze okno. Zróbmy wszystko. Okazało się, że jeden błąd. Jest błąd na linii 15, oczekuje średnik na końcu deklaracja. Więc co mam zapomnieć? STUDENT: średnikiem. JASON Hirschhorn: średnik aż tutaj. Myślę, że był kod Toma. Więc Tom, [niesłyszalne]. Tylko żartowałem. Niech robią wszystko ponownie. Student: Co katalogu Dropbox powinniśmy być w tej sprawie? JASON Hirschhorn: Więc można tylko oglądać do tego kawałka. Ale znowu, jeśli chcesz, aby przenieść ten kod do katalogu pset3 spróbować go, że to, co zrobiłem. Jeśli zauważysz tutaj - Niestety, dobre pytanie. [? LS,?] Mam tutaj kod find.c z tego tygodnia kodu distro. Mam helpers.h. Mam plik Marka, że ​​rzeczywiście edytowane trochę włączyć te nowe Pliki piszemy. Wszystkie tego kodeksu będzie dostępna, nie Kod dystrybucji, ale nowy Dodać plik, będzie nowy plik helpers.h być dostępny w sieci do pobrania. Ponownie, tak to są dodatkowe kody mamy. Więc zrobić wszystko, na tej linii sprawia, że ​​znalezienie, binarny, wybór bubble - marki wszystkie trzy z nich i kompiluje się kod wykonywalny znaleźć. Tak ogólnie, nie chcemy się prosto do check50. Chcemy przeprowadzić kilka testów na własną rękę. Ale tylko tak możemy przyspieszyć ten kawałek, check50 2013 pset3.find przejdzie w helpers.c-- mój błąd. Nie mam tego teraz. Więc jesteśmy rzeczywiście będzie uruchomić kod na prawdziwe. Usage.find /, wiesz, co to oznacza? STUDENT: Musisz sekund Wiersz polecenia na nim. JASON Hirschhorn: Potrzebuję Drugi wiersz poleceń. I wg specyfikacji, muszę wejść, co szukasz. Więc spójrzmy na 42. Będziemy je posortowane, bo nie zostały jeszcze napisane funkcję sortowania - 42, 43, 44. I sterowania D nie znaleźliśmy igła w stogu siana. To jest złe. To na pewno nie. Spróbujmy czegoś innego. Może to dlatego, że szuka że na początku. Zróbmy 41, 42, 43. Nie idziemy. Okaże się to. Połóżmy go na końcu teraz, po prostu więc możemy być dokładny - 40, 41, 42. Nie możesz znaleźć igłę. Więc wspomniałem o tym wcześniej. Niestety, wiedziałem, że to się wydarzy. Ale dla celów pedagogicznych, warto go zwiedzić. To nie działa. Z jakiegoś powodu, nie może go znaleźć. Wiemy, co tam jest, ale nie przekonują go. Więc jedno możemy zrobić, to przejść przez GDB, aby go znaleźć, ale czy ktoś, bez przechodzenia przez GDB, mają Poczucie gdzie wkręca się? [? Madu? ?] Student: Myślę, że to może być, gdy kończy odpowiada początkowi i jest tylko jednego elementu listy. Wtedy to po prostu ignoruje go zamiast faktycznie sprawdzenie go. JASON Hirschhorn: To Dokładnie tak. Gdy końcówka jest równa początek, mamy jeszcze element w naszej liście? Uczeń: Tak. JASON Hirschhorn: Tak, w rzeczywistości, mają jeden i tylko jeden element. , A najprawdopodobniej zdarzyć, gdy za kodem testowaliśmy, jesteśmy na przód lub w stogu siana Koniec stogu siana. To miejsce, gdzie początek i zakończenie będzie równe jeden z wyszukiwania binarnego. Tak więc w obu tych przypadkach nie działa, ponieważ zakończenie wynosiła początku. Ale jeśli końcowy jest równa początku ma ta pętla wykona? Nie. I mogliśmy sprawdzone że znowu przez GDB. Więc jak możemy rozwiązać ten kod, ponieważ podczas gdy zakończenia jest równa począwszy, chcemy również tego pętla do uruchomienia. Więc co możemy zrobić poprawki do linii 18? STUDENT: [niesłyszalne] jest większa niż lub równe. JASON Hirschhorn: Dokładnie tak. Podczas gdy końcówka jest większa niż lub równa początku. Więc teraz, mamy pewność, aby ta Przypadek rogu na końcu. I zobaczmy. Niech uruchomić ten jeden raz. Zróbmy wszystko. Ponownie, będziesz musiał po prostu podążać tutaj. Znajdź 41 tym razem. Po prostu to spójne. Znajdź 42. Złóżmy to na początku - 42, 43, 44. Znaleźliśmy go. Tak, że rzeczywiście zmiana musimy zrobić. To było dużo my kodowania po prostu nie, wyszukiwanie binarne. Czy ktoś ma jakieś pytania przed I przejść do linii pisaliśmy w wyszukiwanie binarne i jak doszliśmy z tego, co udało dowiedzieć? Zanim przejdziemy dalej, chciałbym również podkreślić się, że w ujęciu, mamy odwzorowane nasz pseudo-kod jeden do jeden na nasz kod. Mieliśmy to trudne rzeczy dowiedzieć się, z początek i koniec. Ale już nie zorientowali, że się, jesteś napisałby prawie identyczny kod, za wyjątkiem te dwie najlepsze linie. I wtedy, gdy zostały zrealizowane udało ci się w kontroli i spraw, które trzeba coś jeszcze. Więc nawet jeśli nie po naszej Pseudo-kod linii na linię, to masz zdobyć wszystko, ale dwóch linii kod potrzebny do napisania. I byłbym skłonny się założyć, że chłopaki by się zorientowali, że się wszystko dość szybko, że trzeba umieścić jakiś tam znacznik, aby dowiedzieć się, gdzie jesteś. Że znowu jest moc robi pseudo-kodu przed czasem. Więc co możemy zrobić logikę, a potem możemy się martwić o składni. Gdybyśmy zostali wprowadzeni w błąd na temat logiki , starając się napisać kod w C, by nam się zdobyć wszystko pomieszane. A potem my się pytania o logika i składnia i siatki je wszystkie razem. I chcemy zdobyć zaginione w tym, co może szybko stać się bardzo trudny problem. Więc przejdźmy teraz do wyboru rodzaju. Mamy 20 minut przed końcem. Tak, mam wrażenie, że nie będzie w stanie przejść przez wszystkie wyboru rodzaju i sortowanie bąbelkowe. Ale niech nam przynajmniej próba , aby zakończyć wybór rodzaju. Więc wdrożyć wybór sortowania przy użyciu następujących deklaracji funkcji. Ponownie, to jest z Problem ustawić specyfikację. Wartości int jest wsporniki, jest tablica liczb całkowitych. I int.n jest rozmiar tej tablicy. Wybór sortowania będzie aby posortować tę tablicę. Więc na nasze psychiczne modelu wyboru sortowania, możemy wyciągnąć - Najpierw idziemy listę pierwsza czas, znaleźć najmniejszą liczbę, umieścić go na początku, znaleźć drugą Najmniej, umieścić go w Druga pozycja, jeśli chcemy sortowania w porządku rosnącym. Nie zmusza do pisania pseudo-kod teraz. Ale zanim to zrobimy, jak kod w klasie pięć minut będziemy pisać pseudo-kodu, więc mamy pewne poczucie od tego, gdzie jedziemy. Więc próbuj pisać pseudo-kod na własną rękę. A następnie próbować to zmienić pseudo-kodu do kodu. Zrobimy to w grupie w ciągu pięciu minut. I oczywiście, daj mi znać, jeśli masz jakieś pytania. Student: To prawda? JASON Hirschhorn: Zobacz jak daleko można uzyskać w dwóch minut. Rozumiem, że nie będzie w stanie zakończyć. Ale pójdziemy na to jako grupa. Masz wszystko kodowania tak [niesłyszalne], więc jestem Przepraszamy, aby zatrzymać to, co robisz. Ale idziemy przez to jako grupa. I znowu, wyszukiwanie binarne, to wszystko daje ja jeden, jeśli nie więcej linii kodu. Dziękujemy za to. Mamy zamiar zrobić to samo Tutaj kodu razem w grupy. Więc wybór sortowania - napiszmy niektóre szybkie pseudo-kod. Na modelu psychicznego, może ktoś mi dać Pierwsza linia pseudo-kodu, proszę? Co chcę zrobić? STUDENT: Chociaż lista jest w porządku. JASON Hirschhorn: OK, a Lista jest w porządku. A co masz na myśli "w porządku?" STUDENT: Podczas [niesłyszalne] nie zostały posortowane. JASON Hirschhorn: Chociaż lista jest w porządku, co robimy? Daj mi drugą linię, proszę, Marcus. STUDENT: Więc znaleźć następne najmniejsza liczba. To będzie wcięty. JASON Hirschhorn: Więc znaleźć następna najmniejsza liczba. A potem ktoś inny? Po znaleźć następna najmniejsza liczba, co robimy? Idę powiedzieć znaleźć najmniejsza liczba. To jest to, co chcemy zrobić. Więc znaleźć najmniejszą liczbę. To co robimy? STUDENT: [niesłyszalne] do początku. JASON Hirschhorn: Przepraszam? STUDENT: Umieścić w początku listy. JASON Hirschhorn: Więc umieścić go w początek listy. I co robimy na rzecz to było na początku z listy, prawda? Jesteśmy nadpisywania coś. Więc gdzie stawiamy, że? Tak, Anno? Student: Gdzie najmniejsza Numer był? JASON Hirshhorn: Więc umieścić początek z wykazu, gdzie Najmniej było. Tak więc, podczas gdy lista jest w porządku, znaleźć najmniejsza liczba, należy umieścić go w początek listy, umieść początku listy, w których Najmniej było. Marcus, można przeformułować tę linię podczas gdy lista jest w porządku? STUDENT: Podczas gdy liczba nie zostały posortowane? JASON Hirshhorn: OK, więc w celu wiedzieć, że numery nie zostały sortowane, co musimy zrobić? Ile musimy przejść tej liście? STUDENT: Więc chyba na pętli, lub podczas, gdy liczba jest mniejsza sprawdzone od długości listy? JASON Hirshhorn: OK, to dobrze. Myślę misphrased moje pytanie źle. Chciałem tylko, aby w będziemy musieli iść całej listy. Tak więc, podczas gdy lista jest w porządku, dla mnie jest trudne do mapy na. Ale w zasadzie, to jak Myślę o tym. Przejść przez całą listę, znaleźć najmniejsza liczba, należy umieścić go w począwszy - faktycznie, masz rację. Postawmy ich obu. Tak więc, podczas gdy lista jest w porządku, my trzeba przejść przez całą listę raz, znaleźć najmniejszą liczbę, miejsce to na początku listy, umieść początek listy gdzie Najmniej było, a następnie, jeśli Lista jest nadal w porządku, mamy iść przez to Proces ponownie, prawda? Dlatego wybór rodzaju, Big-O Runtime od wyboru rodzaju, ktoś? STUDENT: n do kwadratu. JASON Hirshhorn: n do kwadratu. Bo jak Marcus i zdałem sobie sprawę, tu, będziemy musieli przejść przez listę listę liczbę razy. Tak przeżywa coś w Długość n n liczbę razy jest w rzeczywistości n do kwadratu. Więc to jest nasz pseudokod. To wygląda bardzo dobrze. Czy ktoś ma jakieś pytania o Pseudokod? Bo rzeczywiście wybór sortowania powinny Prawdopodobnie pochodzą 12:59, kodu z pseudokod. Więc wszelkie pytania dotyczące logika Pseudokod? Proszę zapytać go teraz. Wybór sortowania - a lista jest obecnie porządku, będziemy przechodzić przez to i znaleźć najmniejszą każdym i umieścić go z przodu. Tak więc, podczas gdy lista jest w porządku, może ktoś dał mi ten wiersz kodu, który nie dał mi wiersz kodu jeszcze, proszę? To brzmi jak co? Student: To dla pętli. JASON Hirshhorn: To brzmi jak dla pętli. OK, możesz dać mi do pętli? Na - STUDENT: i jest równa 0. JASON Hirshhorn: i czy - Co nam brakuje? Co się dzieje tutaj? STUDENT: Int.. JASON Hirshhorn: Dokładnie. (Int i = 0; - STUDENT: i