>> SPEAKER 1: W porządku.
Witamy z powrotem.
To jest Tydzień Dwa CS50 i mamy dotychczas funkcji, ale był używany
w dużym stopniu wziąć je za pewnik.
Użyliśmy printf, która ma Efektem ubocznym drukowania
rzeczy na ekranie.
Użyliśmy get-int, dostać unosić.
>> Ale co, jeśli rzeczywiście chcemy stworzyć własne funkcje, jak niektóre
może już się rozpoczęły zrobić dla zestawu Problem One, choć
nie absolutnie konieczne?
Cóż, idziemy do przodu i ponownie, że Problem zadaje użytkownikowi na
Nazwa i drukowanie ich na coś ekran, ale starają się uwzględniać się niektóre
o wspólności, że mamy widać w naszym kodzie tej pory.
Więc mam tu na myśli następujące.
>> Mam zamiar iść do przodu i tworzyć Nowy program, wystarczy zadzwonić
to hello.c jak zwykle.
Mam zamiar iść do przodu i dać sobie zawierają standardowe io.h na górze.
Zamierzam też dać sobie preemptively CS50 biblioteki, tak aby
I nie daj się krzyknął przez kompilator.
A teraz mam zamiar iść do przodu i zadeklarować int, główny, nieważne.
>> A potem tu, to tam, gdzie chcę rozpocząć outsourcingu funkcji do
inna funkcja, że ​​ja sam jestem zamiar napisać, ale to nie
obecnie istnieje.
Na przykład, załóżmy, że chcę napisać funkcję, która pozwala mi
wydrukować Witaj, przecinek, i następnie niektóre nazwa użytkownika.
Zamiast kontynuować zrobić printf hello,% s, nie byłoby miło, gdyby
było po prostu nazywa funkcja nie printf ale nazwa print?
>> Tak więc, innymi słowy, że chce móc napisać program, który robi trochę
coś takiego.
Po pierwsze, mam zamiar powiedzieć printf Państwa Nazwa, co skłania użytkownika do
daj mi swoje imię, a następnie jestem zamierza wykorzystać znane s string do
Oświadczam ciąg.
Daj mi zmienną typu string, Nazywamy to s, i przechowywać w które
wyniku wywołania uzyskać ciąg.
Ale teraz w tydzień ostatnich, musiałbym nieco mozolnego zrobić hello,% s / n.
>> A to znaczy, widzieliśmy to przykład kilka razy, i to
trywialny przykład, ponieważ jest tylko jeden linii kodu, więc to naprawdę nie jest
big deal zachować wpisując ponownie.
Ale załóżmy, że ta linia kodu rzeczywiście stawały się ciężarem, a
nie jedna linia kodu jest, ale to 10 linii kodu kilka tygodni od teraz,
i jesteś po prostu zmęczenia kopiowania i wklejania lub
przepisywania tego samego kodu.
Czy nie byłoby miło, zamiast robić printf hello,% s, i tak dalej,
Czy nie byłoby miło, gdyby były tylko Funkcja o nazwie print, że nazwa
przyjmuje argument -
innymi słowy, zajmuje wejście -
i średnik.
Tak, że funkcja, prawda Bądź miły, jeżeli istnieje?
Wtedy nie będę musiał martwić się o co printf to, co% s, a wszystkie
te zawiłości, które są nie wszystko, co ciekawe.
Są one użyteczne.
>> Więc nazwa print, niestety, nie było wynaleziony jakiś 40 Plus lat temu.
Nikt nie pomyślał, aby napisać.
Ale to piękno ma język programowania, tak jak w
Scratch można zdefiniować własne bloki, więc w C i najbardziej każdy język, prawda
zdefiniować własne funkcje, może zdefiniować własne funkcje.
Więc nawet jeśli mamy głównie przez automatycznie za darmo, możemy zadeklarować
nasze własne funkcje.
>> Więc mam zamiar zrobić trochę miejsca tutaj do góry, i mam zamiar zadeklarować moje
własna funkcja, która będzie wyglądać trochę dziwne, ale w pierwszym wrócimy
powrót do tego niedługo.
I powiem nieważne, co wskazanie tej funkcji nie
coś, ma efekt uboczny, ale nie zwraca mi coś w
sam sposób uzyskać int lub uzyskać ciąg sam robi.
I mam zamiar dać tej funkcji wymienić nazwy wydruku i mam zamiar
określić, że ten facet ma zamiar wziąć ciąg, i mam zamiar zadzwonić, że
Nazwa ciągu.
Mogę nazwać to na co mam ochotę, ale chce mój kod na własny dokumentowania.
Innymi słowy, jeśli jedna z miały otwórz ten plik i go przeczytać, mógłbyś
rodzaj wywnioskować z nazwy, które Wejście jaką rolę miało grać.
>> A teraz poniżej, mam zamiar otworzyć nawias klamrowy i zamknięty nawias klamrowy,
i tak zauważysz I już po same wzór na linii cztery przez siedem, jak
Śledzę na dobry tydzień powiększonej teraz między, powiedzmy, linii dziewięciu i
14, które tworzą główną.
Innymi słowy, należy wydrukować nazwę jest inna funkcja.
Teraz, kompilator nie będzie wiedzieć nazwać tę rzecz automatycznie
bo dosłownie wymyślił, ale to wiem jeszcze zadzwonić głównym
automatycznie, a następnie oczywiście w linia 13, wzywam własną funkcję.
A ponieważ ja oświadczył, że funkcja się na linii czterech przed głównymi,
to będzie uczyć kompilator co cytat cytatu, "nazwa print"
Oznacza to, i to, co powinna zrobić.
Więc jestem jakby dając mu nowe, niestandardowe zablokować w kontekście, powiedzmy, Scratch.
>> Więc tutaj, mogę umieścić, że bardzo często lub powtarzające wzór kodu trzymam
pisania w klasie, printf % S hello,% s / n ", -
co chcę umieścić tutaj?
S?
Tak, chcę, aby umieścić nazwisko w tym kontekście.
Więc zauważyć trochę dychotomii tutaj.
Ponieważ jestem deklarując własną funkcję i ja nieco arbitralnie nazwie
drukować nazwę, a ponieważ mam podano w nawiasach, że ta
Funkcja przyjmuje jeden argument, typ który jest string - więc jest to słowo
lub zwrot lub coś w tym stylu - i Dzwonię, że nazwy argumentu, że
Oznacza to, jedyną zmienną, która jest w Zakres, że tak powiem, to nazwa.
>> S istnieje tylko między tym, co dwa nawiasy klamrowe, oczywiście?
No naprawdę, podobnie jak linii 10 przez 14, tak samo jak w poniedziałek, nie można używać
S, ale co mogę zrobić, to przekazać S pod nazwą wydruku.
Wydrukuj nazwa tak się dać to alias, synonimów, pseudonim,
nazywając to imię, a teraz używania go w tej pozycji.
Więc teraz chciałbym zapisać to, pomniejszyć.
>> Pozwólcie mi iść do przodu i robić cześć.
Wygląda dobrze.
Nie wypluć żadnych błędów. . / Hello Enter.
Jak się nazywam?
David.
I cześć David.
Tak więc nie wszystko, co ciekawe, ale po prostu, że teraz.
Teraz masz ten sam składnik jak my w Scratch do
zrobić własne funkcje.
>> Ale jest trochę haczyka.
Załóżmy, że tak naprawdę nie myśli to przez i rzeczywiście bez
naprawdę myśli o tym napisał że funkcja tutaj.
Czuje się całkowicie uzasadnione.
W Scratch nie istnieje pojęcie z lokalizacją w skryptach.
Możesz umieścić jeden tu, jeden tu, jeden tutaj, a to może zacząć
wyglądać trochę bałagan, jeśli nie położyć go porządnie, ale tak nie jest
znaczenia, gdzie fizycznie skryptów się na ekranie.
Niestety w C - i to jest w przeciwieństwie do w językach takich jak Java i Python
i inne, które możesz znać z - niestety w C, aby nie
znaczenia, bo co to watch wydarzy się teraz.
>> Funkcja domyślnie, że będzie do wykonania jest oczywiście głównym.
Main będzie zadzwonić nazwę druku na linia osiem, ale niestety,
kompilator nie wie nawet, że nazwa druku istnieje, dopóki nie dotrze do linii 11,
co niestety jest będzie za późno.
Więc robią komentarzy.
A teraz, cholera, dwa błędy generowane.
Więc teraz chciałbym przejść do bardzo po pierwsze, jak zawsze powinniśmy robić, a
Zauważ, że to na mnie krzyczeć, "Niejawna deklaracja funkcji
wydrukować imię. "
>> Więc widziałem tę wiadomość przed, niejawna deklaracja funkcji.
Kiedy widzieliśmy ten rodzaj błędu?
Kiedy nie to biblioteka.
Jeśli zapomniałeś cs50.h i chciałbym uzyskać krzyknął do uzyskać ciąg lub uzyskać int.
Jednak w tym przypadku, ta funkcja druku nazwa nie jest w bibliotece, prawda?
Jest to dosłownie w tym pliku, więc co tak naprawdę chodzi?
>> No niestety w C, przejście tak bardzo dosłownie, że jeśli
chcą funkcję o nazwie nazwa wydruku istnieje, trzeba albo wprowadzić
które działają na samej górze kod tak, że jest dostępna w celu obniżenia
funkcje, ale szczerze mówiąc, to staje się byle szybko.
Osobiście lubię kładąc główny pierwszy bo to jest bardzo jasne, co to
Program ma na pierwszy rzut oka.
A Plus, można dostać się do dziwnej rogu przypadki, w których, jeśli x chce zadzwonić
y, ale y mogą nazwać x, po prostu fizycznie nie może faktycznie umieścić jeden
nad drugim.
>> Okazuje się jednak, w C, może się rozwiązać ten problem w bardzo prosty sposób.
Mam zamiar umieścić trochę miejsca tu, a ja po prostu się
zapobiegawczo, choć nieco nadmiarowo, nauczy
kompilator, że istnieje funkcja nazywa nazwę druku, która przyjmuje ciąg znaków,
i mam zamiar zadzwonić to nazwać średnik.
>> Tak to się teraz w kolejce cztery, które nie widział, jest deklaracja
z nazwy wydruku funkcji, ale to tylko Obietnica, że ​​funkcja ta będzie
ostatecznie określone, w końcu być realizowane.
To teraz mogę zostawić w spokoju, bo teraz jest to definicja,
realizacja, rodzaj ostatniej mili realizacji tego
dana funkcja.
Tak szczerze, że to głupie, to irytujące, , ale w ten sposób C, a to
ponieważ zajmuje się bardzo dosłownie i, jak komputer szczerze powinien,
tylko nie dokładnie to, co możesz powiedzieć, że do zrobić i tak, że kolejność jest ważna.
>> Miejcie to na uwadze, i jeszcze raz, zacząć zawiadomienia powtarzaniu wzorów.
Kursy to będzie, jeśli nie mają już zaczynają napotkać komunikaty
tak, że na pierwszy rzut oka wydaje całkowicie tajemnicze, ale jeśli zaczniesz
szukać tych kluczowych słów jak "Niejawna deklaracja," wspomina
funkcja w tym przypadku - i szczerze mówiąc, to czasem nawet się trochę zielono
symbol marchewka, który mówi, gdzie problem prawdopodobnie jest -
możesz zacząć pracować na swój sposób poprzez jeszcze niewidoczne komunikaty o błędach.
Wszelkie pytania na temat pisania własna funkcja w ten sposób?
>> Zróbmy coś, co jest trochę bardziej przekonujące.
Zamiast po prostu zrobić coś, co ma Efektem ubocznym drukowania, pozwól mi odejść
dalej i zapisać nowy plik, a my będziemy Nazywamy to positive.c, choć to
będzie trochę inaczej w porównaniu do ostatniej chwili.
I tym razem, chcę, aby ponownie wprowadzić ostatni raz w positive.C przykład, który
jest zmuszają użytkownika uzyskując mnie dodatnia.
Ale musiałem użyć dostać int ostatni.
Czy nie byłoby miło, gdyby nie było Funkcja o nazwie uzyskać pozytywną int
, że mogę po prostu zlecić to kawałek funkcjonalności?
Więc różnica polega my będziemy wdrożenia uzyskać pozytywną int, ale w przeciwieństwie do
Nazwa druku które wystąpiły działania niepożądane - to nie wrócił do mnie jak coś
liczba lub ciąg -
uzyskać pozytywną int jest, oczywiście, będzie wrócić, mam nadzieję, pozytywny int.
>> Więc zróbmy to.
Dołącz cs50.h, zawierać standardowe io.h.
Int main pustkę.
A teraz tutaj, mam zamiar iść do przodu i powiedzmy, int, nazywamy to n, jest równa
uzyskać pozytywną int.
I jak uzyskać int już istnieje ponieważ pracownicy to napisał, mam zamiar
założyć na chwilę, że dostać pozytywne int istnieje, a teraz mam zamiar
pójść dalej i powiedzieć, printf, dzięki za% i / n ", n.
>> Więc teraz, jeśli mogę skompilować ten program, co będzie się działo w moim terminalu
Okno w dolnej części ekranu?
Będę prawdopodobnie się, że sam błąd jak wcześniej.
Więc spróbujmy.
Bądź pozytywny.
I znowu, niejawna deklaracja funkcji, uzyskać pozytywną int.
Tak więc możemy rozwiązać ten problem w kilka sposobów.
Zamierzam zachować proste i po prostu umieścić moje oświadczenie tutaj i uzyskać
pozytywne int.
Muszę tak zwany podpisem.
Podpis tylko odnosi do estetyki
Pierwsza linia programu.
Więc co należy uzyskać pozytywne int powrót?
>> Więc int.
Chodzi mi najlepiej, to powróci coś pozytywnego int, ale to
nie istnieje.
Nie widziałem, że wśród naszych danych typy, więc mamy do czynienia z
Fakt, że mamy bardzo mało typy danych do pracy.
Ale możemy powrócić int i tylko Wierzymy, że będzie ona dodatnia.
To będzie się nazywać uzyskać pozytywną int.
>> A teraz, jak o swoich argumentów?
Czy to odbiera żadnych danych?
Czy potrzebujesz żadnych danych?
Więc to nie musi wiedzieć w nic zaliczki.
Pobierz ciąg nie, dostać int nie.
Printf nie - to musi mieć jakiś Wejście przeszedł w tym - i nazwa print
potrzebne jakieś wejście, ale się pozytywne int nie.
Więc mam zamiar wyraźnie powiedzieć pustkę kompilatora.
Pustka jest brak czegokolwiek innego.
Więc nic nie oznacza nieważności dzieje wewnątrz z tych nawiasach, średnik.
>> I teraz w głębi pliku - i ponownie, jestem po prostu rodzaj anal
o wprowadzenie głównym u góry, które jest dobra praktyka, ponieważ ten sposób,
w dowolnym momencie lub kogoś innego otwiera plik,
funkcjonalność jest właśnie tam.
Można nurkować od punktu wyjścia.
Więc teraz będę powielać tego, uzyskać pozytywną int pustkę, ale nie jestem
uderzy średnik teraz.
Zamierzam otworzyć nawiasy klamrowe, i teraz muszę pożyczyć
kilka pomysłów od poniedziałku.
>> Tak jak pamiętam, że zrobił coś jak wykonać następujące czynności podczas
coś, co było prawdą.
I co mam zrobić?
Zrobiłem coś takiego dać mnie dodatnia,
trochę zachęty.
Można używać żadnych słów, które chcę.
A potem użyłem co?
Int n równa się dostać int, żadne argumenty do niej.
>> I zauważyć różnicę.
Po wywołaniu funkcji, gdy używasz funkcja, nie umieścić w próżni.
To zrobić tylko, że podczas deklarowania Funkcja, ucząc kompilator, co
należy się spodziewać.
Więc nie trzeba umieścić unieważnić tam samemu.
>> A teraz to, co mój stan?
Również, n nie jest równa pozytywne, ale to tylko pseudo-code.
Więc jak mam wyrazić to czyściej?
Tak więc mniejsza lub równa zeru.
Więc znowu, zauważyć można zrobić mniejsza lub równa.
Mimo to dwa oddzielne symbole, można to zrobić na
klawiatura jako takie.
>> Ale wciąż jest błąd, który I wkręca się ostatnio zbyt.
Muszę oświadczyć -
dokładnie.
Muszę oświadczyć n zewnątrz z pętli.
Więc muszę umieścić n tutaj, a ja nie chcesz ponownie zgłosić go tutaj
bo mam nową zmienną.
Chcę tylko, aby przypisać wartość tutaj.
>> I teraz nie jestem dość zrobić tutaj.
Niech mi przed siebie i udawać, że jestem skończony.
Bądź pozytywny, a teraz nowe error.
Kontrola osiągnie koniec non-void funkcja.
Tak więc nowy komunikat o błędzie, ale jeśli rodzaj z odciąć każdego słowy
prawdopodobnie aluzja do tego, co się stało.
>> Kontrolować.
Kontrola oznacza po prostu do porządku operacji w programie.
Komputer znajduje się w kontroli i coś poszło nie tak.
Tak więc dochodzi do końca non-void funkcja.
Jaka funkcja jest najwyraźniej dotyczy?
Jaka funkcja nie jest nieważne?
Więc pozytywny int, i trochę mylące, że dobrze,
jest to rodzaj pustki.
Ma specyfikację pustki dla jego argumenty, ale jego produkcja będzie
być n typu.
Więc słowo po lewej stronie jest tzw. typ zwracany.
Słowo wewnątrz tutaj jest na zero lub więcej argumentów
że funkcja przyjmuje.
>> Więc co muszę zrobić?
W tym momencie w moim kodu, linia 21, w którym miga prompt to, że
pozytywnie int wewnątrz zmiennej o nazwie n.
Jak mogę go oddać do main?
Dosłownie.
Powrót średnik n.
>> Więc tak jak Colton wrócił kawałek papieru z odpowiedzią na mnie przez upuszczenie
że kawałek papieru w małej czarnej pudełko na stole, do tego w
Kod, dosłownie po prostu napisz, powrót n, i to tak, jakby były Colton
wręczając mi coś fizycznego pleców.
W tym przypadku, co się dzieje, to dostać pozytywne int będzie do przekazania z powrotem
co zapewne pozytywnie całkowita do kogo?
Skąd ta wartość skończyć?
Które kończy się w tej zmiennej, N, i potem kontynuować linii dziewięciu.
>> Tak więc, innymi słowy, aby z operacje, program ten zaczyna
wykonania, a kompilator sobie sprawę, oh, chcesz bibliotekę?
Puść mnie chwycić, co jest w środku tego.
Oh, chcesz standardowej biblioteki IO?
Puść mnie chwycić, co jest w środku tego.
Co mówią do siebie kompilator gdy trafi linia cztery?
Oh, obiecałeś do wdrożenia Funkcja o nazwie uzyskać pozytywny, ale
Wrócimy do tego później, coś w tym kierunku.
>> Int main void oznacza po prostu tu jest wnętrzności mojego programu.
Linia siedem jest tylko nawias klamrowy.
Linia osiem mówi, po lewej stronie, podać me 32 bitów dla liczby całkowitej, nazywają to n.
Po prawej stronie, to mówiąc uzyskać pozytywną int.
Teraz przerwa niech ta historia, ponieważ teraz I nie ruszać, mój kursor w dół.
Mój kursor teraz idzie w dół tutaj, bo teraz uzyskać pozytywne int wykonuje.
Int n jest zadeklarowany.
Wykonaj następujące czynności.
Printf daje mi całkowitą dodatnią.
>> Get int od użytkownika, należy go przechowywać w N, i może to zrobić ponownie.
Pętla ta oznacza, że ​​ten kod może wykonać w górę iw dół, jak to jeszcze raz
i ponownie, ale gdy użytkownik Wreszcie współpracuje i daje mi pozytywne
int, I hit linii 21, w którym momencie Numer zostanie wydany, a który
należy podkreślić teraz?
Dziewięć.
Kontrola, że ​​tak powiem, zwraca do linii dziewięć.
To linia, która jest obecnie odpowiedzialna za.
>> Więc to, co się dzieje wszystko tym razem pod maską, ale
kiedy używaliśmy funkcji jak printf lub nawet uzyskać ciąg, że ktoś inny
napisał dla Ciebie, kontrola była przekazana off do cudzego linii kodu
by linia po linii.
To jest po prostu nie mogliśmy go zobaczyć, a my może naprawdę nie przedstawiają go w tym
program, ponieważ jest to w jakiś inny plik na dysku twardym
wiemy o nas.
Więc właściwie skompilować i uruchomieniu tego teraz.
>> Bądź pozytywny.
Kompilacja, to postęp.
. / Pozytywne.
Daj mi dodatnia.
Bądźmy trudne.
Negative 1.
Zero.
Dajmy mu 50.
Dzięki za 50, a więc kontroli Obecnie powrócił.
Wszelkie pytania, a następnie, na które?
Tak?
>> [Niesłyszalne].
>> Powiedz jeszcze raz.
O, dobre pytanie.
Tak więc można zauważyć paralelę tutaj Jestem rodzaju cięcia kąt na.
W linii 12, mówię, uzyskać pozytywną int zwraca int, ale przez to samo
logika, teraz się rozumieć, że w linia sześć, mówię, że główne powraca
int, ale to, co nigdy nie my miał w jednym z naszych programów?
Nigdy nie mieliśmy wzmianki ten klucz powrót słowo.
>> Tak więc okazuje się, że w C, co najmniej wersja tego, że używamy
wykonane w 1999 roku, pod względem technicznym, to jest dzieje się automatycznie.
Zawsze można realizować program i ty realizacji funkcji o nazwie main,
że funkcja zwróci zero przez domyślnie, jeśli nie mówią inaczej,
i zero tylko konwencja.
Świat zwraca zero tym samym wskazuje, że wszystko jest dobrze,
skutecznie zostawiając nas z czterech miliardów możliwych rzeczy, które mogą pójść
nie tak tak, że jeśli wrócimy jednego, że może oznaczać kod, który oznacza to
coś poszło nie tak.
Możemy wrócić dwa, co oznacza, to inna rzecz, poszło źle.
Możemy wrócić czterech miliardów, które oznacza to inna rzecz, poszło źle.
>> A jeśli teraz myśleć o własnych PC lub Mac, można przypomnieć, że
czasami można dostać tajemnicze komunikaty o błędach z oprogramowaniem, że jesteś
przy użyciu, a czasem ma ludzkie przyjazny opis, ale nie
często kod lub numer na ekranie?
Jeśli to nie przychodzi do głowy, tylko miej oko na to.
To jest zwykle to, co je Kody na myśli.
Są one zawarte w programie Microsoft Word, a inne programy tak, że jeśli plik
zgłoś błąd w firmie, można powiedz im, oh, mam numer błędu 45.
A niektóre z powrotem programista w firmie może wyglądać, że w jego lub jej
kod i powiedzieć, oh, to dlatego, że zrobiłem ten błąd i dlatego użytkownik
dostał tę wiadomość.
>> Ale szczerze mówiąc, to tylko trochę rozpraszać i mało uciążliwe
stwierdzić, że, przynajmniej na naszym Pierwsze programy, więc mamy
było pominięcie go.
Ale przez cały ten czas każdy z Twoich Funkcje główne potajemnie miał tego
linia automatycznie dodana dla Ciebie przez kompilator, tylko na mocy konwencji
zaoszczędzić trochę czasu.
>> [Niesłyszalne].
>> Nie ma potrzeby, aby umieścić go w głównym.
To dobrze.
Trzeba włączyć go, jeśli były realizacji funkcji takich jak ta.
W przeciwnym razie funkcja płaskie obecnie nie działa.
Ale w głównym, to nie jest konieczne.
W tydzień lub dwa, zaczniemy się do tego zwyczaju raz chcemy rozpocząć
sygnalizując błędy.
Bardzo dobre pytanie.
>> Tak szybkie werbalne wspomnieć, że przerwa w piątek, że nie będzie obiad
per se, ale będziemy na kolacji z niektórych studentów i pracowników.
Jeśli chcesz do nas dołączyć, prosimy wolne, aby przejść do cs50.net/rsvp.
18:00 w piątek.
Przestrzeń jest, jak zawsze, ograniczone, ale my będziemy nadal robi to na prawie
raz w tygodniu, jeśli przestrzeń skończy się w tym tygodniu.
>> Więc cliffhanger, że skończyliśmy na Poniedziałek był, że może faktycznie strings
być indeksowane na, co oznacza po prostu cię może dostać się do pierwszego znaku,
Drugi znak, trzeci znak i tak dalej, ponieważ można
skutecznie, że z ciągu, podobnie jak witam, jak jest w tym przypadku pięć
Litery wewnątrz pudełka.
I można dostać w każdym z tych Składnia pola z tym, co nam zrobił
przedstawić w poniedziałek?
Te nawiasy kwadratowe na klawiaturze.
To po prostu znaczy iść do miejsca zerowego.
>> Zaczynamy odliczanie od zera, więc uchwyt zera oznacza H, łącznik jeden
oznacza, e, i tak dalej.
I tak cały czas, gdy byliśmy za pomocą łańcuchów i wpisując "hello"
i "Świat" i inne rzeczy na Ekran, to był przechowywany
w polach takich jak ten.
I zgadywać.
Co każde pole reprezentuje fizycznie wewnątrz komputera?
>> [Niesłyszalne].
>> Sorry?
>> Znaki.
>> Więc postać, na pewno w przypadku ciągów, a postać jest po prostu
osiem bitów lub jeden bajt.
Więc prawdopodobnie są przynajmniej niejasno znane z tego, że Twój
komputer ma pamięć.
Posiada dwa rodzaje pamięci, co najmniej.
Jednym z nich jest dysk twardy, gdzie można zapisać takie tam na stałe, a to
zazwyczaj duże, więc można mieć filmy i muzyka, i tak dalej.
>> Wtedy masz inny typ pamięci zwany RAM, R-M, Random Access
Pamięć, i jest to typ pamięci , które stosuje się, gdy komputer jest
działa, ale jeśli straci moc lub twój umiera baterii, wszystko, co jest zapisane
w pamięci RAM znika w przypadku utraty zasilania w ogóle, ponieważ nie jest
trwałe.
Zazwyczaj mają te dni, Koncert z nim, dwa koncerty, a może więcej.
I odwrotnie RAM jest to, że wiele dużo, dużo szybciej niż dysk twardy
lub nawet półprzewodnikowe dyski te dni, ale zwykle droższe więc
masz mniej.
>> Tak naprawdę dzisiejsza rozmowa dotyczy do pamięci RAM, to pamięć,
istnieje tylko wtedy, gdy nie ma mocy są wprowadzane do komputera.
Tak więc po wpisaniu w H-E-L-L-O, Enter na klawiatury H będzie w jednym
bajt pamięci RAM, E będzie w kolejny bajt pamięci RAM, jak
Pozostała część słowa.
Tak więc przypomnieć, co byliśmy w stanie zrobić ostatni raz to było.
Pozwólcie mi iść do przodu i otworzyć plik które nazwaliśmy string.c i przypomnieć
że wyglądało to trochę coś takiego.
Pozwól, że rzeczywiście wycofać i zmienić to dokładnie jak to wyglądało,
Długość ciąg s.
>> Więc spójrz na program tutaj.
We obejmują CS50 bibliotekę tak że możemy użyć uzyskać ciąg.
We zawierają standardowe io.h więc możemy użyć printf.
Dlaczego my to string.h?
To był nowy w poniedziałek.
Więc chcieliśmy długość ciągu.
Str leng.
Ludzie postanowili lat temu, niech po prostu być zwięzłe.
Zamiast nazywać to "długość ciągu" nazwijmy to "str leng" i niech
postać świata, który obecnie, i tak to jest co dostajemy dostęp do z string.h.
>> To jest znane.
To jest znane.
To jest trochę nowych.
W wierszu 22 - i wrócimy do tego, ale teraz wiem -
i może tylko wiedzieć to z konieczności zapoznać się z dokumentacją lub jeśli
wiedziałeś C już -
Czasami można uzyskać ciąg śruba się.
Jeśli użytkownik jest naprawdę kontradyktoryjności lub niechętne do współpracy, a on lub ona po prostu
nie nic pisać na klawiaturze lub typy tak dużo, że na klawiaturze
to przytłacza pamięci komputera, teoretycznie uzyskać ciąg może wrócić
coś innego niż ciąg znaków.
Może zwrócić szczególną nazwie wartości NULL wielkimi literami, N-U-L-L, a to
tylko tak zwana wartość sentinel.
To oznacza, że ​​szczególną wartość coś złego się stało w tym przypadku.
To jest brak napisu.
>> Więc wartość null Jestem sprawdzanie po prostu tak, że Krótko mówiąc, str dł. i
inne funkcje, które pochodzą z C, jeśli oczekują ciąg, ale przekazać je
brak ciągu, jeśli przechodzą im NULL, komputer lub program
po prostu upaść wprost.
Będzie to powiesić.
Będzie rzucać jakiś komunikat o błędzie.
Złe rzeczy się wydarzy.
Dlatego, mimo że jest to nadal nie dobrze zdefiniowane -
będzie to więcej sensu w tygodniu lub dwa - w linii 22, to jest po prostu
Przykładem samodzielnego sprawdzania błędów obronnej tylko w przypadku, raz z
milion coś pójdzie nie tak, na najmniej mój program nie będzie katastrofy.
>> Więc jeśli s nie równa się coś złego, Mam to w pętli, i to było
gdzie mieliśmy, że inne nowy kawałek składni.
Mam dla pętli iteracji od zero, do czasu trwania S.
I to tutaj, byłem drukowania s Uchwyt i, ale dlaczego używam C% wszystkich
Nagle zamiast% s nawet jeśli s jest ciągiem?
To znak, prawda?
S jest ciągiem, ale coś wspornik s, s uchwyt i gdzie jest zero
lub jeden lub dwa, to jednostka znaków w ciągu, a więc dla
że printf musi być poinformowany, że to rzeczywiście postać się spodziewać.
>> A potem przypominam sobie, co to zrobił Program rzeczywiście zrobić?
>> Wydrukowano go w kolumnach.
>> Tak, dokładnie.
To po prostu drukowane słowo, które wpisuję w kolumna, jeden znak w wierszu.
Zobaczmy więc, jeszcze raz.
Tak zrobić łańcuch.
Zestawione OK. . / String.
Pozwól mi wpisać H-E-L-L-O, Enter i naprawdę rozumiem, po jednym w wierszu.
>> Więc pozwól mi zrobić jedną optymalizację tutaj.
Jeśli myślisz o tym, zwłaszcza jeśli już zaprogramowane wcześniej, istnieje
prawdopodobnie nieefektywność w linii 24.
Innymi słowy, to nie koniecznie najlepszy projekt.
Proste, przynajmniej raz Ciebie pamiętam, co str leng jest, ale to
robi coś głupiego potencjalnie.
Co może być tego przyczyna?
>> [Niesłyszalne].
>> Dokładnie.
To sprawdzanie długości s za każdym razem, chociaż
H-E-L-L-O jest zawsze będzie się pięć znaków.
Za każdym razem, za pośrednictwem tej pętli, pięć nie zmienia.
I może być zwiększany i, ale to, co ma długość s na każdy
iteracji tej pętli?
To jest pięć, to pięć, to pięć, a jeszcze jestem jednak pytaniem, to
pytanie jeszcze raz i jeszcze raz i jeszcze raz.
Teraz szczerze, że komputer jest tak cholernie szybko, nikt nie zauważy
Różnica w tym przypadku, ale tego rodzaju złych decyzji projektowych może
zacząć dodać, jeśli kompilator sam nie stara się rozwiązać ten problem dla Ciebie, które
Zazwyczaj nie będzie w czasie najmniej w urządzenia.
>> Więc mam zamiar to zrobić.
Mam zamiar dodać przecinek po moja pierwsza zmienna, i.
Mam zamiar dać sobie inną zmienna, nazywając go n, tak by
Konwencja numerów, a następnie jestem zamiar przypisać n wartość ciągu
Długość tych.
A potem mam zamiar zmienić mój stan się, co?
Mam zamiar zmienić mój stan się podczas gdy jest mniejsza niż N.
>> Więc teraz, ile razy mam sprawdzenie długości S?
Raz, ale to jest OK, by sprawdzić i. przed n znowu i znowu, bo teraz te
wartości nie są rzeczywiście się zmienia.
Teraz na razie, po prostu wiem, że w każdej chwili wywołania funkcji, jest trochę
nad głową, nie wystarczy, aby zniechęcić naprawdę od zawsze przy użyciu funkcji, ale
pewnością, gdy istnieje linia kodu tak - i linie dostanie
ciekawsze niedługo - gdzie istnieje możliwość, że, jeśli
wpisz ten kod, jak wiele razy będzie wykonywał?
Zaczniesz widzieć w czasie tej wydajność programów może
rzeczywiście zmienić.
>> W rzeczywistości, jeden z problemu ustawia mamy wykonane w poprzednich latach wiąże
realizacji, jak może pamiętacie z tydzień zero, sprawdzania pisowni, ale
sprawdzanie pisowni, który jest zaprojektowany, aby wspierać Słownik 150.000 Plus
Słowa, które dajemy wam.
Trzeba by napisać kod, który ładuje te słowa do pamięci RAM, więc do
pudełka, jak widzieliśmy na ekranie na chwilę temu, a następnie jak najszybciej
można, trzeba być w stanie odpowiedzieć na Kwestia formy, jest to słowo
błędnie?
Czy to słowo błędnie?
>> A w czymś takim, co mamy wykonane w latach przeszłość włączeniu go,
choć na opt-in dobrowolności, Konkurs rodzaju, przy czym
studentów, którzy używają mniej pamięci RAM i mniej czas, mniej cykli procesora, w końcu
pęcherzyków do góry trochę liderów i ranking, który kładziemy na
Kurs jest strona główna, jak mamy wykonane w latach poprzednich.
Więc znowu, całkowicie opcjonalny, ale to przemawia do możliwości projektowych
, które są przed nami raz zaczniemy budowanie szczycie niektóre z nich
podstawowe cegiełki.
>> Więc pozwól mi wrócić do tego schematu dla tylko chwila i ujawniają niewiele
coś więcej.
To rzeczywiście jest łańcuch, i podjęliśmy Zaletą kilku bibliotekach
średnia io.h który ma -
>> Printf.
>> Printf, między innymi.
cs50.h, które dostać int i uzyskać ciąg i tak dalej, string.h, które
miał str Leng.
Ale okazuje się, że jest jeszcze inny.
Szczerze mówiąc, jest tam wiele, wiele nagłówka pliki, które deklarują funkcji
dla bibliotek, ale ctype.h jest faktycznie będzie nieco
korzystne, ponieważ mam zamiar iść do przodu i realizować jeden
inny program tutaj.
>> Pozwólcie mi iść do przodu i otworzyć coś Pisałem wcześniej o nazwie
capitalize.c i rzućmy Zobacz, jak to działa.
Zauważ, że używam, w tej wersji z niego, trzy znajome plików.
Zauważ, że w linii 18, jestem coraz linię tekstu.
Wskazówki w linii 21, twierdząc, że jestem Poniższy kod będzie
wykorzystać s, co użytkownik wpisze , i jak mam robić?
Cóż, zabieram -
lekcja z ostatniej chwili -
Jestem deklarowania i i n i iteracji ciągu znaków w ciągu.
A potem to, co jest ten blok Kod w linii 24 przez 27
robi w laika?
>> Mała litera powrotem.
>> Dokładnie.
Jeśli s uchwyt i - jeśli to i- charakter S, która jest specyficzna
char w ciąg, jest większa niż lub równa małe i -
Przypomnijmy, że podwójne ampersanda oznacza i -
i ten sam znak, s uchwyt i jest mniejsza lub równa małe litery Z,
to oznacza, że ​​to b lub lub c lub dot, dot, dot, lub z, co oznacza,
to jest małe.
Co chcę zrobić w tym przypadku?
Cóż, można to zrobić nieco tajemniczo, ale
niech dokuczać to apart.
>> Mam zamiar zadzwonić do printf, drukuje% c bo chcę wydrukować to
znaków na ekranie.
Jestem wtedy zajmie s wspornika Ja, i-ty znak w S, a następnie, dlaczego
ja robię tę sztuczkę tutaj, małe minusa kapitałem?
Co to jest, że da mnie, mówiąc ogólnie?
>> [Niesłyszalne].
>> Dokładnie.
Naprawdę nie pamiętam -
to było 65 dla kapitału A. I naprawdę nie pamiętam, co małe jest,
ale nie ważne.
Komputer wie.
Więc mówiąc, małe minusa kapitału, to dziwne być
odjęcie jednego char od drugiego, ale jakie są znaki, pod maską?
Są tylko numery.
Tak więc bez względu na te numery są, niech komputer pamięta go
zamiast mnie człowiek.
>> Tak małe ujemny kapitał jest da mi różnicy.
Zdarza się, 32, i które byłyby w przypadku małych liter b i kapitału B
i tak dalej.
To pozostaje spójna, na szczęście.
Więc jestem w zasadzie mówiąc, wziąć litery, które należy odjąć od
średnia różnica, a i skutecznie zmienia s uchwyt z
małe litery, oczywiście, wielkie litery, bez my naprawdę konieczności myślenia
o czy pamiętać, jakie były te numery Rozmawialiśmy o po osiem
wolontariusze wpadł na scenę?
Teraz Tymczasem, w innym, jeśli nie jest małe litery, jak określono
przez linię 24, po prostu go wydrukować.
Chcę tylko dotknąć znaków, które były
faktycznie początkowo małe.
>> Zobaczmy więc, ta.
Należy wykorzystać.
Zestawione, OK.
. / Wykorzystać.
I pozwól mi wpisać H-E-L-L-O małymi literami, Enter.
I zauważyć, że to jest konwertowany pod wielkimi literami.
Pozwól mi zrobić to ponownie inny wyraz.
Jak o D-A-V-I-D z pierwszym D kapitalizowane jako nazwa jest zazwyczaj?
Wprowadź.
Zauważ, że to nadal poprawne.
To po prostu wyprowadzane że najpierw D bez zmian poprzez które jeszcze budowy.
>> Tak więc należy pamiętać, a następnie, Kilka rzeczy tutaj.
One, jeśli kiedykolwiek chcesz sprawdzić dwa warunki na raz, można i ich
razem, jak przewidywaliśmy.
Możesz porównać znaki w ten sposób i znaków, jak skutecznie leczyć
numery, ale szczerze mówiąc, to jest tak cholernie tajemnicze Nigdy nie będę pamiętać
jak wymyślić to od podstaw bez uzasadnienia przez to na dość
trochę czasu.
>> Czy nie byłoby miło, gdyby ktoś tam napisał funkcję o nazwie jest
obniżenia, które mogą odpowiedzieć na mnie prawdziwą lub false, ta postać jest małe?
No na szczęście, kto napisał ctype.h zrobił dokładnie to.
Puść mnie tutaj i dodawać ctype dla c rodzaje, a teraz pozwól mi zejść tutaj i
przepisać ten wiersz w następujący sposób.
>> Więc jeśli to się nazywa jest niższa, I twierdzą, s Uchwyt i, następnie idę do usunięcia
te dwie linie w ogóle.
Więc teraz ktoś inny, mam nadzieję, napisał wywoływana funkcja jest niższa, i to
Okazuje się, że nie i że zadeklarowane to wewnątrz ctype.h.
A teraz mam zamiar opuścić linię 27 sam mam zamiar opuścić linię 31
sam, ale zauważ, jak wiele mam zaostrzyło mój kod.
To teraz czystsze.
To mniej trudne do przeglądania bo teraz funkcję, ponadto jest
tak pięknie nazwał ją po prostu robi to, co mówi.
>> Więc teraz mam zamiar zapisać to.
Idę, aby pomniejszyć.
I tak jak w Scratch można mieć Boolean, wartość logiczną true lub
fałszywe, to jest dokładnie to, co jest niższe skutecznie zyski.
Pozwól mi skompilować.
Pozwól, że re-run.
A teraz spróbujmy to jeszcze raz, H-E-L-P-O, Enter.
To jest bardzo dobre.
I spróbuj jeszcze raz, upewnij się, że nie nakręcić coś.
To jest aktywowane jako dobrze.
>> Ale to nie jest wystarczająco dobre, ponieważ Inna sprawa, że ​​ja nigdy nie będę
pamiętam, chyba że działa przez to bardzo ostrożnie na, powiedzmy, papier jest
to cholernie linii.
Czy nie byłoby miło, gdyby nie było Funkcja nazywa się górna?
Okazuje się, że jest w ctype.h również.
Mam zamiar iść do przodu i wpisz -
pozwól mi przynieść tę linię z powrotem.
Zamiast tego tutaj, pozwól mi iść do przodu i powiedzieć, zastępować w% c
Wynik wywołanie tej funkcji Górna na i-tym znaku s.
A teraz zauważyć, że coraz mało zrównoważony.
Muszę śledzić, ile nawiasy mam otwarte i zamknięte.
>> Więc teraz to nawet sprzątaczka.
Teraz ten program jest coraz lepiej i lepiej zaprojektowane prawdopodobnie dlatego, że jest
dużo, dużo bardziej czytelny, ale to no niech poprawić.
Należy wykorzystać.
. / Wykorzystać.
H-E-L-L-O. Przyjrzyjmy się jeszcze raz, D--V-I-D. OK, więc nadal jesteśmy w
pretty good shape.
>> Ale teraz do górnej.
Proponuję jeszcze jedna wyrafinowanie mogliśmy zrobić, że będzie
bardzo ładne, że naprawdę może dokręcić do tego kodu i naprawdę dają nam pięć
z pięciu do projektowania, na przykład.
Co byłoby miło, aby pozbyć?
Cóż, wygląda jak cholernie długi ten blok kod jest po prostu zrobić coś prostego.
>> Teraz, jak na bok, jak można mieć zobaczyć w sekcji to obok super-
weekend, nie jest ściśle konieczne nawiasy klamrowe, gdy tylko jedno
linii kodu, mimo że proponowany trzymając je tak, że to sprawia, że ​​wiele
bardziej jasne, jak w Scratch w kształcie litery U bloków, co jest w środku oddziału.
Ale czy nie byłoby miło, gdyby do górnej, gdy z uwagi na jego wejście, zwrócił się do
wielkie, jeśli nie jest, i co być wspaniałe w przeciwnym przypadku, jeśli
to już wielkie litery?
Wystarczy przekazać je poprzez i zostawić ją w spokoju.
>> Więc może to nie robi.
Mógłbym spróbować i po prostu nadzieję, że to, że nie, ale niech mnie
wprowadzić jedną rzecz.
Zamiast korzystania z wbudowanego terminala okno w dół tutaj przypomnieć, że
ta ikona kwadratu black daje większe okno terminala, że ​​mogę pełna
ekranie, jeśli chcę?
Tak więc okazuje się, że są jakby dziwnie nazwany, ale nie te rzeczy nazywane
strony man, strony podręcznika, w skrócie, mężczyzna i mogę do nich dostęp
Człowiek wpisując -
co chcę wpisać?
Człowiek do cholewki.
>> A teraz uwaga, jeśli istnieje funkcjonować wewnątrz komputera, w
W tym przypadku urządzenie, które jest po prostu system operacyjny Linux, to będzie
dać mi trochę tajemnicze zestaw wyjście, ale przekonasz się, że na czas
to zawsze jest sformatowany prawie same więc zacząć się do tego przyzwyczaić.
Wskazówka na górze do górnej i podobno jest taka sama dokumentacja
dla obniżenia.
Kto napisał to było cięcie niektórych narożniki i umieścić to wszystko na jednej stronie.
Celem tych rzeczy "w życie jest do konwersji
List do wielkości liter.
>> Zauważ, że w Synopsis, strona man uczy mnie, co plik mam
zawierać używać tej rzeczy.
To daje mi podpisy dla nich funkcje, obie z nich, nawet
choć teraz tylko dbają o jednym.
Oto teraz opis.
Do górnej przekształca nas c na wielkie litery, jeśli to możliwe.
>> Jeszcze nie tak pouczające, ale niech mi teraz poszukaj w wartości zwracanej, rzeczy
, które jest zwracane.
Więc wróciliśmy jest to wartość zamienione litery lub c, jeśli
przekształcenie nie jest możliwe.
Co to jest c?
>> Oryginalny charakter.
>> Oryginalny charakter i wiemy że znów będzie do
streszczenie, a kto to napisał funkcja po prostu uznał, że wejście
się do górnej i dolnej jest tylko arbitralnie się nazywać c.
Mogli nazwał go najbardziej wszystko chcą, ale ciągle go
proste jak w..
Tak już konsultowany na stronie man.
To zdanie przekonuje mnie, że jeśli to nie jest mała litera, to
będzie po prostu oddaj mi c, która jest perfect, które oznacza, że ​​mogę pozbyć się
mój inny warunek.
>> Więc pozwól mi wrócić do gedit i teraz pozwól mi to zrobić.
Mam zamiar skopiować mój printf.
Mam zamiar iść do przodu i prawo wewnątrz do druku pętli, że obecnie, a otrzymasz
pozbyć się tego całego jeśli konstrukt.
Czy nie jest to zły pomysł, i to było bardzo bardzo poprawne i zgodne z
Wszystko, co głosił, ale nie tylko jest to konieczne.
Jak najszybciej zrealizować niektóre biblioteki funkcja istnieje, że ktoś inny
napisał, czy może w innym miejscu napisał plik, można go używać i bardzo
początku do zaostrzenia kod.
>> I kiedy mówię takie rzeczy jak dobrym stylu, Fakt, że ta osoba nazwie
funkcjonować do górnej lub wcześniej jest niższy jest cudownie przydatne, ponieważ
są bardzo opisowe.
Nie chcesz, aby zadzwonić do funkcji x i y, z, które mają
dużo, dużo mniej sens.
Wszelkie pytania na temat tej serii usprawnień?
>> Więc wystarczy powiedzieć, jednego z dania na wynos jest nawet własnego problemu
set - może set problemem jeden, ale pewnością P zestaw dwóch i dalej, nawet
kiedy są poprawne niekoniecznie oznacza, że ​​są idealne tylko
jeszcze ani szczególnie dobrze zaprojektowane.
Które znajduje się w drugiej osi zacząć myśleć o tym.
Więc to było w środku napis z Twoich pamięci komputera, ale jeśli masz
cała masa znaków jak H-E-L-L-O wewnątrz pamięci RAM, i załóżmy
że w swoim programie wywołać uzyskać ciąg wiele razy tak, że
zadzwoń uzyskać ciąg raz, to zadzwoń uzyskać ciąg ponownie.
Cóż, co się stało się w czasie?
>> Innymi słowy, jeśli masz linię Kod, choć z kontekstu, jak
string s dostaje -
zróbmy to.
String name równa uzyskać ciąg.
Więc załóżmy, że linia kodu jest przeznaczona poprosić użytkownika o jego nazwisko.
To następna linia kodu ma zapytać łatwy do jej szkoły i
to następna linia, i tak dalej.
Załóżmy, że mamy prosić użytkownika do drugiego i
inny, a drugi ciąg.
Zamierzają zatrzymać w pamięci w tym samym czasie.
Nie ma clobber inne.
Szkoła nie jest zastąpienie innych.
Ale gdzie oni wszyscy kończy się w pamięci?
>> Cóż, jeśli zaczniemy rysować na ekranie, które możemy wykorzystać tę rzecz
tu jak tablicy, jeśli ten czarny prostokąt reprezentuje komputer-tych
pamięci, mam zamiar arbitralnie zacząć dzieląc je na małe kwadraty,
z których każdy reprezentuje jeden bajt pamięci.
Szczerze mówiąc, jeśli masz gigabajt pamięci RAM te dni, masz miliard bajtów
pamięci w komputerze, więc mld z tych kwadratów.
Więc wystarczy powiedzieć, to naprawdę nie jest w skali.
>> Ale możemy zachować rysunek wszystkie te wyraźnie nie w skali kwadratów, a to
łącznie stanowi mojej pamięci komputera.
Teraz tylko zrobię kropka, kropka, kropka.
Więc innymi słowy, kiedy wyświetlał Użytkownik z get ciąg dać mi
łańcuch, co się dzieje?
Jeśli użytkownik wpisze w "hello", który kończy w H-E-L-L-O. Załóżmy jednak, że
Następnie użytkownik typy w -
Właściwie to nie powinienem tego robić witam, ponieważ pytamy
za ich nazw.
Więc wróćmy, czy mogę to zrobić.
>> Więc jeśli typ w D-A-V-I-D dla mojego imienia, ale przypominam, że druga linia
Kod został uzyskać ciąg ponownie aby ich szkoły.
Gdzie to jest słowo, które użytkownik typy w zamiar iść dalej?
Cóż, może to się udać do H-A-R-V-A-R-D. Dlatego, mimo że mam
wyciągnąć go w dwóch rzędach, to tylko cała masa bajtów w pliku
pamięci RAM komputera.
Nie ma teraz problem, bo teraz, czy jestem przy użyciu pamięci RAM w tym bardzo rozsądne
ale jakby naiwny sposób, co można najwyraźniej nie rozróżnia?
W przypadku, gdy jeden zaczyna się i gdzie jedno kończy, prawda?
Są swego rodzaju rozmycia razem.
>> Tak więc okazuje się, że komputer nie to zrobić.
Pozwól mi faktycznie przewijania do tyłu w czasie o Kilka znaków, a zamiast Harvardzie
będzie bezpośrednio po nazwie użytkownika, użytkownik w rzeczywistości pobiera, za
sceny, znak specjalny dodany przez
komputer dla niego.
/ 0, inaczej znany jako NUL irytująco nazwie N-U-L, nie
N-U-L-L, ale piszę to jak / 0.
To jest po prostu wszystkie bity zerowe jest marker w między pierwszym słowem, które użytkownik-tych
wpisane i sekundy.
>> Więc Harvard rzeczywiście teraz kończy się w tej kolejności znaków
i jeszcze jedno / 0.
Tak więc, innymi słowy, poprzez te Wartości wskaźnikowe, osiem sąsiadujących zera
bity, możesz teraz zacząć rozróżniać jeden znak od drugiego.
Więc cały ten czas, co było "cześć" jest faktycznie "hello" z / 0, a
tymczasem, że może bardzo dobrze być trochę więcej RAM
wewnątrz komputera.
>> Pozwól mi zrobić jedną rzecz teraz.
Okazuje się, że wszystkie z tych kwadratów byliśmy rysunku, są one, tak,
struny, ale bardziej ogólnie, te rzeczy są tablice.
Tablica jest po prostu kawałek pamięci to z powrotem do tyłu, aby z powrotem do tyłu,
i zazwyczaj używać tablicy w drodze tego zapisu kwadratowego uchwytu.
Więc idziemy zobaczyć te trochę w czasie, ale pozwól mi iść do przodu i
otworzyć się, nazwijmy to grupy wiekowe.
I zauważyć, co możemy zrobić z te same sztuczki, małe
nieco bardziej składnia tutaj.
>> Tak więc w wierszu 17 tego programu - faktycznie, pozwól mi najpierw uruchomić program
, dzięki czemu możemy zobaczyć, co to coś robi.
Zadzwonię zrobić wieki skompilować program.
. Wieku /.
Ile osób w pokoju?
Nazwijmy to trzy.
Wiek pierwszej osoby?
18, 19 i 20.
A teraz trochę śmiesznie, po prostu dokonały program że epoki te
trzy osoby.
>> Więc jest wyraźnie okazja dla zabawy arytmetyki tutaj.
Na szczęście, matematyka jest prawidłowe.
18 udał się do 19, 19 poszedł do 20 i tak dalej.
Ale co tak naprawdę znaczy być ilustracyjny o to, jak jesteśmy przechowywania
wieku tych trzech ludzi.
Pozwól mi przybliżyć, co jest tu dzieje.
>> Więc po pierwsze, te pierwsze kilka linii powinna być coraz całkiem znajomo.
Jestem po prostu pyta użytkownika o liczba osób w pokoju.
Następnie używam uzyskać int i zrobić, gdy do zrobić to znowu i znowu i znowu.
Widzieliśmy, że wzór wcześniej, ale Linia 27 jest nowy i całkiem
przydatne i będzie coraz bardziej przydatne.
Zauważ, że co innego w linii 27 jest to, że wydaje się być stwierdzenie
int o nazwie wiek, ale czekać.
To nie tylko int wieku.
Jest te nawiasy kwadratowe, wewnątrz, który jest N.
>> Tak więc wspornik N w tym kontekście, nie wewnątrz printf tutaj, ale
w tym wyłącznie linii 27, ta linia jest mówiąc: daj mi n wskazówki, z których każda
jest typu int.
Więc to jest wiadro, by tak rzec, z, W tym przypadku, trzy liczby całkowite z powrotem do
z powrotem do tyłu, tak, że skutecznie mają trzy zmienne.
Alternatywą, jest jasne, byłoby to.
>> Gdybym chciał najpierw studenta wiek, może to zrobić.
Gdybym chciał sekund studenta wiek może to zrobić.
Gdybym chciał trzecia studenta wiek, może to zrobić.
I broń Boże musimy wszyscy są wiek w tym pokoju -
To znaczy, jest to kawał egzemplarza, wklej jeszcze raz i jeszcze raz i jeszcze raz.
A Plus raz skompilować ten program, czy inny student wchodzi na out
z tych drzwi, teraz mój numer zmiennych jest nieprawidłowy.
>> Więc co jest ładne o tablicy jest tylko zaczniesz czuć się
kopiowanie i wklejanie, kursy są to nie jest najlepszym rozwiązaniem.
Tablica jest dynamiczny potencjalnie.
Nie wiem z góry, ile osób będą w pokoju,
ale wiem, że muszę na północ od nich, i będę dowiedzieć się, n, gdy nadejdzie czas.
Ten wiersz kodu oznacza teraz, daj mi fragment pamięci, który wygląda tak
w którym liczba skrzynek na ekranie jest całkowicie zależne od n, że
użytkownik wpisze w.
>> Więc teraz reszta tego programu jest rzeczywiście bardzo podobny do tego, co
po prostu nie z postaciami.
Zauważ, mam dla pętli począwszy od linii 30.
Więc zaraz po mam tablicę, I iteracji od y jest równa zero na do n.
Mam tylko to pouczające printf Komunikat po prostu mówiąc, daj mi wiek
osoby #% i, tak, numer jeden, numer dwa, numer trzy.
I dlaczego mam to zrobić?
Szczerze mówiąc, ludzie wolą liczyć od jednego On Up natomiast informatyków,
zera w górę.
informatycy nie będą korzystać z tego rodzaju programu, więc jesteśmy
będzie po prostu zacząć odliczanie w jednym, jak normalni ludzie.
>> A teraz, w linii 33, zauważyć nieznacznie inny element składni.
I-tym wieku w zmiennej typu array dostanie int.
A teraz na koniec, to dopiero arytmetyka tutaj.
Postanowiłem w osobnej pętli do żądania jakiś czas mija, a teraz w tym
osobna pętla, linie te wykonać.
>> Za rok, osoba i będzie i lat, ale zauważ, to nie jest
zmiennej i.
To jest teraz% i do int.
I zauważ, jako pierwszy zastępczy, I wtyczka w I plus 1, więc liczymy jak
normalny człowiek.
I wtedy dla wartości ich życia, dla i. lat, I wziąć wieku wspornik
i - i dlaczego robię plus jeden tutaj?
Oni właśnie wieku.
To mój głupi wybór programów.
Oni po prostu w wieku jednego roku.
Mogę wpisać w dowolnej ilości tego I rzeczywiście chcą tam.
>> Więc co tak naprawdę wszystko Znaczenie tutaj?
Cóż, pozwól mi faktycznie przewijania tutaj i malować obraz
z tego, co nas czeka.
Co będziemy robić z naszym następnym Set Problem Two jest para się
świat kryptografii.
Więc to jest ciąg znaków, więc Kolejność wielu znaków, a co
to mówi?
To nie jest w wersji online ze slajdów.
>> Więc twierdzenie, że to równa się to, głupia reklama od wielu lat
temu, że w rzeczywistości może przywołać jeden z jego pochodzenia.
Tak więc jest to przykład szyfrowanie czy kryptografii.
Okazuje się, że jeśli chcesz rzeczywiście wysłać informacje lub akcje
Informacje z kimś bezpiecznie jak wiadomości jak ta, można
wyścig litery.
Ale zazwyczaj, słowa są nie kodowany losowo.
Są one przesuwane w jakiś sposób zmienił w jakiś sposób tak, że - oops.
To zabawne spoiler na następny raz.
>> Więc można odwzorować to, co jest pozornie O zauważyć, że linie się B.
kapitalizacja mądry.
Najwyraźniej r staje się e.
Najwyraźniej F-H-E-R staje S-U-R-E. Tak okazuje się, że to mapowanie, w
ta sprawa jest całkiem głupi mapowanie czy ktoś zdobione?
To jest coś, co nazywa Rot 13, Obrót 13.
To najgłupsza szyfrowania mechanizmy, ponieważ dosłownie
dodaje 13 do każdej z liter, głupi w tym sensie, że jeśli tylko
mają trochę wolnego czasu na rękach i ołówek, lub po prostu, że to
przez w głowie, możesz spróbować wszystkie możliwe dodatki - jeden, dwa,
trzy, kropka, kropka, kropka, 25 to po prostu obracać cały alfabet, i
w końcu, będzie można dowiedzieć się, co ta wiadomość jest.
Więc jeśli zrobił coś takiego w klasy szkoły przekazując wiadomości do
najlepszym przyjacielem, jeśli grade school nauczyciel po prostu przeczytać
wiadomości i brute zmuszeni rozwiązanie, można zdobyć
Odpowiedz przez to.
>> Teraz oczywiście, w świecie rzeczywistym, kryptografia jest bardziej wyrafinowane.
To jest fragment tekstu z System komputerowy, który nazwy użytkownika i
Hasła, jak prawie wszystkie nasze uwagi i to właśnie hasło może
wyglądać, jeśli jest przechowywany na twardym jechać, ale w postaci zaszyfrowanej.
To nie jest tylko rotacja liter jest Jest B, a B jest C. Jest
znacznie bardziej wyrafinowany, ale korzysta , co jest powszechnie znane jako tajnego klucza
kryptografia.
To zdjęcie mówi następujące historia z kilkoma ikonami.
>> Po lewej stronie, mamy to, co zadzwonimy zwykły tekst.
W świecie kryptografii, zwykły Tekst jest tylko oryginalna wiadomość
w języku angielskim lub francuskim lub w jakimkolwiek języku.
Jeśli chcesz zaszyfrować, miniemy to obrazowo przez kłódkę, więc
niektóre rodzaj algorytmu, niektóre funkcje lub programu, że ktoś napisał
że szyfruje litery miejmy nadzieję bardziej skomplikowanej niż tylko dodanie 13
w każdym z nich.
>> Co masz z tego procesu w middle tam nazywa zaszyfrowane.
Więc niby sexy słowa.
To po prostu oznacza, że ​​jest szyfrowany wersja zwykłego tekstu.
I tylko wtedy, gdy ten sam sekret, 13 lub minus 13, czy jesteś w stanie
odszyfrować wiadomość tak.
>> Więc problemu ustawić dwa, wśród rzeczy zrobisz, jeśli w Hacker
Edition, trzeba będzie napisać kod złamania tych haseł, zastanawianie się,
co to było i jak były one szyfrowane, chociaż robimy dać trochę
prowadzenie wzdłuż drogi.
W wersji Standard Edition, wprowadzamy Kilka cyfr, szyfrowanie
mechanizmy, jeden o nazwie Cezar, jeden nazywa Vigenere, że są jeszcze
rotacyjne szyfry gdzie staje coś, B staje się czymś, ale
trzeba to zrobić programowo bo rzeczywiście będzie tajemnicą
Klucz zaangażowane która jest zazwyczaj numer lub słowo kluczowe, które tylko
nadawca i odbiorca są Komunikaty powinny zrozumieć.
>> Teraz, to faktycznie ma wcieleń w świecie rzeczywistym.
To, na przykład, jest mało sierocy Secret pierścień Annie dekoder, i
może rzeczywiście realizować te Szyfry - obrotowa
Staje się czymś, B staje się coś - z parą kół,
jedna na zewnątrz, jeden w środku takie, że jeśli obrót kółka lub
Pierścień, rzeczywiście można wyrównać listów z różnych liter,
się tajny kod.
I tak jak cliffhanger na dzisiaj, to, co myślałem, że wystarczy trochę
cofnięcie się, że po włączeniu telewizora w dniu 24 grudnia, można oglądać
film ad nauseum 24 godzin z rzędu.
Ale na dzisiaj, będę go otworzyć tutaj i daje nam zaledwie dwie minuty
pedagogicznie istotne Christmas Story z trochę faceta o imieniu Ralphie.
>> [PLAYBACK VIDEO]
>> -Być wiadomo wszem i wobec, że Ralph Parker zostaje mianowany
członkiem Little Orphan Annie tajemnicy okrąg i ma prawo do wszystkich
zaszczyty i korzyści występujących z nimi.
>> -Podpis, Mały Orphan Annie.
Podpisanych, Pierre Andre atramentem.
Nagrody i korzyści już w wieku dziewięciu lat.
>> [Krzyczy na Radio]
>> Chodź, zabierzmy się za to.
I nie trzeba cały ten jazz o przemytnicy i piraci.
>> -Słuchaj jutro dla zawieranie przygoda black
statek piracki.
Teraz nadszedł czas na Tajemnicy Annie Wiadomość dla Ciebie członków
tajnego koła.
Pamiętaj, dzieci.
Tylko członkowie Secret Circle Annie może dekodować tajne wiadomości Annie.
Pamiętaj, Annie jest w zależności od Ciebie.
Ustaw pineski do B2.
Oto wiadomość.
12, 11, 2 -
>> -Jestem w moim pierwszym posiedzeniu tajnym.
>> -25, 14, 11, 18, 16 -
>> -Pierre był w wielkiej dziś głosu.
Widziałem, że dzisiejszy komunikat było naprawdę ważne.
>> -3, 25.
To jest wiadomość od Annie siebie.
Pamiętaj, nie mów nikomu.
>> -90 Sekund później, jestem w jedynym pokoju w domu, w którym chłopiec z dziewięciu
może siedzieć w zaciszu i dekodowania.
Aha, B. poszedłem dalej.
E. Pierwsze słowo jest "być". S. Dochodził łatwiej.
U. 25.
To R.
>> -Chodź, Ralphie.
Muszę iść.
>> -I 'll być w prawo w dół, Ma.
Gee świst.
>> -T. O. Upewnij się.
Upewnij się, że co?
Jaki był mały Orphan Annie chce powiedzieć?
Upewnij się, że co?
>> -Ralphie, Randy musi odejść.
Czy możesz wyjść?
>> -Wszystko w porządku, mamo.
Zaraz będę się.
>> -I było coraz bliżej do teraz.
Napięcie było straszne.
Co to było?
Los planety może wisi na włosku.
>> -Ralphie, Randy muszę iść.
>> -I 'll być prosto do płakać.
>> -Już prawie.
Moje palce poleciał.
Mój umysł był pułapką stali.
Każda pora wibruje.
To było niemal oczywiste.
Tak, tak, tak, tak, tak.
>> -Pamiętaj, aby pić Ovaltine.
Ovaltine?
Kiepska handlowych?
Sukinsyn.
>> [END PLAYBACK VIDEO]
>> SPEAKER 1: To jest CS50, i że Problem będzie Set Two.
Do zobaczenia w przyszłym tygodniu.
>> Głośnik 2: Na następny CS50, to się stanie.
>> SPEAKER 1: Więc jeden temat nie mamy spojrzał na tak daleko jest
że wśród wskaźników funkcji.
Teraz jest tylko wskaźnik funkcji adres publiczny
funkcja, ale podobnie jak -
syn -