ROB: W porządku. Zapraszamy do pierwszej części. Jestem Rob. JOSEPH: Jestem Józef. ROB: Tak będziemy nurkować w prawo w. Pierwszą rzeczą, aby porozmawiać o jest urządzenie. Więc mam nadzieję, że większość z was ma Ściągnąłem go już. Ale można znaleźć w instrukcji w cs50.net/appliance. O Boże, teraz jestem skrępowany. Wciąż słyszę go. JOSEPH: Wow, to brzmi jak jest zdezorientowany. ROB: Tak niektórzy ludzie zostały konieczności problemy z nim, więc nie czekaj, aż w ostatniej chwili problemu ustawić spróbować rozwiązać urządzenia i dowiedzieć się, że to nie działa. JOSEPH: A jeśli coś nie działa i potrzebujesz pomocy, możesz przejść do cs50.net/discussion gdzie forum, na którym można może zamieścić swoje pytania. A my się do nich w końcu. ROB: W porządku. Więc to jest to, co Appliance wygląda. Ponownie, jest to po prostu całkowicie oddzielne System operacyjny działa w ramach niezależnie od systemu operacyjnego są wyświetlane na komputerze przenośnym. I najważniejsze rzeczy, które będziesz używać są gedit. Więc mam nadzieję, że to już ma się znajome miejsce. Terminal. Można także uruchomić Chrome wewnątrz urządzenia. Nie było kilka osób którzy zgłaszali internet nie działa w urządzeniu. A niektóre z nich po prostu założyć, który nie powinien być Internet w urządzeniu. Ale tak, nie ma być internet. Powiem to teraz, ale tak nie jest naprawdę znaczy. Jeśli internet nie działa, to jest to, co zwykle trzeba uruchomić go naprawić. Jeśli masz problemy z Internetu, nie Pamiętam go, po prostu po to na Omówić, i powiemy, uruchom to. Ale internet powinien działać. Więc jedyną rzeczą - tak, nic inne jest naprawdę istotne. Ale chciałem tylko zaznaczyć, że - zobacz w tym dolnym prawym rogu. Więc każdego z urządzeń powinny posiadać adres IP. I później w semestrze, w tym IP adres będą bardziej istotne, gdy Podczas pracy w sieci p-set, ponieważ będzie można uzyskać dostęp do strona pracujesz dalej od Twojego lokalne Chrome przy użyciu tego adresu IP. Ale to, co lubię używać adresu IP na - i nie musisz tego robić, ja po prostu chcą zwrócić na to uwagę - jest tutaj. Więc to jest okno terminala na mój Mac, to nie jest w Urządzenie w ogóle. I można sprawdzić, co ta komenda. Ale mam zamiar SSH bezpośrednio do mojego Appliance. Nie wiem, co to jest IP. JOSEPH: 168 - 168.224.1.0. ROB: Tak raz skończę z tego, zaloguj Teraz, w zasadzie, jest identyczna okno terminalu w moim Appliance. Tak więc w rzeczywistości prawie nigdy nie pracował z poziomu samego urządzenia. Ja po prostu zawsze to działa w tle zminimalizowane i SSHed do niego. Problem z tym jest nie zamierzasz aby móc łatwo używać gedit bezpośrednio z tego. Ale jeśli chcesz być prawdziwym fajne Haker, to należy się przyzwyczaić do Edytor tekstu wiersza poleceń i tak. Vim i Emacs tak i Nano, wszystkie te są różne alternatywy. Nano wydaje się być najprostszym. I myślę, że nie ma podświetlanie składni. Och, nie, to nic nie robi. Więc możesz użyć Nano, ponieważ że jeden jest całkiem proste. Widzisz te wszystkie polecenia na dole. Ten mały symbol marchewka. Jeśli nie widziałeś wcześniej, będziesz zapewne bardzo dużo teraz. Zazwyczaj oznacza marchew sterowania, jak w dolnej lewej części klawiatury znak kontrolny. Więc to mówi mi tu - Och, to nie jest odcięte, jeśli powiększyć obraz Więc sterowania, X jest jak Zamierzam wyjść. I mówi, mogę trafić Y dla Tak, dla oszczędności, N na Nie. Więc to jest Nano. Vim i Emacs wydają się być nieco bardziej skomplikowane i przytłaczające. Ale można się do tego przyzwyczaić, a potem będziesz go kochać. Tak, to jest to. JOSEPH: Nie ma potrzeby, aby to zrobić. ROB: Tak. Jesteś wolny, aby używać gedit dla Pozostała część semestru. Więc wszelkie pytania związane appliance-? Lub masz jakieś przemyślenia na temat tego, co jeszcze musi być powiedziane o około urządzenie? Tak. GŁOŚNIK 1: Po SSHed do swojej rzeczą, był Crimson hasło? ROB: Tak. Hasło dla prawie wszystko w urządzeniu będzie być Crimson. Głośnik 2: Zainstaluj jak prawdziwy IDE na urządzeniu, to będzie działać? ROB: Wyobrażam sobie, Eclipse ma Wersja Fedory, w tym przypadku, tak, można to zrobić. To chyba nie warto. Głośnik 2: OK. Więc to chyba łatwiej gdybym chciał używać Eclipse, wystarczy użyć rodzimych i a następnie przesłać do - ROB: Och, to jest chyba łatwiej. Ale możesz dostać pracy wewnątrz urządzenia. JOSEPH: A do kamery, pytanie był, można zainstalować inny IDE wewnątrz urządzenia? ROB: Eclipse jest Przykładem IDE. Wszelkie inne pytania Urządzanie? Dobrze. Więc my teraz przejść do wiersza poleceń rzeczy związanych z interfejsem, więc CLI. I znowu, po prostu przechodząc do pracy w Tutaj, ponieważ jest identyczna pracy w oknie terminala wewnątrz urządzenia. Jak to czcionki szuka? Jest to, że wystarczająco duża? Dobrze. Tak więc istnieje wiele poleceń, które należy stosować się do dość przez cały semestr. Duży dwa do nawigacji są ls, lista pliki w tym katalogu, oraz cd, więc zmienić katalog. Więc mogę zmienić na pulpicie, a następnie wzór jest bardzo powszechne na cd Katalog i natychmiast ls Co jest w tym katalogu. Ludzie czasami nie zdają sobie sprawy, że zakończenie Tab jest rzeczą. Tak jak cd, VH, a potem uderzył w tab. I prawie nigdy nie wpisać się Cała sprawa. A potem, jeśli naciskamy Tab ponownie, to będzie automatycznie rozpocząć ofertę dla mnie. Więc mogę cd vhosty, hosta lokalnego. I to właśnie będzie - w przypadku, gdy nie słyszeliście określenie przed, w katalogu jest tylko kolejnym słowem do folderu. Więc teraz, jeśli widzisz - niech wprowadzą, że do szczytu. Więc teraz, jeśli widzisz w nawiasach, to zobaczyć trochę tyldy, slash, vhosta, slash, hosta lokalnego. Więc tyldy, który odnosi do mojego katalogu domowego. To katalog jesteś w przypadku SSH w. Jest to katalog, gdy jesteś w otwierasz terminal. To miejsce, gdzie zacząć. I tak jestem w moim katalogu domowym, a ja jestem w środku vhosta katalog wewnątrz katalogu domowym. A ja jestem w środku lokalnej gospodarzem katalog wewnątrz tego. Więc kilka innych przydatnych rzeczy z CD - lub również, ogólnie, tak, dot zawsze odnosi się do bieżącego katalogu. Cd, kropka jest polecenie całkiem bezwartościowe. Ale to się zmienia, aby aktualny katalog. Bardziej użyteczny w odniesieniu cd jest kropka, kropka, która jest po prostu pójść do jednego katalogu. I pamiętać, że te - Chcę powiedzieć, aliasy, ale te symbole, kropka, i kropka, kropka, te prace na prawie każdym poleceniu jesteś będzie myślał o prowadzenie. Tak jak cd jest chyba gdzie będziesz stosując większość, ale nie są one rzeczy, które po prostu cd rozumie. To dość dużo coś cała Wiersz polecenia rozumie. Wiele programów zrozumieć kropka i kropka, kropka. Więc te - inne użyteczne cd, Dash. Tak, że przyniesie mi ostatni katalog, że jestem w. Więc czasem zrobię coś takiego, och, ja pracuję tutaj. I widzę jakiś błąd z czymś, i Pójdę zbadania go, przechodząc do jakiś przypadkowy katalog gdzieś. I nie wiem, czy to będzie niech mi tam. To będzie. Więc robię to, co chcę w tym katalogu. Bla, bla, bla, bla, bla. A ja na to: Dobra, chcę , aby wrócić do miejsca, gdzie byłem. cd, kreska, i to sprowadza mnie z powrotem. Więc mam zamiar rzucić dużo z nich na ciebie dzisiaj. Nie spodziewam się, aby zapamiętać wszystkie z nich. To trochę tak wiem że one istnieją. A później, gdy jesteś jak, hmm, chcę wrócić do katalog, że był po prostu w, oh, poczekaj, coś takiego istnieje. Nie możecie po prostu wpisać w Cały katalog ponownie. JOSEPH: I w końcu jesteś po prostu wykorzystywać je w kółko, i to będzie się pamięć mięśniowa. ROB: Tak. Tak jak powiedziałem wcześniej, że tylda jest katalogiem. Więc mogę cd, tyldy. Ale ja nawet nie mam do zrobić, jeśli po prostu - Wrócę do katalogu tak to nie jest bez sensu przykład. Ale jeśli po prostu zrobić cd, to również sam, udać się do mojego katalogu domowego. Zrobić dowództwo, K. JOSEPH: Możesz również wpisać jasne, słowo i powinien go usunąć. ROB: I myślę, że również kontrola, P robi to również. Tak wiele różnych sposobów. Myślę, że są pewne różnice, gdzie jasne i sterowania, L będzie tylko naprawdę przesunąć do góry i Wciąż mogę przejść z powrotem. Polecenie, K dosłownie niszczy wszystko, a ty Nie można przejść z powrotem. Przynajmniej, że jest jak to działa w iTerm2. Nie wiem, jak inne rzeczy - och. Z SSHing, więc jeśli jesteś w systemie Windows, będziesz musiał ściągnąć PuTTY w celu ssh ponieważ system Windows nie mają jak wbudowany SSH narzędzia. Z komputerami Mac, możesz po prostu SSH bezpośrednio z oknie terminala. OK. Pytania? Z ls, więc coś się przyzwyczaić większość z tych poleceń jest - Cóż, ja po prostu zrobić jeden. Ls, kreska, l. Tak kreska, l to, co będziemy zadzwonić flagę do ls. I wiele z tych komend mają flagi że można przejść do nich. Więc w tym przypadku, kreska, l jest flaga , który mówi to, aby dać mi pełne wykaz wszystkich informacji z tych plików. Widzimy więc tutaj, że na pulpicie było zmodyfikowana w dniu 30 lipca o 12:54. Pliki do pobrania został zmodyfikowany przy 6 września. Są to wielkości i bieżąca bajtów z tych katalogów. Nie musisz rozumieć wszystko. Te rzeczy po lewej, te drwx jest, , które stają się bardziej istotne później, gdy masz do czynienia z - że ma do czynienia z, który ma uprawnienia spojrzeć na te pliki. A więc jeśli nie było tylko na użytkownika ten komputer, by być w stanie słownie, OK, mam być tylko jeden mogą w tym pliku lub jestem zamierza umożliwić wszystkim się w tym pliku. Więc ktoś inny na moim komputerze Można w tym pliku. Ja nawet nie wiem co to - co to robić? JOSEPH: Nie jestem do końca pewien, faktycznie. ROB: Nie mam pojęcia. JOSEPH: Ale jeśli nie wiesz, nie ma pomocne polecenia, których można użyć powiedzieć, co oznacza wyjście. I po wpisaniu w człowieku przed poleceniem - tak M-N. ROB: Człowiek. Tak więc człowiek jest inny jest to bardzo użyteczne. A człowiek, ls. Więc strony man, mają zarówno Polecenia, które masz zamiar używać w wierszu polecenia, a także mają funkcje, które będą istotne z C. Tak więc można człowiekowi - i zignorowałem 3. Ale man 3 printf przyniesie do wersji C printf. Ale jeśli tylko zrobić człowiek printf, to jest zamiar przywołać printf polecenia , co dzieje się w wierszu poleceń. Tak więc człowiek, ls. Strony te mogą być dość przytłaczające. Tutaj jednak, zobaczysz ten wpis wszystkich tych flag, że ls rozumie. Więc jeśli idziemy do kreska, l, i - Mam zamiar wrzucić to na ciebie. Ale w celu poszukiwania, chcesz najpierw trafić na pytanie znak lub przycisk ukośnik. Więc slash. I wtedy mogę sprawdzić za to, co chcę. Więc mam zamiar ciąć na desce rozdzielczej, L. I tam było. Więc używać długiego formatu lista. To nie pomoże mi dowiedzieć się, co że zwłaszcza kolumna na myśli, ale ja zakładamy gdzieś tutaj by to wyjaśnić. Więc używać stron man dla każdego polecenia to, że nie od razu zrozumieć. Jestem pewien, że można nawet człowiek, mężczyzna. Interfejs do Online podręczniki referencyjne. Och, ostatni, który jest może nieco Istotne jest, ls, Dash. Więc zauważyć, jeśli tylko zrobić ls, Rozumiem te pięć plików. Jeśli zrobić ls, kreska,, I dostać dużo więcej plików. Więc rzeczą wspólną wszystkich tych nowych plików jest kropka wcześniej. Konwencja jest tak, że plik, który zaczyna się od kropki jest ukryta. Więc nie chcę widzieć, że plik, nie chcę go mieć bałagan z listą katalogów. To tylko wtedy, gdy wyraźnie zapytać, Wszystko w porządku, ls, kreska,, pokaż mi. Oznacza wszystkie pliki, w tym ukryte. Więc niektóre inne polecenia. Och, w tym momencie pytania? Tak. GŁOŚNIK 3: Po wykonaniu polecenia ls, , co jest kropka, kropka? ROB: Och. Więc to jest to, co mówi. To samo, gdy Może lubię cd, kropka, kropka. Więc technicznie, kropka i kropka, kropka Pliki, które istnieją w każdym pojedynczym Katalog, w którym odnosi się plik dot do bieżącego katalogu. Więc jeśli cd, kropka, mam zamiar na pobyt w katalogu. I kropka, kropka odnosi się zawsze do poprzedni katalog o jeden poziom w górę. Więc jeśli pójdę do dzienników i LS, kreska, inni, Zobaczę, kropka, kropka. cd do kropki, kropka doprowadza mnie do poprzedniego katalogu. Tak. OK. Więc kolejny bardzo ważne Polecenie rm. Więc to, co zamierzamy użyć do usunięcia. I pozwól mi faktycznie inny Komenda pierwszy. Tak mkdir. Mkdir jest to, jak można tworzenie katalogów. A ja utworzyć katalog tymczasowy i przejdź do tego katalogu tymczasowego. I zgodnie z oczekiwaniami, to jest puste. Ale jeśli ls I, kreska,, mam jeszcze kropkę i kropka, kropka, kropka, ponieważ odnosi się do aktualny katalog. I kropka, kropka odnosi się do poprzedni katalog. A ci, zawsze będzie istnieć, bez względu Katalog jesteś w. I to jest zupełnie niepotrzebne polecenie, ale dotyk. Ja tylko go używać, ponieważ jest to łatwy sposób na tworzenie plików. Tak dotykać, dotknąć b, c jest tylko dotknąć zamierza utworzyć trzy pliki o nazwie, b i c, które są całkowicie pusty. Więc punkt mnie w tworzeniu tych Pierwsze miejsce jest po prostu tak, że RM jest jak możemy je usunąć. Więc rm,. To się mnie zapytać, usuń regularne pusty plik? I wtedy powiem Tak. Więc jeśli wiem na pewno, że chcę usunąć ten plik bez konieczności być monit, usuń regularne pusty plik?, następnie rm, kreska, f będzie Zaznacz, że mówi, nie na siłę usuń nawet skłoniło mnie, oh, jesteś na pewno chcesz usunąć plik? Tak, jestem pewien. Więc rm, kreska, fb będzie tylko zrobić bez pytania. Więc zróbmy jeszcze kilka katalogów. mkdir, tmp2, cd, tmp2, dotknij, dotknij b. OK. Więc teraz chcę usunąć tmp2 w katalogu. Więc rm tmp2. Nie można usunąć tmp2, jest to katalog. Więc problem jest to, że RM nie natychmiast działa na katalogach. Jest przeznaczona wyłącznie dla plików takich jak plików bez katalogów. A więc, co możemy zrobić tutaj jest rm, kreska, r. Że oznacza rekursywnie, co może jeszcze nic nie znaczy dla ciebie. Ale kiedy się do rekurencji, będzie to oznaczać więcej. Więc rm, kreska, r, tmp2 będzie rekursywnie przejść do tego katalogu. Więc zejść do tmp2 katalogu? Tak, idziemy do tego. Czy chcemy, aby usunąć tmp2 /? Tak. Czy chcemy, aby usunąć tmp2 / b? Tak. Teraz chcemy, aby usunąć tmp2 katalog? Tak. A więc teraz katalog i wszystko w środku z została usunięta. Jest technicznie polecenie rmdir które można użyć do usunięcia katalogach, ale to działa tylko na pustych katalogów, w każdym razie. I zobaczyć, że, po prostu ponownie wykonać mkdir, tmp2. Tmp2, dotknąć. OK. Więc jeśli próbuję usunąć dirtmp2, to będzie powiedzieć, katalog nie jest pusty. Więc prawie nigdy nie używam usuń Polecenie dir tak, ponieważ rm, kreska, r. będzie działać na pustych katalogów i nie są puste. A także, jeśli nie chcę mieć do przejść przez cały ten proces schodząc do katalogu i usunięcie każdego pliku, rm, kreska, rf, tmp2. A teraz go nie ma. Coś uważać o jest rm, kreska, rf. I to mnie przeraża nawet wpisz go, bo jeśli przypadkowo naciśnij Enter lub coś. Więc rm, kreska, rf, tyldy będzie, bez skłoniło mnie, nie pojawia się f mnie, to automatycznie usunąć mój dom i cały katalog wszystko w nim. Więc można pomyśleć, że jest głupie. I dobrze, że jest. Ale może się zdarzyć bardzo łatwo wypadek gdyby, powiedzmy, chciałem usunąć moja ukośnik, katalog vhosta. I tak na szybkiego pisania, Przypadkowo to zrobić. Że usunie rekurencyjnie zarówno moja katalog domowy oraz katalog vhosta w tym konkretnym katalogu, który właśnie dzieje się w tej chwili nie istnieje. Ale to jeszcze usunąć cały mój katalog domowy. Co najmniej przez nie mających f, to poprosi mnie pierwszy. I byłbym jak, oh, nie, Nie chcę, aby to zrobić. Ale ludzie, slash, w tym mi stają się w zwyczaj zawsze rf-Ing. Nawet zwykłe pliki, które mogą po prostu RM, c, staram się po prostu rm, kreska, rf, c. Wystarczy być ostrożnym, gdy jesteś rf-ing. GŁOŚNIK 4: Co oznacza C zrobić? ROB: C Mówię o tym pliku C w tym katalogu, że rm, c. JOSEPH: I bardziej niebezpiecznie, jeśli używasz gwiazda, to odnosi się do wszystkiego, co w katalog. Więc to, co często mają tendencję do zrobienia jest będę przejdź do katalogu i chcę usuń wszystkie pliki tam. Więc rm, kreska, rf, gwiazdki. ROB: Tak. Rm, kreska, rf, gwiazdki. JOSEPH: A jeśli nie jesteś ostrożny co masz w katalogu - I nie był w temp, ale byłem przypadkowo w moim katalogu domowym, to ja usunąć wszystko w moim katalogu domowym. A ja naprawdę zrobiłem przed i Myślę, że zrobiłeś to wcześniej lub Jay zrobił, że przed. ROB: Mam przypadkowo usunięte - więc zignorować polecenia na trochę. JOSEPH: Nie zabawa. ROB: Tak w katalogu bin slash jest kilka plików binarnych, w których nie będzie znać te, jak brzękiem. Cóż, brzęk iw zasadzie wszystkie te rzeczy, które używam na polecenie Linia jest w tym ukośnik katalogu bin. JOSEPH: Podobnie jak ls jest tutaj. ROB: Tak kropka, slash, ls będzie listy tego katalogu. JOSEPH: Rm jest również w tym katalogu. ROB: I przypadkowo RM, bin rf-ED, który usuwa wszelkie polecenia mogłem ewentualnie kiedykolwiek chcesz. Które potem po prostu zainstaluj nowego urządzenia w tym momencie. JOSEPH: Więc być bardzo ostrożnym przy Użycie tego polecenia. PUBLICZNOŚCI: [niesłyszalne]? ROB: Tak. To też zły nawyk, aby dostać się. Jeśli zauważysz, że jestem teraz - Cóż, nie można zauważyć, ale mój zoom-in Może. Więc jestem teraz root @ urządzenie. Więc jharvard jest łatwy chcemy Ci zawsze pomocą. Root jest użytkownik, który ma uprawnienia zrobić absolutnie nic. Więc zauważyć, kiedy jestem jharvard, gdy próbuję cd - co to jest katalog, który? Oh, root jest dobry przykład. Więc cd, korzeń. Permission denied. Ponieważ jeśli spojrzymy na szczegóły - i znowu, nie musisz się całkowicie rozumiem. Ale te trzy kreski mówią Nie pozwól, że każdy inny Użytkownik w tym katalogu. I stanie się katalog być własnością użytkownika root. Tak więc fakt, że jestem jharvard i nie , który nie jest dopuszczony do korzenia ten katalog, to oznacza, że ​​jestem zamierza uzyskać zezwolenie odmawia, kiedy spróbuj cd do niego. Więc kiedy jestem korzeń, mam uprawnienia do zrobić absolutnie wszystko, łącznie usunąć ważne pliki do urządzenia i zniszczyć całą rzecz. Więc jest to zły nawyk, aby dostać się do po prostu wędrówki wokół system operacyjny jako root. Ja robię to tak. Pytania? A ja wyjść korzeń, pobyt w jharvard. OK. Bardziej odpowiednie polecenia. Tak więc wracając do naszego temp, Polecenie mv oznacza ruch. Można przenieść. Teraz chcemy nazwać b, tak teraz nazywa się b. A może chcemy przenieść b do jednego katalogu. Więc teraz jest pusty, ten katalog. Wrócę do mojego katalogu domowego, a możemy zobaczyć, że b jest tutaj, gdyż katalog domowy był jeden katalog w górę od katalog, który b było w. Jest też cp. Więc cp jest skopiować super-punkt, kropka, tekst. Mogę nazwać to s, kropka, tekst. Teraz mamy zarówno super-punkt, kropka, tekst oraz s, kropka, tekst. Działa to także w katalogach. I rf-ED pojedynczy plik. Więc cp - Cóż, najpierw spróbujmy cp, TMP, tmp2. Więc pomijając tmp katalogów. Tak podobne do RM, domyślne zachowanie to nie działa na katalogach. I znów, podobnie jak RM, domyślnie zachowanie - dobrze, że do pracy się z katalogów jest, kreska-r dala. Więc skopiować rekurencyjnie temp katalog do tmp2. A więc teraz mamy zarówno tmp i tmp2, i że nie jest to pomocne, ponieważ tmp był pusty na pierwszym miejscu. Tmp2. Teraz skopiuj tmp do tmp2. I widzimy, że tmp2 ma również plik , ponieważ katalog i że wszystko wewnątrz Katalog został skopiowany. I to może być nieco pomocny jeśli, powiedzmy, że pracujesz w sprawie problemu ustawić jeden - lub faktycznie, później zestawy zadań są jeszcze ważniejsze, ponieważ nie będzie cała masa plików i rzeczy. Ale po prostu chcesz, na ułamek po drugie, jesteś jak, dobrze, jestem zamiar spróbować czegoś innego. Pozwól mi po prostu skopiować cały mój pset1 katalog w kopii zapasowej pset1 tak, że jeśli I skończyć wkręcania rzeczy, mogę wrócić do mojego katalogu backup. Istnieją bardziej odpowiednie sposoby wersjami kopii zapasowej kodu, ale to jest zawsze szybki sposób po prostu zrobić się, że masz kopię czegoś że masz zamiar zmienić. Więc echo jest także polecenie, że jednorazowa rodzaj sillily po prostu wydrukować na linii poleceń, co dokładnie chciałeś echo. Więc echo hi. Będziemy po prostu wydrukować hi. Echo hello world. Będziemy drukować komentarzy świat. Który przychodzi do użytku po uruchomić połączenie poleceń. I znowu, nie oczekuję, że całkowicie rozumiem jeszcze, ale to coś zobaczyć. A potem, jeśli jesteś Googling przykłady czy zdajesz sobie sprawę, chcesz zrobić coś, może to być pomocne. Więc, na przykład, więc ls, kreska, l. Więc widzę wyjście z ls, kreska, l. A ja mówię, OK, chcę zapisać, że w pliku. Wszystkie tego wyjścia tutaj, chcę umieścić w osobnym pliku. Więc to trochę większy niż symbol jest to, co mamy zamiar wywołać. Jesteśmy przekierowanie wyprowadzane do pliku. Nazwijmy ten bla pliku, ponieważ jest to co staram się zawsze nazwać. Teraz widzimy, mamy plik bla tutaj. A jeśli go otworzyć, to widzę, że jest dokładnie wynik polecenia że po prostu uciekł. I podobnie, można - gdyby to było wyprowadzane do pliku, ten jest uzyskać dane z pliku. Co to jest polecenie, że - JOSEPH: Myślę, że można użyć mniej lub więcej, prawdopodobnie. ROB: Ale co po prostu mniej bla? Nie wiem. Jeśli przyjdziesz do tego scenariusza, jak jest psets że jest to przydatne dla. JOSEPH: Możesz rury go do echa. Rura plik do echo, żeby go zobaczyć. ROB: To jest rura. JOSEPH: Przepraszam. ROB: W porządku. Więc to jest wyjście do pliku. To uzyskać tekst z pliku i oddać go do programu. I będzie można również zobaczyć tego faceta. Więc jest to rodzaj robi zarówno na raz. I rzeczywiście, ja wprowadzić dwa nowe Polecenia tylko do korzystania z niego. Historia jest przydatna komenda, która jest po prostu zamiar wydrukować listę cokolwiek kiedykolwiek uruchomić wiersz polecenia. Widzimy więc tutaj, że mam wszystko prowadzi cały ten czas. Dużo ls-tych. I kolejna przydatna komenda grep, że Jego celem jest poszukiwanie przez tekst szukają wzorów, dobrze, patrząc na cokolwiek chcesz go szukać. I tak tu jest poręczny wykorzystanie, powiedzmy chcemy złapać historię. I chcę szukać poleceń gdzie - co jest użyteczna szukać? JOSEPH: [niesłyszalne]? ROB: Albo niech po prostu patrzeć na wszystko dotyka, bez względu na przyczynę. Tak to jest, co to będzie wyglądać. I nie trzeba, aby całkowicie zrozumieć. Ale pomysł jest tutaj historia daje samo wyjście to miało tutaj gdzie to drukując całą historia wszystkiego, jaki kiedykolwiek pracował. Jesteśmy wtedy mimochodem, że - więc zamiast wysyłać je na ekranie, chcemy przekazać, że do Polecenie grep, który szuka wszystkie instancje w dotyku słowo. I tak za pomocą tej kombinacji Historia narzędzia i grep, widzę, OK, oto wszystkie polecenia Mam kiedykolwiek uruchomić, a tu nieco popularnym. Jesteśmy na dole. I to też daje mi polecenie Właśnie dostał, że miał dotykowy słowo w nim. Ale rura jest całkiem przydatna rzecz do łączenia wielu programów. I rzeczywiście, jest to skrót do let Historia mnie wyjście do pliku bla, i pozwól mi grep plik za pomocą bla jak to, co chcę patrzeć na. Więc rura jest tylko skrót dla tych dwóch poleceń. Tak. GŁOŚNIK 4: [niesłyszalne]? ROB: Tak. Co to jest - Och. Sprawdźmy. Tak, kot, pies, ryby. Więc chcę grep. Dash, r, ponownie będzie rekurencyjnie, więc chcę schodzić w dół wszystkie katalogi. Chcę rekursywnie grep dla wszystkich - i pozwól mi tymczasowo uzyskać to z drogi. Ignoruj ​​mnie. OK. Tak, chcę, aby tymczasowo grep dla wszystkie przypadki słowo ryb. , A więc o to, co robię jest grepping rekurencyjnie słownego ryb. I gwiazda oznacza ponad wszystkie te Pliki w tym katalogu. I tak dał mi uprawnien, dlatego, że nie może przeczytać, że dany plik. Ale okazało się ryby w pliku test. Mogę też powiedzieć, zwłaszcza, że ​​tylko chcę patrzeć w bla pliku, w którym to przypadku nie znajdziesz nic. Chcę tylko spojrzeć w pliku, testu. Znajdzie rybę. To jest bardzo przydatne polecenia wiedzieć w ogóle. Istnieje kilka alternatywnych do grep , które mają być bardziej programista przyjazny, ale staram do nadal polegać na grep. Pytania? OK. Czy są inne polecenia? Och. Tylko jedna jednorazowa, że ​​zawsze znaleźć do zabawy jest cal. Więc zauważyć, kiedy jestem w tym pięknym tryb pełnoekranowy, nie mam jak góry na pasku narzędzi lub coś. So Cal po prostu daje mi ładny, mały Kalendarz, który ma rację teraz odcięty, zakładam. Ale ładny, mały polecenia. JOSEPH: To [niesłyszalne]. Inne polecenia, które mogą mieć widać m.in. szczęk i zrobić. Pójdziemy nad nimi w bardziej szczegółowo później. Ale jeśli już pracuje nad PSET, powinno być zna tych. ROB: W porządku. Pytania na linii rzeczy polecenia? Dobrze. Więc przejdźmy do niektórych Rzeczy związane z C-. Zmienne matematyki. OK. Tak jak mieliśmy matematyki w Scratch, można również użyć matematyki w C Zanim przejdziemy do tego w całości, więc zmienne. Pamiętaj, że w każdym przypadku można zadeklarować Zmienna jak int x lub y, ty pływaka trzeba dać go wpisać przed nazwa zmiennej. Więc typy, które widzieliśmy do tej pory są int, float, double, long long, które nie wiem, czy rzeczywiście mamy zauważyć, że do tej pory. Istnieje kilka innych. Musimy zobaczyć, char. Jest krótki, co jest jak jest Przeciwieństwem długo długo, gdzie jest to mniejsze niż całkowita. Widzieliśmy również ciąg. Tak więc to, co jest szczególnego w ciągu? Dlatego chciałbym powiedzieć, że to nie całkiem jak wewn? GŁOŚNIK 4: Tak naprawdę nie istnieje. ROB: Tak. Więc jedynym powodem mamy ciąg Jest tak, ponieważ kiedy robisz hash, m.in. cs50.h. I zobaczymy przykłady to później - oh, że nie zajmuje się tak dobrze - gdzie cs50.h robi coś wzdłuż linii typu Def, gwiazda char, string. I tak, że mówi, że nawet nie wiesz co jest jeszcze gwiazda char. Ale to jest mówiąc chcemy ciąg. Każde miejsce, już przy użyciu ciąg, można można było za pomocą gwiazdę char, które w rzeczywistości jest typu, który istnieje w języku C. Ale my się do tego. Aha, i to idzie z powrotem. Schludny. Tak samo z bool gdzie prawda i fałsz. Że nie jest to wbudowane w C typu Zamiast tego, po prostu, to ma zerowa wartość? Potem po prostu rozważyć , że jest fałszywe. To ma wartość - dobrze, to ma jakikolwiek Wartość, która nie jest zero? Potem uważamy, że to prawda. Więc jedno jest prawdziwe, dwóch jest prawdziwe, coś niezerowe, jest prawdą. Więc to są te. Pytania dotyczące zmiennych wskazujących i typy zmiennych i to wszystko? Tak. GŁOŚNIK 4: Na długo długo, w książce, on powiedział, że to musiał być długi long int. Ale tak długo, długo będzie działać? ROB: Więc te modyfikatory typu. Tak int x. Więc możemy powiedzieć, unsigned int x. Można powiedzieć, short int x. Można powiedzieć, długo długo int x. Ale prawie każda z tych rzeczy, po prostu powiedział, int, short int, long long int, można pozbyć się int i będzie po prostu założyć, że chodziło o int. Więc niepodpisane x, co oznacza po prostu - wiesz, jak zwykle z int, można powiedzieć, x równa negatywny 3? Z unsigned int, nie możesz. JOSEPH: I znowu, dla kamery, pytanie, jaka jest różnica między długim long int i tak długo, długo? ROB: Tak. Więc prawie nigdy nie będę Napisać długo long int. Będę pisać długo, długo. JOSEPH: Masz pytania? ROB: OK. Tak głupio trochę przypomnieniem, że to, jak deklarujemy zmienną i zainicjować zmienna i zadeklarować inny Zmienna i zainicjować to wszystko w jednym kroku. Więc deklaracja zmiennej i Zmienna nie ma inicjalizacji do, ale może być w tej samej linii. Więc mamy standardowe operatory matematyczne że masz w zwyczaju - Plus, minus, dzielenie, razy. Istnieje również modulo, które zobaczymy. Nie jest co najmniej C, wbudowane zasilanie potęgowanie Operator daszek. Cóż, nie jest operatorem daszek, ale to nie jest moc. JOSEPH: Ale to nie jest potęgowanie, Tak. ROB: Nie należy korzystać z daszka przyjąć, że oznacza to, jak kwadrat lub cokolwiek. Więc niektóre rzeczy zachować w nic o podziale. Stanę. Tak oświadczył initialize odpowiedź. Więc mówimy pływaka odpowiedź wynosi 1 podzielone przez 10. Wydrukuj odpowiedź do dwóch miejsc po przecinku. I to jest coś takiego, że by człowiekowi printf, aby dowiedzieć się, że Co do cholery ma%, kropka, 2f oznacza? I to właśnie oznacza, dobrze, ignorując 0.2. I% f jest co używamy wydrukować się unosić. 0.2 mówi, że druk unosić się do dwóch miejsc po przecinku. Więc ten program ma błąd, a może widziałem to wcześniej w niektórych przed oczywiście CS. Ale co to za błąd? GŁOŚNIK 5: zero. ROB: Tak. Więc, gdy mówimy, odpowiedź jest równa 1 dzieli się przez 10, chcemy odpowiedź na 0,1. Jednak 1 podzielone przez 10; 1 całkowita, 10 jest liczbą całkowitą. I tak, gdy robimy podzielony przez liczbę całkowitą całkowitą, mamy zamiar wrócić całkowita. Więc 1 podzielone przez 10 wynosi 0,1. Ponieważ musi dać nam liczbę całkowitą, to po prostu będzie wyrzucać, że miejsca po przecinku, a mówią, że Odpowiedź jest 0. I tak, gdy drukujemy odpowiedzieć tutaj, to będzie drukować 0,00. JOSEPH: I tak jak notatki, faktycznie wyrzuca to, co jest po przecinka. Więc jeśli zamiast tego miał 6 podzielone przez 10, można by pomyśleć, że to daje 0,6 i wtedy można zaokrąglić w górę do 1. Ale rzeczywiście, to, co się dzieje, gdy typ to jest zadania, które spada, co jest po przecinku. Tak 0.6 ma się 0. ROB: Tak. I powiemy TRUNCATE za to. Jeśli więc rzutować na int, dziesiętnym jest obcięty. Więc za to naprawić - nie właściwie dwa. I mam zamiar zrobić to drugie, ponieważ ten jest o wiele łatwiej naprawić. Więc jedna poprawka jest używać pływaków w podziale. I rzeczywiście, trzeba tylko uczynić z nich pływaka. Ale to jest tylko nieco jaśniejsze do obu z nich pływa. Więc 1,0 podzielone przez 10,0 jest dzieląc dwa pływaki. Więc odpowiedź będzie w końcu jest pływak, i tak będzie poprawnie wydrukować 0,10 tutaj. Coś, co nie działa tak dobrze, o to jest, dobrze, na pewno, że był łatwy wystarczy do konwersji 1 do unosić przez co 1,0. Ale co, jeśli zamiast tego mieliśmy dwie liczby całkowite jak int x = 1 i int y równa się 10, a następnie chcieliśmy zrobić x podzielona przez y? Tak więc nie tylko można łatwo zrobić X.0 czy coś. Tak, że jest poprawka do odlewania. Więc jest sposób odlewania w C do konwersji zmiennej od jednego typu do drugiego. Tak więc w niniejszym przykładzie 1 jest liczbą całkowitą. I umieszczając ten pływak przed Opisz nam odlewania 1 do pływaka. I tak będzie to konwersja 1 do 1,0. I będzie to konwersja 10 do 10,0. A następnie rzeczy zachowują się podobnie do Poprzednia wersja po prostu pokazał w którym, zgodnie z oczekiwaniami, mamy 0,10 i będzie to wydrukować, że. I możemy to zrobić z zmienne, też. Można więc powiedzieć, pływak x podzielona przez pływaka y. JOSEPH: Masz pytania? ROB: Tak jak w zwykłym matematyki, mamy pierwszeństwo operatora. Więc w klasie matematycznej, masz większe szanse nazwać to kolejność operacji. Tutaj jest oficjalny termin pierwszeństwo operatora. Ale pierwszeństwo operatora, lub najbardziej operatorzy, to jak można oczekiwać. Tak jak w matematyce, jest 2 razy 10 będzie bardziej niż zgrupowane Ten 10 podzielony przez 2, a potem 2. Kolejność operacji, to będzie zrobić 2 razy 10, 10 podzielone przez 2, a następnie będzie to zrobić 20 plus 5 plus 2. Więc to jest jak się spodziewaliśmy, i można korzystać nawiasów do wyrażeń grupy. Nie można używać nawiasów kwadratowych do wyrażenia grupy. Tak? GŁOŚNIK 5: Czy rzeczywiście po prostu wrócić chwilę? Można oddać int na ciąg? ROB: Tak w C, możesz rzucić wszystko chcesz co chcesz. To nie znaczy, że to dobra rzecz do zrobienia. Więc kiedy rzutować na int ciąg, co oznacza, że ​​- a my się do tego znacznie bardziej dokładnie - JOSEPH: Dużo później. ROB: Nie chciałem mówić znacznie później, więc starałem się zmienić moje zdanie. Dojdziemy do niego znacznie bardziej dokładnie później, gdy tak naprawdę, gdy masz Ciąg znaków o zmiennej - więc ciąg może być dowolnie długo, prawda? I mówiliśmy, że int jest cztery bajty i długo, długo jest osiem bajtów i pływak jest cztery bajty. Więc ciąg, podobnie jak int, tylko ma pewną liczbę bajtów do niego. I że będą cztery bajty. Ale ciąg może być dość dowolnie długo, prawda? Więc witaj świecie już, czy to 10 znaków lub cokolwiek, to już będzie w ciągu 4 bajty Można dopasować do łańcucha. I tak, jak łańcuchy, że naprawdę działa gdzie są one w pamięci, że ciąg jest utrzymywana. I tak tutaj, kiedy mówię ciąg x równa Witaj świecie, wewnątrz x jest tylko, że, och, witaj świecie jest przechowywany w tym szczególnym miejscu w pamięci. Tak więc, jeśli spróbujemy rzucić liczbę całkowitą do łańcuch, a następnie staramy się zinterpretować jakiś przypadkowy część pamięci jako ciąg. I prawie zawsze łamie rzeczy. JOSEPH: Ale jeśli to mylony Ci, będziemy pokrywając je więcej w głębi później. ROB: Tak. To gdzie masz zamiar aby dostać się do wskazówek. A jest istotny fragment dwóch tygodni od tego kursu. GŁOŚNIK 6: Czy to działa jak obiekty w innych językach lub nie bardzo? ROB: Tak w innych językach, obiektów byłaby oznaczona przy użyciu wskaźników. To nie jest to samo, choć. Wszelkie myśli? JOSEPH: Nie. Nie myśli. ROB: OK. JOSEPH: Następny. ROB: Po prostu idź z tym. Dobrze. Więc modulo. Tak jak mamy plus minus, dzielić i mnożyć. Modulo jest więc może pan Nie widziałem wcześniej. I po prostu mówi, dać mi pozostała. Tak 55% 10. Pozostała część robi 55 podzielone o 10 będzie 5. Tak 55% 10 jest 5. A 3% 5 byłoby 3. 8% 8 wynosi 0. 16% 15 wynosi 1. JOSEPH: Jedną z rzeczy, aby pamiętać o tym, też jest to może nie działać zgodnie z oczekiwaniami jeśli używasz liczbę ujemną. Tak negatywny 5% 4, ludzie, może pomyśleć, że jest - co można by pomyśleć, negatywne 5% 4 będzie? GŁOŚNIK 5: Jeden. JOSEPH: Więc niektórzy mówią jedno, niektórzy mówią, negatywny. Ale to, co - ROB: I nawet nie mają powiedział jeden z nich. JOSEPH: Dwa, przepraszam. Niektórzy mówią - ROB: Trzy. JOSEPH: Trzy? ROB: Negatyw - to, co było - negatywne pięć - JOSEPH: trzy, trzy, trzy. Przepraszam. Ponieważ modulo, ogólnie, gdy masz widziałem go w innym miejscu, to zwykle oznacza, zwraca liczbę dodatnią, prawda? ROB: Tak więc, gdy mówimy w matematyce,% 10-tych, mają tendencję do chcą dać - jeśli mod o 10, wtedy możemy spodziewać się uzyskać numer od 0 do 9. Tu, że nie jest to przypadek, że dostanie ujemne liczby wrócił. JOSEPH: Więc negatywna 5% 4 byłaby ujemna 1. ROB: Ale to rzadko, że jesteś mod-ing liczby ujemne na początku. Pominąć. JOSEPH: Tak. ROB: Meh. OK. Więc jedna rzecz zwrócić się o pływaków jest to niebezpieczne zachowanie, ale pływaki nie są dokładne reprezentacja. Więc wracając do bajtów ponownie, pamiętaj że int jest zawsze cztery bajty i pływak jest zawsze cztery bajty. Więc przykładem Lucasa jest bardzo dobry. Tak, że z 1 podzielone przez 3. Tak, 0,3333333. Jeśli mam tylko 32 bitów, w jaki sposób Przechowywać 0,33333 dokładnie? A może, niezależnie od przyczyny, można powiedzieć, Wszystko w porządku, dobrze, powiedzmy, że ten konkretny 1011001, niech tylko powiedzieć, że powinno być 0,333333. Cóż, masz tylko skończoną liczbę te bity, więc jest to niemożliwe oznaczają każdą zmiennoprzecinkowe Wartość podana tylko 32 bitów. Dobrze, że to niemożliwe, aby reprezentować dowolny podane wartości zmiennoprzecinkowe nieskończona - również biorąc pod uwagę żadnych skończoną liczbę bitów. Więc tu jest problem, dobrze, gdy używany wydrukować do dwóch miejsc po przecinku, zrobiliśmy poprawnie uzyskać odpowiedź 0,10. Ale pod maską, to naprawdę przechowywane tak blisko jak to jest możliwe 0.10 w tych bitów może reprezentować. Czy to na następnym slajdzie? Czy jest to prawda? JOSEPH: Tak, to jest to. ROB: Blegh, blegh. JOSEPH: Tak, można tak wyciągnij notatki się trochę. ROB: Idę, aby powiększyć w na ostatnim w tej sprawie. O mój Boże, to jest [niesłyszalne]. Tak, że liczba. To jest to, co zostanie wydrukowane jeśli uruchomić ten program. I zauważyć, że nie jest to naprawdę wielka sprawa jeśli mamy tylko dbanie o jak 02:58 miejsc po przecinku. Jak my tylko pierwotnie drukowane 0,10, i dlatego nie widział nic złego. Ale gdy zaczną się w dokładna, dokładna liczba, że ​​jest to reprezentujący, widzimy, że nie można dokładnie przedstawiają 0,1. I część tutaj problemu jest jak, Wszystko w porządku, w porządku, ale, cóż, pierwsze, co zrobić, jeśli staraliśmy się zrobić, Odpowiedź jest równa jest równa 0,1? Jest to, że zamierza wrócić prawda czy fałsz? A więc trudno powiedzieć. Myślę, że to rzeczywiście może wrócić prawda. Będzie to pierwsze - Nie wiem. Odpowiedź jest po rozpoczęciu postępowania z wartości zmiennoprzecinkowych, to całkiem wiele nie należy traktować równość z tego powodu niedokładności. I za wszystko, co wiem, to setna miejsca po przecinku, które zmiennoprzecinkowe nie był w stanie aby poprawnie obsługiwać. A więc nie tylko równość będzie jeszcze choć liczba - jeśli było za pomocą dokładnych liczb, numery powinny były dokładnie takie same. To w ciągu np. 50 Obliczenia za pomocą tych pływających wartości punktowe, błąd może budować wyżej i wyżej i wyżej, i rzeczy po prostu nie w porządku. JOSEPH: I nie było naprawdę Słynne przykłady takiej sytuacji. Jak inżynierowie NASA zdobyć ten problem, powodując wybuch w rakiety powietrza po ich rozpoczęła. I wiele problemów, takich jak to. Więc tak. GŁOŚNIK 6: Kiedy mówisz 0,3 f, to obciąć resztę? Albo to zaokrąglić w górę lub w dół? ROB: Czy printf wokół niego? JOSEPH: Myślę, że printf obcina. ROB: OK. Więc możemy podobnie iść w przeciwnym Kierunek tego, gdzie w tym przypadku, Najbliżej może to stanowić 0.1 był z tym numerem. Najbliżej może być w stanie stanowią 0,2 w przeciwnym kierunek, 0,199999996356 czy coś. Jeśli więc poszliśmy w tym kierunku rzeczy, to printf 0,3 f wróci 1.99 zamiast 2.00. JOSEPH: Nie jestem do końca pewno w tej sprawie. Może chcesz napisać mały, niewiele Program po prostu sprawdzić, że. ROB: Choć, co jesteśmy pewni, że Jeśli próbowałeś rzucić, że do int, i odlewania do int będzie spowodować, że obcina dziesiętny, jeśli spróbować rzucić 1.9999999 do int, dostaniesz 1. I tak należy na ogół używać runda funkcja w bibliotece matematycznej. Pytania? OK. JOSEPH: Więc przeniósł się do warunków i wyrażenia logiczne. Więc widziałem tych przed. I faktycznie, pozwól mi zrobić, aby moje Komputer jest w odpowiednim formacie tutaj. Miejsca. Niestety, będziemy mieć do czynienia Trochę z odcięciem na krawędziach. Ale tak, wy widzieliście to wcześniej w Scratch. Więc to tutaj jest wyrazem , który jest stosowany instrukcja warunkowa. Więc odpowiedzieć większa niż zero woli powiedzieć, prawdziwe lub fałszywe. I to są bardzo ważne, ponieważ pozwalają nam na wprowadzenie Logika w naszym kodzie. Tak więc, na przykład, jest programem napisany w Scratch, że prosi użytkownika do liczby całkowitej i mówi im, czy liczbą całkowitą, że dali ci było dodatnią lub ujemną. I konwersji tutaj, aby zobaczyć to najpierw wydrukować oświadczenie, daje mi całkowitą. A następnie poprosić o całkowitej. A następnie użyć logiki warunkowej na tutaj, aby sprawdzić, czy numer faktycznie większa od zera, czy nie. Tak więc mamy tutaj wyrażenie Boolean wewnątrz warunkowa if. Czy istnieją jakieś pytania? Czy są jakieś pytania o to? OK. Więc nie więcej niż większa niż, oczywiście. Można skonstruować wyrażeń logicznych przy użyciu większości rodzajów rzeczy, które by myśleć w matematyce. Więc większa niż. To powinno być poniżej. Przepraszam. I odstępy. ROB: Nie daj Boże go pozostawić. JOSEPH: W porządku. Tak więc większa niż mniejsza, większa wyższa lub równa mniej niż lub równe. Używamy dwu równych w celu sprawdzenia równości, ponieważ pojedynczy wynosi środków zadanie, prawda? Tak. A następnie możemy również nie równa przez za pomocą wykrzyknika, jest równa. I ten wykrzyknik symbol może również zostać rozszerzony tak, że jeśli chcesz odwrócić jakichkolwiek Boolean wyrażenie, można to zrobić. Tak to oceni na true tylko wtedy, gdy odpowiedź jest mniej niż lub równe zero. Wszelkie pytania na ten temat? OK. Więc można również łączyć te Wyrażenia logiczne A i za pomocą logiczne Lub. Więc to jest tylko symbol I, , który powinien być przesuwne, 7. I to jest symbol rury, która jest nie małe litery L. Jest to jedna to jest tuż nad twoim ENTER. Więc używać dwóch z nich symbolizować logiczne i logicznym Or. Więc to zwróci tylko prawda, jeśli odpowiedź jeden, dwa, trzy lub cztery. I będzie to powrót tylko prawda, jeśli odpowiedź jest poza tym po obu stronach. Więc nie jest to jeden, dwa, trzy lub cztery. I sposobem byłoby użyć że w wyrażeniu - ROB: Albo zero lub pięć. JOSEPH: zero lub pięć. Przepraszam. Tak, tak, tak. OK. I tu teraz, w taki sam sposób by użyć tego wyrażenia, mniejsze boczne wyrazem Jeśli warunkowa oświadczenie, należy również użyć IT sam sposób, tylko przez umieszczenie go wewnątrz nawiasów w instrukcji If. Więc to printf tylko ogień, jeśli odpowiedź jeden, dwa, trzy lub cztery. Wszelkie pytania na temat łączenia wyrażenia? Więc nie ma innego warunkowego konstrukt nazywamy if / else. Więc w zasadzie, to teraz oznacza, OK, Jeśli coś chciałem sprawdzić nie było prawdziwe, a następnie przejść do innego i wykonywać, że inne działania. Tak więc w tym konkretnym przypadku, poprosiłem użytkownika do liczby całkowitej. Jest liczbą całkowitą większą od zera! Tak? Więc wybrali liczba dodatnia. Jeśli nie, to musi mieć był ujemny lub zerowy. Więc wybrał liczbę ujemną czy w tym przypadku zerowy. Tak. Lub zero. A potem mamy również if / else, Jeśli i innym. Więc to pozwala nam wykonać sekwencję rzeczy tylko wtedy, gdy te pierwsze nie. Więc w tym przypadku, teraz robimy ostatnia wybrać zero. Więc jeśli nie odebrał pozytywne, ani liczba ujemna, to muszą wybrali zero. Więc to po prostu idzie w dół Łańcuch tak. Więc przykładem tego, jak Jeśli jest inny od - if / else różni się od tylko sekwencja IFS. I to jest częste pytanie, które ludzie pytają się, dobrze, jeśli się jak 95 w CS50, co to będzie Program powiedzieć? GŁOŚNIK 5: Masz to A. JOSEPH: Tak. Masz każdego jeden z tych, w prawo. Musisz się A, masz B, to mam C i D, prawda? Tak więc wszystkie one są oceniane w porządku. Tak więc, 95 jest większy niż 90 °, to również większa niż 80, to również większy niż 70, a to również większa niż 60 lat. Więc masz wszystkich tych gatunków. I zakładam, że byłoby A. tylko chcesz Sposób ustalić, który ma zastąpić tych z Else / Jeśli jest. Więc w tym przypadku, to widzi, że 95 jest większy niż 90, a następnie wykonuje nie ocenia resztę sprawozdania. Wszelkie pytania o to? Więc nie ma innego rodzaju warunkowego Struktura, że ​​mamy tu do których wywołać instrukcję switch. Więc to pozwala na w zasadzie sprawdzić jaka jest wartość numeru można umieścić do instrukcji switch jest. Więc w tym przypadku, mamy do przełączania na n, i mówimy, oh, jeśli n jest jeden, a następnie wydrukować, że oświadczenie. A następnie zerwać, co oznacza wyjście z instrukcji switch. Jeśli to nie był jeden, a potem, cóż, po prostu ostatecznie sprawdzić wszystkich tych przypadkach. I tak sprawdza to, czy jest to jeden lub dwa lub trzy i drukuje odpowiednio. I co to tu domyślne słów kluczowych oznacza to, gdyby nie wprowadzić dowolny z nich, a następnie powiedzieć Nieprawidłowy. Więc powiedzmy, że dla n i zapytać użytkownik daje mi cztery. Cóż, to mecze żaden z tych przypadków, więc będzie drukować, co jest w sekcja domyślna. Tak, pytanie? GŁOŚNIK 5: Czy można używać Boolean zamiast wyrażenia jeden, dwa lub trzy? JOSEPH: To pytanie można użyć Wyrażenia logiczne, zamiast jednego dwa lub trzy? I C, wierzę ci Nie mogę tego zrobić. Ale w innych językach, które może napotykają na koniec Semestr jak JavaScript, możesz. Cóż, trzeba by obliczyć najpierw że wartość, a następnie używać go w przełączyć oświadczenie. Tak? ROB: Tak częścią korzyść przełącznika Sprawozdanie jest myśleć, jeśli to zrobił jak if / else, tak jak w przypadku n jest równa oznacza jeden lub cokolwiek. Else / Jeśli n jest równa jest równa dwa, cokolwiek. Else / Jeśli n jest równa równa się trzy. Więc sposób program będzie prowadzony jest będzie kolejno w dół tej listy i sprawdzić, to N jeden? Nie. Jest n dwa? Nie. Jest n trzy? Tak. To zrobić. Natomiast z instrukcji switch, to faktycznie w stanie skompilować to być bardzo szybko. I tak szybko, jak to mówi, wyłącznik, to mówi, wszystko w porządku, brak jest dwóch, ja jestem zaraz będzie skakał do miejsca, gdzie Ja powinienem zacząć realizować. Nie zamierzam najpierw sprawdzić, jest brak jednego, to N dwa? To może od razu zacząć robić co to ma robić. I z tego powodu, że nie może podjęcia logicznych warunków. Albo byłoby to zrobić sekwencyjny, jak, w porządku, to n większa niż zero? Jeszcze jest n powyżej 10 lub cokolwiek. JOSEPH: W tym przypadku, jeśli używane Jeśli / przeciwnym przypadku, jeśli jest, to zwrotnicy uruchomić około trzykrotnie szybciej niż if / else, o ile. Możemy zorganizować w taki przełącznik sposób, że nie pękają po każdym z przypadków. Więc w tym przypadku, jestem partycjonowanie Numery, które wybierają się do jednego i dwa numery nie są wysokie i trzy jest duża liczba. Tak więc w tym przypadku, gdy n oznacza jeden lub dwa, to trafi na sprawę i wtedy będzie nie mieści się, ponieważ nie ma przerwy. I będzie to w końcu tutaj. Jeśli więc wybrać jeden, to zrobić printf a następnie zerwać tak, że żaden z jest to realizowane. I oczywiście, jeśli wejdą w trzech lub coś innego, to będzie pominąć ci, a nie tam, i to wykona zamiast odpowiedniej linii. Czy są jakieś pytania o to? Tak? GŁOŚNIK 4: Czy pojawi się błąd, jeśli ci miał przerwę po wypadku jednego, ale nie ma czegoś na to zrobić? JOSEPH: To pytanie jest, co można uzyskać Błąd, jeśli masz przerwę po jednym przypadku, ale nie ma nic do zrobienia? A odpowiedź brzmi: nie. Tak naprawdę to nie pojawia się błąd. Tak, mm hmm. Tak jakby trochę zmian tutaj, Mam zamiar umieścić printf tutaj. Ups. Więc co, jeśli będzie to wydrukować I umieścić jeden w na wejściu? Tak. To powiedzieć, że nie miała Wysoka liczba dwa razy, prawda? Bo to hit tej pierwszej sytuacji nie pęknie, a to spadnie aż do drugiego przypadku. Wszelkie pytania o to? ROB: Czy masz jeszcze pytania? JOSEPH: OK, cool. Dobrze. Więc jest coś jeszcze nazywamy trójoperandowy operator, który jest w zasadzie Składnia do robienia zastępca Jeżeli i wtedy inny. I pozwala zrobić to wszystko w jednej linii. Tak więc w tym konkretnym programem Pytam użytkownika o n. A jeśli n jest większe niż 100, powiem ich wybrali wysoką liczbę. Jeszcze mam im powiedzieć, że wybrał niską liczbę. Możemy więc korzystać z tej bardzo długiej składni, łańcuch, S, a następnie sprawdzić, czy n jest większa niż 100 do przypisania to odpowiednio. Ale możemy zrobić to o wiele bardziej zwięzłe przy użyciu tej składni operatora trójskładnikowych które wiąże się pytanie zapytania i okrężnicy. Tak jest w istocie znak zapytania zadaje pytanie, prawda? ROB: Może powiększyć to. JOSEPH: Tak. Dobry punkt. Więc to jest operator trójskładnikowych. Ja najpierw zadać pytanie, n jest większe niż 100? Jeśli tak jest, to ja najpierw wykonać część przed dwukropkiem. Jeśli nie jest, to wykonanie Druga część po dwukropku. Tak więc, jeśli n jest większe niż 100, następnie wybiera wysokie i stawia że do łańcucha s. Jeśli n jest mniejsza niż 100, to wybiera niski a następnie umieszcza, że ​​w ciągu sekund. Tak, że będzie to duży kawał skondensować w dół do tylko tej jednej linii. GŁOŚNIK 5: Czy to jest popularna? JOSEPH: Tak, to jest dość popularny rzeczy, w których mają być zasadniczo Czy zadanie na podstawie jakiś warunek. I w tym przypadku, staraliśmy aby przypisać wartość String s. To nie jest tak - Myślę, że tak naprawdę nie preferują w pozostałych przypadkach. Ale to jest szczególnie przydatne do tego zadania. ROB: To jest dość powszechne, wzór gdzie trzeba trochę zmiennej, która masz zamiar powiedzieć, jeśli coś, ustaw ta zmienna do jednej wartości, inny, ustawiony ta zmienna do innej wartości. I to jest scenariusz gdzie stosować potrójny. JOSEPH: I ratujesz wiele linii, prawda? I to właśnie sprawia, że ​​kod zapewne trochę bardziej czytelne. Tak, pytanie? GŁOŚNIK 6: Na potrójny, można przejść, String s równe s, znak zapytania? I wtedy można mieć, powiedzmy, pięć różnych opcji. W zależności od tego, co liczba n została, należy wybrać jedną z nich? JOSEPH: To pytanie jest, czy istnieje rodzaj składni, gdzie można zrobić łańcuch y jest równa n, a następnie mieć więcej niż dwa Opcje po tym znaku zapytania? I prosta odpowiedź brzmi nie, nie ma bardzo dobry sposób, aby to zrobić, chyba że chcesz zagnieździć wiele trójskładnikowych Operatorzy wewnątrz siebie. Można zrobić jak n większa niż 100, znak zapytania, a następnie innego Trójskładnikowy operatora n większym niż 50, znak zapytania, a gniazdo w ten sposób. Ale w tym scenariuszu kod jest coraz rodzaj nieczytelny i brudny, a może lepiej byłoby po prostu udać się do Jeżeli / Else w tym momencie. ROB: A także, jako dygresja, PHP nieprawidłowo implementuje trójskładnikowych Operator tak, że zagnieżdżone ternaries nawet nie działać tak, jak powinny. JOSEPH: Tak. Więc robi się trochę mylące, zwłaszcza gdy idziesz różnych językach. ROB: To na tyle mylące, że języki są źle o nim. JOSEPH: Tak naprawdę, tylko w celu wyjaśnienia, nie każdy wie, co to % S nie tutaj? Wszelkie pytania o to? Chyba tylko do kamery,% s w zasadzie pozwala nam umieścić symbol zastępczy na sznurku. , A następnie na koniec, że możemy określić Zmienna chcemy umieścić w tym Posiadacz miejsce jest y. Tak, że w zasadzie zajmuje s i to stawia go w tutaj. A następnie zostanie wydrukowane, wybrałeś wysokie lub wybrałeś niską liczbę. OK. Więc pętle pozwalają na wykonywanie rzeczy w okrężnymi ruchami, tak? Być może w ten napotkał Zarysowania w postaci pętli zawsze lub powtarzać aż lub Powtórz szczególności liczbę razy. Więc dlaczego jest to dla nas dobre? Cóż, w C, powiedzmy, mamy to piosenki, które wdrożone w Scratch śpiewa, to jest piosenka że nigdy się nie kończy. To po prostu jest długa i na zawsze i na wieki. Cóż, tak naprawdę nie można zrobić program , który ma nieskończoną liczbę printf oświadczenia w nim, prawda? Zatem w tym szczególnym wariancie, jedna droga że można to robić i aby go wydrukować zawsze jest zamiast używać pętli while. Więc pętli while będzie wykonywać co w organizmie dwóch klamry należy do niego na podstawie tego, co Warunek jest. Zatem w tym szczególnym przykładzie wykonania przed, jeżeli chcemy wydrukować na zawsze, co możemy zrobić? Cóż, na pewno, prawda? Tak więc ten rodzaj łączy ideę jakiejś logicznej wypowiedzi oraz pętlę. I dowiedzieliśmy się o Boolean wyrażenia wcześniej. Więc gdy stan wewnątrz że choć pozostaje prawdą, to pętla wykona na i na i na. I w tym przypadku, jeśli po prostu dostarczyć go z prawdą, to powoduje nieskończone Pętla, która drukuje piosenkę i na i jak wcześniej bez potrzeby o program, który ma nieskończoną liczba printf, która jest nie jest możliwe. Więc bardziej przekonująco, choć, można użyć tego z zmienna i stan. Powiedzmy, że chcemy, aby powtórzyć zdanie, zupełnie loopy, 10 razy. Więc co można zrobić z pętli While jest można najpierw zainicjować licznik zmienna poza Pętla do 10. A następnie w zasadzie za każdym razem idziesz przez pętlę While, wydrukowanie oświadczenie, a następnie zmniejszyć licznik zmiennej aż w końcu w pewnym momencie, gdy odejmiemy I tyle razy, 1 z I tyle razy - i tylko w celu wyjaśnienia, że ​​minus minus oznacza, że ​​jest równy I minus 1. Że będzie w zasadzie doprowadzić do I dół Punkt, w którym po raz trafiłem do zera, to warunek nie jest prawdą i tak, że wyjście z pętli. Tak całkowicie loopy tylko drukuje 10 razy. Wszelkie pytania o pętli While? OK. Więc nie jest to sposób możemy zrobić to, co właśnie nie w bardziej zwięzły sposób z co nazywamy Na pętli. Więc pętla składa się z przypadku inicjalizacji, stan i aktualizacja, tak jak mieliśmy przed w tej pętli While. Warto więc przyjrzeć. W tej pętli While, mieliśmy inicjalizacji, a następnie mieliśmy warunkiem, że sprawdziliśmy. A następnie mieliśmy aktualizacji kroku na szczycie. Z pętli For, to w zasadzie trwa te trzy rzeczy i skrapla go w dół do jednej linii. Tak więc pierwszą rzeczą, że ma to miejsce w Pętli jest inicjalizacja. A następnie zrobić średnik, a następnie zrobić warunek, który jest mi większa niż zero przechodzi tam a następnie etap aktualizacji. Tak to zostanie przeprowadzone w bardzo koniec ciała pętli. Więc te dwa programy są zasadniczo równoważne. Masz pytanie? Tak więc to, co jest jedna różnica między tymi dwoma? Czy ktoś może zwrócić na to uwagę? To może być nieco subtelne. To tylko bardzo mała różnica. Tak? GŁOŚNIK 5: Nie będzie w stanie wykorzystać I zmienna poza pętli for [Niesłyszalne]? JOSEPH: Dokładnie. Tak, to jest coś, my się do później nazywany zmienna zakres. Ale w zasadzie, to int życie I poza tym pętli While. Więc po to pętla while jest wykonywana wykonanie, będę mógł użyć I później na w programie. Mając na uwadze, ze to dla pętli, to int i jest objęty zakresem wewnątrz to dla pętli. A ponieważ znajduje się on wewnątrz tego fragmentu pętli For, który rozpoczyna w nawiasach, a kończy nawias klamrowy tam. Wszystko, co jest zadeklarowane wewnątrz tu nie może być stosowane na zewnątrz. Więc jeśli próbuję użyć I na zewnątrz, to będzie powiedz mi, symbol nierejestrowanej. I w istocie, nie będę być w stanie go używać. ROB: I dobrze, 10 lat temu, w dosłownie wszystkie przypadki, nawiasy klamrowe są co używane do określenia Zakres zmiennych. Więc tam, int i jest równa 10 jest zadeklarowana wewnątrz tego zestaw klamrach. I tak to tak długo, jak ja starają się wykorzystywać przed tym nawiasem, to w porządku. Można zobaczyć po wpisaniu zrobić, ty zobacz kreska, kreska, std, równa, C99. Tak, że jest nowsza wersja C, która GCC wdrożyła które również daje ten skrót. Tak to kiedyś nie być dozwolone w C i można zobaczyć, dlaczego, bo to int I jest poza tym nawiasem, ale to nadal uważany w Zakres tych klamrach. Ale to jest bardzo wygodne rzeczy, i tak jest dobry rozszerzenie. JOSEPH: Masz pytania? OK. Więc co jest bardziej przydatne jest to, że czasami chcesz rodzaju dynamizmu w pętla, prawda? Nie chcesz, aby po prostu muszą drukować całkowicie loopy cały czas, jesteś chcą odliczać od 10 lub coś. I tak można użyć zmiennej licznika wewnątrz pętli, jak również. I w tym przypadku, ten program po prostu odlicza od 10 w dół. I co nie drukować? Nie drukować zera, rację, bo gdy - Tak, to też nie drukuje 11. Więc to nie jest drukowany do zera, bo kiedy I jest zero, pamiętam, ocenia warunek, zanim przejdzie na wykonanie ciała pętli. A gdy ma wartość zero, to jest fałszywy, to nie wydrukować odliczanie zero, to po prostu wypisuje liczenia w dół 10 w dół do 1. Jeśli faktycznie chcemy go wydrukować zera, wtedy stawiamy znak równości po to znak większości. OK. Więc jeden sposób sprawdzania poprawności danych, które jest, kiedy zwrócić się do użytkownika, aby zrobić coś, chcesz mieć pewność, że stosować się do instrukcji, jest w użyciu pętli while, prawda? Więc w tym przypadku, pytam na liczbę dodatnią, a następnie jestem oczekiwania na wejście. A następnie sprawdziłem ile wejście jest mniej niż zero, zachować prośbą. Tak długo, jak mi numer że nie jest pozytywna, pytają, pytaj, pytaj. Ale to, co jest swego rodzaju dziwne na ten temat? Albo, co nie wydaje się optymalny o struktura ta tutaj? Ktoś? Tak? GŁOŚNIK 6: Jesteś powtarzając Instrukcja dwukrotnie. JOSEPH: Prawo. Tak więc mamy dwa printf tutaj, prawda? Więc nie ma sposobu, możemy uzyskać to tylko w dół do jednego, które sprawiają, że nasze czytelność kodu i trochę bardziej czysty. I wtedy nie będzie musiał Wejdź już dwukrotnie lepiej. A jednym ze sposobów można to zrobić, jest stosując pętlę-czas. I pętli do-while jest w zasadzie inna forma pętli While gdzie co jest w nawiasach klamrowych zostanie wykonana co najmniej raz. Więc tutaj, oświadczam, int wejście, poza pierwszym. A potem po prostu powiedzieć, to zrobić instrukcja podczas wprowadzania jest mniejsza od zera. Tak trafi najpierw Do. To zawsze wykonać to przynajmniej raz, więc to zawsze zwrócić się do użytkownika do wprowadzania co najmniej raz. A następnie ocenia, że ​​wejście, i to dzieje się w kółko. Tak, pytanie? GŁOŚNIK 6: Czy istnieje sposób, aby to zrobić [Niesłyszalne] typy, jakby można powiedzieć, GetString, a ktoś [niesłyszalne] czy jest jakiś sposób, aby [niesłyszalne] JOSEPH: To pytanie jest, czy istnieje sposób zrobić sprawdzania poprawności danych, jeśli użytkownik nie umieścić w prawo typ zmiennej? Więc jeśli pytamy o int i dać nam ciąg zamiast. I funkcji, które wdrażają dla Ciebie, GetInt, we wszystkich GetString te funkcje, w rzeczywistości już do tego rodzaju wejścia typu podstawowego poprawności pod maską. Więc jeśli używasz funkcji, które dał wam, naprawdę nie trzeba. Ale jeśli chcesz, aby w jak wyglądają rzeczywiście można to zrobić, można spojrzeć pod maską w pliku I/O-- nie złożyć standardowe funkcje I / O jak czytać ze standardowego wejścia i standardowe wyjście. I można dostać lepsze poczucie w jaki sposób można to zrobić. ROB: Jedną z kwestii, choć jest wyraźnie z przykładu można powiedział, można oczekiwać ciąg i wprowadzić int. Jak można odróżnić między celowo chce Ciąg 123 kontra chcąc int 123? Więc ciąg, to prawie nie ma walidacji, tylko co oni Wprowadzona będzie interpretować jako ciąg. Int jest łatwiejsze, ponieważ bez względu na Wejście wziąć od użytkownika, jesteś zawsze z ciąg. I tak, że łańcuch można następnie sprawdzić, czy wszystkie z nich cyfry faktycznie numeryczne? JOSEPH: OK. Wszelkie pytania na temat pętli do-while? ROB: O, i to jest również - wracając do zakresu, dość powszechne błąd stara się korzystać z niektórych lokalnych w tej zmiennej z Do-While pętla wewnątrz tego warunku. I rzeczywiście, jeśli po prostu pozbył to i powiedział, int wejście równa GetInt, to kompilator będzie krzyczeć na nas, ponieważ nie istnieje wejście poza zakresu te nawiasy klamrowe. JOSEPH: I dlatego trzeba tu tego spisu. OK. Więc można też wyjść z pętla wcześnie, jeśli chcesz. Więc to jest inny sposób wykonawczych, co właśnie wdrażane. Zamiast wykorzystania warunku w nawiasach, używamy If wewnątrz ciała pętli do-while. A w zasadzie, gdy wejście jest w końcu większa niż zero, to zostanie wyrwać się z pętli. I tak wszyscy pójdziemy sposób tutaj. I widać, że to byłoby prawdopodobnie korzystny w tym scenariusz, bo to trochę czystsze nieco i trochę trochę łatwiejsze do odczytania. Natomiast to, w pewnym sensie mają dodatkowe linie w nim. To tylko trochę brzydsze, Myślę, że w pewnym sensie. Tak, pytanie? GŁOŚNIK 4: Czy przełamać tylko dostać Ci z jednego zestawu szelki? JOSEPH: Prawo. Więc pytanie jest tylko złamie Ci z jednej pętli? A odpowiedź brzmi: tak. Więc jeśli masz zagnieżdżone pętle, na Na przykład, jeśli mam dla int i jest równa 0 aż do 10, a następnie uzyskać int J jest równa 0 do 10, jeśli wyrwać się z wewnętrzną Pętla, będę nadal go z zewnętrzną pętlą. Więc to zachować wykonując operacje na zewnątrz. Wszelkie pytania o to? Tak? GŁOŚNIK 5: Ale złamać tylko funkcje na klamrach, nie dla innych sprawozdanie? [Niesłyszalne] JOSEPH: To pytanie jest złamie Funkcja tylko do pętli, w przeciwieństwie do inne oświadczenia, gdyby? I tak, że jest to przypadek, ponieważ łamiesz z pętli, w prawo, w znaczeniu. ROB: W zdecydowanej większości przypadków, jest to to jest coś w rodzaju, czy coś, następnie złamać. Więc nie musisz łamać zastosowanie do Jeśli to jest owijanie wokół niego. A także to, że wiele pętli ale należy pamiętać, że są również przełączniki uszkodzony z przerwami. Widzieliśmy wykorzystywane przerwy z przełącznikami przed. JOSEPH: A można też ich używać w pętli while i pętle. Masz pytanie? OK. Więc następnym się to funkcje. Więc może nie stosować jedną z tych BYOB bloki w projekcie podstaw. I to w zasadzie pozwala zdefiniowanie zestawu instrukcje postępowania. I co mam na myśli, że to pomyślmy Powrót do matematyki, prawa, algebry. Masz to, co nazywamy funkcją x, niektóre zmienne, i powiedzmy, że to Funkcja f od x równa się x plus 5. Więc można myśleć o f x. jak ta czarna box, który trwa 15, a następnie produkuje 20. Tak ogólnie, funkcja jest coś, co zajmuje kilka wejść i następnie produkuje kilka wyjść. I dlaczego są funkcje dobry? Są dobre dla wielu powodów. Więc ma ktoś chce brać stab na to, co organizacja oznacza? W zakresie, dlaczego funkcje są pomocne? Tak? GŁOŚNIK 4: To sprawia, że kod jest bardziej czytelny. JOSEPH: Prawo. Tak więc jedną z rzeczy, sprawia, że ​​jest to kod jest bardziej czytelny, prawda? Zamiast jak int x równa się x razy x razy x, może mam kostkę x, który jest bardziej czytelny i bardziej zrozumiały dla czytelnika. Organizacja jest w zakresie dzieląc swój kod do opanowania części, tak, że zamiast próbować zaimplementować to wszystko w jednym długim odcinku w głównym, można rodzaj podzielić go w niczym, OK, niech napisać funkcję z Cube coś, napiszmy funkcjonować do kwadratu coś. W ten sposób można podzielić go na małe, małe części, które można rozwiązać w przeciwieństwie do próby rozwiązania duży problem na raz. ROB: Albo nawet malutkie, małe części, które można i partnerem rozwiązania. JOSEPH: Tak. ROB: Więc zamiast obu Państwo stara się zaszczepić jedną działać w tym samym czasie. JOSEPH: Uproszczenie. Każdy, kto chce zgadywać? Tak? GŁOŚNIK 5: Więcej powtarzania. JOSEPH: Prawo. Więc jedna rzecz, że można zrobić z uproszczeniem jest to, że jest to coś w rodzaju na według tych samych zasad ponownego użycia jest to, że raz napisać funkcję kostki, mogę po prostu użyć tego w kółko i na ponownie w moim programie zamiast wpisywać x razy x razy x nad i w kółko. I tu też po prostu uproszczenie Oznacza to sprawia, że ​​twój rodzaj kodu łatwiejsze do debugowania po podzielone to się do funkcji. Bo wtedy można zlokalizować where Twoje problemy w rodzaju są. Masz pytanie? Więc inny pomysł jest abstrakcja, prawda? Ta czarna skrzynka. Jak wiesz, co robi GetInt do odbioru danych od użytkownika? Tak naprawdę nie powiedziałem, prawda? Wszystko, co ci powiedziałem nie jest GetInt dokładnie to co mówi to robi. Więc nawet jeśli nie powiedzieć, jak to działa, to nadal nie wiemy. Zatem w tym szczególnym przypadku jest Funkcja, która ma poczwórną różne rzeczy do wejścia w celu wytworzenia wyjścia. I można czterokrotnie liczbę przez pomnożenie jej przez cztery. Czy można to, co nazywamy nieco przesunąć ją przez dwa. I zajmiemy się tym nieco później. I nie ma potrzeby, aby wiedzieć, jak to Funkcja pracuje właściwie, dopóki działa zgodnie z opisem. Tak, pod maską, mogę być jak powrócić razy wejściowych osiem dzieli się przez dwa. A ty nie wiesz, prawda? Wszystko, co musisz wiedzieć, robi to, co mówi. Więc to przydatna rzecz o abstrakcji. I jeszcze jedno jest jakby ten pomysł z lokalizowania kodu do jednego szczególności sekcja. Więc jeśli masz problem, nie wiesz trzeba iść na całym kodzie próbuje ustalić, gdzie problem był. Więc w tym przypadku, że realizowane kostka źle. Myślałem, że kostka została pomnożenie przez trzy. Tak więc w tym przypadku jest jeden program że po prostu nie mnożąc przez trzy wszędzie. I jest jeszcze inny program, który ma uwzględnione kostka się do funkcji. A więc teraz, jeśli chcę, aby naprawić swój błąd tutaj, muszę naprawić każdą linię kodu w tym programie. Podczas gdy z drugiej strony, w przypadku korzystania z funkcja, tylko trzeba zmienić co było nie tak w jednym miejscu. Więc w informatyce, my wejść i wyjść zadzwonić. Wejścia są nazywane parametrami lub argumenty i wyjścia są nazywane zwracają wartości. I zobaczymy, jak to pomaga nam rozwiązać od zdefiniowania funkcji w drugim. Więc to jest definicja funkcji dla cubing. Więc to ma wejście, a następnie zwraca, że ​​czasy numer Sam trzy razy. Warto więc podzielenie go. Mamy więc nagłówek funkcji, które zasadniczo składa się z trzech rzeczy. Więc mamy parametry, które są, jak powiedziałem wcześniej, wejść do tej funkcji. A potem dać funkcję, nazwę. W tym przypadku, to się nazywa kostka. A następnie określamy typ z zwracana jest wartość. Więc w tym przypadku, mój funkcji kostki wykonuje się w postaci liczby całkowitej, a także zwraca liczbę całkowitą. Więc jeśli mogę przekazać w dwóch, dwóch jest liczbą całkowitą, Zwraca on osiem do mnie, który jest liczbą całkowitą. Więc powrót parametrów nazwa typu. Pytania o to? A następnie zwracana jest wartość faktycznie podano na końcu mówiąc powrót a następnie powrót co zawiera wartości zwracanej. Więc w tym przypadku, jeśli stawiamy wszystko razem, funkcja przyjmuje w parametry, to się nazywa coś, i zwraca coś, co jest typ które mówią, że to będzie. Masz pytanie? Więc w jaki sposób korzystać z funkcji? Cóż, mamy napisać funkcję, a następnie używamy go w naszym programie, prawda? Zadzwoniłem więc to kostka, i następnie można użyć kostki. Ale to, co jest ważne, aby pamiętać, jest to, że kolejność ma znaczenie. Jeśli mam kostkę poniżej głównego, to zamierza uruchomić w kostce. I w tym momencie, nie ma nic zwana kostka w programie, i to po prostu będzie jak mam nie wiem co kostka jest. Więc będzie powiedzieć, ukryte deklaracja funkcji. To błąd, który pojawia się. I tak w tym przypadku, znajduje się poniżej kostki głównym, więc to nie będzie o tym wiedzieć. GŁOŚNIK 5: Tak jest zazwyczaj głównym zdefiniowane ostatnia funkcja? JOSEPH: To pytanie jest, jest zwykle ostatnio głównym rzeczy, które chcesz zdefiniować? I nie. To dlatego, że jak zwykle głównym aby być na górze, prawda? Bo to pierwsza rzecz, którą chcą otwarcia programista Program zobaczyć. A więc w jaki sposób rozwiązać ten problem my chce być głównym na górze, ale funkcje, które chcemy, możemy je mieć , poniżej głównego jednak móc użyć je wewnątrz Głównym? Cóż, możemy użyć tego, co nazywamy Prototyp funkcji. Więc co prototyp funkcji zasadniczo jest to, że najpierw wykonuje co podpisu lub nagłówka funkcji od tego, co chcemy realizować w dół tu, i umieścić go w Najwięcej programu. Tak więc w tym przypadku możemy powiedzieć, że dobrze, później w naszym programie, będziemy złożyć obietnicę wdrożenia tego Funkcja o nazwie int kostka, która odbywa Wejście całkowitą. Więc teraz, bo to jest powyżej głównego, Głównym, to będzie powiedzieć, och, dobrze, później w programie, który będzie tam, więc mogę się do niego, więc będę po prostu poczekać na teraz. A następnie na dole, możemy wdrożyć moduł. A potem po prostu powiedzieć, główny, dobrze, będzie to rodzaj łącza Te dwa symbole razem. I omówimy, co to Oznacza później. A więc to, że jest to Funkcja kostka, że ​​powinien używać. ROB: [niesłyszalne] o chęci Głównym lub na dole góry, widziałem oba. Są rzeczy, które po prostu lubią Głównym umieścić na dnie. Ale gdy projekt staje się szczególnie duży, zwykle jest w głównej złożyć wszystkie swoje własne. I w tym momencie, jak int linia kostka będzie - wewnątrz stdio.h to banda linii tak po prostu int linia wejściowa kostka int. I tak te rzeczy, które są prototypy mają tendencję do zatrzymania się w plikach nagłówkowych, w które chodzi, to nie ma znaczenia. Cóż, to nie ma znaczenia. Te zawsze idą w górę. A jeśli nie jest główny plik wszystkie swoje własne, nie musisz martwić się o wprowadzenie Poszczególne prototypy funkcji w pliku. JOSEPH: A my się do tego trochę nieco później, kiedy Rob zaczyna mówić o kompilacji. I tak jest też różnica między parametrem i argumentem. I parametr jest tylko to, co nazywamy te wejścia przy zdefiniować funkcję. I nazywamy go argumentem, kiedy faktycznie przekazać go do funkcji. Tak więc w tym przypadku jest to parametr jak powiedziałem wcześniej. I kiedy właściwie go używać tam, kostka x, to x jest sam co nazywamy argumentem do sześcianu funkcji. ROB: To są argumenty parametru - Rozróżnienie to jest bardzo mylić się zamiennie. W tym momencie, dla mnie, jest to jak jeden z te słowa, że ​​kiedy widzę go w dziki, nie mogę pomóc, ale natychmiast pytanie, czy są one za pomocą go w odpowiedni kontekst, ponieważ Różnica jest na tyle subtelne, że tylko każdy ma tendencję - I prawie zawsze mówią argumentu niezależnie od tego, co mam na myśli. JOSEPH: I są również użyteczne funkcje za to, co my nazywamy skutki uboczne. Więc funkcja może nie wejść i może też produkować ma wyjścia. Więc w tym przypadku, jestem definiowanie podprogramów, że nie ma wartość powrócić. Oraz w celu określenia, które stosujemy co nazywamy pustkę tutaj. I tak efektem ubocznym tej funkcji jest to, że po prostu wypisuje rzeczy się na stronie. Faktycznie nie podejmują wszelkie wejść, i to nie faktycznie przynoszą żadnych wyjść. Ale to może być użyteczne w sensie jeśli chcesz, na przykład, debug coś w programie, jeśli chcesz napisać, że mały podprogram wypisuje, powiedzmy, zawartość pamięci czy coś. A więc te efekty uboczne są czasami przydatne poza kontekstem o tak jak wejścia i wyjścia. Masz pytanie? , A do końca tego konkretnego segmentu, co robi ten program zrobić? Dam wam kilka sekund na zapoznanie się z nim. Na bardzo podstawowym poziomie, co chcemy powiedzieć, jest to, że zamienia x i y, prawda? Ilu z was tak naprawdę myśleć będzie zamienić x i y? Podnieś rękę. Nikt. OK. Kto myśli, że będzie nie zamienić x i y? I suma, która była nie cały pokój. Więc niektórzy ludzie nie są pewni. OK. To jest rozsądne. Warto więc przejść przez to, co się dzieje, gdy rzeczywiście wywołać funkcje najpierw w Aby odpowiedzieć na to pytanie. Więc to jest to, co pamięć rodzaj wygląda. To jest coś w rodzaju uproszczonego modelu z tego, co wygląda na to, gdy pamięć uruchomieniu programu. Więc jest coś, co nazywa tu i stosu coś, co nazywa się sterty. A te rosną w kierunku średnim pamięci. Zatem w tym szczególnym przypadku, gdy wywołania funkcji, to zostanie położony na stosie. A następnie, co zawarte jest w tym Funkcja pozostaje w tym, co nazywamy, że ramki stosu funkcji. I tak, aby uzyskać ładny wizualizację to, let's - na przykład, mieliśmy Program główny wcześniej. I wewnątrz główne, zadzwoniliśmy kostkę. Tak więc głównym najpierw przejść na stosie ramki, bo to pierwsza funkcja to się nazywa. I wtedy, gdy kostka jest nazywany wewnątrz Głównym, to dostaje umieścić na górze głównej wewnątrz pamięci. Więc co można zauważyć, jest to, że kostka ma swoje własne parametry, a jego własnych mieszkańców. Więc jeśli rzeczywiście przekazać coś Funkcja, że ​​parametry dostaje to kopie, co było przeszedł od głównego. I jakby to wyjaśnić, niech przejść przez program. Więc mamy stos, to jest tylko część stosu. I co możemy zrobić, to najpierw zainicjować x i y do jednego i dwóch. Tak więc mamy te małe pola. Siedzą w stosie Main ramki na stosie. Zawierają jeden i dwa. Teraz nazywamy swapa. Co się dzieje, możemy przejść do x i y swap i swap tworzy własne kopie tych zmiennych używać wewnątrz jego ramki stosu. Więc teraz tam, mamy, które zawiera wartość, że x i b miał, który zawiera wartość r miał. Tak, raz, dwa. I można zauważyć, że jest to odrębny od x i y z wewnątrz Głównym. Więc teraz utworzyć tymczasowy Zmienna zawiera. Ustawiamy równe b, więc zmiany z jednego do dwóch. A następnie ustawiamy b równego do temperatury, która jest jedną. A następnie teraz wyjść z tej funkcji. Po wyjściu z tej funkcji, Ramka stosu pobiera pojawiło się stos. Nazywamy to pchać. Naciśnięciu ramkę stosu na stos i pop, jeśli ze stosu. A więc to, co się dzieje, to wszystko, co był w tej ramce stosu rodzaju tylko staje w płomieniach. I tak, że już nie istnieje. Ale to, co widzimy? Tak naprawdę nie zmienił Wartości x i y, prawda? Tak więc ci, zatrzymaliśmy lokalnego głównym. I przekazując rzeczy do zamiany, my faktycznie nie zmienił tych wartości. I co my nazywamy to? Nazywamy to przekazywanie przez wartość. Tak w C, kiedy przechodzą do rzeczy funkcje, to przekazuje je przez wartości i tworzy kopię nich Funkcja w użyciu. I dowiemy się o czymś o nazwie przechodzącej przez odniesienie później, ale to sposób można rozwiązać ten problem. Ale nie martw się o że później. ROB: I rzeczywiście, że termin, przechodzącej przez odniesienie, więc C nie ma nawet przechodzącej przez odwołanie. C nie przechodzi wyłącznie wartości. Bez względu na to, co robisz, jesteś zawsze przekazując kopię czegoś. Tyle, że, jak już wspomniano w rodzaju Wskaźniki, które wcześniej z i że łańcuch jest tak naprawdę tylko cztery bajtów wskazując gdzieś w pamięci. Cóż, jeśli mam ten ciąg i to mówi mi, że jest gdzie ciąg - dobrze, jeśli mam ten wskaźnik do tego miejsce w pamięci, to mogę przejść Kopię tego wskaźnika do funkcji, a że nadal nie wie, gdzie funkcja w Pamięć jest. Tak więc oba te wskaźniki są skierowane w to samo miejsce w pamięci i to jak będziemy w stanie zmodyfikować rzeczy poza bieżącą ramkę stosu. JOSEPH: Chcesz zrobić kompilacji? ROB: Nie, to jest 05:30. JOSEPH: OK. Jest 05:30. OK. Więc omówimy Chyba w kompilacji Następny rozdział, lub twój punkt liderem będzie w tym momencie. I - ROB: Masz pytania? JOSEPH: Masz pytania? Tak? GŁOŚNIK 5: Używanie łańcuchów z CS50, każdy funkcje, które chcemy wykorzystać do ci, to będzie jak funkcji C. CS50 nie upadł i wykonane wszelkie dodatkowe. ROB: Zgadza się. Któregokolwiek z C jak [niesłyszalne], można będzie używać tych na naszych strunach. JOSEPH: I ostatnia rzecz, którą chcesz wspomnieć, że mamy przewodnik stylu dla tej klasy. ROB: O, tak. JOSEPH: Więc jeśli pochodzą z programistycznym wcześniej, może mieć pewne konwencje, gdy piszesz kod jak oddanie szelki na tej samej linii lub szczególnie sposoby wcięć lub nazw zmiennych. W tej klasie, chcemy podążać Specjalny przewodnik po stylu tylko dlatego, dobrze, jeśli wyjść i pracować w przemysł, masz zamiar się spodziewać przestrzegać instrukcji stylu Firma, w której idziesz do. Jak na przykład Facebook myślę ma szczególnego rodzaju nazywania Konwencja. I nie ma różnicy między wielbłądem zmienne, podobnie jak obudowy i oddzielając je podkreślenia. A także, myślę, że najważniejsze, jak np. wcięcia, prawda? Mamy początek gdzie nawiasy klamrowe Warunkiem jest, i są w następnej linii. I my również umieścić nawiasy klamrowe w nawet jeśli jest to tylko jedna linia. I wiele razy, istnieją sposoby, aby zrobić to gdzie można zostawić te szelki się, czy jest to tylko jedna linia na podstawie instrukcji If. Ale w tej klasie, chcemy podążać specyficzny przewodnik redakcyjny tak masz wykorzystywane do tego rodzaju rzeczy. ROB: Tak, i Styl 50 będzie egzekwowania tego przewodnika stylu, a my będzie używać stylu 50 do jakości kodu. Więc to sprawia, że ​​ułatwienia dla nas i mam nadzieję, że nie powinno się rzeczy, które znacznie gorzej dla ciebie podano standaryzowany stylu nie powinno być nierealne. JOSEPH: I wreszcie, aby znaleźć styl przewodnika, przejdź do manual.cs50.net/style. I tak. GŁOŚNIK 4: Idziesz do egzekwowania żadnych znaków w wierszu? ROB: Tak. JOSEPH: Przepraszam, chłopaki. ROB: To tak, jakby tylko jeden z nich. W tym momencie, jestem OK z 120. Jestem OK z mówiąc 120 znaków w wierszu. Rozumiem, że jest pewne ograniczenie. Myślę, że 80 jest tak mała, ale jesteśmy jej wykonywania. JOSEPH: Osobiście uważam, że z C, 80 znaków jest bardziej OK. Kiedy zaczną się do innych Języki, takie jak PHP, JavaScript i nie więc uzasadnione tylko ograniczyć jest do 80 znaków. OK. Cóż, to był super odcinek. Czy ktoś chce cukierka? GŁOŚNIK 4: Tak.