>> 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 <n, i + +).
>> JASON Hirshhorn: Nailed to, Jeff.
Jedziemy przez liście, prawda?
Widzieliśmy, że kod wcześniej.
Idealny.
Więc postawmy nasze nawiasy klamrowe tutaj.
Mam zamiar umieścić kilka nawiasy klamrowe tutaj.
>> Tak więc, jest to 0, musimy przejść przez całą listę.
Więc za każdym razem idziemy przez liście, co chcemy śledzić?
>> STUDENT: Jeśli jakieś swapy są wykonane.
>> JASON Hirshhorn: Znajdź najmniejsza liczba.
Powinniśmy więc chyba śledzić Najmniej za każdym razem.
Więc linia mogę zrobić, aby śledzić najmniejszej liczby?
Aleha, w jaki sposób można zachować utwór z czymś?
>> STUDENT: Rozpocznij nową zmienną.
>> JASON Hirshhorn: Rozpocznij nową zmienną.
Więc stwórzmy zmienną.
Jaki rodzaj?
>> STUDENT: Int..
>> JASON Hirshhorn: Int..
Nazwijmy to najmniejsza.
I co prawda równe, gdy my dopiero zaczynasz?
Nie przeszły jeszcze listy.
Jesteśmy w pierwszej części listy nasz pierwszy raz dzięki.
Co prawda równe, najmniejsza liczba?
>> STUDENT: wartości i.
>> JASON Hirshhorn: wartości i.
To brzmi dokładnie prawo, prawda?
Najmniej na początku to, gdzie jesteśmy.
Więc teraz mamy nasz najmniejszy, i musimy przejść przez całą listę i
porównać to najmniejsza do wszystkiego innego.
Więc idziemy listę jeszcze raz?
Michael?
>> STUDENT: Musisz zrobić kolejny na pętli.
>> JASON Hirshhorn: Kolejna pętla.
Zróbmy to.
Daj mi jakiś kod.
>> UCZEŃ: Na pętli -
na najmniejszy -
tylko int j, można powiedzieć?
= 0, tak że -
>> JASON Hirshhorn: Cóż, jeśli chcemy przejść przez całą listę -
>> STUDENT: j <n, j + +).
>> JASON Hirshhorn: Fantastic.
Mamy zamiar przejść przez do pętli ponownie.
I jak znaleźć najmniejsza liczba?
Tom?
Posiadamy aktualną najmniejszą liczbę, Jak więc znaleźć nowy najmniejszy?
>> STUDENT: Możemy sprawdzić, czy najmniejszy Numer mamy jest większa niż
wartości uchwytu j.
>> JASON Hirshhorn: Więc jeśli jest najmniejsza większe niż wartości uchwytu j.
Więc jeśli nasz obecny najmniejsza jest większa niż -
Mam zamiar przenieść te dwie linie kodu tam na chwilę.
Bo przed nami żadnych swapping, my trzeba przejść przez całą listę.
Więc to pseudokod powinien właściwie na zewnątrz, że wewnętrzna pętla for.
Tak więc przejść przez całą listę.
Jeśli jest większa niż najmniejsza wartości j, to co?
>> Uczeń: Zatem najmniejsza równa wartości j.
>> JASON Hirshhorn: Fantastic.
Jedno szybkie pytanie -
Pierwszy raz przejść przez tę pętlę, I będzie równa 0, j będzie
równa 0 raz mamy tutaj.
Więc idziemy do porównania numer siebie.
Jest to, że wydajny?
Nie, to naprawdę nie jest wydajny.
Tak ma nasz j trzeba iść od 0 do n każdorazowo?
Czy zawsze należy sprawdzić całą listę?
[Niesłyszalne]?
>> STUDENT: Start z I zamiast.
>> JASON Hirshhorn: j puszka zacząć od czego?
>> Student:.
>> JASON Hirshhorn: j może zacząć i.
Teraz porównujemy począwszy z jednej Jesteśmy na.
Ale nawet wtedy, jest to, że jako efektywny, jak to możliwe?
>> Student: + 1.
>> JASON Hirshhorn: i + 1 wydaje się być Najbardziej skuteczne, ponieważ
już ja.
Jesteśmy stwierdzając, że jako najmniejsza w linii 15.
Jedziemy na początek Kolejny automatycznie.
Więc przechodzimy do pętli.
Pójdziemy za każdym razem.
Pojedziemy przez liczbę razy.
Teraz staliśmy się przez Ta wewnętrzna pętli.
Mamy najmniejszą wartość oszczędza.
Musimy umieścić go w początku listy.
Więc jak mogę umieścić go na początku listy?
Co to jest zmienna, która odnosi na początku listy?
Jesteśmy w tej zewnętrznej pętli for, więc to, co odnosi się do
początku listy?
>> STUDENT: wartości i.
>> JASON Hirshhorn: Dokładnie tak.
Wartości i jest początkiem -
i przepraszam, nie początek.
To było dziwne.
To gdzie my jesteśmy na początku nieposortowane część listy.
Więc wartości i.
I co to są równe?
>> STUDENT: Najmniejszy.
>> JASON Hirshhorn: wartości i równa co?
>> STUDENT: Najmniejszy.
>> JASON Hirshhorn: Najmniejszy.
Dokładnie tak.
Więc my umieszczenie go na początku z listy, a teraz musimy postawić
początek listy gdzie Najmniej było.
Więc jak mam napisać, gdzie Najmniej było?
Wartości co?
>> STUDENT: 0.
>> JASON Hirshhorn: mały Numer znajduje się na 0?
>> Uczeń: Tak.
>> JASON Hirshhorn: Co zrobić, jeśli najmniejsza liczba była pod koniec
to nieposortowane listy?
>> Student: Przepraszam, jakie było pytanie?
>> JASON Hirshhorn: Gdzie jest najmniejsza liczba?
Wzięliśmy najmniejszy i umieścić go w począwszy, z tej linii tutaj.
>> STUDENT: Należy mieć przechowywano w niektórych -
>> STUDENT: wartości j.
>> JASON Hirshhorn: Dobrze, to jest niekoniecznie ceni j.
To nawet nie istnieje w tym momencie.
>> STUDENT: Musisz zadeklarować wcześniej i zmienna
a następnie przypisać ją do -
gdy znajdziesz najmniejszą liczbę, przypisać wskaźnik tej liczby
niektóre zmienne lub coś w tym stylu.
>> JASON Hirshhorn: Więc może można powiedzieć, że znowu?
>> STUDENT: Więc, gdzie oświadczył, int najmniejsza, należy również zadeklarować int
Najmniejszy wskaźnik = i, lub coś w tym stylu.
>> JASON Hirshhorn: Więc gdzie mam int najmniejsza, należy śledzić nie tylko
wartości, ale miejsce.
int smallest_location = w tym przypadku, po prostu nie mogę.
Musimy wiedzieć, gdzie to jest.
Dotarliśmy do końca kodu, a my sobie sprawę, że nie miał pojęcia, gdzie to było.
A więc znowu mamy odwzorowanie to na jeden do jednego.
Wy kodowania to na własnej woli prawdopodobnie się do tego samego problemu.
Jak do cholery mam go odnaleźć?
I wtedy zdajesz sobie sprawę, czekać, trzeba śledzić, że.
>> Więc jeśli najmniejsza jest większa niż wartości j.
Stawiamy najmniejsza równa wartości j.
Co jeszcze trzeba zmienić?
Constantin, co jeszcze zrobić, musimy zmienić?
>> STUDENT: lokalizacja.
>> JASON Hirshhorn: Dokładnie.
Więc daj mi tę linię w kodzie.
>> STUDENT: smallest_location = j.
>> JASON Hirshhorn: Dokładnie.
, A następnie w dół na koniec, jeśli chcemy umieścić na początku listy, w których
Najmniej było, jak Nie mamy na myśli, gdy
Najmniej było?
Marcus?
>> STUDENT: Najmniej było położony w najmniejszym miejscu.
>> JASON Hirshhorn: Więc na wartości smallest_location.
A co my tam umieścić?
Początek lista, co to jest?
>> STUDENT: Cóż, naprawdę nie wiem ponieważ już mamy nadpisałeś.
Więc jest to zamienione lokalizacje z tych dwóch linii?
Jeśli zmienisz te dwie linie wokół.
>> JASON Hirshhorn: OK, więc nie mamy więcej, ponieważ mamy zresetować linię
przed wartościami i do najmniejszego.
Więc straciliśmy tę wartość początkową.
Więc powiedział Swap te dwie linie.
Więc teraz umieścić początek listy gdzie najmniejsza liczba była.
Więc smallest_location równa wartości i.
Który rusza na początku tego nieposortowane część listy do
Najmniejszy lokalizacja.
A następnie na wartości i ruszamy że najmniejsza liczba.
>> Czy to ma sens, dlaczego musiał dokonać tej wymiany?
Byśmy nadpisane tej wartości - inna rzecz, że prawdopodobnie będzie musiał
zorientowali się i znaleźć w PKB.
Więc mamy pod opieką wszystko pseudokod.
Czy coś jeszcze możemy trzeba pisać tutaj?
Czy ktoś może myśleć o niczym?
>> STUDENT: Skąd wiesz, że kiedy skończysz?
>> JASON Hirshhorn: Jak możemy wiem kiedy skończymy?
Wielkie pytanie.
Więc skąd mamy wiedzieć, kiedy skończymy.
>> STUDENT: Tworzenie zmiennej, aby utrzymać liczbę o jeśli jest wykonana lub nie wymiany
i przejść przez przełęcz.
>> JASON Hirshhorn: OK.
, Że będzie działać w bubble rodzaju.
Ale dla wyboru rodzaju, jeśli tego nie zrobimy zrobić swap, że może być tylko
ponieważ najmniejsza wartość jest w tym jego położenie.
Możemy mieć listę 1, 2, 4, 3.
My raz drugi przez nie będzie żadnych swapów.
Będziemy z numerem 2, ale będzie nadal trzeba iść dalej.
Więc nie musimy śledzić, kiedy skończymy, czy też po prostu chcesz iść
dopóki ta jest zakończona?
>> STUDENT: Możemy pójść przed jego zakończeniem.
>> JASON Hirshhorn: Możemy tylko go, aż ten się skończył.
W sortowanie bąbelkowe, jesteś dokładnie prawo, Jeff i Aleha, z roztworu -
to jest wielki, aby śledzić, ile Swapy zrobiłeś, bo w bańce
sortowania, jeśli nie w tym, aby nie swapy, gotowe i można może obniżyć
Problem nieco w dół.
Ale dla wyboru rodzaju, masz naprawdę iść aż do końca
listy za każdym razem.
>> Więc to jest to.
Mamy dwie minuty.
Zróbmy wszystko.
Pozwólcie mi tylko otwarte Znajdź tutaj i zrobić pewien jestem w rzeczywistości wywołanie -
Nie nazywam sortowania bąbelkowego.
Zmieńmy to do wyboru rodzaju.
zrobić wszystko. / znaleźć.
Przekonajmy 42.
Tym razem mamy zamiar przejść nieposortowane listy, ponieważ powinien posortować
Najpierw, za kodem find - powinny sortować Najpierw za pomocą naszej funkcji sortowania, a następnie
szukać czegoś.
Kciuki wszystkich.
>> O mój Boże.
Wow, moje serce biło.
Tak, że jest poprawne.
W rzeczywistości, gdyby zabrakło tego więcej szeroko, kod, o ile mogę
powiedzieć, jest całkowicie prawidłowe.
Istnieją pewne sugestie Chciałbym mieć dla ciebie.
Na przykład, 15 i 16 wydają trochę zbędne.
Wydaje się, że nie muszą należy zapisać zarówno tych.
Jeśli masz najmniejszą lokalizacji, można łatwo znaleźć przez najmniejszą wartość
wpisując wartości i.
>> Więc jeśli miałbym być klasyfikacji kodu, które będę w rzeczywistości, chciałbym
prawdopodobnie zdjąć punkt, jeśli zawarte zarówno z nich, ponieważ
nie trzeba oba te.
Jeśli masz miejsce, można bardzo łatwo uzyskać wartość.
I wydaje się trochę dziwne przechowywanie ich obu.
Może nawet nie ma punktu, ale oczywiście komentarz, że jest to być może
nie stylistyczne wybór trzeba zrobić.
Oczywiście, nadal kod działa doskonale.
>> Więc niestety nie dostać się do bańki rodzaju.
Przykro mi z tego powodu.
Zrobiliśmy wyboru mety rodzaju.
Czy ktoś ma jakieś pytania końcowe o wybór rodzaju?
>> OK, zanim głowę, chcę ci otworzyć przeglądarkę Chrome.
Niestety, to było po prostu rażącym wtyczka dla jednego typu przeglądarki internetowej.
Możesz otworzyć dowolny typ przeglądarki, ale to prawdopodobnie Chrome.
I idź do tego stronie internetowej -
sayat.me/cs50.
Jeśli nie masz na komputerze, wpisując teraz, jesteś wyraźnie
nie robi, Tom.
>> I proszę to zrobić albo w prawo obecnie lub w ciągu godziny -
daj mi trochę informacji zwrotnych.
To jest tylko punkt dwa.
Mamy o wiele więcej razem, więc dużo miejsca do poprawy.
I mam nadzieję, że również nie dobrze pewne rzeczy.
Więc możesz mnie poczuć złe, ale jeśli chcemy także dać mi buźkę
twarz, byłbym wdzięczny, że dobrze.
Wypełnij że w.
>> I jedną minutę w lewo, To było trzy tygodnie.
Będę stać na zewnątrz na trochę jeśli masz jakiekolwiek pytania.
Do zobaczenia chłopaki w wykład jutro.