[Powered by Google Translate] [♪ ♪ Buzzing] Więc wprowadzenie na co mam się na ekranie; jest to jedno z narzędzi, stworzyliśmy w okresie letnim; to się nazywa CS50 Spaces, i to jest nasz wspólny wniosek kodowania że będziemy używać w sekcjach. To jest bardzo fajne. Czy ktoś z was widział CS50 biegać jeszcze? Pozwól mi wyciągnąć taką funkcję w innej zakładce. Run.cs50.net Tak jeśli pójdziesz do run.cs50.net, widać to na twojej drodze do przeglądarki faktycznie kod - napisać kod w C, a następnie go uruchomić, więc zarówno kompiluje, uruchamia go, a następnie zwraca wynik do Ciebie, więc jest to rodzaj chłodnym sposób eksperymentować niektóre z kodu, który David idzie w wykładach i dajemy na was na zbiorach problemowych bez posiadania na uruchomienie urządzenia. Więc co robi Spaces to różni się od jeśli wrócić do tej karcie Spaces jest CS50 run, jak widać tutaj, Ale jeśli przewijania i spojrzeć na drugiej stronie okna, widzisz prawo jestem jedyną osobą w tym miejscu, ale to, co mam zamiar zrobić, to poprosić, żebyście dołączyć do tej przestrzeni ze mną a my wszyscy się do kodu w tym samym oknie, mało, kod akcji ze sobą, i rozmawiamy na temat różnic między naszym kodzie. Więc to jest rodzaj chłodnym rzeczy - więc dołączyć, jeśli chcesz odwiedzić ten link tu na górze że już podświetlona, można po prostu wpisać w apps.cs50.net/spaces/vqcspSnO. Dobra, więc do startu, Mam zamiar dać ci trochę zwiedzanie tego. Zrobimy jakieś głupie trochę kodowania z nim na początku, po prostu tak, że każdy ma trochę wyczucia, jak to jest, ale to, co zrobiłem - lub co mam zrobić tu jest - Mam zamiar wziąć kod pisałem tutaj, które jak widać teraz jest pusta; nie robi nic. To jest tylko kod płyta kotła, nazwijmy to. Z trochę do zrobienia komentarza. Zamierzam zapisać naciskając ten przycisk Zapisz. I co to robi to podkreślił to tutaj krótko - że zmiana zapisu zielone pole, i teraz, jeśli szukasz dla mnie w kosmosie, kliknij moje imię, widać, że mam tę wersję właśnie tutaj, i po kliknięciu na tej nowelizacji, załaduje ten kod do swojej przestrzeni, zbyt. Więc nie każdy załadowany ten kod do swojego Space? Wszystko w porządku, jeśli nie masz jeszcze, śmiało i to zrobić, a potem to, co chcę wam robić w ten mały punkt do zrobienia to napisać trochę o sobie, używając printf, tak na przykład, napisać printf ("Nazywam się Nate"); a potem pisać "I ukończył w 2009 ze Stanford " i chciałbym usłyszeć o co roku jesteś w szkole, czy jesteś na uczelni lub w szkole biznesu lub inna szkoła Harvard, czego się uczysz, jeśli jest jeszcze znana; jeśli nie jest to wiadomo, że jest całkowicie cool. I nie zdecydowała aż byłem późno w moim roku student drugiego. i wtedy również kocham wiedzieć cokolwiek szalony chcesz mi powiedzieć, czy coś o klasę lub tylko cokolwiek innego. Kiedy skończysz pisać, że z twoją małą printf, jeśli będziesz zapisać zmiany, a raczej najpierw upewnij się, że można go uruchomić i że drukuje się dokładnie, co chcesz go wydrukować, a następnie, jeśli pójdziesz do przodu i zapisać, że zmiany przy rewizji przycisk Zapisz, to pierwszy mały facet tutaj, a my trochę przejść i zrobić trochę wprowadzenia w ten sposób. Więc należy po prostu nacisnąć przycisk Play, który jest tutaj na górze po lewej stronie, więc ten przycisk Play, w lewym górnym rogu będzie wyślij kod off do naszego serwera, gdzie pobiera skompilowany, a następnie uruchomić. Więc co jest trochę szalony o to Kod ten faktycznie nie jest uruchomiony na komputerze; to faktycznie są wysyłane przez Internet. Jak leci, Charlotte? >> I - w porządku. Jestem - Myślę, że jestem mających trudności z zapisaniem na serwerze, tak, że można - można uruchomić program. I wtedy, gdy próbuję go uruchomić, to mówi, że nie ma błędów. Zadeklarowane jako wirus, który nie jest już tam. Oh, zobaczymy, może trafisz Zapisz ponownie? Widzę go na ekranie. Prawo >>, w porządku, więc to, co mam. I nie wiem, dlaczego nie pozwolił mi go uruchomić. Oh, dobra, przepraszam. Czy możesz wyjaśnić, dlaczego - co jest nie tak - co nie było z nim pracować? >> Tak, bo nie widzę, że nie ostatnia linia, gdzie wciąż jest zmienna że nie oświadczył, której nie zamierzam za to będąc tam. Tak, idealny! >> Teraz jeśli go zapisać, myślę, że powinno działać. Teraz, po zapisaniu go, to działa, niesamowite. Więc tak, jak przejść przez - więc to, co się dzieje, Mam zamiar to powtórzyć dla kamery. Co się dzieje, że ta zmienna s zostało w po - Zakładam, że usunięte niektóre inne rzeczy gdzie zadeklarowana jako, i tak to było wyrzucanie rzeczy i nie pozwalając uruchomić. Więc to jest dokładnie to, co chcemy zrobić w sekcji jest mieć ludzie starają pisania różnych fragmentów kodu, kompilowanie go, zobaczyć, co działa, co nie, a następnie trochę mówić o tych rzeczach, ponieważ są to punkty wyzwalania I jeszcze spotkać, I jeszcze - zrobić wiele głupich rzeczy przez cały czas, i nie wiem, dlaczego to nie działa, więc niech to podciągnąć rewizji Charlotty 3, a my go uruchomić. Więc kiedy biegam, teraz mam jej kod tutaj, Można powiększyć, naciśnij przycisk Uruchom, dodane to, buduje go, uruchamia go, mówi, że prowadził z powodzeniem, i jeśli przewiń w dół zobacz Charlotte jest młodszy o Adams House, psychologia, wtórny w ekonomii; niesamowite. Świetnie cię poznać! Awesome. Dobra, przechodząc, chodźmy do Daniela przejdź do wersji 3, skompilować, uruchomić; dlaczego nie możesz powiedzieć nam trochę o sobie, Danielu? >> Call me Dan. Idę do szkoły biznesu naprzeciwko was, i byłem w Marines przed tutaj, i to wszystko jest dla mnie nowe, więc tak. Nie czuję się źle, jestem 30, a ja nie znam żadnej z tych rzeczy. Super, dzięki, Dan! Dobra, mamy kolejny Daniel. Idziesz przez Daniela - będzie się przedstawić, Danielu? >> Jasne, jestem Daniel. Jestem studentem drugiego roku w Mather teraz. Teraz koncentruję się na rząd, ale chciałem brać CS50 bo słyszałem świetne recenzje na temat tej klasy i nigdy nie próbowałem CS wcześniej. Przewiń w dół i zobaczyć to - cool. Idąc dalej, Jared. Jak idzie? >> Dobry, jak się masz? Jak widać, jestem młodszy Koncentrator filozofia Eliota, pochodzi z południowej Kalifornii, i jestem zainteresowany objęciem CS50 bo lubię logikę to, i wydaje się naprawdę fajne do robienia rzeczy na komputerze, więc. Niesamowite, gdzie w południowej Kalifornii jesteś? >> O godzinie od [niesłyszalne], małe miasto [niesłyszalne]. Och, tak, mój tata od Redlands. Fajnych rzeczy. Dobra, Jimmy, jak leci, Jimmy? >> Dobry, jak się masz? Całkiem nieźle! Opowiedz nam o sobie. >> Jestem studentem pierwszego roku, a ja nie jestem do końca pewien, co mam na kierunku ale jestem trochę pochylony w kierunku ekonomii. Jak Daniel przede mną, nigdy nie robiłem żadnego CS, ale brzmi fajne. Jestem pierwotnie z Chicago. Awesome. Więc sprawdzić jego wydruk tutaj. Chciałem zapytać, czy ten wydruk zgodnie z oczekiwaniami? >> Nie, nie pamiętam, aby wydrukować nowy wiersz. I rzeczywiście zapomniałem, że kiedy pisałem moją rzecz po raz pierwszy również. Jest to rodzaj bólu, aby pamiętać, aby umieścić te ręcznie. Byłoby miło, gdyby to po prostu wiem, że to, co chciałeś. Dobra, Kelly. Wow, mamy 2 Kellys; 2 Daniels 2 Kellys. Więc Kelly - idziesz przez Kelly Ren? Ok, super. Lub Kelly, mam na myśli. >> Więc tak, więc jestem Kelly. Jestem studentem drugiego roku w Pfoho. Dostałem e-maila dzisiaj, że mam jeszcze 7 tygodni zadeklarować moją koncentrację, więc staram się nie myśleć o tym, i lubię pieczenia, uruchomiony i Craisins. Nie mam doświadczenia z tym większość z CS; Nauczyłem się budować witryny sieci Web, gdy byłem bardzo młody, ale myślę, że prawdopodobnie nauczyłem się źle wiele razy. Mam nadzieję, że nauczę się trochę więcej i - tak. Super, dobrze, dziękuję. Przejdźmy do innych Kelly; Nie mam nic - powiedziałeś coś tutaj? >> [Niesłyszalne] Jest! Sweet! >> Dobra, więc jestem Kelly. Jestem pierwszym roku student. Jestem na kierunku mózgu, umysłu i edukacji. I ukończył w Franklin & Marshall College 2008 z kierunków w psychologii i socjologii i drobne w języku francuskim. Biorę CS50 bo jestem zainteresowany w uzyskaniu doktoratu z Neuroscience i czuję, że to pomoże mi zrozumieć technologie używane. Awesome. Idąc dalej, Mikaela. Czy to jest poprawna wymowa? Ok, super. >> Jestem Mikhaila. Jestem studentem drugiego roku w Kirkland House, i jestem koncentrując się w inżynierii mechanicznej. Bardzo lubię jazdę na rowerze, zbudował rower to lato. Biorę CS, faktycznie, jako wymóg stężenia, ale wiesz, myślę, że to jest nadal fajny rodzaj klasy technicznej. Awesome - budujesz rower tego lata? >> Tak. Wow, jak ramy i to wszystko? >> Uh-hunh (pozytywna). Wow, to naprawdę fajne. >> [Niesłyszalne aparatem czat] [Śmiech] Tak, to było tak dawno. Nigdy nie wiesz, prawda? Cóż, fajnie, dobrze, dziękuję, Mikhaila. Dobra, Missy. >> Nazywam się Missy, jestem studentem pierwszego roku, tak to znaczy, że nic nie wiem! Chcę się skoncentrować w astrofizyce. W CS50, Czuję się na pewno w tym pomóc. Dziwny fakt o mnie, że jestem w kraju certyfikat strażakiem. Wow! Jak to się stało? >> I wzięli udział w akademii i poszedł do piekła dla wielu tygodni otrzymał certyfikat. Wow, gratulacje! To nie lada wyczyn, na pewno. Ok, więc teraz zrobimy mnie. Jestem następny w rzędzie. Jestem - uruchom go. Więc nazywam się Nate. Byłem klasa 2009 w Stanford. I był symboliczny główne systemy, który jest podobny do mózgu, umysłu, koncentracji Behavior tutaj, ale jest to swego rodzaju mieszanka informatyka, medycyna, psychologia i filozofia. Rodzaju - tak, wiele dziwnych rzeczy, ale to było świetne, a ja moja magistra informatyki tam, jak dobrze. Więc jestem nowy na Harvardzie w tym roku. Naprawdę chciałem dostać się do nauczania. I przez ostatnie 4 lata w Stanford TA-nych klas Informatyki David i tak daj mi spokój, i mam zamiar być pomocą w CS50, więc robię to cały czas, że nie jestem w szkole, grad. To było zabawne. Mam nadzieję, że nadal będzie zabawa, jestem pewien, że tak będzie. W porządku, Sam. >> Nazywam się Sam, jestem studentem drugiego roku w college'u, w świetle prawa w szczególności. Moim głównym będzie historia nauki, zapewne, i VES wtórne, a moim ulubionym kolorem jest żółty. Nie ma potrzeby, by osądzać, czy coś, ale to dobry kolor! I Stella. >> Cześć, jestem Stella, jestem studentem pierwszego roku w Grays. Nie mam pojęcia, co ja skoncentrowaną w jeszcze tak CS50 była tylko rodzajem losowo, co jest ciekawe. Fakt Fun, Jimmy był pierwszym znajomym Harvard z kopalni, bo oboje jesteśmy z Chicago. Cool, i Grace - to ma być naprawdę ładne, prawda? >> Myślałem [niesłyszalne]. Oh, yeah. [Niesłyszalne / off-camera czat] Okay, wciąż się uczę, ciągle uczyć. Więc mamy coś innego, który jest swego rodzaju ciekawy tutaj. Tak, jestem po prostu zastanawiasz się, nie masz pojęcia, że ​​tu się dzieje? Wiesz, jak to zinterpretować? >> I miał być umieścić średnik po każdej linii. To trochę uciążliwe. Czasami te średniki może być prawdziwy ból do wyśledzenia. Tak więc okazuje się, że Specjalny program używamy w tym roku skompilować kod C jest nazywany Clang, a powodem zaczęliśmy używać dzyń w tym roku - ponieważ nie wykorzystaliśmy tego programu w przeszłości; Użyliśmy inną nazwą GCC, które jest bardzo popularne - Clang faktycznie daje komunikaty o błędach sensu. Ten mówi, "oczekiwać", "po wyrażeniu" i nawet mówi ci wyraz, po którym potrzebny średnik. Więc masz go naprawić? >> Tak, właśnie teraz. Super, daj mi znać, a my go ciągnąć, a my go uruchomić. Ale tak, realizacja tych średników w to rodzaj bólu. >> Naprawiłem go, więc myślę, że powinno działać. Awesome - wersja 3. To wygląda. W porządku, więc teraz, jeśli mamy go uruchomić, tam idzie. Fajnych rzeczy. Dobrze. Tak więc dzięki za to robić. Fajnie jest spotkać was. Co zrobimy teraz jest spędzić trochę obok troche nurkowania w dziale problemów które pochodzą z określonego problemu z tego tygodnia i zrobimy, że dla większości z sekcji do końca okresu, i wtedy możemy zapisać ostatnią 15, 20 minut lub tak aby porozmawiać o problemie postawiła sobie a następnie tylko wszelkie inne pytania masz ogólnie o klasie. Powiedział, że to, co naprawdę chcę robić jest za każdy udział używania rzeczy przestrzeni, rzucając w kodzie, rzucając w sugestii, i mówić o tym, kiedy takie rzeczy przerwę lub nie działa, tylko dlatego, że są to rzeczy, które Wiem, natknąłem kiedy zacząłem kodowania, i naprawdę trochę frustrujące, czasami bo jeśli to jest jak 2 rano, zanim zestaw problem wynika, tak - tylko na ujawnieniu Nie rozpocząć programowanie aż byłem studentem drugiego roku w college'u. To było trochę dziwne, to coś nieznanego że słyszałem było fajne i ja również słyszałem to może być prawdziwy ból w tyłek jeśli pominąć średnik i to tylko błąd utrzymując swój program z pracy i utrzymanie się przed snem, więc na pewno, jeśli masz takie pytania, jeśli masz wątpliwości tak, daj mi znać, bo chcę, aby to dobre doświadczenie dla was. Więc nie macie wszystkie pobrane problemu ustawić jeszcze? Trochę wiem, gdzie to jest? Okay. Więc pójdziemy do cs50.net, bo nie ma go na tym koncie, pull up zestawy problemowe, podciągnąć zestaw problemu 2, i przyjrzymy się standardowej wersji dziś. Zatrzymamy się specyfikację tutaj. Przewiń w dół. Więc mamy zamiar zacząć szukać w tej części pytania. Czy wy oglądaliśmy te spodenki jeszcze? Okay. Tak więc są spodenki na pętli, które jest wykonywane przez Tommy, jeden z nauczania towarzyszy głowy. Jest jedna w sprawie zakresu, Wierzę, że wykonywana przez innego faceta nauczania o nazwie David a jeden na Caesar Cipher również dokonana przez Dawida. Są bardzo fajne. Byliście obserwując ich spodenki do tej pory? Co u nie było? Była pomocna? Ok, dobrze wiedzieć. Jeśli nie są, można tak powiedzieć. Ale zanim to zrobisz, nie wy spojrzał na te pytania w ogóle? Porozmawiajmy o tym nieco mało. Więc mamy wprowadzone w ciągu ostatnich kilku tygodni w wykładzie Liczba różnych obwodów. Jest dla pętli, pętla, a następnie do-while, w wykładzie, rozmawialiśmy dużo o jak te pętle są dość podobne w wielu aspektach, i można zrobić wiele z tych samych rzeczy w pętli while że można z pętli for. Po prostu trzeba trochę użyć odpowiednich kombinacji zmiennych i takie. i tak naprawdę Rozróżnienie między rzeczywistym wszystkie pętli jest czasami są bardziej użyteczne ich użyć jednocześnie, niż w innym czasie. Tak na przykład, Pętla while różni się ona od-while pętli. Czy wszyscy czują się jak dobry uchwyt podczas do-while jest bardziej przydatna lub jaka jest różnica? >> Myślę, że różnica jest do-while działa - nie wiem całkiem co terminologia jest jednak szereg funkcji w pętli. One automatycznie - robi swoje biegi przynajmniej zanim sprawdza warunek, czy pętla będzie działać tylko, gdy to ciągle działa - czy warunek jest spełniony. Tak, zgadza się to ma sens? Rzućmy okiem na trochę kodu. Więc po prostu powtórzyć pytanie, lub odpowiedzi, raczej; Odpowiedź była, że Pętla while sprawdza, czy warunek , które można określić, jest spełniony przed uruchomieniem ciało pętli po raz pierwszy, natomiast do-while automatycznie uruchamia ciało pętli Nazywamy to - to dziwne terminologii, ale jeśli kiedykolwiek powiedzieć niczego, co nie ma sensu, daj mi znać - ciało pętli jest to, że rzeczy, które można umieścić w między klamrami. Oraz w do-while, że ciało się uruchomić co najmniej raz, a następnie sprawdzić stan się przed uruchomieniem każdego kolejnego czasu. Więc rzeczywiście, Sam, masz coś przeciwko pisania prostych pętli while w pomieszczeniach? >> Jak coś w rodzaju zrobić nowy ...? Po prostu usunąć, co masz w środku. Tak, po prostu usuń go. >> Cóż, uważam, że mam to - który chcesz, podczas gdy, czy chcesz ...? Tak, tylko nie zaś prawdą, wydrukować coś. I zobaczmy. Alexander, zdałem sobie sprawę, że nigdy nie wprowadził cię. >> Och, to jest w porządku. Czy - można zakodować maksymalnie do-while dla nas? >> Tak, spróbuję. Wszystko w porządku, po prostu wyciągnąć te się na ekranie, tak, że niby już uchwyt, jakie to są różnice. Więc tutaj jest to, co Sam robi. Ma liczbę całkowitą o nazwie i że on inicjowany 17. Potem mówi, podczas gdy (int i = 17) printf ("Mam na imię Sam."); Więc co się dzieje, gdy ten kod? Jest błąd, co to o błędzie? Załóżmy, wyciągnij go i porozmawiać o tym. Wystąpił błąd, to mówi. Załóżmy, przewiń w dół. Więc dał nam ten błąd, i powiedział, "Hej, spodziewałem wyrażenia." To jest trochę tajemniczy. Tak, tak, dokładnie - i znowu, będzie jeszcze trochę błędów, które złapiemy w zaledwie sekundę. Ale to jest jedna z tych dziwne terminologii rzeczy, więc tym int i = 17 nie jest wyrażeniem. Jak to wygląda, że ​​robi się to oświadczając integer nazywa i ustawiając ją na równych 17 lub raczej, oddanie 17 do tego int nazwie i. I że nie ma sensu W kontekście tego pętli. To nie ma sensu, jak zobaczymy, w ramach pętli for, bo deklaracje pętli nie zacząć z tym dla int i równa coś i idzie dalej. Tak jak ty - coś naprawić, dobrze. Tu to idzie; niesamowite. Tak teraz wygląda to trochę inaczej. Kilka rzeczy się zmieniło. Czy możesz nam powiedzieć, co się zmieniło? >> Wyjąłem int, więc nie ma deklaracji [niesłyszalne] zamiast przydziału. Jeden znak równości, umieścić 2 znaki równości, co oznacza równe. Awesome. Tak, więc to, co nie zostało Sam wyjął int który był tu wcześniej, więc jeśli patrzeć tylko na to - to jest to, co było wcześniej, to powiedział, int, który deklarując ją - więc wyjął typ. Jest int, char, string, krótki, te nazywane są typy. Więc wziął typ i wcześniej, miał tylko pojedynczy znak równości i to, co powiedział, było problematyczne o tym została kiedy masz 1 znak równości, to operator przypisania. To nie jest badanie, czy 2 rzeczy są równe. To właściwie ustawiając coś równą coś. Jesteśmy umieszczenie numeru 17 do zmiennej i. Tak, aby zrobić tego rodzaju porównania, trzeba użyć podwójnego równa, co jest raczej dziwne rzeczy , ale jest to dość częsty błąd. Więc jedna rzecz ja zaznaczyć, jeśli nie masz nic przeciwko, jest to, że, w nasza funkcja tutaj int main, widzisz, że ciało naszego funkcji jest przesunięty z lewej strony przez 4 spacjami lub tabulatorem. Powód to zrobić jest tylko dla czytelności. Jak widać, w pętli while Sama tutaj że nie tiret wcale i że nie ma to wpływu na działanie kodu. To będzie działać dokładnie tak samo. Tak na przykład, jeśli się do góry o i naciśnij przycisk Odtwórz nasz, to zbudować, to będzie go uruchomić, i co się stało? Dlaczego wciąż mówią działa? >> Bo to będzie powtarzać hi. Dokładnie, i dlaczego ciągle powtarzać cześć? Ponieważ całkowite >> nigdy nie zmienia, więc to zawsze 17. Tak, dokładnie tak Zobaczmy, po - przypominają mi się nazywasz? Jimmy. Jimmy powiedział, że tak Powodem hi powtarza w kółko ponieważ ten warunek jest zawsze prawdziwe. Nigdy nie zmienia wartości i. Nigdy nie zmienia zawartości, co jest przechowywane w tej zmiennej. Więc w tym momencie mamy ten błąd, że Twój program generowane zbyt wiele kopii, i jeśli przewiń w dół i trochę patrzeć na to co się tutaj dzieje, można zobaczyć, że to jest hi, hi, hi, hi, hi, hi, hi przez całą drogę. Awesome. Więc rodzaju powrotem do punktu początkowego że o wcięcie tutaj w ciele pętli nic nie wpływa. Program nadal prowadził dobrze. Typowo dla dobrego stylu - i to jest coś, czego szukać w swoich zestawach problemowych - prosimy Cię o to przez 4 tiret przestrzeniach, co można zrobić przez naciśnięcie klawisza Tab lub poprzez ręczne wprowadzenie w 4 miejscach siebie. Spoko, dobrze więc wróćmy i spojrzeć na Aleksandra-while. Wystarczy troche >> problemy z niewielką. Dobra, niech działa przez niego. Czy to jest cool? >> Tak. Ok, więc zaczynamy. Jest to kod, który Alexander napisał. Czy iść Alex - w porządku. Tak tu jest kod, który Alex napisał. Tak więc, mamy naszą deklarację główny tu, a potem mamy to zmienna całkowita o nazwie i deklarowanych tutaj. Mamy do instrukcja i ciała, a następnie znów z tymi szelkami więc jest to ciało do-while - chciałbym powiększyć to więc jest bardziej czytelny - i ciała, staramy się wydrukować "to jest ciało", i + + więc zwiększamy zawartość I i zrobić dopóki nie ma się 3, a nasz program się kończy. Więc co się dzieje, kiedy uruchomić ten program? >> Spodziewałem identyfikator. Ok, więc budować, uruchamiać, błąd. Co się dzieje? Mamy przewiń tutaj mamy tę nieco tajemnicze rzeczy, patrząc, oczekiwano średnika po deklaracji górnym poziomie. To jest trochę dziwne. Czy ktoś ma pomysł co może być grane? Trochę dziwne, tak. >> [Niesłyszalne] być zadeklarowana poza nawiasami? Tak, że nie stosuje się wtedy, gdy użycie nawiasów? Tak powiedział ten facet poza którym nawiasy? Och, te chłopaki - nawiasy? >> Tak. Tak, dokładnie. Tak więc okazuje się, że nie można rzeczywiście zadeklarować zmienną tutaj tak. Co możesz mieć próbuje zrobić to - wyciąć go z tam - Możesz umieścić go w nawiasach klamrowych tutaj lub inną alternatywą jest wprowadzenie całkowicie na zewnątrz. I tak to - w zależności od tego, gdzie faktycznie umieścić deklarację tej zmiennej całkowitej, możesz dostać 2 bardzo różne rodzaje zmiennych; kiedy jest poza głównym, to jest to, co nazywamy zmienną globalną. To jest poza zakresem dowolnej funkcji - to nie jest w funkcji - natomiast jeśli umieścimy go wewnątrz main, jak tu, to się nazywa zmiennej lokalnej, bo to lokalne do zakresu głównego. I porozmawiamy trochę więcej o tym, co to są różnice między 2 typów i dlaczego używać różnych rodzajów zmiennych, ale teraz, można po prostu zachować wszystkie zmienne lokalne, ponieważ nie mamy żadnej potrzeby zmiennych globalnych. Okay, więc to jest jedna rzecz, właśnie tam. Spróbujmy działa to jeszcze raz, zobaczyć co się dzieje. Uruchom, dostać inny błąd. Powiększyć trochę, co mamy? Dostajemy ten spodziewany nawias po zrobienia / while. Jakieś pomysły co się dzieje? Dan? >> Czy przy czym nawias, a następnie - I nie wiem, czy trzeba redeclare int, ale zrobić while (i <3). Dokładnie tak. Okazuje się, że Dan Dokładnie. Nie musimy postawić ten typ tu ponownie. Możemy zamiast zabić typ i po prostu to zrobić. Dobrze. Będę Powiększ out, spróbuj jeszcze raz. Spójrz na to, że prowadzi udane. Jeśli będziemy przewijać w dół, "to jest ciało" drukowany 3 razy. To bardzo miłe. Dobrze, dobrze, chłopaki. Dobrze zrobione. Jak to do tej pory? Przyzwoite tempo? Okay, cool. Więc, jak to niby z powrotem do pierwotnego pytania, my - a teraz jeśli widzimy różnicę, widać, że w tym do-while, Warunkiem jest ostatni. Tak jak komputer odczytuje program od C programy realizowane są w tym rodzaju kolejności, gdzie dosłownie zacząć od pierwszej linii głównej, a następnie wykonać linię 6, linia 7, linia 8, linia 9, linia 10, linia 11, wszystkie rzeczy na górze tutaj zamierza wykonywać raz przed kiedykolwiek przetestować ten warunek, aby zobaczyć czy i - lub zawartość i, raczej - mniej niż liczba 3. I tylko wtedy, gdy mamy do linii 12, zawartość I ma mniej niż 3 mamy rzeczywiście wrócić do linii 7 i powtórzyć proces, a następnie testujemy stan znowu i znowu i znowu. Więc możemy to kontrastować z - powiększanie powrotem, przewiń do wersji Sama, będziemy patrzeć na to, nieznacznie zmieniony tak, że to już nie jest nieskończona pętla - gdzie jeśli powiększyć, widzimy, że ten program jest wykonywany, to się najpierw zadeklarować int i, ustawić zawartość będę na 0, a następnie uderza stan while początku więc w tym przypadku, to ciało, ten printf ("cześć") oraz i + + nie będzie nawet wykonać , chyba że jest faktycznie mniejsza niż lub równa 2. Tak więc, jeśli jest 3, na przykład jeśli ustawimy to tutaj równa się 4 - lub zrobię 3, bo powiedział 3 - a następnie go uruchomić, będziemy budować, to będzie prowadzony całkowicie w porządku, ale to nie będzie faktycznie wydrukować coś, ponieważ nie ten test dla pierwszego przypadku. Więc w klasy, rodzaju rozmawialiśmy o tym, dlaczego te-while loops przydatne są czasem i dlaczego chcemy go używać w przeciwieństwie do pętli while. Czy istnieją - czy macie jakieś propozycje , dlaczego do-while może być bardziej przydatne? >> No cóż, myślę, że do-while pętli jest, jeśli chcesz dane wprowadzone przez użytkownika, ponieważ w ten sposób można pozwolić im umieścić coś w raz, jeśli jest to właściwe, można przejść do części programu, ale jeśli to nie jest poprawna, to można przechowywać na monitowania użytkownika chwili umieszczenia odpowiedniego wejścia. Tak, dokładnie - dokładnie, tak do-while jest przydatna bo gdy monitowanie dla danych wejściowych użytkownika ponieważ trzeba dostać wprowadzane przez użytkownika zanim rzeczywiście można to sprawdzić. Więc w PSET 1 w Pset 2, dokąd się wybierasz, monitowanie dla danych wejściowych użytkownika dużo, To przydatna rzecz w użyciu a nie tylko prosty pętli. Jeśli korzystasz z pętli while, możesz zrobić to samo - można zrobić to samo z pętli while jak to zrobić z pomocą do-while. Po prostu trzeba trochę mieć ten proces powielania gdzie można uzyskać dane wejściowe, a potem uruchomić pętlę while. Mając na uwadze, do-while, po prostu trzeba napisać to raz i jest wiele czystsze. Dobrze. Masz pytanie? Ma sens? >> Return 0 - to jest po prostu rodzaj boksu, czy jest to -? Tak, więc możemy - dobrze, zajmiemy się tym nieco więcej później ale okazuje się, że to 0 return że kładziemy na końcu głównej cały czas - można trochę po prostu wziąć ją jako coś, co robimy na razie. Co zaczęliśmy rozmawiać z funkcjami rodzaju na koniec tygodnia, a następnie ponownie w tym tygodniu jest to, że funkcja trwa wejść, które są te rzeczy w nawiasach; są 2 wejścia, nasze argumenty lub parametry, co oni nazywany również do naszej głównej funkcji, , a następnie wytwarza sygnał wyjściowy funkcji które nazywamy wartości zwracanej. I wartość zwracana w przypadku main to int, to liczba całkowita, i sposób powiedzieć funkcję, "Hej, to jest to, co wyjście będzie ", jest z tym słowem" powrót ", to słowo, a raczej i tak głównym powrocie 0 lub głównym wyprowadzanie 0 jest standardem w programach C bo wracając 0 oznacza, że ​​z głównych "Hej, wszystko wykonane z mojego programu w porządku." Jeżeli mielibyśmy postawić coś innego niż 0, 1, jak na przykład, , który jest używany, aby powiedzieć, kto prowadził ten program , że coś poszło nie tak. Więc jak to większego zaangażowania z rzeczy nad semestrze jeśli kiedykolwiek potrzebuje powiedzieć, "Oj, wiesz, coś poszło nie tak z tym programem" zamiast mojego awarię programu, chcę powiadomić Biegacz z mojego programu, że coś poszło nie tak, możesz użyć wartości zwracanej, jak my to nazywamy, to nie jest 0. Więc opiszę, że trochę więcej raz mamy do funkcji. Ten rodzaj ma sens? Okay. Funkcje są rodzaju dziwaczne - Myślę, że dla ludzi, którzy mają dużo tle matematyki, chodzi trochę łatwiej, zwłaszcza jeśli masz trochę więcej abstrakcyjne tło matematyczne i masz w zwyczaju mówić o funkcji i wszystkie tego rodzaju rzeczy. Ale będziemy próbować je pokryć i iść ładnie i powoli, jak wymyślić. Podobnie cała ta argc int, char * argv [], do teraz, można również wziąć to jako płytkę kotła. Zaczęliśmy na pokrycie tych trochę w wykładzie kiedy mówimy o argumenty, że przejdzie do programów z linii poleceń, ale w twoim zestawie problem i programy, jest to całkowicie w porządku po prostu napisać pustkę i keep it simple. I co to znaczy, że nieważne "Hej, główny nie będzie akceptować żadnych nakładów; jest to po prostu program, będziemy po prostu uruchomić. My nie zamierzam dać mu żadnych dodatkowych informacji każdym razem, gdy go uruchamiam uruchomiony. " Więc teraz, można to zrobić; można nawet pominąć 0 zwrotny na koniec programów i będą biegać dobrze, ale polecam tylko utrzymanie, że widok W ciągu kilku tygodni, zaczniemy od rodzaju Odchyl pokrywę trochę i dowiedzieć się więcej o wszystkie te różne małe części ruchomych. Dobra, teraz porozmawiajmy o naszej drugiej pytanie. Więc co to jest "nielegalna identyfikator" wskazują zwykle jeśli wyprowadzane przez Clang? Myślę, że widzieliśmy, że już dziś. Może ktoś dać zakręcić, co to oznacza? Zobaczmy, Kelly - jeden z Kellys. >> So - Tak, to, co robi - >> Myślę, że jeśli, jak, nie deklaruje zmienne i spróbować go użyć. Tak, dokładnie, dokładnie. Więc jeśli kiedykolwiek zobaczyć to wyjście podczas próby i skompilować program, jak Kelly powiedział, oznacza to, że użyłeś zmiennej że nie uznania, więc jeśli wrócę do naszej przestrzeni, i zrobić coś jak printf ( "Hello% s") i spróbować wypełnić, że% s ze zmienną s, że nie zadeklarował wszędzie i staram się go uruchomić, zobaczysz, co mam na dół na dnie tym tu: "Korzystanie z nielegalnej identyfikator 's'"; To oznacza, że ​​nie zadeklarować zmienną. To samo dzieje się, jeśli masz x i spróbować w nim przechowywać 7 i nie deklarują X. Mam ten sam błąd: "Korzystanie z nierejestrowaną identyfikator 'x'". Wszystko w porządku, tak cezara Cipher, nie jest bardzo bezpieczny, Powiem wam obejrzeć ten krótki, rodzaj zrozumieć, dlaczego i miejmy nadzieję, że po tym tygodniu robi problemu ustawić gdzie faktycznie napisać szyfr Cezara, będzie zrozumieć nieco więcej o tym, co to znaczy być bezpieczne i niezabezpieczone - bezpieczne lub nie, myślę, że - niepewne jest nieco inny. Inną rzeczą było to, że mają te inne pytania tutaj o funkcjach i to, co jest funkcją, i niby mówił o tym krótko, gdy rozmawialiśmy o wartości zwracanej; dla kogoś, kto był na wykłady, można podsumować, kto był na wykład dzisiaj? Dobrze. Zobaczmy, niech mają - może ktoś powiedzieć, co jest funkcją? Kelly? >> Zasadniczo coś narysować na coś, co jest napisane w bibliotece, która znajduje się w bardziej skomplikowane, tam, a potem po prostu napisać krótką formą, tak jak masz na myśli powrót do tej biblioteki, za pomocą tak dawno kod i [niesłyszalne]. Tak, dokładnie, a następnie chcesz dodać coś do tego? >> Tak, myślę o tym, jak podobny do koncepcji wzoru w matematyce gdzie po prostu napisać formułę, a następnie można podłączyć zmienne i to, co jest funkcją [niesłyszalne]. Tak, więc mamy kilka odpowiedzi tutaj że są naprawdę dobre i na prawo. Nie odnosząc się do kodu, który został napisany w bibliotece gdzieś , który jest bardziej skomplikowane a następnie można czerpać z tego kodu i faktycznie z niego korzystać tylko przez pisanie krótkiej formy to - lub raczej jego nazwa - a następnie jest także to porównanie z wzorem w matematyce lub fizyki, wszystkie tego rodzaju rzeczy gdzie masz formułę a następnie można podłączyć zmienne do tego wzoru Następnie, aby uzyskać wynik formuły, więc myślisz o tym, co, jak równania kwadratowego. Wyobraź sobie, że zamiast dowiedzieć się o co kwadratowa formuła jest w klasie matematyki, po prostu trzeba trochę program kalkulatora, że ​​zrobił to za Ciebie. Czy ktoś używać programów kalkulator w zajęciach matematyki w szkole średniej? Tak, zajęcia fizyki? Gdzie można po prostu powiedzieć: "Hej, kwadratowego wzoru. Są to zmienne, które chcę wejścia. Teraz daj mi odpowiedź. " To coś, co jest funkcją. Jest to sposób dla nas rodzaj zapisu jak mały mały program sub w naszej większego programu i używać go w kółko tak, że nie trzeba skopiować i wkleić kod, możemy dać jej inne wejścia i uzyskać różne wyjścia, to super poręczny kiedy próbujesz pisać różne programy w różnych czasach. Tak na przykład, funkcja używaliśmy w kółko i od nowa całego kursu jest printf. Printf jest sama funkcja i okazuje się, że to jest rzeczywiście dość długa i skomplikowana, nasty patrząc, funkcjonować pisać. Tak proste, jak nam się wydaje aby wydrukować rzeczy z do ekranu, ponieważ wszystkie nie tylko, że na początku sekcji dzisiaj, okazuje się, że jest to tak naprawdę, wiesz, dobre kilkaset linii kodu. To nie jest coś, że będę kiedykolwiek chcesz pisać to, na pewno, ale mamy go używać na co dzień, to jest fajne, więc mamy się nim podzielić z innymi, z różnych programów, więc będziemy nurkowanie bardziej do funkcji; w chwili obecnej, nie jesteśmy - tylko funkcja zamierzamy być pisanie jest głównym. Główna jest sama funkcja i widać, że dostał swoją moc, jego wejścia, jak rozmawialiśmy o, a jego nazwa, która jest głównym. Main jest rodzaju - jest to specjalna funkcja tam. W programie C, nie musi być główną funkcją, i tak na razie, mamy rodzaj pominięte piśmie prototyp, lub oświadczenie, main. Daliśmy to do ciebie, a my po prostu miał wypełnić rodzaju luki. >> Tak na drugim zestawie problem, nie trzeba zapisu, że w drugiej funkcji? Nie uważam tak. Wierzę, że to wszystko jest tutaj. Tak, więc Cezar Cipher, nie masz na to nie wygląda, i Vigenere'a, ty też nie, tak - i okazuje się, że nie zawsze właściwie napisać funkcja, prawda? Zadzwonić zawsze umieścić wszystkie kodu w ramach głównych, i wielu programistów zrobić. Jak poruszać się, zaczynamy funkcje wprowadzające jako sposób oczyścić swój kod aby uczynić go bardziej eleganckie, w przypadku, gdy mają zadania - rodzaj jak kiedy rozmawialiśmy o pętlach, jak czasami są rzeczy, które chcesz robić znowu i znowu i znowu, i masz rodzaj naiwnego sposób - lub co często nazywamy "chochoł" rozwiązanie, jest po prostu skopiować i wkleić w kółko - można zrobić to samo z funkcji, gdzie po prostu skopiować i wkleić sam kod w kółko, ale wzdęcia kod - kończy się co Twój kod naprawdę długo - i to również robi się trochę mylące, a to znaczy, że nie są w stanie jak - jeśli kiedykolwiek chcesz użyć tego kodu ponownie w innym programie, jesteś również zatrzymany kopiowanie i wklejanie go ponownie, więc jedną z rzeczy, będziemy rozmawiać o to rodzaj konstrukcji i stylu swoich programów a więc gdy ma sens rodzaj Pakiet coś i umieścić w oddzielnej funkcji Zachęcamy do tego, i to jest coś, co znowu Nie ma żelaznej reguły. Rzadko mówią, że musisz napisać funkcję o nazwie tego ale to bardziej z jednej z tych rzeczy, po prostu rozwijać w czasie jak piszesz coraz więcej programów. Więcej pytań? Ok, więc niech teraz przejdź z powrotem do tego faceta tutaj, więc nadal jestem w tej części pytania. Rozmawialiśmy o tych wszystkich tych odmiennych co to funkcja, dlaczego pisać funkcje, kiedy można po prostu skopiować i wkleić? Mam nadzieję, że mamy przekonanie, że pisanie funkcji jest rzeczą dobrą. Więc teraz przejdźmy do tego MySpace programu a my spędzić trochę czasu w ten sposób. Więc zobaczmy, Mogę już ktoś czytać to dla mnie? Rzućmy Mikhaila - można przeczytać to dla nas? >> To znaczy z powrotem, gdy MySpace - Powrót kiedy MySpace było cool. >> "Powrót kiedy MySpace był fajny, wszystko było wściekłość, aby wpisać to lubi. Może to jeszcze jest? Nie jestem pewien. W każdym przypadku, przy użyciu CS50 urządzenia, CS50 Run lub CS50 Spaces, napisać program, który pyta użytkownika o wiadomości a następnie wysyła wiadomość z jego pierwsza wielka litera, wszystkich listów innych w przypadku przemiennego, jak na poniższym przykładzie, wyjście którym boldfaced tekst stanowi jakiegoś użytkownika dane. Dla uproszczenia można przyjąć, że użytkownik tylko wejście małe litery i spacje. Tym problemem możliwość praktykowania; nie zostaniesz poproszony o przedłożenie tego programu. " Awesome, dziękuję. Tak Mikhaila powiedział mamy zamiar napisać program, który MySpaces kod. Więc nie każdy z was używać MySpace? Każdy z was ma kont MySpace? Oh, yeah, yeah! To było całkiem fajne. [Śmiech] Wiem. Randka się. Więc co chcemy zrobić, to napisać program która przechodzi przez i aktywuje pierwszą literę a następnie każdy list później - lub co drugi list później, przykro mi. Tak - i widać w tym przykładzie, jest to, w jaki sposób uruchomić program, i tak jest to po prostu mówi: "Kończy nam program o nazwie a.out. Wejście, które będziemy dając mu zostanie wyświetlony monit. Nie będziemy dostarczać wejście w linii poleceń. " Jeśli już po wszystkich wykładach i słuchania o argumentów wiersza poleceń, to rodzaj gdzie ci - że modny składnia w głównej przychodzi z int argc, wszystkie te rzeczy, więc nie używamy, że, my nie mamy do czynienia z żadnym z tym. Jesteśmy tylko dostaniemy ten wpisywanych przez użytkownika, a ta druga linia z funky kapitalizacji jest to, co chcemy, aby nasz program do wyjścia. Tak więc, zamiast korzystania z urządzenia lub uruchomić, będziemy korzystać z przestrzeni, bo mamy przestrzeni, a więc jeśli faceci otrzymać kod, aby wyglądać tak, więc mam zamiar zapisać tę wersję po prostu tak, że masz płytkę kotła tutaj , który wygląda tak, int main (void), nic w nim. Właściwie, co zrobimy to my po prostu usunąć wszystko razem. Chcemy pusty program, bo chyba nie zamierzasz rozpocząć pisanie kodu; raczej my będziemy starać się pisać trochę Pseudokod co tak naprawdę oznacza, że ​​zamiar napisać coś, co nie znajduje się kod tego rodzaju opisuje to, co chcemy zrobić, trochę jak Dawid w pierwszym dniu wykładu, lub myślę, że był drugi dzień wykładu, gdy zrobił całe demo skarpetki. Wy pamiętać, że - widząc skarpetki? Józef był tam rodzaj pisania w języku angielskim? Więc zrobimy to samo. Kiedy więc zacząć pisać Pseudokod, Chciałbym zacząć od spojrzenia na to, co wejście będzie. I dać sobie sprawę próby, tak jak "dzięki za add!" I wtedy też pisać co chcę wyjście być, który w tym przypadku jest coś takiego. I tego rodzaju daje mi dobre, jak, punkt wyjścia do myślenia, "Ok, chcę wziąć linię 1 i chcę, aby przekształcić go w wierszu 2 " i tego rodzaju pomaga prowadzić moje myślenie. Jest to dobre miejsce do rozpoczęcia. Innym sposobem, aby myśleć o tym, też, jak troche przechodzimy i jak można to zrobić w swoich programach, jest myśleć o rodzaju jak to, co są przypadki krawędzi do tego? Co to niby jest dziwne scenariusze? Jakie są dziwne wejścia, że ​​możemy dostać? A co powinno ci wyjść wyglądać? Na przykład, jedno wejście dziwne będzie ten, stworzenie absolutnie nic, jak co powinniśmy wyprowadzać w tym przypadku? Coś chcemy myśleć, zbyt. Tak, jak pytanie, co może chcemy wyjścia? Jeżeli nie mamy żadnych danych na wszystkich, co powinno być wyprowadzanie nasz program? Nic. >> Nic? Brzmi świetnie. Dlatego chcemy, aby upewnić się, że nie piszesz nic z jeśli nie dostaniesz nic w. Cool. Okay. Tak Mam zamiar zadzwonić na kilka osób, jak idziemy przez i po prostu dowiedzieć się trochę jak to, co jest ogólny algorytm a my rodzaj rozpoczęcia pracy przez to razem. Więc zobaczmy. Missy. Jak myślisz, że zaczynamy? Jaki byłby dobrym miejscem do rozpoczęcia tutaj jeśli chcemy przekształcić, powiedzmy, line 1 do linii 2? Czy możesz trochę tylko mi wyjaśnić, w języku angielskim, o czym myślisz? Nawet nie martwić o kod. >> Pierwszy rzeczą, którą chciałbym zrobić, to rodzaj bezpośredniego użytkownika, aby powiedzieć im, co chcesz. Ok, więc, powiedzmy, "Hej, użytkownik. Chcę ciąg "- niesamowite. Więc to zapisać. Pytaj o ciąg. To brzmi jak dobry początek. Dobrze. Zapytajmy Kelly ren ten czas. Co my teraz ma zrobić? Co niby nasz następny - >> Zbierz ich wkład i przechowywać go jako zmienną. Great. Więc zbierać ciąg, przechowywać ją w zmiennej. Więc czy jest coś specjalnego chcemy zrobić tutaj? Czy chcemy, aby sprawdzić ich wkład wcześniej -? >> Tak. Co może chcemy sprawdzić? >> Cóż, powiedział, że nie trzeba sprawdzać, czy jest to numer, prawda? Bo to zakładamy, że jest to małe? Tak. Tak więc okazuje się, że - tak. Więc getString gwarantuje powrót nam ciąg. To nie będzie zwracać liczbę do nas lub coś podobnego. Nie może być w tym cyfra znaków ciągu, choć. A ci, możemy ignorować jak my kapitalizację. Ale pusty ciąg jest całkowicie w porządku, więc sprawy tutaj, na linii 4 i 5, Dobra, gdzie nie ma wejścia, i nic nie umieściliśmy w naszym wyjściu. Nie musimy się martwić, upewniając się, że coś jest w ciągu lub że ciąg jest co najmniej 4 znaków; coś nie jest w porządku. Tak więc jest to przeciwstawia, na przykład, jak Pennies programów zapisanymi gdzie trzeba było się upewnić, że były coraz nieujemnych liczb; trzeba było się upewnić, że jesteś coraz prawidłową liczbę dni w miesiącu. A jak wy robicie to? Jak można zrobić to badanie? Co, że wymaga użycia? >> Zrób pętle while. Pętli do-while, inne rodzaje pętli, też, tak. Tak więc okazuje się, że nie trzeba używać pętlę w tym przypadku, kiedy jesteśmy monitowanie dla ciąg, który jest miłe. Dobra, idzie dalej. Więc, Stella. Czy możesz powiedzieć nam coś więcej na temat tego, co powinniśmy zrobić? Więc teraz mamy ciąg, to mamy zapisane w zmiennej; co musimy zrobić z łańcucha? >> Musimy - identyfikacji 2 - Tak, po prostu powiedzieć, że w języku angielskim, to jest niesamowite. >> Zidentyfikuj [niesłyszalne] stolice - lub wielkie. Tak, więc musisz określić, które z nich są wielkie i małe litery. Nie możemy wielkie lub małe litery je dopóki nie określiła, które z nich. Więc tak umieścić, że tu jest. Tak, tylko myśleć o tym procesie, jak zrobimy tę identyfikację? Czy wiesz, Dan? Rodzaju, co - jak narzędzie musielibyśmy użyć z naszego niezbędnika? >> Chciałbym umieścić go w jakiś sposób, w jak tablica lub każdej linii jest jego własny mały box, a następnie ją wielkie, czy nie. Ok, więc jedno narzędzie możemy użyć jest tablicą. Co możemy patrzeć w ciągu, jednak, aby dowiedzieć się - musieliśmy patrzeć na znaki. >> Więc masz patrzeć na długość łańcucha? Tak, więc część z tego jest miejsce na długość łańcucha. Tak z ciekawości, co możemy użyć, aby uzyskać długość łańcucha? >> Strlen? Tak, strlen, nazywamy to "strlen" Wszystkie te funkcje łańcuchowe, więc strlen jest funkcją, i jest to bardzo wygodne, ponieważ możemy go używać tylko powiedzieć, Hej, strlen: Oto ciąg, powiedz mi jak długo to jest. W wykładzie dzisiaj, David dużo mówił o tym, jak strlen jest realizowany, , co faktycznie dzieje się za kulisami. Ale to jest jedna z tych super-bardzo poręczne. Istnieją inne te, które są również w bibliotece strun np. strcmp, które jest wpisany "Pop" , który jest używany do porównywania ze sobą ciągi. Inne z nich będzie używany jak strstr, co jest dobre dla znalezienia sub napisy i tak dalej. W przeważającej części, wszyscy zaczynają z ulicy, a następnie udać się na czymś innym. Powód w rzeczywistości nie przeliterować je jak ciąg i tak dalej ponieważ już w niczym pierwszych dni C kiedy ludzie były najpierw pisania i to wszystko, mieli ograniczenia liczby znaków, które można użyć do nazw funkcji i nazw zmiennych, więc wszystko jest jak super skondensowane. Ale w każdej chwili widzisz coś, co zaczyna się od ulicy, że zazwyczaj oznacza to ma coś wspólnego z łańcucha. Ok, więc musisz uzyskać długość łańcucha, , a następnie, co robimy z bohaterami? Czy wiesz, Sam? >> Nie mam pojęcia, ja starałem się zrozumieć. I naprawdę nie wiem - szkoda że nie było jakiś sposób - Mam na myśli, to myślę, że moglibyśmy zrobić coś z kursów i wyrównuje, ale nie wiem, z dowolnej funkcji takiego. Tak. >> Ale to - to nie koniecznie działać, bo wtedy można dostać przestrzenie być - trzeba by mieć miejsce, aby uzyskać wskazówki, jak - Okay. >> Nie wiem - jestem rodzaju utracone w tym punkcie. Tak - nie, nie, nie, to są dobre punkty. Więc to, co musimy zrobić, to, podobnie jak Sam powiedział, trzeba śledzić, które litery są nieparzyste litery, i które z nich są nawet listy. Ale chcemy się upewnić, że nie jesteśmy po prostu patrząc na stronach parzystych i nieparzystych Indeksy w ciągu, ale patrząc na parzystych i nieparzystych liter w ciągu znaków, więc musimy mieć trochę tego rozróżnienia między litery - jak to, co w rzeczywistości, B, C, D, i tak dalej, i jakie rzeczy nie są litery, ale wciąż w naszym łańcuchu. Na przykład tutaj, jak ten wykrzyknik nie list jest, ale nadal jest częścią naszego łańcucha, jest to nadal char. Podobnie, wszystkie z tych przestrzeni - to nie ma sensu, aby wykorzystać przestrzeń, prawda? Dlatego chcemy, aby upewnić się, że w jakiś sposób pominąć tych, jednocześnie śledzić kursy i wyrównuje. Więc niby w naszym przyborniku programowania tak daleko, jeśli chcesz, mamy wiele różnych narzędzi, które mamy rozmawiać. Tak więc jednym, na przykład, są zmienne, jak rozmawialiśmy o tutaj. Kolejnym narzędziem Omówiliśmy są funkcje. Więc rozmawialiśmy o zmiennych w naszym Pseudokod tutaj jak to, co mamy zamiar używać do przechowywania nasz łańcuch. Rozmawialiśmy o funkcji, aby uzyskać długość ciągu, podobnie jak strlen. Rozmawialiśmy o czymś innym, a my rozmawialiśmy o tym za dużo wcześniej w sekcji dzisiaj: pętle. Co myślicie o użyciu pętli w tym programie? Jared, co myślisz? Użyjemy pętlę w tym programie? >> Chyba nie, nie, dlatego, że nie muszą przechodzić przez to więcej niż raz. Okay, nie musisz iść przez to, co więcej niż raz? >> Cały ciąg. Dobra, więc nie musisz przejść przez cały ciąg raz. Przepraszam, że się absolutnie nie ma sensu! Nie musisz przejść przez cały ciąg więcej niż raz. Okay. Co o tym myślisz? >> Myślę, że lepiej, aby z nich korzystać więc możemy zrobić, jak wykorzystać podczas lokalizacja to [niesłyszalne] Nr. Wielkie, a więc wykorzystać, co? Okay, więc mówisz, że powinniśmy wykorzystać pętlę, bo chcemy wielką literę, podczas gdy nie jest to liczba. Więc - przepraszam, czy chcesz dodać? >> Chciałem powiedzieć, że sposób, w jaki traktuje ciąg i [niesłyszalne] oddzielny [niesłyszalne] na bohaterów? Tak. >> I wtedy możemy przypisać numery do - lub w oparciu o położenie liter w ciągu? Tak. >> i określić, czy to dziwne, a nawet i wykorzystać sam list zaś położenie pisma jest [niesłyszalne] - przepraszam. Great. Więc tylko podsumowanie. Czy możesz mi przypomnieć swojego imienia ponownie - Przepraszam. >> Charlotte. Charlotte, okay. Więc co Charlotte mówi, która jest całkowicie w prawo - o rany, to lubi auto tiret na mnie - jest to, że jeśli spojrzymy na sznurku takie jak ten na górze - "Dzięki za add" - jako ciąg znaków gdy jest w pozycji 0, h jest w pozycji 1. Jest na 2, to mamy 3, 4, 5; Przestrzeń jest w pozycji 6. Zważywszy, że - co jest pozycja f? 7! O? 8. R? 9. A potem mamy 10, a potem nie mogę napisać go bez niego trochę się bałagan na ekranie. Ale to jest rzeczywiście, jak można mówić o ciągów w pamięci. Czy to jest ciąg jest ciągiem znaków, i kiedy odnoszą się do konkretnego znaku w ciągu, często zrobić, odwołując się do tego znaku pozycji w ciągu, prawdopodobnie taki sam sposób, w jaki mówimy o wrześniu jest dziewiąty miesiąc roku lub poniedziałek jest pierwszym dniem tygodnia. Więc to daje nam drogę do dowiedzieć się, które z nich są dziwne, nawet w porównaniu z ponieważ można zobaczyć tutaj jeśli my ją się z tym T można zauważyć, że wszystkie te aktywowanych są na miejscach parzystych, przynajmniej na pierwszym słowie, a potem wszystko się wyrzucony raz trafiliśmy do tej przestrzeni dlatego, że nie liczą się z tego miejsca, jak liście, więc to tak jakbyśmy zaczęli i poszedł 0, 1, 2, 3, 4, 5, Przestrzeń, 6, 7, 8, miejsce, 9, i 10, 11, 12, i tak dalej. Cool, więc na pewno będzie chciał użyć jakiegoś pętli przejść przez każdy z bohaterów po kolei. W tym momencie, wrócimy do naszego starego Pseudokod tutaj. W ramach tego określenia, które z nich są wielkie i te, które są małe, będziemy chcieli to zrobić w jakiejś pętli. Loop, okrężnicy. Jaki rodzaj pętli, z rodzajów pętli, które mamy, Wydaje się, że dobre do stosowania w tym przypadku? >> Myślałem pętli for. A dlaczego myślisz pętli for? >> Bo to zaczyna się od zera, a następnie gdy osiągnie długość łańcucha, a następnie każdej iteracji można [niesłyszalne], też? Tak, dokładnie. Tak więc, z różnych wyborów pętli mamy dla pętli, pętle i do-while pętle. W przypadku, gdy w pętli jest szczególnie przydatne jest wtedy, gdy chcesz wiedzieć niby gdzie jesteś w pętli, ile razy pętla została wykonana do tej pory. Która jest dokładnie to, co chcemy wiedzieć, w tej sytuacji, jak Kelly powiedział, oparte wyłączać z wcześniejszym komentarzem Charlotty, że chcemy wiedzieć, pozycję znaku w ciągu znaków, i dla pętli da nam tylko, że bo jeśli zaczniemy trochę patrząc na naszego łańcucha, jeśli zaczynamy na pętli na 0, i do góry na całej długości całego łańcucha, wtedy możemy skojarzyć litery T z 0 w naszej pętli for H z 1 litery w naszych w pętli, i tak dalej, dzieje się aż do końca łańcucha. Zacznijmy więc kodowanie to tylko trochę po prostu tak wam poczuć, jak to wygląda. Mam zamiar zapisać to, więc mamy naszą pseudokod tutaj, i mam zamiar usunąć wszystko. Więc mam puste konto. Mam zamiar zacząć od pisania int main (void) { Zamierzam umieścić 0 zwrotny w i}. Tak zazwyczaj kiedy zaczynam programu jest to, co zaczynam. Będę go zapisać tak, że macie to. Tak więc jeden z pierwszych rzeczy, rozmawialiśmy o było uzyskanie danych od użytkownika i przechowywanie go w ciągu. Jak dostaniemy się wejście od użytkownika? GetString. >> GetString, dobrze. Więc jeśli wpisz getString () i średnik. Spróbujmy uruchomić to, będzie to run, przede wszystkim? A dlaczego nie będzie to uruchomić? >> Musisz zadeklarować zmienną. Mam zadeklarować zmienną. Okay. Więc jak mam to zrobić? Czy myśli pisząc coś, dzieląc go? I wtedy możemy wyciągnąć go. Zobaczmy, Dan, w prawo, w porządku. Albo Daniel. Zrozumiałem w, wejście string = GetString (). Awesome. Czy to uruchomić? Spróbujmy. Hit run, kod źródłowy uploading, zabudowy, wystąpił błąd. Okay. Więc jak tu się dzieje? Korzystanie z nierejestrowaną identyfikatora "ciąg". >> Musimy m.in. biblioteki? Tak, więc Dan mówiąc musimy m.in. bibliotek. Czy to, co pan powie, Stella? Awesome. To niesamowite, więc Stella, prawda skopiować ten kod z przestrzeni Daniela? Jeśli klikniesz na Daniel Roland Ki, skopiować go, , a następnie będzie można umieścić linię include, a następnie zapisać go na zewnątrz? Daj znać, kiedy będziesz gotowa. Więc ta składnia include jest również rodzaj fajne; tam jak ten hash tagu I jest to, i to nie są te nawiasy ostre. Czy pamiętasz, jak to działa, czy powinienem umieścić go na ten kod tutaj? >> Jestem dobry. Okay. >> Wydrukowałem go - Nie byłem pewien, które biblioteki, choć. Oh, w porządku - tak, więc jest to CS50 biblioteka. >> Oh, I umieścić biblioteki stdio. Ach, rozumiem - tak, nie, that's - więc okazuje się, że łańcuch jest rzeczywiście coś, co jest szczególne dla CS50. Tam naprawdę nie jest prawdziwy typ string bo właśnie tu, łańcuch jest w położeniu, rodzaju, - jesteśmy deklarując zmienną wejście typu string - i jesteśmy umieszczenie wewnątrz wejścia Wartość, która zostanie zwrócony do nas: Wyjście z tego getString wywołania funkcji. Można powiedzieć, że jest to wywołanie funkcji, ponieważ ma nawiasów, tak jak printf robi, jak strlen robi. Ale w rzeczywistości nie jest łańcuch typu REAL w języku C. Zrobiliśmy go do typu, a my zajmiemy się więcej, co to właściwie jest w C, ponieważ jest droga do pracy z tekstem; my właśnie coś zrobić, aby wyglądał trochę ładniejszy. Tak więc zaczynamy. Oto kod Stelli. To ma # include . Inni ludzie nazywają to jak hash to czasami lub ostry dołączyć. Teraz możemy go uruchomić, uruchom go, i wciąż pojawia się błąd. Zobaczmy, co się dzieje. "Niewykorzystana zmienna 'wejście'." Okay, więc to jest fajne, że jest cool. Mam na myśli, to naprawdę nie jest fajne, bo dostajemy błąd i to nie działa, ale co to jest o to, że nie wykorzystaliśmy naszą zmienną, która ma sens. Nie starał się nic z nim zrobić. To jest sposób, w jaki Clang próbuje pomóc nam upewnić się, że nie jesteśmy po prostu za pomocą zmiennych a następnie przypadkowo nazywając je coś jeszcze później w naszym kodzie, pomagając nam uniknąć błędów w ten sposób. W porządku, więc mamy wejście od użytkownika, że przechowywane w zmiennej. Następnym krokiem było następnie zacząć patrzeć na wszystkie znaki w ciągu znaków i określenie, które z nich mają być wielkie a które mają być małe. I jak Kelly i Charlotte wychowani, Robimy to za pomocą pętli for. Więc czy ktoś pamięta składni pętli for i chcieliby podjąć stab at tylko pisanie Pierwsza linia dla pętli, tylko na chwilę? Kelly, chcesz spróbować? >> Tak, więc trzeba zainicjować pierwsze, więc włożyłem i = 0, a ja i > Tak, wkręca się trochę, ale tak. Dobra, wyciągnij ją. Awesome. >> Ale ja nie wiem, czy miał, że - Tak, w porządku. Więc oto co Kelly otrzymała: spójrzmy na nią szybko. Więc ona obejmowała CS50 biblioteki na górze. Ona zawiera standardowy biblioteki IO w górnej, a średnia IO posiada funkcje jak printf, więc jeśli kiedykolwiek chcesz używać printf, trzeba tę linię. A potem włączone do biblioteki string, co nam potrzeba, ponieważ biblioteka string ma strlen funkcji które dostaniemy w tylko trochę. Więc jeśli spojrzymy na to, co się stało Kelly tutaj można chodzić z nami przez co zrobiłeś? >> Tak, tak - to znaczy, mam błędy, więc - Tak, nie, it's - >> Chciałem więc wywołać ciąg, że mam po prostu "ciąg". Chciałem wydrukować ciąg , a potem - Chciałem jak ustawić ciąg jako jak tablica każdego znaku inności [niesłyszalne], prawda? A potem chciałem zacząć w pozycji 0 a następnie co 2 przestrzenie, Miałem zamiar wykorzystać, tak właśnie określił to jako 23, bo patrząc na ASCII tabeli. Więc to, co myślę - wiem, że to nie w porządku. Rozumiem, więc jest to dobry początek. Myślę, że wiele ram jest na miejscu tutaj. Przejdźmy przez rodzaju linia po linii i zobaczyć, co się dzieje. Więc tak jak lubię na to jest po prostu zacząć od kompilacji kodu i pozwalając kompilator mi powiedzieć jak to, co jest nie tak z moim kodu, ponieważ kompilator jest naprawdę dobry w informacją, co jest nie tak z twoim kodzie. Więc jeśli mamy grać, budować, i nie budować. To mówi, że nie był błąd, jeśli więc przewijać i spojrzeć na pierwszego błędu, to powiedział - możemy przejść z powrotem na górę, widać błędów jest 5 wytwarzane tu na dole. Ups, to naprawdę odcięta. Myślę, że po prostu nie będzie nic lepszego. Jedziemy. Tak więc istnieje 5 razem błędy generowane. Tutaj widzę tylko pierwsze 2, więc mogę przenieść to się trochę, a potem trochę się cofnąć. Jest to komenda, która była prowadzona do kompilacji kodu, a następnie pierwszy błąd był w file.c tutaj: "Oczekiwano zidentyfikowania lub" ("", i to właśnie na tej linii gdzie powiedział string = GetString (). Widać tutaj, że to było na linii 8 z file.c, a ja wierzę, że to znak 12 - to błąd. Więc co się dzieje złego na linii 8 - Kelly? >> Po prostu trzeba to nazwać, jak, list czy coś, jak string s lub coś? Tak, więc okazuje się, że te specjalne nazwy typu, tak string, int, char, krótkie, Oni wszyscy są specjalne słowa kluczowe, i nie można z nich korzystać jako nazw zmiennych środowiskowych ponieważ kompilator patrzy na to i mówi: "Och, wiem, że to rodzaj" więc nie można rzeczywiście mieć zmiennej ciąg zwany ciągiem, jak próbuję tu zrobić, to nie będzie działać. Ale zamiast tego, można nazwać to coś jak s lub ST lub STR. My również nie mógł nazwać to int. Nie możemy mieć ciąg nazwie int. Nie możemy mieć ciąg nazwie char; żaden z nich będzie działać. Więc będziemy je nazywać s na razie. Awesome. Więc co dalej dzieje się w tej linii? String - linia ta wygląda całkiem nieźle? Dajmy mu innego spróbować, niech go uruchomić. Ok, więc wciąż pojawiają się błędy. Tym razem jesteśmy w dół do 4 błędów. Więc mamy jeden z nich. Przejdźmy się. "Nieoczekiwany nazwy typu 'string': oczekiwane wyrażenie" tak? >> Tak, to dlatego, że starałem się wymienić łańcuch. Tak więc wygląda na to, że mają teraz iść poprawkę wszystkie z tych odniesień do łańcucha. Można zobaczyć tam odniesienia do ciąg tutaj, jeden tutaj, jeden tutaj, więc możemy przenieść wszystko na s. Great. Okay, uruchom go ponownie. Budynek - kolejny błąd. Dobra, teraz jesteśmy do jednego błędu, tak int i = s, a następnie nawiasy kwadratowe. Więc można powiedzieć nam trochę o tym, co pan tu robi, Kelly? >> Tak. To był na linii 10. >> Nie wiem, czy potrzebowaliśmy to wszystko, ale myślę, że starałem się - Będę go zapisać tak można podążać. >> Myślę, że byłem próbuje powiedzieć to, aby rozpocząć w pozycji 0 na początku nowego dla pętli więc myślę, że może to powiedzenie było niepotrzebne. Tak tylko do przypomnienia, mówiłeś, że ta - próbowałeś uruchomić to w pozycji 0 i się tym - tak, więc myślę, że wcześniej też, kiedy szli przez kod, Mówiłeś o tym, jak chcesz traktować ciąg jako tablicę więc możemy przejść każdy znak indywidualnie. Myślę, że Dan wspomniane tablice też próbujesz konwertować łańcuchy na tablicach. Okazuje się, że rodzaj pod maską, Łańcuch jest przechowywany w tablicy już, i można go jak tablica; nie ma konwersji, które musisz zrobić. Isn't string - tak - Ciąg nie jest tak naprawdę tablicą, ale można go jako takie, ponieważ wszystkie znaki są zapisywane jeden tuż obok siebie, w pamięci, więc jeśli chcesz zdobyć pierwszy znak łańcucha, to jest to samo, jak się pierwszą liczbę całkowitą w tablicy liczb całkowitych. Więc często - we'll odnoszą się do 2, jak oh, jako string, jako tablica, mimo, że tak naprawdę - Oni są bardzo różne rzeczy, ale można je traktować bardzo podobnie. Tak więc okazuje się, że ta linia faktycznie - nie musimy robić żadnej konwersji, w rzeczywistości, to rzeczywiście nie jest prawidłowym wyrażeniem, czyli to, co nasz kompilator nam mówi. Jest to, mówiąc: "Hej, to oczekuje się wyrażenie, i co ja mam tutaj jest coś, co nie jest wyrazem ". Aby zadeklarować tablicę, wszystko co musisz zrobić, to coś takiego się średnikiem, a następnie poinformować tablicę jak długo chcesz go mieć, np. 5, więc ta linia 10 zadeklaruje tablicę o nazwie I z 5 liczb w nim. Jest na bok, to nie jest to konieczne do kodu, , ale jest to - jest to rodzaj co deklaracja wygląda. >> Jak nie używasz char i [strlen (s)]? Char i [strlen (s)]? >> Char i, a następnie do wnętrza nawiasach, strlen (s). Tak, więc może - możemy to zrobić, a to oświadczam - co by to zrobić? >> Myślę, że byłoby zadeklarować tablicę z, jak - z - oh, nie trzeba i - ach, Tak, to na pewno nie jest potrzebny i. Zadeklarować tablicę znaków S długości. I co z tego Sama mówi, że ta linia 10 - powiem trochę miejsca między nim a resztą więc możemy wyizolować go - ta linia 10 będzie zadeklarować tablicę o znakach, strlen (s) warto z nich, ale rzeczywiście jest potrzebny i, a powodem musimy i dlatego musimy dać tablicy a nazwę; inaczej, nie mielibyśmy sposób odnieść się do tablicy w dalszej części kodu. Więc to tutaj jest nazwa tablicy i jest w środku długości. To da nam tablicę, , ale jest to - znowu, to jest deklaracja. To nie jest zadanie, nie jest to inicjalizacja. Jeśli deklarujemy tej tablicy tak, nie ma właściwie nic w treści tablicy. To tylko śmieci - co jest w środku. I jak już mówiłem, tak naprawdę nie trzeba nawet zrobić to, ponieważ możemy już traktować string s jako tablicę. Wiem, że działa trochę długo na czas, ale chcę po prostu bardzo szybko dostać się do tego pętli for i pokazać, w jaki sposób dostęp do poszczególnych znaków w tablicy, bo to jest klucz do naszego zadania. A następnie wyślemy Ci go stamtąd. Więc tutaj, mamy dla pętli że wygląda prawie dobrze. Co nie całkiem prawie tam? What's - co nie jest całkiem w prawo o tym na pętli? >> Brak nawiasy klamrowe? Brak nawiasy klamrowe, na jednym. Chcesz się upewnić, że mamy ciało pętli z klamrami. Ups, nie kwadratowa klamra! A co to jest następna rzecz, że musimy zrobić z tej pętli? Gdyby spróbować i uruchomić go, Siema ten błąd, że mogę? Mam wszystkie te błędy - mam zainicjować i. Great. Tak więc będzie to pętli - nie jest to całkowicie nie, ale to już naprawdę blisko. Ten kod możemy teraz uruchomić, budować, błąd występuje nadal. Dlaczego wciąż narzekać, mówiąc, wyrażenie nie jest używany, a to dlatego, że linia ta nie robi nic. Nie przechowywać go w dowolnym miejscu, nie zapisać wynik. Gdzie powinniśmy być oszczędność ten wynik? >> S czy ja? Dokładnie, i to fajne składnia, to s przy nawiasach kwadratowych Oznacza to dostęp do i-tego charakter tych. To będzie coś, co jest naprawdę ważne dla zadania. Niestety, będziemy się tu zatrzymać, tak, że sekcja Sebastian może przyjść, ale jestem zadowolony na pobyt po zewnątrz i będzie żadnych pytań. Więc dziękuję wam za przybycie. To powinno przesłać, budowy, uruchomienia. Możemy wprowadzić ciąg jak "hello" i drukuje "QOX". [Śmiech] Więc nie dość tam, ale w ruchu, coraz wobec tych pętli! Dzięki za przybycie, a ja będę na zewnątrz.