[MUZYKI] Głośnik 1: To jest CS50 i to jest początek tygodnia dwa. Tak, niech nurkować w prawo w coś że jest wadliwy, że tak powiem. Tak, tutaj jest CS50 IDE i mam zatrzymał się przed tym screen-- cholernie ono. Alert spoiler. W porządku. Mam ten ekran zatrzymał się tutaj, który ma bardzo prosty program. Jeśli przewinąć w dół, najbardziej to jest po prostu komentuje, ale tutaj w linii 13 przez 17 mamy program. To składniowo poprawny, co oznacza, że ​​jeśli Skompilować go, będzie to skompilować i uruchomić, ale buggy. Ten program twierdzi w komentarzach do góry, że powinien wydrukować 10 gwiazdek, ale tak nie jest. Oraz w oparciu o swoje doświadczenie, lub wkrótce będzie doświadczenie z C, można logicznie dostrzec Dlatego to jest, w rzeczywistości, uszkodzonych? Tak? PUBLICZNOŚCI: To idzie od zera do 10. To 11 powtórzeń. 1 głośnik: Tak. Tak, to się dzieje od zera się przez i równy 10, która jest oczywiście 11 iteracji. Tak, to będzie druku, rzeczywiście, 11 gwiazdek. Więc, konwencja informatyka w większości języków programowania jest, rzeczywiście, po prostu rozpocznie odliczanie od zera, ale liczyć się, ale nie poprzez wartość, że rzeczywiście zależy. Teraz, to jest jedna rzecz, która zajmuje trochę przyzwyczaić a nawet zadrapania, zaprojektowany jak to jest dla nie programistów lub brak komputera naukowcy i dla dzieci w dużym stopniu, jest przeznaczony do zaczniesz liczyć na ogół w jednym. I to jest w porządku. Możesz absolutnie rozpocząć odliczanie w jednym, czy to bardziej komfortowe. I liczyć do i przez 10, ale zdasz sobie sprawę, szczególnie w tym tygodniu a poza tym tak wiele rzeczy w programowaniu Zakładamy, że 0 jest pierwszym cyfrowy, z którą liczą, że będziesz łatwiej po prostu dostać się do tego zwyczaju rozruchu od zera i zliczanie wartości Ci zależy teraz od się udać. Tak, że ustalił, że. Zmieniono mniejsza niż bądź równa się mniej niż. Rzućmy okiem na drugi przykład tutaj. Tak, ten program też twierdzi, w jego Komentarz do góry, że powinien wydrukować dziesięć gwiazdek, ale tak nie jest. Co to za błąd, tu? Tak, what-- i przepraszam, bądźmy szczerzy. 10 gwiazdki. Jednej w wierszu, ale tak nie jest. Tak więc, w rzeczywistości, pozwól mi iść do przodu i skompilować ten jeden, bo to trochę mniej usunąć na podstawie tego opisu. Pozwólcie mi odejść do naszego katalogu źródłowego. Bądź Buggy jeden ukośnik kropka, buggy jeden. OK, widzę, 11 gwiazd, które nadal jest problematyczne, ale są również wszystkie w jednej linii. Co jest problemem tutaj? Tak. PUBLICZNOŚCI: [niesłyszalne]. 1 głośnik: Tak. Więc to jest subtelność, które mogą przypomnieć mi co krótkie wzmianki. Nawet jeśli wszystko wygląda ładna, i to ładnie wcięty, i to niby wygląda jak na zarysowania w tym linii 16 i 17 są, rzeczywiście, wcięte pod że dla pętli. To nieistotne. Komputer nie wie lub zobaczyć białą przestrzeń. Biała przestrzeń jest tylko dla nas, ludzi, stylistycznie. Komputer wie, kiedy trzeba nawiasy klamrowe, które, rzeczywiście, rozwiązać ten problem. Tak więc, jeśli rzeczywiście udał się i wyraźnie umieścić w tych klamrach że będzie rozwiązać ten problem przez co oczywiste, do kompilatora że rzeczywiście chcesz wykonać dwa wiersze kodu znowu, i znowu, i znowu. Ale to, co jest podstawowym wyjaśnienie? Dobrze? Nie bezwzględnie konieczne nawiasy, cały czas, mimo, że jest to prawdopodobnie najlepszy praktyka, aby dostać się do tego zwyczaju tak chociaż dodaje dwa znaków do kodu. czemu? PUBLICZNOŚCI: [niesłyszalne]? 1 głośnik: Tak, tak to jest inne rozwiązanie całkowicie. Dobrze? Zwłaszcza, jeśli na pierwszy rzut oka tego nie zrobisz Naprawdę doceniam to, co się dzieje. Cóż, z pewnością moglibyśmy po prostu zrobić dwie rzeczy na raz i po prostu uniknąć problemu całkowicie. I to jest w porządku, ale teraz, dla dzisiejszych potrzeb, co jest wyjaśnienie błędu? Dlaczego te wszystkie gwiazdy na jednej linii? Tak? PUBLICZNOŚCI: Wydaje się, że jeśli masz jedną linię kodu, Można to zrobić bez nich. Głośnik 1: Dokładnie. To jest po prostu ludzka konwencji. Ludzie zdają sobie sprawę, że jest to trochę irytujące i uciążliwe aby umieścić nawiasy klamrowe wszystkie czasu, gdy wszystko, co chcesz zrobić jest wykonanie jednej linii kodu. Tak, ludzie postanowili niektóre czas temu, że to jest w porządku. Jeśli chcesz umieścić wszystkie swoje pętli na tylko tej jednej linii jak to, to jest w porządku z singlem Średnik na końcu. Ale można zrobić tylko jedno takie Linia bez nawiasy. Tak więc, gdy przewodnik redakcyjny CS50 jak wskaże Ci, zobaczysz, że na ogół jest to dobry zwyczaj aby dostać się do tego momentu, gdy bardzo wygodne błądzą tych rodzajów konwencji i robić własne rzeczy. Tak długo, jak jesteś siebie spójne. I będziemy mówić więcej o styl trochę później dzisiaj. Więc, pozwól mi otworzyć jeden inny program. Oczywiście, powinniśmy ustalić, że 10, jak również. Pozwólcie mi iść dalej i napisać prawdziwy szybki program, który zadzwonię, powiedzmy, pętla dot C. Tak, pętla dot C. A w pętli dot C będę mieć, to standard I / O Kropka H int main pustkę. A teraz po prostu zrobić, rzeczywiście, pętla. Tak, 4 int I dostaje zero. I jest mniejsza niż, powiedzmy, 50. Ja plus plus. A potem tu niech iść do przodu i są drukowane F. A potem chcę wydrukować I i nowa linia, średnik. I to powinno wydrukować wszystkie Numery od zera do 50? Kilka głowa kiwa głową. Kilka nos. Co znajduje się już błąd? Co znajduje się w łatwy błąd zrobiłem? Tak. PUBLICZNOŚCI: [niesłyszalne]. 1 głośnik: Tak. Więc nawet jeśli to wygląda jak to jest, co zamierzam, Przypomnijmy, że jest również tylko znak ASCII. Tak więc, jeśli powiem, print "I." To dosłownie dzieje wydrukować I. Tak więc, jeśli chcą wtyczkę zastępczy Wartość I rzeczywiście trzeba to zrobić a następnie plug-in wartość dynamicznie. W przeciwnym razie jestem po prostu będzie uzyskać 50 I jest na ekranie. Więc, pozwól mi iść do przodu i dokonać tej pętli, uruchom go, i rzeczywiście, mamy wszystko aż do 49. A jeśli przewijać wstecz w czasie widzę liczba zera na początku. A co, jeśli rodzaj zepsuć? Co zrobić, jeśli mogę to zrobić? Tylko dlatego, że nie myślę. Co znajduje się ten program. Gdy ponownie skompilowany i uruchomić, zamiar zrobić logicznie? PUBLICZNOŚCI: Nic. Głośnik 1: Nic. Dlaczego? PUBLICZNOŚCI: I jest przeznaczony do zera. Tak więc, gdy warunek nie jest. 1 głośnik: Tak, dokładnie. Cały kod jest poprawny składniowo. To kompilować, Kod będzie działał, ale to nie jest zrobić coś pożytecznego bo zainicjować I do zera. Następnie sprawdzić, czy mam więcej niż 50? Oczywiście, nie, to nie. Więc nigdy nie wykonuje pętli w ogóle. Co zrobić, jeśli mamy coś zrobić trochę bardziej lekkomyślni? Więc co, jeśli robimy jak int I dostaje zero. A teraz pozwólcie mi użyć czasu Pętla, który był kolejnym warunkiem. A gdy mówię, a ja jest większa niż lub równa zero, a następnie w tym miejscu I iść dalej i zapisać plik, zrobić pętlę. I mam zamiar go uruchomić. Co ja mam to zobaczyć razem z pętli while? Tak. PUBLICZNOŚCI: nieskończona pętla? Głośnik 1: nieskończona pętla? Tak, a dlaczego? PUBLICZNOŚCI: Bo to zawsze zero. 1 głośnik: Tak. Tak, jest inicjowany jako zero. Oczywiście, że jest zawsze większa lub równa 0 oznacza wynik. Tak, jestem po prostu będzie zobaczyć to w nieskończoność. A teraz ta ma pochodzić raz lub dwa razy do głowy kursu jest. Co się dzieje, kiedy mają nieskończoną pętlę? PUBLICZNOŚCI: Kontrola C. 1 głośnik: Tak. Więc sterowania C w końcu odpowiedział. Niestety, mamy wydrukowane miliony i miliony zer już i tak, że komputer ma rodzaj wyprzedził mnie. Tak, to będzie ignorować mi na trochę. Ale jeśli po prostu wciskamy sterowanie c kilka razy na klawiaturze komputera Mac lub PC, w końcu to powinno rzeczywiście zakończyć. A jeśli nie, pokażemy niektóre Techniki Wkrótce gdzie rzeczywiście może przymusowo zabić programów, podobnie jak w systemie Windows i Mac OS, Jeśli zajdzie taka potrzeba. Ale spróbujmy czegoś innego. Miejmy rzeczywiście zwiększyć I. Czy to nadal będzie nieskończona? Pozwól mi uruchomić to. A teraz możesz rodzaju zobaczyć, co się dzieje. To też jest nieskończoną pętlę. Ale to jest trochę podchwytliwe pytanie. Czy to będzie drukować numery na zawsze? PUBLICZNOŚCI: Nie Głośnik 1: Nie Czemu? Słyszałem nos tutaj. Someone-- Tak. PUBLICZNOŚCI: Nie musisz tyle bity naprawdę dalej. Głośnik 1: W porządku. Więc nie mam tyle bity, by iść naprzód. Więc, co się wydarzy? To po prostu się zatrzymać? PUBLICZNOŚCI: W pewnym momencie będzie zamknięte the-- Głośnik 1: Będzie zamknięty w dół, pętla, ale dlaczego? Co się wydarzy u Bardzo koniec jego granicami? Tak? PUBLICZNOŚCI: To będzie cykl z powrotem do liczb ujemnych. Głośnik 1: Aby liczb ujemnych, lub jakbyśmy po prostu leczeniu pozytywne, zera co najmniej. Więc tak, absolutnie. Przypomnijmy, że widzieliśmy ostatni raz, że jeśli zwiększyć swoje bity jeden raz za dużo, a ty nie przednimi przepełnienie pojemność swojej int lub bez względu na typ danych to, że jesteś będzie owinąć wokół, prawdopodobnie, dwie liczby ujemne. Albo, jeśli już określić, że twój Zakres powinien być tylko pozytywne, które możesz zrobić, ale nie widziałem tego jeszcze, może skończyć się co najmniej z powrotem na zero. Chociaż, właściwie tak. W tym przypadku ujemny cyfr, w tym przypadku pętla będzie do wypowiedzenia dlatego, że nie jest w rzeczywistości większa niż lub równa zero, jeśli jest ujemna. Tak więc, niestety, jak długo mamy czekać? Teraz mamy do co, 2 mln-owski? Jesteśmy jak 2 mld euro, będziemy musieli poczekać dopóki faktycznie możemy zobaczyć ten objaw. Ale możemy go zobaczyć trochę szybciej, maybe-- zobaczymy, czy możemy przerwać. Chodź. Nawet menu pojawiają się powoli. W porządku. Więc, wrócimy do tego niebawem. To dobry time-- go szlag, szczenięta. To dobry czas na kilka ogłoszeń. Tak więc, jeśli może chcesz do zaangażowania się w YHack, która jest wydarzeniem jest sponsorowana przez naszych przyjaciół z Yale. I rzeczywiście, niektóre z Kursu TF w Yale są zaangażowani w to. YHack to międzynarodowa hack-a-Thon gospodarzem i trzymał w Yale, łącząc 1500 podobnie myślących hakerów i reklam wszystkich cały świat. Jeśli jest to odsetek, się tu zapoznać. Jeśli jest zbyt krótko po Ekran, spojrzeć na dzisiejsze slajdów dla URL yhack.org. Tak więc, również kilka szybkich ogłoszenia. Więc oficjalnie sekcje rozpocznie w przyszłym tygodniu, zarówno tu i New Haven. Należy pamiętać, będziesz coraz e-mail później ten weekend najbardziej prawdopodobne. To zajmuje dużo czasu, dla CS50 do sekcji, Biorąc pod uwagę wszystkie osoby w klasy i wszyscy poruszania się. I wszystkie Fellows nauczania " Nadal są również harmonogramy krzepnięcia, ale zaglądajcie do wiadomości e-mail, a jeśli potrzeba będzie można ponownie sekcję tam po. Study.cs50.net. Tak więc, nawet jeśli są stałym uczestnik w sekcjach, uświadomić sobie, że prawie wszystkie zasobów wykorzystujemy w sekcjach są publicznie dostępne w CS50 Studia na tym adresem tutaj. Tak więc, jeśli chcesz kiedykolwiek chciał ponownie recenzję Materiał, z sekcji lub odczytu z wyprzedzeniem, czy nie można zrobić to kilka tygodni, sobie sprawę, że slajdy próbki, i problemy, i definicje, i więcej są tam również. Godziny urzędowania wznowić dziś i jutro, i środa, i czwartek sprawdzić kurs na strona harmonogramem. A także, wprowadza na rynek dziś jest CS50 Omów. Tak więc, jeśli i kiedy masz pytania siebie lub dla pracowników kursu, w i generalnie pracy na pewnym zbiorze problemów, sobie sprawę, że nie koniecznie trzeba zwrócić się do człowieka następnego Ciebie. Jeśli nie ma tam nikogo, można dotrzeć do nas i kolegów online za pośrednictwem CS50 Omów. Tak więc, jest to rozmowa wyżywienie na kurs, i uświadomić sobie, że to jest chyba najlepszy miejsce, aby rozpocząć, gdy masz pytania, gdy poza godzinami pracy biura w szczególności. Lunchowe rozpocznie się w tym tygodniu też. Na ognia i lodu [Niesłyszalne] w New Haven. Spójrz na kurs na strona w celu RSVP. Kto pierwszy, służą do tego. Jeśli nie dostaniesz w tym tygodniu zrobimy to najbardziej każdy piątek czasie trwania. OK, a teraz słowo o klasyfikacji. Szczególnie, gdy wejdziemy problemu ustawić jeden, który jest w tym tygodniu, i problemu ustawić dwa i później. Jak mamy go o ocenę zestawów P i oceny ich jakości? Tak, to cztery osie, które wykorzystujemy w CS50, a oni te cztery tutaj. Zakres, które oddaje na numeryczne Podstawą, jak wiele zbioru P nie można rozwiązać. Jest ona z grubsza odpowiada wysiłek, i to jest nasz sposób na uchwycenie próbowałaś połowa P ustawieniu wszystkich zestawie s. To jest łatwe, aby uzyskać doskonałe wyniki na jeśli nie, rzeczywiście, spróbować każdy aspekt zestawu P. Tak więc miej to na uwadze. Poprawność jest dokładnie to. Czy swoją pracę kodu jako specyfikacja jak i roztworu próbki sztabów " sugerują, że Twój kod powinna w istocie działać. Sprawdź, 50, jeśli nie zostało to spełnione jeszcze, jest w P ustawić jedną specyfikację i będzie ogólnie daje tak / nie odpowiedzi czy kod jest poprawny. Przynajmniej o ile będziemy wyznaczanie wartości jest oparte na testach , które prowadzimy w ramach tego programu. Projekt jest bardziej subiektywna. Jest to, jak dobrze napisany jest kod. I to jest coś, co będzie lepiej w miarę upływu czasu, i to jest coś, że będziesz dostarczyć więcej informacji zwrotnej na jakościową. I projektowania mógłbym myśli przed długo mieć ochotę w jakiś P ustawić coś zrobić loopingly, ale mieć może trzy lub cztery, lub pięć przednie pętle zagnieżdżone lub zagnieżdżone, gdy pętle. Że generalnie powinno zacząć zarabiać warować i generalnie będzie uważany zły projekt. I zaczniesz widzieć w klasie i z klasy dobrych sposobów działania, złe sposoby robienia rzeczy, które Może wszystko będzie poprawne, ale nie niekoniecznie dobrze zaprojektowane. Jak pisanie eseju. Możesz być w stanie umieścić słowa na Strona, które są poprawne gramatycznie, ale esej lub Teza, że ​​są w to po prostu całkowicie niespójne i nieprzekonujące. I tak, że może być analog w napisane świecie złego lub dobrego projektu. I styl, też jest dość subiektywne. Ale przynajmniej możemy spodziewać spójności. Jest to, jak bardzo jest kod. Są rzeczy ładnie wcięty? Czy Twoje zmienne oraz nazwie / Czy wszystkie swoich nawiasach i nawiasy ustawione tak jak powinny? Mamy przewodnika stylu CS50 jako zestaw problemu skieruje Cię na. Ci bardziej komfortowe są Zapraszamy do zarzuciła, że tak długo, jak sam siebie spójne. I to też jest lekcja będziemy wzmocnienie w części. Tak więc, jeśli wszystko było trochę szybko sobie sprawę, zbiór P i sekcje trafi do większej głębokości niebawem. Ale generalnie mamy bardzo niewiele. chwytaki do CS50 Wyniki są na ogół na skalę od jednego do trzech lub jeden do pięciu. Jesteśmy literally-- i nie mogę powiedzieć, to wystarczy w pierwszym tygodniu. Trzy dobre. Tak więc, chociaż, tak, trzy z pięciu normalnie, matematycznie, może być 60 procent lub jak D minus. Trzecia jest w istocie dobre. I rzeczywiście, oczekujemy większość uczniów w klasie na rozpoczęcie terminu wokół dwójek i trójek, czwórek., oraz Prawdopodobnie nie tak wiele piątki. Nie było zbyt wielu z nich. Ale ogólnie, aby rozpocząć w że sweet spot na krzywej tak, że wraz z upływem czasu, Jest rzeczywiście miejsce dla, i możliwości dla górnej progresji. Więc proszę nie utożsamiać trzy z 60%. To znacznie bardziej abstrakcyjne niż. Wzór z którego obliczamy stopnie są ważone w sposób następujący. Poprawność jest najbardziej godny polecenia. Projekt jest wart trochę mniej. Styl jest wart trochę mniej. I to na ogół rejestruje czas że idzie do coraz każdego z tych osi tylko w prawo. Styl jest bardzo proste, powinna być bardzo szybkie, ale jest to łatwy nawykiem dostać się leniwy. Poprawność może potrwać Ci większość czasu. Ścigających jakiś błąd potęgę podjąć dodatkowe godzinę lub więcej, i tak, punktacja ostatecznie oddaje tego. I tak, teraz bardziej poważny wyraz. Od CS50 ma rozróżnienie, lepiej lub gorzej, bycia może lepiej zapoznali z zagadnieniami akademicki uczciwość niż większość jakimkolwiek innym kursie. I rzeczywiście, to do mojej świadomości, że wysyłamy więcej studentów, niestety, w celach dyscyplinarnych Każdego roku w wyniku. Więc, w interesie pełna ujawnienie, niech krótko porozmawiać o tym, co dzieje się w CS50, a co Cię może zrobić, i co możesz mieć na uwadze. Tak, tutaj od 2007 roku, kiedy Odziedziczyłem kursu jest liczba przypadków Ogłoszenie Zarządu. Ogłoszenie Zarząd jest dyscyplinarne Harvardu ciała, albo teraz Honor Counsel, do których zwraca się, kiedy studenci coś zrobić, że kurs na Program zajęć uważa nierozsądne. Nie ma prawdziwego wzór tutaj, powiedziałbym. Waha się nad lat, ale ogólnie jest liczbą przypadki, które są określone. Liczba studentów które są zaangażowane? To też jest różna. Zazwyczaj, w zeszłym roku Przykładowo, 29 studentów na Harvardzie Ad Boarded były, że tak powiem. 29 z nich obecnych studentów, Dwa z nich przed studentami, którzy współpracowali w pewnym przewrotnego sposób. A następnie w kategoriach odsetek, to zwykle około 3% klasy, która niestety sprawia, że ​​tego rodzaju decyzji. Tak, w zeszłym roku było to 3,5% wśród studentów CS50 jest to było ogłoszenie Boarded, że tak powiem. Więc, co to wszystko ma znaczyć? I co tak naprawdę zrobić? Tak więc, dla pełnego ujawnienia, że absolutnie, jak informatycy, posiada narzędzia programowe do naszej dyspozycji i to jest bardzo łatwy dla nas, w sprawiedliwości, że nawzajem koledzy, którzy nie są przekraczania tych linii przekroczyć porównać każde złożenie w tym roku przed każdym złożenie przez ostatnie osiem lat. Oprogramowanie to robi. I ostatecznie to ludzkie oczy, które decydują czy należy odnieść niektórych znaczenia dla dalszego orzekania, ale oprogramowanie na pewno pomaga. A to, szczerze mówiąc, to dlatego, że myślę, że mamy takie duże liczby w CS50. To nie dlatego, CS50 studenci lub uczniowie CS więcej na ogół są mniej uczciwi niż innych uczniów, to jest po prostu mamy narzędzia i techniki z której skorzystać z pierwszego przejścia. Ale robimy pilnować na wszystkie te rzeczy oraz, ponownie, w interesie uznając, że to dzieło jest umieścić się przez super większości klasy. I polityka kursu jest na uczciwości akademickiej, nawet jeśli jest to kilka ustępów długo z kilka kul miejmy nadzieję, że są dość czytelne, to naprawdę nie sprowadzają się być uzasadnione. I najlepsza zasada, że oferujemy się w programie nauczania Jest to istota wszystkich prac, które Cię złożyć do tego oczywiście musi być własne. I rzeczywiście, w prawie wszystkich tych, Przypadki, o których mowa w postępowaniu dyscyplinarnym to z powodu jakiegoś studenta koniec jednego noc zazwyczaj odwrócił swój kod na wprost, do koleżanki, który następnie przyjął go w całości lub znacznie ich. Ale tak naprawdę, to jest OK. I rzeczywiście, w biurze godzin, zrazy z papieru już zostały wydane, jeśli przyszedł biurze godzin w zeszłym tygodniu zachęca tyle. Jesteś absolutnie z zadowoleniem i zachęcał w celu omówienia zestawów problemów z kolegami. Aby pomóc sobie nawzajem, gdy potykając. Ale generalnie zasada powinna za to, "kiedy prosisz o pomoc, możesz pokazać swój kod do innych osób, ale nie może ich kompetencji zobaczyć. " Tak więc, innymi słowy, jeśli jestem zmaga się z jakimś P zestawie a ja siedzę tam w jadalni lub w bibliotece, lub w klasie starając się znaleźć jakieś usterki, Pewnością mogę pokazać mój kod na ekranie aby osoba siedząca obok do mnie, na pewno personel, ale także kolega. Jeśli jednak rozwiązanie mój kolega oferuje to, oh, tutaj tylko spojrzeć na to, co Zrobiłem, że przecina linię. A ja śmiem twierdzić, że to na ogół rozsądna rzecz dla większości ludzi bardzo łatwo dostrzec linię. A tak, to zapoznaj się z programu nauczania więcej szczegółów. A teraz jeden z bardziej kontrowersyjne aspekty z CS50 nauczania, że ​​myślałem, by rozmawiać na zakończenie tutaj jest tak zwana klauzula żal. Tak, tutaj wszystko jest drobnym drukiem. Ale w ogóle widzieliśmy w ciągu ostatnich 8 lat oraz , że w rzeczywistości, prawie wszystkie CS50 na przypadki nieuczciwości naukowej były wynikiem po prostu słaba co późno w nocy decyzję. W wyniku stresu, wynik braku odżywiania, brak snu Zestawy P zbyt wiele, zbyt wiele terminy, zbyt wiele zobowiązań. Stres budowania w 2:00, 03:00 AM, 04:00, w terminie zbliża. Większość uczniów w tych sprawach Właśnie uczyniłeś złe decyzje że może bardzo dobrze pożałuję Następnego dnia rano, jeśli nie minut później, ale do zeszłego roku nie było zawór spustowy, że uczniowie mogli rzeczywiście otwierają się rzeczywiście zająć się problem na głowę bez obawy przed uruchomiony z uczelni w ogóle. I rzeczywiście, wprowadziliśmy klauzula żal w zeszłym roku, które mówi, że jeśli w ciągu 72 godziny, trzy dni, przekraczania kilka linii przewidziany w programie nauczania można wystąpić do jednej z kursu na głowy i będziemy musieli porozmawiać o tym. Nadal są za jedne Wyniki, w przeciwieństwie do tego, co Doniesiono, że jest inaczej. Nadal istnieją pewne wyniki, które podlegają zaskarżeniu według kursu, ogólnie zerowania zestaw P lub podjęcia innych działań, ale będzie rzeczywiście, poradzić się i nie odnosi się to wyższe były wynikiem może być znacznie bardziej dotkliwe. I rzeczywiście, dzielić się, co się stało w zeszłym roku, w ciągu ośmiu lat, a teraz dziewięć lat, nauczania tego kursu i po majstrować przy różnych pokręteł, obracając różne tarcze nad przeszłością kilka lat na uczciwości akademickiej, i widząc na danych bez wyraźnego wpływ, nawet wypowiedzi takich jak ta, to był z najlepszych rzeczy wprowadziliśmy pedagogicznie w osiem lat po te linie w CS50. 19 uczniów zgłosiło się na mocy niniejszej klauzuli w zeszłym roku. My nie podjęła żadnych działań dla siedem z tych uczniów, ustalenie, czy byli niepotrzebnie martwi. Nie miały w rzeczywistości przekroczył linię, ale był dobry czat mieć jednak. Mamy wyzerowany 11 wyników które zostały złożone. I w jednym przypadku Poprosiliśmy uczeń robić problemu ustawić. Ale bardziej przekonujące, szczerze mówiąc, z tych 19 czatach, który był bardziej niż ja spodziewać, że każda z nich 10 minut do być może długie godziny, także przyniósł na jaw szereg kwestii dotyczących rodzinnych problemów, zagadnień przyjaciel, Problemy ze zdrowiem psychicznym że to zaangażowany, z studenta błogosławieństwo, zamieszkałego dziekan lub znajomych, lub inny numer środków wsparcia. Tak, że to był zdecydowanie jednym z najlepszych zastosowań naszych czasów a jedna z najlepszych interwencji. Z powiedział, że nie miał Wejście na szybkość wykrywania nieuczciwości akademickiej bardziej ogólnie. I śmiem twierdzić, że to podzbiór studentów ostatniego roku był demograficzne, które wcześniej nigdy nie zidentyfikowano wcześniej i nigdy nie wiąże się z wcześniej. I tak, były wspaniałych sukcesów nawet jeśli zostały one ujawnione mniej niż idealnych warunkach. Tak więc o tym pamiętać jak to zrobić, być może, jakiś biedny decyzja się późno w nocy, że jest odwołanie się tak długo, jako student w tej sytuacji właścicielem i przedstawienia, tak, że możemy mają tego rodzaju rozmowy i sobie z tym poradzić w sposób, który jest edukacyjnym, a następnie możemy umieścić go za nas następnego dnia. Więc bez zbędnych ceregieli, podejmują krawędzi od tej rozmowy, powodem szczenięta są aż znaczy tylko przełamać lody na chwilę. I niestety, oni wszyscy spać, ale to, co miało się stać tutaj był każdy miał z podziwem i trochę odpocząć po tej bardzo ciężkiej rozmowy. Ale widocznie kładę szczenięta spać. Ale jeśli pójdziesz do CS50 na szczenięta strona slash, można je oglądać przez cały dzień. Szczególnie może 2:00, lub 03:00 lub 04:00 w nocy zobaczyć trochę odprężające tam. Więc to jest slash szczeniąt. W porządku. Czy to nie zabawne? OK. Tak więc, z powrotem do jakiegoś komputera nauki, jeśli można. Tak, przypominam sobie, że ostatni raz zaczęliśmy nie patrząc tylko na głównym, które była funkcja domyślnie ustawiane, gdy Zielona flaga kliknięciu odpowiednik, ale również rozpoczął krótko pisząc niektóre z naszych funkcji. I dotychczas żaden z tych funkcji były szczególnie duże i mięsiste. Dostaniesz na te większe Funkcje chyba, P zestaw 2, P zestaw 3, zdecydowanie P zestaw 4 i dalej. Teraz większość programów, Jeśli nie wszystkie, z pewnością dla P Zestaw 1 może być wykonana w całości w głównym. Jeśli twój program tylko pięć linii, 10 linii, długo, nawet 20 linii, doskonale rozsądne ją napisać wszystkie w głównym, a nie do ponad skomplikować Twój kod, ale to, co robimy dziś i dalej próbuje również wprowadzić kilka dobrych technik projektowania tak, jak twój kod staje się bardziej skomplikowane i jak problemów chcesz rozwiązać coraz trudniej i bardziej interesujące masz, rodzaj, narzędzia w przyborniku, z którym zaprojektować dobre rozwiązania tych. Więc rzućmy okiem wstecz na program ten z mojego ostatniego tygodnia, który Funkcje zera była kropka C. I zauważyć, że, po prostu, wygląda to tak z dwóch funkcje, głównym i nazwa druku. A wracając myślami czy może reverse engineering dzisiaj, co było motywacją do wprowadzenia funkcję w linii 28 nazywa, Nazwa wydruku? Albo co to przykład w Warunki zasady lub na wynos, Jeśli chcesz. Niektóre pomruki. Co? Tak rozkładu tak funkcjonalna niby fantazyjny sposób na powiedzenie, rozkładają swój program do jego części składowych a następnie wykorzystać te części montaż całości. Tak, to też jest po prostu rodzaj z już łyk, ale to może nawet lepszym przykładem czegoś tak zwany abstrakcji. Dobrze? Abstrakcja będzie jeden z powtarzających się tematów w CS50 a także informatyka bardziej ogólnie, ponieważ jest to techniką, z którą można rozwiązać problemy skuteczniej, ponieważ Ciebie może napisać rozwiązań więcej intuicyjnie oraz w sposób, który skaluje i jest zrozumiałe przez innych ludzi. Co mam na myśli? Tak, bez wątpienia jest o wiele bardziej czytelne patrzeć na takiego programu, bardzo krótkie chociaż jest. Kiedy widzisz na linii 22, że nie funkcja o nazwie, nazwa wydruku. Że sama nazwa mówi to, co robi. Ta funkcja najwyraźniej trwa Wejście między jego nawiasach, i najwyraźniej coś robi, przypuszczalnie wypisuje nazwę. I tak, mimo że absolutnie może mieć zrobić to, co zrobiliśmy tydzień temu, co było po prostu wziąć to rzeczywisty linii kodu, pozbyć się tego, i uzyskać pozbyć to wszystko razem, to rodzaj pobieranej się pojęcie drukowania nazwy. Nie obchodzi mnie, jeśli używasz druku def. Nie obchodzi mnie, jeśli masz procent S i N. backslash Te są niezwykle tajemnicze szczegóły. Co ja dbam o jak Programista drukuje nazwę. I tak, nie ma lepszego sposobu, aby to zrobić niż przez wywołanie funkcji, nazwę druku? I tak, to była jedna z motywacji aby robić coś takiego. Dokonywanie kod jest bardziej czytelny, bardziej wielokrotnego użytku, a także samo opisowe. Teraz rzućmy okiem w innym przykładzie co było funkcje jeden, które mieliśmy tutaj. Tak, ten jest chyba jeszcze bardziej atrakcyjne, ponieważ w tym wypadku Nie chcę, aby po prostu int. Chcę uzyskać pozytywną int. I okazuje się, aby uzyskać pozytywny int trzeba zrobić kilka legwork. Dobrze? To nie jest prosta linia zadzwonić jak nazwa druku było, który jest co prawda mniej przekonujące. Aby uzyskać pozytywną int, logically-- pozwól mi przejść z powrotem w dół, aby ukryć to. Co masz do zrobienia? Podobnie jak wszystkie narzędzia mamy mają w tej chwili są takie rzeczy jak druku def z normą Biblioteka, a także z biblioteki CS50 mamy Get Int i Get Float, Pobierz Długi Długi, uzyskać ciąg, ale tylko jeden, Germane, teraz jest Zdobądź Int. Tak więc, jeśli jedynym narzędziem trzeba w skrzynce narzędziowej jest Zdobądź Int, jak pójdziemy na temat realizacji że aby uzyskać pozytywną int? PUBLICZNOŚCI: Utwórz dziennik i sprawdzić, czy wejście że dali był dodatni, czy nie. Głośnik 1: Perfect. Dokładnie. Kolejnym narzędziem, mamy w naszym przybornik z tydzień lub dwa temu to tylko konstrukt pętli. I tak, tak, jeśli używamy chwilę pętli, lub robić podczas pętli, lub przedniego Pętla prawdopodobnie mogłaby uciec z którymkolwiek z tych w innej formie. Możemy realizować koncepcję get pozytywne int tylko przy użyciu Pobierz Int, a potem po prostu zachować nazywając ją ponownie i zachować męczył użytkownika do czasu, gdy w rzeczywistości daje nam to, co chcemy. A więc teraz, w tym abstrakcja procesu na uzyskanie pozytywnego int do funkcji o nazwie Pobierz Pozytywna Int jest trochę bardziej przekonujące, bo patrzeć na to. Są to podobnie jak 10 plus linii kodu, które są zaangażowane w uzyskaniu pozytywnego int, a ja naprawdę nie obchodzi, jak to zrobić. Wszystko zależy mi jest, że Ciebie może to zrobić, i tak mam ukryte wszystkie te szczegóły za Funkcja o nazwie Get Positive int, że Rzeczywiście, ma to robić podczas pętli. I zobaczyć, w zeszłym tygodniu na składni tam, ale to po prostu deklaruje N, i wypisuje instrukcje dla użytkownika. Wzywa Pobierz Int, a następnie sprawdza, warunek ten ponownie i ponownie i znowu, dopóki użytkownik nie współpracuje. Więc teraz, kilka testy sprawdzające. Dla tych, którzy być może znają z niektórych programów, dlaczego N oświadczył, dlaczego tworzę N poza robić podczas pętli? Dlaczego jest to, na linii 29 i nie na takich jak 33, na przykład. PUBLICZNOŚCI: bo kiedy zadeklarować ją na zewnątrz, to rodzaj z więcej, większej scope-- Głośnik 1: Dobra. PUBLICZNOŚCI: --and jeśli zadeklarować że wewnątrz pętli, [niesłyszalne] dlatego, że nie wie o tym. Głośnik 1: Dokładnie. Jeśli mogę simplify-- to jest kwestia zakresu. I zakres odnosi się do kontekstu która to zmienna istnieje lub jest użyteczny. I miło zasadą jest to, że na ogół, gdy deklarujesz lub utwórz zmienna można go używać tylko wewnątrz z najbliższych obejmując nawiasy klamrowe. Więc co to oznacza? Gdybym zamiast tego cofnąć i iść z coś, że czuje się trochę prostsze. Dobrze? Linia 32 wygląda po prostu czystsze do mnie teraz. Robię obie rzeczy na po czym przypisanie prawa ręka do lewej strony. Problem w oparciu teraz że określenie zakresu jest to, że liczba N może być stosowany w przewodach 31 i 32, wewnątrz tej pętli ale gdzie tą definicją może nie być stosowana? W linii, co? Tak. PUBLICZNOŚCI: 35. Głośnik 1: 35. Zdecydowanie nie 35. A także gdzie indziej? PUBLICZNOŚCI: 34. Głośnik 1: Nawet 34 problematyczne, ponieważ jest to poza nawiasy. I tak w rzeczywistości, zobaczymy co się stanie. Dobrze? To może wydawać się trochę Intuicyjny, czy nie może, ale zobaczymy, co Kompilator ma do powiedzenia, gdy idziemy w dzisiejszym katalogu źródłowego. Dodać funkcję jednego. O mój Boże. Cóż, w końcu skończył , że na drodze. W porządku. A co chodzi tu? Bardzo arcane patrzeć. Ale oto co typed-- aby funkcję jednego. Oto, co zrobić wywołane, która jest faktycznie za pomocą szczęk kompilatora niektóre z tych flag że zobaczymy ponownie przed długo. I znowu, zawsze wyglądają w pierwszym błędu bo może po prostu mają kaskadowy znaczenia, wpływu na innych liniach. Więc co to oznacza to, że problem jest w funkcji 1.c. To jest na linii 32. I to jest w kolumnie, lub postaci, 13. Więc, gdy Twój edytor tekstu, który może pomóc określić, gdzie problem jest. Więc jeśli mogę przewinąć w górę, co jest linia 32? To rzeczywiście ten jeden który jest już podświetlony prawo here-- niewykorzystane zmiennej n. Ale to nie jest nieużywany. Używam go. Ale kompilator mylić, bo istnieje tylko wewnątrz tego zakresu. I tak nie mogę użyć go tutaj. Nie mogę użyć go tutaj. I kompilator zatem nawet nie obchodzi mnie, że próbuję. To wydaje się być nieużywany w jej rzeczywistego zakresu. Więc możemy rozszerzyć zakres wykonując dokładnie to, co zaczęliśmy with-- int n. I mimo, że tak nie jest wygląda tak elegancki, być może, i bierzemy dodatkowy wiersz tutaj, teraz jest w zasięgu wszędzie. Więc spróbuj ponownie. Więc dokonać funkcji jeden. Miły. A teraz, jeśli I jeśli mogę uruchomić funkcję jeden, dajmy jej negatywne 10, ujemny 1, 0, 1 i rzeczywiście pracuje. Więc nie ma innego rozwiązania tutaj. Wiesz co? Co zrobić, jeśli naprawdę jestem zmagają się z tym? Nie wiem, gdzie n miało iść. Wiesz co? Idę go umieścić wszystkie sposobem na szczycie mojego pliku tutaj. Co by to zrobić, o tym sądzisz? Tak? PUBLICZNOŚCI: [niesłyszalne]. 1 głośnik: Tak. Więc zrobiłem to globalna, że ​​tak powiem. Jeśli masz zmienną, która jest na zewnątrz wszystkich funkcji, które są dozwolone, i kod powinien skompilować i n stanie się dostępna nie tylko w get pozytywne int, ale także w main-- które jest trochę niepokojące, ponieważ nie już n w głównym, więc więcej na które w ciągu zaledwie moment-- ale to byłoby uznane za złe projektowanie. W porządku. Jeśli masz do uciekania się do coś, och, będę po prostu umieścić go tutaj, bo kod wydaje się skompilować generalnie nie jest najlepszą praktyką. Raczej chcesz wybrać najwęższy możliwy zakres dla zmiennych, co oznaczałoby, będzie z naszego pierwotnego projektu, który jest tutaj. Teraz tak na marginesie, jeśli miał identycznie nazwany zmienna tutaj, sposób c będzie obsługiwać this-- choć nie nastąpi to zbyt often-- jest to, że wciąż perfekcyjnie tutaj. Ale ta definicja N w wierszu 22 będzie cień globalny jeden. Więc ta będzie działać w Główną, a globalny rzeczywiście stosuje się, gdy jesteś w uzyskać pozytywne int Więcej na ten temat innym razem, ale tylko dla tych, ciekawi. Tak w skrócie, możemy rozwiązać ten problem tutaj. Teraz odciąć dwa inne utwory Zanim przyjrzymy się jednej ostatniej linii kodu w tym programie. Uzyskać pozytywną int. Po stronie lewej jego słowo jest int słowo. Co to oznacza sądzisz? Do tej pory mamy najczęściej postrzegane nieważne. Tak? PUBLICZNOŚCI: To rodzaj Zmienna, że ​​pytasz o. 1 głośnik: Tak To typ, niech mnie nie powiedzieć, zmienna, ale rodzaj wartości że pytam powrotem do. I rzeczywiście, to Intuicyjny tutaj, mam nadzieję. Dobrze? Jeśli chcesz uzyskać pozytywne int, co to jest, można chcą function-- jak nasz Wolontariusze z ostatniego tygodnia oddać z powrotem kawałek papieru z int na jej temat? I tak mamy określone, że tak zwany typ zwracany tej funkcji jest uzyskać pozytywną int. Jeśli nie chcemy go zwraca niczego, mówisz nieważne. Jeśli chcesz, aby powrócić ciąg, można powiedzieć ciąg. Jeśli chcesz, aby powrócić pływak, mówisz pływaka. Ale tylko jeden, który odnosi się tutaj logicznie, ponieważ używam get int, chociaż jestem ograniczając go do wartości dodatnie, jest powrót int. Więc odwrotnie, co to znaczy że to nieważne w nawiasach? Co zrobić, nawiasy ogólnie zdefiniować? Tak? PUBLICZNOŚCI: Oznacza to, że funkcja użytkownika Nie rzeczywiście coraz to. Głośnik 1: Oznacza to, że danej funkcji faktycznie nie dostajesz to, czego? PUBLICZNOŚCI: Wejście. Głośnik 1: Wejście, w ogóle. Więc rzeczywiście, jeśli nawias tutaj można określić nieważne, które oznacza po prostu nie chcę żadnych danych. Poradzę sobie z tym problemem sam. I rzeczywiście, nie masz do powiedzieć uzyskać pozytywną int nic. Wystarczy powiedzieć, uzyskać pozytywną int, i że Funkcja zgaśnie i co robi. Ale nie był mały trick mam gra tu cały ten czas aby upewnić się, ten kod kompiluje. Zauważ, że int-- uzyskać pozytywne int void-- jest na linii 27. Ale z jakiegoś powodu pozornie dziwne to też się tu na linii 16. I tak na dokładkę będę powtarzać to tak, to zupełnie identyczne. A mówiłem prototyp z trochę Komentarz jedna linia. Co się stanie, jeśli usunę, że A Teraz uruchom ponownie dokonać funkcji 1, wprowadzić. Ups. Poczekaj minutkę. Gdzie jest moja karta? Hę? Czekaj. Bądź funkcji 1. No to jedziemy. OK. Gdyby nie został zapisany poprawnie. Tak, myślę, że jest trochę bug tutaj, gdzie nie jestem widząc nazwę karty w tej chwili. Więc co tu się dzieje? Niejawna deklaracja funkcji uzyskać pozytywną int jest nieważny w C99. Tak mylące ponownie. Więc co to wskazuje? Cóż, okazuje się, że C jest dość głupie. Cóż, to programowanie język, a raczej kompilator. To wie tylko to, co masz nauczył go, i to tylko będzie coś wiedzieć gdybyś nauczył go wcześniej. Innymi słowy, w Głównym w tej chwili, jestem próbuje wywołać funkcję nazywa się pozytywny int. Ale kompilator nie będzie zauważyć, że się pozytywnie int istnieje do linii 26. A więc to, co robi kompilator jest tylko Błędy, jak tylko dojdzie do linii 17, mówiąc niejawny deklarację z uzyskać pozytywną int, które jest tylko fantazyjny sposób na powiedzenie, nie wiem wiedzieć, co się pozytywne int jest jeszcze. Inne języki takie jak Java i Python i Ruby może patrzeć w przyszłość. C nie. I tak, jak nam się naprawić Jest to jeden z dwóch sposobów. Albo jedno, czy problem jest to, że się pozytywne int nie został dotąd, dobrze, daj mi po prostu przenieść go na górę. To by rozwiązać ten problem. Ale ogólnie, to uważana za lepszą technikę umieścić swoją główną funkcję w bardzo góry tak, że człowiek czyta kod wie, co robi program, ponieważ głównym nie jest pochowany wszystko sposób, w dolnej części lub w środku. To na samej górze. Tak, że nie czuje się idealnie. I rzeczywiście można uzyskać w sytuacjach, gdy w przypadku połączeń jedna funkcja drugiego, co wywołuje inną, można dostać się do kwestii, w których nie może przejść nad drugą, logicznie. To nie jest po prostu możliwe. I tak aż do pracy na to jest po prostu wziąć podpis danej funkcji, tak aby speak-- w pierwszej linii, gdzie to declared-- i po prostu skopiować, wkleić go u góry, ale nie z kręconymi braces-- tylko średnikiem. To jak mała podpowiedź z tego, co ma nadejść. W rzeczywistości, wszystkie tego czasu, gdy Widziałem takie rzeczy jak standardowego io.h i cs50.h, podobnie w te kropki Pliki h są tam inne prototypy. I zobaczymy, że przed długi. Tak w skrócie, jeśli masz program w pliku z wieloma funkcjami Poza głównym, prawie zawsze chcą je zadeklarować tylko w drodze ich pierwszy Linia, po średnikiem, na samym początku pliku. To było dużo na raz. Jakiekolwiek pytania? Jakiekolwiek pytania? W porządku. Więc przejdźmy następnie coś jak kaszel. Och. Jak montażu. W porządku. Kaszel. Więc o to c Realizacja programu my na drugi dzień w Scratch, że bardzo prosto wystarczy mówi, kaszel, kaszel, kaszel. W porządku. I ktoś powiedział kilka dni temu, że istnieje sposób czyszczenia ten kod się już. W porządku? Tak szybko, jak jesteś kopiowania i wklejanie prawdopodobnie zły projekt. Przynajmniej raz mamy do czterech lub pięciu lub 20 kaszle, to czuje się złe praktyki. My po prostu zachować kopię, wklejanie. Co jest oczywistym rozwiązaniem do czyszczenia to zaprogramować? PUBLICZNOŚCI: Loop. 1 głośnik: Tak. Więc użyć pętli. I możemy użyć dla pętli, na chwilę Pętla dowolną liczbę sposobów. I rzeczywiście, to co robimy w wersji jednej tutaj. Ja zamiast przepisać go w wersji jednej z cough.c być tylko kaszel w pętli for. W porządku, ale nie okazja teraz do rodzaju początku to trochę zaprojektować bardziej jak lekcja nauczyła nas przed chwilą, co jest this-- załóżmy, że chcę aby utworzyć funkcję zwaną kaszel Rozważmy przez chwilę co to będzie wyglądać. Więc jeśli chcę coś kaszel, tylko trzeba w użyciu druku F wewnątrz funkcji. I rzeczywiście jestem. A w rzeczywistości wszystkich czas, za każdym razem jesteś drukowania coś ekran, programista nazwałbym to efekt uboczny. To nie ja wręczając powrót ktoś wartość. To mi podjęcie pewnych działań które mogą być wizualnie oczywiste. Ale ta funkcja kaszel, to powrót wszystko w oparciu o pierwszą linię? Nie, dlatego, że jego typ zwracany jest nieważna, co oznacza po prostu, to nie wręczając mi nic w zamian. To może robić coś wizualnie, ale to nie mnie, wręczając kopie kawałek papieru jak w zeszłym tygodniu. Czy trzeba żadnych danych? Nie. A więc jest to nieważne tu. Więc to też jest rodzaj over-engineering ten problem. Dobrze? Zrobiłem program więcej złożone, więcej linii kodu, Nie zrobiłem go jakakolwiek bardziej funkcjonalne, ale będzie odskocznią, być może, dla szerszego Kontekst z bardziej skomplikowanego kodu. Ale co z tego? Co ja done-- tylko zerkając na nie patrząc na ten komentarz na samym szczycie file-- co mają I zasadniczo odbywa się tu z moim kaszlem wdrożenie, że jest inaczej? Tak, z tyłu? PUBLICZNOŚCI: Zrób to tak można mają charakter wyłączyć. 1 głośnik: Tak. Więc to czuje miłe. Dobrze? To jak dodawanie funkcji do program lub czynność, w tym przypadku. Nadal nic nie zwraca. To może mieć wizualny efekt uboczny, dlatego, że dzwoni do druku f. Ale teraz mam parametryzowane funkcja, która oznacza, że ​​określiłeś wzięte wejście typu int i nazywają to n, ale mogę nazwać to coś chcę. W rzeczywistości, może to być po prostu razy, aby być jeszcze bardziej wyraźne. A potem może po prostu zmienić to tutaj. Ale chodzi o to, że jest to w jaki sposób stworzyć funkcję, która pobiera dane. A jeśli przypomnieć przerzucanie Może on-line za pośrednictwem jednego z walk-through, Czwarty i ostatni przykład kaszel, zauważysz, tutaj mam uogólnione mój kod further-- rodzaj wydobywane Ponadto. Jak kaszlu i kichania, oba są o jak coś mówi lub czyni jakiś dźwięk. Zapisz byłoby odpowiadający blok Scratch. A więc to, co zrobiłem w tej wersji, które możemy tylko rzut oka na, jest kaszel jest tak jakby powiedzieć, [kaszel], kaszel, a tymczasem, kichanie jest jakby powiedzieć, [Achoo]. A więc już uogólnione realizacja tych teraz wdrażanie Funkcja ta rodzajowa, powiedzieć, co jest interesujące dla dzisiejszych potrzeb tylko dlatego, że wciąż nie posiada typ zwracany. Ale ile to ma wejść? PUBLICZNOŚCI: Dwa. Głośnik 1: Dwa. I tak, jeśli chcesz się w dwóch argumentów, tylko rozdzielając je przecinkami. A jeśli chcesz, aby następnie nazywają tę funkcję, Zauważ, że po prostu zadzwoń powiedzmy, cytuję, koniec cytatu, dla pierwszego argumentu, wspólny n, dla drugiego argumentu. Więc jeszcze raz, po prostu musimy teraz klocki tak, że możemy właściwie realizacji niektórych naszych funkcji. W porządku. Wszelkie pytania na temat tego miasta? Więc teraz niech obrać powrotem warstwę, jeśli tak. A celem, ostatecznie, jest problemem w przyszłym tygodniu zestaw będzie na cryptogrophy-- sztuka kodowania informacji. I szczegółowo, informacja będzie można szyfrowania i deszyfrowania będzie tekst. I tak, że rodzaj zaprasza Dziś pytanie, jak dobrze, co dzieje się pod maską z tekstem poza ASCII od tygodnia zerowej, I jak możemy rzeczywiście zaczynają manipulować? Więc tutaj jest nazwa Zamyla jest. I w tekście, który może być wprowadzany do jak funkcja get smyczkowy. A od teraz, kiedy zobaczysz Ciąg jak this-- Z-A-M-Y-L-A-- zacząć myśleć o tym tak, jakby każda z tych znaków jest w pudełku z jego własne. I rzeczywiście, w tygodniu lub tak jest czas każdego z tych pól będzie stanowić bardzo wyraźnie blok memory-- kęs pamięci. Tak więc każdy z tych liter ostatecznie będzie reprezentował 8 bitów. A my rzeczywiście zobaczyć co się dzieje na pod maską w moim komputerze. Jednak, że nie wystarczy wystarczy spojrzeć na Zamyla po tej soczewki, przy czym każda z Te litery to w jego własnym polu. I na tyle dobrze w C możemy dostępu do każdego z tych pól bezpośrednio. Więc jeśli chcesz dostać pierwszy literą jej imienia, bardzo proste w C. Jeśli chcesz dostać ostatni list, bardzo proste, jak również z kawałkiem nowej składni. Więc mam zamiar iść do przodu w CS50 IDE i otwarcie o jakieś zerowy punkt C. I w tym przykładzie tutaj istnieją kilka nowych rzeczy dzieje. Więc najpierw w linii 19, mamy widziałem ten before-- get ciąg. Więc po prostu jako szybki test dla pewności czy ktoś może ofiarować werbalnie Wyjaśnienie laika od co dzieje się w linii 19. Podobnie jak po prostu przełożyć to na Angielski, że nie współlokator w CS50 może zrozumieć. Tak. PUBLICZNOŚCI: Mieć wejściowego użytkownika Łańcuch i przechowywać go w zmiennej s. Głośnik 1: Dobra. Mają wprowadzanych przez użytkownika ciąg i przechowywać go w zmiennej s. To wspaniale. Tak więc na prawej boczne, nazywamy get ciąg. Że zwraca wartość które nie są przydzielane od prawej do lewej boczny w zmiennej o nazwie s, który jest przeznaczone do przechowywania ciąg. Dokładnie. Więc teraz linii 22, na komentarz w linii 21, oczywiście drukuje ten łańcuch jeden znak w wierszu. Ale jak? Więc przede wszystkim, możemy zainicjować I do 0. A następnie w jaki sposób dostać się do koniec nazwy Zamyla jest? Oraz, na koniec Nazwa Zamyla jest, mogłem ręcznie wpisać ostatni znak jej imię w jakiś sposób, lub liczba nim. Dobrze? Jeśli wrócimy here-- Z-A-M-L-- Y-L-A-- więc mogłem wpisać. Co znajduje się wskaźnik Ostatni list Zamyla jest? Jeśli jest to 0-- mówiąc jak programmer-- 0, 1, 2, 3, 4, 5, I tak rzeczywiście heard--, ostatni list w imię Zamyla jest szósty, ale jeśli liczymy od 0, to będzie numer 5. Miejcie to na uwadze, tutaj. Okazuje się, że jest to funkcja w C nazywa strlen, a już w dzień i do dziś jeszcze, wielu programistów wybrać, aby zsynchronizować nazwy dla ich Funkcje, które brzmią jak słowa próbują powiedzieć. Więc strlen jest długość łańcucha. I tak co by długość ciąg S powrócić, gdy Zamyla jest wejście? PUBLICZNOŚCI: Pięć. Głośnik 1: Z-A-M-Y-L. Sześć. Dobrze? Jaka jest długość nazwy Zamyla jest? Dobrze? I tak w rzeczywistości, sześć liter. Dobrze? I tak, co to oznacza dla naszej pętli? Mamy zamiar przejść z 0 do sześciu, które ma dać nam pięć powtórzeń. Co robimy na każdej iteracji? Cóż, procent C, ktoś domyślił się na drugi dzień, oznacza zastępczy dla czego? PUBLICZNOŚCI: Char. Głośnik 1: Wystarczy char. Więc jeden character-- nie wiele znaków jak struna. I to tu jest nowa linia że mamy drukowania. I to tu jest nowa składnia. Jeśli chcesz wydrukować i-tego znak w ciągu S, że tak powiem, można po prostu powiedzieć, że Nazwa łańcucha S, a następnie otworzyć nawias kwadratowy, oraz zamknął nawias kwadratowy, z I środek. I to jest miłe w które to niby wygląda jak plac jak kwadraty, w których Zamyla użytkownika znaków tam istnieć na tym zdjęciu. Więc jeśli rzeczywiście uruchomić to Teraz, zobaczmy, co się stanie. Bądź ciąg 0 dot ukośnik Łańcuch 0, a następnie jestem zamiar wpisać nazwę Zamyla jest. Nie ma polecenia, bo nie f użyciu druku, ale to dobrze. Po prostu wiem, co robić. I rzeczywiście, to wypisuje Nazwa Zamyla, w jednym wierszu. Teraz się trochę lekkomyślny. Załóżmy, że nie wiedziałem, o strlen i pomyślałem, Wszystko w porządku, nikt nie będzie mieć jak nazwać większy niż 50 znaków. Idziemy do przodu i ponownie skompilować to i uruchom go, a następnie wpisz w Zamyla ponownie. Logicznie rzecz biorąc, to, co jest Program będzie próbował drukować? Z-A-M-Y-L-A następnie jak 45 nieznane bajtów pamięci. I rzeczywiście, wrócimy Do tej idei pamięci. Ale logicznie, jeśli Nazwa Zamyla jest tak długo, jak na zdjęciu tu, co mówimy jest utrzymać drukowanie, należy drukowanie, należy drukowanie, należy drukowanie, należy drukowanie, aż do 50 postaci, które kto wie, co się wydarzy. Więc właściwie spojrzeć. Miejmy wpisać Zamyla. Ciekawe. Mieliśmy szczęście. Tylko cała masa białej przestrzeni. Och. Jest jeden modny charakter. To wygląda trochę jak dziwne pytanie zaznaczyć tam, ale jest nazwa Zamyla jest. Chodźmy bardzo lekkomyślne. Jak o wydrukowanie 500 bloki w nieznane? Idziemy dalej i zrobić to jak również, a następnie ponownie uruchomić. I niech cały ekran, bo musimy zobaczyć więcej miejsca. Zamyla. Masz jeszcze szczęście. Czy możemy uzyskać bardziej lekkomyślni? Chodźmy bardziej lekkomyślne. 50000 znaków. Jest to najbardziej na pewno nie jest dobry pomysł. W porządku. Bądź ciąg 0. To będzie nasz ostatni pokaz. Zamyla. Fuj. Fuj. OK. Więc moja pamięć jest naprawdę pusta teraz, która jest faktycznie rodzajem wygodne. Co staram się uzyskać to-- wszystko w porządku. A teraz jestem po prostu będzie się lekkomyślne. 500000. Make-- niech pełnoekranowym go. Wchodzić. Zamyla. No to jedziemy. Nie mam pojęcia, co to jest, ale to brzmi źle. W porządku. I rzeczywiście, wkrótce, jeśli jesteś wśród niewielu szczęśliwców godzinach urzędowania i problemu ustawić jeden, ty może równie dobrze spotkać to. Usterka segmentacji faktycznie robi mają dobrze zdefiniowane znaczenie. Oznacza to jakaś pomyłka w odniesieniu do segmentu pamięci. A w laika, oznacza to, że dotknął memory-- użyliśmy pamięci RAM w komputerze że nie powinien mieć dostępu. A to, co jest zarówno potężne i niebezpieczne o C jest to, że rzeczywiście mają nieograniczony dostęp do całości pamięci programu lub bajtów lub RAM, bardziej szczegółowo. Więc nawet jeśli nazwa Zamyla w ma tylko sześć znaków, Wciąż mogę przejść w dowolnym miejscu w pamięci chcę. I tak na marginesie, jeśli już kiedykolwiek czytałem jakiś artykuł w ciągu roku o niektórych serwera lub jakiś program włamaniom lub posiekany to podjęte zaletą czegoś nazywa przepełnienie bufora exploit, że będziesz naprawdę mówić o kilka tygodni, to ogólnie odnosząc się jakoś oszukiwanie komputer się idzie dobrze poza granice pamięci że powinna mieć, a znalezienie czegoś soczystego w tym memory-- Hasło, być może, to sposób obejścia jakiś numer seryjny sprawdzić, czy po prostu na ogół w stanie oszukać komputer wykonuje Kod, który nie był przeznaczony. Ale wróćmy do Rzeczywistość na chwilę gdzie ten program był realizowane z strlen, i wprowadzić jedną rzecz tutaj. Co nowego u tych trzech najlepszych linii? Tak więc ciąg dot h. Okazuje się, że to jest biblioteka o nazwie Dot łańcuch H lub Biblioteka ciąg, którego nagłówek pliku, że tak powiem, jest ciąg dot h, który daje mi Dostęp do tej funkcji strlen. Jeśli Pomijam, że kompilator jest będzie krzyczeć na mnie w jakiejś formie. Ale wiesz co? Teraz przejdźmy naprawdę dopracowany. W linii 22, coś niby z inefficient-- źle zaprojektowane, arguably-- o tej linii kodu. Pomyśl, w jaki sposób dla pętli są realizowane i jakie kroki powtórzy i ponownie i again-- inicjalizacji stan, kod, który zostanie wykonany, a następnie przyrost lub zmiana, to warunek, to kod, to zmiana, a następnie stan, kod, to zmiana, i tak dalej. Więc co może być trochę niepokojące lub źle zrobić tutaj? Tak, w kolorze niebieskim. PUBLICZNOŚCI: strlen jest zwany wiele, wiele razy. 1 głośnik: Tak. Więc strlen nazywa wiele razy, ale to, co jest długość Zamyla się nazywa Pierwszy raz pętla wykonuje? PUBLICZNOŚCI: Six. Głośnik 1: Sześć. Cóż, jaka jest długość jej imienia po raz drugi kod wykonuje? PUBLICZNOŚCI: Six. Głośnik 1: W porządku. To jeszcze sześć. Dobrze? Nazwa Zarla nie ma zmianie, nawet jeśli szukam zaledwie część liter w jej imieniu. A więc fakt, że skutecznie jestem z tym pytaniem, co jest długość Zamyla, jaka jest długość z Zamyla, jaka jest długość Zamyla, sześć oddzielnych razy, lub siedem nawet, to tylko głupia, bo to jest niezmienne, że odpowiedź. I tak, co mogłem w rzeczywistości zrobić, to this-- w ciąg jednego Mam tu nieznacznie lepszą wersję. There-- whoops-- ciąg dwóch mam marginalnie lepsza wersja, w którym Robię this--, a nie tylko inicjowanie i na 0, ja też przecinkami Oświadczam, drugą zmienną n-- nie muszę ponownie powiedzieć int. I nie powinien w rzeczywistości. Ale mówię n. A następnie zainicjować n do strlen n, tak że teraz Ile razy strlen zostanie wykonany w całości? Tylko raz. A więc to, co mamy na myśli, wcześniej o lepszej konstrukcji. Właściwie tylko twój kod jest poprawny, wraca i przemyślenia, używam tak mało pamięci lub w kilka sekund lub milisekund czasu komputera jak możliwe do realizacji jakiś problem? I zamierzam do przewijania i tylko wspomnieć że jest to wzmianka null w tej wersji, ale wrócimy do tego niebawem. Bo teraz, rzućmy okiem co, gdzie to będzie nas prowadzić. Tak jeden, okazuje się, że teraz, że mamy możliwość spojrzeć na poszczególnych znaków, możemy wykorzystać coś od tygodnia 0, który był bardzo tajemniczych i rodzaj nieciekawe w tym czasie. Ale teraz, a zwłaszcza, gdy dostać się do kryptografii w tygodniu, to będzie bardzo silne. Okazuje się, że niektóre int i pace danych types-- oraz znaki i napisy i inne things-- niektóre można łatwo przekształcić w inną. Na przykład, gdy rozmawialiśmy o ASCII jakiś czas ago-- tutaj litery kapitałowych, do M, kropka, kropka, dot-- powiedzieliśmy, że nie jest to odwzorowanie od tych liter i cyfr. I w rzeczywistości odnosi dla małych liter, jak również. Mała litera a jest 97, a jest 65 kapitału. I nie jest to liczba w kodzie ASCII, która jest po prostu to odwzorowanie System dla wszystkich tych innych liter. Więc co to oznacza? Cóż, mam zamiar iść do przodu i otwarta się prawdziwa szybko coś, co nazywa ASCII 0, z których większość to komentarze. I znowu w Internecie zawsze można Spojrzenie przez komentarzach. I spójrz, co to zrobi. Więc to musi funkcji main. Mam zakodowane numery tylko dla teraz, bo wiem, co robię. Wiem, co chcę zobaczyć tutaj. A ja zainicjowany I do 65. I liczę się do 26 liter razem. I co ja mam wydrukować jedną linię w czasie czy można interpretować wyróżnionego linię? Co zostanie wydrukowany? Tak. PUBLICZNOŚCI: Czy zamierzacie aby wydrukować list, odpowiada na mapę Wartość list i wartość całkowita? Głośnik 1: Dokładnie. Mam zamiar wydrukować list odpowiadającej wartości całkowitej, i vice versa, co następuje. No to, ktoś powiedział wcześniej, jest tylko zastępczym dla char. To nadal jest. To, oczywiście, jest symbolem zastępczym W przypadku nie int-- nowa linia. A teraz zauważyć, że moją pierwszą wartość Jestem podłączając do tego zastępczego jest nie tylko ja mówię, w nawiasach, char I, których nawiasach char jest mówi kompilatorowi, traktowanie I nie tak jak to jest, co jest liczbą. Traktować jako rzeczywisty charakter. Podczas gdy druga wartość ja podłączając in-- powinny ja-- być tylko liczbą. Więc jeśli mogę skompilować ten program-- więc to zrobić ASCII 0, Kropka ukośnik ASCII 0-- ja po prostu to mało poręczne wykres, który mi pokazuje wszystkie możliwe mapowania bez konieczności myśleć przez lub zrozumieć to na własną rękę. A ja również drukowanie, zwróć uwagę na małe litery, bo kilka linijek później także wydrukować to odwzorowanie a także, co jest po prostu powiedzieć, że po zrozumieniu Co się dzieje pod spodem kaptur, można automatycznie przeliczy tę iz powrotem. I faktycznie, jeśli ktoś z was kiedykolwiek to zrobił w szkole lub słyszał o kimś mitycznie biorąc pod uwagę i przekazania go do jego lub jej koleżanka z klasy, ale jajecznica Litery by jak staje B, i B staje się C, lub coś bardziej skomplikowane, dobrze, jak by go o wdrażania, że ​​jako dziecko? Cóż, po prostu rodzaj wiedzieć A staje B, B staje się C, ale matematycznie, Co to było dziecko robi? Co ty dodając do każdej litery? Skutecznie, 1. Więc po zmianie A do B, to trochę jak zmienia 65 do 66, które matematycznie oznacza po prostu dodać 1. I tak, jeśli były do ​​wdrożenia że niewiele technika zwodnicze dla nauczyciela w kodzie, może zrobić dokładnie, że tylko przez dodanie jednej litery razem. Więc zanim długo, jesteśmy zobaczymy, jak Można to wykorzystać do rzeczywistości szczerze zakodowania i odkodowania informacje. Tymczasem wiemy, że zaczęliśmy wprowadzić kilka innych bibliotek here-- o jakieś jeden dzisiaj. I bardzo pomocna strona mam nadzieję, że znajdziesz nazywa reference.cs50.net, co kadra nauczycielska ułożyła, tak, że jeśli chcesz wyszukać utwory jak strlen, można zacząć pisać nazwą funkcji, kliknij strlen tam, a następnie mniej wygodne wyjaśnienie będzie się pojawiać. Albo jeśli chcesz urzędnika Wyjaśnienie oparte na systemie Linux, można kliknąć bardziej wygodne w prawym górnym rogu, a to zaprezentuje tę samą informację, ale w bardziej skomplikowanych warunkach. To jest użytecznym źródłem do rzeczywiście wie, co wszystko robi. Następnym razem będziemy spójrz na Ovaltine i więcej, i przedstawić się w świat kryptografii. Wcześniej, zobaczymy później w tym tygodniu. A teraz, Colton Ogden. Do zobaczenia w środę. [MUZYKI] [MUZYKI] Głośnik 1: Co [BLEEP] robisz? Głośnik 1: jem mój deser? Jak to jeść? Z rąk? [MUZYKI]