[Παίζει μουσική] DAVID Malan: Γεια σε όλους. Αυτό είναι supersection CS50 του. Έσοδα για ειδικό Τμήματα δεν θα ξεκινήστε για μια άλλη εβδομάδα. Και έτσι και σήμερα, είμαι εδώ with-- ΜΑΡΙΑ: Μαρία. DAVID Malan: --Για πραγματικότητα ρίξτε μια ματιά στο πρόβλημα ορίσετε μία, την πορεία του πρώτες εβδομάδες του υλικού, να προσανατολιστείτε με CS50 IDE, ένα κομμάτι του Linux, το λειτουργικό σύστημα που είναι εκτελείται σε IDE, καθώς και ματιά σε μερικά από τη μετάβαση από την αρχή έως C ηγετική έως πρόβλημα ορίσετε ένα. Έτσι, χωρίς άλλη καθυστέρηση, στο πρόβλημα που μία, θα πάμε να είναι εισαχθεί CS50 IDE, το οποίο Είναι αυτή η web-based προγραμματισμός περιβάλλον που χρησιμοποιούμε για να γράψει τα προγράμματα. Είναι σχεδιασμένο για να εξετάσουμε πολύ θυμίζει ένα τυπικό υπολογιστή σύστημα που εκτελεί ένα λειτουργικό σύστημα που ονομάζεται Linux. Αλλά είναι το λεγόμενο σύννεφο, που σημαίνει ότι ο καθένας στην τάξη μπορεί να έχει πραγματικά του ή της για ίδιο λογαριασμό και να το χρησιμοποιήσετε, καθώς και. Έτσι, οι περισσότεροι από εσάς ίσως δεν έχουν χρησιμοποιήσει ποτέ ένα περιβάλλον Linux πριν ή ίσως ακόμη και ένα περιβάλλον γραμμής εντολών. Και μια γραμμή εντολών περιβάλλον είναι διαφορετικό. Είναι όλα κειμένου. Είναι όλες τις εντολές του πληκτρολογίου. Και δεν είναι καμία ποντίκια, τα εικονίδια, δεν υπάρχουν παράθυρα διαλόγου, δεν υπάρχουν μενού. Είναι καθαρά κείμενο. Έτσι, σε πρώτη φάση, το είδος του αισθάνεται σαν ένα βήμα πίσω από την άποψη της πολυπλοκότητας. Αλλά καταλήγει να είναι πολύ πιο ισχυρό, βεβαίως, για έναν επιστήμονα υπολογιστών, τελικά. Έτσι, ας ρίξουμε μια ματιά. Εδώ είμαι σε CS50.io, μέσω της οποίας μπορείτε να συνδεθείτε στο CS50 IDE. Και σαν στο Ξυστό, υπάρχει τρία βασικά ζητήματα σε αυτή την οθόνη. Έτσι, στην αριστερή πλευρά, έχουμε ποιο θα είναι το πρόγραμμα περιήγησης στο αρχείο. Και υπάρχει αυτό το φάκελο στο κορυφή, η οποία είναι τώρα άδειο δεδομένου ότι πήρα απαλλαγούμε από όλα μου αρχεία πριν supersection. Και αυτό είναι όπου θα αποθηκεύσετε τα αρχεία C που γράφουμε. Στην επάνω δεξιά πλευρά, έχουμε ένα μέρος όπου όλοι μας κώδικα πρόκειται να πάρει έγγραφη. Και πράγματι, αν κάνετε κλικ σε αυτό συν, αυτό πρόκειται να θέλω να επιλέξω νέο αρχείο. Και εδώ μπορώ να αρχίσετε να γράφετε κώδικα C ή, πραγματικά, οποιοδήποτε αριθμό άλλων γλωσσών. Και στη συνέχεια στο κάτω μέρος, όπου λέει jharvard @ ide50-- και η δική σας θα να πω κάτι λίγο different-- τι λέγεται αυτό; Τερματικό παράθυρο. Ναι. Έτσι, το παράθυρο τερματικού η λεγόμενη γραμμή εντολών διεπαφή μέσω της οποίας μπορείτε να αλληλεπιδράσετε με το υποκείμενο λειτουργικό σύστημα. Και για τώρα, θα πάμε να κάνουν πολύ περιορισμένη χρήση των this-- απλά για να συγκεντρώσει, για να δούμε μηνύματα λάθους που βλέπουμε, και να τρέξει τα προγράμματα μας. Αλλά τελικά, θα πάμε να κάνουμε πολύ περισσότερα, όπως καλά. Και μπορείτε να εγκαταστήσετε το λογισμικό ακόμα και να διαχειρίζεται το χώρο εργασίας σας εντός CS50 IDE, καθώς και. Αλλά περισσότερα για αυτό κάποια άλλη στιγμή. Ας πάμε μπροστά και να γράφουν ένα πολύ απλό πρόγραμμα μόνο να περάσουν από μια προθέρμανση hello.c, το οποίο είναι ίσως το πιο απλό πρόγραμμα που μπορεί να γράψει. Έχω ήδη ανοίξει μια νέα καρτέλα. Πάω να πάει μπροστά και να λένε περιλαμβάνει τις τυποποιημένες io.h. Στη συνέχεια, int main (void). Και τότε printf ("Hello, world" ανάστροφη κάθετο n, κοντά απόσπασμα, κοντά παρενθέσεις, και ερωτηματικό. Εντάξει. Έτσι, σήμερα παρατηρούμε ότι το παράθυρό μου είναι άτιτλο. Έτσι είμαι πολύ γρήγορα θα να ανεβεί στο Αρχείο, Αποθήκευση. Και είναι σημαντικό ότι Καλώ όχι αυτό "γεια". Έτσι, ένα πολύ κοινό λάθος, ιδίως σε προβληματικές που μία, είναι να καλέσετε λάθος ακριβώς σας Πρόγραμμα "νερό" ή "άπληστοι" ή "Mario" ή «πίστωση» ή κάτι παρόμοιο. Αλλά θέλετε πραγματικά να κάνετε βεβαιωθείτε ότι έχετε την επέκταση αρχείου γιατί αυτός είναι ο μόνος τρόπος που ο compiler και επίσης ο συντάκτης κωδικός ξέρει ότι είστε στην πραγματικότητα τη σύνταξη κώδικα C. Επιτρέψτε μου λοιπόν να προχωρήσει και κάντε κλικ στο κουμπί Αποθήκευση. Και τώρα, πάρα πολύ, τι CS50 IDE έχει κάνει για μας είναι ότι είναι, επίσης, σύνταξη υπογράμμισε τα πάντα. Έτσι είναι πάντα πολύ έκανε πολύχρωμο. Και όλος ο σκοπός της ότι δεν είναι λειτουργική. Είναι ακριβώς για να συντάξει τα μάτια μου για να το εννοιολογικά διαφορετικά κομμάτια του εν λόγω προγράμματος. Ας πάμε μπροστά και να συγκεντρώσει αυτό. Και μπορώ να συντάξει αυτό σε μια-δυο τρόπους. Και σε εβδομάδα ένα, το old-school τρόπο που το κάναμε ήταν κυριολεκτικά η Εντολή line-- "hello.c κλαγγή." Και τότε πατήστε Enter. Και τίποτα δεν φαίνεται να συμβαίνει στο παράθυρο τερματικού. Αλλά τι έκανε αλλαγή στο IDE; Σε περίπτωση, πάλι, IDE σημαίνει μόνο Ολοκληρωμένο περιβάλλον ανάπτυξης. Είναι ένα φανταχτερό τρόπο λέγοντας Αυτή η ολοκληρωμένη ανάπτυξη περιβάλλον για την ανάπτυξη λογισμικού. Έτσι, αυτό που άλλαξε στην UI; Τι παρατηρήσατε αυτό είναι διαφορετικό, Μαρία; ΜΑΡΙΑ: παρατήρησα κάτι υπό την IDE50 φάκελο εδώ. DAVID Malan: Ναι. Έτσι, εδώ, όχι μόνο έχουμε "hello.c." Έχουμε επίσης "a.out," το οποίο είναι το είδος της μια χαζή όνομα για ένα πρόγραμμα. Αλλά πραγματικά, αυτό είναι το προεπιλεγμένο όνομα για μια πρόγραμμα, όταν το μόνο που καταρτίζουν τον κωδικό σας και μην πείτε τον compiler ποιο αρχείο θα εξόδου. Έτσι, αν θέλω να τρέξει αυτό, Πρέπει να πω την compiler-- ή μάλλον, θα πρέπει να πείτε το χώρο εργασίας που θα θέλετε να εκτελέσετε το πρόγραμμα που ονομάζεται «a.out." Εισάγω. Και υπάρχει «γειά σου, κόσμο. "Τώρα η" ./ ". Είναι πραγματικά σημαντικό. Ακόμα κι αν συνήθως έχουμε μόνο γράψει τα ονόματα των εντολών, όταν πρόκειται για ένα πρόγραμμα που έχετε γραπτή, θέλετε να πείτε "./" γιατί αυτό λέει ρητά το Linux ότι θέλετε να εκτελέσετε ένα πρόγραμμα που ονομάζεται "a.out" που είναι σε αυτό, όπου dot σημαίνει αυτό τον κατάλογο που είμαι σήμερα σε, η οποία συμβαίνει να είναι που ονομάζεται χώρος εργασίας, "a.out. Διότι, αν μόλις είπα "a.out," Enter, Πάω να πάρει "εντολή δεν a.out βρέθηκε "επειδή το computer-- γιατί εφηύρε "a.out?" δεν έρχονται με το computer-- δεν ξέρουν πού να ψάξουν για αυτό, ακόμα κι αν είναι σωστό κάτω από τη μύτη μου, να το πω έτσι. ΕΝΤΆΞΕΙ. Έτσι, θα μπορούσαμε να το αλλάξουμε αυτό να να "κλαγγή -o γεια hello.c." Κι αν πατήσω το enter, ποιο πρόγραμμα είναι αυτή η μετάβαση στην έξοδο για μένα; Ποιο είναι το όνομα του αρχείου; Ναι, στο πίσω μέρος. Σωστά. "Χαίρετε." Έτσι, το "γεια" πρόκειται να είναι το όνομα του προγράμματος επειδή έχουμε χρησιμοποιήσει το λεγόμενο το επιχείρημα της γραμμής εντολών, το οποίο είναι ακριβώς ένας τρόπος αλλαγή της συμπεριφοράς του ο compiler πραγματικά εξόδου ένα συγκεκριμένο όνομα αρχείου. Και πράγματι, αν κάνω μεγέθυνση έξω και να δούμε εδώ, τώρα δεν έχω μόνο "a.out» και "hello.c» αλλά και «γειά σου», όπως καλά. Έτσι τώρα μπορώ να κάνω "./hello," Enter. Και υπάρχει "Γεια σου, κόσμε». Αλλά και αυτό lastly-- θα είναι τώρα η σύμβαση χρησιμοποιούμε όλη την εξάμηνο, typically-- Είναι μπορείτε επίσης να πω "γεια κάνουν." Και πράγματι, αυτό λέει είναι στο χέρι μέχρι σήμερα, γιατί ήδη υπάρχει. Επιτρέψτε μου να προχωρήσει και να απομακρύνει, με η εντολή rm, τόσο "a.out" - και να πω "αφαιρέστε τακτική a.out αρχείο;" Αυτό σημαίνει απλά, είσαι βέβαιοι ότι θέλετε να το διαγράψετε; Πάω να πω ναι. Και τότε Πάω να αφαιρέσετε "γεια", αλλά όχι "hello.c." Πάω να πω "ναι" ρητά, αλλά "y" είναι επαρκής, καθώς και. Και σήμερα παρατηρούμε ότι αν Τύπος ls-- η οποία, ανάκληση, list-- σημαίνει αυτό απαριθμεί όλα των αρχείων στο φάκελο μου. Και πράγματι, αν κάνω μεγέθυνση έξω και να δούμε πάνω αριστερά, επιβεβαιώνει ότι αυτό είναι σε αυτόν το φάκελο, ακόμη και αν και είναι χαρακτηρισμένα ως IDE50 εδώ και όχι χώρο εργασίας, είναι απλά "hello.c." Έτσι τώρα εδώ κάτω, αν μου δεν "κάνουν Γεια σας," Enter, τώρα βλέπω μια πολύ μεγαλύτερη, αλλά μια εντολή πιο εξελιγμένα εντολή που πρόκειται να είναι χρήσιμες στις επόμενες εβδομάδες. Και τώρα μπορώ να πω "./hello." Έτσι, ας ρίξουμε μια γρήγορη περιήγηση κάποια άλλη εντολές του Linux. Τότε γιατί δεν μπορούμε να κάνουμε ένα βήμα πίσω και να δούμε πραγματικά στο C περισσότερο γενικά, τη μετάβαση από την αρχή στο C, και στη συνέχεια να ολοκληρωθεί με μια ματιά κατά το πρώτο πρόβλημα ορίζεται στο Γ Εντάξει. Έτσι, Πάω να πάει μπροστά και μόνο καθαρό μέχρι το χώρο εργασίας μου με Control-L μόνο για να κρατήσει την οθόνη τακτοποιημένο. Αλλά αυτό δεν έχει καμία λειτουργική επηρεάσει διαφορετικά. Θυμηθείτε ότι έχουμε δει τώρα μερικές εντολές. Έτσι έχουμε δει κλαγγή, η οποία σε γενικές γραμμές θα δεν θα πρέπει να εκτελέσει το χέρι πια. Θα χρησιμοποιήσουμε αντί να κάνουν. Αλλά είδαμε επίσης ls, το οποίο δείχνει μια λίστα των αρχείων στον κατάλογο μου. Και τώρα γιατί είναι there-- υπάρχουν δύο αρχεία τώρα, "γεια" και "hello.c." Γιατί είναι ένα άστρο ή εκεί αστερίσκος μετά το "Hello"; Τι έκανε ότι σημαίνει, με βάση σε ό, τι είδαμε στην πρώτη εβδομάδα; Ποια είναι η γνώμη σας; Τι σημαίνει το αστέρι σημαίνει; ΜΑΡΙΑ: For-- το πρόγραμμα "Hello"; DAVID Malan: "Γεια *". Ναι. Αχ ναι? Ω, εκτελέσιμο. Σωστά. Έτσι, αυτό σημαίνει ότι "γεια" είναι εκτελέσιμο. Έτσι πράγματι, γι ' Μπορώ να κάνω "./hello." Εντάξει. Λοιπόν, τι άλλο μπορώ να κάνω εδώ; Λοιπόν, αποδεικνύεται μπορώ Επίσης δημιουργία καταλόγων. Επιτρέψτε μου λοιπόν να προχωρήσει και να δημιουργήσει, για παράδειγμα, ένα «pset1" κατάλογο. Και η προδιαγραφή πρόβλημα που θα έχετε κάνει ακριβώς αυτό, έτσι ώστε να μην χρειάζεται να θυμόμαστε σήμερα. Αλλά "mkdir pset1" φαίνεται να έχει καμία επίπτωση. Αλλά και πάλι, δεν υπάρχει μήνυμα σφάλματος είναι γενικά ένα καλό πράγμα. Έτσι, αν γράψετε "ls" now-- Αχ, τώρα Έχω ένα εκτελέσιμο αρχείο που ονομάζεται "γεια", ένα αρχείο που ονομάζεται C "hello.c." Και τότε η κάθετος, έτσι ώστε να μιλούν, σημαίνει ότι αυτό είναι ένας κατάλογος. Έτσι, πράγματι, τώρα θέλω να το ανοίξετε. Και εγώ δεν διπλό κλικ πάνω του σαν σε ένα γραφικό περιβάλλον, ένα γραφικό περιβάλλον. Εγώ αντί να πω "cd pset1." Εισάγω. Τίποτα ενδιαφέρον φαίνεται να έχει συνέβη λίγο εκτός προτροπή μου here-- αυτός είναι ο τρόπος του Linux από υπενθυμίζοντάς όπου είμαι εγώ, έτσι τι φάκελος είναι ανοιχτός. Είναι ακριβώς μου λέει ρητά σε αντίθεση με γραφικά. Κι αν γράψετε "ls", γιατί βλέπω ένα άλλο ζητήσει αμέσως, νομίζετε, όταν δείτε τα περιεχόμενα του pset1; ΜΑΡΙΑ: Ίσως δεν το κάνετε έχει τίποτα εκεί. DAVID Malan: Ναι. Έτσι, τότε δεν έχουμε προφανώς δημιούργησε τίποτα εκεί γιατί μόλις δημιουργηθεί ο κατάλογος. Τώρα, αν θα ήθελε να δημιουργήσει ένα file-- για παράδειγμα, θα μπορούσε να δημιουργήσει ένα νέο αρχείο. Και τότε θα μπορούσα να πάω Αποθήκευση και αποθηκεύστε το ως, όπως, «mario.c" αν κάνεις η τυπική έκδοση της PSET ένα. Και τότε, όπως και κάθε Mac ή PC, απλά επιλέξτε το φάκελο "pset1, Αποθήκευση. Και τώρα το αρχείο είναι άδειο. Αλλά ας zoom in και πάλι για ένα δευτερόλεπτο. Ας κάνουμε ls εδώ. Τώρα βλέπουμε "mario.c". Έτσι, υπάρχουν μερικά άλλα εντολές που Αξίζει έχοντας κατά νου πάνω time-- σαφείς, ή Control-L είναι ό, τι έχω ήταν το χτύπημα? mkdir έχουμε δει? RM έχουμε δει, καθώς και, η οποία είναι για την αφαίρεση ή διαγραφή ενός αρχείου. Προσοχή μπορείτε να also-- και αν κοιτάξετε σε απευθείας σύνδεση σεμινάρια, θα rm -rf είναι ένας πολύ συνηθισμένος τρόπος για να πούμε διαγράψετε ένα φάκελο που έχει πράγματα σε αυτό. Απλά είναι σούπερ, σούπερ προσεκτικοί. -rf σημαίνει αναδρομικά διαγράψτε ό, τι είναι προσπαθείτε να διαγράψετε και βίαια διαγράψετε. Έτσι αναδρομική μέσα αν είναι ένα φάκελο με ένα φάκελο με ένα φάκελο με ένα φάκελο, διαγράψετε όλα αυτά. Και αναγκαστικά σημαίνει δεν χρειάζεται καν με ρωτήσεις ναι ή όχι, είμαι σίγουρος; Γι 'αυτό είναι ένα σούπερ επικίνδυνο τρόπο διαγραφή πολλά πράγματα γρήγορα. Αλλά beware-- πολύ συχνά κάνει ένας ατρόμητος φοιτητής διαγράψετε κατά λάθος, ας πούμε, το chipset ένα, για παράδειγμα. ΜΑΡΙΑ: Και αν απλά κάνουν -r, θα πάμε να τους ρωτήσετε για κάθε αρχείο. DAVID Malan: Ποια είναι η μέτρια ενοχλητικό. ΜΑΡΙΑ: Ναι. DAVID Malan: Έτσι, γι ' τόσοι πολλοί από εμάς, αυτο που περιλαμβάνεται, είμαι στην συνήθεια της χρήσης -rf. Αλλά είναι επικίνδυνο. Έτσι, αγοραστής beware. Και τότε mv είναι το είδος του Είναι ενδιαφέρον το όνομά του. Έτσι, αυτή είναι η εντολή κίνηση, το οποίο αισθάνεται λίγο περίεργα επειδή μπορείτε να το χρησιμοποιήσετε για να πράγματι μετακινήσετε αρχεία από το ένα μέρος στο άλλο. Για παράδειγμα, ας υποθέσουμε ότι έκανα θάλασσα. Ας υποθέσουμε ότι έχω δημιουργήσει ένα νέο αρχείο για την PSET. Και εγώ αυτό αποθηκεύεται ως "greedy.c." Αλλά ας υποθέσουμε ότι έχω λάθος να το αποθηκεύσετε σε IDE50-- τόσο στο ίδιο το χώρο εργασίας μου και όχι σε pset1. Μπορείτε να δείτε τόσο πολύ πάνω αριστερά. Υπάρχει «greedy.c." Και υπάρχουν μερικές λύσεις. Έτσι, ένα, μπορώ να χρησιμοποιήσω το σούπερ φιλικό προς το χρήστη τρόπο μόνο μεταφορά και απόθεση. Και αυτό θα είναι στην πραγματικότητα διορθώσετε αυτό το πρόβλημα. Αλλά σήμερα, προσπαθούμε να δούμε οι πιο απόκρυφες αλλά ισχυρούς τρόπους για να γίνει αυτό. Επιτρέψτε μου λοιπόν να πάρει "ls" σε pset1. Και βλέπω μόνο "mario.c." Επιτρέψτε μου να προχωρήσει και να το κάνουμε "cd ..". Έτσι, το CD είναι ξανά αλλαγής καταλόγου. ".." Σημαίνει ό, τι, όμως; Την τελευταία φορά που είπα "cd pset1 "να πάει σε pset1. Έτσι, όταν λέω "cd ..", τι κάνω; Προς τα πίσω. Ναι. Έτσι πρόκειται να λεγόμενης μητρικής. Πηγαίνετε ένα επίπεδο επάνω, όπως έξοδο από ένα φάκελο. Έτσι Enter. Και πράγματι, κοίτα τι έκανε. Μου μετακόμισε μόλις σε χώρο εργασίας, αντί της σε pset1, η οποία βρίσκεται σε χώρο εργασίας. Και τώρα αν γράψετε "ls", υπάρχει ένα σωρό πράγματα. Στο υπάρχει «greedy.c". Έτσι τώρα επιτρέψτε μου να χρησιμοποιήσω mv κυριολεκτικά προχωρήσουμε "greedy.c" σε pset1. Και έτσι πολλά εντολές του Linux λειτουργούν ακριβώς σαν αυτό. Παίρνουν κανένα επιχείρημα ή να λάβει ένα επιχείρημα ή παίρνουν δύο γραμμής εντολών επιχειρήματα και ούτω καθεξής. Και σε αυτή την περίπτωση, είναι κυριολεκτικά κάνει ό, τι λέει, αν και succinctly-- greedy.c προχωρήσουμε σε pset1. Εισάγω. Τίποτα δεν φαίνεται να συμβαίνει. Αλλά αν το κάνω μια ls ξανά, άπληστοι έχει φύγει. Και αν το κάνω "cd pset1", Enter, και στη συνέχεια ls ξανά, τώρα είναι στη σωστή θέση. Παρεμπιπτόντως, αν για κάποια ιδιαίτερα reason-- αν έχετε διαλείπουσα σύνδεσης με το δίκτυο ή είστε με τα πόδια γύρω από πανεπιστημιούπολη με το laptop καπάκι σας κλειστά και στη συνέχεια να ανοίξει και πάλι το χώρο εργασίας σας φαίνεται κάπως εκτός συγχρονισμού, δεν είναι μεγάλη υπόθεση. Απλά επανεκκίνηση του προγράμματος περιήγησης παράθυρο, και θα πρέπει resync έτσι ώστε το αριστερό χέρι περιηγητή αρχείων μοιάζει ακριβώς όπως το παράθυρο τερματικού. Μην ανησυχείς. Σε περίπτωση αμφιβολίας, επαναλάβετε τη φόρτωση της σελίδας, έτσι εφ 'όσον έχετε αποθηκεύσει τα αρχεία που έχουν ήδη. ΕΝΤΆΞΕΙ. Έτσι mv μπορεί επίσης να χρησιμοποιηθεί για να μετονομάσετε τα αρχεία. Και ας ρίξουμε μια ματιά Αυτή η τελευταία εντολή εδώ. Έτσι suppose-- και αυτό είναι σούπερ κοινό, πάρα πολύ, από νωρίς. Μερικοί μαθητές περιστασιακά να δημιουργήσει ένα αρχείο ονομάζεται, ας say-- τι είναι ένα άλλο; Όπως «WATER.C." Γι 'αυτό ακριβώς θα φωνάζω, για δεν υπάρχει λόγος, σε όλα τα καλύμματα. Αλλά αυτό δεν είναι η σωστό όνομα για το αρχείο έστω και μόνο επειδή το πρόβλημα που μας προδιαγραφή δεν είπες για να αποθηκεύσετε το αρχείο όπως όλα τα καπάκια "WATER.C." Αντ 'αυτού, αναμένουμε "water.c" σε πεζά. Και, στην πραγματικότητα, αυτό είναι προβληματική επειδή check50, ένα πρόγραμμα που πρόκειται να ανταποκριθεί στο πρόβλημα ορίσετε μία που ελέγχει αυτόματα η ορθότητα του κωδικού σας πρόκειται να φωνάζω σε σας αν δεν μπορεί να βρείτε "water.c" σε όλα τα πεζά. Γι 'αυτό χρειάζεται να το διορθώσω αυτό. Τόσοι πολλοί διαφορετικοί τρόποι για να να γίνει αυτό, η πρώτη εκ των οποίων θα ήταν να ελέγχετε κλικ ή δεξί κλικ το όνομα του αρχείου και μόλις αλλάξει Μετονομασία. Απόλυτα πρόστιμο να το κάνουμε αυτό. Αλλά και πάλι, σήμερα, ας κάνει λίγο περίπλοκη. Ας χρησιμοποιήσουμε mv για να αλλάξετε "WATER.C" έως "water.c". Έτσι, μπορείτε επίσης να χρησιμοποιήσετε το πρώτο επιχείρημα για να μετονομάσετε το δεύτερο επιχείρημα αν το δεύτερο επιχείρημα δεν είναι σε Πράγματι, ένα φάκελο ή ένα όνομα καταλόγου. Εντάξει. Και τέλος, μια μικρή trick-- έτσι είμαι σε κατάλογο χώρο εργασίας μου αυτή τη στιγμή. Αν θέλω να μπει σε ένα PSET, Μπορώ σίγουρα να πληκτρολογήσετε "cd pset1." Αλλά είναι τόσο κουραστικό να πληκτρολογήσετε "pset1" ή πλέον ονόματα αρχείων ή ονόματα καταλόγων ακόμη. Έτσι, πολύ συχνά στο Linux, τι μπορείτε να κάνετε είναι να αρχίσετε να πληκτρολογείτε "PSE" και μόλις βαρεθεί, πατήστε Tab, και ας ο αριθμός του υπολογιστή έξω για σας. Σούπερ χρήσιμο να μπει σε αυτή συνήθεια. Η μόνη σύλληψη είναι αν έχετε πολλαπλά αρχεία ή φάκελοι που ξεκινούν με το γράμμα "P" ή "ps", μπορεί να έχετε για να πληκτρολογήσετε μερικές ακόμα πριν η υπολογιστή ξέρει τι να κάνει. ΜΑΡΙΑ: Μας αρέσει συντομεύσεις. DAVID Malan: Αυτό θα μπορείτε να αποθηκεύσετε τόσο πολύ χρόνο. Και επίσης, όπως είπαμε σε διάλεξη, θα μπορούν να μετακινηθείτε προς τα επάνω στην ιστορία, πάνω και κάτω, να βρει εκτελέστηκε πρόσφατα εντολές, όπως καλά. Εντάξει. Έτσι τώρα, ας στρέψουμε την προσοχή μας πίσω σε ένα απλό πρόγραμμα, hello world. Έτσι, έχουμε συντάξει αυτό ακριβώς. Και τώρα γιατί δεν παίρνουμε μια ματιά στους τύπους δεδομένων και στη συνέχεια μετάβαση από ορισμένες αντίστοιχα μπλοκ Scratch με τον C. ΜΑΡΙΑ: Awesome. Έτσι τώρα που έχετε ξεκινήσει τη δημιουργία προγραμμάτων σε C, θα πάμε για να αρχίσουμε να μιλάμε σχετικά με τους τύπους των δεδομένων και μεταβλητών. Έτσι, ορισμένα είδη δεδομένων που θα ήθελα να ξέρω από τώρα είναι αυτά που είναι επισημαίνονται με μπλε χρώμα. Έτσι έχουμε την πρώτη int, που σημαίνει ακέραιο. Και αυτό ισχύει ακέραιοι, όπως σας θα μπορούσε να έχει τόσο guessed-- 1, 2, 3, και οποιαδήποτε άλλα ακέραιοι ότι μπορείτε να σκεφτείτε. DAVID Malan: Και επίσης αρνητικό. ΜΑΡΙΑ: Και επίσης αρνητικές, Ναι. Και 0. Στη συνέχεια έχουμε άρματα, τα οποία Οι αριθμοί κινητής υποδιαστολής. Έτσι, αυτό είναι το σύνολο των πραγματικών αριθμών ότι έχουν δεκαδικών ψηφίων. Έτσι 5,0, 5,2, και ακόμη περισσότερο ψηφία μετά την υποδιαστολή, επίσης, και επίσης αρνητικές. Στη συνέχεια έχουμε char που είναι ένας χαρακτήρας. Πιστεύω λοιπόν ότι μιλήσαμε για Αυτό σε διάλεξη σήμερα. Αλλά έχουμε επιστολές, για example-- Α, Β, C-- που μπορούν να αποθηκευτούν ως char. Στη συνέχεια, όμως έχουμε πολύ περισσότερα σύμβολα ότι μπορεί να αποθηκευτεί ως ένα char. Και αυτοί αποθηκεύονται ως ASCII. Και τότε έχουμε bool, η οποία είναι Booleans. Και εκείνοι αξιολογηθεί ως αληθές ή Λάθος ή 1 και 0, αντίστοιχα. DAVID Malan: Και υπενθυμίζουν ότι bool προέρχεται από τη βιβλιοθήκη CS50. Έτσι δεν είναι ενσωματωμένο στα C, αλλά είναι εξαιρετικά χρήσιμη να έχει την έννοια της αληθινό και το ψεύτικο. Και ακόμα κι αν μπορεί να think-- διασκέδαση πραγματικότητα. Μια bool χρειάζεται τεχνικά πόσα bits, πραγματικά, να εκπροσωπεί έναντι True False; Πόσα κομμάτια νομίζετε θα πρέπει, στο μέγιστο βαθμό; Ναι, μόνο μία. Έτσι αποδεικνύεται ότι η C Δεν μπορώ να σας δώσω ένα μόνο κομμάτι. Η μικρότερη μονάδα μέτρησης μπορείτε να πάρετε είναι οκτώ. Γι 'αυτό είναι λίγο σπάταλη ότι είστε χρησιμοποιώντας ένα ολόκληρο byte ή οκτώ κομμάτια, να εκπροσωπεί Σωστό ή Λάθος. Αλλά αυτός είναι ακριβώς ο τρόπος που είναι υλοποιείται σε C από τη βιβλιοθήκη CS50. ΜΑΡΙΑ: Και τότε αυτοί που είμαστε Δεν πρόκειται να μιλήσω για όσο εκτενώς δεξιά now-- διπλό, αυτό είναι μεγαλύτερο πλωτήρες. Long long και short είναι επίσης ακέραιοι. DAVID Malan: Πράγματι. Σε χάκερ έκδοση του PSET μία, που χρησιμοποιούν πραγματικά πολύ καιρό. Αλλά για τη βασική έκδοση, δεν θα πρέπει να είναι αναγκαία. ΜΑΡΙΑ: Cool. ΕΝΤΆΞΕΙ. Έτσι operators-- θα πρέπει να είναι πιθανώς εξοικειωμένοι με τα περισσότερα από αυτά. Επιπλέον, +? αφαίρεση, -. Για τον πολλαπλασιασμό, έχουμε το *. Έτσι, δεν είναι η Χ που συνήθως χρησιμοποιούν. Division, έχουμε την ανάστροφη κάθετο. Και modulo είναι η τελευταία μας ότι χειριστή θέλουμε να μιλήσουμε για τώρα. Είναι ένας επιχειρηματίας που μας επιτρέπει να να λάβει το υπόλοιπο της διαίρεσης. Έτσι, αν έχουμε 4% 2, 4, διαιρούμενο με 2 είναι 2 με ένα υπόλοιπο 0. Έτσι 4% 2 είναι μηδέν. 4% 3 είναι 1. 4% 5 είναι 4, όπως θα μπορούσε να φανταστεί. Και να θυμάστε όταν χρησιμοποιείτε όλα αυτά φορείς εκμετάλλευσης να χρησιμοποιούν τους κανόνες PEMDAS. DAVID Malan: Έτσι για να είναι σαφές, αν κάνει 4% 2, γιατί είναι ότι 0, ακριβώς; ΜΑΡΙΑ: Επειδή 4 διαιρείται με 2 είναι 2 με ένα υπόλοιπο 0. Έτσι modulo μας δίνει το συγκεκριμένο υπόλοιπο όπως σε αντίθεση με το αποτέλεσμα της διαίρεσης. DAVID Malan: Και πράγματι, τι θα βρούμε αυτό το χρήσιμο είναι ότι σε ορισμένα προβλήματα αυτό δεν είναι απαραιτήτως μία, αν θέλετε να έχετε το αποτέλεσμα τον περιορισμό του τον εαυτό σας σε ένα εύρος αριθμών 0 σαν μέσα από κάτι, μπορείτε να χρησιμοποιήσετε με μέτρο για να τυλίξει γύρω από νωρίτερα από ό, τι, όπως το 2 δισ ή το 4000000000 τιμή που έχουμε μιλήσει σε διάλεξη. ΜΑΡΙΑ: Ναι. Και ακόμη και σε "άπληστο" μπορούμε να γίνουμε. DAVID Malan: Ναι, σε πρόβλημα που μία, καθώς και. ΜΑΡΙΑ: Ναι, ωραία. DAVID Malan: Καλή υπόδειξη. ΜΑΡΙΑ: Συγνώμη. Boolean expressions-- έτσι για τελεστές Boolean, θέλουμε να μιλήσουμε για όλα από αυτά που βλέπετε εδώ. Έτσι τώρα, έχουμε δύο ίση τα σημεία που απαριθμούνται για ίσων. Έτσι, αυτά είναι για λόγους σύγκρισης. Μέχρι στιγμής, έχουμε δει μόνο ένα σύμβολο ίσον. Αυτό είναι όταν εκχωρούμε μια τιμή σε μια μεταβλητή. Έτσι, αν έχουμε δει int n = 5, τότε ορίσαμε 5 στη μεταβλητή n. Αλλά αν θέλουμε να χρησιμοποιήσουμε για == Συγκριτικά, μπορούμε να ελέγξουμε αν n == 5. Και αν n == 5, τότε αυτό είναι αλήθεια. Έτσι τελεστές Boolean μας επιτρέπει, ουσιαστικά, να αξιολογήσει Boolean εκφράσεις για να Σωστό ή Λάθος. Έτσι, δεν equals-- έχουμε το θαυμαστικό και ίσων. Έτσι, θα μπορούσαμε επίσης να ελέγξετε εάν n δεν ισούται 5-- έτσι n! = 5. Λιγότερο από, λιγότερο από ή ίσο με, μεγαλύτερο από, μεγαλύτερη από ή ίση με, και, στη συνέχεια, έχουμε τη λογική AND και το λογικό OR. Και αυτοί μας επιτρέπουν να αξιολογήσει πολλαπλές Boolean εκφράσεις μαζί να έρθουν μαζί ως βασικά ένα ολόκληρο Boolean έκφραση. Έτσι, αν θέλουμε να βρούμε έναν αριθμό, ας πούμε, ότι είναι μεγαλύτερο από 5 αλλά λιγότερο από 15 κατά την ίδια στιγμή, θα χρησιμοποιήσει ο λογικό τελεστή AND για να δούμε αν το n είναι μεγαλύτερη από 5 && ν λιγότερο από 15. DAVID Malan: Και εδώ, πάρα πολύ, είναι πραγματικά εύκολο νωρίς για να λάθος χρησιμοποιούν μόνο ένα ενιαίο εμπορικό και ή ένα μόνο κάθετη γραμμή. Και ελπίζουμε ότι ο compiler θα φωνάζω σε σας, επειδή στην πραγματικότητα έχουν μια πολύ διαφορετική έννοια. Για όσους περίεργος, είναι που χρησιμοποιούνται για τις πράξεις bitwise, που λειτουργούν σε επιμέρους κομμάτια. Αλλά εσείς θέλετε και τους δύο εδώ. Και σούπερ σημαντικό είναι ότι πρώτο, το σύμβολο της ισότητας, η οποία είναι ο φορέας της ισότητας ως σε αντίθεση με τον τελεστή εκχώρησης. ΜΑΡΙΑ: Και η κάθετη γραμμή είναι που βρίσκεται μεταξύ της διαγραφής και επιστροφής. DAVID Malan: Ναι. Σε ένα τυπικό πληκτρολόγιο ΗΠΑ. ΜΑΡΙΑ: Ναι. Ας άλμα δικαίωμα σε υπό όρους δηλώσεις. Στην αρχή, έχετε ήδη δει, πιθανότατα, εάν καταστάσεις που σας επιτρέπουν να ελέγξτε αν κάτι είναι αληθινό, τότε να κάνουμε κάτι άλλο. Έτσι, ίσως να ήθελε για να ελέγξετε αν είναι ξωτικό σας αγγίζοντας κάποιο άλλο ξωτικό ή τα σύνορα της οθόνης σας. Και τότε ίσως να ήθελε να τελειώσει το παιχνίδι ή να κάνετε κάτι άλλο. Έτσι, η σύνταξη γι 'αυτό είναι «αν (κατάσταση)." Έτσι, αν ξωτικό σας αγγίζει κάτι, τότε δεν είναι μέσα στα άγκιστρα. Στη συνέχεια έχουμε αν-άλλος δηλώσεις. Αλλιώς μας επιτρέπει να κάνουμε κάτι εάν η κατάσταση που θα ελέγξτε στην αρχή δεν είναι αλήθεια. Έτσι, αν η Sprite αγγίζει το συνόρων να το κάνετε αυτό, άλλο να κάνει κάτι άλλο. Έτσι, αλλιώς να κάνουμε κάτι άλλο. Στη συνέχεια έχουμε ένα σύντομο παράδειγμα για αυτό. Έτσι, αν (military_time <12), θα Θέλετε να printf "Καλημέρα!" Αλλιώς θα πάμε να printf "Καλησπέρα!" Βασική παράδειγμα. DAVID Malan: Καλή. ΜΑΡΙΑ: Cool. Έτσι τώρα έχουμε δηλώσεις διακόπτη. Εναλλαγή καταστάσεων εν γένει μπορεί μας επιτρέπουν να κάνουμε πολλά του ίδιου πράγματος ότι πριν λίγο μιλήσαμε σχετικά με το εάν καταστάσεις. Για παράδειγμα, αυτή τη στιγμή έχουμε το γενική μορφή της δήλωσης διακόπτη ότι μας επιτρέπει να αναλάβουμε μια μεταβλητή που ονομάζεται n και το συγκρίνουμε με πολλά διαφορετικές τιμές, το οποίο εδώ έχουν ζητήσει constant1, constant2. Μπορεί να έχουμε πολλά περισσότερα. Και εκείνοι καλούνται περιπτώσεις. Έτσι, αν έχουμε ένα διακόπτη statement-- και αυτό λειτουργεί μόνο για integers-- έχουμε ένα μεταβλητή σε αυτήν την περίπτωση που είναι n. Εάν η μεταβλητή η είναι ίσο με constant1, εμείς θα εκτελέσει κάποιο απόσπασμα του κώδικα ή κάτι που θέλουμε να κάνουμε. Και τότε θα σπάσει. Έτσι, το σπάσιμο σημαίνει ότι η δήλωση switch θα σταματήσει την εκτέλεση, αν n είναι ίσο με constant1, και στη συνέχεια το πρόγραμμα θα συνεχιστεί. Θα βγείτε έξω από το εναλλαγή δήλωση και αυτό θα συνεχίσουμε να κάνουμε κάτι άλλο. Εάν, ωστόσο, η δεν είναι ίσο constant1, τότε ισχύει για constant2 θα πρέπει να ελέγχονται. Έτσι, αν η ισούται με constant2, ότι άλλα απόσπασμα του κώδικα θα πρέπει να εκτελεστεί. Και τότε θα σπάσει αν αυτό είναι ίσο με αυτό. Και τότε μπορούμε να έχουμε also-- δεν κατ 'ανάγκην, though-- μια προεπιλεγμένη περίπτωση, το οποίο θα συμβεί αν ο n δεν είναι ίσο με καμία από τις περιπτώσεις που έχετε συμπεριλάβει στη λίστα. Και στην περίπτωση αθέτησης, έχουμε επίσης Δεν χρειάζεται κατ 'ανάγκη ένα διάλειμμα επειδή η δήλωση switch θα ξέρετε ότι πρέπει να τελειώσει μετά την προεπιλογή περίπτωση αυτή είναι η περίπτωση. DAVID Malan: Αλλά στυλιστικά, βάζουμε πάντα εκεί. ΜΑΡΙΑ: Ναι. DAVID Malan: Ναι. Έτσι, ειδικά όταν ξεκινάμε, ειδικά εάν μεταξύ εκείνων λιγότερο άνετα, θα ήθελα προσωπικά ακριβώς προτείνουμε να κολλήσει με τις IFS και IFS-elses και αν-else-if-elses και ούτω καθεξής, εάν μόνο επειδή είναι μια μικρή πιο απλή. Αυτό είναι ένα ωραίο βελτιστοποίησης, ή μερικές φορές ακόμη και αισθητικά το κάνει τον κώδικα πιο ευανάγνωστο. Και στην πραγματικότητα, πιθανώς μέσα του εξαμήνου θα δούμε ένα πρόβλημα που όπου φαίνεται μόνο καλύτερα και πιο εύκολο να διαβάσει για τους ανθρώπους με τη χρήση ενός διακόπτη δήλωση. Αλλά μην ανησυχείτε για προσκόλληση σε αυτό το πάρα πολύ νωρίς. ΜΑΡΙΑ: Ναι. Αν έχετε πολλές δηλώσεις if, θα μπορούσε απλώς να μην είναι πολύ ευανάγνωστη. Μπορεί να μην είναι πολύ γρήγορη για να περάσει μέσα από αυτό. Έτσι μπορεί να αλλάξουν καταστάσεις να είναι πολύ χρήσιμο, καθώς και. Και επίσης, δεν remember-- δεν ξεχάσετε να βάλετε τα διαλείμματα εκεί. DAVID Malan: Δεν θυμάμαι αυτό. ΜΑΡΙΑ: Γιατί τότε θα μπορούσε να πέσει μέσω της από τη μια περίπτωση στην άλλη. Ας πούμε ότι η υπόθεση constant1 δεν έχει μια δήλωση διάλειμμα σε αυτό. Τότε θα μπορούσαμε να πέσει μέσα το εσωτερικό του κουτιού constant2. Και δεν θέλουμε να το κάνουμε αυτό, αν έχουμε ήδη φτάσει περίπτωση constant1 και είναι ίσο με n. Έτσι, για παράδειγμα, αν έχουμε μια μεταβλητή n που περιέχει έναν αριθμό κατηγορίας, και θέλουμε να δούμε τι κατηγορία is-- αν η ισούται με 50, θα πάμε για να εκτυπώσετε "CS50 είναι Εισαγωγή στην Επιστήμη των Υπολογιστών Ι " Στη συνέχεια, θα πάμε για να σπάσει. Και αυτό είναι όλο. Εάν, ωστόσο, το η είναι ίσο έως 51, θα πάμε για να εκτυπώσετε «CS51 είναι Εισαγωγή στην Επιστήμη των Υπολογιστών ΙΙ. " Στη συνέχεια, και πάλι, θα πάμε για να σπάσει. Ωστόσο, εάν, στη συνέχεια, βάζουμε 124, 61, οποιαδήποτε άλλο αριθμό που έχετε να σκεφτείτε, ή το πρόγραμμα δεν πρόκειται να αναγνωρίσουν ότι. Γι 'αυτό πρόκειται να πει, "Συγνώμη, είμαι δεν είναι εξοικειωμένοι με αυτή την κλάση. » Και αυτό πρόκειται να σπάσει. DAVID Malan: Έτσι μπορείτε να δείτε πραγματικά το αν, άλλο αν, αλλιώς ιδέα εδώ. Είναι απλά διαφορετική σύνταξη για εκφράζουν την ίδια ακριβώς ιδέα. ΜΑΡΙΑ: Ακριβώς. Τώρα έχουμε τριαδικό φορείς μας. Έτσι τριαδικό φορείς έχουν τρεις parts-- μια κατάσταση, κάτι που πρέπει να κάνετε εάν ότι η συνθήκη είναι αληθής, και, στη συνέχεια, κάτι που κάνει αν η προϋπόθεση αυτή είναι ψευδής. Έτσι βλέπετε, ουσιαστικά, η σύνταξη του ότι εδώ. Έχουμε το ερωτηματικό, και Στη συνέχεια the-- τι λέμε αυτό; DAVID Malan: Η άνω και κάτω τελεία. ΜΑΡΙΑ: Colon. Ευχαριστώ. Συγνώμη. Ας ρίξουμε μια ματιά στο παράδειγμά μας να να δούμε αν μπορούμε να δώσουμε νόημα της this-- class_num == 50. Έτσι, εδώ βλέπουμε χειριστής Boolean μας == ότι συγκρίνει τη μεταβλητή class_num 50. Έτσι class_num καταστήματα ακέραιος. Και αν αυτό το ακέραιο ισούται με 50, τότε είμαστε πρόκειται να αποθηκεύσετε το "David Malan" στο εσωτερικό του καθηγητή κορδόνι. Εάν ο αριθμός της κατηγορίας δεν ισούται με το 50, "δεν Ντέιβιντ Malan" θα είναι ο καθηγητής. DAVID Malan: Σας ευχαριστώ. Και έτσι αυτό φαίνεται ισοδύναμη προς τι θα λέγατε ότι, με την πρώτη ματιά; ΜΑΡΙΑ: Για μένα φαίνεται όπως και αν-άλλος δηλώσεις. DAVID Malan: Ναι. Και στην πραγματικότητα, αυτό είναι το είδος του ένα όμορφο μία επένδυση, να το πω έτσι, για την εφαρμογή ακριβώς η λογική της αν-else αλλά κάνει τα πάντα σε ένα βήμα. ΜΑΡΙΑ: Ακριβώς. Ναι. Έτσι, αν-άλλος δηλώσεις θα μπορούσαν καταλαμβάνουν πολύ χώρο. Θα μπορούσε να είναι πολύ μεγάλο για κάτι τόσο απλό όσο αυτό. Έτσι, αυτό μπορεί να είναι πολύ σύντομη και πολύ ωραία. Έτσι, τώρα θα πάμε σε κοιτάζω εκτέλεσης κάτι ξανά και ξανά, έτσι ώστε ο έλεγχος για την ρυθμίζουν πολλές φορές και στη συνέχεια να συνεχίσει να κάνει κάτι ενώ η συνθήκη είναι αληθής. Έτσι, αυτό μας φέρνει ωραία σε while loops. Στα αριστερά, έχουμε πρώτη μας βρόχο λίγο. Έτσι, ενώ κάτι είναι αληθινό, κάνουμε κάτι ξανά και ξανά. Γι 'αυτό φροντίστε να παρατηρήσετε ότι μας κατάσταση εδώ έχει επικυρωθεί στην κορυφή. Ενώ με το δεύτερο loop-- μας καλούμε ότι ένα do-ενώ loop-- κάνουμε κάτι, τότε ελέγχουμε για μια κατάσταση. Και αν αυτή η κατάσταση εξακολουθεί να είναι αληθινό, πάμε πίσω και να κάνουμε το πράγμα ξανά. Έτσι, η κύρια διαφορά είναι όπου η κατάσταση ελέγχεται για. Και ο κώδικας μπορεί ποτέ να είναι εκτελείται αν η κατάσταση δεν είναι ισχύει και με τον βρόχο while. Ενώ με το do-while βρόχο, έχουμε τον κωδικό ότι εκτελείται πάντα τουλάχιστον μία φορά. Και στη συνέχεια, ενώ η κατάσταση εξακολουθεί να είναι αληθινό, μπορούμε να πάμε πίσω και να επαναλάβει και πάλι μέσα. Επομένως, γιατί νομίζεις ότι θα χρησιμοποιήσετε ένα do-while loop πάνω από ένα βρόχο while; Δικαίωμα. Έτσι, αν θέλουμε να παρακινήσει το χρήστη για κάποιο είδος της εισόδου, αν θέλουμε να τους ρωτήσω για να εισάγετε το όνομά τους, θέλουμε τουλάχιστον να τους ζητήσει μία φορά. Και αν δεν αρχίζει ότι το όνομα, δεν είμαστε πρόκειται να τους ζητήσω και πάλι γιατί ήδη γνωρίζουμε. Αλλά αν δεν εισέρχονται το όνομά τους, ή αν εισάγετε κάτι που είναι προφανώς δεν είναι ένα όνομα, θέλουμε να συνεχίσουμε ζητώντας τους σχετικά με το όνομα τους. DAVID Malan: Και στη διάλεξη είχαμε ένα όπως αυτό με το να πάρει θετικό int παράδειγμα, όπου δεν υπάρχει τίποτα να ελέγξτε στην αρχή, διότι δεν έχουν ακόμη πάρει ένα int. Έτσι θέλουμε να κάνουμε this-- πάρετε μια int από το user-- Στη συνέχεια ελέγξτε, ίσως, ξανά και ξανά και ξανά. ΜΑΡΙΑ: Ακριβώς. Για loops-- OK. Για μας βρόχους μπορεί να επιτρέψει να κάνετε σχεδόν ακριβώς το ίδιο πράγμα, όπως καλά. Είναι πραγματικά ακριβώς το ίδιο πράγμα. Έτσι, δεν υπάρχει τίποτα που μπορείτε να κάνετε με θηλιές για ότι δεν θα είναι σε θέση να κάνει με το while loops. Αλλά για βρόχους μπορεί να φαίνεται λίγο λίγο πιο περίπλοκη συντακτικά επειδή έχουν τρία μέρη μέσα σε αυτό που Ήταν ακριβώς πριν από την κατάσταση με while loops. Έτσι, το πρώτο μέρος που εσείς θάλασσα, η αριστερά-πλέον, έχουμε "int νάνοι = 0." Έτσι, αυτό είναι όπου θα αρχικοποίηση μεταβλητών μας. Στη συνέχεια έχουμε ένα ερωτηματικό και "νάνοι <7." Έτσι, αυτό είναι όπου έξω κατάσταση που πράγματι είναι. Έτσι ώστε να είναι αυτό που θα έπρεπε απλά βάλτε το, ενώ loop-- "ενώ νάνοι <7." Εδώ, που πηγαίνει στο μέση μας για το βρόχο. Έτσι "dwaves <7." Και στη συνέχεια τελευταίο μέρος μας είναι "νάνους ++," η οποία είναι όπου θα ενημερώσει μεταβλητή μας. Έτσι, το σημαντικό πράγμα πρέπει να συνειδητοποιήσουμε είναι ότι αυτή η πρόκειται να περάσουν από αυτό για το βρόχο επτά φορές και να εκτελέσει επτά φορές. Έτσι έχουμε επτά νάνους, και είναι όλα πρόκειται να πει, "είμαι εδώ για να σας βοηθήσει, Χιονάτη " επειδή είναι έτοιμα για να βοηθήσει Χιονάτη. Με ενώ βρόχους, θα είχαμε κάνει η προετοιμασία και η ενημέρωση όχι στο εσωτερικό του κατάσταση, και πάλι, αλλά είτε πριν είτε εντός του βρόχου while για να βεβαιωθείτε ότι επειδή we-- χρειαζόμαστε πάντα αυτά τα μέρη. Έτσι, για να βεβαιωθείτε ότι έχουμε τους, θα είχαμε ακόμα τους προστέθηκε σχετικά, απλά δεν μέσα στις παρενθέσεις. DAVID Malan: Και έτσι φαίνεται like-- στη διάλεξη, για παράδειγμα, I σχεδόν πάντα χρησιμοποιούν, όπως, i και n και αρκετά βαρετό μεταβλητές. Μοιάζει μπορείτε να χρησιμοποιήσετε περισσότερα Έξυπνα μεταβλητές με όνομα, πάρα πολύ. ΜΑΡΙΑ: Ναι, είναι πραγματικά πολύ ωραίο να χρησιμοποιήσει λίγο πιο περιγραφικό μεταβλητές γιατί ειδικά αν κάποιος άλλος είναι ανάγνωση code-- σας ίσως είστε γκρέιντερ ή εάν συνεργάζεστε με somebody-- θέλετε να βεβαιωθείτε ότι καταλαβαίνετε τι κάνετε. ΕΝΤΆΞΕΙ. Έτσι, αυτό είναι κάτι πολύ funky-- για βρόχο μέσα σε ένα βρόχο for. Δεν ξέρω αν έχουμε δει αυτό πριν. Πιθανώς όχι. Αλλά μπορούμε να έχουμε πραγματικά this-- έτσι βρόχους αντί για βρόχους. Έτσι δεν θέλει κανείς να περπατήσει ίσως Θέλω μέσα από ό, τι συμβαίνει εδώ; DAVID Malan: Θα πάρω μια μαχαιριά. ΜΑΡΙΑ: Cool. DAVID Malan: OK. Έτσι, spoiler-- θέλουμε να εκτυπώσετε τα πράγματα που είναι στην κάτω δεξιά γωνία εκεί. ΜΑΡΙΑ: Δεξιά. Ναί ναί. DAVID Malan: έτσι έχουμε μόνο τεθεί η έξοδος του δείγματος εκεί. Γι 'αυτό και μπορεί να συναγάγει από το ανώτερο βρόχο που είστε την επανάληψη πάνω από τις γραμμές εξόχως απόκεντρες βρόχο, να το πω έτσι. Και είστε επανάληψη πάνω στήλες με το εσώτατο βρόχο. Και διαισθητικά, αυτό θα πρέπει να ελπίζουμε ότι έχει νόημα επειδή από τη φύση της Κάθε πρόγραμμα που έχουμε δει πριν, printf, η οποία είναι η συνάρτηση που χρησιμοποιούμε, εν τέλει, έχει τη δυνατότητα να εκτυπώσετε τα πράγματά από ουσιαστικά γραμμή προς γραμμή. Όπως, αφού έχετε εξάγονται μια νέα γραμμή, υπάρχει Δεν διπλασιασμό πίσω και να εκτυπώσετε κάτι υψηλότερο στην οθόνη, τουλάχιστον δεν χρησιμοποιούν printf σαν αυτό. Και έτσι, συναφώς, καθιστά αίσθηση ότι η εξόχως απόκεντρες βρόχο θα πρέπει να αναφέρεται σε σειρές επειδή για κάθε δεδομένη σειρά, θα πάμε να θέλουν να εκτυπώσετε XXXXX, και στη συνέχεια, προχωρήσουμε στην επόμενη σειρά, ΧΧΧΧΧ. Έτσι σειρές έρχονται πρώτα. Και τότε μέσα σε κάθε σειρά, μπορείτε να εκτυπώσετε τις στήλες. Αν προσπαθήσει να το κάνει η αντίθετο, μάλλον δεν θα βγαίνουν όπως επιθυμείτε. ΜΑΡΙΑ: Ναι. Εμείς απλά δεν μπορούσα να πάω πίσω για να η προηγούμενη σειρά με printf. DAVID Malan: Και τι είναι ενδιαφέρον ανά σημερινή συζήτηση σχετικά με το πεδίο εφαρμογής, στην πραγματικότητα, είναι ότι η σειρά είναι ένας int αυτό είναι που δηλώνονται στο ανώτερο βρόχο. Να σημειωθεί όμως ότι εξακολουθεί να είναι στο εσωτερικό της, να το πω έτσι, τα άγκιστρα ότι αμέσως ακολουθούν, ακόμη και αν δεν είναι τεχνικά στο πλαίσιο αυτών αγκύλες. Έτσι σειρά είναι στο πεδίο για την σύνολό του αποσπάσματος του κώδικα, τόσο στο εσωτερικό του εξωτερικού για βρόχο και στο εσωτερικό του εσωτερικού για βρόχο. Αλλά αντίθετα, όπου Είναι στήλη στο πεδίο; Η μεταβλητή στήλη; Ναι, μόνο στο εσωτερικό βρόχο. Και αυτό είναι εντάξει επειδή δεν έχουν πρόσβαση είναι έξω από αγκύλες του. Το μόνο που κάνουμε είναι να εκτυπώσετε από μια νέα γραμμή στο τέλος εκεί. Έτσι, ότι στην πραγματικότητα είναι ΟΚ. Έτσι, αυτό έχει ως αποτέλεσμα, μοιάζει, να κάνει τρεις σειρές και τέσσερις στήλες. ΜΑΡΙΑ: Δεξιά. Έτσι, πρώτα θα περάσει από την πρώτη σειρά μας. Και μόνο στην πρώτη σειρά μας, να κάνουμε το τέσσερις στήλες μέσα της πρώτης σειράς. Γι 'αυτό και εκτυπώσετε τέσσερις Χ. Και τότε μπορούμε να βγείτε από το βρόχο for, δεδομένου έχουμε ήδη εκτυπωθεί τέσσερα Χ. Και εμείς να εκτυπώσετε μια νέα γραμμή. Και τότε θα περάσουν από το ίδια διαδικασία για δύο περισσότερες σειρές να κάνει συνολικά τρεις. DAVID Malan: Και αξίζει να σημειωθεί ότι είναι απλώς ένα κατασκεύασμα της γραμματοσειράς, το γεγονός ότι η έξοδος του δείγματος φαίνεται τόσο πολύ ψηλότερο, σαν να υπάρχει κάτι περισσότερο σειρές από κίονες. Αλλά είναι ακριβώς επειδή το X είναι ψηλότερο από ό, τι είναι ευρύ. Αυτό είναι το μόνο που συμβαίνει εκεί, συν το άσπρο διάστημα μεταξύ των γραμμών. ΜΑΡΙΑ: Δεξιά. Δροσερός. DAVID Malan: Εντάξει. Έτσι, μια γρήγορη ματιά στο πρόβλημα που μία, να λάβει οποιεσδήποτε ερωτήσεις, και στη συνέχεια να αναβάλλει; Εντάξει. Έτσι, στο πρόβλημα που ένα, υπάρχουν τρεις κύριες προκλήσεις, τελικά. Αλλά πρώτα, θα βρείτε ότι το πρόβλημα που προδιαγραφή, όπως με πολλά ο psets αυτό το φθινόπωρο, θα σας καθοδηγήσει μέσω μερικές ασκήσεις προθέρμανσης, το σημείο σας έξω λίγους πόρους ότι μπορείτε ή Δεν έχω δει ήδη. Για παράδειγμα, CS50 έχει μια σειρά από ταινίες μικρού μήκους, τα οποία είναι σύντομα βίντεο, δεν σε αντίθεση με αυτό, αλλά ότι είναι ακριβώς το θέμα specific-- ίσως πέντε λεπτά, 10 λεπτά στο μήκος σε βρόχους ή σχετικά με τις συνθήκες ή στους αλγόριθμους ή αργότερα σε πιο προχωρημένα θέματα, όπως καλά. Και γενικά ενσωματώσετε εκείνοι του προβλήματος σύνολα έτσι ώστε οι μαθητές έχουν έναν πόρο με την οποία να επανεξετάσει υλικό που θα μπορούσε να έχει έχουν ήδη καταλήξει σε διάλεξη ή τμήμα. Αλλά αυτός ο τρόπος είναι πιο επικεντρωμένη και περισσότερο στα χέρια τους. Έχουμε, επίσης, τείνουν να ενσωματώσετε στο πρόβλημα θέτει τα πράγματα που ονομάζεται περάσματα. Έτσι, σχεδόν όλα τα παραδείγματα που κάνω στην ομιλία, στη σκηνή εδώ, έχουμε επίσης πυροβολήθηκε στην κάμερα σε προωθήσει μια πιο αργή, ένα πιο οικείο περιδιάβαση από εμένα σχετικά με laptop μου του εν λόγω κώδικα, γραμμή προς γραμμή έτσι ώστε σε τάξη, θα συχνά αποβουτυρωμένο μέσα από κάτι ή κάποιον θα παρεμβάλλουν με ένα να απαντήσει σε μια ερώτηση. Αλλά αυτό δεν σημαίνει οπωσδήποτε νεροχύτη σε για όλους στο ακροατήριο. Έτσι, θα βρείτε τον κωδικό περάσματα για τα περισσότερα από τα παραδείγματα ότι κάνουμε εδώ στην διάλεξη, έτσι ώστε να μπορεί να περπατήσει μέσα από το δικό σας ρυθμό και επαναφορά ή γρήγορη προώθηση ή παραλείψετε εντελώς, αν θέλετε. Υπάρχει συχνά μερικά προθέρμανσης ερωτήσεις που Σας ζητώ να ταξινομήσετε του ενισχύουν αυτό το υλικό και βεβαιωθείτε ότι είστε άνετα πριν να προχωρήσετε με την υπόλοιπη το chipset. Και τότε, φυσικά, υπάρχει η ίδια η PSET. Και ένα από τα πράγματα είμαστε πολύ συνειδητά κάνετε σε CS50 είναι σχεδόν σε κάθε πληκτικός ή διανοητικά πληκτικός μηχανικό βήμα που ίσως χρειαστεί να κάνετε είναι σχεδόν πάντοτε πολύ καλά τεκμηριωμένη. Κατά τη διάρκεια του χρόνου, θα 'αρχίσει να κάνει περισσότερο ρητορικές ερωτήσεις όπως θυμάστε πώς να το κάνουμε αυτό ή εκείνο; Αλλά σε γενικές γραμμές, θα βρείτε ότι το πρόβλημα σετ μπορείτε να πάρετε μέσα από τους μηχανισμούς κάτι έτσι ώστε τα ενδιαφέροντα, πνευματικές προκλήσεις Τα τελικά έφυγε για να σας το μαθητή. Με αυτόν εν λόγω, Zamyla, στους οποίους διατηρούνται αναφερόμενος σήμερα στη διάλεξη, είναι ένα από πολύχρονη προσωπικό μας μέλος ο οποίος κατέχει επίσης περάσματα σε συγκεκριμένα προβλήματα, όπως το chipset mario και άπληστοι, αν και όχι το νερό του τρέχοντος έτους. Και είναι σε αυτούς περάσματα ότι συχνά προσφέρει μερικές συμβουλές και κόλπα για πώς θα προχωρήσουμε, ποτέ δεν σας λένε ακριβώς τι πρέπει να κάνουμε, αλλά rather-- όπως και η προϋπόθεση, αν will-- δίνοντάς σας τουλάχιστον ένα ζευγάρι των ιδεών, έτσι ώστε να είναι στο χέρι σας, τελικά, να αποφασίσει πώς να τους πλησιάσει. ΜΑΡΙΑ: περίπου όπως ένα υψηλού επιπέδου κατανόηση της λογικής του τι σας ζητάμε να κάνετε. DAVID Malan: Ακριβώς. Και, στην πραγματικότητα, είναι Zamyla Τα περάσματα σήμαινε να απαντήσει η συχνά ερώτηση για το πού Άρχισα να κάνει, ειδικά όταν Αυτές οι προδιαγραφές είναι μακρύς λίγο τρομακτικό δοθεί όλο το κείμενο και εικόνων που έχουν μέσα τους. Έτσι water.c, θα βρείτε αφού έχετε ολοκληρώσει, είναι στην πραγματικότητα σχετικά απλή. Απολύτως είναι ένα μάτσο από εσάς πρόκειται να κτυπήσει τα κεφάλια σας στον τοίχο προσπαθώντας να καταλάβω γιατί δεν είναι σύνταξη ή γιατί δεν λειτουργεί σωστά. Αλλά μόλις τελειώσετε με αυτό και αφού έχετε δαπανηθούν κάποια στιγμή παλεύει με οποιαδήποτε τα σφάλματα που μπορεί να έχετε, θα διαπιστώσετε ότι είναι ένα πολύ σύντομο πρόγραμμα. Αυτό μπορεί να γίνει σε λίγα γραμμές κώδικα, τα περισσότερα των οποίων έχουμε δει εδώ στη διάλεξη ήδη, αν θα συγκεντρώσει τα σωστά δομικά στοιχεία. Και όπως προτείνουμε Εδώ, πρόκειται να ζητήσει μπορείτε να καθορίσετε πόσα λεπτά κάποιος παίρνει ένα ντους στην πανεπιστημιούπολη. Ορίζουμε το πρόβλημα ρυθμίστε την ταχύτητα της ροής του νερού σε, όπως, ένα ντους χαμηλής ροής το κεφάλι, όπως και το κλιπ Seinfeld είδαμε χθες ή το αντίθετο αυτού. Και τότε θα πρέπει να κάνει ένα κομμάτι των μαθηματικών, really-- αριθμητική χρησιμοποιώντας C για να πει πόσοι μας, περίπου, μπουκάλια νερό είναι ότι ισοδυναμεί με, αν είμαστε λαμβάνοντας ένα ντους n λεπτά. Τώρα, σε mario.c, αυτό πρόκειται να είναι ένα ελαφρώς μεγαλύτερη πρόγραμμα. Είναι ακόμα δεν πρόκειται να είναι αυτό το καιρό. Μόλις λίγες γραμμές περισσότερο από water.c. Αλλά πρόκειται να είναι η ευκαιρία για να αναδημιουργήσουν το παλιό σχολείο Mario πυραμίδα από Super Mario Brothers ή κάποιο διάδοχο. Δεν πρόκειται να δούμε και πιο όμορφη ή ως πολύχρωμο, όπως εκείνο το ένα εκεί. Είμαστε ακριβώς πρόκειται να χρησιμοποιήσετε λίγο hashtags όπως έχουμε εδώ στην οθόνη χρησιμοποιώντας κειμένου ASCII. Αλλά θα προσεγγίζουν την ίδια ιδέα. Και αυτό πρόκειται να είναι μια ασκήσει ότι με την πρώτη ματιά φαίνεται αρκετά simple-- μόνο εκτυπώστε μια απλή πυραμίδα. Αλλά υπάρχει ένα ζευγάρι χαρακτηριστικά εδώ που είναι ενδιαφέρουσες. Παρατηρήστε ότι το δεξιό άκρο του η πυραμίδα έχει στην πραγματικότητα δύο πλάτος. Έτσι, υπάρχουν δύο ίσες στήλες ύψος, το οποίο κάνει το απαιτούν μια μικρή κομμάτι της σκέψης για να κάνει βεβαιωθείτε ότι έχετε απόλυτο δίκιο ότι, όπως σε αντίθεση με μόνο ένα την τέλεια γωνία γραμμή. Έτσι, αυτό είναι ένα κομμάτι μιας υπόθεσης γωνία αλλά ταιριάζει με το πραγματικό παιχνίδι. Και είναι επίσης μη προφανής κατά την πρώτη ματιά πώς μπορείτε να εκτυπώσετε το λευκό κενό. Έτσι, όταν κοιτάζω το here-- εξόδου του δείγματος και είναι επίσης σε αυτό spec-- το είδος της μοιάζει με ένα ορθογώνιο, αλλά ένα διαγώνιο του ορθογώνιο έχει κόβουν, και είναι απλά λευκά διαστήματα, να το πω έτσι. Και έτσι μια συχνές ερώτημα εδώ είναι πάντα καλά, πώς μπορώ να μεταφέρω τα hashtags πάνω προς τα δεξιά; Ή πώς μπορώ να εκτυπώσω τα κενά; Και είναι πραγματικά εύκολο από ό, τι οι περισσότεροι σκέφτονται οι μαθητές. Δικαίωμα? Μπορείτε να το προσεγγίσει οπτικά από μόνο το πλήκτρο διαστήματος για μία ή δύο φορές ή τρεις φορές. Και έτσι ακόμα κι αν με printf έχουμε σχεδόν πάντα να εκτυπώσετε ένα string ή ένα int ή μια λέξη όπως "Γεια σας, κόσμο »ή σειρά των λέξεων, μπορείτε επίσης να εκτυπώσετε μόνο απόσπασμα, το διάστημα, εισαγωγικά. Και αυτό πραγματικά θα δώσει Είσαι ένα λευκό κενό εκεί. Έτσι, έχετε κατά νου ότι και Δεν overthink αυτό. Μπορείτε πραγματικά να να αποφασίσει σειρά-σειρά-σειρά, δεν σε αντίθεση με το παράδειγμά σας ένα πριν από λίγο, πόσοι από εκείνους στήλες θα πρέπει να είναι λευκά διαστήματα και πόσοι από αυτούς θα πρέπει να είναι hashtags. Θα πάρει λίγο χρόνο, αλλά είναι τελικά μια λογική παζλ του είδους. ΜΑΡΙΑ: Ναι. Αλλά η λογική της μετάβασης ανά γραμμή πρόκειται να είναι πολύ χρήσιμη εδώ. DAVID Malan: Ναι. Νομίζω ότι το δείγμα κώδικα που gave-- ακόμη αν και δεν ήταν ένα πλήρες πρόγραμμα. Χρειάζεται ακόμα int και κύρια και άκυρη και #include stdio.h, πολλά από τα πράγματα από την ομιλία. Αλλά οι δομικές μονάδες φαίνεται να είναι εκεί. Και στη συνέχεια, τέλος, είναι κάτι λίγο πιο αλγοριθμική. Έτσι αποδεικνύεται ότι κάθε φορά που θα πάει σε CVS ή οποιοδήποτε παντοπωλείο και κάποιος τα χέρια σας κατά τη λογαριασμούς ταμείο ή νομίσματα ως αλλαγή, αποδεικνύεται ότι, οι άνθρωποι, έστω και αν δεν το ξέρουν είτε όχι, πιθανώς χρησιμοποιώντας ό, τι είναι ονομάζεται άπληστος αλγόριθμος, σύμφωνα με την οποία αν οφείλεται, λένε, $ 21 στην αλλαγή, επειδή για κάποιο λόγο αγοράσατε κάτι πολύ φθηνό με ένα πολύ μεγάλο νομοσχέδιο στο CVS, θα ήταν πραγματικά ενοχλητικό και αν η ταμία σας έδωσε 21 μονά ή, χειρότερα ακόμα, ένα σωρό νομίσματα. Αντίθετα, αυτό που ένας λογικός άνθρωπος είναι κατά πάσα πιθανότητα πρόκειται να κάνουμε είναι να πάμε να αρπάξει ένα $ 20 και στη συνέχεια μια $ 1-νομοσχέδιο, και το χέρι μόλις δύο νομοσχέδια στην εν λόγω υπόθεση. ΜΑΡΙΑ: Έτσι όπου και αν επιχειρεί να ελαχιστοποιήσει η αλλαγή που δίνουν πίσω σε σας. DAVID Malan: Ακριβώς. Και ίδια αντιμετώπιση με κέρματα, καθώς και. Αν οφείλεται, λένε, $ 0.50, Ας ελπίσουμε ότι δεν θέλουν 50 πένες. Μπορείτε αντί για δύο θέλετε τέταρτα, για παράδειγμα. Τώρα, αυτό προϋποθέτει την ύπαρξη ότι το ταμείο έχει αρκετά από κάθε ονομασία ότι αυτός ή αυτή μπορεί να θέλει να σας δώσω. Αλλά εμείς δεν σας επιτρέπουν να υποθέσουμε τόσο για το πρόβλημα. Και ο στόχος, τελικά, είναι να εφαρμογή σε C κώδικα με άπληστος αλγόριθμος. Έτσι, ο χρήστης έχει τη δυνατότητα για να πληκτρολογήσετε το πόσο αλλάξει αυτός ή αυτή οφείλεται με δολάρια και λεπτά, κάποιο είδος κινητής υποδιαστολής αξίας κατά πάσα πιθανότητα. Και τότε θα πρέπει να κάνετε τα μαθηματικά και καταλάβω αλγοριθμικά, και, πόσα νομίσματα μπορώ να δώσω Σας ελάχιστα για να σας δώσει ακριβώς το ποσό της αλλαγής. Αλλά εκεί πρόκειται να είναι ένα Λίγα δύσκολο μέρη εδώ, σωστά; Όπως υπάρχει το σύνολο του θέμα ανακρίβεια. ΜΑΡΙΑ: Ακριβώς. Έτσι κινητής υποδιαστολής τιμές έχουν ανακρίβειας. Μήπως μιλάμε για αυτό σε διάλεξη σήμερα; DAVID Malan: Κάναμε το τελευταία φορά στη διάλεξη. Μιλήσαμε για ανακρίβεια. Και δεν θέλετε να εξαπατήσει το χρήστη πόσο αλλαγής αυτός ή αυτή οφείλεται. Και έτσι η περιδιάβαση, σε το πρόβλημα που προδιαγραφές, να προβληματιστεί, εν τέλει, να πώς μπορείτε να μετριάσουν αυτές που ανακρίβειας σφάλματα, ενδεχομένως. Είναι αναπόφευκτη, βεβαίως, για οι είσοδοι μιλάμε. Και, στην πραγματικότητα, pennies-- ίσως θα αναβάλει να Zamyla, Νομίζω ότι, για τα κόλπα εκεί. Έτσι, τελικά, θα βρείτε μια επιδείνωση των προβλημάτων του αυτή την εβδομάδα, η πρώτη από τις οποίες είναι αρκετά μικρό, τότε μέσο, ​​τότε λίγο μεγαλύτερο. Αλλά όλοι τους χρησιμοποιούν το κτίριο τετράγωνα μακριά από την περασμένη εβδομάδα, από αυτό το supersection, πρόβλημα που προδιαγραφή σας βάζει σε αμέτρητες πόρους. Αλλά και πάλι, αν όχι καθόλου αγωνίζεται, ειδικά μεταξύ εκείνων λιγότερο άνετα που δεν έχουν προηγούμενο ιστορικό, έρχονται σε ώρες γραφείου τη Δευτέρα και την Τρίτη και Τετάρτη και Πέμπτη. Πηγαίνετε στο CS50 Συζητήστε μέσω δικτυακό τόπο του μαθήματος, μέσω του οποίου μπορείτε να συνομιλήσετε με το προσωπικό και τους συμμαθητές. Αλλά τελικά, νομίζω ότι η η καλύτερη συμβουλή είναι απλά να ξεκινήσετε νωρίς. Δεν είναι το είδος της τάξης που εσείς θα πρέπει να αρχίζει την Τετάρτη psets νύχτα, ή χειρότερα το βράδυ της Πέμπτης. ΜΑΡΙΑ: Οι καλύτερες συμβουλές μου είναι να έχουν αρχίσει από τη Δευτέρα. DAVID Malan: Δευτέρα. Έτσι, αν δεν έχετε ξεκινήσει already-- όχι. Αλλά ακόμα και αν δεν είναι Δευτέρα, τότε Τρίτη. Όσο νωρίτερα τόσο το καλύτερο. Και αυτός είναι ο λόγος που η Φυσικά έχει τόσες πολλές ημέρες είναι αργά για να σας δώσει ένα κομμάτι από ένα ψυχολογική πίεση να ξεκινήσει νωρίτερα, αλλά εξακολουθεί να αφήσει τα πράγματα γλιστρήσει όταν τα πράγματα χρειάζονται περισσότερο χρόνο από ό, τι θα περιμένατε. ΜΑΡΙΑ: Και θέλετε να κάνετε χρήση της ώρες γραφείου όσο μπορείτε, επίσης. DAVID Malan: Οποιεσδήποτε ερωτήσεις; Εντάξει. Λοιπόν, γιατί δεν μπορούμε να αναβάλει εδώ;