[MUZYKI] DAVID MALAN: Witam wszystkich. To supersection CS50 jest. Przypisane sekcje nie będzie rozpocząć na kolejny tydzień. I tak dzisiaj, jestem tu with-- MARIA: Maria. DAVID MALAN: --to rzeczywistości zapoznać się z problemem ustawić jedną, kurs jest Pierwsze tygodnie materiału, uzyskać można zorientowane CS50 IDE, nieco Linuksa, systemu operacyjnego, który jest działa na IDE, jak również spojrzeć na niektóre z przejściem od podstaw do C wiodących do problemu ustawić jedną. Więc bez zbędnych ceregieli, w problemu ustawić jeden, masz zamiar być wprowadzone do CS50 IDE, które jest to programowanie internetowy środowisko, które wykorzystujemy w celu pisać programy. To zostało zaprojektowane tak, aby wyglądać bardzo przypomina typowego komputera System prowadzenia eksploatacji System o nazwie Linux. Ale to jest w tak zwanej chmurze, co oznacza, że ​​każdy w klasie może rzeczywiście jego lub jej własne konto i korzystać z niego, jak również. Tak więc większość z was zapewne nigdy nie używany Przed środowisko Linux, a może nawet środowisko linii poleceń. I wiersz poleceń Środowisko jest inna. To wszystko tekstowe. To wszystkie komendy z klawiatury. I to nie Mousing, brak ikon, bez okien dialogowych, ma menu. To czysto tekstowe. Tak więc na początku, to niby z czuje się jak w kroku tyłu pod względem złożoności. Ale to kończy się o wiele bardziej wydajne, na pewno, dla informatyk, ostatecznie. Warto więc przyjrzeć. Oto jestem w CS50.io, poprzez które możesz zalogować się CS50 IDE. I podobnie jak w Scratch, jest trzy podstawowe obszary, do tego ekranu. Więc po stronie lewej ręki, mamy co będzie przeglądarka plików. I nie ma w tym folderze na góry, która jest w tej chwili pusty od Pozbyłem się wszystkich moich Pliki przed supersection. I to gdzie będziesz zapisywać pliki C, które piszemy. W prawym górnym rogu, mamy miejsce, gdzie cały nasz kod będzie uzyskać pisemną. I rzeczywiście, jeśli kliknięciu tego plusa, to będzie pozwól mi wybrać nowy plik. I tu mogę zacząć pisać kod C, lub Naprawdę, dowolną liczbę innych językach. A następnie na dole, gdzie go mówi jharvard @ ide50-- i twoje będzie powiedzieć coś trochę different-- co to nazywa? Okno terminalu. Tak. Więc okna terminalu tzw wiersza poleceń interfejs, za pomocą którego można komunikować z podstawowym systemem operacyjnym. A teraz, będziemy bardzo niewiele użycia this-- tylko skompilować, aby spojrzeć na komunikaty o błędach, które widzimy, i uruchomić nasze programy. Ale w końcu, będziemy zrobić o wiele więcej, jak również. I można nawet zainstalować oprogramowanie i podać swoje miejsce pracy w ciągu CS50 IDE, jak również. Ale o tym innym razem. Więc śmiało i pisać bardzo prosty program tylko przejść przez rozgrzewania hello.c, który może najprostszy program, możemy napisać. Już otworzyła nową kartę. Mam zamiar iść do przodu i powiedzieć to standardowy io.h. Następnie int main (void). A potem printf ("Witaj, świecie" odwrotny ukośnik n, blisko cytat, blisko nawiasy i średnik. W porządku. Więc teraz zauważyć moje okno jest bez tytułu. Jestem więc bardzo szybko idzie , aby przejść do pliku, zapisz. I to jest ważne, że Nie nazywam to "cześć". Więc to bardzo częsty błąd, zwłaszcza problemu ustawić jeden, jest przypadkiem po prostu zadzwonić do Program "woda" lub "chciwy" lub "Mario" lub "kredyt" lub podobne. Ale rzeczywiście chcesz, aby czy masz rozszerzenie pliku ponieważ jest to jedyny sposób, że kompilator, a także edytor kodu wie, że jesteś rzeczywiście pisanie kodu C. Więc pozwól mi iść do przodu, a następnie kliknij przycisk Zapisz. I teraz też, co CS50 IDE uczynił dla nas jest to również Składnia podświetlone wszystko. Więc to jest zrobione wszystko bardzo kolorowe. A głównym celem nie działa. To tylko zwrócić oczy na koncepcyjnie różne kawałki tego programu. Więc śmiało i skompilować to. I mogę skompilować ten w kilka sposobów. Oraz w jednym tygodniu sposobem starej szkoły zrobiliśmy to było dosłownie na Polecenie line-- "hello.c dzyń". A potem naciśnij Enter. I nic się nie dzieje W oknie terminala. Ale to, co zrobił zmianę w IDE? Gdzie znów IDE oznacza po prostu, Zintegrowane środowisko programistyczne. Jest to fantazyjny sposób na powiedzenie Ten zintegrowany rozwój środowisko dla rozwoju oprogramowania. Więc co zmienić w interfejsie użytkownika? Co można zauważyć, że jest inaczej, Maria? MARIA: zauważyłem coś pod IDE50 folderu tutaj. DAVID MALAN: Tak. Więc tutaj nie tylko mamy "hello.c." Mamy też "a.out", który jest rodzaj głupie nazwy programu. Ale rzeczywiście, jest to domyślna nazwa dla Program po prostu skompilować kod i nie mów, że kompilator co plik do wyjścia. Więc jeśli chcę uruchomić to, że trzeba powiedzieć compiler-- czy raczej muszę powiedz do pracy, że Aby uruchomić program o nazwie "a.out". Wchodzić. I nie ma "cześć, świat. "teraz" ./ ". jest rzeczywiście ważne. Mimo, że zwykle tylko Napisać nazwy poleceń, kiedy to program masz napisane, to chcę powiedzieć, "./" dlatego, że wyraźnie mówi Linux które chcesz uruchomić program o nazwie "a.out" to w tym, gdzie kropka Oznacza to katalog, w którym jestem obecnie w, co dzieje się zwany roboczy "a.out. Bo jeśli ja po prostu powiedział "a.out" Enter Mam zamiar dostać "a.out polecenia nie znaleziono "ponieważ computer-- dlatego, że wymyślił "a.out;" nie pochodzą z computer-- nie wiem, gdzie go szukać, nawet jeśli jest to prawda pod moim nosem, że tak powiem. OK. Więc możemy to zmienić, aby być "dzyń -o witaj hello.c." A gdybym naciśnij Enter, co program Czy to będzie wyjście dla mnie? Jaka jest nazwa pliku? Tak, w plecy. Zgadza się. "Halo." Więc "hello" będzie nazwa programu ponieważ już stosowane tak zwane argument wiersza poleceń, która jest po prostu sposób zmiany zachowań kompilator faktycznie wyjścia specyficzna nazwa pliku. I rzeczywiście, jeśli powiększyć na zewnątrz i spojrzeć tutaj, teraz mam nie tylko "a.out" i "hello.c", ale także "cześć", jak również. Więc teraz mogę to zrobić "./hello," Enter. I nie ma "hello, world". Ale lastly-- i to teraz będzie konwencja używamy całej Semestr, typically-- to możesz po prostu powiedzieć "aby cześć." I rzeczywiście, to mówi, że to się dotychczas, ponieważ istnieje. Pozwólcie mi iść do przodu i wyjąć z polecenie rm, zarówno "a.out" - i powiedzieć: "usuń regularne a.out?" To tylko oznacza, jesteś pewien, że chcesz go usunąć? I powiem tak. A potem idę do usunięcia "cześć", ale nie "hello.c." Mam zamiar powiedzieć "tak" jednoznacznie, a "y" jest wystarczające, jak również. A teraz zauważyć, jeśli wpisz ls-- która, przypomnijmy, Oznacza list-- to lista wszystkich pliki w moim katalogu. I rzeczywiście, jeśli powiększyć się i spojrzeć na górze po lewej stronie, potwierdza, że ​​to, co jest w tym folderze, nawet choć jest to oznaczone jako IDE50 tutaj a nie do pracy, to jest po prostu "hello.c." Więc teraz, tutaj, jeśli I nie ", aby przywitać," Enter teraz widzę o wiele dłuższą polecenia, ale bardziej skomplikowane polecenia, które będzie użyteczne w tygodniach. A teraz mogę powiedzieć "./hello." Warto więc w szybki Polecenia inny Linux. To dlaczego nie możemy zrobić krok z powrotem i spojrzy na C więcej Ogólnie rzecz biorąc, przejście od podstaw do C, a następnie zawrzeć z wyrazem w pierwszym problemem ustawić w C. W porządku. Więc mam zamiar iść do przodu i po prostu czyste się moim roboczej z Control-L tylko utrzymać ekran zadbane. Ale to nie ma funkcjonalne wpływ inaczej. Przypomnijmy, że widzieliśmy kilka poleceń teraz. Tak więc widzieliśmy szczęk, które generalnie można nie będzie musiał wykonywać ręcznie więcej. Będziemy zamiast używania make. Ale widzieliśmy też ls, która pokazuje lista plików w moim katalogu. A teraz, dlaczego jest there-- Są dwa Pliki teraz, "hello" i "hello.c." Dlaczego jest gwiazdą lub Gwiazdka po "cześć"? Co to oznacza, na podstawie na to, co widzieliśmy w jednym tygodniu? Co myślisz? Co oznacza gwiazdka oznacza? MARIA: For-- programu "cześć"? DAVID MALAN: "Cześć *". Tak. Oh, tak? Och, wykonywalny. Zgadza się. To znaczy, że "hello" jest wykonywalny. Więc rzeczywiście, dlatego Mogę zrobić "./hello." W porządku. Co jeszcze mogę zrobić tutaj? Cóż, okazuje się, że można również tworzyć katalogów. Więc pozwól mi iść dalej i tworzyć, na przykład katalog "pset1". A specyfikacja problemu ustawić będzie można zrobić dokładnie to, więc nie trzeba pamiętać dziś. Ale "mkdir pset1" wydaje się nie mieć wpływu. Ale znowu, nie ma komunikatu o błędzie jest na ogół dobrze. Więc jeśli wpisz "ls" now-- ah, teraz Mam plik wykonywalny o nazwie "witam", to plik C nazywa się "hello.c." A następnie ukośnik, tak aby mówią, oznacza, że ​​jest to katalog. Więc rzeczywiście, teraz chcę, aby go otworzyć. I nie dwukrotnie kliknąć na nim jak GUI, w środowisku graficznym. I zamiast powiedzieć "cd pset1." Wchodzić. Nic ciekawego wydaje się mieć się poza moim małym wierszu here-- to sposób Linuksa przypominania mi, gdzie jestem, więc co folder jest otwarty. To jest po prostu mówi mi wyraźnie a nie w formie graficznej. A jeśli wpisz "ls", dlaczego widzę innego poprosi natychmiast, myślisz, Kiedy wyświetlić zawartość pset1? MARIA: prawdopodobnie nie mieć coś tam. DAVID MALAN: Tak. Więc to nie ma oczywiście stworzył coś tam bo właśnie utworzony katalog. Teraz, gdybym chciał stworzyć file-- dla instancji, można utworzyć nowy plik. A potem mogę iść do Zapisz i zapisać go jako, jak "mario.c" jeśli robisz średnia edycja pset jednym. A potem, jak w każdym komputerze Mac lub PC, po prostu Wybierz folder "pset1, Zapisz. A teraz plik jest pusty. Ale niech powiększyć jeszcze raz na sekundę. Zróbmy ls tutaj. Teraz widzimy "mario.c". Więc jest kilka innych poleceń, które to warto pamiętać ponad time-- jasne, lub Control-L jest to, co mam było uderzenie; mkdir widzieliśmy; rm widzieliśmy, jak również, co jest do usuwania lub usuwania pliku. Uważaj można also-- i jeśli spojrzeć na samouczki online, będziesz rmdir Jest to bardzo powszechny sposób powiedzenia usunąć folder, który ma rzeczy w nim. Wystarczy być super, super ostrożny. -rf oznacza rekurencyjnie usuwać cokolwiek to jest próbujesz usunąć i siłą usunąć. Tak rekurencyjne środków, jeśli jest to folder z folder z folderu z folderu, usunąć wszystkie z nich. I siłą znaczy nawet nie pytają mnie, tak lub nie, jestem pewien? Więc jest to bardzo niebezpieczny sposób usuwanie wiele rzeczy szybko. Ale zbyt często robi beware-- nieustraszony uczeń przypadkowo usunąć, powiedzmy, pset Jeden z nich, na przykład. MARIA: A jeśli po prostu zrobić -r, że będziemy z prośbą o każdym pliku. DAVID MALAN: Jakie jest umiarkowanie irytujące. MARIA: Tak. DAVID MALAN: Więc dlatego tak wielu z nas, samo w cenie, jestem w zwyczaju korzystania -rf. Ale to jest niebezpieczne. Więc uważaj nabywcy. A potem mv jest rodzajem ciekawie nazwany. Więc to jest polecenie ruchu, który czuje się trochę dziwne Rzeczywiście, ponieważ można używać do przenoszenie plików z jednego miejsca do drugiego. Na przykład załóżmy, że zawiedli. Załóżmy, że stworzyłem nowy plik dla zbior. I zapisany jako "greedy.c." Ale załóżmy, że przypadkowo zapisać w IDE50-- więc moim samej przestrzeni roboczej a nie w pset1. Możesz zobaczyć, jak wiele w lewym górnym rogu. Jest "greedy.c." I jest kilka rozwiązań. Tak jeden, można używać bardzo przyjazny dla użytkownika sposób, po prostu przeciągając i upuszczając. I że faktycznie rozwiązać ten problem. Ale dzisiaj, staramy się spojrzeć na bardziej tajemnicze, ale potężne sposoby w ten sposób. Więc pozwól mi wziąć "ls" w pset1. I widzę tylko "mario.c." Pozwólcie mi iść do przodu i robić "cd ..". Tak więc znów jest katalog CD zmiany. ".." Oznacza to, co, chociaż? Ostatni raz powiedziałem "cd pset1 ", aby przejść do pset1. Więc kiedy mówię "cd ..", co ja robię? Wstecz. Tak. Więc to będzie tzw rodzica. Przejść o jeden poziom wyżej, jak wychodzenia z folderu. Więc Enter. I rzeczywiście, wygląda to, co zrobił. To mnie po prostu przeniósł się do przestrzeni roboczej, a nie od do pset1, która jest w obszarze roboczym. A teraz, jeśli wpisz "ls", istnieje cała masa rzeczy. Tam jest "greedy.c". Więc teraz pozwól mi użyć mv dosłownie przenieść "greedy.c" do pset1. I tak dużo polecenia Linuksa działają dokładnie tak. Biorą żadnych argumentów albo przyjąć jedną Argument lub biorą dwa wiersza poleceń argumenty i tak dalej. I w tym przypadku jest dosłownie robić to, co mówi, choć succinctly-- przenieść greedy.c do pset1. Wchodzić. Nic się nie dzieje. Ale jeśli mam zrobić ls znowu chciwi nie ma. A jeśli to zrobię "CD pset1", Enter, a następnie ls znowu, teraz jest na właściwym miejscu. Tak na marginesie, jeśli dla niektóre reason-- szczególnie jeśli masz przerywany łączność sieciowa lub jesteś chodzą Kampus z laptopem pokrywką zamknięte, a następnie otwórz go Obszar roboczy ponownie wydaje się nieco zsynchronizowane, nic wielkiego. Wystarczy odświeżyć przeglądarkę okno, w którym powinno resync tak, że lewa przeglądarka plików wygląda dokładnie podobnie jak w oknie terminala. Nie martwić się. W przypadku wątpliwości, przeładuj stronę, więc ile masz zapisane pliki już. OK. Tak mv mogą być również stosowane w celu zmiany nazwy plików. I rzućmy okiem na ten ostatni polecenie tutaj. Tak suppose-- i jest bardzo często, też na początku. Niektórzy uczniowie czasem utworzyć plik nazywa, niech say-- co jeszcze jeden? Podobnie jak "WATER.C." Więc ja po prostu krzyczeć, na nie ma powodu, we wszystkich czapki. Jednak nie jest to prawidłowa nazwa pliku choćby dlatego, ustawić nasz problem Specyfikacja nie powiedział zapisać plik w Wszystkie "WATER.C." Zamiast tego, możemy spodziewać "water.c" małymi literami. I rzeczywiście, jest to problematyczne, ponieważ check50, program idziesz spotkać się problemu ustawić jeden, który automatycznie sprawdza poprawność kodu będzie krzyczeć na ciebie, jeśli nie można znaleźć "water.c" z wszystkimi małymi. Trzeba więc, aby to naprawić. Tak wiele różnych sposobów to zrobić, z których pierwszy byłoby z wciśniętym klawiszem Control lub kliknij prawym przyciskiem myszy nazwa pliku i po prostu zmienić Zmień nazwę. Całkowicie w porządku, aby to zrobić. Ale znowu, dzisiaj niech zrobić to trochę hodowcy. Użyjmy mv, aby zmienić "WATER.C" na "water.c". Więc można również użyć pierwszy argument zmienić jego nazwę do drugiego argumentu jeśli drugi argument nie jest w Fakt, folder lub nazwa katalogu. W porządku. I wreszcie, trochę trick-- więc jestem w mój katalog roboczy w tej chwili. Jeśli chcę się dostać do pset jednym, Pewnością mogę wpisać "cd pset1." Ale to jest tak uciążliwe, aby wpisać "pset1" lub dłuższe nazwy plików i nazwy katalogów jeszcze. Więc bardzo często w systemie Linux, co można zrobić, to zacząć pisać "PSE" i po prostu się nudzą, naciśnij Tab, i niech figura komputer to dla ciebie. Super pomocny aby dostać się do tego zwyczaju. Jedynym haczykiem jest to, jeśli masz wiele plików lub folderów, począwszy od z literą "P" lub "PS", możesz mieć wpisać kilka innych przed Komputer wie, co robić. MARIA: Lubimy skróty. DAVID MALAN: Ta wola zaoszczędzić dużo czasu. A także, jak powiedział w wykładzie, to może przewijać się w historii, w górę iw dół, znaleźć niedawno wykonane polecenia, jak również. W porządku. Więc teraz, niech zwrócić uwagę z powrotem do prostego programu, hello world. Więc mamy skompilowany to dokładnie. A teraz, dlaczego nie bierzemy spojrzenie na typy danych a następnie przejście od niektórych odpowiadające Scratch bloki C MARIA: Awesome. Więc teraz, że już zaczął pisanie programów w C, mamy zamiar zacząć mówić o typach danych i zmiennych. Więc niektóre typy danych, które chciałbym wiedzieć od zaraz są te, które są podświetlony na niebiesko. Mamy więc int pierwszy, co oznacza całkowitą. I że posiada liczb całkowitych, jak ty Może mieć guessed-- tak 1, 2, 3, i innych liczb całkowitych że można myśleć. DAVID MALAN: A także negatywne. MARIA: A także negatywne, yep. I 0. Następnie mamy pływaków, które są liczby zmiennoprzecinkowe. Więc to wszystkie liczby rzeczywiste które mają miejsc po przecinku. Tak, 5,0, 5,2, a nawet bardziej cyfry po przecinku, oraz, a także negatywne. Następnie mamy char, który jest postacią. Więc myślę, że rozmawialiśmy o W wykładzie tym dzisiaj. Ale mamy litery, na example-- A, B, C-, która może być przechowywana jako odbarwiającego. Ale wtedy mamy o wiele więcej symboli które mogą być przechowywane jako odbarwiającego. A ci są przechowywane jako ASCII. A potem mamy bool, które są Boolean. I tych wartości TRUE lub Fałsz i 0 lub 1, odpowiednio. DAVID MALAN: I przypomnieć, że bool pochodzi z biblioteki CS50. Więc to nie jest wbudowany w C, ale jest to bardzo przydatne mieć pojęcia prawdy i fałszu. I chociaż Ciebie może think-- fakt zabawy. Bool technicznie potrzebuje ile bitów, naprawdę, do reprezentowania prawda kontra fałsz? Ile bitów myślisz będzie trzeba, maksymalnie? Tak, tylko jeden. Tak więc okazuje się, że C nie może dać tylko jeden bit. Najmniejsza jednostka miary można uzyskać jest osiem. Więc to trochę marnotrawstwo, że jesteś za pomocą całego bajtu, lub osiem bitów do reprezentowania Prawda czy fałsz. Ale to jest po prostu tak jest realizowane C przez bibliotekę CS50. MARIA: A potem ci, że jesteśmy Nie będziemy mówić o tak szeroko prawo now-- podwójne, to na większych pływaków. Długie długi i krótki są także dla liczb całkowitych. DAVID MALAN: Rzeczywiście. W edycji hakerów z pset jednym, faktycznie używać długo, długo. Ale dla wersji standardowej, nie jest konieczna. MARIA: Spoko. OK. Więc operators-- powinno być prawdopodobnie zna większość z nich. Dodawanie, +; odejmowanie, -. Mnożenia, mamy *. Tak nie X, które zazwyczaj używamy. Wydział mamy odwrotny ukośnik. A modulo jest nasz ostatni podmiot, który będziemy mówić o teraz. Jest to operator, który pozwala nam na wziąć resztę z dzielenia. Więc jeśli mamy 4% 2, 4 podzielone przez 2 jest 2 z resztą 0. Tak więc 4% 2 0. 4% 3 1. 4% 5 jest 4, jak można się domyślić. I pamiętaj, przy użyciu wszystkich tych operatorów do korzystania z zasady PEMDAS. DAVID MALAN: Tak, aby było jasne, jeśli Ciebie nie 4% 2, to dlaczego 0, dokładnie? MARIA: Ponieważ 4 podzielone przez 2 2 z resztą 0. Modulo daje nam tak, że reszta jako przeciwny do wyniku podziału. DAVID MALAN: I rzeczywiście, co znajdziemy tę pomocne przez to, że w pewnych problemów to niekoniecznie jeden, jeśli chcesz mieć Efekt ograniczania się w zakresie liczb jak 0 do czegoś, można użyć modulo do zawinięcia wcześniej niż jak 2 mld lub wartości 4 mld euro, które Mówiliśmy o wykładzie. MARIA: Tak. I nawet w "chciwy" moglibyśmy. DAVID MALAN: Tak, w Problem ustawić jeden, jak również. MARIA: Tak, miło. DAVID MALAN: Dobra podpowiedź. MARIA: Niestety. Boolean expressions-- tak dla operatorów logicznych, będziemy rozmawiać o wszystkim od tych, które można zobaczyć tutaj. Więc teraz mamy dwa znaki równości wymienione na równych sobie. To są dla porównania. Do tej pory mamy tylko widziałem jeden znak równości. To wtedy możemy przypisać wartość do zmiennej. Więc jeśli widzieliśmy int n = 5, a następnie przypisaliśmy 5 do zmiennej n. Ale jeśli chcemy użyć == na porównanie, możemy sprawdzić, czy n == 5. A jeśli n == 5, następnie, że to prawda. Operatorzy więc logiczne pozwalają nam, w zasadzie, ocena Boolean wyrażenia do Prawda czy fałsz. Więc nie equals-- mamy wykrzyknik i równi. Więc możemy również sprawdzić, czy n nie równa 5-- więc n! = 5. Mniej niż mniejsza niż lub równa większa niż większa niż lub równa a następnie mamy logiczne I i logiczną OR. A ci, pozwalają ocenić wiele wyrażeń logicznych razem w zasadzie wspólnie jako jeden cały wyrażenie logiczne. Więc jeśli chcemy znaleźć numer, powiedzmy, która jest większa niż 5, ale mniej niż 15 w tym samym czasie, używamy operatora logicznego AND aby sprawdzić, czy n jest większa niż 5 && n mniejszy od 15. DAVID MALAN: A tutaj, zbyt, to naprawdę proste na początku przypadkowo używać tylko jednego znaku handlowego lub jeden pionowy pasek. I miejmy nadzieję, kompilator krzyczeć na ciebie, bo w rzeczywistości mają zupełnie inne znaczenie. Dla tych, którzy ciekawi, oni wykorzystywane do operacji bitowe, działa na poszczególne kawałki. Ale ty chcesz parę nich tutaj. I bardzo ważne jest to, że Pierwszy z nich, znak równości, która jest operatorem równości jako przeciwieństwie do operatora przypisania. MARIA: A pionowy pasek jest położony między Delete i powrotu. DAVID MALAN: Tak. Na typowej klawiaturze amerykańskiej. MARIA: Tak. Warto więc skoczyć prawo Instrukcje warunkowe. W Scratch, masz już widać, chyba, if, które pozwalają na sprawdzić, czy coś jest prawdą, a następnie zrobić coś innego. Więc może nie chciał aby sprawdzić, czy sprite jest dotykając innego sprite lub obramowanie ekranu. A potem możesz mieć chciał zakończyć grę lub zrobić coś innego. Więc składni, które jest "if (warunek)." Więc jeśli sprite dotyka czegoś, to nie jest w środku nawiasy. Następnie mamy if-else. Else pozwala nam zrobić coś jeśli warunek, że sprawdzić, na początku nie jest to prawdą. Więc jeśli ikonka jest dotykania Granica to zrobić, jeszcze coś innego. Więc inaczej zrobić coś innego. Następnie mamy krótki przykład na to. Więc jeśli (military_time <12), mamy chcą printf "Dzień dobry!" Jeszcze będziemy printf "Dobry wieczór!" Przykładem podstawowe. DAVID MALAN: Dobra. MARIA: Spoko. Więc teraz mamy instrukcji switch. Switch Generalnie można pozwalają nam zrobić wiele na to samo że właśnie rozmawiał o, jeżeli sprawozdania. Na przykład, teraz mamy Ogólna postać instrukcji switch która pozwala nam podjąć zmienną o nazwie n i porównać go do wielu różne wartości, które tutaj nazwali constant1, constant2. Możemy mieć dużo więcej. A ci, nazywane są przypadki. Więc jeśli mamy przełącznik statement-- i to działa tylko dla integers-- mamy w tym przypadku zmienna, która jest n. Jeśli zmienna n jest równa constant1, mamy wykona jakiś fragment kodu lub coś, co chcemy zrobić. I wtedy łamiemy. Więc przerwa oznacza, że Instrukcja switch zatrzyma wykonywanie jeśli n jest równe constant1, a następnie program będzie kontynuowany. To wyjście z przełączyć oświadczenie i będziesz nadal robić coś innego. Jednakże, jeśli n nie równa constant1, a następnie przypadku constant2 będą sprawdzane. Więc jeśli n jest równa constant2, że inne fragment kodu zostanie wykonany. A potem przerwa Jeśli to jest jej równa. I wtedy możemy mieć also-- nie Niekoniecznie, though-- domyślny przypadek, które stanie się, jeśli n nie jest równa żadnego z przypadków, które zostały wymienione. A w przypadku domyślnym również nie potrzebujesz przerwy koniecznie ponieważ instrukcja switch będzie wiedział, że musi zakończyć po domyślnie przypadku, jeśli o to chodzi. DAVID MALAN: Ale stylistycznie, zawsze umieścić go tam. MARIA: Tak. DAVID MALAN: Tak. Tak, zwłaszcza gdy zaczyna się, zwłaszcza jeśli wśród tych mniej wygodne, chciałbym osobiście po prostu zalecają trzymać się z IFS i IFS-elses i if-else-if-elses i tak dalej, jeśli tylko bo są trochę prostsze. To jest ładny, optymalizacja, lub czasem nawet estetycznie go sprawia, że ​​kod jest bardziej czytelny. I rzeczywiście, prawdopodobnie w połowie semestru zobaczymy problem ustawić, gdzie po prostu wygląda lepiej i łatwiejsze do odczytania dla ludzi za pomocą komunikatu przełącznika. Ale nie martw się o trzymając się za wcześnie. MARIA: Tak. Jeśli masz dużo, czy sprawozdania, to nie może być tylko bardzo czytelny. Może nie jest to bardzo szybki , aby przejść przez to. Więc switch może być bardzo przydatne, jak również. A także, nie remember-- nie zapomnij umieścić przerwy tam. DAVID MALAN: Nie pamiętam tego. MARIA: Bo to może spaść przez od jednego przypadku do drugiego. Więc powiedzmy, że sprawa constant1 nie miał instrukcji break w nim. Wtedy możemy spadać przez wewnątrz przypadku constant2. A my nie chcemy tego robić, jeśli my już osiągnął case constant1 i jest równa n. Tak więc, na przykład, jeśli mamy zmienną n, który zawiera szereg klas, i chcemy, aby zobaczyć, co to Klasa jest-- jeśli n jest równe 50, będziemy drukować "CS50 jest Wstęp do informatyki I. " Następnie jedziemy do złamania. I to wszystko. Jednakże w przypadku, n jest równe do 51, jedziemy wydrukować "CS51 jest wprowadzenie do informatyki II. " Potem znowu, mamy zamiar złamać. Jednakże, jeśli następnie kładziemy 124, 61, każdy inny numer, który może myślisz, lub program nie będzie uznać, że. Więc to będzie powiedzieć: "Przepraszam, jestem nie zna tej klasy. " I to będzie złamać. DAVID MALAN: Tak naprawdę można zobaczyć if, else if, inny pomysł tutaj. To jest po prostu inna składnia wyrażając dokładnie ten sam pomysł. MARIA: Dokładnie. Teraz mamy nasze trójskładnikowych operatorów. Operatorzy więc potrójne mają trzema parts-- stanu, coś zrobić, jeśli że warunek jest spełniony, i wtedy coś do zrobienia jeśli warunek jest fałszywy. Więc widać, w zasadzie, składnia, że ​​tutaj. Mamy w znak zapytania, a następnie the-- co my nazywamy to? DAVID MALAN: Dwukropek. MARIA: Colon. Dziękuję. Przepraszam. Więc spójrzmy na naszym przykładzie do zobaczyć, czy możemy zrozumieć this-- class_num == 50. Więc tutaj widzimy naszego operatora logicznego == który porównuje zmienną class_num 50. Więc class_num przechowuje liczbę całkowitą. A jeśli tego liczby całkowitej wynosi 50, to jesteśmy będzie przechowywać "David Malan" wewnątrz profesora smyczkowy. Jeśli numer klasy nie równa 50 ", a nie David Malan" będzie profesor. DAVID MALAN: Dziękuję. I tak to wydaje równoważne co, można by powiedzieć, na pierwszy rzut oka? MARIA: Wydaje mi się, jak if-else. DAVID MALAN: Tak. A w rzeczywistości jest to rodzaj ładna jednej wkładki, że tak powiem, do realizacji dokładnie logika if-else ale robi wszystko w jednym kroku. MARIA: Dokładnie. Tak. Więc jeśli-else może zajmują dużo miejsca. Mogą one być zbyt długi, coś tak prostego, jak to. Tak więc może to być bardzo zwięzłe i bardzo ładne. Więc teraz jedziemy do patrząc na znowu i znowu wykonywania czegoś, tak Sprawdzanie warunkują wiele razy a następnie kontynuowanie coś zrobić podczas gdy warunek jest prawdziwy. Więc to prowadzi nas ładnie w pętli while. Po lewej stronie mamy nasza pierwsza pętla while. Tak więc, gdy coś jest prawdą, znowu i znowu coś zrobić. Więc upewnij się, aby zauważyć, że nasze Warunkiem tutaj jest potwierdzone na szczycie. Podczas gdy w naszym drugim loop-- nazywamy że podczas loop-- zrób coś robimy, potem sprawdzić stan. A jeśli tego warunku nadal jest prawdą, możemy wrócić i zrobić ponownie rzeczy. Tak więc główna różnica jest, gdy warunek jest sprawdzany. A kod nie może być wykonane jeśli warunek nie jest prawda z pętli while. Natomiast z do-while Pętla, mamy kod który zawsze jest wykonywane co najmniej raz. I wtedy, gdy stan nadal jest prawdą, możemy wrócić i iteracji ponownie do środka. Więc dlaczego uważasz, że będziemy korzystać do-while na pętli while? Dobrze. Więc jeśli chcemy skłonić użytkownika do jakiegoś wejścia, jeśli chcemy, aby ich zapytać aby wprowadzić swoją nazwę, chcemy przynajmniej poprosić raz. A jeżeli się wejść to imię, nie jesteśmy zamiar zadać je ponownie dlatego, że już to wiesz. Ale jeśli nie wejść ich nazwa, czy też wprowadzić coś, co jest oczywiście nie nazwę, nadal chcemy, aby kontynuować z prośbą o ich nazwy. DAVID MALAN: A w wykładzie mieliśmy jeden jak to z uzyskania pozytywnej int Przykładem, gdzie nie ma nic do sprawdzić w pierwszej kolejności, ponieważ nie mają nawet zdobyć int. Dlatego chcemy, aby zrobić this-- uzyskać int z user-- następnie sprawdź to, być może, znowu i znowu i znowu. MARIA: Dokładnie. Dla loops-- OK. Do pętli może pozwolić nam na prawie dokładnie to samo, jak dobrze. To rzeczywiście dokładnie to samo. Więc nie ma nic, że można zrobić z pętli że nie będzie w stanie zrobić z pętli while. Ale dla pętli może wydawać się trochę nieco bardziej skomplikowane składniowo ponieważ mają trzy części w środku, co było wcześniej tylko Stan z pętli while. Tak więc pierwsza część, że morze, od lewej najbardziej, mamy "int krasnoludy = 0." Tak to jest, gdy mamy zainicjalizować zmienną. Następnie mamy średnik i "krasnoludy <7." Tak to jest, gdy się stan rzeczywistości. Więc to jest to, co mamy umieścić tylko w czasie loop-- ", a krasnoludy <7." Tutaj, że idzie w środek naszej pętli. Więc "dwaves <7." I wtedy nasza ostatnia część to "krasnoludy ++" co jest gdzie aktualizujemy naszą zmienną. Tak ważną rzeczą zdać sobie sprawę, że ten ma zamiar przejść przez to dla pętli siedem razy i siedem razy. wykonanie Więc mamy siedem krasnoludy, a oni wszyscy powie: "Jestem tutaj, pomóc, Królewna Śnieżka " dlatego, że są gotowe pomóc Śnieżkę. Z pętli while, że zrobiłby inicjowanie i aktualizacja niewystępujący w stanie ponownie, ale przed lub wewnątrz pętli while aby upewnić się, że we-- ponieważ zawsze trzeba te części. Tak więc, aby upewnić się, że mamy im, że mamy jeszcze dodał im na, po prostu nie w nawiasach. DAVID MALAN: I tak to wygląda like-- W wykładzie np I prawie zawsze korzystać, jak, i oraz n oraz zmienne dość nudne. Wygląda na to, można użyć więcej sprytnie nazwane zmienne, też. Maria: Tak, to rzeczywiście bardzo ładny używać zmiennych nieco bardziej opisowe dlatego, szczególnie jeśli ktoś jest czytanie code-- może jesteś równiarka lub jeśli współpraca z somebody-- Aby upewnić się, że zrozumieć, co robisz. OK. Więc to jest coś bardzo funky-- dla pętli wewnątrz pętli for. Nie wiem, czy widzieliśmy tego wcześniej. Prawdopodobnie nie. Ale rzeczywiście możemy mieć this-- tak pętli zamiast pętli. Więc czy ktoś chce może chodzić mi przez to, co się tutaj dzieje? DAVID MALAN: Wezmę ukłucie. MARIA: Spoko. DAVID MALAN: OK. Tak, spoiler-- chcemy wydrukować rzeczy to w dolnym prawym rogu tam. MARIA: Racja. Tak tak. DAVID MALAN: Więc mamy tylko umieścić, że wyjście próbki nie. Więc mogę wywnioskować z najwyższy pętli, że jesteś iteracji po wierszach Pętla zewnętrzna, że ​​tak powiem. A ty iteracji po Kolumny z wewnętrznej pętli. I intuicyjnie, to powinna miejmy nadzieję, sens ponieważ z natury każdy program widzieliśmy przed, printf, który jest Funkcja używamy ostatecznie ma możliwość drukowania rzeczy się zasadniczo linia po linii. Jak, kiedy już wyprowadzane nowa linia, jest nie podwaja się i drukuje coś wyższe na ekranie, co najmniej nie za pomocą printf tak. I tak w tym zakresie, to sprawia, Poczucie, że pętla zewnętrzna powinno się odnosić do rzędów bo dla każdego danego wiersza, będziesz chciał wydrukować XXXXX, a następnie przejść do następnego wiersza, XXXXX. Więc wiersze na pierwszym miejscu. A następnie w ramach każdego wiersz, drukowanie kolumny. Jeśli próbował to zrobić na przeciwnie, to prawdopodobnie nie będzie wyjdzie tak, jak zamierzałeś. MARIA: Tak. Po prostu nie mogliśmy wrócić do poprzedni wiersz z printf. DAVID MALAN: I co ciekawe na dzisiejszym czacie na temat zakresu, faktycznie, jest to, że rząd jest int która jest zadeklarowana w najwyższej pętli. Zauważmy jednak, że jest jeszcze wewnątrz, by tak rzec, nawiasy klamrowe, że bezpośrednio po, mimo, że nie jest to technicznie w tych klamrach. Więc wiersz jest w zakresie dla Całość fragmencie kodu, zarówno wewnątrz zewnętrznej pętli for a wewnątrz z wewnętrznej pętli. Ale w przeciwieństwie do tego, w którym jest kolumna w zakresie? Kolumna zmienna? Tak tylko w pętli wewnętrznej. I to jest OK, bo nie mamy dostępu to poza jego nawiasy. Wszystko co robimy jest wydruk nowy linia na samym końcu tam. Tak więc w rzeczywistości ma OK. Więc to ma wpływ, wygląda na to, robi trzy wiersze i cztery kolumny. MARIA: Racja. Więc najpierw przejść przez naszego pierwszego rzędu. I właśnie w naszym pierwszym rzędzie, robimy Cztery kolumny wewnątrz pierwszego rzędu. Więc wydrukować cztery krzyżyki. A potem możemy wyjść z pętli for, ponieważ mamy już wydrukowane cztery krzyżyki. A my wydrukować nową linię. A potem przejść przez sam proces na dwa rzędy aby w sumie trzy. DAVID MALAN: A warto zauważyć, że to tylko artefaktem czcionki, fakt, że wyjście próbek wydają tak dużo wyższy, jakby to nie wszystko wierszy niż kolumn. Ale to tylko dlatego, że X jest wyższa niż szersza. To wszystko, co się tam dzieje, plus białe odstępy między wierszami. MARIA: Racja. Chłodny. DAVID MALAN: Wszystko w porządku. Tak szybkie spojrzenie na problemu ustawić jeden, podjąć wszelkie pytania, a następnie odroczenie? W porządku. Więc problemem ustawić jeden, tam trzy Głównymi wyzwaniami, ostatecznie. Ale po pierwsze, znajdziesz że ustawiony problem specyfikacji, jak w przypadku wielu psets tej jesieni, będzie Cię przez kilka rozgrzewki, wskazać Ci się kilka zasobów które może lub Nie widziałem już. Na przykład, CS50 posiada zestaw krótkich spodenkach, które są krótkie filmy, nie inaczej, ale że są bardzo wątek specific-- może pięć minut, 10 minut długości na pętli lub na warunkach lub na algorytmach czy później na więcej zaawansowane zagadnienia, jak również. I na ogół osadzić tych, do problemu zestawy tak, że studenci posiada zasób, z którym recenzję materiały, które mogą mieć już się w wykładzie lub sekcji. Ale w ten sposób jest bardziej skoncentrowany i bardziej w zasięgu ręki. Mamy również mają tendencję do osadzania się problemu ustawia rzeczy zwane solucje. Tak więc prawie wszystkich przykładach I uwagi w wykładzie, na scenie tutaj, także w zastrzelił na kamery przejść bardziej wolniej, bardziej kameralny solucja przeze mnie na mój laptop z tym kodem, linia po linii tak, że w klasie, będziemy częściej przejrzeć coś lub kogoś będzie wtrącić ze związkiem odpowiedzieć na pytanie. Ale to nie musi tonąć w dla wszystkich na widowni. Więc znajdziesz kod instruktaże dla większości przykładów że robimy tu w wykładzie, tak aby może przejść przez to w swoim własnym tempie i do tyłu lub do przodu lub pominąć w ogóle, jeśli chcesz. Jest często kilka Pytania ciepłe-up, które prosimy o rodzaju wzmocnić ten materiał i upewnij się, że jesteś wygodne przed postępować z resztą pset. A potem, oczywiście, jest sam zbior. A jedną z rzeczy, mamy bardzo świadomie zrobić w CS50 jest prawie co nieciekawe lub nieciekawe intelektualnie krok mechaniczne, które Może trzeba zrobić jest prawie zawsze bardzo dobrze udokumentowane. W ciągu okresu, będziemy zacząć zadać więcej pytań retorycznych jak pamiętam, jak to czy tamto? Ale ogólnie, znajdziesz że zbiory problemowe cię przez mechaników coś tak, że Ciekawe, wyzwania intelektualne ostatecznie opuścił ci ucznia. Z powiedział, że Zamyla, z którymi prowadzonym na myśli dziś w wykładzie, jest jednym z naszych długoletnich pracowników Członek, który również posiada instruktaże na konkretnych problemach pset jak mario i chciwi, choć nie podlewać w tym roku. I to jest w tych solucje, że często oferuje kilka sztuczek dla jak postępować, nigdy nie mówi ci dokładnie, co robić, ale rather-- jak stan, jeśli will-- dając co najmniej Kilka pomysłów tak, to do ciebie, ostatecznie zdecydować, jak się do nich zbliżyć. MARIA: Coś jak wysoki poziom zrozumienie logiki, co pytamy was zrobić. DAVID MALAN: Dokładnie. I rzeczywiście, Zamyla na solucje mają do odpowiedzi na często zadawane pytanie, gdzie Zacząłem robić, zwłaszcza gdy te długie specyfikacja trochę trudne biorąc pod uwagę cały tekst i obrazów, które mają w nich. Więc water.c, znajdziesz po ukończeniu go, jest rzeczywiście stosunkowo proste. Absolutnie to banda z was będzie bum głowami o ścianę próbując dowiedzieć się, dlaczego nie jest to kompilacja i dlaczego to nie działa poprawnie. Ale gdy skończysz z nim i po zabawie Spędziłem trochę czasu zmaga się z każdym z błędów, jakie mogą wystąpić, przekonasz się, że jest to bardzo krótki program. Można to zrobić w zaledwie kilka linie kodu, z których większość widzieliśmy już tutaj, w wykładzie, jeśli można zebrać odpowiednie klocki. A co proponujemy tutaj, to się zapytać określić, ile minut ktoś bierze prysznic na terenie kampusu. Określamy w problem ustawiona szybkość przepływu wody w, jak, prysznicem niskiego przepływu głowy, podobnie jak w klipie Seinfeld widzieliśmy wczoraj, lub razie ich przeciwieństwem. A potem po prostu trzeba zrobić trochę matematyki, really-- arytmetycznych za pomocą C powiedzieć nam, ile, mniej więcej, butelki wody jest równoważne jeśli jesteśmy biorąc prysznic n minut. Teraz, w mario.c, to będzie być nieco dłuższy programu. To nadal nie będzie to długo. Zaledwie kilka linie dłuższe niż water.c. Ale to będzie okazja, odtworzyć starą szkołę Mario Piramida z Super Mario Bracia lub niektóre kontynuację. To nie będzie wyglądać tak ładniejsza lub tak kolorowe, jak ten jeden tam. Jesteśmy po prostu zamierzasz korzystać małe hashtags jak mamy tu na ekranie przy użyciu tekstu ASCII. Ale będzie to zbliżenie na ten sam pomysł. I to będzie to ćwiczenia, które na pierwszy rzut oka upraszcza użytkowanie tylko wydaje dość wydrukować prostą piramidę. Ale jest kilka cech tutaj są interesujące. Zauważ, że w skrajnej prawej krawędzi piramida rzeczywiście ma szerokość dwóch. Więc nie ma dwóch jednakowych Kolumny wysokość, która sprawia, że ​​wymaga trochę nieco myśli, aby czy masz, że dokładnie tak, jak przeciwieństwie do po prostu doskonale kątowy linia. Więc to jest trochę przypadku rogu ale odpowiada rzeczywistej gry. I to też nie oczywiste na pierwszy Spojrzenie jak wydrukować spacji. Kiedy tak patrzę na Wyjście próbki here-- i to także w spec-- to rodzaj wygląda jak prostokąt, ale przekątnej Prostokąt został odcięty, i to tylko białe znaki, że tak powiem. I tak często zadawane Pytanie jest tu zawsze, dobrze, jak mogę przenieść hashtags na prawo? Albo jak mogę wydrukować puste miejsca? I to jest rzeczywiście łatwiej niż większość studentów myśleć. Dobrze? Możesz zbliżyć go wizualnie po prostu uderzając spację raz lub dwa razy lub trzy razy. A więc nawet jeśli z printf mamy prawie zawsze wydrukować ciąg lub int lub słowo takie jak "cześć, świat "lub seria słów, Możesz też po prostu wydrukować cytat, przestrzeń, koniec cytatu. I że będzie faktycznie dają Państwo spacje tam. Miejcie to na uwadze i nie overthink tego. Naprawdę trzeba zdecydować wiersz po wierszu od rzędu nie w przeciwieństwie swojej przykład Chwilę temu, jak wielu z tych, Kolumny powinny być białe znaki i ile z nich powinno być hashtags. To zajmie trochę czasu, ale to ostatecznie logiczna logika rodzaju. MARIA: Tak. Ale logika będzie wiersz po wierszu będzie bardzo przydatne tutaj. DAVID MALAN: Tak. Myślę, że przykładowy kod można gave-- nawet choć nie był to kompletny program. Trzeba jeszcze int i główny nieważności i #include stdio.h, wiele rzeczy z wykładu. Ale budulcem wydaje się tam być. I wtedy wreszcie jest coś trochę bardziej algorytmiczny. Tak więc okazuje się, że każdej chwili przejść do CVS lub sklep spożywczy i ktoś wręcza ci u rachunki kasowe lub monety jak zmiany, Okazuje się, że ludzie, czy nie wiesz, czy nie, Prawdopodobnie używasz, co jest zwany algorytm zachłanny, przy czym jeśli należna, powiedzmy, $ 21 w zmiany, ponieważ z jakiegoś powodu kupił coś bardzo tanie z bardzo dużym rachunku na CVS, byłoby to naprawdę denerwujące, jeśli kasjer dał ci 21 singli, lub, co gorsza jeszcze dużo monet. Raczej, co rozsądna osoba jest prawdopodobnie będzie zrobić, to oni będą chwycić $ 20- $, a potem 1-rachunek, a wręczyć ci tylko dwa rachunki w tym przypadku. Maria: Więc oni starają się minimalizować zmiany, które dają z powrotem do Ciebie. DAVID MALAN: Dokładnie. A sama umowa z monet, jak również. Jeśli jesteś winien, powiedzmy, $ 0.50, miejmy nadzieję, że nie chcesz, 50 groszy. Zamiast tego chcą dwa czwarte, na przykład. Teraz, to nie zakładamy, że kasjer ma dosyć każdego nominału, które on lub ona może chcesz dać. Ale my nie pozwalają przyjąć, aż do problemu. A celem, ostatecznie, jest wdrożenia w kodzie C algorytm zachłanny. Tak więc użytkownik może aby wpisać, ile zmieni on lub ona jest należne z dolarów i centów, jakiś zmiennoprzecinkowych Wartość pewnie. A potem trzeba do matematyki i dowiedzieć się algorytmicznie, dobrze, ile monet mogę dać Ci minimalnie dać dokładnie to, że ilość zmian. Ale nie dzieje się kilka części skomplikowane tutaj, prawda? Jak tam cały Emisja nieścisłości. MARIA: Dokładnie. Więc zmiennoprzecinkowa Wartości mają niedokładności. Czy mówimy o tym w wykładzie dzisiaj? DAVID MALAN: Zrobiliśmy Ostatni raz w wykładzie. Rozmawialiśmy o niedokładności. A ty nie chcesz oszukiwać użytkownika Zmiana ile on lub ona jest winna. I tak solucja, w problem ustawić specyfikacja, zastanowić, ostatecznie, co do jak można łagodzić te nieścisłości Błędy, potencjalnie. Jest to możliwe do uniknięcia, na pewno, na wejścia mówimy o. I rzeczywiście, pennies-- być może będziemy odroczyć do Zamyla, Myślę, że dla tamtejszych sztuczek. Więc ostatecznie, można znaleźć progresja problemów w tym tygodniu, z których pierwsza jest bardzo mała, to średnia, potem trochę większe. Ale wszystkie z nich korzystać z budynku bloki z tym ostatnim tygodniu, z tego supersection, Problem ustawić specyfikacja daje na niezliczonych zasobów. Ale nadal, jeśli w ogóle walczą, szczególnie wśród tych, mniej wygodne bez uprzedniej tle, przyjść do godzin pracy biura w poniedziałek i wtorek i Środa i czwartek. Idź do CS50 Dyskutuj poprzez strona kursu, w za pomocą których można rozmawiać z pracownikami i kolegów z klasy. Ale w końcu, myślę, że Najlepszą radą jest po prostu zacząć wcześnie. To nie jest rodzaj klasy, które Cię powinno być rozpoczęcie psets w środę noc, lub co gorsza w czwartek wieczorem. MARIA: Moja najlepsza rada jest aby zaczęli w poniedziałek. DAVID MALAN: Poniedziałek. Więc jeśli jeszcze nie rozpoczął already-- nie. Ale nawet jeśli nie jest poniedziałek, to we wtorek. Im wcześniej, tym lepiej. I to jest powód, dla którego Oczywiście ma tyle późno dni to dać trochę presji psychicznej aby rozpocząć wcześniej, ale wciąż niech rzeczy poślizgu, gdy coś trwa dłużej niż można się spodziewać. MARIA: A chcesz korzystać z godziny pracy, jak tylko możesz, też. DAVID MALAN: Masz pytania? W porządku. Cóż, dlaczego nie możemy odroczyć tutaj?