[Powered by Google Translate] DAVID J. Malan: Dobrze, to jest CS50 i to jest koniec tygodnia 1, tak że karty są badania i całkowita liczba koledzy, że masz w tym roku jest 745. I jesteśmy tak zadowoleni, że tak wielu z was w trakcie w tym semestrze, ale nawet ten kurs jest tak duża, sobie sprawę, że jest to takie rzeczy jak obiady piątek, podobnie jak godziny pracy, 15-person sekcje, i tak dalej, że naprawdę ma na celu stworzenie to bardziej intymne środowiska. Dlatego, mimo że możemy zebrać się raz lub dwa razy w tygodniu, tu w Sanders, wiem, że wiele z Twojego doświadczenia w tym kursie będzie w dużym stopniu być praktyczne na wraz z kolegami i kadra nauczycielska. Więc zaczynamy, Fall 2012. Więc przypomnieć, że ostatnim razem skończyło się na nuty nieścisłości, rozmowy o reprezentacji liczb. I spojrzał na jeden z błędów, które miały miejsce w prawdziwy świat, gdy doszło do nieporozumienia jak komputery działają. Cóż, dzisiaj będziemy ponownie jedna z tych pomysłów, jak także kontynuować naszą dyskusję na CS50 klienta i C, i co to znaczy naprawdę do programu. Ale po pierwsze, tylko kilka ogłoszeń wicher. Sekcje rozpocząć tę niedzielę, a pierwszy tydzień jest zawsze trochę szybkiego rozruchu, ponieważ właśnie dostaliśmy w formularze sekcja. Robimy to samo, teraz, ze współbraćmi nauczania, teraz że znają swoje harmonogramy, więc staramy się, by W sobotę rano, aby się z Tobą z sekcji przyznawanie i TF. Uświadom sobie, że zaczną następny dzień, niedziela lub poniedziałek lub wtorek. I wtedy pomieścić rozdział Zmiany w miarę ich powstawania w najbliższych dniach. Godziny pracy, w międzyczasie, to, znowu, dzisiaj, 8 PM do 11, w Annenberg, jak i jutro. Mimo, że zestawy są na ogół z powodu problemów w czwartki w południe, sprawę masz do pięciu późne dni wydać, stąd dostępność godzinach pracy w czwartki, jeśli Ci gotówki w jednym z tych późnych dni i tym samym przedstawić coś w piątek. Pozwolę sobie zasugerować, że Scratch jest wśród więcej zabawy, wśród więcej niski klucz zestawy problem. I chciałbym się trzymać tych zaległych dni, strategicznie, tylko na później w semestrze, kiedy życie zaczyna się w sposób z midterms i innych zajęciach. Set Problem 1, w międzyczasie, będzie pisał na Kursu w piątek strona internetowa, jak będzie w trakcie spaceru poprzez wideo, który zostanie nakręcony w 14:30 w piątek , a następnie umieszczone w Internecie przez następny dzień. Więc skończyło się w poniedziałek. Chcę - faktycznie, zauważyć tutaj. Ponieważ ćwiczenia - bo Sanders nie dokładnie pożyczają się do swobodnej Q & A iz powrotem strasznie dobrze, jesteśmy zamiar spróbować czegoś nowego w tym roku, w którym jeśli nie jesteś wygodne podniesienie ręki lub po prostu raczej nie podniesie rękę w pokoju jak ten, będziemy mieć kilku kolegów nauczania i CAS załogi cs50.net/discuss podczas wykładu. Więc jeśli masz pytanie, ponieważ byłem kompletnie wiadomo o czymś lub jesteś ciekaw niektórych temat, spróbuj umieszczenie go tam. Oznaczyć go etykietą Wykład, a my dołożymy wszelkich starań, dziś i w przyszłym tygodniu - we'll spróbuj tego - do dziedziny, w formie elektronicznej, w Internecie, lub, jeśli jest to jak powinniśmy naprawdę nim zająć en masse, jeden z kolegów dydaktycznych lub CA będzie podnieść rękę i poprosić anonimowo w Twoim imieniu. Będziemy więc dać to spróbować i zobaczyć, jak to działa. Ale, za pomocą wszelkich środków, w dalszym ciągu podnosić ręce, jak chcesz. Tak, że ostatnio stwierdzono, że 10% lub jedna dziesiąta nie jest w Fakt, 0,1, tak jak uczono wiele lat temu. Jest to w rzeczywistości wartość jak ten. Ale to nie jest całkowicie prawdziwe, prawda? Musimy tylko to ograniczenie w komputerach przy czym, jeśli tylko mają ograniczoną ilość pamięci, pamięci RAM lub więcej specjalnie bity, dobrze, że jest tylko skończona liczba rzeczy można reprezentować. Na przykład, jeśli mamy liczbę zero, i chcemy reprezentować w formacie binarnym, używając ośmiu bitów, gdzie bit, ponownie jest zero lub jeden, to może reprezentowania go jako 00000000. I to jest trochę niepotrzebnie verbose. Podobnie jak w systemie dziesiętnym w świecie rzeczywistym, generalnie, jeśli chcesz napisać numer 123, ale ludzie prawdopodobnie nie pisać 00000123 chociaż funkcjonalnie, to jest dokładnie ten sam numer. Po prostu upuść wiodących zer, że tak powiem. W formacie binarnym, możemy zrobić to samo. Binary i zero, zero i binarne jest tylko zero. Wystarczy tylko jeden bit. Ale znowu, najczęściej miary w świecie informatyki jest bajtów, osiem bitów. Tylko dlatego, że jeden bit, całkiem bezużyteczny. Osiem bitów, nie strasznie przydatne, ale przynajmniej jest to bardziej przydatne niż jednego środka jednostki. Więc z ośmiu bitów, my zazwyczaj reprezentują binarny. Mamy tu więc numery zero, jeden, dwa, a potem, jak Nate zrobił w naszym wideo w ubiegłą środę, możemy kontynuować liczenie do siedmiu, do ośmiu. A potem, jeśli używamy coraz więcej bitów, mamy może liczyć do nieskończoności. Ale jeśli masz tylko skończoną liczbę tych bitów, jak ma to w przypadku systemu komputerowego, a nawet rakiet system, dobrze, rzeczywiście masz tylko skończoną ilość precyzją. Więc jeśli chcesz do reprezentowania liczby jak 0,1, dobrze, Komputer ma wybierać. I jeśli to ma tylko skończoną liczbę cyfr, co możliwe reprezentują, może zbliżyć się do 0,1 dla Ciebie, ale nie może musi dać dokładnie wartość, którą chcesz. A to tylko jedno z wyzwań, komputerów, pod maską, na szczęście. Jak iść dalej w semestrze, to niższy poziom szczegóły stają się znacznie mniej ciekawe, ale na pewno Wniosek z tych pomysłów może mieć jakiś bardzo realny świat konsekwencje. Jednym z nich jest nieco zabawne. Jak wielu z was nie widziałem niesamowite Office Space film? Jeśli nie masz, to twoja nieoficjalna zadanie domowe na tydzień. Ale w przestrzeni biurowej, stypendyści w tym filmie się Zaletą właśnie tej idei, ale one rzeczywiście ukradł to z innego filmu, który może mieć widać, nawet rok wcześniej. Więc pozwól mi dać ci kilka sekund na tej przyczepy z ten niesamowity film, a to jest bardzo naukowo istotne. [GRA FILM] Właściwie jestem promowane. Mogę zaprogramować wirusa, który będzie zgrać, że umieścić off wielki czas. Cóż, jak to działa? Za każdym razem, tam gdzie transakcje bankowe odsetki komputerowa nie tysiące dnia komputer kończy z tych frakcji procent. Ale ja nie zamierzam robić niczego nielegalnego. Nielegalne? Samir, to jest Ameryka. Musisz Przysięgam na Boga. Jeśli nikt nie wie o tym, ale my, wszystko w porządku? Brak członków rodziny, nie dziewczyny, nikt. [Niesłyszalne]. Nie martw się, stary, nie powiem nikomu albo. [FILM KOŃCZY] W porządku, więc może znaleźć ten film lepiej niż większość ludzie tutaj, ale w każdym razie, że były one wirusów stara się stworzyć - oraz w filmach, w każdej chwili, że nazywają coś wirusa, to nie jest na ogół rzeczywiście wirus. To jest po prostu program, który ktoś napisał coś zrobić. I w tym przypadku, faceci próbowali napisać program które skorzystały z ich firmy zwane InnoTech'S system komputerowy, w którym komputery też, nawet gdy chodzi o pieniądze, może nie koniecznie stanowią pieniądze dokładnie. Dlatego, mimo że możesz mieć 0,10 dolarów na koncie bankowym, 0,10, dobrze, komputer może rzeczywiście pomyśleć, że masz to wiele centów na koncie bankowym. A więc, co ci faceci aspiruje do zrobienia - i ukradł pomysł, jak się okazuje z Superman III, gdzie Richard Pryor nie to samo - były w istocie pisanie programów, które aspirują do podejmowania wszelkich spływu numery, wszystkie drobne, małe, drobne o frakcji grosze i ściąganie tych off tak, że ludzie po prostu Myśl, och, to tylko 0,10 dolarów tam, ale wszyscy ci, numery końcowe w końcu dodać. Tak wspaniały pomysł i obróciła komicznie w tym szczególności film. Ale w prawdziwym świecie, również nie są bardziej dotycząca Skutki tego rodzaju rzeczy. A jednym z powodów, aby zanurzyć się w dziedzinie komputerów Science, znów, jego zastosowanie nie nauki techniczne w spokoju, ale tylko do inne pola, jak również. Więc to jest mniej beztroska spojrzenie na to, co może pójść źle, ale jest to także całkiem otwarcie oczu, myślę, jeśli chodzi o zrozumienie, jak dokładnie wszechobecne technologie, takie jak komputery i programowania lub te dni, w postaci oprogramowania. Więc to następny klip jest tylko o sześć minut trwa którym skończyliśmy ostatni raz, ale pozwala nam spojrzeć trochę bardziej szczegółowo w jednym takim z tych kwestii. Pozwól mi przejść od razu do miejsca, gdzie skończyliśmy, co było tutaj. I mamy drugą część dwóch, do około sześciu minut tutaj. [MOVIE PLAY] Zarażony nowoczesnej technologii rakiet. W 1991 roku, wraz z rozpoczęciem pierwszej wojny w Zatoce, Patriot Pocisk doświadczył podobnego rodzaju Problem konwersji liczba. I w rezultacie, 20 osób, 20 amerykańskich żołnierzy, zginęło i około 100 rannych, kiedy Patriot, która miała w celu ochrony przed przychodzących kiełże, nie udało się wystrzelić pocisk. Kiedy Irak najechał Kuwejt i Ameryka rozpoczęła Desert Burza na początku 1991 roku, baterie rakiet Patriot były stosowane do ochrony Arabii Saudyjskiej i Izraela z Iraku Ataki rakietowe Scud. Patriot jest amerykańskim średniego zasięgu ziemia-powietrze system, produkowany przez firmę Raytheon. Rozmiar kolektora Patriot sama, to o około 20 metrów długości i waży około 2000 kilogramów. I to przenosi głowicę około - Myślę, że to z grubsza 150 funtów. A sam jest głowica ma wysokiej wybuchem fragmenty wokół niego. Obudowa głowicy jest przeznaczony do działania jak Buckshot. Pociski są wykonywane cztery na opakowaniu i są transportowane przez naczepy. Patriot systemu antyrakietowego sięga co najmniej do 20 lat. Został on zaprojektowany jako pocisk obrony powietrznej do zestrzelić samoloty nieprzyjaciela, w pierwszej wojnie w Zatoce Perskiej. Kiedy pojawił się, że wojna, armia chciała go używać, aby strzelać w dół, a nie samolotów kiełże. Siły irackie Air nie był tak wielkim problemem, ale Army martwił kiełże. I tak próbowali uaktualnić Patriot. Przechwytywanie rakiet wroga z prędkością Mach 5 dzieje jest wystarczająco trudne. Ale kiedy Patriot został przewieziony do eksploatacji, Army nie był świadomy, że zmiany irackiego udali Kiełże prawie niemożliwe, aby uderzyć. Co się stało jest kiełże, które były w najbliższych były niestabilne. Byli chwieje. Powodem tego był Irakijczyków, w celu uzyskania 600 km Spośród 300 km zasięgu rakiet, wziął waga z przedniej głowicy i wykonana głowica lżejsze. Więc teraz Patriot próbuje przyjść na Scud, a większość Czas, przeważająca większość czasu, to by tylko latać przez Scud. Gdy operatorzy systemów Patriot zrealizował Patriot brakowało jej celu, to zdetonował głowicę Patriot. Aby uniknąć ewentualnych wypadków, było dozwolone upaść na ziemię. To było to, co większość ludzi widziało, jak wielkie kule ognia na niebie, i niezrozumiany jak przechwytuje głowic bojowych Scud. Choć na nocnym niebie, wydawało się Patriots skutecznie zniszczone kiełże na Dhahran, nie może być pomyłka o jego wydajności. Tam, Patriot w system radarowy straciłem przychodzące Scud i nigdy nie rozpoczął z powodu to usterka oprogramowania. Było to Izraelczycy, którzy po raz pierwszy odkryte, że już system był, większa różnica czasu stała, powodu zegara wbudowany w systemu komputera. Jakieś dwa tygodnie przed tragedią w Dhahran, w Izraelczycy zgłoszone do Departamentu Obrony, że System tracił czasu. Po około ośmiu godzinach pracy, zauważyli, że system staje się zauważalnie mniej dokładne. Departament Obrony odpowiedział mówiąc wszystkie baterii Patriot nie pozostawić systemy od dłuższego czasu. Nigdy nie powiedział, co dawno było - 8 godzin, 10 godzin, 1.000 godzin. Nikt nie wiedział. Bateria Patriot stacjonował w koszarach w Dhahran i jego wadliwa wewnętrzny zegar był na ponad 100 godzin na noc z 25 lutego. Jest śledzona czas z dokładnością do około jednej dziesiątej sekundy. Teraz dziesiątą sekundy to ciekawa liczba, ponieważ nie można wyrazić w postaci binarnej, dokładnie, co oznacza, że nie może być wyrażone w każdym dokładnie nowoczesny komputer cyfrowy. Trudno w to uwierzyć. Ale to wykorzystać jako przykład. Weźmy numerem jeden trzeciej. Jedna trzecia nie może być wyrażona w postaci dziesiętnej, dokładnie. Jedna trzecia jest 0,333 dzieje dla nieskończoności. Nie ma sposobu, aby to zrobić z absolutną dokładnością dziesiętną. To jest dokładnie ten sam rodzaj problemu, który się w Patriot. System już biegł, gorszy błąd czasu stał. Po 100 godzinach pracy, błąd w czasie, było tylko około jednej trzeciej sekundy. Ale jeśli chodzi o kierowanie pocisk porusza się MACH 5, jego wyniku błędu śledzenia ponad 600 metrów. Byłoby to błąd krytyczny dla żołnierzy w Dhahran. Co się stało, jest uruchomienie Scud został wykryty przez wczesnego ostrzegania satelity i wiedzieli, że nadchodzi Scud w ich ogólny kierunek. Nie wiedzieli, gdzie był. To teraz do komponentu radarem Patriot System obrony Dhahran, aby zlokalizować i śledzić przychodzących pocisków wroga. Radar był bardzo inteligentny. Można by rzeczywiście śledzić pozycję Scud a następnie przewidzieć, gdzie prawdopodobnie będzie następnym razem radar wysłany impuls na zewnątrz. To był nazywany bramą zakres. Następnie, po Patriot decyduje tyle czasu minęło, aby przejść kopii i sprawdź obok lokalizacji Wykryty obiektu, to wraca. Więc kiedy wróciłem do niewłaściwym miejscu, to potem nie widzi sprzeciw, i postanawia, że ​​nie było przedmiotem. To było fałszywe wykrywanie i spada z toru. Przychodzące Scud zniknął z ekranu radaru. I sekundy później, uderzyła w koszarach. Scud zabił 28 i był ostatnim wystrzelił podczas pierwszej wojny w Zatoce. Niestety, zaktualizowane oprogramowanie przybył Dhahran następnego dnia. A wada oprogramowania została ustalona, ​​zamykając jeden rozdział w zmartwiony Historia rakiet Patriot. PATRIOT jest właściwie skrótem od "etapowego Tracking Array Przechwycić TARGET. " W porządku, więc o wiele bardziej smutny wynik nie do końca zrozumieć ten świat. I wynos, bardzo, z folii jest to, że rozwiązanie Nie było uruchomić system obrony przeciwrakietowej raz na jakiś czas. I znowu, jednym z celów niniejszego Oczywiście pewnością na skali niż skromniejszych tych zastosowań, jest naprawdę przejdż wszyscy oczy na dokładnie, jak go o Automaty zgrzewające robić to, co chcesz im zrobić i jak idziesz o to robić poprawnie, a po drodze robi oraz elegancko itd.. I tak dzisiaj, niech nurkowania w trochę więcej, ale tak, że my nie jedziemy zbyt szybko, szczególnie dla tych mniej wygodne, ale również tak, że możemy utrzymać zainteresowanie tych bardziej wygodne, po prostu szybko zacząć z odrobiną z podsumowaniem niektórych z tych pomysłów. I znów, zapytać dalej, zarówno osobiście lub online, jeśli masz pytania więc możemy trzymać wszystkich na tej samej stronie. Więc CS50 Appliance, szybki krok w tył, jest co, własnymi słowami? To jest OK, jeśli nie masz pojęcia, co te słowa mogą być jeszcze. [Niesłyszalne] Ok, więc uniwersalny interfejs - że wszyscy możemy się podzielić. Absolutnie. Tak więc możemy na przykład powiedzieć, aby przejść do niektórych stronie internetowej, pobrać oprogramowanie dla Mac OS. Pobierz oprogramowanie dla systemu Windows, należy skonfigurować w w ten sposób i to. Ale rzeczywistość jest uruchamiany w niezliczone techniczne wspierać kwestie. A także te dni, wiele z tego, co robi się po stronie serwera, w świecie komputerowym, zwłaszcza, gdy chodzi o tworzenie stron internetowych oraz aplikacji opartych na sieci web, w rzeczywistości jest często odbywa się na komputerach, Unix lub Linux, w przeciwieństwie do Maki i komputerów z systemem Windows. Tak więc wśród upsides, a następnie, za pomocą tego rzecz zwaną CS50 Appliance to my wszyscy mamy takie same środowisko. Więc wszyscy są na tej samej stronie nie ważne jaki sprzęt masz przyszedł do kampusie ale będzie para się dokładnie samo środowisko, które będziesz używać kierunku semestru końca, jak również do tworzenia stron WWW, jak również Przyszłość świata ich rzeczywistych aplikacjach. Tak konkretnie, CS50 Appliance to darmowy fragment oprogramowanie, które pozwala na uruchomienie innego systemu operacyjnego, Linux, w tym przypadku, na własnym komputerze, w oknie. Teraz można nie tylko pobrać do urządzenia. Potrzebny jest program, z którym do gry lub uruchomić urządzenie. Oraz że oprogramowanie jest powszechnie znany jako hypervisor. Hiperwizory przyjść w postaci produktów, takich jak VMware, Virtual Box, Parallels. Wszystkie rodzaje spółek sprawiają, że oprogramowanie, swobodny i handlowych, podobnie. Co można zobaczyć w zadaniu Set 1 są instrukcje dotyczące uzyskać darmowe oprogramowanie, z którym do uruchomić CS50 urządzenia. A kiedy to zrobisz, będziesz musiał, w oknie na komputerze Mac lub PC, środowisko graficzne, które wygląda zupełnie jak ten, w którym ma w menu Start-podobną rzecz w dolny lewy róg. To ma folder domowy, lub katalog główny, w lewym górnym rogu tam, kosza, i tak dalej. Będziemy więc odciąć niezbędne szczegóły, jak idziemy. Ale teraz zacznijmy do nurkowania w C. Więc C to język programowania, w duchu podobnym do Scratch, ale znacznie mniej graficzny, ale jak na ironię, znacznie bardziej wydajne, gdy pojawi się zrozumiały z nim. Więc w C piszemy programy poprzez pisanie kodu źródłowego, który jest to angielsko-jak składnia, podobne do skarpetek wykazanie, że ostatnim razem, który pozwala na wyrazić się dość precyzyjnie, jeśli arcanely, do komputera. Jakaż więc oprogramowaniu produktu czy rzeczywiście potrzebujesz pisanie programów w językach takich jak C, w oparciu o rozmowa w poniedziałek? [Niesłyszalne] OK, wystarczy edytor tekstu. Nie potrzeba żadnego specjalnego oprogramowania per se do pisania programów. Trzeba tylko edytora tekstu jak Notatnik w systemie Windows, TextEdit na Mac, lub coś, co nazywa gedit, w świecie Linux, który będziemy używać tutaj. I to jest to, do pisania programów. Ale pisanie to tylko połowa równania. Następnie należy uruchomić je. Ale w celu uruchamiania programów - nie można uruchomić kod źródłowy. Możesz zamiast robić to, co do niego w pierwszej kolejności? Tak. DAVID J. Malan: Musisz skompilować. A ktoś inny, kompilacji kodu źródłowego oznacza - [Niesłyszalne] DAVID J. Malan: Dokładnie. Przełożenie go do zer i jedynek. Ponieważ każdy z nas, w tych dniach, mają komputery, które mają procesory, prawie wszystkie z nich są przez firmę Intel i Intel Inside, oznacza, że ​​jest to wewnątrz mózgiem Komputer, znany jako CPU. A jedną z rzeczy, że mózg jest, to wie jak zrozumieć wzorce zer i jedynek. Wie, co wzorzec bitów reprezentuje dodawanie, co wzór stanowi odejmowania, co wzór bity reprezentują drukowanie oraz tworzenie słyszalny dźwięk. Tak w skrócie, CPU, w połączeniu z systemem operacyjnym, który jest oprogramowaniem, które działa w oparciu o procesor, że tak powiem. Razem, te dwa kawałki wiem jak uruchomić programy, które my, ludzie piszą. Więc jeśli mam iść do CS50 Appliance tu muszę otworzyć do edytora tekstu i można uzyskać dostęp do tej w kilka sposobów. Można albo przejść do menu, programowanie, i wtedy mogę wybrać - nope, nie to menu. Mogę iść do Akcesoria / gedit tutaj, aby otworzyć mój mały edytor tekstu. Czy po prostu mogę kliknąć tę ikonkę na dole lewym rogu. A teraz mam tego środowiska tutaj. Jest całkiem przypomina prosty edytor tekstu, tylko z jedna lub dwie różnice. W górnej, gdy kursor znajduje się miga, to jest, gdy Mogę zacząć pisać mojego kodu. W dole jest ta rzecz zwana okno terminala. I jakie rzeczy można zrobić w tym tak zwane okno terminalu? [Niesłyszalne] Dobrze, więc będę wykonywać polecenia. A niektóre z poleceń Wpadliśmy w poniedziałek były trochę zagadkowe na początku, ale na liście ls, cd do katalogu, zmiana, rm, dla usunięcia. Więc jest to coś w rodzaju starej szkoły sposób poruszania się komputer, tylko za pomocą klawiatury i poleceń tekstowych, i nie, na ogół, za pomocą myszy. Ale zobaczymy niebawem, faktycznie daje nam trochę więcej mocy i trochę bardziej precyzyjny, z którymi do wyrazić siebie. A potem tu po lewej stronie, po prostu żeby zobaczyć, jak uruchomić oprogramowanie do pisania, trochę podsumowanie Program, który napisaliśmy w lewym górnym rogu. Ale widzimy, że jeszcze przed długi. Więc zróbmy coś dość proste tutaj. Pozwól mi najpierw pójść dalej i przejdź do Plik, Zapisz, i jestem po prostu zamiar kliknij jharvard tutaj, nad na lewej stronie, a jharvard jest, ponownie, nazwa katalogu domowym, my akta personalne, mnie, teraz jest John Harvard, jak wy wszyscy wkrótce będzie John Harvard w tym środowisku. On ma ten katalog główny, Moje dokumenty i tak dalej, że chcę się zapisać, teraz ten plik w. Więc mam zamiar nazwać hello.c. Potem pójdę naprzód i kliknij przycisk Zapisz, a teraz co mam tutaj jest karta nazywa hello.c, więc podobnie jak innego rodzaju edytora. Więc teraz pozwól mi iść dalej i zacząć pisać program. int main (void). A ja po prostu nie po raz ostatni, printf, na wydruku sformatowana ("Witaj, świecie!" ). Prawie ukończona. Ale mi brakuje kilku szczegółów. Czego brakuje tego programu, że naprawdę potrzebne do to faktycznie skompilować? Tak. [Niesłyszalne]? DAVID J. Malan: Tak, więc trzeba to standard Biblioteki I / O. Więc to musi iść nad głównym, więc jestem po prostu będzie zrobić trochę miejsca dla niej nie. A ja zamierzam zrobić # include. I zauważyć ostrych nawiasach tam. I jak na bok, gedit jest trochę przyjazny dla użytkownika, jeśli czasem trochę mylące, w tym, że stara się pomóc swoim oczy zauważyć, co się z czym linie. Tak więc fakt, że mój kursor znajduje się tuż obok tego kątowe wspornik, zauważyć, jak to podkreślanie innych kątowe Wspornik plus to jeden. A to tylko zwrócić moją uwagę na fakt, że mają symetrię. I symetria w programowaniu jest ogólnie dobrze. Podobnie, jeśli przenieść kursor na koniec, zauważyć, jak nawiasy klamrowe line up, aby pokazać, że tak, mam otwarty jeden i zamknięty jeden, że tak powiem. Wszystko w porządku, a ja może zrobić jedną rzecz. To nie jest to bezwzględnie konieczne, ale dobra praktyka, aby powiedzieć powrót 0. I 0 reklamacji co robi dla nas? Albo oznacza co? [Niesłyszalne] DAVID J. Malan: Ale nic nie jest źle. I szczerze mówiąc trudno jest wiele udać w zaprogramować to krótki. Więc jestem po prostu bardzo wyraźnie powiedzieć, że wszystko jest dobrze. Ja, człowiek, kiedy uruchomić ten program, będzie prawdopodobnie nigdy zobaczyć, że 0. Ogólnie rzecz biorąc, te numery, które są zwracane z głównym tylko podnieść swoje głowy do ludzi, gdy coś pójdzie źle. I trochę pop-up o błędzie systemowym, jeden, dwóch, trzech, lub niezależnie od ilości, że faktycznie wrócił. Więc cokolwiek innego w tym złego? [Niesłyszalne] DAVID J. Malan: Więc to nie jest tak dużo funkcjonalnych pomyłka ale estetycznych. Chyba powinienem umieścić w nowej linii tam koniec tego łańcucha, tak aby rzeczywiście przesunąć kursor do następna linia, a program po prostu wygląda trochę ładniej. Więc teraz pozwól mi iść do mojego okna terminala i powiększ widok I to coś tutaj, to się nazywa szybka. To tylko przypomnienie mi, kim jestem, jharvard @ urządzenia, gdzie Urządzenie jest nazwa komputera, jestem na. W nawiasach jest to tylda, symbol squiggle, które oznacza co? PUBLICZNOŚCI: katalog domowy. DAVID J. Malan: katalog domowy. Więc to po prostu zapis skrótem mówiąc jesteś w Twój osobisty folder, w którym wszystkie pliki iść domyślnie. Więc teraz, tutaj, mogę wpisać ls dla listy. I jedyną rzeczą, widzę tutaj w tej chwili jest hello.c. I dobrze, bo po prostu to napisał. Więc pozwól mi iść do przodu i rób hello. I zauważ, że nie piszę się hello.c. Zamiast tego, jestem tylko wpisując nazwę bazową pliku, hello. I zrób, jak widzieliśmy w poniedziałek, będzie po prostu wywnioskować, że chcę plik. c. Więc teraz mam wpisane, aby przywitać. Teraz widzę to dość długi komendy i będzie nadal widząc to ponownie i ponownie. Ale żeby było jasne, dzyń, słowo, że po prostu pojawił się, To rzeczywisty kompilator. Marka to tylko narzędzie kompilacji. To jest po prostu bardziej przyjazny dla użytkownika program, który zapisuje mi, w dłuższej perspektywie, z konieczności wpisywania się niewiarygodnie nudne długo polecenia takie jak ten. Więc można uruchomić Clang ręcznie. Można wpisać wszystko to ręcznie. Po prostu staje się bardzo uciążliwe. I tak się to tylko program, który upraszcza nasze życie i działa bardziej złożonych poleceń dla nas. Dobra, co teraz powinienem mieć plik w moim katalogu? Nie tylko hello.c, ale też hello. Więc jeśli chcę uruchomić hello, przypominam, że mówię dot ukośnika, gdzie środki dot przejść do bieżącego folderu, gdziekolwiek są, a następnie uruchomić program o nazwie hello, i rzeczywiście, teraz, Mam Hello World. Wszystko w porządku, wszelkie pytania dotyczące przepływu pracy lub składnia co właśnie zrobiłeś? W porządku, więc weźmy się w garść ponownie. Więc to była rozczarowująca, aby po prostu napisać program, który tylko nie mówi hello, world. Więc zmieniliśmy ją w poniedziałek, aby powiedzieć, hello, David. Jest to trochę bardziej osobista, ale tak ciężko kodowane pierwsza wersja. Tak więc nie wszystko, co atrakcyjne. Ale istnieje, w C, z pewnością oprócz funkcji drukowania, funkcje, które pozwalają uzyskać dane wejściowe użytkownika. I sposób, w jaki ta nie, drugi dzień, był następujący. Zanim faktycznie wydrukować coś, pierwszy raz dostałem coś z użytkownika. Więc pozwól mi to zrobić ponownie. String s, gdzie s jest tylko nazwa dowolna, tutaj, na string, równa GetString. Więc co getString? To oczywiście ma ciąg, na podstawie jego nazwy. Ale co to jest, bardziej technicznie? Jest to funkcja. Więc jest to funkcja, która nie pochodzi z C per se. CS50 personel to napisał. I tak z niego skorzystać, nie można po prostu dołączyć stdio.h, Musisz również zawierać co? Tak. Więc cs50.h, który jest tylko plik pisaliśmy kilka lat temu. Mamy zainstalowany na urządzeniu dla Ciebie obok wszystkie standardowe pliki. A więc w tych pierwszych kilku tygodni w klasie, użyjemy to właśnie w celu uproszczenia procesu robienia bardzo podstawowe rzeczy, jak się dane wejściowe użytkownika. Bo jak zobaczymy w ciągu kilku tygodni, coraz wejście użytkownika w język jak C jest rzeczywiście zaskakująco skomplikowane, szczególnie dlatego, że nie wiemy z góry, zwykle, jak wiele rzeczy użytkownik będzie wpisać w. A kiedy nie wiesz, ile danych się spodziewać, nie masz wiedzieć, ile pamięci przydzielić. A jeśli rzeczywiście mają nieprzyjazne użytkownikowi, który próbuje włamać się do twojego systemu, awarii komputera, dobrze, ogólnie pierwsza metoda ataku jest, tak jak ja na Poniedziałek, wpisz całą długą sekwencję przypadkowych znaków, naciśnij Enter i zobacz, co się psuje. Bo generalnie, jeśli przerwą programu, że aluzja błąd bezpieczeństwa, potencjalnie. To oczywiście aluzja do Ciebie, programista, po dokonaniu błędem, ale bardziej niebezpiecznie, można poznać związanych z bezpieczeństwem pomyłka, i ogólnie zobaczymy, że to w jaki sposób komputery są zagrożone do dziś, zarówno w świecie stron internetowych i programów na w linii poleceń, jak to. Dobrze. Więc string s równa getString. Więc teraz bardziej konkretnie, co to linia 6 zrobić tutaj? Więc funkcja po prawej ma ciąg, bierze jak wiele argumentów? Okay. Więc żaden. Trochę sanity sprawdzić. Argument, ponownie, jest tylko wejście do funkcji, do zmiany jego domyślne zachowanie w jakiś sposób. Ale w tym przypadku, nie chcę zmieniać Zachowanie getString. Chciałem tylko, aby uzyskać ciąg. Włożyłem więc nic w nawiasie, a następnie umieścić średnik demarking koniec linii kodu. Teraz znak równości nie oznacza równe, per se. Oznacza to przypisanie, czyli umieścić cokolwiek dostaje wyprowadzane na prawej wewnętrznej, co jest na lewo. Więc po lewej stronie, możemy powiedzieć, że mamy zadeklarowane ciąg nazywane s. A bardziej konkretnie, jakie przydzielono pamięć wewnątrz które umieścimy bity, które reprezentuje sekwencję znaków. Ale na dzień dzisiejszy, mamy przyznane lub zadeklarowanej ciąg. Dobrze. Więc teraz, kiedy już to zrobisz, chcę podłączyć w wartości nie jest, wartość Dawida. Tak to jest w porządku, dlaczego? Więc jest to tylko dosłownie zakodowane s. To powiedzieć "hello, s", co nie jest to, co chcę. Więc może to zrobić. Znak procent jest zastępczy, ale teraz muszę przechodzą do wydrukowania drugi argument. Przypomnijmy, że argumenty funkcji są oddzielone przecinki, więc następnym przecinek tutaj umieścić po tym literą s. W tym kontekście, a obecnie jest jest zmienna i printf, po otrzymaniu tych dwóch wejść - ciąg na lewo i nazwa zmiennej po prawej - będzie podłączenie tego ostatniego były dla nas, i po prostu wydrukować ładny piękny ciąg zawierający cokolwiek to jest, że mamy wpisane w. Warto więc spróbować. Zamiar iść dalej i pomniejszyć, z powrotem do okna terminala. Powiększyć na dole tutaj. Przepisz się przywitać. Clang wydaje się być powtórzona. Mam zamiar pisać. / Hello, Enter. Nic nie wydaje się mieć miejsce jeszcze, ale to na ten monit że mogę napisać coś jak Nate, Enter, a teraz mamy Cześć, Nate. I mogę to zrobić ponownie Roba, i tak dalej. Więc mam nadzieję, że teraz ten program zachowuje się jak zamierzam. Teraz nie, wszystko, przyjazny dla użytkownika. Nie mam pojęcia, co jest oczekiwane od mnie. Tak więc z pewnością możemy oczyścić to się trochę. Pozwól mi wrócić tutaj i zamiast nurkowania i pytanie użytkownika o ciąg, niech wyraźnie powiedzieć użytkownika, co ja spodziewałem. Więc printf ("Wpisz tekst:" ); Więc nie ma zmienne tutaj. Brak oznak procent. Wystarczy prosty angielski zdanie. Chciałbym teraz przejść do dołu tutaj i ponownie mój program. Ale nic się nie zmieniło. Dlaczego? Muszę przekompilować. Tak łatwo błędem zrobić. Ale trzeba nie tylko zapisać plik, ale skompilować program. A jeśli tak mogę ponownie uruchomić make hello, teraz Clang biegnie. Teraz mogę uruchomić. / Hello. I teraz widzę "Wpisz tekst:". Okay. Teraz jest to trochę bardziej przyjazny dla użytkownika. Nate, Enter, hello, Nate. Cóż, spróbujmy jeszcze raz i zacząć myśleć o przypadkach narożnych. Więc tak jak w Scratch, jesteś zachęcani lub są Zachęca w specyfikacji do rodzaju myśleć o tym, co może pójść źle, jeśli nie wszystko przewidzieć użytkownik może zrobić. Bugs, dlatego może nastąpić. Więc wprowadź ciąg - co sprawa corner tutaj? Co jest scenariusz, że ja, programista, może nie mieć Przewiduje? Tak. Okay. Więc co, jeśli napiszę w wielu jak to? Dobrze. Więc to nadal działa. Gramatically nie ma sensu. Ale przynajmniej program działa. Co jest kolejnym przypadkiem róg? Coś, czego nie spodziewał. Tak? Okay. Tak więc możemy zrobić coś jak wielu naprawdę duży. Więc zróbmy to tutaj. Pozwól oddalić na sekund, pozwól mi wyróżnić. Nie można skopiować i wkleić tutaj. Dobrze. Więc nie mogę skopiować i wkleić w oknie terminala, więc będziesz symulację. Pozwól, pomniejszyć, będzie zawijany. Nie zamierzam tego robić zbyt długo, ponieważ nie będzie rzeczywiście przełamać w tym programie. Ale to dało. Enter. Ale to się nie stało. Dobrze. Ale to jest prawdziwy przypadek rogu. I tylko dlatego, że zachowywał się poprawnie, tak aby mówić, ponieważ CS50 GetString funkcja jest rzeczywiście zaprojektowany pod maską, jak zobaczymy w ciągu kilku tygodni, aby automatycznie przydzielić więcej pamięci RAM i więcej, więcej i więcej pamięci z poziomu systemu operacyjnego, gdy uświadamia sobie, wow, masz naprawdę wpisane w coś całkiem długo. Teraz, to jest bit z białym kłamstwem. Jeśli faktycznie zatrzymał się na dłuższą chwilę i wpisane w coś jak 5 miliardów znaków na klawiaturze tutaj, czy naprawdę hit kopiuj-wklej sporo, mamy całkiem możliwe może spowodować, że program się zawieszał. Wystarczy trochę trudniej symulować, że z skończonego czas. Co jest kolejnym przypadkiem róg możemy spróbować? Tak? Tak. Więc dlaczego nie możemy odpowiedzieć nic? Więc rzeczywiście trzeba podjąć pewne działania, bo inaczej Program będzie siedzieć tam miga cały dzień. Ale jeśli po prostu wciskamy Enter - OK, teraz, nadal wygląda źle. Nie upaść, ale może jest teraz okazja do rozpoczęcie wdrażania bardziej rygorystyczny program że faktycznie sprawdza. A jeśli string, zdanie, słowo, że ja wpisane ma długość 0, dobrze, może powinienem krzyczeć na obsługi, albo powiedzieć mu, lub jej wprowadzić łańcuch ponownie, aby rzeczywiście dostać to, co wygląda jak właściwego zachowania, a nie Wystarczy wypełnić przeoczenie z mojej strony. Pytanie w plecy? Liczba dziesiętna. Więc możemy spróbować, że zbyt. 1,10000005. Wygląda na to, że będzie po prostu pracować naprawdę dobrze. I rzeczywiście ma. Nawet jeśli moglibyśmy wpisać ten numer tam, lub większa liczba wcześniej, uświadomić sobie, że kiedy piszesz użytkownika Wejście i używamy getString funkcji, nie ważne, czy to, co piszę wygląda jak liczby. Przypomnijmy, że zgodnie z ASCII, wszystko na klawiatura ma wartość liczbową, które mogą być mapowane do znak, char. Więc w tym przypadku, choć mógłbym wpisać cyfrę, komputer będzie myślał o tym, by tak rzec, jako ciąg znaków - coś, co wygląda jak liczba, ale jest faktycznie nie liczba. Ale to naprawdę doskonały Segue, bo teraz możemy faktycznie przejście do programów piśmie korzystania z innych typów danych. Tak poza tym za pomocą znaków, lub raczej, oprócz wykorzystania ciągi, sobie sprawę, że są inne typy danych, jak i C, w innych językach. Char, jak sama nazwa wskazuje, jest tylko jeden znak. Pływak jest wartość zmiennoprzecinkową, a to jest tylko wyobraźnia sposób powiedzenia liczbę rzeczywistą - coś, co ma dziesiętną punkt w nim z niektórych numerów do lewej i / lub prawej strony. Int jest liczbą całkowitą, która jest po prostu liczba jak 123. A teraz, co ciekawsze są rzeczy takie jak double. Co możemy powiedzieć dwukrotnie był ostatni raz? Jest 64, prawo. Tak więc o ile zazwyczaj float jest 32-bit - więc jest to na długo w pamięci, wykorzystuje 32 zer i jedynek do reprezentują wartości - double jest dosłownie dwa razy, co Oznacza to, że można albo reprezentowania większych liczb, lub można reprezentować bardziej dokładnych liczb. Więc można mieć więcej numerów po przecinku, ale jak kolega powiedział w filmie, nawet coś prostego koncepcyjnie jak 1/3, nie może być reprezentowane właśnie komputer, ponieważ w końcu zabraknie bitów, oraz Dlatego można tylko zrobić .33333333 tak wiele razy, przy który punkt po prostu trzeba powiedzieć, że jestem z reprezentacji przestrzeń, muszę po prostu nazwać to dzień i reprezentuje ją trochę nieprecyzyjnie się podoba. I długo długo - głupia nazwa, ale to dlatego, że jest to typ danych zwany długo w C, który przypadkowo jest często 32 bity, tak jak int jest 32 bitów, ale długo długo zazwyczaj 64 bity. Więc to po prostu oznacza, że ​​można reprezentować większy numery niż ta. Dobrze. Więc jeśli naprawdę chcemy, aby rozpocząć reprezentujących rzeczy, my może wymagać bardziej zaawansowanych rodzajów i dlatego mamy ciąg. Więc w CS50 bibliotece, że plik o nazwie cs50.h, mamy faktycznie zadeklarowana typ danych, by tak rzec, zwany ciąg, ale ciąg nie istnieje. To znowu, jedna z tych warstw będziemy peel za tydzień lub dwa i wyrzucić, a właściwie patrzeć pod maską, co łańcuch faktycznie jest, i jak jest reprezentowane. Mamy również zamiar spojrzeć na wartości logiczne. Więc co było bool w kontekście podstaw? To jest prawdziwe lub fałszywe. Więc jest to tylko wartość, że to prawda czy fałsz, włączyć lub wyłączyć, 1 lub 0, jednak chcesz, aby świat. Tak więc, w C, dzięki CS50 biblioteki, które z kolei obejmuje inną bibliotekę pod maską mamy dostęp do typu danych, który jest zwany bool, który będzie dosłownie pozwalają przypisać wartości true lub false rzeczy w programie. Więc idź tu i napisać mały program, który robi coś udziałem numery zamiast. Więc pozwól mi wrócić do CS50 Appliance, pozwól mi iść do przodu i utworzyć nowy plik o nazwie - powiedzmy coś prostego, jak math.c. Dobrze. A teraz idź do góry mojego programu, jestem zrobi zwykle - # Include, tak, że można używać printf, int main (void) - wrócimy do, w końcu, co oznacza, int tu, co void oznacza tutaj, ale teraz, po prostu wiem, że trzeba zacząć podobnych programach. Teraz mam zamiar iść do przodu i powiedzieć coś mało inny - printf ("Daj mi numer:" ). Potem zamierzam zrobić int n = getInt, ponieważ okazuje getInt to kolejna funkcja w bibliotece CS50 oprócz getString. I teraz mam zamiar zrobić coś głupiego, jak "dzięki na% d ", na dziesiętną liczbą całkowitą, a następnie przecinek n, a następnie powrócić 0. Więc jeszcze raz, powrót 0 nie ma nic wspólnego z liczbą jestem pytania użytkownika dla. Oznacza po prostu, że na końcu wszystkich, prawdopodobnie, jest dobrze. Więc pozwól mi iść do mojego okna terminala tutaj. Pozwól mi make matematyki, wprowadzić. I coś jest nie tak. Producent math nie działa. Oto pierwszy z naszych błędach. Dlaczego? Trochę tajemnicze, ale - Tak. Więc cs50.h. Więc jeszcze raz, zwłaszcza na początku, będziesz pisać twój pierwszy Program PSET 1 w punktach, w godzinach pracy urzędu, a szczerze mówiąc, to będzie przytłaczające czasami, co to są rzeczywiście mówi. Ale zdajesz sobie sprawę, bardzo szybko zaczynają opadać na segmenty, zgodnie z którą ten oznacza, że ​​już skończył jeden z # zawiera na początku pliku. I Clang, kompilator, jest informowanie Cię o tym przez mówiąc, raczej fantazyjnie, niejawna deklaracja getInt funkcja jest nieprawidłowy. Dobrze. Więc co to oznacza? To po prostu oznacza, że ​​już w sposób dorozumiany uznane getInt Poczucie, że nie zostało wyraźnie zadeklarowane go. Aby jawnie zadeklarować int, musisz nauczyć Dzyń, że istnieje. I bardzo proste rozwiązanie tego jest go nauczyć w tym tej drugiej sprawy, cs50.h w początku pliku. Bo dosłownie, co nie jest # include mówi dzyń dość dużo, aby przejść znaleźć plik o nazwie cs50.h, kopiowanie, wklej go automatycznie do góry mój program dla mnie, a następnie przekonwertować kod źródłowy do zer i jedynek. Ale to byłoby oczywiście bardzo uciążliwe, jeśli my, ludzie mieli iść kopiowanie i wklejanie tych dużych plików przez cały czas, tak # include po prostu robi wszystko automatycznie, bez zaciemniania mój kod z cudzej biblioteki. A biblioteka jest tylko kolejny plik zawierający funkcje i inne rzeczy, że ktoś napisał, że jesteśmy wykorzystanie dla naszego własnego dobra. Dobrze. Spróbujmy jeszcze raz. Marka matematyki. Enter. Good. Tak, że wydaje się, że działa. Więc pozwól mi teraz uruchomić matematyki,. / Math. Wpisz daje mi numer, 123. Dzięki za 123. Teraz spróbujmy innej sprawie narożnika. Ciąg jest dość obfite, ponieważ Ciąg może być cokolwiek. Może wyglądać jak numery, wygląda znaków, wyglądać słów. Ale int jest int. Więc teraz, jeśli mam trudności łatwy, i to mówiąc: "Daj mi liczba, "co jeśli próbuję coś jak 0,1? Dobrze, że to liczba, i to zgodne z gramatyka użyłem tutaj, ale pod maską, jestem z Kurs pomocą getInt funkcji. Zobaczmy więc, co się dzieje. Wpisz, spróbuj ponownie. Dobrze. Pozwól mi być trudne i po prostu wciskamy Enter. Enter, Enter. Więc teraz wydaje się, że getInt jest trochę bardziej potężniejsze niż getString. My, pracownicy, realizowane w taki sposób, że jeśli zauważysz nie dały nam int - i int jest liczba dziesiętna zawierające zer, jedynek, dwójki, trójki, czwórki, piątki, szóstki, siódemki, ósemki lub dziewiątek. I to jest to. Brak miejsc po przecinku, nie ma żadnych znaków, bez znaków interpunkcyjnych. Wydaje się, że musimy współpracować. Więc pozwól mi spróbować cztery, pięć, sześć, a mnie przez. Tak naprawdę, jest anal tutaj, powinienem chyba powiedzieć: "Daj mi całkowita "w celu przekazania użytkownikowi dokładnie to, co zamierzasz. Teraz pomyślmy o tym pod maską. Nie będziemy patrzeć na to, jak realizowany jest cs50.h dziś że biblioteka. Ale jeśli to powtarza ponownie, powtórzenia, powtórzenia, co programowanie konstruować ja przypuszczalnie używając pod maską do wdrożenia tego? Więc po prostu pętla, prawda? Jednym z najprostszych pomysłów, które widzieliśmy na Scratch. Zawsze budowy, Repeat konstruować. Przypuszczalnie w tym programie, pod maską, nawet choć jest napisany w C i nie drapać, to robi coś, co nazywa odpowiednik zawsze, jeśli użytkownik nie ma wpisaniu liczby całkowitej, np. powtórzenia, powtórzenia, powtórzenia, powtórzenia, tak wreszcie, kiedy dostaniesz integer, następnie wyrwać się z tej pętli. Więc jakie inne funkcje mogą używamy tutaj w bibliotece CS50 jest? Cóż, niby oczywistych te, przynajmniej w oparciu o typy danych, że teraz wiemy, istnieją. Wdrożyliśmy getString, getInt, ale w całym Pierwsze tygodnie po terminie, można również użyć GetFloat i GetDouble i GetLongLong w celu uzyskania dokładnie typy danych, które chcesz. Ponieważ klucz szczegółowo o to, że w przeciwieństwie do niektórych języków, jak Python i Ruby, w którym nie muszą koniecznie zadeklarować typ danych zmiennej - nie musisz powiedzieć komputerowi, jakie rzeczy masz zamiar umieścić w zmiennej - w C, trzeba być zawsze bardzo precyzyjne. Więc jeśli chcesz zmienną o nazwie n, kawałka składowania że w tym przypadku okazuje się być 32 bity umownie można powiedzieć komputerowi, że te bity są będzie przechowywać numer - nie charakter, a nie ciąg znaków, a nie float. I to rozwiązuje problem efektywnie pobiegł do ostatniego tygodnia. Jeśli używamy zer i jedynek numery do reprezentowania nie tylko numery, ale jak i B i Cs, jak na świecie jest komputer będzie wiedział, że ten wzorzec bitów faktycznie oznacza liczbę 65, w przeciwieństwie do reprezentowania List, który przypadkowo, zgodnie z ASCII, przypominam, była równoważna 65? Więc te typy danych zapewniają kontekst do komputera, więc że nie wie, czy te bity powinny być interpretowane jako int lub jako ciąg znaków. Wszelkie pytania, a następnie, w tej sprawie? Tak? DAVID J. Malan: Dobre pytanie. Jeśli weźmiemy z stdio.h, zapisujemy plik - pozwól mi iść w dół do okna terminala i uruchom make matematyki, Zoom i enter - teraz mam inny problem, bo jestem w sposób dorozumiany oświadczając, jaką funkcję teraz? Printf. Więc teraz stworzyłem nowy problem, którego rozwiązanie jest zasadniczo takie same. Muszę umieścić z powrotem. PUBLICZNOŚCI: [niesłyszalne] DAVID J. Malan: Oh. Więc jeśli mogę wyjąć - Dobrze, tak. Więc jeśli usunąć publikację na standard I / O do biblioteki tutaj, a następnie mówisz, jeśli pozbyć printf, dostać pozbyć się printf? Tak. To powinno działać, bo jestem już nie korzysta w ogóle - ups. Czy mogę po prostu położyć? Oh, w porządku. To nie będzie działać z powodu nowej błędu właśnie wprowadzony. A ta jest trochę bardziej oczywiste. W czym problem? Niewykorzystane zmienne n. Więc ten błąd jest wynikiem naszych skonfigurowaniu Urządzenie jest szczególnie pedantyczny naprawdę krzyczeć na Państwo dla każdego możliwego błędu, nawet jeśli jest to rodzaj non-fatalny błąd to tak - jest to naprawdę taki wielki sobie, że przydzielone int, umieścić numer w nim, a następnie tylko nie zrobił nic z tym wspólnego? Tak funkcjonalnie, nie. To nie będzie przerwać program. To jest po prostu głupie, prawda? Nie ma wartość po zapytał dla tego numeru, przechowywane to w zmiennej, jeśli nigdy nie będziemy nic robić z nim, czy wydrukować lub zapisać. Tak więc, w tym przypadku, jest szczęk przyznawania się i to powiedzenie nieużywanych zmiennych n. Więc możemy to naprawić, jeśli naprawdę chcemy. Ale znowu, to nie jest dobre programowania jest teraz. Tak właśnie może to zrobić - przejdź na dół, pozwól mi wyczyścić ekran, aby matematykę. , Który działa. Teraz mogę uruchomić mój program matematyczny, ma wejście - dobrze, że był zły. Ma wejście, i to wszystko oznacza, że ​​w tym przypadku. Więc rzeczywiście, spróbujmy jeszcze jedną sprawę, że narożny nie myśleć wcześniej. W tym przypadku - tu wróćmy do tego, który znajduje się w trochę bardziej przyjazny dla użytkownika. Pozwól mi wrócić tutaj i uruchom make matematyki ponownie. Ups, co zrobiłem źle? Muszę się cofnąć dalej. Okay. Teraz jesteśmy z powrotem w oryginalnym stanie, w którym wszystkie to mam nadzieję, że dobrze. A teraz, jeśli uruchomię matematyki, 123 wydaje się działać. Ale to nie jest naprawdę skuteczny dowód, tylko powiedzieć dobrze, że działa. 789, który działa. Czas się poddać. Ponieważ nie ma innych spraw narożne tutaj. Ciąg naprawdę nie dają nam dużo kłopotów, wpisując dużo znaków. Ale co, jeśli napiszę w tym? Trafienie numer 1 dużo, dużo tutaj - Wszystko w porządku, robi się trochę nudne, więc będę zatrzymać się tu, a ja zamierzam naciśnij Enter. Co do cholery się stało? Więc to może faktycznie być wyjaśnione. Więc zajęło go jako plik binarny? Dobra myśl, ale nie, to nie fakt, że zajęło jej to jako binarne, bo rzeczywiście, to był po prostu rodzaj przypadek. Możemy to zrobić ponownie. Więc nie ma 2 w systemie binarnym, to prawdopodobnie wystarczy tak. Enter. Więc to nie był problem. Co jeszcze? Dokładnie. Więc wracam do tego, co faktycznie jest int. To jest 32 bitów, które łącznie są interpretowane jako liczby. Jeżeli, w tym 32 bitów, co oznacza, że ​​każdy z tych bitów mogą być 0 lub 1, 0 lub 1.. To znaczy, że nie ma dwie możliwości do tego bitu, dwie możliwości to dwie możliwości takiego bit - więc to jest 2 razy 2 razy - tak, że znajduje się 2 do 32 mocy jest całkowita liczba permutacje zer i jedynek, jeśli masz 32 zastępcze, zer i jedynek, przed tobą. Więc jeśli mam 2 do 32, matematycznie, to co? Więc to jest bardzo dużo. To 4 mld euro, lub dać. I 4 miliardy nie wydaje się być to, co zostało wydrukowane tutaj. W rzeczywistości wygląda to bliżej do 2 miliardów. Ale to nie przypadek. Fakt, że komputer został błędnie moją ogromną liczbę, mój ogromny ciąg zer i wtedy mój ogromny sekwencja dwójkami, za około 2 mld zł, jest wyjaśnione w jaki sposób? Jest limit int. Jest z pewnością maksymalna wartość, które można reprezentować. Ale to zazwyczaj 4 miliardów, prawda? Jeżeli 2 do 32 wynosi około 4 mld euro, to wydaje się To największa liczba. Więc nie pozostała, ale to dobry pomysł. Liczby ujemne. Więc jeśli masz 4 miliardów możliwych rzeczy, które możesz przedstawicielami tych różnych permutacji 32 0 i 1s, dobrze, to ma się rozumieć, że my, ludzie mogą chcieć stanowią nie tylko liczby całkowite dodatnie ale negatywne całkowitymi. I rzeczywiście, to założenie, że C czyni. Więc z 32 bitów, z grubsza można reprezentować negatywne 2 mld aż do pozytywnego 2 miliardy. I tak w tym przypadku, co tak naprawdę jest po prostu zobaczyć fringe zdolności naszej całkowitej, i mamy, więc mówić, przepełniła liczbę całkowitą. Staraliśmy się dopchać więcej bitów do niego niż rzeczywiście zmieści. Tak więc końcowy wynik jest nam zasadniczo mają wszystkie 1 bitów. Mamy odwrócenie wszystkich naszych bitów na, próbowaliśmy do reprezentowania najwięcej to możliwe, ale nie jest to jasno prawie wystarczająco duży, aby reprezentować dwie rzeczy Właśnie wpisane w. Tak? PUBLICZNOŚCI: [niesłyszalne] DAVID J. Malan: Dobre pytanie. Dlaczego nie możemy po prostu oświadcza, że ​​negatywne podpisać tylko jako postaci? Więc absolutnie mógł, i możemy następnie zapisać dodatkowy bit. Ale ty nadal będziemy mieć do reprezentowania kreskę, a że będzie kosztować przynajmniej coś, prawdopodobnie nieco. Więc tak, możemy mieć 32 bitów używanych do naszego numeru, ale teraz potrzebujemy jeszcze trochę używany naszej kreską symbol, znak minus. Więc teraz mamy 33 bitowe wartości, które możemy zrobić, ale to jest po prostu nie sposób się to robi. Zrobiliśmy wyrok roku połączenia temu, 32 bity to rodzaj jednostka miary tutaj. Więc idziemy do korzystania z jednego z tych bitów skutecznie reprezentowania negatywności, a 31 bitów do reprezentowania numer. Inne pytania? Dobrze. To bardzo dużo. Dlaczego nie pójść dalej i wziąć nasze pięć minut przerwy tutaj? Dobrze. Więc jeszcze raz, aby nie przekreślać matematyczne aplikacje programowania, po prostu wyrwać się z tej jeden przykład zanim przejdziemy do innych konstrukcji, tylko dlatego, że prezentować będzie kilka wspólnych punktów potykając się na niektórych podstawy, jeśli chodzi o programy do pisania. W tym przypadku, robi arytmetycznych, które mają pewne ciekawy związek składni. Więc jest to tylko wzór, z którym możemy przekonwertować temperatury z Fahrenheita na Celsjusza. Jeśli nie pamiętacie, to jest tylko wzór. Jeśli więc podłączyć Fahrenheit wartości 32 stopni, co jest zamrażanie, że będzie to 32 minus 32 jest 0, i rzeczywiście, 0 w stopniach Celsjusza jest lodowata. Tak szybkie sanity sprawdzić tam - to zna formuły. Pozwól mi przejść do urządzenia, ale i zacząć pisząc program zwany, jak, f2c; "Fahrenheita na Celsius dot c ". I się na górze tutaj, mam zamiar zacząć od # include stdio.h, a ja zamierzam zrobić int main (void), a ponownie wrócimy w przyszłości, co oznacza, int tam i co oznacza, że ​​nieważne. A teraz pozwól mi iść do przodu i wdrożenie programu, który zasadniczo robi to nawrócenie dla nas. Więc printf, powiedzmy, temperaturę w stopniach Fahrenheita. I pozwól mi iść do przodu i uzyskać wartość od użytkownika. Jakie wartości należy uzyskać od użytkownika, jeśli chcę im dać mi temperaturę w stopniach Fahrenheita? Tak? Co proponujesz? Tak. Więc pływak czuje się całkiem rozsądne. Mamy znów zaledwie kilka opcji, które widzieliśmy do tej pory. Mamy takie rzeczy jak char, podwójne, float, int, long long, bool, string. Więc tych, pływak czuje się całkiem rozsądne. Możemy stosować podwójnej, w prawo, bo jeśli naprawdę chcemy reprezentować człowieka temperaturę - 98,60000 - możemy użyć 64 bity to zrobić, ale jest to jak overkill dla temperatury. Więc po prostu iść z pływaka. Teraz potrzebuję zmienną. Wystarczy zachować rzeczy proste, będę nazywać to f, ale może równie dobrze nazwać to temperatura, ale albo jest w porządku. Tak unosić f GetFloat =. Tak szybko, jak teraz postanowili wykorzystać GetFloat, choć, trzeba wykonać jedną korektę. Tak. Musimy więc # include , inaczej kompilator będzie krzyczał na nas. Teraz mam pływaka, pozwól mi iść do przodu i robić konwersji. Więc po pierwsze, chciałbym również dostać w zwyczaju tu komentowania mojego kodu. Więc znowu, komentarz jest tylko zapis do człowieka, który jest nie jest częścią programu per se, ale to jedno, pomaga zrozumieć, co zrobił rano, lub następnego miesięcy, to pomaga zrozumieć nauczanie kolega co zrobiłeś lub co zamierza zrobić, więc jest to ogólnie bardzo dobra praktyka. Co kilka linii kodu, napisz komentarz sam lub twój kolega. Więc tutaj, mam zamiar powiedzieć "Zapytaj użytkownika o temperaturze." Nie musi być pełne zdanie, tylko krótkie zdanie. Ale idea komentując w C jest, że każdy z Komentarze powinny upoważniają cię - lub, powiedzmy, TF lub kolegi - aby przejrzeć program i dokładnie wiedzieć, co robi, by nie tyle czytania kodu, ale czytając komentarze, które powinny być zwięzłe i jasne. Dobra, teraz pozwól mi iść dalej i powiedzieć, "Konwersja Fahrenheit na stopnie Celsjusza. "Więc mam zamiar iść do przodu i robić, powiedzmy, float c. Będziemy Celsjusza jako wartości zmiennoprzecinkowej. I pozwól mi wziąć ukłucie na to. Wzór jest znowu tutaj. W 5/9 razy F minus 32. Więc zróbmy to. Więc 5 podzielić przez 9, minus - whoops, zepsułam go już. Razy. Tak więc 5/9 razy F minus 32. Więc F minus 32, średnik. A teraz, tu, mam zamiar iść do przodu i powiedzieć, wydrukować wynik. I ta część jest łatwe. Printf. W jaki sposób przejść o drukowaniu tego? Cóż, mogę powiedzieć: "To jest liczba w C% f \ n", tylko dla niektórych estetyki. I co wtedy wartość chcę podłączyć tu printf'S Drugi argument? Okay. Więc po prostu c. Więc zaczniemy od tego, a potem po prostu wrócić 0. Ponownie, to nie ma nic wspólnego z matematyką. To oznacza tylko, że wszystko jest dobrze. Teraz, to jest prawidłowe, to program? Dobrze. Więc zrobiłem kilka błędów. Nawet jeśli nie masz pojęcia, co to programowanie, można posortować z tyłu wnioskować do podstawówki, co błędy tu może być. Co jest jednym z pierwszych? PUBLICZNOŚCI: [niesłyszalne] DAVID J. Malan: Tak. Więc jesteśmy brakuje nawiasów. To było celowe, że zrobiłem nawiasów w keynote przesuń tutaj, bo jest rzeczywiście to pojęcie porządku operacji lub priorytet, dzięki czemu pewne operacje - mnożenie - mają wyższe wiążące, mają wyższy priorytet, niż rzeczy jak dodawanie lub odejmowanie. Więc zrobiliśmy to za rok tak, by wyjaśnić dokładnie co operacji matematycznej należy zrobić w pierwszej kolejności. Więc chyba powinienem naśladować dokładnie to. W przeciwnym razie komputer jest prawdopodobnie będzie próbował zrobić coś jak przepaść 5 przez 9, a następnie pomnożyć F, następnie odjąć 32 od całej sprawy. Który nie jest w rzeczywistości, to, co chcemy zrobić. Warto więc brać w nawias. Dodajmy tu, moje nawiasy nawiasy tutaj. Postawmy to tutaj. Tutaj, Właśnie zauważyłem kolejny błąd zrobiłem po drodze. Tak? PUBLICZNOŚCI: [niesłyszalne] DAVID J. Malan: Ah. Good. Więc rzeczywiście mają taką samą liczbę całkowitą Kwestia podziału sprzed. Mam rację, że zobaczymy, co objawem jest. Ale będziemy musieli skorygować jeden inny błąd tutaj. Tak? PUBLICZNOŚCI: [niesłyszalne] DAVID J. Malan: Tak. Więc głupi błąd zrobiłem, ale niezwykle ważne. Komputer nie będzie po prostu przymknąć oko i pozwolić mi używać F kapitału, kiedy faktycznie zadeklarowana zmienna jak małe f tu, w wierszu 8. Więc trzeba skorygować w linii 11 mojej kapitalizacji, które chwilę temu był F kapitał przez pomyłkę. Co tutaj? To powinno być małe, jak również? Powinno być, ale to przypadek. Że f% nie ma nic wspólnego ze zmienną. Tak po prostu być super jasne tutaj, pozwól mi iść do przodu i zmienić nazwę tego, w skrócie, "temperaturę". Pozwól mi zmienić nazwę ta "temperatura". Pozwól mi nie zmienić nazwy tego. Bo znowu, f% globalnie oznacza "wartość zmiennoprzecinkową." Nie ma nic wspólnego z moim zmiennej. Ale "temperatura" w każdym miejscu jest trochę rozwlekły, tak mam zamiar wrócić do mojej małej litery "f" s. Teraz, pozwól mi iść dalej w dół do mojego okna tutaj. Producent f2c - co było, znowu, arbitralne nazwiska dał się do tego pliku. Wydaje się, że skompilowany. Pozwólcie mi biegać f2c. Enter. Temperatura w stopniach Fahrenheita - zróbmy łatwe. 32. OK, poprawić. Ale jeśli teraz zrobić 212 do wrzenia - damn. Dobrze. Tak więc, nie wyraźnie poprawić, jeśli próbuje TF co najmniej dwie wartości. Więc jaki jest problem? Cóż, już położyć palec na co jest problemem. Ale dlaczego jest to, że tak jest? Tu, kiedy robię z matematyki z 5 podzielone przez 9. Więc koncepcyjnie, to całkowicie poprawne. Całkowicie zgodne z wzorem. Ale komputery tylko zrobić dokładnie to, co powiedz im zrobić. A co mamy skutecznie informując komputer o to podzielić przez całkowitą 5 całkowitej 9 i dać mi wynik. Problem jest jednak, kiedy się podział przy użyciu danych rodzaje, wyjście danych tego samego typu, jak wejścia. I tak, jeżeli są dwa wejścia zarówno wskazówki, wyjściowy będzie być int. I tak 5 podzielone przez 9 jest punkt coś. Ale co jest najbliżej całkowitą wskazać coś? Tak, to rzeczywiście 0. Tak jak rozmawialiśmy w poniedziałek, wszystko po przecinku punkt zostanie obcięty. To po prostu dostaje wyrzucać. Więc jest to kompletna pomyłka, bo może równie dobrze pomnożyć wszystko przez 0 tutaj. Teraz mogę to naprawić w kilka sposobów. Mógłbym to zrobić. 5,0 podzielone przez 9.0. Technicznie, to nawet nie trzeba tego robić. To nie wystarczy, by po prostu zrobić jeden z numerów float - lub podwójnie - poprzez umieszczenie przecinka tutaj. Bo to, co dzieje się teraz jest, gdy podzielić przez liczbę całkowitą float, lub podwójne, komputer będzie realizować oh, jedna z nich jest bardziej precyzyjna. Pozwól błądzić po stronie daje większą dokładnością niż zamierzonych. Tak będzie przekonwertować wynik - zwróci wynik jako wartości zmiennoprzecinkowej, jak również. Tak, że będzie działać. To będzie działać. I jest jeszcze jeden mechanizm, który zobaczymy w bardziej szczegółowo w następnym tygodniu. Można rzeczywiście, jako programista, powiedzieć komputerowi faktycznie traktować jednego typu danych jako chociaż była inna. Więc może rzeczywiście to zrobić. W nawiasach, mogę powiedzieć coś takiego (float), otwarte paren, blisko paren. I to jest to, co nazywa "casting". Ponownie, bardziej o tym w przyszłym tygodniu. Ale to tylko programowy sposób mówienia komputer, tak wiem 9 jest liczbą całkowitą lub długo. Wiem, że nie jest to wartość zmiennopozycyjna. Ale traktować go jako takiego w każdym razie. Więc oddać typ danych oznacza konwersję z jednego na drugi. Szczerze mówiąc, jest to po prostu trochę brzydki, więc proponuję idziemy z powrotem do oryginalnego sugestię tylko konwersji te rzeczy do wartości zmiennoprzecinkowych ręcznie. Bo teraz to jest po prostu super jasne, co się dzieje, i to nie wszystko, co rozprasza. Więc teraz wrócić do mojego okna terminala. Producent F2C. Pozwólcie mi iść do przodu i uruchamiania tego. I, jak na bok, znudzi wpisywać te polecenia znowu i znowu, uświadomić sobie, że komputery, jak Linux tutaj bywają bardzo pomysłowe. I gdybym uderzył w górę, możemy przejść całej mojej historii polecenia, górę i dół. Więc w tym przypadku tutaj, mogę po prostu przejść się uruchomić make F2C. Jestem czym krzyknął, bo po prostu to zrobił sekund temu. Jest już aktualne. Więc teraz mogę uruchomić f2c ponownie. Spróbujmy 32 Fahrenheita. Teraz spróbujmy 212 Fahrenheita. Uff. Wydaje się działać. Teraz, to jest dobre, ale to jest trochę przypadkowe, że Jestem pokazano sześć liczb po przecinku. Zgadza się? Jeśli jesteś osobą pogody w telewizji, jesteś rodzajem doofus jeśli czytasz temperaturę do Ten stopień precyzji. Więc to ułatwić. Więc faktycznie go tutaj, do mojego printf. I tak, chcę pływać. Ale ja chcę teraz określić precyzję. I zamierzam się trochę zwięzłe. I powiem, daj mi jeden punkt po przecinku. Więc zamiast mówić% f, I powiem:% .1 f. A to po prostu oznacza, daj mi jedną pozycję po przecinku. Dobrze. Spróbujmy jeszcze raz. Pozwól, że ponownie go uruchomić po kompilacji. I teraz mam wpisać 32 i wrócę większą wartość zwięzłe. I mogę wpisać, teraz, 212, i wrócić bardziej zwięzły stosunek jakości. I nie ma innych rzeczy, które możesz zrobić z printf. Można rzeczywiście określić jak szeroka liczba powinna być. Jeśli chcesz mieć obicia na nim, więc można wyrównać do prawej lub left-align wszystkich numerów lub spróbować rzeczy centrum. Więc sobie sprawę, że są małe sztuczki można zrobić tam. Ale oni po prostu sprowadza się do kodów formatu, jak mamy tam. Tak więc w odniesieniu do tej kwestii pierwszeństwa. Jest to bardzo nudne tabela przejść metodycznie. Ale świadomość, że autorzy C mają pochodzić z Przepisy określające, którzy operatorzy mają wyższe pierwszeństwo, bardziej wiążąca moc, niż w innych. Tak więc o ile w szkole, zazwyczaj wiedział, że mnożenie i dzielenie, a następnie dodawanie i odejmowanie, następnie kilka innych rzeczy. W świecie programowania, istnieje wiele dłuższa lista rzeczy. I to nie jest coś warte zapamiętywanie jest teraz. Dostaniesz przyzwyczaja do niej przed długie. Ale tak jak w szkole, nawiasów ogólnie rozwiązania kwestie pierwszeństwa, poprzez bardzo jasne komputer i ludzki zarówno to, co jest przeznaczone. Więc uznać ten tylko trochę arkusz oszukiwać tam. Ale większość z tych danych nie będą się do pewnego czasu. Dobrze. Załóżmy teraz, budować i odejść od nich trochę głupie matematyczne przykłady. Nadal korzystać z tych samych podstaw, ale rozpoczęcie wyrażając się trochę bardziej jak Scratch. Więc w Scratch, mieliśmy tych wyrażeń logicznych. I angielskim, wyrażenie logiczne jest co? Prawda lub fałsz. To coś, co ma wartość true lub false. 1 lub 0. Włączyć lub wyłączyć. Cokolwiek chcesz to nazwać. Teraz w zera, puzzle wyglądało to. I to połączenie, na dole, z trzech puzzle. Jeden koniunkcja - coś, co ma puste i puste. A następnie dwa wyrażenia logiczne w jej wnętrzu. Więc można zagnieżdżać wyrażenia logiczne, aby uzyskać więcej skomplikowane wyrażenia logiczne. Na przykład, jeśli jest to sobota, i to jest przyjemne pogoda, a następnie na zewnątrz. Albo coś w arbitralny sposób. Więc możesz dołączyć wyrażeń logicznych wymyślić większa wartość prawdy, której odpowiedź jest oparta na mniejsze. Teraz, w C, na szczęście, to odwzorowanie jest rzeczywiście bardzo proste. Nawiasy pomóc wszystko jasne. && Co oznacza "i". Więc tak zamierzamy przekształcić te bloki od podstaw do C. I na warunkach widzieliśmy w Scratch, z lewej strony strona tam, mogę układać je podobnie w C. Jeśli x jest mniejsze od y, a następnie zrobić. Else if x jest większe od y, a następnie zrobić. Else logicznie muszą być równe, tak mówią że są równe. Więc teraz możemy zacząć budować te rzeczy. Więc zróbmy przykład. Pozwól mi otworzyć plik, który znajduje się na stronie internetowej, że oczywiście Pisałem wcześniej. To jest nazywane nonswitch.c. I zobaczymy, dlaczego w chwilę. Tak więc w tym pliku - nonswitch.c-- najpierw uświadomić sobie, że jest cała masa komentarzy na górze. To tylko wyjaśniając nazwę pliku, co to jest, i tak dalej. I to najwyraźniej demonstruje użycie logiczne i-ing - łącznością dwa wyrażenia. Zobaczmy więc, jak ten program działa. I to moje dwa pliki, cs50.h i stdio.h. Gdybym przewijać, teraz do programu, to trochę dłużej niż pisaliśmy wcześniej, ale dość czytelny. Więc najpierw wydrukować do użytkownika, w wierszu 18, "Daj mi liczbę całkowitą od 1 do 10". Tak To właśnie tam. Teraz dostaję całkowitą. Ale świadomość, że getInt - całkiem proste. To jest po prostu dostanie int. To będzie do zapewnienia, że ​​robi się int, a nie ciąg lub float. Ale to nie zrobi żadnego rodzaju kontroli granicznej. To nie będzie filtrować numery być między określonym zakresie. Tak więc mamy do wykonania, że ​​nas samych. Więc tak jak w Scratch, gdzie mógłbym zrobić koniunkcję dwa wyrażenia, można to zrobić w C w następujący sposób. Jeżeli n jest większe lub równe 1, a n jest mniejsze niż i lub równa 3, będę bardzo arbitralny dekret, że Numer jest niewielka liczba. Tylko ze względu na oświadczenia. Else if n jest między 4 i 6, print "Wybrałeś medium liczba. "Else jeśli n jest między 7 a 10, print" Wybrałeś duża liczba. "else print" Wybierasz nieprawidłowy numer. " Ponieważ logicznie, który następuje, jeżeli mamy wyczerpały naszą ofertę. Tak sobie z tego nie jest całkiem jak zapisać większy lub równa w klasie matematycznej. Zgadza się? Zazwyczaj wyciągnąć go tak, z linii pod nim. Ale nie ma takiego klawisza na klawiaturze. Więc symbol wyrażania C większą niż lub równa jest dwa znaki, a symbol na mniej niż lub jest równa, a dwa znaki. Dobrze. Więc jeśli mogę uruchomić ten program, można się domyślić, co to zamierza zrobić. Jeśli pójdę do przodu i zrobić nonswitch, Enter. A następnie uruchom nonswitch. Daj mi numer od 1 do 10. Mam zamiar dać mu 11. Wybrałem nieprawidłowy numer. Pozwól mi spróbować numer 3. Wybrałem małą liczbę. Więc dość proste tam. Co zrobić, jeśli chcę, aby zmienić zachowanie tego programu i zrobić coś innego w zamian? Pozwól mi iść dalej i powiedzieć. Pozwólcie mi się pozbyć tego wszystkiego. I pozwól mi powiedzieć, że jeśli (n == 42). A potem mam zamiar iść dalej i powiedzieć, print "Wybrałeś prawidłowa odpowiedź. "Else będziemy iść dalej i powiedzieć, printf ("Wybrałeś zła odpowiedź "). Okay. Tylko dlatego. Teraz, kilka punktów, możemy dokonać tutaj. Jeden, nie wpisz symbol, który uważasz za najbardziej rozsądne. Gdy chcę sprawdzić równość okazuje nie używasz znak równości. Zamiast tego użyj równe znaku równości. I dlaczego może być tego przyczyna, po prostu intuicyjnie? Tak. PUBLICZNOŚCI: [niesłyszalne] DAVID J. Malan: Zgadza się. Znak równości jest już używany do przypisania. Ktoś naprawdę nie to przemyśleć. I teraz tak, jeśli chodzi o badania, równości, musimy być bardziej wyraźne, i powiedzieć równa równa. Bardzo częstym błędem jest to zrobić. A jeśli w godzinach pracy urzędu lub tygodni w przyszłym lub w następnych dwóch tygodni można zrobić coś takiego, a potem zmagać się z nim przez 10, 20 minut próbuje dowiedzieć się, co cholerny błąd, uświadomić sobie, że jesteś jednym z tych, ludzie, którzy dokonali tego błędu. Tak, bardzo łatwe do wykonania. Ale celem jest teraz, aby odeprzeć ten błąd. Może to ocenić, bo to, co jest to naprawdę mówi? Jeśli n ma 42. Więc ludzie używają czasownika, werbalnie, aby wyrazić Pojęcie zadania jest "dostaje". Więc jeśli n ma 42. Więc to znaczy przypisać 42 do n. Teraz mam logiczną wyrażenia w nawiasach, Wnętrze tego stanu, którego wartość wynosi 42. Zgadza się? Bo jeśli oceniać go od wewnątrz, całkowitej odpowiedź, teraz jest 42. Więc jeśli Zadałem pytanie, "jeśli (42)," co to jest że naprawdę mówi? Cóż, wyrażenia logiczne mogą być prawdziwe lub fałszywe. 1 lub 0. Włączyć lub wyłączyć. Tak więc wydaje się, że sprawy tutaj narożny, w którym wszystkie nagle mówię "jeśli (42)". To nie jest wartość logiczna. Więc co zrobić, komputery, choć jest ona zasadniczo równa coś, co nie jest 0 interpretowany jest prawda. 1. On. Oni wszyscy są funkcjonalnie równoważne. Tylko wartość 0, lub słowo kluczowe false, jak będziesz w końcu zobaczyć, jest w rzeczywistości fałszywa. Tak ", jeśli (42)" rzeczywiście być prawdziwe, ponieważ nie jest równa zeru. Tak dokładniej tutaj, wartość logiczna nie jest naprawdę tak bardzo prawdziwe lub fałszywe, ale za to przypadku, jeśli jest 0 lub zera. Tak fałszywe, czy nie fałszywe. I pozwala nam objąć całość więcej możliwości w nawiasie wyrazu. Musimy więc, zawsze tak uważnie, to powiedzieć - Jeśli (N == 42). Po prostu dlatego, musimy określić test równości, nie przypisanie wartości. Co jeszcze warto podkreślić? Te nawiasy klamrowe nie są rzeczywiście konieczne. Robiłem je po prostu być nit-wybredna tutaj. Ale kiedy masz warunek, że ma tylko jedną linię code, dla wygody, programiści nie muszą korzystać nawiasy klamrowe. Wystarczy tylko tiret, ze względów estetycznych, a następnie napisać wiersz kodu. Tylko wtedy, gdy chcesz napisać dwie linijki kodu - dla instancja, else printf ("Bye!"). Jeśli chcesz to zrobić tym, jest złamane. Możesz tiret wszystko co chcesz, ale fakt, że masz wpisane dwa wiersze kodu bez użycia nawiasów klamrowych Oznacza to, że ten program nie będzie działać poprawnie lub może nawet skompilować poprawnie. Więc teraz, szczerze mówiąc, myślę, że najlepiej jest po prostu zwyczaj stosować nawiasy klamrowe, a przekonasz się, że oni super jasne, co się dzieje. Ponadto, jak na bok - szczególnie, jeśli jesteś wśród tych, którzy używają zalecanych książek lub zasoby online - sobie sprawę, że jest to pojęcie w stylu programowania. I niektórzy ludzie rzeczywiście wolą postawić nawias klamrowy tu na linii. Niektórzy ludzie wolą robić śmieszne rzeczy, jak umieścić je tutaj. Nie ma złej odpowiedzi, jeśli chodzi o stylu, ale to jest złe. Ale niektórzy ludzie to zrobić. [Śmiech] DAVID J. Malan: Więc wspominam o tym teraz, ponieważ po prostu jako zapoznać się na rzeczy w książkach lub w Internecie, masz zamiar dostać różne wiadomości od różnych nauczycieli i różnych autorów. I po prostu sobie sprawę, że funkcjonalnie, są generalnie równoważne, ale być spójne. Więc w tym przypadku, będziemy standaryzacji na kręcone szelki kolejce tutaj po lewej stronie. Dobrze. Więc idź teraz i uruchomić to i zobaczyć, co się dzieje z tego programu. Producent nonswitch. Następnie uruchom nonswitch. Podaj mi liczbę całkowitą między 0 i - tak, że nie jest istotne więcej, ale jestem po prostu się do arbitralnie powiedzieć 42. I wybrałem właściwą odpowiedź. No cóż, niech faktycznie się to w innym kierunku. Okazuje się, że jest to jakaś inna składnia można użyć w programie. Oto nowy kawałek składni jest funkcjonalnie taka sama, ale po prostu wprowadza inny sposób wyrażania siebie. Więc to jest to, co nazywa się "instrukcja switch". And Instrukcja switch działa w następujący sposób. To trwa, w nawiasach, wartości, które chcesz "Switch" na. Chcesz zachowywać się inaczej na podstawie jej wartości. Oznacza to więc przełącznik wartości n. A co to znaczy? Cóż, jeśli n oznacza 1 lub 2 lub 3, należy iść dalej i wydrukować "You wziął dużą ilość ", a następnie przerwać. Powodem jest to, że przerwy w sposób jest C działa natychmiast po stwierdzeniu, przypadek, który pasuje, to rozpoczyna się wykonywanie cały kod poniżej. Więc jeśli mam jedną linię kodu, tak jak ja tutaj, na linii 27, to zostanie wykonany. Jeśli dodać kolejną linię tutaj, to zostanie wykonany. Kolejna linia tutaj, to zostanie wykonany. Program zatrzymuje tylko wykonując to, co poniżej dotyczy case kiedy wyraźnie powiedzieć "złamać". Tak źle. W prawo, w tym przypadku, w wyniku. Przypadek 4 lub 5 lub 6, podobnie będzie wydrukować wiadomość. W tym przypadku, średnia liczba. Przerwa. Sprawa 7, 8, 9, 10, to będzie drukować "Wybrałeś duże liczba. "Break. I potem jest dosłownie hasła o nazwie "default" to skutecznie jak "else" budować. Więc nowa składnia, ale intelektualnie, w ogóle nic nowego. To tak jak z podstaw. Jeśli, else if, else, jeżeli rodzaj bloku. Tak że jest włączony wersja tego programu. Zauważmy jednak, że zrobił to z numerów. Pozwól mi otworzyć drugą wersję, żeby zobaczyć coś bardziej konkretnego. Mamy tu więc stopnie zamiast. Okazuje się, że można korzystać z przełączników nie tylko na liczby całkowite, ale na znaków. Nie wszystkie typy danych, ale co najmniej w postaci. Więc tutaj, możemy zrobić coś takiego, jeżeli wartość C, która Użytkownik wpisany w linii 19, z wykorzystaniem funkcji getchar, jest kapitał lub małe litery, niech interpretują go jako gatunku, i mówią, że wybrał znakomitą klasę. Iw dół wzdłuż switch, czy mamy inne przypadkach do "B" i "C, a" S, i tak dalej. Ale bądźmy teraz dopełniają jedna rzecz. I znowu, rodzaj latania poprzez Niektóre z tych przykładów. Ale to jest naprawdę tak, że możemy je stosować, teraz - lub naprawdę, wystarczy przełożyć je teraz - do C. Więc pozwól mi iść do przodu i robić. Mam zamiar otworzyć nowy plik. A ja zamierzam zrobić include. A ja zamierzam zrobić int main (void). Pozwól mi zapisać ten plik jako loop.c. Tylko jako przykład. I mam zamiar iść do przodu i wykonaj następujące czynności. Chcę napisać bardzo żmudny program. Więc 10. Zróbmy to. 9. Dobrze. Jak najszybciej zacząć robić to w programowaniu, jesteś prawdopodobnie robi coś złego. Ale zaczniemy tam i tak. Ups. To właściwie tak. 7. 6. 5. 4. Nic się nie stanie, gdy dojdziemy do 0. 3. 2. 1. Okay. 0. Usuń. Dobrze. Więc powrót 0. Więc ten program jest oczywiście zrobić to, co jest bardzo mozolnego mówi, że zrobi. To będzie drukować wszystkie te wartości, od góry do dołu. Więc pozwól mi robią pętlę. A potem - ups. Producent pętlę. Byłem w złym katalogu. A teraz pozwól mi uruchomić pętlę. Enter. Woohoo. Very nice. Miły, długi program. Wszystko w porządku, ale teraz zróbmy to lepiej. Podobnie jak w Scratch, kiedy zaczął używać pętli budowy, a nie tylko kopiować i wklejać wszystkie puzzle, pozwól mi przedstawić tę rzecz. Tak więc, w C, są różne pętle jeden z nich wygląda tak. "Za" pętli ma trzy rzeczy, oddzielonych dwoma średnikami. , A następnie, wewnątrz tej pętli, niejako - wewnątrz stuff z klamrami - możemy zrobić coś znowu i znowu. Więc co mam tutaj na ekranie, to jest dosłownie komentarz. / / Oznacza tu przychodzi komentarza. To nie jest kod. To tylko opis po angielsku, dla mnie, człowieka. Więc pliki uruchamiania, warunki i aktualizacje. Cóż, zobaczymy, jak to działa. To pozwala mi przepisać ten program w następujący sposób. For - tak tu jest mój pętli - int i - tutaj jest zmienna o nazwie "i" - dostaje inicjowane 10. Więc nie jest mój inicjalizacji. Chcę zrobić pętlę ile "i" jest większa niż lub równe 0. I na każdej iteracji tej pętli, chcę uwagi i -. Więc widzieliśmy + + w poniedziałek. - Jest odwrotnie. To zmniejsza wartość o 1. Wewnątrz tej pętli, chcę naprawdę coś zrobić. Więc mam zamiar powiedzieć coś w stylu printf. Nie chcę powiedzieć, 10 teraz, bo to oczywiście jest tylko do druku tę samą wartość. Co chcę wydrukować zamiast prawdopodobnie? Tak. Tak "i". Tak d%, i. Więc mam zamiar ukraść jeden z tych pomysłów z wcześniej - taka zamiana kodów formatu - a tu, na dole, wrócę 0, po prostu środek na dobre. Ale teraz mam więcej programu zwięzłe. To tylko kilka linii, a nie jakieś 10 lub 11 linii. Pozwólcie mi odejść do mojego polecenia tutaj. Pętla remake. Rerun pętlę. I wydaje się być taki sam. Teraz program ma bardziej interesujące. Ale teraz mogę napisać coś takiego. Można zmienić na 100. I następnie skompilować mój program. A potem mogę ponownie uruchomić mój program. A teraz to idzie super szybki na dzisiejszych komputerach. Ale nie mam - i rzeczywiście, mój bufor konsoli nie nawet iść tak daleko. Proszę bardzo. Więc nie mamy wszystkie 100. Ale łatwo jest popełnić błędy tutaj. Co będzie, jeśli oczekiwane zachowanie przypadkowo zrobić? Tak to jest jak nieskończony. Zobaczmy więc, czy komputer zachowuje. Więc pozwól mi iść dalej i zrobić pętlę. I pozwól mi uruchomić pętlę. Więc wróćmy do tego za chwilę. Powiemy, że bieg. Bo co mamy liczyć do, minimalnie? Prawdopodobnie co najmniej 2 mld euro, jeśli mamy tak wielu bitów i używamy wartości dodatnie. Warto więc wrócić tu ponownie. Poza tym tego rodzaju pętli, mamy to, co nazywa się natomiast pętle. Tak więc, podobnie jak w Scratch, trzeba było zawsze bloki, bloki i trzeba było powtórzyć. Podobnie, w C, po prostu mają inne sposoby wyrażania siebie. Więc masz to pojęcie pętli, która pozwala na Wyraź siebie trochę inaczej. I wtedy masz coś, co nazywa się do-while, która działa nieco inaczej, jak również. I będziemy drażnić te poza czasem. Ale rzućmy okiem na ten ostatni tutaj. Jeśli idziemy do - nadal działa. Jest całkiem nieskończona. Więc pozwól mi iść do pozytywnych, i pokazać w jaki sposób możemy rzeczywiście rządzić wejściowe użytkownika trochę bardziej efektywnie. Jest to dość krótki program. A tu, w main, int n deklaracji. Więc daj mi zmienną o nazwie n. Teraz mogę powiedzieć dosłownie "Robić". A potem mam otwartą kręcone klamra, blisko nawias klamrowy. I wtedy zauważył, zaraz po tym, to mówi natomiast n jest mniej niż 1. Więc zauważyć, że te linie - 19 do 24 - komponować zbiorowej do-while. I znów nowa składnia, nie nowy pomysł. Jest to po prostu inny sposób zapętlenia, syntaktycznie. Więc co to robić? Nie następuje przy n jest mniejsza niż 1. Więc co chcę zrobić? Żądam, aby dać mi dodatnia. Wtedy faktycznie spróbuj uzyskać całkowitą od użytkownika. Ale w zakresie o kolejność operacji, ponieważ gdy warunek jest tu, jestem wtedy zamiar sprawdzić, czy n mniej niż 1? Więc załóżmy, że użytkownik - po czym zażądał w ten sposób - typy w 0 wartości. Warunek ten będzie prawda czy fałsz? Cóż, to rzeczywiście będzie to prawda. Ponieważ n jest 0, a 0 jest mniej niż 1. Więc co to oznacza? Zrobić to ponownie. Zrobić to ponownie. Zrobić to ponownie. Tylko raz, że warunek jest fałszywy. Jeśli wpisać 42. Oraz nr 42 jest nie mniejsza niż 1. Dlatego ta pętla jest wykonywana wykonania. A więc w tym momencie, program powie, dzięki za 42, w tym przypadku. Teraz, że masz ten sposób wyrażania siebie - Nie powinniśmy czekać na to, aby zakończyć. To zajmie trochę czasu. Aby być kontynuowane następnym razem, być może. Ale teraz, masz możliwość do miejmy nadzieję na zrozumienie trochę maniaków humoru. Przeprosiny. To nie jest reprezentatywna humoru w informatyce świat, ale to urocze. [Śmiech] Skończmy na tym notatki. I zobaczymy w poniedziałek. [Aplauz]