>> [Odtwarzanie muzyki]
>> DAVID MALAN: W porządku.
Witamy z powrotem.
Jest CS50, a to Tydzień One, ciąg dalszy.
Tak więc jeden z powodów, który został nam przechodzących wokół technologii, takich jak
Google Szkło jest, że pochodzą one z coś znane jako API,
Application Programming Interface.
A co to oznacza to, że z odpowiednie pliki i z prawej
dokumentacja, rzeczywiście można napisać oprogramowania nawet dla urządzeń takich jak te.
>> A więc to, co mamy na myśli stronę koniec semestrów jest, jeśli projekt
udziałem, powiedzmy, Szkło Google może odwołanie, zobaczymy co da się zrobić w
Warunki podpinania się z niektórych hardware wypożyczenia oraz
publicznie dostępne API, dzięki czemu można faktycznie rozpocząć tworzenie oprogramowania
, który działa na tej samej szklanki Google.
>> Innym urządzeniem, które graliśmy z późno, że myśleliśmy, że może być
zabawa na koniec semestru jest ta mała rzecz tutaj.
To się nazywa Motion Leap, a co masz by zobaczyć to technicznie
reklama dla urządzenia, ale nie mówi się, co to zwłaszcza
Urządzenie jest w stanie.
I to też pochodzi z API poprzez co można napisać oprogramowanie do
kontrolowania własnego komputera w sposób zupełnie jak ten jednominutowy film.
>> [PLAYBACK VIDEO]
>> [END PLAYBACK VIDEO]
>> Więc teraz, to urządzenie stanie się realizowane jako mały USB
łącznik, który można podłączyć do swojego komputer, ale nie zdziwiłbym się,
jeśli niedługo mamy te rodzaje technologie w kolejnej partii komputerów
i Mac, dzięki czemu można, rzeczywiście, z nim interakcję
sposób tak.
W rzeczywistości to, co myślałem, że ja, też jest I zatrzymał się mały pokaz
Program, który pochodzi z tego oprogramowania.
Więc wrzuciłem mały czujnik przed moim laptopie.
>> I jak widać, to już zdaje sobie sprawę, że moja ręka jest tam
kontrolowania go.
A wszystko to aplikacja nie jest maśle małe rzeczy, takie jak ten.
Ale widać, że rzeczywiście Mam pięć palców tam.
Jeśli uda nam się to zrobić, wszystkie 10, można sobie wyobrazić, schludny fortepianie
Zastosowanie lub tym podobne.
Więc jeśli chcesz, aby wymyślić po klasie dzisiaj i to jak zabawa z
dobrze, zapraszamy do.
Tak bardziej na tym kierunku semestru koniec.
>> Więc kilka administracyjnych Anonse.
Jeden, czy punkt przez ten piątek w południe w cs60.net/section.
To jest URL na przebieg tych strona główna, jak również.
W międzyczasie jednak, supersections zadebiutuje w tę niedzielę.
Supersections to jednorazowa sprawa, ponieważ zajmuje nam trochę czasu na pracę
kto jest w jakiej sekcji i gdzie.
>> Tak więc w tym roku w niedzielę nie będę jednym sekcja dla tych mniej wygodne,
jedna część dla tych, bardziej komfortowe.
A ci z was gdzieś w między są mile widziane, aby przejść do
jednej lub obu lub nie.
Obie te będą filmowane.
Będą w większym audytorium niż sekcja normalnie byłoby w.
Ale celem jest, aby wyposażyć niektóre komfort z problemu ustawić jeden,
z C, z CS50 urządzenia, to weekend, jeszcze przed dowiedzieć się
formalnego przypisania.
Więc można spotkać się z TF i Twój mniejszy grupa sectionmates w około
tygodniowy czas.
>> Godziny pracy, w międzyczasie, zostały dzieje.
Do skorzystania z nich dziś wieczorem lub jutro wieczorem, jeśli chcesz.
Set Problem 0 przypada na piątek.
Jest to dzień później niż regularnie odbyły się w czwartek.
Ale z zestawem problemów 1, zobaczysz że zawiera niektóre rozgrzewki
ćwiczenia, z którymi sam może rozszerzyć swoją
Termin od czwartku do piątku.
Problem 1 set Tymczasem zadebiutuje na stronie internetowej to oczywiście nadchodzących
Piątek, jeśli chcesz, aby zwinąć się z to tak jak ja kiedyś późnym
Piątkowy wieczór w swoim pokoju.
>> Więc cs50.net/appliance jest miejsce, gdzie można uzyskać CS50 urządzenia
że zaczęliśmy używać w poniedziałek.
Użyjemy go nieco więcej dzisiaj.
Ale zapewniamy, że problem ustawić 1 Specyfikacja poprowadzi cię przez
dokładnie kroki, jakie należy aby ta i działa.
Więc nie martw się o to robić przed Pset 1 jeśli bym raczej nie.
>> Dobrze.
Tak wyglądał w poniedziałek w kodzie źródłowym, ale w kontekście nowego
język programowania, a mianowicie C i C, w przeciwieństwie do zera, nie jest graficznym.
To nie puzzle.
To bardziej angielsko-jak składnia.
I jest kilka etapów w rzeczywistości pisanie i uruchamianie
Program w C, bo oprócz źródła kod tak, trzeba coś
zwany kompilator.
A w laika, co ma kompilator dla nas zrobić?
Tak.
>> STUDENT: To konwertuje kod że piszesz do 0s i 1s.
>> DAVID MALAN: Dobry.
Więc to konwertuje kod piszemy do 0s i 1s.
Przetwarza on tak zwany kod źródłowy kod obiektu, z czego ten ostatni wygląda
trochę coś takiego.
I to jest procesor, mózgi wewnątrz komputer, który z powodu
ludzie, którzy stworzyli te komputery, wiedzieć, co te sekwencje
od średniej 0s i 1s.
>> Być może oznacza to, druk.
Być może oznacza to, że dodatek.
Być może oznacza to, odejmowanie.
Być może oznacza to, wyświetlanie grafiki.
Istnieją predefiniowane wzorce bitów że świat postanowił myśli
pewne rzeczy.
Ale w większości w tym kursie, będziemy pracować na wyższym poziomie, a
my przyjąć, że istnieją rzeczy, jak kompilatory, które mogą
funkcjonowanie naszych kodu źródłowego w sposób zamierzamy.
>> Więc programie pisaliśmy w zeszłym tygodniu pierwszy a następnie zaczął do portu, tak aby
mówić, C to przeszłość Poniedziałek, to było.
Gdy zielona flaga kliknięciu przywitać.
To, oczywiście, napisany w Scratch.
I stwierdził, że ekwiwalent Program w C wyglądał trochę
coś takiego.
>> Więc to, co myślałem, że my na początku jest, niech odciąć to, co wygląda na pierwszy
rzut oka, co prawda, w dość ezoteryczne składnia, ale można zacząć dostrzegać
stanie dość szybko.
Co my też dzisiaj zrobić, to zapewnić Ci z modelu niektóre psychiczne
kanonicznych, niektóre standardowe konstrukcje w programowaniu.
A potem będziemy rzeczywiście dostać w swoje ręce dirty na przykładach, jak również.
>> Tak więc dla tych z Was, bardziej komfortowe, sobie sprawę, że w tym tygodniu, a potem następne
tydzień może równie dobrze być nieco recenzji.
Ale szczególnie gdy hacker wydanie problemu set 1 wychodzi na
Strona Kursu w piątek, ja sądzę, przekonasz się, że nawet, jak wypełnić
niektóre półprodukty w kolejnym tygodniu lub dwóch, zaczniesz się coraz bardziej
zakwestionowane i spotkać nowe i nowsze rzeczy.
>> Warto więc drażnić program apart kilka linii na raz.
Na samej górze, co mamy technicznie nazywa
Dyrektywa preprocesora.
To jest tylko linii kodu, który mówi obejmować zawartość pliku
zwany standard I / N, standardowe wejście - czy, przepraszam, standard I / O, standard
wejścia / wyjścia,. h, wewnątrz mojego własnego programu.
>> Więc innymi słowy, jeśli napisał to Program z prostym edytorem tekstu takim jak
gedit, prostszy odpowiednik coś jak Microsoft Word, które
instrukcja, # include stdio.h, jest po prostu zamierza poinformować kompilator, chwyć
Zawartość tego innego pliku, stdio.h, i wklej je tutaj.
>> Teraz, dlaczego mnie to obchodzi?
Czego możemy twierdzić jest wewnątrz archiwum nazwie stdio.h, która jest przechowywana
gdzieś na dysku twardym lub w tym przypadek, gdzieś w CS50 urządzenia?
Ktoś je tam dla mnie.
Ale to, co w nim jest?
>> Tak, tak, to jest deklaracja Funkcja o nazwie printf.
Więc printf przypomina funkcja wyświetla słowa i znaki i
Liczby na ekranie w mojej licytacji.
Ale ja nie napisałem.
CS50 nie pisać.
Lat temu ktoś napisał to, a oni zasadniczo dał nam przepis na niego
w pliku o nazwie stdio.h.
Tak, że pierwsza linia po prostu daje mi dostęp do funkcji, które ktoś inny
napisał rok temu m.in. które są printf.
>> Teraz, następna linia będę machać Moje strony Ręka na, przynajmniej dopóki w przyszłym tygodniu.
Ale teraz wiem, że int main (void) jest zasadniczo równoważne tego
żółty kawałek układanki, gdy flag green kliknięciu.
Świat, rok temu postanowiła, że ​​jeśli piszesz program w
język o nazwie C, zaczniesz Twój program z linii
, który wygląda tak.
W prawie tydzień czasu, to zrobi Poczucie co int jest co nieważne jest.
Ale teraz, po prostu myśleć o tym jak ten żółty kawałek układanki.
>> Teraz obok mamy nawias klamrowy następnie innym bliskim klamrą kręcone,
że tak powiem.
I zobaczymy je w całej programów w języku C, jak również
JavaScript i PHP.
I te właśnie hermetyzacji związanych z linii kodu.
Kręcone w zasadzie open klamra mówi, tutaj jest jakiś kod.
I zamknięte klamra kręcone, co jest pochylone w innym kierunku, tak
Oznacza to, że jest to dla odpowiedni kod.
>> Więc soczyste linia w tym pierwszym Program jest ostatnim, printf,
cytat-cytatu, hello world.
I nazywa rzeczy między cytaty, co ostatnim razem?
Więc to jest ciąg.
A łańcuch jest tylko technika określenie sekwencji
znaki, słowa, frazy.
Nawet jedna litera może być podwójnie cytowane.
Ale to sekwencja zera lub więcej znaków.
>> Backslash-n, choć wygląda trochę dziwne.
Ale to po prostu coś znaczyło Prosty do komputera.
Co backslash-n?
Nowa linia.
Więc to tylko sekwencja specjalna znaki, że świat postanowił
środki wprowadzone na końcu linii tam, ponieważ kompilator będzie rzeczywiście dostać
zmieszany, zazwyczaj, jeśli, bardzo zrozumiałe, ale nieprawidłowo, po prostu
rozpocząć naciskając enter, aby umieścić Nowe linie w kodzie.
Trzeba być trochę więcej jednoznaczne z backslash-n.
>> I zobaczymy, istnieje kilka innych takich wzorce dla znaków specjalnych.
Na przykład, jeśli chcesz, aby twoje umysłowi wędrować do wypadku na rogu,
Załóżmy, że chcę, aby wydrukować cudzysłów na ekranie
niezależnie od powodu, że wydaje się być nieco problematyczne, prawda?
Bo jeśli mogę umieścić cudzysłów w middle of "Hello, World", za co
Powodem, dlaczego to się wydaje potencjalnie problematyczne?
Rozbija ciąg.
>> Kompilator to tylko program.
Program taki jak kompilator jest po prostu będzie czytać górę Kod do dołu,
od lewej do prawej.
A jeśli widzi trzy cudzysłowy zamiast dwóch, to nie będzie wiedzieć
jeśli masz na myśli, że coś się w lewo powinien być ciąg znaków lub rzecz
prawo, lub całość.
To niejednoznaczne, a więc to, co typowe kompilator to zrobić, to po prostu cudo na zewnątrz,
i da ci komunikat o błędzie, a zrobić sobie z tym problemem.
>> Tak więc biorąc pod uwagę, że backslash-n oznacza nowy linii, co by twój instynkt teraz
rozpocznie się, jeśli chcesz to coś nietypowe jak double
Cytując wnętrze to inaczej cytowany ciąg?
Backslash-cudzysłów.
A więc zobaczymy tego rodzaj wzorca też.
>> Jeśli chcesz zrobić coś małego dziwne, przekonasz się, że
Rozwiązania często zgodne z wzorcem, i odwrotny ukośnik
oznacza sekwencję wyjścia.
A to po prostu oznacza coś specjalnego że musimy do reprezentowania w
inny sposób.
Jak dla jak można reprezentować backslash, dobrze, my będziemy
wrócić do tego.
Ale odpowiedź też jest w rzeczywistości bit oczywiste.
>> Więc teraz przedstawić inny konstrukcje programistyczne
że widział w Scratch.
Pewnie za pewnik już jeśli już zanurkował
Problem ustawić 0.
Ale przejdźmy teraz wprowadzić składni w C do nich w inny sposób dość intuicyjny
idee, przynajmniej niektóre z nich.
>> Więc to pojęcie warunku lub gałęzi, podczas gdy wcześniej my
reprezentował go z kodem, który wyglądał jak to w lewej Scratch -
jeśli x jest mniejsze od y, to tak powiedzieć -
zamiast teraz w C - pozwól mi doskonalić w sprawie najprostszym przypadku -
my po prostu powiedzieć, czy otworzyć nawias, coś jest prawdą -
Wyrażenie logiczne jest zamiar iść gdzie powiedziałem warunek -
zamknij nawias, to nie to, co jest wewnątrz tych klamrach.
>> Więc i tu nawiasy są trochę jak Scratch-tych
U-kształtne kawałki układanki.
Czy to, co jest w środku tych klamrach.
W tym przypadku, slash slash.
I zauważyć, to jest do przodu slash, a nie odwrotny ukośnik.
Ukośnik, ukośnik, dla tych, którzy już zaprogramowany
przed, po prostu oznacza -
to tylko komentarz.
Komentarz nie linia jest kodu, per se.
To linia angielskiego, które, ludzi, napisałem do siebie, aby
może przypominać coś zrobić, aby wyjaśnić sobie, aby wyjaśnić
ktoś inny, co kod robi.
To tylko opisowy komentarz.
>> Teraz, oczywiście, możemy mieć dwukierunkową rozwidleniu dróg tylko w ten sposób,
trójstronna widelec w drodze, wykonując tego, a jeśli nadal tego
wzór, można mieć cztery-sposób, Pięć sposób, sześć-way widły w drodze, jeśli
trzeba obsłużyć, rzeczywiście, , że wiele warunków.
I wtedy dostrzec paralelizm tutaj -
if (warunek), else if (warunek), i tylko jedno, że jest trochę
dziwne jest ostatnim, który to po prostu inny.
Jednak ponownie, to jest identyczne, koncepcyjnie, do tego, co zrobiliśmy
wcześniej, chociaż składnia się trochę przyzwyczaić.
>> Teraz, w tym przykładzie, istnieje niektóre inne dziwne składni.
Widzimy printf ponownie otwarty nawias, i zamknij nawias.
A w środku jest cudzysłowiu.
Nawiasy, w kontekście z printf, idź na lewo
i prawo, co?
Co mamy opisują, że cytowany ciąg jako bardziej ogólnie?
>> Więc to jest argument.
Za każdym razem, musisz użyć funkcji, jak printf, a następnie otwarty nawias i
zamknij nawias i coś wewnątrz to, czy jest to ciąg znaków lub
całkowita, lub cokolwiek innego, co w między te nawiasy nazywa
argumentem.
>> A argument, tylko wpływa Zachowanie z funkcji.
W tym przypadku, to jest całkiem jasne, w jaki sposób.
x <y jest to, co jest przekazywane w, że tak powiem, jako argument.
I printf będzie wydrukować dokładnie to.
Bo na pewno, że rok temu, osoba, który realizowany printf nie miał pojęcia,
co ludzkie następców zamiar użyć printf dla.
Więc dlatego argumenty istnieją, wpływać na zachowanie tych funkcji, po
zostały napisane.
>> Teraz wyrażenie logiczne.
Widzieliśmy to wcześniej w Scratch.
Okazuje się w C można również "lub" je razem, że tak powiem.
Dwa pręty pionowe oznacza, że ​​ten blok kodu, to to zrobić,
wykonać, jeśli pierwszy warunek jest spełniony lub drugi warunek jest spełniony.
I choć może nie zrobili to w Scratch, to rzeczywiście może
to zrobić w podstaw, można również wyrażać się inaczej -
Jeśli pierwszy i drugi warunek warunek jest spełniony, to nie to, co jest
wewnątrz nawiasy.
>> I tak na marginesie, to jest powód, double i double Ampersand
pionowy pasek, zobaczymy ostatecznie że jeden pionowy pasek i
single Ampersand rzeczywiście mają różne czyli w C. Tak więc teraz,
że powielanie symboli jest zamierzone.
>> Warto więc przedstawić krótko, ten drugi trochę składni.
To nie całkiem przenieść na Scratch, ale twierdzą, że mogę
wdrożenie pojęcia czy innego, jeśli else, jeśli inny, jeśli else korzystania
coś, co nazywa instrukcji switch.
A jedynym powodem tego naprawdę istnieje jest po prostu dać, programista,
nieco inny sposób rozwiązywania niektórych Problem, choć logicznie
nie daje żadnych nowych możliwości.
>> Mam tu na myśli to.
Kiedy mówisz, przełącznik, a następnie spację, a następnie para nawiasów, wewnątrz
które idzie wyrażenie -
i to może być trochę nieoczywisty na początku, ale to nie jest argument,
technicznie, ponieważ switch nie jest funkcją.
Więc teraz, po prostu zakładamy, że używamy nawiasy w różnych miejscach
z różnych powodów.
>> Więc włącz wypowiedzi oznacza, że ​​może umieścić zmienną wewnątrz tych
nawiasy gdzie jest napisane wypowiedzi.
A potem, jeśli zmienna -
Przypuszczam, że to się nazywa x, a to jest po prostu liczbą całkowitą -
Można następnie wyliczyć w moim slajdzie tu coś takiego.
Jeśli x jest moja zmienna, a ja chcesz coś zrobić, jeśli x
równa 1, można to zrobić.
>> Jeśli zamiast tego chcesz coś zrobić jeśli x jest 2, może to zrobić.
Inaczej, jeśli chcę zrobić coś innego całości, mogę mieć sprawę za zwłokę
takim przypadku zrobić, to coś innego.
Więc w tym sensie jest to odpowiednik jeśli x jest równa jest równa 1, else if else,
ale wspominam o tym teraz, tylko dlatego, zobaczymy go ponownie.
Ale teraz, po prostu wiem, że ono istnieje.
>> Dobrze.
Więc te kilka ostatnich są nieco bardziej skomplikowane na pierwszy rzut oka, ale robią
coś całkiem proste.
Do pętli w C jest fragment kodu, który po prostu robi coś znowu i
znowu i znowu.
I tylko denerwujące rzeczą jest to, że jest to, że jest to trochę tajemnicze
wyrazić się w ten cykliczny wzór, ale świat znormalizowana
w następujący sposób.
>> Podczas korzystania z pętli for, masz para nawiasów ponownie.
I zauważyć dwa średniki tam.
Te dwa średniki oddzielne trzy Różne wyrażenia wewnątrz
nawiasy.
Jednym z nich jest tak zwane uruchamiania.
Jednym z nich jest tak zwany stan.
I jeden jest tak zwane aktualizacje.
>> Patrząc na to w sposób abstrakcyjny, jest to zupełnie nieoczywiste, więc spójrzmy
w konkretnym przykładzie.
W Scratch mieliśmy blok powtarzania.
A ten blok powiedział powtórzyć 10 razy, powiedzmy "Hello, world". Pozwól, że zastrzeżenia do
teraz, i będziemy wracać do tego, a to też będzie bardziej znane
Ci niedługo odpowiednik C Kod może być uznane to -
na rachunku oraz przestrzeni, para nawiasów, zauważają średników w
tam, co oddzielić trzy odrębne rzeczy, inicjalizacji
Stan i zmiana.
>> I zgadywać, co Najpierw robi.
Int i = 0.
Surowcem laika, co jest że robi dla nas, chyba?
Więc tak.
Jest to deklaracja zmiennej o nazwie i, i to co daje, jakie wartości?
0.
Więc to tworzenie zmiennej o nazwie i, przechowywania wartości 0 w nim.
To tak zwane inicjalizacji.
>> Dobra, teraz ja twierdził przed że środkowej rzeczy, i
<10, to ten stan.
Więc to, co robi?
A co do pętli, gdy nie Program z pętli for jest prowadzony, jest
za każdym razem, gdy komputer przechodzi przez ta pętla, od góry do dołu, od góry do
dno, tak jak was zrobił, gdy licząc siebie i siadając,
znowu i znowu i znowu, komputer będzie
aby sprawdzić ten warunek.
I, jeśli jest mniejsze niż 10, to zrobi to ponownie.
Jeśli I jest mniejsza niż 10, to zrobi to ponownie.
Jeśli I jest mniejsza niż dziesięć, to zrobi to ponownie.
Tak, że wydaje się sugerować, że Mam nadzieję, że się zmienia.
W przeciwnym razie mielibyśmy nieskończoną pętlę.
I rzeczywiście, i zmienia się, ponieważ Ostatnią rzeczą, po średnikiem tam
jest trochę tajemnicze składnia i + +.
Ale tych, którzy już to zrobisz wcześniej, że po prostu oznacza,
po prostu to, co?
>> Studenci: [wstawienie GŁOSÓW].
>> DAVID MALAN: Dodaj 1 do I.
Zwiększ i..
Tak więc widzieliśmy puzzle Scratch piece na to, rzeczywiście.
To nie wygląda i + +, ale to po prostu oznacza, po prostu, zwiększamy
wartość i przez 1 za każdym razem to zrobić.
Tak dosłownie, należy rozpocząć od Inicjowanie do 0.
Następnie należy sprawdzić swoją kondycję.
Czy 0 mniej niż 10?
Tak.
Idziemy przez pętlę.
>> Następną rzeczą, jaką twierdzą komputera zamiar zrobić, to to będzie
do zwiększania i.
Więc i teraz 1.
Sprawdza stan.
Czy 1 mniej niż 10?
Oczywiście.
Więc robi to ponownie.
Potem przyrosty i + + do 2.
Czy 2 mniej niż 10?
Tak.
I znowu i znowu i znowu.
I w końcu, ze względu na plus plussing, mamy do i jest równe 10.
10 mniej niż 10?
No, oczywiście nie.
I to jest punkt, w którym do pętli po prostu przestaje.
A jeśli masz więcej kodu na ekran na dole, komputer
Wpływy do uruchomienia tego kodu zamiast.
>> Więc jeszcze raz, chociaż to będzie wyglądać i czuć się trochę dziwnie
po pierwsze, z pewnością dla tych, którzy nigdy nie zaprogramowany wcześniej,
dosłownie zmniejsza koncepcyjnie do tego, co w przeciwnym razie bardzo
proste puzzle piece w Scratch.
>> Dobra, obiecałem, że bym być inne analogi w Scratch.
Jest to jeden też.
I zobaczyliśmy tę chwilę ostatni raz.
Ale pamiętam na zawsze zablokować w Scratch?
To po prostu robi coś na zawsze?
I twierdził, że można wdrożyć To, w ten sposób.
I rzeczywiście można wdrożyć to na kilka różnych sposobów.
>> Ale pętla jest po prostu inna sposób w C wyrażania siebie.
Na koniec dnia, nie można zrobić Wszystko z pętli while, że
nie może się na pętli.
Są więc w końcu dzień funkcjonalnie takie same.
Ale to pozwala wyrazić siebie trochę inaczej w
w następujący sposób.
>> Z pętli while, to, co jest w nawiasy, które jest sprawdzane ponownie i
znowu i znowu.
I tak szybko, jak to wyrażenie jest fałszywe, następnie pętla zatrzymuje wykonywanie,
i komputer przechodzi do uruchomić jakikolwiek inny kod, który
posiada w swoim archiwum.
>> Ale, co ciekawe, jest tu że dosłownie wpisane prawdziwe.
A prawda jest typ Boolean wartości, prawda czy fałsz.
Więc może nigdy stać się prawdziwym false, jeśli mam dosłownie
zakodowane go do mojego programu?
Więc nie ma.
To trochę dziwne, że to zrobiłem.
Ale prawda jest prawdą.
Nie ma plus plussing.
Nie ma sensu zmiennych w tutaj.
Tak, bo zakodowane przy prawdziwe, to pętla zawsze będzie oceniać
znowu i znowu i znowu.
>> Tak jak wiele razy to hello world do druku na ekranie?
Zawsze.
Nieskończoną liczbę razy, aż umiera baterii lub innych zewnętrznych
zdarzenie.
Więc to nie jest chyba najlepszy program napisać, że jeśli użytkownik
nigdy nie może zakończyć swój program, to chyba nie to co chciałeś.
>> Ale czasami, programy powinny ma nieskończoną pętlę.
Na przykład, jeśli komputer ma Zegar na niego, to na pewno będzie
ładne, czy zegar to nie zachować aktualizacji się zawsze, choć raz
sekund lub raz minuty lub coś w tym stylu.
Więc nawet nieskończone pętle mają swoje miejsce.
>> Dobrze.
Wreszcie, ten jeden.
A ten jest trochę inaczej funkcjonalnie, i wrócimy do
to prawdopodobnie w Pset 1.
Ale jest jeszcze jeden rodzaj pętli nazywa robić podczas pętli.
I tylko różnicą między zrobić, gdy pętla i, powiedzmy, pętli while,
Jest to warunek, nie jest zaznaczone przed wykonaniem kodu, ale po
wykonać kod.
Tak więc u góry na chwilę loop, natomiast zrobić, gdy
sprawdza je na dole.
>> A to po prostu oznacza, że ​​pętla zazwyczaj wykonać więcej razy
lub mniej razy niż pętli while?
Potencjalnie więcej razy, bo zrobić , podczas gdy pętla jest wyraźnie mówią to zrobić,
tylko po co wskazywać sprawdzić jeśli wewnątrz stan
nawiasy, jest prawdą.
>> Więc zobaczymy, to jeszcze raz prawdopodobnie w Pset 1.
Jeśli kiedykolwiek chcesz zrobić coś na najmniej raz, a potem być może trochę więcej
razy, to jest dobre konstrukt użyciu.
Ale pętla, przeciwnie, będą sprawdzić jego stan jako pierwszy.
I to do pętli w C, nie a, a, a dla pętli.
I znowu, map całkiem ładnie z powrotem do zera, z wyjątkiem tego jednego nie
dość mają ten sam analog w Scratch.
>> Cóż, jak o, teraz, zmienne?
Tak to jest jak się oświadczył zmienną składniowo drugi dzień.
Miałem int, które twierdził jest liczbą całkowitą.
I wtedy mieliśmy zmienną licznika, i średnik.
Więc co to jest linia kodu robi?
To jest, po prostu, deklarując zmienna -
to jest, pytając komputer, daj mi część pamięci, daj mi kilka bitów - w
które można przechowywać, co?
Int.
I średnik oznacza po prostu koniec linii kodu.
>> Teraz druga linia jest prawdopodobnie pretty odgadnięcia.
Co to jest licznik = 0; robi?
To przypisanie 0 w kontratakach.
I tak to jest inna rzecz to jest trochę denerwujące
w porównaniu z, powiedzmy, algebry.
Natomiast w algebrze, znak równości oznacza równa, tutaj w C, równa
Znak oznacza przypisanie.
Więc oznacza to, szuka tego, co jest na prawo do tego, co znajduje się po lewej stronie.
I zobaczymy inny symbol, jest równa równa się, gdy chcemy faktycznie przetestować
do jakości, nieco denerwująco.
>> Ale to jest trochę nieefektywne.
To trochę denerwujące, że mam zadeklarować zmienną i
następnie nadać mu wartość.
Więc C faktycznie pozwala nam uprościć i po prostu zrobić to wszystko naraz.
Można zadeklarować zmienną z lewej strony.
Nadal można wykonać zadanie na prawo umieszczając ten znak równości w
middle.
Tak więc na koniec dnia, te dwa są odpowiednik, ale ten, szczerze mówiąc,
to chyba lepiej zwyczaj, aby dostać się tylko dlatego, że jest to trochę mniej
kod, jest to trochę łatwiejsze do odczytania, i to tylko zaostrza
Twój kod, by tak rzec.
>> Wszelkie pytania do tej pory na pętli, na zmiennych, na warunkach, na
Boolean, albo technicznie lub koncepcyjnie?
Dobrze.
Więc teraz to następny dostaje trochę bardziej interesująca.
I to jest przykład kładę się ostatnio raz, że po prostu mapuje przykład Scratch
na do C.
>> Więc funkcja.
W laika, co to jest funkcja?
Masz być odważniejsze z Twojej odpowiedzi.
Co to jest funkcja?
>> STUDENT: Czy coś.
>> DAVID MALAN: Co to jest?
>> STUDENT: Czy coś.
>> DAVID MALAN: Czy coś.
OK.
Zaczniemy tam.
Więc funkcja coś robi.
Więc jest to fragment kodu, który znajduje się zasadniczo realizowane w innym miejscu, że
rzeczywiście robi coś.
Teraz, co ciekawe o funkcji jest to, że może to potrwać wejście,
i może produkować wyjście.
I niech to rzeczywiście podjąć Spójrz na to.
>> Więc człowiek za kurtyną było celowe chwilą.
Tutaj mamy tabelę.
Ale załóżmy, że rzeczywiście stanowi duże pole.
Tak więc jest to tak zwana czarna skrzynka.
I na ogół, w konstrukcji, w komputerze nauki, czarne skrzynki tylko odnieść się
sztuk funkcjonalności, że ktoś wprowadziła, a ty nie
muszą wiedzieć, czy obchodzi, jak to jest realizowany pod maską.
Właśnie obchodzi, że ta czarna skrzynka, co my teraz zacząć dzwonić
funkcja, coś robi.
>> Tak więc, na przykład, gdy ta czarna skrzynka na etap tutaj reprezentuje printf,
Funkcja, wiem z poprzednich przykładów że printf ma jeden lub więcej
argumenty, a pierwszy z nich Argumenty powinny być ciągiem, jak
"Hello, world". Cóż, jeśli jestem osobą pisanie programu i chcę
używać printf, że, na przykład, może weź kawałek białego papieru tu i
czarny marker i pisać na nim -
I błędnie "świat" -
H-E-L-L-O.
>> Więc wezmę czarny marker i będę napisz, jak duży i czytelny, jak mogę na
ten kawałek papieru, "hello, world" A teraz twierdzi, że taki jest mój argument.
Jest to ciąg przedstawiciele z kawałek białego papieru.
A moje wejście teraz do funkcji printf będzie to.
Więc apeluję printf, przechodząc ten argument jako wejście do niego.
>> A teraz, nie wiem, w jaki sposób osoba, która wrote printf zrobił to rok temu, ale
I wiem, że z jego dokumentacją jego celem w życiu jest do drukowania, co
dostarczyć je jako wejście.
I tak, mimo że ta implementacja to nie wiemy o mnie
pod maską, teraz Widzę, oh, to jest zrobione.
To zostało wydrukowane coś na ekranie.
A teraz kontrolować programu, jeśli istnieje było więcej linii kodu, by
powrócił do mnie.
I tak, że Colton -
błogosławi jego serce, ukrywa się tutaj pod Stół z przodu was wszystkich -
jest zamierzone, że nie wiem, i nie obchodzi mnie, jak printf jest
realizowane.
Po prostu wiem, znowu, z jego dokumentacja, co robi i jak się
am powinien go używać.
>> Teraz przypominam sobie, że printf może dostać trochę bardziej wyrafinowane.
Znów jesteśmy tylko mówić o odpowiednik bloku Say Scratch jest.
Ale ja też zrobiłem ten ostatni raz.
Chciałem, aby mój program, witaj trochę bardziej dynamiczny i nie tylko trudno
coś jak kod "świecie", a zdecydowanie nie trudno coś code
arbitralna jak D-A-V-I-D do programu.
Chciałem zapytać użytkownika o jego lub jej imię i nazwisko, a następnie zrobić coś z
że ciąg, że zapewniają one.
>> Więc coś jest trochę inaczej tutaj. printf, chwilę temu,
czy rzeczywiście coś zrobić, ale to nie zwraca niczego do mnie.
Prawda?
Colton nie podaj mi coś z powrotem, nie kawałek papieru.
Nie było tylko efektem ubocznym.
Mój zapewnienie "hello, world" jako argument Colton spowodowała
Efektem ubocznym słowa, kilka słów, pojawiające się na ekranie.
>> getstring, choć jest trochę inna. getstring jest również
funkcjonować, ale zwraca jakąś wartość.
To nie wystarczy estetyczny efekt uboczny.
To rzeczywiście daje mi, osoba telefonicznie lub przy użyciu funkcji,
coś z powrotem.
Więc w tym przypadku, getstring jest wywoływana z GetString otwarte
nawias, blisko nawias.
Czy getstring zatem wziąć wszelkie argumenty lub wkład?
Nie, to nie wydaje.
Jego celem w życiu jest tylko po to żeby łańcuch.
To nie potrzebuje więcej szczegółów niż to.
Więc pozwól mi iść dalej i udawać, że znowu ta czarna skrzynka nie jest printf,
ale getstring, i niech mnie, osobę pisanie tego programu, zadzwoń lub użyć
GetString by tylko pisanie G-E-T-S-T-R-I-N-G, otwarty nawias, w pobliżu
nawias, getstring.
>> Teraz nie mam pojęcia, jak CS50 staff realizowane GetString, ale wiem, że
jeśli wystarczająco długo czekać, będzie wykonywać swoje co pod maską, może za pomocą
niektóre zmienne, może korzystać z niektórych warunki, może korzystać z niektórych pętli,
może korzystać z niektórych funkcji, być może za pomocą -
tylko próbuje stoisku - być może za pomocą niektóre inne funkcje programowania.
Ale jeśli wystarczająco długo czekać - w rzeczywistości, w komputerze, tak się dzieje
super szybki -
czy mam czekać na tyle długo, funkcja ta getstring dostanie ciąg
od użytkownika, który jest prawdopodobnie wpisując to na ich klawiaturze, a
wtedy, gdy odbywa się getString te znaki od użytkownika
i przechowywanie ich na łańcuch, które Funkcja, getstring, będzie miał
gotowy dla mnie jakieś wyjście, które jestem będzie odzyskać w drodze
Operator przypisania.
>> A gdy odejdę, rzeczywiście, do wyjścia tutaj, Obosi hojnie
udział, nie wiedząc o tym wcześniej, pisząc jego nazwisko na tym
zmienna, która reprezentuje ciąg.
Teraz operator przypisania oznacza, nawet chociaż to może czuć się trochę
zbędne, tak naprawdę nie potrzebują aby mój własny egzemplarz tego.
Ze względu na lewą side - ups! -
zauważyć, że w istocie mają ciąg wymienić na lewej stronie.
Więc ja też zamiar zrobić mój własny egzemplarz tego.
I to jest trochę białego kłamstwa, bo zobaczymy w tydzień lub dwa-tych
raz, że łańcuchy nie są w rzeczywistości , co wydaje się być.
>> Ale teraz, tutaj jest zwracana wartość.
Oto moja kopia po za pomocą operatora przypisania.
A teraz, co chcę robić dalej?
Teraz mamy drugi z dwóch linii kodu.
Więc teraz chcę zadzwonić printf.
Udajmy się teraz, że czarny box jest z powrotem do bycia
printf i nie getstring.
>> Printf tym razem będzie się, jak wiele argumentów?
Więc spójrz, to jest jak dwóch.
Są dwa przecinki tam, ale jeden z tych przecinkami, to
wewnątrz cudzysłowów.
Tak więc pierwszy argument jest dosłownie będzie to.
H-E-L-L-O, przecinek, procent s, backslash-n.
I teraz zapewnia nie jeden argument, ale dwa argumenty do printf.
>> A co printf robić z te dwa wejścia po I przekazać je w
jako argumenty?
To ma się drugi im, co nazwałem nazwa, więc
Drugi kawałek papieru napisałem chwilą nazywa nazwa.
To będzie wtyczką wartości wewnątrz tej zmiennej do zastępczego,
S%, tak że znowu się tylko chwilę czas, zobaczymy efekt uboczny
Po wywołaniu printf, w którym teraz zobaczyć nie "hello, world", ale "hello,
Obosi ".
>> Więc Wielkie brawa dla obu nasi wolontariusze, tylko jeden z nich wiedział
byłoby to dzieje.
Dobrze.
Tak więc, być może, proste, jak to było, Oczywiście, jeśli jesteś już zaznajomiony
z takich, miejmy nadzieję, że nigdy nie będzie zapominać, że zwłaszcza wizualnych, jak
funkcje działają.
>> Więc jest więcej niż tylko getstring.
Wewnątrz CS50 biblioteki, tam cała masa funkcji, z których wszystkie
są aktywowane tylko w celu wyjaśnienia że napisaliśmy te funkcje.
Zazwyczaj, w C, niemal każdy inny Funkcja będziesz używać jest małe.
Ale świadomie używać wielkich liter po prostu wyjaśnić, że te
są kółka z rodzaju, że my będziemy używać do kilku tygodni, że
uprościć proces przenoszenia wejście od użytkownika.
>> Biblioteka CS50 nic nie robi że sami nie mogli zrobić, by
tylko przy użyciu kodu C oldschool podręcznik.
Ale znowu, używamy ich jako szkolenia Koła rodzaju dla zaledwie kilku
tydzień tak, że możemy pozbyć się Złożoność, że wkrótce zrozumieć
samemu robić coś jak stosunkowo proste, jak się
wejściowe od użytkownika.
>> Więc wiem, że będziesz miał dostęp do getchar, GetDouble odwołują -
podwoić.
What's - a następnie GetFloat.
Co znajduje się unosić?
Zacznijmy tam.
>> STUDENT: [niesłyszalne].
>> DAVID MALAN: Tak.
Jest to liczba z przecinkiem.
Tak więc, podczas gdy Int. jest liczbą całkowitą, która Jest to tylko numer z 0 do 9,
niektóre ich liczbę powtórzeń, Pływak jest coś
z przecinkiem.
A double, w międzyczasie, jest również liczba z przecinkiem, ale bardziej
liczby po przecinku punkt, potencjalnie.
>> Więc wracamy do tego niedługo.
Typowo jednak, każdy z tych typów Dane, każdy z tych typów zmiennych
że biblioteka jak nasza może powrócić do Ci, stosować różne liczby bitów
przechowywania informacji.
Zazwyczaj, Char, co oznacza po prostu jeden znak, używa 8 bitów.
I to jest rzeczywiście zgodne z naszymi byte wolontariuszy, którzy w zeszłym tygodniu
podszedł i stanowił jeden ASCII na raz.
Więc Char jest 8 bitów.
>> Pływak dzieje się 32 bitów, zwykle.
A double, jak można się domyślać, jest faktycznie 64 bitów, co jest po prostu więcej,
co oznacza, że ​​można mieć większy numery lub bardziej precyzyjne.
Ale znowu, więcej o tym innym razem.
GetLongLong, tymczasem, choć głupio nazwany, jest tak naprawdę
Liczba całkowita, która jest dwa razy większy, dwa razy długo, co może, a regularne
całkowita, 64 bitów zamiast 32.
I GetString używaliśmy.
>> Ale jak się okazuje, w CS50 bibliotece który jest realizowany, jak zobaczymy, w
Forma z dwóch plików, z których nazywa cs50.h, ma dwa inne
typy danych w nim.
Boolean nie istnieją w C możesz symulować je tylko przy użyciu 0s i 1s
przez programy.
Ale my w CS50 biblioteki stworzyły symbole "true" i "false"
do reprezentowania 1 i 0, więc nie mieć na dysku coś kodu
dosłownie jak 1 i 0.
Ale zobaczymy te ponownie.
>> String, też nie istnieje.
I dlatego wspomniałem, że to nieco białego kłamstwa teraz.
Ale my będziemy odwinąć tego Warstwa przed długi.
Ale teraz, ciąg jest ciąg znaków.
>> Tymczasem w C, to rzeczywiście mają różne typy danych.
Zawiadomienie to są małe.
Więc funkcje obejrzałeś chwilą są funkcje napisane przez CS50 tym
wróci do Ciebie wartość, która spada do jednej z tych kategorii.
>> A pary po prostu oszukiwać arkuszy sadzić seed tutaj. printf nie tylko
podjęcia% s jako zastępcze.
To trwa do% d liczb dziesiętnych, lub% chciałbym pracować również.
F% jest liczb zmiennoprzecinkowych. C% dla char, jeśli chcesz po prostu podłącz jeden
znaków w ciągu preformatowanego jak robiliśmy, można użyć% c.
>> A potem, trochę irytująco,% lld jest przez długi, długi przecinku liczby całkowitej,
co oznacza po prostu, jeśli potrzebujesz naprawdę Duża liczba i używasz czegoś
zwany long long, które będziemy się powrót do w Pset, można użyć LLD% do
powiedzieć printf, wtyczkę naprawdę duży Liczba całkowita o drodze jej drugi lub
inny argument.
>> I wreszcie, obiecałem, że istnieje kilka innych escape
sekwencje printf obsługuje.
Widzieliśmy backslash-n.
Backslash-r można zobaczyć.
Jest to swego rodzaju rzeczy, old-school.
Jeśli kiedykolwiek z prawdziwych lat maszyny do pisania temu i wyciągnął na korby
które nie tylko obraca tarczę do przesunąć linię, ale także przeniesione
Cała sprawa całą drogę z powrotem na w lewo, dobrze, tylko odwrotny ukośnik-r
zasadniczo przesuwa kursor plecy na początku linii
bez ruchu w dół.
Ale znowu, więcej na ten temat, Być może w przyszłości.
>> Backslash cudzysłów, ukośnik-cudzysłów, backslash-backslash jest
rozwiązanie malutkie zagadki I wspomniałem wcześniej.
I backslash-0 jest rzeczywiście bardzo interesujące.
Ale wrócimy do że przed długi.
>> Więc pozwól mi iść do teraz, CS50 Urządzenie, i niech faktycznie
nagrzewa się w jednym z przykładów udało nam się już, a następnie przejść do
coś nieco bardziej skomplikowane.
Jeśli więc otworzyć swój program nazywa gedit -
to jest mój edytor graficzny.
I mogę to zrobić -
pozwól mi zamknąć to okno tam -
w drodze tej ikony na dół, gedit, w lewym dolnym
rogu obok menu.
>> Mam zamiar iść do przodu i góry, i zapisać ten przykład do, powiedzmy, John
Harvardu folderów.
Folder John Harvard jest właśnie jego dom Katalog, w którym wszystkie swoje pliki żyć
domyślnie.
I mam zamiar zapisać to jako Plik o nazwie hello-0.c.
I wybrałem tę nazwę tak, że linii z kodem próbki na
Kursu na stronie internetowej oraz w YouTube filmy online.
>> Więc teraz mam zamiar zacząć napisać mój pierwszy program.
Pozwól mi przybliżyć na czytelności.
I zamierzam iść dalej i powiedzieć, int Głównym void, który tak po prostu
żółta ikonka uruchamia program.
Dostałem w zwyczaju na rok otwarcia mój nawias klamrowy, a następnie
także zamknięcie go, a następnie wraca do gdzie chcę umieścić moje kod, po prostu
bo to pomaga mi utrzymać wszystko wyważony, zwłaszcza, że ​​moje
Program ma długi.
>> A teraz, tutaj, mam zamiar iść do przodu i powiedzieć, printf, przytoczyć cytatu,
hello world, backslash-n, w pobliżu cytat, zamknij nawias, średnik.
Więc jestem po prostu powtarzając wszystko mamy brał za pewnik, tak daleko.
Teraz mam zamiar pomniejszyć.
>> I to tu okno terminalu, co wolno mi robić w ten czarny
i białe okna?
Co mogę użyć go do?
Tak to jest, gdy uruchomię poleceń i gdzie mogę skompilować rzeczy.
A ja zamierzam zachować proste.
Mam zamiar korzystać z programu Dodać nazywane, która nie jest
technicznie kompilator.
Kompilator w nazwie Szczęk, ale wrócimy do tego w
tydzień lub dwa czas.
>> Na razie jestem po prostu się do make hello-0, ale tych, którzy byli
Porównując w waszych umysłach, co właśnie wpisane do tego, co powinien mieć wpisane mogą
wiemy już, że zrobiłem coś nie tak.
Teraz, jest wyraźnie niektóre błędy.
Przed I nawet patrzeć na to, co one są, każdy myśli, co do tego, co zrobiłem źle?
>> Studenci: [wstawienie GŁOSÓW].
>> DAVID MALAN: Tak.
Brakuje mi biblioteki w pliku nagłówka.
Każdy z tych plików. H nazywa header plików, a oni wspólnie
należą do rzeczy nazywane biblioteki.
Biblioteki są tylko fragmenty kodu że inni ludzie napisali.
Więc średnia [? i?] biblioteki zbiór plików zawierających kod
że inni ludzie napisali.
>> Tak mi brakuje tego.
Więc dlaczego ja się błąd?
Cóż, pozwól mi przejść z powrotem w moje okno terminalu tutaj.
I niestety, w C, a w wielu języki programowania, w szczególności
jeśli to wszystko jest dla ciebie nowa, error Komunikaty są precyzyjne, ale są również
dość tajemnicze.
A błąd tu, w kolorze czerwonym, jest "Niejawnie deklarowania funkcji biblioteki
printf z rodzaju ", a następnie przewija do następnej linii, "int const char *,
... "To po prostu staje się naprawdę Zdecydowana szybko.
>> Ale to, co należy zacząć robić, jeśli, ponownie, nowy w tym wszystkim, jest po prostu
zaczynają szukać słów kluczowych.
Oczywiste jest, że nie może zrozumieć, pół słów widzę jeszcze.
Będzie, jeśli w ciągu tygodnia.
Ale widzę printf.
I że należy rozpocząć przed długi, aby jog pamięci, wszystko w porządku, printf.
Coś jest nie tak z printf.
Czy ja pisze to źle?
Nie, to nie wygląda - oh.
I nie można go używać, dopóki nie nauczy kompilator, że ono istnieje.
A więc znowu pójść ze swoimi instynktami, nawet jeśli w rzeczywistości nie rozumieją
rzeczywiste komunikaty o błędach.
>> I rzeczywiście, rozwiązaniem jest tu tylko umieścić go na górnej części pliku
tak, resaving mój plik z Control-S lub w menu Plik.
I jeśli teraz wrócić tu, Mam zamiar usunąć tego.
Control-L jest po prostu dobry sposób , aby wyczyścić ekran.
A potem mam zamiar wpisać "make komentarzy 0 "Enter, a teraz wciąż widzę
tajemniczy ciąg symboli, ale wrócimy do tego.
To, co czyni robi dla Ciebie.
To automatyzacji procesu podejmowania Komenda udziałem dość irytujące
Szczęk, rzeczywisty kompilator.
Ale fakt, że mam żadnych błędów oznacza że ta sprawa powinna działać.
>> Więc jestem teraz zrobić - pozwól mi przybliżyć ponownie -
./hello-0 Enter, i rzeczywiście, widzę "Hello, world". Więc teraz zwiększyć
to bardzo nieznacznie tylko replikować kroki zamierzaliśmy.
Mam zamiar zmienić nazwę tego z Zapisz jako, aby hello1.c.
A teraz mam zamiar zadeklarować zmienną nazwie nazwa, więc ciągi,
i mam zamiar umieścić w nim wartość cytatem cytatu
D--V-I-D close-quote średnik.
A teraz mam zamiar wymienić "świat" z tego, co zastępczym ciągu znaków?
S%.
>> A teraz, jak wiele argumentów powinien printf się tym razem?
Więc dwa.
Więc idę poza cudzysłów.
I wpisz "nazwę" po przecinku.
Ale zrobiłem coś jeszcze nie tak tym razem.
Ale załóżmy, że ja nie sobie sprawę, że jeszcze.
Puść mnie tutaj.
>> I zauważ też, ja się trochę znudzony wpisując "make komentarzy 0" wszystkie
Czas, "make" i to wszystko.
Tak więc, jak się okazuje, w Linusa można często uderzył w górę strzałek na
klawiatury i rzeczywiście można przewijać przez wszystkie polecenia, które ja
wykonany poprzedni właśnie teraz.
Więc jeśli mogę to zrobić, Up, Up, jest dokonać komentarzy 0.
Nie chcę tego.
Chcę tylko, by to zmienić, aby witam 1 to czas, Enter.
Ostatecznie, że będzie zaoszczędzić trochę czasu.
>> Dobrze.
Niestety, nie jest błąd.
Więc pozwól mi przewijanie w górę.
Wygląda to naprawdę zmasakrowany ten program.
Chodzi mi o to, mój Boże, to jest dwa wiersze kodu, i jego 10 wierszy błędów.
Ale spójrz na górę jeden pierwszy.
Korzystanie z nielegalnego łańcucha identyfikatora.
Czy to znaczy średnia i N?
No ja nie.
Miałem na myśli ciąg.
>> Ale gdzie jest zmienna łańcuchowa Rodzaj oświadczył, DD mówimy?
Więc to jest w CS50 biblioteki.
Więc to nie wystarczy, w tych pierwszych Kilka tygodni, po prostu użyć
co C daje nam.
Mam zamiar iść tutaj, i ja może umieścić go wyżej lub niżej, ale będę
po prostu zachować to w kolejności alfabetycznej utrzymać wszystko uporządkowane.
Zamierzam to cs50.h, która jest zainstalowana na
Ci na CS50 urządzenia.
I to jest open source, więc nawet osoby w internecie, można go używać w ich
własne komputery.
Ale chodzi o CS50 urządzenia.
>> Więc teraz pozwól mi wrócić i ponownie skompilować to z robić cześć 1.
Cholera.
Jeszcze inny błąd.
Pozwól mi przejść do pierwszej, choć.
Ten jest trochę skomplikowane.
Wielu postaci stałej.
To nie pomaga mi.
Ale zauważ, Szczęk jest co najmniej mało nieco przyzwoite, przy czym z mało
zielony daszek symbol, to mówi o to, gdzie wkręca się.
Dlaczego jest to, wskazując, że niewiele z zielona strzałka, na jednym cytatem następnego
w moim imieniu?
>> Więc to jest jedna z tych rzeczy, po prostu przyzwyczaić, zwłaszcza jeśli już
programowaniu w Pythonie, lub JavaScript, lub innych języków, w którym ten fragment
nie ma znaczenia.
W języku C, to ma znaczenie.
Jeśli deklarując ciąg, który jest sekwencję 0 lub więcej znaków,
faktycznie musi używać cudzysłowów.
Więc tak naprawdę trzeba zmienić to z powrotem otworzyć ofertę, blisko cytat, z
cudzysłowy.
Pojedyncze cudzysłowy mają swoje miejsce, ale tylko wtedy, gdy używasz osoby
znaki, ale o tym innym razem.
Na razie cudzysłowy są konieczne.
>> Więc teraz, pozwól mi wrócić do mojego terminalu okna, zrobić cześć 1.
A kto jest przekonany,?
Czy ten program teraz będzie skompilować poprawnie?
OK.
Tak więc trzy z nas myśli to.
Dobrze.
Wprowadź.
I faktycznie.
Więc nie ma żadnych błędów tym razem, nawet chociaż program ten jest zdobyć trochę
bardziej złożone.
Jeśli teraz zrobić kropka ukośnik Witaj 1, Enter, to będzie powiedzieć "cześć, David".
>> Ale zróbmy trzeciej iteracji Z tego, gdzie
Program jest naprawdę dynamiczny.
Pozwólcie mi iść dalej i zmienić plik name, tylko dla zachowania spójności z
Pliki będziesz mieć dostępne do ciebie później online.
Wprowadź.
A teraz mam zamiar iść i nie przechowywania "David" zakodowanego tutaj.
Co można zrobić, aby w bardzo prosty poprawić ten program?
>> Mogę zadzwonić GetString.
To może być trochę nieoczywiste co się wydarzyć, więc będę
faktycznie dodać kolejną linię, printf, i powiedzieć: imię, nazwisko, jelita grubego, w pobliżu ofertę, po prostu
dać użytkownikowi monit na ekranie.
A teraz mam zamiar udać się tutaj, a ja jestem zamiar używać skrótu klawiaturowego.
Mam zamiar iść w górę, w górę, i zmienić witam 1 w Hello 2, Enter.
I na szczęście, że robię postępy.
>> A teraz mam zamiar iść w górę do Hello and slash dot
zmienić na 2, Enter.
A teraz mój program -
Będę powiększyć - jest coraz trochę ładniejsza.
Nazwa będzie, powiedzmy, Roba tym razem, Enter, hello, Rob.
Możemy to zrobić ponownie.
Nazwa, Lauren, Enter.
Nazwa, Joseph, Enter.
Nazwa, spróbujmy być trudne, Enter.
Eh.
To naprawdę nie jest błąd.
Więc to jest trochę brzydki.
Więc może moglibyśmy rozwiązać ten problem w przyszłości, nie teraz.
>> Ale jak można instynktownie go o zajęcie
że szczególnym wyzwaniem?
To wygląda po prostu głupi.
Jak unikać rzeczy patrząc głupi?
Tak więc możemy zrobić, OK, słyszałem kilka rzeczy, stan i loop.
Moglibyśmy użyć, jeden, warunek, aby sprawdzić , co jest długością łańcucha
użytkownik dał nam?
A jeśli to jest 0, to jest po prostu zacytować cytatu, oni po prostu wciskamy Enter, a następnie
może powinienem krzyczeć na nich i skłonić ich ponownie.
Ale w jaki sposób skłonić je ponownie?
Cóż, ja również słyszałem pętlę, i mogłem zrobić to znowu i znowu i znowu
monitowania użytkownika o tej samej rzeczy.
>> Dobrze, zróbmy jeszcze jeden przykład stosując różne
Funkcja w CS50 biblioteki.
Pozwól mi zamknąć ten plik.
Pozwólcie mi tworzyć nowy.
A ja nazywam to adder.c, tylko dlatego, jest to łatwe do zrobienia prostych działań arytmetycznych,
nawet jeśli będzie to całkowicie rozczarowująca z tym, co można zrobić,
z każdym nowoczesnym komputerze.
>> Ale pozwól mi iść do przodu i teraz -
I nauczyłem się mojej lekcji ostatni raz - to cs50.h obejmują stdio.h, int
Głównym nieważne, co teraz, ja po prostu wziąć na ślepej wierze, ale zakładamy, że
że będzie zrozumieć, co co oznacza, że ​​przed długi.
I mam zamiar coś powiedzieć jak "Daj mi int."
>> A teraz, jak mogę int?
Chcę ostatecznie zadeklarować zmienną nazwie x typu int i
przechowywania w niej całkowita od użytkownika.
Więc to był łyk.
Ale jeśli ktoś chce zaproponować, w jaki sposób mogę zadeklarować całkowitą o nazwie X?
Int x.
>> Więc to naprawdę jest takie proste.
Daj mi int.
Nazwijmy to x.
Teraz używam operatora przypisania.
I w jaki sposób przechowywać z lewo wartość użytkownika?
Nie chcę zadzwonić GetString, Oczywiście, lecz getInt.
Wszelkie argumenty?
Nie.
Więc to jest otwarty nawias, blisko paren natychmiast, a następnie
średnik kończy linię.
>> Teraz pozwól mi to zrobić ponownie.
Daj mi jeszcze int.
Tym razem zrobię int, niech Nazywamy to r, równa getInt.
A teraz pozwól mi zrobić coś super-prosty jak jakiś matematyki.
Więc printf, suma% d jest zastępczym wew.
A% d, okres, backslash-n.
>> Dobrze.
Tak, że w rzeczywistości nie matematyka jest.
Ale jeśli chcę powiedzieć, sumę tę wartość oraz wartość ta jest równa tej
inne wartości, jak wiele argumentów do Łączna powinienem dawać printf,
ostatecznie?
Tak więc cztery, prawda?
Ten ciąg, a następnie trzy wartości.
Więc x jest pierwsza Chcę być podłączone najpierw do% d.
y będzie następny.
>> A teraz jakby chciał powiedzieć z, ale z nie istnieje.
Ale to nie jest wielka sprawa.
Bo co zrobić instynktownie, zwłaszcza jeśli miał
kalkulator graficzny, co wpisać?
Jak się x plus y?
Więc to nie rzeczywista zmienna jest.
To jest po prostu sumą dwóch inne zmienne.
I to jest w pełni uzasadnione.
C na pewno rozumie proste arytmetyczna tak.
>> Średnik, zapisać.
Teraz pozwól mi zejść tutaj i make dodatek, Enter.
Nie ma błędu, więc to postęp też.
Wpisz dodatek.
A inny skrót klawiaturowy, jeśli zaczynasz się nudzić
wszystkich poleceń -
jeśli zaczniesz wpisywać komendę, jak dot slash reklamy, i to, gdzie
nuda w rzutach, zazwyczaj można trafić Tab mieć komputer zakończyć
resztę frazy dla Ciebie, jeśli to nie jest niejednoznaczna, co powinno przyjść po reklamie.
>> Więc pozwól mi iść do przodu teraz i kliknięciu przycisku Enter.
Daj mi int, 1, 2, i Na szczęście, jest to 3.
Ale jak zawsze, testowania programów nie powinna obniżyć się
tylko próbuje go raz.
Pozwól mi spróbować sprawę narożnik, jak negatywne 1, daj mi 1, a jeden
sprawdza się także.
I prawdopodobnie chcesz zrobić trochę więcej rygorystyczne testy, ale jestem
wygodne, z którym to na.
>> Cóż, teraz spróbujmy innego programu tym razem używa
nieco z innej składni.
Pozwólcie mi stworzyć nowy plik.
Zadzwonię do tego conditions0.c do linii z niektórych kod przykładowy.
I pozwól mi iść do przodu i robić m.in. cs50.h, m.in.
stdio.h, w głównej pustki -
OK.
Proszę bardzo.
Mamy standardowe szablonowe.
>> I tym razem mam zamiar powiedzieć, printf, "Chciałbym, int, proszę," tylko do
dokonać szybka mała bardziej przyjazny.
A teraz chcę się int od użytkownika.
Mam zamiar nazwać n to czas, po prostu bo n brzmi jak liczby.
getInt, a teraz, co zrobić Chcę z nim zrobić?
Cóż, jeśli n jest - a ja powiększyć -
jeśli n jest większe niż 0, chcę wykonać następujące czynności -
printf "Wybrałeś liczbę dodatnią." Else, zamierzam pisać printf "You
odebrał negatywne
liczba. "Wszystko w porządku.
Więc ten program, choć zrobiłem to szybko, wygląda prawo składniowo.
Pozwól mi spróbować.
Sprawdź stan 0.
Wydaje się działać.
Stan 0, wprowadź.
Dajmy mu int z 50.
Wybrałem liczbę dodatnią.
Spróbujmy jeszcze raz.
Stan 0.
Negative 50.
Wybrałem ujemną.
>> Ale teraz, pozwól mi wybrać, co będziemy trzymać nazywając przypadku boisko, które jest bardziej
ciekawy przypadek, że myślisz może dać pewne problemy, 0.
Teraz jestem pewien, że jest to jeden z Kącik, w którym te przypadki jest zero
ani pozytywne, ani negatywne, więc my Program, choć w składniowo
skorygować - kompiluje, to działa - nie jest logicznie poprawne.
Więc co jest prosty fix tutaj, jeśli chcę do wykrycia, jeśli chcę, aby obsłużyć n
równa 0 oddzielnie?
>> Więc jeśli n jest równe 0, to chcę powiedzieć, coś jak printf "Wybrałeś 0".
Pozwól mi spróbować tego teraz.
Pozwól mi wrócić tu, wyczyść moje okno i rekompilacji.
Hm.
Jeden błąd generuje.
Ale chcesz sprawdzić gdy n jest równe 0.
>> Więc jeszcze raz, kolejny głupota przyzwyczaić się do, znak równości jest
Operator przypisania.
Tak więc jest to rzeczywiście błąd, że, technicznie, chociaż kompilator
chronić mnie przed samym sobą, że bym technicznie jest kopiowanie 0 do n, które
nie jest to, co chcę.
Chcę przetestować na rzecz równości z równymi sobie równych.
I tak, że teraz może być moje lepsze rozwiązanie.
>> Pozwól, że w rzeczywistości ponownie zapisać to jako, powiedzmy, warunkach1, jest nowa i ulepszona.
Tak więc jeśli przebudować ten, to by warunki -
ups - dokonać warunkach1 dot slash warunkach1, Enter "Chciałbym int,
proszę. "Mam zamiar iść dalej i wpisz 50.
To wciąż dobry.
Negative 50, nadal dobre.
0, i to, w istocie, wykryto że wybrałem 0.
>> Więc co więcej mogę teraz z tym zrobić?
Cóż, z pewnością możemy robić coraz bardziej skomplikowane rzeczy.
Ale to, co chciałbym zaproponować jest że kończy się na tej uwadze tutaj.
Jeśli podciągnąć to, zobaczysz, być może, twój ulubiony kreskówkowy
do dziś możesz być Nigdy nie rozumiałem.
I to o jakości śmiechu powinieneś dostać z dowcipów CS.
Więc to jest o prawo.
>> Ale bardziej przekonująco, myślałem, bym dać nam trochę liścik do poniedziałku.
Więc zaczęliśmy przy użyciu liczb całkowitych.
Mamy określone pływaków.
Mamy nawet dalej deblu, co znowu daje numery
po przecinku.
>> Ale okazuje się, że unosi się i gra podwójna, i, naprawdę, komputery,
Zasadniczo nie można wyrazić niektóre wartości precyzyjnie.
Wiemy z klas matematycznych, które można dowolną liczbę miejsc po
przecinku.
I można nawet umieścić pionowy pasek powiedzieć to trwać wiecznie.
>> Niestety, nie można naprawdę zrobić w komputerze.
I tak przypadki narożne powstać.
Na przykład, załóżmy, że jesteś robi coś finansowej.
Robisz matematyki w procentach, a
w dolarach i centach.
A te nie cents koniecznie korekty.
Cóż, okazuje się, że frakcje grosze może zacząć dodać, kiedy
modelowane z systemem komputerowym w taki sposób, że Clever
ludzie mogą skorzystać.
>> A ci z was, którzy nie widzieli, ja bym chciał dać 30 sekund teaser
wspaniała Film znany jako Office Space, które będą malować obraz
Problem będziemy zajmować Pierwszą rzeczą, którą w poniedziałek.
Gdybyśmy mogli zwiększyć głośność trochę, dam ci 30
sekunda powierzchni biurowej.
>> [PLAYBACK VIDEO]
>> -To znaczy, ty, ty nie zostały pokazujący się i pojawi się zachować swoją pracę.
>> -Właściwie to są promowane.
>> -I może zaprogramować wirusa, którą zgrać to miejsce off wielki czas.
>> -No cóż, jak to działa?
>> -Za każdym razem transakcja jest bankiem których odsetki liczone są, i tam
są tysiące dni, komputer kończy się z tych frakcji centa.
>> -Ale ja nie zamierzam nic nielegalnego.
>> -Niezgodne z prawem?
Samir, to jest Ameryka.
>> -Musimy Przysięgam na Boga.
>> -Jeśli nikt nie wie o tym ale nam, wszystko w porządku?
Nie ma nikogo z rodziny, nie dziewczyny, nikt.
>> -Oczywiście.
>> -Zgadzam się.
>> -Nie martw się, stary.
I nikomu nie powie albo.
>> [END PLAYBACK VIDEO]
>> DAVID MALAN: Więc to jest więc, CS50, że był Office Space, i to będzie wszystko
sensu w poniedziałek.
Do zobaczenia.
>> Narrator: Na następnym CS50, Roba dostosowuje się do bycia off
Posiłki Harvard.