1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Ενότητα 4] [λιγότερο άνετα] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Πανεπιστήμιο του Χάρβαρντ] 3 00:00:04,000 --> 00:00:07,000 [Αυτό είναι CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Εντάξει, καλώς ήρθατε πίσω στο τμήμα. 5 00:00:10,000 --> 00:00:13,000 Στο τμήμα αυτής της εβδομάδας θα πάμε να κάνουμε κάποια πράγματα. 6 00:00:13,000 --> 00:00:17,000 Εμείς πάμε στο πρώτο σετ Πρόβλημα recap 2, 7 00:00:17,000 --> 00:00:20,000 το οποίο είναι το σύνολο πρόβλημα Καίσαρα και Vigenere. 8 00:00:20,000 --> 00:00:23,000 Και μετά θα πάμε να βουτήξει αναθεώρηση Quiz 0 9 00:00:23,000 --> 00:00:26,000 και να περάσουν λίγο χρόνο ανακεφαλαιώνοντας το τι έχουμε μιλήσει για 10 00:00:26,000 --> 00:00:30,000 σε κάθε μία από τις διαλέξεις μέχρι τώρα, και θα κάνουμε επίσης μερικά προβλήματα 11 00:00:30,000 --> 00:00:32,000 από κουίζ προηγούμενου έτους. 12 00:00:32,000 --> 00:00:36,000 Με αυτόν τον τρόπο εσείς έχετε έναν καλό τρόπο για να προετοιμαστεί για αυτό. 13 00:00:36,000 --> 00:00:40,000 >> Για να ξεκινήσετε, θα έχετε καταφέρει να εκκινήσετε μια-δυο καλές λύσεις 14 00:00:40,000 --> 00:00:45,000 για το προηγούμενο σετ πρόβλημα, πρόβλημα Set 2, σε αυτό το χώρο. 15 00:00:45,000 --> 00:00:48,000 Αν εσείς χτυπήσει όλα αυτό το σύνδεσμο, 16 00:00:48,000 --> 00:00:53,000 και αν κάνετε κλικ στο όνομά μου και κάντε κλικ στην πρώτη αναθεώρηση μου 17 00:00:53,000 --> 00:00:56,000 θα δείτε caesar.c, το οποίο είναι ακριβώς αυτό που ψάχνω σε. 18 00:00:56,000 --> 00:01:00,000 Ας μιλήσουμε γι 'αυτό πολύ γρήγορα. 19 00:01:00,000 --> 00:01:02,000 Αυτό είναι μόνο ένα διάλυμα δείγματος. 20 00:01:02,000 --> 00:01:05,000 Αυτό δεν είναι απαραιτήτως η τέλεια λύση. 21 00:01:05,000 --> 00:01:08,000 Υπάρχουν πολλοί διαφορετικοί τρόποι για να γράψει αυτό, 22 00:01:08,000 --> 00:01:10,000 αλλά υπάρχουν μερικά πράγματα που θα ήθελα να επισημάνω 23 00:01:10,000 --> 00:01:13,000 που είδα όπως ήμουν ταξινόμησης, κοινά λάθη που πιστεύω ότι 24 00:01:13,000 --> 00:01:18,000 η λύση αυτή κάνει μια πολύ καλή δουλειά από το χειρισμό. 25 00:01:18,000 --> 00:01:22,000 >> Το πρώτο έχει κάποιο είδος της σχόλιο κεφαλίδα στην κορυφή. 26 00:01:22,000 --> 00:01:25,000 Στις γραμμές 1 έως 7 μπορείτε να δείτε τις λεπτομέρειες, 27 00:01:25,000 --> 00:01:28,000 τι ακριβώς αυτό το πρόγραμμα κάνει. 28 00:01:28,000 --> 00:01:32,000 Μια καλή συνήθης πρακτική όταν γράφετε κώδικα C 29 00:01:32,000 --> 00:01:35,000 ανεξάρτητα από το εάν το πρόγραμμά σας περιέχεται μέσα σε ένα ενιαίο αρχείο ή 30 00:01:35,000 --> 00:01:38,000 είτε πρόκειται για χωρίζεται σε πολλαπλά αρχεία είναι να έχουν κάποιο είδος της 31 00:01:38,000 --> 00:01:40,000 προσανατολισμό σχόλιο στην κορυφή. 32 00:01:40,000 --> 00:01:43,000 Αυτό είναι, επίσης, για τους ανθρώπους που πηγαίνουν έξω και να γράφουν κώδικα στον πραγματικό κόσμο. 33 00:01:43,000 --> 00:01:47,000 Αυτό είναι που θα βάλουν τις πληροφορίες πνευματικών δικαιωμάτων. 34 00:01:47,000 --> 00:01:50,000 Παρακάτω είναι το # περιλαμβάνει. 35 00:01:50,000 --> 00:01:55,000 Στις γραμμή 16 υπάρχει το # define, το οποίο θα επανέλθουμε σε λίγο λίγο. 36 00:01:55,000 --> 00:01:59,000 Και στη συνέχεια, όταν η λειτουργία ξεκινά, μόλις κύριες ενάρξεις, 37 00:01:59,000 --> 00:02:03,000 επειδή αυτό το πρόγραμμα έχει όλα περιέχονται σε μια ενιαία λειτουργία 38 00:02:03,000 --> 00:02:09,000 το πρώτο πράγμα που συμβαίνει-και αυτό είναι πολύ ιδιότυπο και χαρακτηριστικό ενός προγράμματος C 39 00:02:09,000 --> 00:02:14,000 που λαμβάνει σε γραμμή εντολών επιχειρήματα-είναι ότι ελέγχει άμεσα 40 00:02:14,000 --> 00:02:18,000 >> για την καταμέτρηση επιχείρημα, argc. 41 00:02:18,000 --> 00:02:24,000 Εδώ βλέπουμε ότι αυτό το πρόγραμμα περιμένει ακριβώς επιχειρήματα 2. 42 00:02:24,000 --> 00:02:27,000 Να θυμάστε ότι δεν υπάρχει ότι το πρώτο επιχείρημα που είναι το ειδικό ένα 43 00:02:27,000 --> 00:02:29,000 αυτό είναι πάντα το όνομα του προγράμματος που είναι να τρέξει, 44 00:02:29,000 --> 00:02:31,000 το όνομα του εκτελέσιμου αρχείου. 45 00:02:31,000 --> 00:02:36,000 Και έτσι τι είναι αυτό που κάνει είναι να αποτρέπει το χρήστη από την εκτέλεση του προγράμματος 46 00:02:36,000 --> 00:02:42,000 με περισσότερα ή λιγότερα επιχειρήματα. 47 00:02:42,000 --> 00:02:44,000 Ο λόγος που θέλετε να ελέγξετε για αυτό το δικαίωμα μακριά είναι γιατί 48 00:02:44,000 --> 00:02:52,000 δεν μπορούν να έχουν πρόσβαση στην πραγματικότητα αυτό το argv array εδώ αξιόπιστα 49 00:02:52,000 --> 00:02:55,000 μέχρι να έχουμε έλεγχο για να δείτε πόσο μεγάλο είναι. 50 00:02:55,000 --> 00:02:58,000 >> Ένα από τα συνηθισμένα λάθη που είδα ήταν οι άνθρωποι θα πάνε αμέσως σε 51 00:02:58,000 --> 00:03:01,000 και πιάσε argv [1]. 52 00:03:01,000 --> 00:03:06,000 Είχαν αρπάξει το βασικό επιχείρημα από την παράταξη και δεν το ένα για να μπορώ να ελέγξω σε αυτό, 53 00:03:06,000 --> 00:03:11,000 και στη συνέχεια θα έκαναν το τεστ για argc, καθώς και την επόμενη δοκιμή, 54 00:03:11,000 --> 00:03:16,000 πόσον ή όχι το πρώτο επιχείρημα ήταν πράγματι ένας ακέραιος την ίδια στιγμή, 55 00:03:16,000 --> 00:03:20,000 και ότι δεν λειτουργεί γιατί σε περίπτωση που δεν υπάρχουν επιχειρήματα που παρέχονται 56 00:03:20,000 --> 00:03:26,000 θα σας αρπάζοντας ένα επιχείρημα που δεν είναι εκεί ή προσπαθεί να αρπάξει αυτό που δεν είναι εκεί. 57 00:03:26,000 --> 00:03:29,000 >> Το άλλο μεγάλο πράγμα που πρέπει να παρατηρήσετε είναι ότι 58 00:03:29,000 --> 00:03:32,000 θέλετε πάντα να εκτυπώσετε κάποιο είδος χρήσιμο μήνυμα σφάλματος 59 00:03:32,000 --> 00:03:34,000 στο χρήστη να προσανατολίζεται αυτούς. 60 00:03:34,000 --> 00:03:37,000 Είμαι βέβαιος ότι έχετε όλα τα προγράμματα που τρέχει ξαφνικά συντρίβει, 61 00:03:37,000 --> 00:03:41,000 και μπορείτε να πάρετε αυτό το γελοίο μικρό παράθυρο που εμφανίζεται και λέει 62 00:03:41,000 --> 00:03:44,000 κάτι φρικτά αινιγματικά και ίσως σας δίνει έναν κωδικό σφάλματος ή κάτι τέτοιο 63 00:03:44,000 --> 00:03:47,000 που δεν έχει κανένα νόημα. 64 00:03:47,000 --> 00:03:50,000 Αυτό είναι όπου θέλετε πραγματικά να προσφέρουν κάτι χρήσιμο 65 00:03:50,000 --> 00:03:54,000 και απευθύνεται προς το χρήστη, έτσι ώστε όταν το τρέξετε πάνε "Ω," πρόσωπο παλάμη. 66 00:03:54,000 --> 00:03:58,000 "Ξέρω ακριβώς τι πρέπει να κάνουμε. Ξέρω πώς να διορθώσετε αυτό." 67 00:03:58,000 --> 00:04:01,000 >> Εάν δεν εκτυπώσετε ένα μήνυμα, τότε θα καταλήξετε πραγματικά 68 00:04:01,000 --> 00:04:04,000 αφήνοντας το χρήστη να πάει να εξετάσει τον πηγαίο κώδικα σας 69 00:04:04,000 --> 00:04:07,000 να καταλάβω τι πήγε στραβά. 70 00:04:07,000 --> 00:04:11,000 Υπάρχουν, επίσης, κάποιες φορές που θα χρησιμοποιήσετε διαφορετικούς κωδικούς σφάλματος. 71 00:04:11,000 --> 00:04:14,000 Εδώ χρησιμοποιούνται μόνο ένα να πω υπήρχε ένα σφάλμα, 72 00:04:14,000 --> 00:04:16,000 υπήρχε ένα σφάλμα, υπήρξε ένα σφάλμα. 73 00:04:16,000 --> 00:04:20,000 Μεγαλύτερη προγράμματα, συχνά τα προγράμματα που καλούνται από άλλα προγράμματα, 74 00:04:20,000 --> 00:04:25,000 θα επιστρέψει κάποια ειδική κωδικούς σφαλμάτων σε διαφορετικά σενάρια 75 00:04:25,000 --> 00:04:28,000 να επικοινωνούν με προγραμματισμό τι θα κάνατε διαφορετικά 76 00:04:28,000 --> 00:04:32,000 απλά χρησιμοποιήστε ένα ωραίο μήνυμα για Αγγλικά. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Καθώς εργαζόμαστε προς τα κάτω, μπορείτε να δείτε τραβάμε το κλειδί έξω. 79 00:04:37,000 --> 00:04:40,000 Δοκιμάζουμε για να δούμε αν το κλειδί ταιριάζει. 80 00:04:40,000 --> 00:04:42,000 Θα λάβετε ένα μήνυμα από το χρήστη. 81 00:04:42,000 --> 00:04:46,000 Ο λόγος που το κάνουμε αυτό σε κάνει ενώ βρόχο-και αυτό είναι κάτι που θα καλύψει 82 00:04:46,000 --> 00:04:50,000 σε λίγο, αλλά αποδεικνύεται ότι αν πληκτρολογήσετε τον έλεγχο D 83 00:04:50,000 --> 00:04:54,000 όταν παίρνετε ότι GetString εντολών στο τερματικό 84 00:04:54,000 --> 00:04:59,000 τι που πραγματικά κάνει είναι να στέλνει έναν ειδικό χαρακτήρα 85 00:04:59,000 --> 00:05:01,000 στο πρόγραμμα. 86 00:05:01,000 --> 00:05:05,000 Έχει καλέσει το ELF ή το τέλος των αρχείων χαρακτήρα. 87 00:05:05,000 --> 00:05:08,000 Και σε αυτή την περίπτωση, string το μήνυμά μας θα είναι μηδενική, 88 00:05:08,000 --> 00:05:14,000 έτσι αυτό δεν ήταν κάτι που ελέγχονται για το πρόβλημα που η ίδια. 89 00:05:14,000 --> 00:05:17,000 >> Αλλά, όπως πάμε, τώρα που έχουμε αρχίσει να μιλάμε για δείκτες 90 00:05:17,000 --> 00:05:21,000 και δυναμική κατανομή μνήμης στο σωρό, 91 00:05:21,000 --> 00:05:25,000 έλεγχο για null κάθε φορά που έχετε μια λειτουργία που θα μπορούσε 92 00:05:25,000 --> 00:05:30,000 επιστρέψει null ως αξία είναι κάτι που θα θέλετε να αποκτήσετε τη συνήθεια να κάνει. 93 00:05:30,000 --> 00:05:33,000 Αυτό είναι εδώ κυρίως για απεικόνιση. 94 00:05:33,000 --> 00:05:36,000 Αλλά όταν βλέπεις GetString στο μέλλον, 95 00:05:36,000 --> 00:05:41,000 έτσι από πρόβλημα Σετ 4 επάνω, θα θέλετε να λάβετε αυτό υπόψη. 96 00:05:41,000 --> 00:05:44,000 Και πάλι, αυτό δεν είναι ένα θέμα για το πρόβλημα Σετ 3, είτε γιατί δεν είχε καλύπτονται ακόμη. 97 00:05:44,000 --> 00:05:53,000 Τέλος, έχουμε φτάσει σε αυτό το μέρος όπου θα έχουμε την κύρια βρόχο κρυπτογράφησης, 98 00:05:53,000 --> 00:05:57,000 και υπάρχουν μερικά πράγματα που συμβαίνουν εδώ. 99 00:05:57,000 --> 00:06:02,000 Κατ 'αρχάς, θα επαναλάβει ολόκληρη σειρά ίδιο το μήνυμα. 100 00:06:02,000 --> 00:06:07,000 Εδώ έχουμε κρατήσει το strlen κλήση στην κατάσταση, 101 00:06:07,000 --> 00:06:12,000 το οποίο ένας αριθμός που έχετε επισημάνει δεν είναι ένας πολύ καλός τρόπος να πάει. 102 00:06:12,000 --> 00:06:15,000 Βγάζει σε αυτή την περίπτωση δεν είναι επίσης μεγάλη, 103 00:06:15,000 --> 00:06:20,000 εν μέρει επειδή είμαστε τροποποιώντας τα περιεχόμενα του ίδιου του μηνύματος 104 00:06:20,000 --> 00:06:27,000 μέσα για το βρόχο, οπότε αν έχουμε ένα μήνυμα που είναι 10 χαρακτήρες, 105 00:06:27,000 --> 00:06:32,000 η πρώτη φορά που ξεκινάμε ότι για βρόχο strlen θα επιστρέψει ό, τι; 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Αλλά αν θέλουμε να τροποποιήσει στη συνέχεια το μήνυμα, να πούμε ότι τροποποιήσετε 5ης χαρακτήρα του, 108 00:06:40,000 --> 00:06:46,000 και ρίχνουμε σε ένα \ 0 χαρακτήρας στην 5η θέση, 109 00:06:46,000 --> 00:06:49,000 σε μεταγενέστερη επανάληψη strlen (μήνυμα) δεν θα επιστρέψει ό, τι έκανε 110 00:06:49,000 --> 00:06:52,000 η πρώτη φορά που επαναλαμβάνεται, 111 00:06:52,000 --> 00:06:56,000 αλλά θα επιστρέψει αντί 5 επειδή ρίξαμε σε αυτό το null τερματισμού, 112 00:06:56,000 --> 00:06:59,000 και το μήκος της στοιχειοσειράς ορίζεται 113 00:06:59,000 --> 00:07:03,000 από τη θέση του εν λόγω \ 0. 114 00:07:03,000 --> 00:07:09,000 Σε αυτήν την περίπτωση, αυτό είναι ένας πολύ καλός τρόπος για να πάει, γιατί είμαστε το τροποποιώντας στη θέση του. 115 00:07:09,000 --> 00:07:13,000 Αλλά θα παρατηρήσετε ότι αυτό είναι πραγματικά εκπληκτικά απλό να κρυπτογραφήσετε 116 00:07:13,000 --> 00:07:16,000 αν μπορείτε να πάρετε τα μαθηματικά σωστή. 117 00:07:16,000 --> 00:07:19,000 Το μόνο που απαιτείται είναι να ελέγξει εάν ή όχι το γράμμα που ψάχνετε στο 118 00:07:19,000 --> 00:07:21,000 είναι πεζά ή κεφαλαία. 119 00:07:21,000 --> 00:07:24,000 >> Ο λόγος που δεν έχουμε παρά να ελέγξει γι 'αυτό και δεν έχουμε για να ελέγξει για 120 00:07:24,000 --> 00:07:27,000 η υπόθεση είναι επειδή είναι άλφα 121 00:07:27,000 --> 00:07:30,000 αν ένας χαρακτήρας είναι κεφαλαία ή αν είναι πεζό 122 00:07:30,000 --> 00:07:33,000 τότε είναι σίγουρα ένα αλφαβητικό χαρακτήρα, 123 00:07:33,000 --> 00:07:38,000 επειδή δεν έχουμε κεφαλαία και πεζά ψηφία. 124 00:07:38,000 --> 00:07:41,000 Το άλλο πράγμα που κάνουμε-και αυτό είναι λίγο δύσκολο- 125 00:07:41,000 --> 00:07:45,000 είναι ότι έχουμε τροποποιήσει το πρότυπο κρυπτογράφησης του Καίσαρα τύπο 126 00:07:45,000 --> 00:07:49,000 που δώσαμε στην προδιαγραφή σύνολο πρόβλημα. 127 00:07:49,000 --> 00:07:52,000 Ποια είναι η διαφορά εδώ είναι ότι αφαιρείται 128 00:07:52,000 --> 00:07:58,000 στην περίπτωση κεφαλαία κεφάλαιο Α, και στη συνέχεια θα προστεθεί ένα κεφάλαιο 129 00:07:58,000 --> 00:08:02,000 πίσω μέσα στο τέλος. 130 00:08:02,000 --> 00:08:05,000 >> Ξέρω ότι μερικοί από εσάς έχετε κάνει αυτό στον κώδικά σας. 131 00:08:05,000 --> 00:08:09,000 Μήπως κάποιος από εσάς να το κάνετε αυτό στην επιχειρηματολογία σας; 132 00:08:09,000 --> 00:08:13,000 Θα το έκανε αυτό. Μπορείτε να εξηγήσετε τι κάνει αυτό, Sahb; 133 00:08:13,000 --> 00:08:18,000 Αφαιρώντας από αυτό, επειδή κάνατε ένα mod δικαίωμα μετά από αυτό, 134 00:08:18,000 --> 00:08:21,000 θα πρέπει να το πάρουν, έτσι με αυτόν τον τρόπο μπορείτε να πάρετε [βήχα] θέση. 135 00:08:21,000 --> 00:08:25,000 Και στη συνέχεια, με την προσθήκη ότι αργότερα θα μετατοπιστεί πάνω από αυτό που θα ήθελε. 136 00:08:25,000 --> 00:08:27,000 Ναι, ακριβώς. 137 00:08:27,000 --> 00:08:32,000 Τι Sahb είπε ήταν ότι όταν θέλουμε να προσθέσουμε 138 00:08:32,000 --> 00:08:36,000 το μήνυμά μας και το κλειδί μαζί μας 139 00:08:36,000 --> 00:08:42,000 και στη συνέχεια mod ότι, mod ότι με NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 εάν δεν κλιμακωθούν το μήνυμά μας στο κατάλληλο 0 έως 25 σειρά πρώτη, 141 00:08:50,000 --> 00:08:54,000 τότε θα μπορούσαμε να καταλήξετε να πάρει μια πραγματικά περίεργο αριθμό 142 00:08:54,000 --> 00:08:59,000 διότι οι αξίες που ψάχνουν σε όταν κοιτάξουμε μήνυμα [i], 143 00:08:59,000 --> 00:09:03,000 όταν κοιτάξουμε την i-οστή χαρακτήρα του απλού κειμένου το μήνυμά μας, 144 00:09:03,000 --> 00:09:08,000 είναι μια τιμή κάπου σε αυτό το εύρος 65 έως 122 145 00:09:08,000 --> 00:09:13,000 με βάση τις τιμές ASCII για κεφαλαία Α με πεζά γράμματα z. 146 00:09:13,000 --> 00:09:18,000 Και έτσι όταν το mod με 26 ή με NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 δεδομένου ότι ήταν μας # define στην κορυφή μέχρι εδώ, 148 00:09:23,000 --> 00:09:28,000 που πρόκειται να μας δώσει μια τιμή που είναι στο εύρος 0 έως 25, 149 00:09:28,000 --> 00:09:30,000 και χρειαζόμαστε έναν τρόπο να κλιμακωθούν στη συνέχεια, ότι πίσω μέχρι 150 00:09:30,000 --> 00:09:32,000 και να το πάρετε με την κατάλληλη σειρά ASCII. 151 00:09:32,000 --> 00:09:36,000 Ο ευκολότερος τρόπος να γίνει αυτό είναι να περιορίσει τα πάντα κάτω 152 00:09:36,000 --> 00:09:39,000 μέσα στο εύρος από 0 έως 25 προς αρχίσει με, 153 00:09:39,000 --> 00:09:43,000 στροφή και τότε τα πάντα πίσω στο τέλος. 154 00:09:43,000 --> 00:09:46,000 >> Ένα άλλο κοινό λάθος που είδα άνθρωποι τρέχουν είναι ότι 155 00:09:46,000 --> 00:09:50,000 αν δεν το κάνουμε πραγματικότητα αυτό το δικαίωμα μακριά κλιμάκωση 156 00:09:50,000 --> 00:09:53,000 και μπορείτε να προσθέσετε μήνυμα και το κλειδί μαζί σας και να προσθέσετε, ας πούμε, 157 00:09:53,000 --> 00:09:58,000 σε μια μεταβλητή char, το πρόβλημα με αυτό 158 00:09:58,000 --> 00:10:01,000 είναι από το μήνυμα [i] είναι ένα σχετικά μεγάλο αριθμό για να αρχίσει με- 159 00:10:01,000 --> 00:10:05,000 να θυμάστε ότι είναι τουλάχιστον 65, αν αυτό είναι ένα κεφαλαίο χαρακτήρα- 160 00:10:05,000 --> 00:10:09,000 αν έχετε ένα μεγάλο κλειδί, ας πούμε, κάτι σαν 100, 161 00:10:09,000 --> 00:10:13,000 και μπορείτε να προσθέσετε αυτές τις 2 μαζί σε ένα υπογεγραμμένο char θα πάμε να πάρετε μια υπερχείλιση. 162 00:10:13,000 --> 00:10:17,000 Θα πάμε για να πάρετε μια τιμή που είναι μεγαλύτερη από 127, 163 00:10:17,000 --> 00:10:22,000 η οποία είναι η μεγαλύτερη τιμή που ένας char μεταβλητή μπορεί να κρατήσει. 164 00:10:22,000 --> 00:10:26,000 Και πάλι, αυτό είναι ο λόγος που θα θέλετε να κάνετε αυτό το είδος των πράγμα που πρέπει να αρχίσει με. 165 00:10:26,000 --> 00:10:29,000 Μερικοί άνθρωποι γύρω πήρε αυτή την περίπτωση κάνοντας ένα άλλο, αν και δοκιμές 166 00:10:29,000 --> 00:10:33,000 για να δούμε αν θα υπερχείλισης πριν το κάνουμε αυτό, 167 00:10:33,000 --> 00:10:36,000 αλλά με αυτό τον τρόπο παίρνει γύρω από αυτό. 168 00:10:36,000 --> 00:10:40,000 Και τότε σε αυτή την λύση που εκτυπώνονται από το σύνολο εγχόρδων στο τέλος. 169 00:10:40,000 --> 00:10:45,000 Άλλοι άνθρωποι εκτυπώνονται από ένα χαρακτήρα σε μια στιγμή. Και οι δύο είναι φοβερό. 170 00:10:45,000 --> 00:10:51,000 Σε αυτό το σημείο, κάντε εσείς έχετε οποιεσδήποτε απορίες, παρατηρήσεις σχετικά με αυτό; 171 00:10:51,000 --> 00:10:56,000 Τα πράγματα που σας αρέσουν, πράγματα που δεν σας αρέσουν; 172 00:10:56,000 --> 00:10:58,000 >> Είχα μια ερώτηση. 173 00:10:58,000 --> 00:11:01,000 Ίσως το έχασα κατά τη διάρκεια της δική σας εξήγηση, αλλά πώς αυτό το πρόγραμμα 174 00:11:01,000 --> 00:11:07,000 παρακάμψετε τους χώρους για τη σύνδεση το κλειδί για το μήκος του κειμένου; 175 00:11:07,000 --> 00:11:10,000 Αυτό είναι ακριβώς cipher Caesar. >> Συγνώμη, ναι. 176 00:11:10,000 --> 00:11:13,000 Ναι, θα δούμε ότι. 177 00:11:13,000 --> 00:11:16,000 Στο κρυπτογράφησης του Καίσαρα πήραμε γύρω από αυτό, επειδή 178 00:11:16,000 --> 00:11:18,000 θα γυρίσει μόνο χαρακτήρες. 179 00:11:18,000 --> 00:11:27,000 Εμείς περιστρέφεται τους μόνο αν ήταν πεζά ή κεφαλαία. 180 00:11:27,000 --> 00:11:32,000 Εσείς αισθάνεστε αρκετά καλά γι 'αυτό; 181 00:11:32,000 --> 00:11:34,000 Νιώστε ελεύθεροι να αντιγράψετε αυτό το σπίτι, πάρτε, 182 00:11:34,000 --> 00:11:37,000 συγκρίνετε με αυτό που εσείς γράψατε. 183 00:11:37,000 --> 00:11:42,000 Σίγουρα διστάσετε να στείλετε τις ερωτήσεις γι 'αυτό πάρα πολύ. 184 00:11:42,000 --> 00:11:46,000 Και πάλι, συνειδητοποιούν ότι ο στόχος εδώ με το πρόβλημά σας παρουσιάζει 185 00:11:46,000 --> 00:11:50,000 δεν είναι να σας πάρει τα παιδιά να γράψουν κώδικα για τέλεια σύνολα πρόβλημά σας. 186 00:11:50,000 --> 00:11:57,000 Είναι μια εμπειρία εκμάθησης. Ναι. 187 00:11:57,000 --> 00:12:01,000 >> Επιστροφή στην do while loop, αν ισούται με μηδέν, 188 00:12:01,000 --> 00:12:06,000 έτσι null σημαίνει απλά τίποτα, χτυπούν Απλά εισάγετε; 189 00:12:06,000 --> 00:12:12,000 Null είναι μια ειδική αξία δείκτη, 190 00:12:12,000 --> 00:12:17,000 και χρησιμοποιούμε null όταν θέλουμε να πούμε 191 00:12:17,000 --> 00:12:23,000 έχουμε μια μεταβλητή δείκτη που δείχνει σε τίποτα. 192 00:12:23,000 --> 00:12:28,000 Και έτσι τυπικά αυτό σημαίνει ότι αυτή η μεταβλητή, η μεταβλητή μηνύματος 193 00:12:28,000 --> 00:12:35,000 είναι άδειο, και εδώ, επειδή είμαστε χρησιμοποιώντας το CS50 ειδικού τύπου string, 194 00:12:35,000 --> 00:12:37,000 ποια είναι η CS50 τύπου string; 195 00:12:37,000 --> 00:12:42,000 Έχετε δει τι είναι όταν ο Δαβίδ σύρεται προς τα πίσω την κουκούλα σε διάλεξη; 196 00:12:42,000 --> 00:12:44,000 Είναι ένα funky-είναι ένας δείκτης, έτσι δεν είναι; 197 00:12:44,000 --> 00:12:48,000 Εντάξει, ναι. >> Είναι ένα char *. 198 00:12:48,000 --> 00:12:52,000 Και έτσι πραγματικά θα μπορούσε να αντικαταστήσει το 199 00:12:52,000 --> 00:12:56,000 δεξιά εδώ με char * μήνυμα, 200 00:12:56,000 --> 00:13:04,000 και έτσι η GetString λειτουργία, εάν δεν πάρει επιτυχώς μια συμβολοσειρά από τον χρήστη, 201 00:13:04,000 --> 00:13:08,000 δεν μπορεί να αναλύσει μια σειρά, και η μία περίπτωση κατά την οποία δεν μπορεί να αναλύσει μια σειρά 202 00:13:08,000 --> 00:13:11,000 είναι αν ο χρήστης πληκτρολογεί το τέλος του αρχείου χαρακτήρα, ο έλεγχος ϋ, 203 00:13:11,000 --> 00:13:17,000 η οποία δεν είναι κάτι που κάνετε συνήθως, αλλά αν αυτό συμβαίνει 204 00:13:17,000 --> 00:13:20,000 τότε η συνάρτηση θα επιστρέψει μηδενική τιμή αυτή ως έναν τρόπο για να πούμε 205 00:13:20,000 --> 00:13:23,000 "Γεια σου, δεν είχα πάρει ένα string." 206 00:13:23,000 --> 00:13:27,000 Τι θα συνέβαινε αν δεν βάλουμε μήνυμα = null, 207 00:13:27,000 --> 00:13:30,000 το οποίο είναι κάτι που δεν έχουν κάνει ακόμα; 208 00:13:30,000 --> 00:13:32,000 Γιατί θα ήταν αυτό να είναι ένα πρόβλημα εδώ; 209 00:13:32,000 --> 00:13:38,000 Επειδή ξέρω ότι μιλήσαμε λίγο σε διάλεξη για διαρροές μνήμης. 210 00:13:38,000 --> 00:13:42,000 Ναι, ας το κάνουμε αυτό, και ας δούμε τι θα συμβεί. 211 00:13:42,000 --> 00:13:44,000 >> Βασίλης ερώτηση ήταν τι θα συμβεί αν δεν έχουν στην πραγματικότητα 212 00:13:44,000 --> 00:13:48,000 αυτό το μήνυμα = null δοκιμή; 213 00:13:48,000 --> 00:13:51,000 Ας μετακινηθείτε μέχρι την κορυφή. 214 00:13:51,000 --> 00:13:53,000 Εσείς μπορείτε να σχολιάσετε αυτό το έξω. 215 00:13:53,000 --> 00:13:55,000 Στην πραγματικότητα, εγώ θα το αποθηκεύσετε σε μια αναθεώρηση. 216 00:13:55,000 --> 00:13:58,000 Αυτό θα είναι Αναθεώρηση 3. 217 00:13:58,000 --> 00:14:02,000 Τι θα πρέπει να κάνω για να τρέξει αυτό το πρόγραμμα είναι ότι θα πρέπει να κάνετε κλικ σε αυτό το εικονίδιο ταχυτήτων μέχρι εδώ, 218 00:14:02,000 --> 00:14:04,000 και θα πρέπει να προσθέσετε ένα επιχείρημα σε αυτό. 219 00:14:04,000 --> 00:14:10,000 Θα πρέπει να δώσετε το βασικό επιχείρημα από τη στιγμή που θέλουν να περάσουν σε ένα όρισμα γραμμής εντολών. 220 00:14:10,000 --> 00:14:13,000 Εδώ είμαι πρόκειται να δώσει τον αριθμό 3. Μου αρέσει 3. 221 00:14:13,000 --> 00:14:19,000 Τώρα ζουμ πίσω έξω, τρέχει το πρόγραμμα. 222 00:14:19,000 --> 00:14:24,000 Είναι το τρέξιμο, την κατάρτιση, την οικοδόμηση. 223 00:14:24,000 --> 00:14:27,000 Εδώ πάμε. Είναι σε αναμονή για να ζητηθεί. 224 00:14:27,000 --> 00:14:33,000 Αν πληκτρολογήσετε κάτι σαν γεια-όπου πήγε; 225 00:14:33,000 --> 00:14:38,000 Ω, το πρόγραμμά μου πήρε πολύ καιρό για να τρέξει. Ήμουν jawing για πάρα πολύ καιρό. 226 00:14:38,000 --> 00:14:40,000 Εδώ πηγαίνει. 227 00:14:40,000 --> 00:14:43,000 Τώρα πληκτρολογήστε το γεια. 228 00:14:43,000 --> 00:14:46,000 Βλέπουμε ότι κρυπτογραφεί κατάλληλα. 229 00:14:46,000 --> 00:14:52,000 Τώρα, τι θα συμβεί αν κάνουμε άμεση GetString να επιστρέψει null; 230 00:14:52,000 --> 00:14:57,000 Να θυμάστε, είπα ότι κάναμε αυτό πατώντας τον έλεγχο D ταυτόχρονα. 231 00:14:57,000 --> 00:14:59,000 Θα μετακινηθείτε προς τα εδώ. Θα τρέξει ξανά. 232 00:14:59,000 --> 00:15:01,000 Κτίριο. Εκεί πηγαίνει. 233 00:15:01,000 --> 00:15:04,000 Τώρα, όταν χτύπησα τον έλεγχο D 234 00:15:04,000 --> 00:15:12,000 Πήρα αυτή τη γραμμή που λέει opt/sandbox50/bin/run.sh, Τμηματοποίηση σφάλμα. 235 00:15:12,000 --> 00:15:15,000 Έχετε δει παιδιά ότι πριν; 236 00:15:15,000 --> 00:15:17,000 >> [Φοιτητικό] Γιατί δεν υπάρχει->> Συγνώμη; 237 00:15:17,000 --> 00:15:20,000 [Φοιτητικό] Γιατί δεν υπάρχει πυρήνας χωματερή σε αυτή την περίπτωση υπάρχει; 238 00:15:20,000 --> 00:15:26,000 Η χωματερή πυρήνα είναι-το ερώτημα είναι γιατί δεν υπάρχει χωματερή πυρήνα εδώ; 239 00:15:26,000 --> 00:15:29,000 Το θέμα είναι ότι μπορεί να υπάρχει, αλλά η χωματερή πυρήνας είναι ένα αρχείο 240 00:15:29,000 --> 00:15:31,000 που παίρνει αποθηκεύονται στο σκληρό δίσκο. 241 00:15:31,000 --> 00:15:34,000 Σε αυτή την περίπτωση έχουμε απενεργοποιήσει πυρήνα χωματερές 242 00:15:34,000 --> 00:15:37,000 στον server τρέχει, έτσι ώστε να μην έχουν οι άνθρωποι διαχωρίζονται από διαρρήξεις 243 00:15:37,000 --> 00:15:40,000 και δημιουργία τόνους πυρήνα χωματερές. 244 00:15:40,000 --> 00:15:46,000 Αλλά μπορείτε να πάρετε ένα. 245 00:15:46,000 --> 00:15:48,000 Χωματερές Core είναι το είδος των πράγμα που μπορείτε να απενεργοποιήσετε συχνά, 246 00:15:48,000 --> 00:15:52,000 και μερικές φορές το κάνετε. 247 00:15:52,000 --> 00:15:55,000 Το σφάλμα κατάτμησης, για να απαντήσω στην ερώτησή σας, Βασίλειος, 248 00:15:55,000 --> 00:16:00,000 λέει ότι θα προσπαθήσει να αποκτήσει πρόσβαση σε ένα δείκτη 249 00:16:00,000 --> 00:16:05,000 Αυτό δεν ήταν στο σημείο που σε τίποτα. 250 00:16:05,000 --> 00:16:09,000 Θυμηθείτε Binky στο βίντεο όταν προσπαθεί να Binky 251 00:16:09,000 --> 00:16:12,000 να αποκτήσετε πρόσβαση σε ένα δείκτη που δείχνει δεν είναι σε τίποτα; 252 00:16:12,000 --> 00:16:16,000 Σε αυτή την περίπτωση υποθέτω ότι τεχνικά ο δείκτης δείχνει σε κάτι. 253 00:16:16,000 --> 00:16:20,000 Είναι δείχνοντας μηδενική, το οποίο είναι τεχνικά 0, 254 00:16:20,000 --> 00:16:25,000 ο οποίος, όμως ορίζεται να είναι σε ένα τμήμα που δεν είναι προσβάσιμες 255 00:16:25,000 --> 00:16:28,000 από το πρόγραμμά σας, ώστε να έχετε ένα σφάλμα καταμερισμού 256 00:16:28,000 --> 00:16:31,000 επειδή δεν είστε πρόσβαση σε μνήμη που είναι σε ισχύ τμήμα 257 00:16:31,000 --> 00:16:38,000 όπως το τμήμα σωρού ή του τμήματος στοίβας ή το τμήμα δεδομένων. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Οι περισσότερες ερωτήσεις σχετικά με Καίσαρα; 260 00:16:48,000 --> 00:16:51,000 >> Ας προχωρήσουμε. Ας δούμε Αναθεώρηση 2 πολύ γρήγορα. 261 00:16:51,000 --> 00:17:00,000 Αυτό είναι Vigenere. 262 00:17:00,000 --> 00:17:04,000 Εδώ στην Vigenere 263 00:17:04,000 --> 00:17:06,000 θα περπατήσετε μέσα από αυτό το σημείο αρκετά γρήγορα γιατί, και πάλι, 264 00:17:06,000 --> 00:17:10,000 Vigenere Καίσαρα και είναι αρκετά παρόμοια. 265 00:17:10,000 --> 00:17:12,000 Σχόλιο Header είναι πριν, 266 00:17:12,000 --> 00:17:17,000 # Define είναι πριν να αποφεύγουν να χρησιμοποιούν αυτά τα μαγικά νούμερα. 267 00:17:17,000 --> 00:17:21,000 Το ωραίο είναι να πούμε ότι ήθελε να κινηθεί προς 268 00:17:21,000 --> 00:17:23,000 ένα διαφορετικό αλφάβητο ή κάτι τέτοιο. 269 00:17:23,000 --> 00:17:26,000 Αντί να χρειάζεται να πάει το χέρι να αλλάξει όλα το 26 στο κώδικα 270 00:17:26,000 --> 00:17:30,000 θα μπορούσαμε να το αλλάξετε αυτό σε 27 ή πέσει προς τα κάτω 271 00:17:30,000 --> 00:17:34,000 αν ήμασταν με τη χρήση διαφορετικών αλφαβήτων, διαφορετικές γλώσσες. 272 00:17:34,000 --> 00:17:38,000 Και πάλι, έχουμε αυτόν τον έλεγχο της καταμέτρησης επιχείρημα, 273 00:17:38,000 --> 00:17:42,000 και πραγματικά μπορείτε να πάρετε σχεδόν αυτό ως πρότυπο. 274 00:17:42,000 --> 00:17:46,000 Λίγο πολύ κάθε πρόγραμμα που γράφετε θα πρέπει να έχουν- 275 00:17:46,000 --> 00:17:50,000 αν παίρνει γραμμή εντολών επιχειρήματα-κάποια ακολουθία των γραμμών 276 00:17:50,000 --> 00:17:55,000 που διαβάζει όπως αυτό στην αρχή. 277 00:17:55,000 --> 00:17:59,000 Αυτό είναι ένα από τα πρώτα τεστ λογική που θέλετε να κάνετε. 278 00:17:59,000 --> 00:18:03,000 >> Εδώ κάναμε ό, τι κάναμε ήταν σίγουρος ότι 279 00:18:03,000 --> 00:18:06,000 η λέξη-κλειδί ήταν έγκυρη, και αυτός ήταν ο δεύτερος έλεγχος που κάναμε. 280 00:18:06,000 --> 00:18:11,000 Παρατηρήστε και πάλι ότι χωρίσαμε αυτό από argc και 2. 281 00:18:11,000 --> 00:18:14,000 Να σημειωθεί ότι σε αυτή την περίπτωση ένα πράγμα που έπρεπε να κάνουμε ήταν αντ 'αυτού 282 00:18:14,000 --> 00:18:18,000 του χρησιμοποιώντας ένα i να θέλαμε να επικυρώσει το σύνολο εγχόρδων, 283 00:18:18,000 --> 00:18:21,000 και για να γίνει αυτό θα πρέπει πραγματικά να πάει χαρακτήρα προς χαρακτήρα 284 00:18:21,000 --> 00:18:23,000 πάνω από το string. 285 00:18:23,000 --> 00:18:29,000 Δεν υπάρχει καλός τρόπος για να καλέσετε κάτι για το 286 00:18:29,000 --> 00:18:31,000 γιατί ακόμα, για παράδειγμα, ένα έως i θα επιστρέψει 0 287 00:18:31,000 --> 00:18:37,000 αν δεν μπορεί να αναλύσει έναν ακέραιο αριθμό, έτσι ώστε δεν είναι καν δουλειά. 288 00:18:37,000 --> 00:18:42,000 Και πάλι, ωραίο μήνυμα που ενημερώνει το χρήστη τι ακριβώς συνέβη. 289 00:18:42,000 --> 00:18:45,000 Στη συνέχεια, εδώ, πάλι, αναλαμβάνουμε επίσης την περίπτωση κατά την οποία 290 00:18:45,000 --> 00:18:50,000 ο χρήστης πληκτρολογεί σε ένα στοιχείο ελέγχου D τυχαίο χαρακτήρα. 291 00:18:50,000 --> 00:18:54,000 >> Και τότε Charlotte είχε μια ερώτηση νωρίτερα σχετικά με το πώς θα καταφέρουμε να παρακάμψετε χώρους 292 00:18:54,000 --> 00:18:57,000 στη σειρά μας εδώ. 293 00:18:57,000 --> 00:19:00,000 Αυτό ήταν το είδος παρόμοιο με αυτό που κάναμε με το πρόγραμμα Myspace 294 00:19:00,000 --> 00:19:04,000 που κάναμε στο τμήμα, και ο τρόπος με τον οποίο λειτούργησε 295 00:19:04,000 --> 00:19:08,000 είναι ότι παρακολουθείται ο αριθμός των γραμμάτων που είχαμε δει. 296 00:19:08,000 --> 00:19:13,000 Καθώς περπατούσαμε πάνω από το string μήνυμα, καθώς περπατούσαμε πάνω από χαρακτήρα προς χαρακτήρα, 297 00:19:13,000 --> 00:19:16,000 να ανακαλύψουμε το ευρετήριο ως μέρος του βρόχου για μας, και τότε θα παρακολουθούνται επίσης 298 00:19:16,000 --> 00:19:21,000 ο αριθμός των γραμμάτων, τόσο μη-ειδικούς χαρακτήρες, μη-ψηφία, μη-λευκό χώρο 299 00:19:21,000 --> 00:19:27,000 ότι είχαμε δει στην ξεχωριστή μεταβλητή. 300 00:19:27,000 --> 00:19:33,000 Και κατόπιν το διάλυμα αυτό τροποποιεί το κλειδί 301 00:19:33,000 --> 00:19:41,000 για να πάρετε μια πραγματική κλειδί ακέραιο, και το κάνει αυτό με την μύγα, 302 00:19:41,000 --> 00:19:47,000 δικαίωμα πριν μεταβεί στη συνέχεια να κρυπτογραφήσετε το πραγματικό μήνυμα χαρακτήρα. 303 00:19:47,000 --> 00:19:50,000 Υπάρχουν κάποιες λύσεις που ήταν απολύτως πάρα πολύ μεγάλη 304 00:19:50,000 --> 00:19:58,000 που θα τροποποιήσει το κλειδί επάνω κατά τη δοκιμή για την εγκυρότητα του κλειδιού. 305 00:19:58,000 --> 00:20:01,000 Εκτός από τη διασφάλιση ότι ο χαρακτήρας και η λέξη-κλειδί 306 00:20:01,000 --> 00:20:05,000 ήταν ένα αλφαβητικό χαρακτήρα που επίσης αποδείχθηκε ότι σε έναν ακέραιο 307 00:20:05,000 --> 00:20:13,000 στο εύρος 0 έως 25 για να παρακάμψετε τότε χρειάζεται να το κάνουμε αυτό αργότερα σε αυτό για βρόχο. 308 00:20:13,000 --> 00:20:18,000 Και πάλι, μπορείτε να δείτε εδώ αυτό είναι πραγματικά ακριβώς το ίδιο κωδικό 309 00:20:18,000 --> 00:20:22,000 ότι χρησιμοποιείται στην Καίσαρα σε αυτό το σημείο. 310 00:20:22,000 --> 00:20:25,000 Κάνεις ακριβώς το ίδιο πράγμα, έτσι το πραγματικό τέχνασμα υπολογίζει 311 00:20:25,000 --> 00:20:30,000 πώς να μετατρέψει τη λέξη-κλειδί στο ακέραιο. 312 00:20:30,000 --> 00:20:35,000 >> Ένα πράγμα που κάναμε εδώ που είναι λίγο πυκνό 313 00:20:35,000 --> 00:20:39,000 είναι επαναλάβαμε αυτή τη φράση, υποθέτω ότι θα μπορούσατε να το ονομάσετε, 314 00:20:39,000 --> 00:20:45,000 3 ξεχωριστές φορές στις γραμμές 58, 59, και 61. 315 00:20:45,000 --> 00:20:52,000 Μπορεί κάποιος να εξηγήσει τι ακριβώς κάνει αυτή η φράση; 316 00:20:52,000 --> 00:20:55,000 Είναι πρόσβαση σε ένα χαρακτήρα, όπως είπατε. 317 00:20:55,000 --> 00:20:59,000 Ναι, είναι [δεν ακούγεται] ένας χαρακτήρας στη λέξη-κλειδί, 318 00:20:59,000 --> 00:21:04,000 και γι 'αυτό είναι ο αριθμός των γραμμάτων δει επειδή είστε μόνο κινείται κατά μήκος 319 00:21:04,000 --> 00:21:06,000 η λέξη-κλειδί αφού έχετε δει την επιστολή, 320 00:21:06,000 --> 00:21:10,000 έτσι ότι πρόκειται να παραλείψετε αποτελεσματικά χώρους και τέτοια πράγματα. 321 00:21:10,000 --> 00:21:12,000 Ναι, ακριβώς. 322 00:21:12,000 --> 00:21:16,000 Και στη συνέχεια, αφού έχετε δει το κενό λέξη-κλειδί που μόλις mod έτσι ώστε να κινούνται γύρω από πίσω. 323 00:21:16,000 --> 00:21:18,000 Ακριβώς. Αυτό είναι μια τέλεια εξήγηση. 324 00:21:18,000 --> 00:21:23,000 Τι είπε ο Kevin είναι ότι θέλουμε να δείκτη στην λέξη-κλειδί. 325 00:21:23,000 --> 00:21:28,000 Θέλουμε να πάρετε το num_letters_seen χαρακτήρα, αν θέλετε, 326 00:21:28,000 --> 00:21:32,000 αλλά αν num_letters_seen υπερβαίνει το μήκος της λέξης-κλειδιού, 327 00:21:32,000 --> 00:21:37,000 ο τρόπος που παίρνουμε πίσω στην κατάλληλη σειρά είναι να χρησιμοποιήσουμε τον τελεστή mod 328 00:21:37,000 --> 00:21:40,000 για την αποτελεσματική τυλίγετε γύρω. 329 00:21:40,000 --> 00:21:43,000 Για παράδειγμα, όπως και σε βραχυπρόθεσμο, λέξη-κλειδί μας είναι μπέικον, 330 00:21:43,000 --> 00:21:46,000 και είναι πολύ 5 γράμματα. 331 00:21:46,000 --> 00:21:50,000 Αλλά έχουμε δει 6 γράμματα σε μορφή απλού κειμένου μας σε αυτό το σημείο 332 00:21:50,000 --> 00:21:52,000 και κρυπτογραφημένα 6. 333 00:21:52,000 --> 00:21:57,000 Θα καταλήξετε πρόσβαση στο num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 η οποία είναι 6, mod το μήκος της λέξης-κλειδιού, 5, 335 00:22:00,000 --> 00:22:04,000 και έτσι θα πάρει 1, και έτσι αυτό που θα κάνουμε είναι ότι θα 336 00:22:04,000 --> 00:22:14,000 πρόσβαση του πρώτου χαρακτήρα στο εσωτερικό των λέξεων-κλειδιών μας σε εκείνο το σημείο. 337 00:22:14,000 --> 00:22:21,000 >> Εντάξει, τυχόν ερωτήσεις σχετικά με Vigenere 338 00:22:21,000 --> 00:22:26,000 πριν προχωρήσουμε; 339 00:22:26,000 --> 00:22:31,000 Εσείς αισθάνεστε αρκετά καλά γι 'αυτό; 340 00:22:31,000 --> 00:22:35,000 Cool, μεγάλη. 341 00:22:35,000 --> 00:22:38,000 Θέλω να βεβαιωθείτε ότι έχετε πάρει τα παιδιά την ευκαιρία να δείτε τον κώδικα 342 00:22:38,000 --> 00:22:48,000 νομίζουμε ότι φαίνεται καλό και έχουν την ευκαιρία να μάθουν από αυτό. 343 00:22:48,000 --> 00:22:53,000 Αυτό πρόκειται να είναι το τελευταίο που θα πρέπει να χρησιμοποιούν τους χώρους προς το παρόν, 344 00:22:53,000 --> 00:22:59,000 και θα πάμε για τη μετάβαση τώρα, και είμαι πρόκειται να πάει στο cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 έτσι μπορούμε να κάνουμε ένα μικρό κομμάτι της κριτικής κουίζ. 346 00:23:06,000 --> 00:23:10,000 Ο καλύτερος τρόπος νομίζω να αρχίσουν να κάνουν κουίζ αναθεώρηση 347 00:23:10,000 --> 00:23:15,000 είναι να έρθει σε αυτή τη σελίδα Διαλέξεις, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 και κάτω από κάθε μία από τις κλάσεις εβδομάδα, οπότε αν βλέπω εδώ την Εβδομάδα 0, 349 00:23:20,000 --> 00:23:27,000 Βλέπω ότι έχουμε μια λίστα με τα θέματα που καλύπτονται από την Εβδομάδα 0. 350 00:23:27,000 --> 00:23:31,000 >> Εάν οποιαδήποτε από αυτά τα θέματα φαίνεται άγνωστη σε εσάς 351 00:23:31,000 --> 00:23:34,000 σίγουρα θα θέλετε να πάτε πίσω και να καθαρίζουν τις σημειώσεις διάλεξης και, ενδεχομένως, 352 00:23:34,000 --> 00:23:39,000 ακόμη και μέσα από το άπαχο διαλέξεις, να τους δεις ξανά, αν θέλετε 353 00:23:39,000 --> 00:23:44,000 για να πάρετε μια ιδέα για το τι συμβαίνει με κάθε ένα από αυτά τα θέματα. 354 00:23:44,000 --> 00:23:49,000 Θα πω επιπλέον φέτος ένα από τα δροσερά πόρους που έχουμε 355 00:23:49,000 --> 00:23:55,000 Είναι αυτά τα σορτς που έχουμε δημιουργήσει, και αν κοιτάξετε την Εβδομάδα 0, 356 00:23:55,000 --> 00:24:00,000 δεν έχουμε όλα τα θέματα που καλύπτονται, αλλά έχουμε αρκετά μερικά από αυτά, 357 00:24:00,000 --> 00:24:03,000 μερικές από τις πιο λεπτές αυτές, βλέποντας έτσι αυτά τα σορτς και πάλι 358 00:24:03,000 --> 00:24:08,000 είναι ένας καλός τρόπος για να σας πάρει μέχρι την ταχύτητα. 359 00:24:08,000 --> 00:24:15,000 Ειδικότερα, Πάω να βάλει σε μια πρίζα για το 3 στο κάτω μέρος, αφού έκανα αυτές. 360 00:24:15,000 --> 00:24:20,000 Αλλά αν είστε αγωνίζεται με δυαδικό, bits, hex, τέτοιου είδους πράγματα, 361 00:24:20,000 --> 00:24:22,000 δυαδικό είναι ένα εξαιρετικό μέρος για να ξεκινήσετε. 362 00:24:22,000 --> 00:24:25,000 ASCII είναι ένα άλλο που είναι καλό να δείτε πάρα πολύ. 363 00:24:25,000 --> 00:24:31,000 Μπορείτε να παρακολουθήσετε ακόμη και με ταχύτητα 1.5x αν πάω πολύ αργά για σας. 364 00:24:31,000 --> 00:24:35,000 Δεδομένου ότι η αναθεώρηση είναι, μη διστάσετε να το κάνετε αυτό. 365 00:24:35,000 --> 00:24:40,000 >> Ακριβώς για να ξεκινήσει πολύ γρήγορα, θα πάμε για να περάσει ένα ζευγάρι από αυτά τα προβλήματα κουίζ 366 00:24:40,000 --> 00:24:44,000 απλώς να επαναλαμβάνουμε γρήγορα μέσω αυτών. 367 00:24:44,000 --> 00:24:50,000 Για παράδειγμα, ας ρίξουμε μια ματιά στο πρόβλημα 16 που έχω μέχρι εδώ στο διοικητικό συμβούλιο. 368 00:24:50,000 --> 00:24:54,000 Έχουμε αυτό το ακόλουθο υπολογισμό σε δυαδική, 369 00:24:54,000 --> 00:24:56,000 και θέλουμε να δείξουμε οποιαδήποτε εργασία. 370 00:24:56,000 --> 00:24:59,000 Εντάξει, Πάω να δώσει αυτό έναν πυροβολισμό. 371 00:24:59,000 --> 00:25:01,000 Εσείς θα πρέπει να ακολουθήσουν μαζί με χαρτί, 372 00:25:01,000 --> 00:25:04,000 και εμείς θα κάνουμε αυτό πολύ γρήγορα. 373 00:25:04,000 --> 00:25:06,000 Θέλουμε να εκτελέσει τον ακόλουθο υπολογισμό σε δυαδικό. 374 00:25:06,000 --> 00:25:16,000 Έχω 00110010. 375 00:25:16,000 --> 00:25:27,000 Και Πάω να προσθέσει σε αυτό 00110010. 376 00:25:27,000 --> 00:25:30,000 Για τα μαθηματικά ιδιοφυΐες μετά μαζί στο σπίτι, 377 00:25:30,000 --> 00:25:35,000 αυτό αποτελεσματικά πολλαπλασιάζοντας επί 2. 378 00:25:35,000 --> 00:25:37,000 Ας ξεκινήσει. 379 00:25:37,000 --> 00:25:39,000 Εμείς πάμε για να ακολουθήσει τον ίδιο αλγόριθμο επιπλέον ότι κάνουμε 380 00:25:39,000 --> 00:25:43,000 όταν προσθέτουμε δεκαδικούς αριθμούς μαζί. 381 00:25:43,000 --> 00:25:46,000 Πραγματικά η μόνη διαφορά εδώ είναι ότι πίσω βρόχο γύρω από 382 00:25:46,000 --> 00:25:51,000 τη στιγμή που έχουμε 1 + 1 αντί για τη στιγμή που θα φτάσετε στο 10. 383 00:25:51,000 --> 00:25:53,000 >> Αν αρχίσουμε από τα δεξιά, πολύ γρήγορα, ποιο είναι το πρώτο ψηφίο; 384 00:25:53,000 --> 00:25:55,000 [Φοιτητικό] 0. >> [Nate H] 0. 385 00:25:55,000 --> 00:25:58,000 Μεγάλη, το δεύτερο ψηφίο; 386 00:25:58,000 --> 00:26:00,000 [Φοιτητικό] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H] Είναι ένα 1; 1 + 1 είναι? 388 00:26:02,000 --> 00:26:04,000 [Φοιτητικό] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate Η.] Ακριβώς, έτσι ποιο είναι το ψηφίο που γράφω ακριβώς κάτω από τα 2 αυτά αθροίζονται; 390 00:26:08,000 --> 00:26:11,000 [Φοιτητικό] 1, 0, ή 0 και στη συνέχεια μεταφέρετε το 1. 391 00:26:11,000 --> 00:26:15,000 [Nate Η.] 0 και φέρουν 1, ακριβώς. 392 00:26:15,000 --> 00:26:18,000 Στη συνέχεια το ένα, Βασίλειος, είστε επάνω. 393 00:26:18,000 --> 00:26:20,000 Τι είναι ο τρίτος; >> [Βασίλης] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate Η.] 1, τέλεια. Kevin; 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0. >> [Nate Η.] 0, Charlotte; 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H] Ναι, και τι μπορώ να κάνω; 397 00:26:30,000 --> 00:26:32,000 [Φοιτητικό] Η 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H] Και τι μπορώ να κάνω; Και τότε θα φέρουν το 1. 399 00:26:34,000 --> 00:26:36,000 Τέλεια, Sahb; >> [Sahb] Τώρα έχετε 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H] Και κάνω τίποτα εδώ; 401 00:26:40,000 --> 00:26:43,000 [Sahb] Στη συνέχεια, για την επόμενη έχετε 1 γιατί μεταφέρονται πάνω από 1. 402 00:26:43,000 --> 00:26:49,000 [Nate Η.] Μεγάλη, έτσι και εδώ μπορούμε να το τελειώσω. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Φοιτητικό] Μήπως 0 + 0 = 0; 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, όπως είπατε, είναι 10, ή 1, 0, μάλλον. 407 00:27:01,000 --> 00:27:07,000 10 είναι μια ακυριολεξία επειδή για μένα 10 σημαίνει τον αριθμό 10, 408 00:27:07,000 --> 00:27:12,000 και είναι η ιδιορρυθμία του πώς είμαστε αυτό που αντιπροσωπεύει, όταν είμαστε το γράψιμο. 409 00:27:12,000 --> 00:27:20,000 Εμείς αντιπροσωπεύουν τον αριθμό 2 από 1, 0, και ο αριθμός 10 είναι ελαφρώς διαφορετική. 410 00:27:20,000 --> 00:27:23,000 >> Τι είδος της Νίκαιας σχετικά με δυαδική είναι ότι πραγματικά δεν είναι ότι πολλοί 411 00:27:23,000 --> 00:27:25,000 περιπτώσεις που πρέπει να μάθετε. 412 00:27:25,000 --> 00:27:30,000 Υπάρχει 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 είναι 0, και στη συνέχεια να φέρουν 1, 414 00:27:34,000 --> 00:27:37,000 και στη συνέχεια μπορείτε να δείτε εδώ την τρίτη στήλη από τα δεξιά 415 00:27:37,000 --> 00:27:40,000 είχαμε αυτό το 1, 1, και 1. 416 00:27:40,000 --> 00:27:43,000 Και 1 + 1 + 1 είναι ένα 1, 417 00:27:43,000 --> 00:27:45,000 και σας μεταφέρει άλλο 1. 418 00:27:45,000 --> 00:27:48,000 Όταν κάνετε δυαδικό Επιπλέον, αρκετά απλή. 419 00:27:48,000 --> 00:27:51,000 Θα ήθελα να κάνω μια-δυο περισσότερα από αυτά να ελέγξετε τον εαυτό σας λογική 420 00:27:51,000 --> 00:27:54,000 πριν πάτε σε αυτό, διότι είναι 421 00:27:54,000 --> 00:28:00,000 ίσως κάτι που θα δούμε στο κουίζ. 422 00:28:00,000 --> 00:28:03,000 Τώρα ας κάνουμε αυτό το επόμενο, καθώς και. 423 00:28:03,000 --> 00:28:06,000 Ας κάνουμε πρόβλημα 17. 424 00:28:06,000 --> 00:28:12,000 Εμείς πάμε για να μετατρέψετε το παρακάτω δυαδικό αριθμό σε δεκαδικό. 425 00:28:12,000 --> 00:28:28,000 Έχω 10100111001. 426 00:28:28,000 --> 00:28:33,000 Θυμηθείτε το δυαδικό βίντεο που έκανα 427 00:28:33,000 --> 00:28:36,000 Περπάτησα μέσα από μερικά παραδείγματα, και μου έδειξε πώς 428 00:28:36,000 --> 00:28:41,000 ό, τι λειτουργεί όταν το κάνετε σε δεκαδικό. 429 00:28:41,000 --> 00:28:45,000 Όταν εργάζεστε σε δεκαδική αναπαράσταση Νομίζω ότι είμαστε 430 00:28:45,000 --> 00:28:48,000 σε αυτό το σημείο στη ζωή μας τόσο πολύ καλά σε αυτό που 431 00:28:48,000 --> 00:28:53,000 Είναι αρκετά εύκολο να αποσιωπήσει τους μηχανισμούς για το πώς λειτουργεί πραγματικά. 432 00:28:53,000 --> 00:28:59,000 >> Αλλά για να κάνουμε μια γρήγορη ανακεφαλαίωση, αν έχω τον αριθμό 137 433 00:28:59,000 --> 00:29:06,000 αυτό σημαίνει-και πραγματικά πάλι, αυτό είναι σε δεκαδική αναπαράσταση- 434 00:29:06,000 --> 00:29:19,000 ο αριθμός 137 σε δεκαδικό σημαίνει ότι έχω 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Αυτό είναι το μόνο που διαμένουν στην οθόνη. 436 00:29:22,000 --> 00:29:29,000 Και στη συνέχεια, αν δείτε αυτούς τους αριθμούς εδώ, 437 00:29:29,000 --> 00:29:34,000 100, 10 και 1, θα δείτε ότι είναι στην πραγματικότητα όλες οι δυνάμεις του 10. 438 00:29:34,000 --> 00:29:43,000 Έχω 10 ², 10 Rl, και 10 στο μηδέν. 439 00:29:43,000 --> 00:29:48,000 Έχουμε ένα παρόμοιο είδος του πράγματος σε δυαδική, 440 00:29:48,000 --> 00:29:55,000 εκτός από το ότι βάση μας, όπως την αποκαλούμε, είναι 2 αντί για 10. 441 00:29:55,000 --> 00:29:58,000 Αυτά τα 10s που έγραψα εδώ κάτω στο κάτω μέρος, 442 00:29:58,000 --> 00:30:02,000 αυτό το 10 ², 10 ¹, 10 στο μηδέν, το 10 είναι η βάση μας, 443 00:30:02,000 --> 00:30:08,000 και ο εκθέτης, 0, 1, ή 2, 444 00:30:08,000 --> 00:30:14,000 υπονοείται από τη θέση του ψηφίο του αριθμού που γράφουμε. 445 00:30:14,000 --> 00:30:21,000 1, αν το δει κανείς, αυτό το 1 είναι στη 2η θέση. 446 00:30:21,000 --> 00:30:27,000 Το 3 είναι στην θέση πρώτου, και το 7 είναι στην 0κή θέση. 447 00:30:27,000 --> 00:30:35,000 Αυτό είναι το πώς θα πάρει τα διάφορα εκθέτες παρακάτω για βάσεις μας. 448 00:30:35,000 --> 00:30:40,000 >> Μετά από όλα αυτά we'll-στην πραγματικότητα, ξέρετε τι; 449 00:30:40,000 --> 00:30:43,000 Θα κάνουμε-πού κουμπί undo μου; 450 00:30:43,000 --> 00:30:45,000 Εκεί πηγαίνει. 451 00:30:45,000 --> 00:30:47,000 Λατρεύω αυτό το πράγμα αναίρεση. 452 00:30:47,000 --> 00:30:51,000 Μετά από αυτό νομίζω ότι για μένα τουλάχιστον 453 00:30:51,000 --> 00:30:54,000 ο ευκολότερος τρόπος για να ξεκινήσετε τη μετατροπή ενός δυαδικού αριθμού 454 00:30:54,000 --> 00:30:57,000 ή ένας δεκαεξαδικός αριθμός όπου η βάση είναι 16 455 00:30:57,000 --> 00:31:02,000 και όχι 10 ή 2 είναι να προχωρήσει και να γράψουν 456 00:31:02,000 --> 00:31:09,000 οι βάσεις και εκθέτες για όλους τους αριθμούς σε δυαδική αριθμός μου στην κορυφή. 457 00:31:09,000 --> 00:31:14,000 Αν αρχίσουμε από τα αριστερά προς τα δεξιά και πάλι, 458 00:31:14,000 --> 00:31:17,000 το οποίο είναι το είδος της αντιφατικό, 459 00:31:17,000 --> 00:31:23,000 Θα αλλάξει πίσω σε μαύρο εδώ, έχουμε το 2 έως το 0th θέση, 460 00:31:23,000 --> 00:31:27,000 και τότε έχουμε 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 και στη συνέχεια 2 στο 3, 2 έως το 4, με το 2 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, και 10. 463 00:31:39,000 --> 00:31:41,000 Οι αριθμοί που έχω γράψει από όλα είναι οι εκθέτες. 464 00:31:41,000 --> 00:31:48,000 Έγραψα μόνο τις βάσεις εδώ στο 3 πρώτα μόνο για το διάστημα. 465 00:31:48,000 --> 00:31:50,000 >> Σε αυτό το σημείο είμαι πρόκειται να πάει μπροστά και είμαι πραγματικά πρόκειται να διαγράψετε 466 00:31:50,000 --> 00:31:53,000 τα πράγματα που κάναμε σε δεκαδικό, αν αυτό είναι εντάξει. 467 00:31:53,000 --> 00:31:57,000 Έχετε όλοι ότι έχεις. 468 00:31:57,000 --> 00:32:05,000 Όσοι από εσάς παρακολουθούν σε απευθείας σύνδεση Είμαι σίγουρος ότι θα είναι σε θέση να μου προς τα πίσω, αν θέλετε. 469 00:32:05,000 --> 00:32:07,000 Ενεργοποίηση πίσω στο στυλό. 470 00:32:07,000 --> 00:32:12,000 Τώρα, αυτό που μπορούμε να κάνουμε-αν εσείς δεν είναι εντελώς μέχρι την ταχύτητα στην εξουσία σας από 2, 471 00:32:12,000 --> 00:32:15,000 αυτό είναι εντελώς δροσερό. 472 00:32:15,000 --> 00:32:18,000 Συμβαίνει. Καταλαβαίνω. 473 00:32:18,000 --> 00:32:23,000 Κάποτε είχα μια συνέντευξη για δουλειά, όπου μου είπαν ότι θα πρέπει να γνωρίζουν όλες τις δυνάμεις του 2 474 00:32:23,000 --> 00:32:26,000 μέσα από 2 έως την 30η. 475 00:32:26,000 --> 00:32:29,000 Δεν ήταν μια δουλειά που πήρα. 476 00:32:29,000 --> 00:32:32,000 Εν πάση περιπτώσει, εσείς μπορεί να πάει μπροστά και να κάνουμε τα μαθηματικά εδώ, 477 00:32:32,000 --> 00:32:35,000 αλλά με δυαδική δεν κάνει πραγματικά την αίσθηση, 478 00:32:35,000 --> 00:32:38,000 και ούτε έχει νόημα με δεκαδική ή δεκαεξαδική μορφή είτε, 479 00:32:38,000 --> 00:32:43,000 να κάνετε τα μαθηματικά από όπου έχετε μηδενικά. 480 00:32:43,000 --> 00:32:49,000 Μπορείτε να δείτε έχω 0, εδώ εδώ ένα 0, 0 εδώ, 0 εδώ, 0 εδώ, 0 εδώ. 481 00:32:49,000 --> 00:32:52,000 Γιατί μπορεί να μην έχει νόημα να κάνουμε την πραγματική μαθηματικά 482 00:32:52,000 --> 00:32:56,000 να υπολογίσει την κατάλληλη δύναμη του 2 για το εν λόγω θέση; 483 00:32:56,000 --> 00:32:59,000 Ακριβώς, όπως η Charlotte είπε, θα είναι 0. 484 00:32:59,000 --> 00:33:05,000 Μπορεί επίσης να αποθηκεύσετε στον εαυτό σας το χρόνο, αν τον υπολογισμό δυνάμεις του 2 δεν είναι ισχυρό κοστούμι σας. 485 00:33:05,000 --> 00:33:10,000 Σε αυτή την περίπτωση το μόνο που χρειάζεται για να υπολογίσει για 2 έως το 0 που είναι-; 486 00:33:10,000 --> 00:33:12,000 [Φοιτητικό] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate Η.] 1, 2 με την 3 η οποία είναι-; 488 00:33:14,000 --> 00:33:16,000 [Φοιτητικό] 8. >> [Nate H] 8. 489 00:33:16,000 --> 00:33:18,000 2 με το 4; 490 00:33:18,000 --> 00:33:21,000 [Φοιτητικό] 2. Λυπάμαι, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate Η.] 2 στο 4 είναι 16, ακριβώς. 492 00:33:26,000 --> 00:33:28,000 2 στο 5, Kevin; >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 έως τις 8; 494 00:33:32,000 --> 00:33:38,000 [Φοιτητικό] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate Η.] Perfect. 496 00:33:41,000 --> 00:33:43,000 Και 2 στην 10; 497 00:33:43,000 --> 00:33:45,000 [Φοιτητικό] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate Η.] Ναι, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Μόλις έχουμε αυτούς τους αριθμούς μπορούμε να συνοψίσουμε όλα αυτά επάνω. 500 00:33:57,000 --> 00:34:01,000 Και αυτό είναι όπου είναι πραγματικά σημαντικό να κάνουμε κάποια πράγματα. 501 00:34:01,000 --> 00:34:07,000 Η μία είναι να επιβραδύνει και να ελέγξετε την εργασία σας. 502 00:34:07,000 --> 00:34:10,000 Μπορείτε να πείτε ότι υπάρχει το 1 στο τέλος αυτού του αριθμού, 503 00:34:10,000 --> 00:34:15,000 γι 'αυτό θα πρέπει να έχετε σίγουρα ένα μονό αριθμό ως αποτέλεσμα μου, 504 00:34:15,000 --> 00:34:18,000 επειδή όλες οι άλλες που πρόκειται να είναι ζυγοί αριθμοί 505 00:34:18,000 --> 00:34:21,000 δεδομένου ότι είναι ένα δυαδικό αριθμό. 506 00:34:21,000 --> 00:34:24,000 Το άλλο πράγμα που πρέπει να κάνουμε είναι αν φτάσετε σε αυτό το σημείο για τη δοκιμή 507 00:34:24,000 --> 00:34:27,000 και έχετε γράψει αυτό το πολύ 508 00:34:27,000 --> 00:34:30,000 και τρέχετε από το χρόνο 509 00:34:30,000 --> 00:34:33,000 να δούμε τον αριθμό των σημείων ότι το πρόβλημα αυτό αξίζει. 510 00:34:33,000 --> 00:34:40,000 Αυτό το πρόβλημα, όπως μπορείτε να δείτε-αν αναστρέψετε πίσω στο laptop μου πολύ γρήγορα- 511 00:34:40,000 --> 00:34:44,000 το πρόβλημα αυτό αξίζει 2 πόντους, οπότε αυτό δεν είναι το είδος της προσθήκης 512 00:34:44,000 --> 00:34:47,000 θα πρέπει να περνάει, αν είστε πραγματικά πιεστεί για το χρόνο. 513 00:34:47,000 --> 00:34:52,000 Αλλά θα επιστρέψετε στο iPad, και θα πάμε μέσα από αυτό πολύ γρήγορα. 514 00:34:52,000 --> 00:34:54,000 >> Μου αρέσει να κάνω τις πρώτες μικρούς αριθμούς 515 00:34:54,000 --> 00:34:56,000 επειδή θεωρώ ότι πιο εύκολο. 516 00:34:56,000 --> 00:35:00,000 Μου αρέσει 32 και 8, διότι πηγαίνουν μαζί αρκετά εύκολα, και έχουμε 50. 517 00:35:00,000 --> 00:35:03,000 16 και 1 παίρνει 17. 518 00:35:03,000 --> 00:35:05,000 Εκεί θα έχουμε 57, 519 00:35:05,000 --> 00:35:14,000 και τότε μπορούμε να κάνουμε το υπόλοιπο αυτό, ώστε να μπορούμε να κάνουμε 57, 156. 520 00:35:14,000 --> 00:35:16,000 Έλα. 521 00:35:16,000 --> 00:35:19,000 Ο άνθρωπος, λοιπόν, ας δούμε. 522 00:35:19,000 --> 00:35:27,000 Είχαμε 57, 256, και 1024. 523 00:35:27,000 --> 00:35:31,000 Σε αυτό το σημείο, θα προτιμούσα να πήγαινε μέσα. 524 00:35:31,000 --> 00:35:35,000 Δεν έχω ιδέα. I σαφώς πρέπει να διαβάσετε επάνω σε αυτό. 525 00:35:35,000 --> 00:35:40,000 7, 6, και 4, μπορείτε να πάρετε 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Στη συνέχεια, παίρνουμε 3, και στη συνέχεια παίρνουμε 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Πασχαλινό αυγό, κανείς; 530 00:35:55,000 --> 00:35:59,000 Ο καθένας αναγνωρίζει αυτόν τον αριθμό; 531 00:35:59,000 --> 00:36:02,000 Chris αναγνωρίζει τον αριθμό. Τι σημαίνει αυτό, Κρις; 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, οπότε αν κοιτάξετε αυτό, μοιάζει leet. 534 00:36:11,000 --> 00:36:15,000 Hacker πράγματα. Προσέξτε για τέτοιου είδους πράγματα σχετικά με την ενδιάμεση ή κουίζ, μάλλον. 535 00:36:15,000 --> 00:36:19,000 Αν δείτε τέτοιου είδους πράγματα και αναρωτιέστε "Εεε," 536 00:36:19,000 --> 00:36:22,000 αυτό μπορεί να σημαίνει πραγματικά κάτι. 537 00:36:22,000 --> 00:36:24,000 Δεν ξέρω. David αρέσει αυτό βάζοντας μέσα 538 00:36:24,000 --> 00:36:26,000 Είναι ένας καλός τρόπος για να το ελέγξουμε λογική. 539 00:36:26,000 --> 00:36:30,000 Όπως εντάξει, μπορώ να δω τι συμβαίνει. 540 00:36:30,000 --> 00:36:34,000 >> Αυτό είναι 0/Week 1 Εβδομάδα πράγματα. 541 00:36:34,000 --> 00:36:39,000 Αν επιστρέψετε στο laptop μας τώρα, 542 00:36:39,000 --> 00:36:46,000 σμίκρυνση, και μερικά άλλα πράγματα. 543 00:36:46,000 --> 00:36:50,000 Υπάρχει ASCII, το οποίο έχουμε ήδη κάνει πολλά με τις ομάδες πρόβλημα. 544 00:36:50,000 --> 00:36:55,000 Αυτή η έννοια του κεφαλαίου Α. Τι είναι αυτό πραγματικά; 545 00:36:55,000 --> 00:36:57,000 Γνωρίζοντας ότι είναι ο ακέραιος. 546 00:36:57,000 --> 00:37:00,000 65 είναι αυτό που θα χαρτογραφηθεί στο ASCII πίνακα, 547 00:37:00,000 --> 00:37:03,000 και ότι ως εκ τούτου είναι πώς ο υπολογιστής θα γράφει, 548 00:37:03,000 --> 00:37:06,000 και αυτό είναι το πώς έχουμε πάρει μακριά με πραγματικά εγγράφως 549 00:37:06,000 --> 00:37:09,000 η πρωτεύουσα του χαρακτήρα A και ο χαρακτήρας πεζά ένα 550 00:37:09,000 --> 00:37:14,000 σε ορισμένες από αυτές τις λύσεις και θέτει το πρόβλημα που έχετε κάνει. 551 00:37:14,000 --> 00:37:16,000 Ένα ζευγάρι από άλλα πράγματα. 552 00:37:16,000 --> 00:37:25,000 Έχουμε δηλώσεις, boolean εκφράσεις, τις συνθήκες, βρόχους, οι μεταβλητές και τα θέματα. 553 00:37:25,000 --> 00:37:29,000 >> Αυτοί όλοι φαίνεται να έχει νόημα για το μεγαλύτερο μέρος; 554 00:37:29,000 --> 00:37:35,000 Μέρος αυτής της ορολογίας είναι λίγο funky κατά καιρούς. 555 00:37:35,000 --> 00:37:46,000 Θέλω να πιστεύω ότι του δήλωση ως επί το πλείστον κάτι που τελειώνει με ένα ερωτηματικό. 556 00:37:46,000 --> 00:37:51,000 Καταστάσεις όπως η x = 7, το οποίο ορίζει μια μεταβλητή, 557 00:37:51,000 --> 00:37:54,000 προφανώς ονομάζεται x = 7. 558 00:37:54,000 --> 00:38:01,000 Προφανώς το x είναι επίσης ένας τύπος που μπορεί να αποθηκεύσει τον αριθμό 7, 559 00:38:01,000 --> 00:38:05,000 γι 'αυτό είναι ένα int ή float, ενδεχομένως, ένα ή μια μικρή ή μια char, 560 00:38:05,000 --> 00:38:07,000 κάτι τέτοιο. 561 00:38:07,000 --> 00:38:12,000 Μια boolean έκφραση χρησιμοποιεί αυτά τα διπλά ισούται 562 00:38:12,000 --> 00:38:17,000 και το κτύπημα ή ο ισούται δεν ισούται, μικρότερο από, μεγαλύτερο από, 563 00:38:17,000 --> 00:38:22,000 μικρότερη ή ίση με, όλα τέτοιου είδους πράγματα. 564 00:38:22,000 --> 00:38:28,000 Προϋποθέσεις τότε είναι εάν άλλος δηλώσεις. 565 00:38:28,000 --> 00:38:32,000 Θέλω να θυμάστε ότι δεν μπορείτε να έχετε ένα άλλο χωρίς αντίστοιχη περίπτωση. 566 00:38:32,000 --> 00:38:37,000 Ομοίως, δεν μπορείτε να έχετε ένα άλλο, αν χωρίς αντίστοιχη αν. 567 00:38:37,000 --> 00:38:40,000 Loops, υπενθυμίζουν τα 3 είδη βρόχων έχουμε σφυρηλάτηση σε σας 568 00:38:40,000 --> 00:38:43,000 για τα τελευταία δύο τμήματα και σύνολα πρόβλημα. 569 00:38:43,000 --> 00:38:46,000 Χρησιμοποιώντας μην ενώ όταν παίρνετε είσοδο του χρήστη, 570 00:38:46,000 --> 00:38:51,000 ενώ χρησιμοποιώντας βρόχους μέχρι μια συγκεκριμένη συνθήκη είναι αληθής, 571 00:38:51,000 --> 00:38:56,000 και στη συνέχεια, χρησιμοποιώντας τα για βρόχους, αν πρέπει να 572 00:38:56,000 --> 00:39:01,000 γνωρίζουμε ποια επανάληψη του βρόχου είστε σήμερα είναι το πώς το σκέφτομαι. 573 00:39:01,000 --> 00:39:07,000 Ή αν κάνεις ένα για κάθε χαρακτήρα σε μια σειρά που θέλω να κάνω κάτι, 574 00:39:07,000 --> 00:39:15,000 για κάθε στοιχείο σε μια σειρά που θέλω να κάνω κάτι για αυτό το στοιχείο. 575 00:39:15,000 --> 00:39:18,000 >> Κλωστές και εκδηλώσεις. 576 00:39:18,000 --> 00:39:21,000 Αυτά δεν έχουμε καλύπτονται ρητώς στην C, 577 00:39:21,000 --> 00:39:23,000 αλλά να θυμάστε αυτό από την αρχή. 578 00:39:23,000 --> 00:39:26,000 Αυτή είναι η έννοια της ύπαρξης διαφορετικών σεναρίων. 579 00:39:26,000 --> 00:39:32,000 Αυτό είναι, επίσης, η έννοια της μετάδοσης μιας εκδήλωσης. 580 00:39:32,000 --> 00:39:37,000 Μερικοί άνθρωποι δεν χρησιμοποιούν ραδιοτηλεόρασης στα έργα τους αρχικά, 581 00:39:37,000 --> 00:39:40,000 η οποία είναι εντελώς δροσερό, 582 00:39:40,000 --> 00:39:46,000 αλλά αυτά είναι 2 διαφορετικούς τρόπους από το χειρισμό αυτού του ζητήματος που ονομάζεται μεγαλύτερο συναγωνισμό, 583 00:39:46,000 --> 00:39:49,000 το οποίο είναι πώς μπορείτε να πάρετε τα προγράμματα για την εκτέλεση 584 00:39:49,000 --> 00:39:54,000 ή φαινομενικά εκτελεί την ίδια στιγμή; 585 00:39:54,000 --> 00:39:59,000 Διαφορετικές εργασίες εκτελούνται ενώ άλλες εργασίες εκτελούνται επίσης. 586 00:39:59,000 --> 00:40:01,000 Αυτό είναι το πώς το λειτουργικό σας σύστημα φαίνεται να λειτουργεί. 587 00:40:01,000 --> 00:40:04,000 Αυτός είναι ο λόγος, ακόμη και αν, για παράδειγμα, 588 00:40:04,000 --> 00:40:10,000 Έχω browser μου τρέξιμο, μπορώ επίσης να ενεργοποιήσετε την Spotify και να παίξουν ένα τραγούδι. 589 00:40:10,000 --> 00:40:14,000 Αυτό είναι περισσότερο από μια εννοιολογική πράγμα που πρέπει να καταλάβουμε. 590 00:40:14,000 --> 00:40:17,000 Θα ήθελα να ρίξουμε μια ματιά στα θέματα σύντομο 591 00:40:17,000 --> 00:40:21,000 αν θέλετε να μάθετε περισσότερα γι 'αυτό. 592 00:40:21,000 --> 00:40:26,000 >> Ας δούμε, πιστεύω ότι μπορεί να υπήρξαν 593 00:40:26,000 --> 00:40:31,000 ένα πρόβλημα σχετικά με αυτό σε μία από αυτές. 594 00:40:31,000 --> 00:40:35,000 Και πάλι, νομίζω ότι τα θέματα και τα γεγονότα δεν είναι κάτι που θα καλύψουμε σε C 595 00:40:35,000 --> 00:40:41,000 μόνο και μόνο επειδή είναι πολύ πιο δύσκολο από ό, τι στο Scratch. 596 00:40:41,000 --> 00:40:44,000 Δεν πρέπει να ανησυχείτε γι 'αυτό εκεί, αλλά σίγουρα κατανοούν τις έννοιες, 597 00:40:44,000 --> 00:40:47,000 καταλάβουμε τι συμβαίνει. 598 00:40:47,000 --> 00:40:52,000 Πριν προχωρήσουμε, οποιεσδήποτε ερωτήσεις σχετικά Εβδομάδα 0 υλικό; 599 00:40:52,000 --> 00:40:55,000 Όλοι αισθάνονται αρκετά καλά; 600 00:40:55,000 --> 00:41:03,000 Κατανόηση μεταβλητές και τι είναι μεταβλητή; 601 00:41:03,000 --> 00:41:08,000 >> Προχωρώντας. Εβδομάδα 1. 602 00:41:08,000 --> 00:41:12,000 Ένα ζευγάρι από τα πράγματα εδώ που δεν ήταν ιδιαίτερα καλύπτονται 603 00:41:12,000 --> 00:41:21,000 στο πλαίσιο της αναθεώρησης κουίζ κατ 'ανάγκη και επίσης είναι πιο εννοιολογική πράγματα να σκεφτώ. 604 00:41:21,000 --> 00:41:30,000 Η πρώτη είναι η έννοια του τι είναι πηγαίου κώδικα, μεταγλωττιστές και αντικειμενικό κώδικα. 605 00:41:30,000 --> 00:41:32,000 Ο καθένας; Βασίλειος. 606 00:41:32,000 --> 00:41:37,000 Είναι αντικείμενο κώδικα-εννοώ ο πηγαίος κώδικας είναι ό, τι βάζετε στο κλαγγή, 607 00:41:37,000 --> 00:41:42,000 και αντικειμενικού κώδικα είναι ό, τι κλαγγή βάζει έξω, έτσι ώστε ο υπολογιστής σας μπορεί να διαβάσει το πρόγραμμα. 608 00:41:42,000 --> 00:41:44,000 Ακριβώς. 609 00:41:44,000 --> 00:41:47,000 Ο πηγαίος κώδικας είναι ο κώδικας C που πραγματικά πληκτρολογήστε επάνω. 610 00:41:47,000 --> 00:41:50,000 Κωδικός αντικειμένου είναι ό, τι μπορείτε να πάρετε από κλαγγή. 611 00:41:50,000 --> 00:41:54,000 Είναι η 0s και 1s σε αυτό το δυαδική μορφή. 612 00:41:54,000 --> 00:41:59,000 Στη συνέχεια, αυτό που συμβαίνει είναι όταν έχετε μια δέσμη των αρχείων αντικειμένου, 613 00:41:59,000 --> 00:42:04,000 λένε είστε σύνταξη ενός σχεδίου ή ενός προγράμματος που χρησιμοποιεί πολλαπλά αρχεία πηγαίου κώδικα, 614 00:42:04,000 --> 00:42:09,000 το οποίο με σύμβαση δίνεται η επέκταση αρχείου. γ.. 615 00:42:09,000 --> 00:42:13,000 Γι 'αυτό έχουμε caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Αν είστε γραπτώς Java προγράμματα που τους δίνουν την επέκταση. Java. 617 00:42:18,000 --> 00:42:24,000 Python προγράμματα έχουν την επέκταση. Py συχνά. 618 00:42:24,000 --> 00:42:26,000 >> Μόλις έχετε πολλαπλά αρχεία. Γ, μπορείτε να μεταγλωττίσετε. 619 00:42:26,000 --> 00:42:29,000 Clang φτύσει όλα αυτά σκουπίδια δυαδική. 620 00:42:29,000 --> 00:42:33,000 Τότε γιατί θέλετε μόνο 1 πρόγραμμα 621 00:42:33,000 --> 00:42:37,000 έχετε το συνδετικό κρίκος όλων αυτών των αρχείων μαζί αντικείμενο 622 00:42:37,000 --> 00:42:40,000 σε 1 εκτελέσιμο αρχείο. 623 00:42:40,000 --> 00:42:45,000 Αυτό είναι επίσης τι συμβαίνει όταν χρησιμοποιείτε το CS50 βιβλιοθήκη, για παράδειγμα. 624 00:42:45,000 --> 00:42:50,000 Η βιβλιοθήκη CS50 είναι τόσο ότι. Η αρχείο κεφαλίδας 625 00:42:50,000 --> 00:42:53,000 ότι έχετε διαβάσει, ότι # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 Και τότε είναι επίσης ένα ειδικό αρχείο της βιβλιοθήκης δυαδικό 627 00:42:58,000 --> 00:43:02,000 Αυτός είναι ο συνταχθεί δηλαδή 0s και 1s, 628 00:43:02,000 --> 00:43:08,000 και ότι-l σημαία, οπότε αν πάμε πίσω στο Spaces μας και περιμένουμε πολύ γρήγορα 629 00:43:08,000 --> 00:43:11,000 σε ό, τι συμβαίνει εδώ όταν κοιτάξουμε εντολή κλαγγή μας, 630 00:43:11,000 --> 00:43:15,000 αυτό που έχουμε είναι αυτό το αρχείο είναι η πηγή μας κώδικα εδώ. 631 00:43:15,000 --> 00:43:18,000 Αυτά είναι ένα μάτσο από τις σημαίες μεταγλώττισης. 632 00:43:18,000 --> 00:43:22,000 Και στη συνέχεια, στο τέλος, αυτά-l σημαίες σε σύνδεσμο 633 00:43:22,000 --> 00:43:30,000 οι πραγματικές δυαδικά αρχεία για αυτές τις 2 βιβλιοθήκες, η CS50 βιβλιοθήκη και στη συνέχεια η βιβλιοθήκη μαθηματικά. 634 00:43:30,000 --> 00:43:35,000 >> Η κατανόηση κάθε τύπο αρχείων σκοπό » 635 00:43:35,000 --> 00:43:38,000 στη διαδικασία κατάρτισης είναι κάτι που θα θελήσετε να είναι σε θέση να 636 00:43:38,000 --> 00:43:43,000 δώσει τουλάχιστον ένα υψηλό επίπεδο επισκόπησης της. 637 00:43:43,000 --> 00:43:46,000 Ο πηγαίος κώδικας μπαίνει Αντικείμενο κωδικός βγαίνει. 638 00:43:46,000 --> 00:43:53,000 Αρχεία κώδικα αντικειμένου συνδέουν μεταξύ τους, και θα έχετε ένα όμορφο, εκτελέσιμο αρχείο. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Αυτό είναι, επίσης, όπου μπορείτε να πάρετε τα σφάλματα σε πολλαπλά σημεία 641 00:43:58,000 --> 00:44:00,000 στη διαδικασία κατάρτισης. 642 00:44:00,000 --> 00:44:04,000 Αυτό είναι όπου, για παράδειγμα, αν πάρετε αυτό που συνδέει τη σημαία, 643 00:44:04,000 --> 00:44:10,000 CS50 η σημαία, και μπορείτε να το παραλείψετε σε χώρους ή όταν τρέχετε τον κωδικό σας, 644 00:44:10,000 --> 00:44:13,000 αυτό είναι όπου θα πάρετε ένα λάθος στη φάση σύνδεσης, 645 00:44:13,000 --> 00:44:18,000 και ο σύνδεσμος θα πει, «Hey, εσείς ονομάζεται GetString λειτουργία 646 00:44:18,000 --> 00:44:20,000 που είναι στη βιβλιοθήκη CS50. " 647 00:44:20,000 --> 00:44:25,000 "Μου είπε ότι ήταν στη βιβλιοθήκη CS50, και δεν μπορώ να βρω τον κωδικό για αυτό." 648 00:44:25,000 --> 00:44:28,000 Αυτό είναι όπου μπορείτε να το συνδέσετε σε, και ότι είναι ξεχωριστή 649 00:44:28,000 --> 00:44:33,000 από ένα σφάλμα μεταγλωττιστή επειδή ο compiler ψάχνει στο συντακτικό και τέτοιου είδους πράγματα. 650 00:44:33,000 --> 00:44:38,000 Είναι καλό να γνωρίζουμε τι συμβαίνει όταν. 651 00:44:38,000 --> 00:44:42,000 >> Άλλα πράγματα που γνωρίζουν. 652 00:44:42,000 --> 00:44:49,000 Θα έλεγα σίγουρα θέλετε να ρίξετε μια ματιά στη σύντομη για typecasting γίνει από την Ιορδανία 653 00:44:49,000 --> 00:44:55,000 να καταλάβουμε τι είναι ints κάτω από την κουκούλα, 654 00:44:55,000 --> 00:44:58,000 ποιο χαρακτήρες είναι κάτω από την κουκούλα. 655 00:44:58,000 --> 00:45:02,000 Όταν μιλάμε για ASCII και να δούμε πραγματικά στο τραπέζι ASCII, 656 00:45:02,000 --> 00:45:07,000 τι που κάνει μας δίνει μια ματιά κάτω από την κουκούλα 657 00:45:07,000 --> 00:45:13,000 στο τρόπο με τον οποίο ο υπολογιστής αντιπροσωπεύει πραγματικά κεφάλαια Α και το ψηφίο 7 658 00:45:13,000 --> 00:45:17,000 και ένα κόμμα και ένα ερωτηματικό. 659 00:45:17,000 --> 00:45:20,000 Ο υπολογιστής έχει επίσης ειδικούς τρόπους να εκπροσωπεί 660 00:45:20,000 --> 00:45:23,000 ο αριθμός 7 ως ακέραιος. 661 00:45:23,000 --> 00:45:27,000 Έχει ένα ιδιαίτερο τρόπο να αντιπροσωπεύουν τον αριθμό 7 ως αριθμό κινητής υποδιαστολής, 662 00:45:27,000 --> 00:45:29,000 και αυτά είναι πολύ διαφορετικά. 663 00:45:29,000 --> 00:45:32,000 Typecasting είναι πώς να σας πω τον υπολογιστή "Γεια σου, θέλω να μετατρέψετε 664 00:45:32,000 --> 00:45:37,000 από τη μια αναπαράσταση σε άλλη παράσταση. " 665 00:45:37,000 --> 00:45:40,000 Γιατί δεν ρίχνουμε μια ματιά σε αυτό. 666 00:45:40,000 --> 00:45:44,000 >> Θα ήθελα, επίσης, να λάβει μια ματιά στην μικρή σε βιβλιοθήκες και βραχυπρόθεσμα για μεταγλωττιστές. 667 00:45:44,000 --> 00:45:47,000 Εκείνοι που μιλούν για τη διαδικασία σύνταξης, 668 00:45:47,000 --> 00:45:53,000 τι είναι μια βιβλιοθήκη, και πάει πέρα ​​από μερικές από αυτές τις ερωτήσεις που μπορεί να πάρει ζητηθεί. 669 00:45:53,000 --> 00:45:55,000 Ερωτήσεις σχετικά εβδομάδα 1 υλικό; 670 00:45:55,000 --> 00:46:03,000 Υπάρχουν θέματα που εδώ φαίνεται δύσκολο θα θέλατε να καλύψει εκεί; 671 00:46:03,000 --> 00:46:07,000 Προσπαθώ να φυσήξει μέσα από τα περισσότερα από αυτά τα θέματα νωρίτερα, έτσι ώστε να μπορούμε να φτάσουμε στην 672 00:46:07,000 --> 00:46:13,000 δείκτες και να κάνουμε λίγο αναδρομή. 673 00:46:13,000 --> 00:46:15,000 Σκέψεις; 674 00:46:15,000 --> 00:46:19,000 Οτιδήποτε για να καλύψει; 675 00:46:19,000 --> 00:46:21,000 Ώρα για κάποια σοκολάτα ίσως; 676 00:46:21,000 --> 00:46:23,000 Εσείς εργάζονται μέσα από αυτό. 677 00:46:23,000 --> 00:46:26,000 Πάω να κρατήσει πίνοντας τον καφέ μου. 678 00:46:26,000 --> 00:46:31,000 Εβδομάδα 2. 679 00:46:31,000 --> 00:46:34,000 Καλή κλήση, καλή κλήση. 680 00:46:34,000 --> 00:46:38,000 Στην Εβδομάδα 2 μιλήσαμε λίγο περισσότερα για τις λειτουργίες. 681 00:46:38,000 --> 00:46:43,000 >> Στις πρώτες σειρές πρόβλημα που δεν γράφουν πραγματικά οποιεσδήποτε λειτουργίες σε όλα 682 00:46:43,000 --> 00:46:45,000 άλλα από τα οποία λειτουργούν; 683 00:46:45,000 --> 00:46:47,000 [Φοιτητικό] Κύριο. >> Κύριο, ακριβώς. 684 00:46:47,000 --> 00:46:51,000 Και έτσι έχουμε δει τα διαφορετικά κοστούμια που φοράει κύριος. 685 00:46:51,000 --> 00:46:54,000 Υπάρχει η μία στην οποία δεν παίρνει ορίσματα, 686 00:46:54,000 --> 00:46:58,000 και λέμε απλά κενό ανάμεσα στις παρενθέσεις, 687 00:46:58,000 --> 00:47:01,000 και στη συνέχεια, υπάρχει η άλλη, όπου θέλουμε να λάβουν τα επιχειρήματα της γραμμής εντολών, 688 00:47:01,000 --> 00:47:08,000 και όπως είδαμε, αυτό είναι όπου έχετε int argc και argv array εγχόρδων 689 00:47:08,000 --> 00:47:13,000 ή τώρα που έχουμε εκτεθεί στην πραγματικότητα σειρά να είναι ο char * ότι είναι 690 00:47:13,000 --> 00:47:20,000 θα πάμε για να αρχίσετε να γράφετε ως char * argv και στη συνέχεια παρένθεση. 691 00:47:20,000 --> 00:47:22,000 Σε Σετ Πρόβλημα 3, εσείς είδε ένα σωρό λειτουργίες, 692 00:47:22,000 --> 00:47:27,000 και θα εφαρμόσει μια δέσμη των λειτουργιών, ισοπαλία, κοιτάζω προς τα πάνω, αγωνίζομαι. 693 00:47:27,000 --> 00:47:31,000 Τα πρωτότυπα ήταν όλα γραμμένα εκεί για σας. 694 00:47:31,000 --> 00:47:33,000 >> Αυτό που ήθελα να μιλήσω για εδώ με λειτουργίες πολύ γρήγορα 695 00:47:33,000 --> 00:47:38,000 είναι ότι υπάρχουν 3 τμήματα για τους κάθε φορά που θα γράψει μια λειτουργία. 696 00:47:38,000 --> 00:47:43,000 Θα πρέπει να καθορίσετε τον τύπο επιστροφής της συνάρτησης. 697 00:47:43,000 --> 00:47:46,000 Θα πρέπει να ορίσετε ένα όνομα για τη λειτουργία, και τότε θα πρέπει να καθορίσετε 698 00:47:46,000 --> 00:47:51,000 ο κατάλογος των argument ή η λίστα παραμέτρων. 699 00:47:51,000 --> 00:47:57,000 Για παράδειγμα, εάν επρόκειτο να γράψει μια λειτουργία για να συνοψίσω μια δέσμη των ακεραίων 700 00:47:57,000 --> 00:48:03,000 και στη συνέχεια να επιστρέψει σε μένα το ποσό αυτό που θα ήταν τύπου επιστροφή μου 701 00:48:03,000 --> 00:48:06,000 αν ήθελα να συνοψίσω ακέραιοι και στη συνέχεια επιστρέφει το ποσό; 702 00:48:06,000 --> 00:48:12,000 Τότε το όνομα της συνάρτησης. 703 00:48:12,000 --> 00:48:27,000 Αν πάω μπροστά και να γράφουν σε πράσινο, αυτό το μέρος είναι ο τύπος επιστροφής. 704 00:48:27,000 --> 00:48:34,000 Αυτό το μέρος είναι το όνομα. 705 00:48:34,000 --> 00:48:40,000 Και στη συνέχεια, στο εντός παρενθέσεων 706 00:48:40,000 --> 00:48:46,000 Εκεί δίνω τα επιχειρήματα, 707 00:48:46,000 --> 00:48:56,000 συχνά συντομογραφία args, μερικές φορές ονομάζεται params για τις παραμέτρους. 708 00:48:56,000 --> 00:49:00,000 Και αν έχετε ένα, μπορείτε να καθορίσετε μόνο το ένα. 709 00:49:00,000 --> 00:49:06,000 Αν έχετε πολλαπλές σας ξεχωριστά το καθένα με ένα κόμμα. 710 00:49:06,000 --> 00:49:13,000 Και για κάθε επιχείρημα δίνετε 2 πράγματα που είναι-Kevin; 711 00:49:13,000 --> 00:49:18,000 [Kevin] Θα πρέπει να δώσουμε τον τύπο και στη συνέχεια το όνομα. 712 00:49:18,000 --> 00:49:21,000 Και τότε το όνομα, και το όνομα είναι το όνομα που πρόκειται να χρησιμοποιήσετε 713 00:49:21,000 --> 00:49:25,000 να αναφερθώ σε αυτό το επιχείρημα στο πλαίσιο της λειτουργίας άθροισμα, 714 00:49:25,000 --> 00:49:27,000 μέσα στη συνάρτηση που είστε σήμερα γραπτώς. 715 00:49:27,000 --> 00:49:32,000 >> Δεν χρειάζεται να-για παράδειγμα, αν είμαι πρόκειται να συνοψίσω, 716 00:49:32,000 --> 00:49:41,000 ας πούμε, μια σειρά από ακέραιους αριθμούς-we'll do int array, 717 00:49:41,000 --> 00:49:46,000 και εγώ θα δώσω στον εαυτό μου μερικές αγκύλες εκεί- 718 00:49:46,000 --> 00:49:51,000 στη συνέχεια, όταν θα περάσει μια σειρά για τη λειτουργία άθροισμα 719 00:49:51,000 --> 00:49:55,000 I να περάσει στην πρώτη θέση της λίστας επιχείρημα. 720 00:49:55,000 --> 00:49:59,000 Αλλά η σειρά που έχω περάσει στο δεν πρέπει να έχουν το όνομα σύλλ. 721 00:49:59,000 --> 00:50:07,000 Arr πρόκειται να είναι το πώς θα αναφέρονται σε αυτό το επιχείρημα μέσα στο σώμα της συνάρτησης. 722 00:50:07,000 --> 00:50:10,000 Το άλλο πράγμα που πρέπει να λάβουμε υπόψη, 723 00:50:10,000 --> 00:50:14,000 και αυτό είναι ελαφρώς διαφορετική από τις λειτουργίες, αλλά νομίζω ότι είναι ένα σημαντικό σημείο, 724 00:50:14,000 --> 00:50:20,000 είναι ότι σε C, όταν γράφω μια λειτουργία όπως αυτό 725 00:50:20,000 --> 00:50:29,000 πώς μπορώ να ξέρω πόσα στοιχεία είναι σε αυτή την σειρά; 726 00:50:29,000 --> 00:50:31,000 Αυτό είναι κάπως από μια ερώτηση παγίδα. 727 00:50:31,000 --> 00:50:35,000 Μιλήσαμε για αυτό λίγο στο τμήμα της περασμένης εβδομάδας. 728 00:50:35,000 --> 00:50:40,000 Πώς μπορώ να ξέρω τον αριθμό των στοιχείων μέσα σε ένα πίνακα σε C; 729 00:50:40,000 --> 00:50:44,000 Είναι ένας τρόπος υπάρχει; 730 00:50:44,000 --> 00:50:49,000 >> Αποδεικνύεται ότι δεν υπάρχει τρόπος να γνωρίζουμε. 731 00:50:49,000 --> 00:50:52,000 Θα πρέπει να το δώσετε σε χωριστά. 732 00:50:52,000 --> 00:50:55,000 Υπάρχει ένα τέχνασμα που μπορείτε να κάνετε 733 00:50:55,000 --> 00:51:00,000 αν είστε στην ίδια λειτουργία στην οποία ο πίνακας έχει δηλωθεί, 734 00:51:00,000 --> 00:51:04,000 και εργάζεστε με μια σειρά στοίβα. 735 00:51:04,000 --> 00:51:06,000 Αλλά αυτό λειτουργεί μόνο αν είστε στην ίδια λειτουργία. 736 00:51:06,000 --> 00:51:09,000 Μόλις περάσετε μια σειρά σε μια άλλη λειτουργία ή εάν έχετε δηλώσει μια σειρά 737 00:51:09,000 --> 00:51:12,000 και να βάλετε ότι η σειρά στο σωρό, που έχετε χρησιμοποιήσει malloc 738 00:51:12,000 --> 00:51:15,000  και τέτοιου είδους πράγματα, τότε όλα τα στοιχήματα είναι off. 739 00:51:15,000 --> 00:51:18,000 Στη συνέχεια, μπορείτε πραγματικά να περάσει γύρω από 740 00:51:18,000 --> 00:51:21,000 ένα ειδικό επιχείρημα ή άλλη παράμετρος 741 00:51:21,000 --> 00:51:23,000 να σας πω πόσο μεγάλη είναι η σειρά είναι. 742 00:51:23,000 --> 00:51:28,000 Στην περίπτωση αυτή, θα ήθελα να θέλετε να χρησιμοποιήσετε ένα κόμμα-Συγγνώμη, αυτό συμβαίνει από την οθόνη εδώ- 743 00:51:28,000 --> 00:51:32,000 και θα ήθελα να περάσει σε ένα άλλο επιχείρημα 744 00:51:32,000 --> 00:51:40,000  και να το ονομάσουμε int len ​​για το μήκος. 745 00:51:40,000 --> 00:51:44,000 >> Ένα πράγμα που θα μπορούσε να καταλήξει στο κουίζ 746 00:51:44,000 --> 00:51:49,000 σας ζητούμε να γράψει ή να εφαρμόσουν μια συγκεκριμένη λειτουργία που ονομάζεται κάτι. 747 00:51:49,000 --> 00:51:54,000 Αν δεν σας δίνουν το πρωτότυπο, έτσι ώστε όλο αυτό το πράγμα εδώ, 748 00:51:54,000 --> 00:51:58,000 όλο αυτό το χάος που ονομάζεται τη δήλωση λειτουργία ή το πρωτότυπο της συνάρτησης, 749 00:51:58,000 --> 00:52:01,000 αυτό είναι ένα από τα πρώτα πράγματα που θα θέλετε να καρφώσετε κάτω αν δεν είναι δεδομένη 750 00:52:01,000 --> 00:52:03,000 για να σας αμέσως στο κουίζ. 751 00:52:03,000 --> 00:52:06,000 Το άλλο τέχνασμα που έχω μάθει είναι ότι 752 00:52:06,000 --> 00:52:11,000 να πούμε ότι σας δίνουν ένα πρωτότυπο για μια λειτουργία, και λέμε, "Γεια σου, έχεις να το γράψω." 753 00:52:11,000 --> 00:52:16,000 Μέσα στα άγκιστρα που έχετε για το κουίζ 754 00:52:16,000 --> 00:52:20,000 αν παρατηρήσετε ότι υπάρχει ένα είδος επιστροφής και θα παρατηρήσετε ότι ο τύπος επιστροφής 755 00:52:20,000 --> 00:52:25,000 είναι κάτι άλλο από κενό, πράγμα που σημαίνει ότι η λειτουργία δεν επιστρέφει τίποτα, 756 00:52:25,000 --> 00:52:28,000 τότε ένα πράγμα που σίγουρα θέλετε να κάνετε είναι να γράψετε 757 00:52:28,000 --> 00:52:33,000 κάποιο είδος της δήλωσης επιστροφής στο τέλος της λειτουργίας. 758 00:52:33,000 --> 00:52:40,000 Επιστροφή, και σε αυτή την περίπτωση, θα βάλουμε ένα κενό, διότι θέλουμε να συμπληρώσει το κενό. 759 00:52:40,000 --> 00:52:44,000 Αλλά αυτό παίρνει σκέφτεσαι με το σωστό τρόπο για το πώς θα πάω να προσεγγίσουμε αυτό το πρόβλημα; 760 00:52:44,000 --> 00:52:49,000 Και αυτό σας θυμίζει εσείς πρόκειται να πρέπει να επιστρέψει μια τιμή 761 00:52:49,000 --> 00:52:51,000 στον καλούντα της συνάρτησης. 762 00:52:51,000 --> 00:52:54,000 >> Ναι. >> [Φοιτητικό] Μήπως το στυλ εφαρμόζονται όταν γράφουμε κώδικα για το κουίζ; 763 00:52:54,000 --> 00:52:58,000 Όπως εσοχές και τέτοιου είδους πράγματα; >> [Φοιτητικό] Ναι. 764 00:52:58,000 --> 00:53:00,000 Όχι, όχι τόσο πολύ. 765 00:53:00,000 --> 00:53:09,000 Νομίζω ότι πολλοί-αυτό είναι κάτι που θα διευκρινιστεί στο κουίζ για την ημέρα του, 766 00:53:09,000 --> 00:53:15,000 αλλά συνήθως περιλαμβάνει ανησυχία για # και τέτοιου είδους πράγματα, αυτό είναι το είδος του έξω. 767 00:53:15,000 --> 00:53:17,000 [Φοιτητικό] Θέλετε να σχολιάσετε χειρόγραφες τον κωδικό σας; 768 00:53:17,000 --> 00:53:19,000 Θέλετε να σχολιάσετε χειρόγραφες τον κωδικό σας; 769 00:53:19,000 --> 00:53:24,000 Σχολιάζοντας είναι πάντα καλό, αν είστε ανησυχούν για μερική πίστωση 770 00:53:24,000 --> 00:53:29,000 ή θέλετε να επικοινωνήσετε πρόθεσή σας να το γκρέιντερ. 771 00:53:29,000 --> 00:53:33,000 Αλλά, και πάλι, θα διευκρινιστεί στο κουίζ ίδιο και την ημέρα κουίζ, 772 00:53:33,000 --> 00:53:39,000 αλλά δεν πιστεύω ότι θα πρέπει να γράψουν ένα σχόλιο, όχι. 773 00:53:39,000 --> 00:53:42,000 Συνήθως όχι, αλλά είναι σίγουρα το είδος του πράγματος, όπου 774 00:53:42,000 --> 00:53:45,000 μπορείτε να επικοινωνείτε πρόθεσή σας, όπως "Γεια σου, αυτό είναι που Πάω με αυτό." 775 00:53:45,000 --> 00:53:49,000 Και μερικές φορές που μπορεί να βοηθήσει με μερική πίστωση. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Βασίλειος. 778 00:53:53,000 --> 00:53:56,000 [Βασίλης] Ποια είναι η διαφορά μεταξύ δήλωση, ας πούμε, int lang 779 00:53:56,000 --> 00:54:03,000 στα επιχειρήματα ή τις παραμέτρους σε σχέση με την οποία μια μεταβλητή μέσα στη συνάρτηση; 780 00:54:03,000 --> 00:54:05,000 Πω πω, καφέ πήγε στην τραχεία. 781 00:54:05,000 --> 00:54:07,000 [Βασίλης] Όπως οποίων πράγματα που θέλουμε να θέσει σε επιχειρήματα. 782 00:54:07,000 --> 00:54:09,000 Ναι, αυτό είναι ένα μεγάλο ερώτημα. 783 00:54:09,000 --> 00:54:11,000 Πώς επιλέγετε ποια πράγματα θέλετε να βάλετε τα επιχειρήματα 784 00:54:11,000 --> 00:54:17,000 σε σχέση με ό, τι πράγματα που πρέπει να κάνετε μέσα από τη λειτουργία; 785 00:54:17,000 --> 00:54:24,000 Σε αυτή την περίπτωση θα περιλαμβάνονται τα δύο αυτά επιχειρήματα ως 786 00:54:24,000 --> 00:54:29,000 επειδή είναι κάτι που όποιος πρόκειται να χρησιμοποιήσετε τη λειτουργία άθροισμα 787 00:54:29,000 --> 00:54:32,000 πρέπει να καθορίσετε αυτά τα πράγματα. 788 00:54:32,000 --> 00:54:35,000 >> Η λειτουργία άθροισμα, όπως μιλήσαμε, δεν έχει καμία δυνατότητα να γνωρίζει 789 00:54:35,000 --> 00:54:40,000 πόσο μεγάλη είναι η σειρά παίρνει από του καλούντος ή όποιος χρησιμοποιεί τη λειτουργία άθροισμα. 790 00:54:40,000 --> 00:54:44,000 Δεν έχει καμία δυνατότητα να γνωρίζει πόσο μεγάλη είναι η σειρά είναι. 791 00:54:44,000 --> 00:54:48,000 Ο λόγος που περνάμε σε αυτό το μήκος εδώ ως επιχείρημα 792 00:54:48,000 --> 00:54:51,000 Είναι επειδή αυτό είναι κάτι που λέμε ουσιαστικά τον καλούντα της λειτουργίας, 793 00:54:51,000 --> 00:54:55,000 όποιος πρόκειται να χρησιμοποιήσετε τη λειτουργία άθροισμα, "Hey, όχι μόνο δεν θα πρέπει να μας δώσει μια σειρά 794 00:54:55,000 --> 00:54:59,000 από ints, θα πρέπει επίσης να μας πει πόσο μεγάλη είναι η σειρά που έχετε δώσει είναι. " 795 00:54:59,000 --> 00:55:03,000 [Βασίλης] Αυτοί οι δύο θα είναι τα επιχειρήματα της γραμμής εντολών; 796 00:55:03,000 --> 00:55:06,000 Όχι, αυτά είναι πραγματικά επιχειρήματα που θα περάσει στη λειτουργία. 797 00:55:06,000 --> 00:55:10,000 >> Επιτρέψτε μου να κάνω μια νέα σελίδα εδώ. 798 00:55:10,000 --> 00:55:13,000 [Βασίλης] Όπως το όνομα θα περνούσε- 799 00:55:13,000 --> 00:55:24,000 [Nate H] Αν έχω int main (void), 800 00:55:24,000 --> 00:55:27,000 και Πάω να θέσει σε 0 την επιστροφή μου εδώ κάτω στο κάτω μέρος, 801 00:55:27,000 --> 00:55:31,000 και να πω ότι θέλετε να καλέσετε τη λειτουργία άθροισμα. 802 00:55:31,000 --> 00:55:42,000 Θέλω να πω int x = άθροισμα ()? 803 00:55:42,000 --> 00:55:46,000 Για να χρησιμοποιήσετε τη λειτουργία άθροισμα πρέπει να περάσει τόσο τη σειρά που θέλω να συνοψίσω 804 00:55:46,000 --> 00:55:51,000 και το μήκος της συστοιχίας, έτσι αυτό είναι όπου 805 00:55:51,000 --> 00:55:54,000 υποθέτοντας είχα μια σειρά από ints, 806 00:55:54,000 --> 00:56:12,000 πω είχα int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 το είδος της χρήσης που hacked μέχρι τη σύνταξη εκεί, 808 00:56:16,000 --> 00:56:21,000 τότε τι θα έκανα είναι σε ποσό θα ήθελα να περάσει σε 809 00:56:21,000 --> 00:56:27,000 τόσο numbaz και ο αριθμός 3 810 00:56:27,000 --> 00:56:30,000 να πει τη λειτουργία άθροισμα "Εντάξει, εδώ είναι η σειρά που θέλω να συνοψίσω." 811 00:56:30,000 --> 00:56:34,000 "Εδώ είναι το μέγεθός του." 812 00:56:34,000 --> 00:56:39,000 Μήπως αυτό έχει νόημα; Μήπως αυτό απαντήσω στην ερώτησή σας; 813 00:56:39,000 --> 00:56:42,000 >> Με πολλούς τρόπους θα κάνει παράλληλα ό, τι κάνουμε με κύρια 814 00:56:42,000 --> 00:56:44,000 όταν έχουμε τα επιχειρήματα της γραμμής εντολών. 815 00:56:44,000 --> 00:56:47,000 Ένα πρόγραμμα όπως το Caesar cipher, για παράδειγμα, που απαιτείται 816 00:56:47,000 --> 00:56:53,000 τα επιχειρήματα της γραμμής εντολών δεν θα είναι σε θέση να κάνει τίποτα. 817 00:56:53,000 --> 00:56:57,000 Δεν θα ξέρετε πώς να κρυπτογραφήσετε αν δεν πει το τι κλειδί για να χρησιμοποιήσουν 818 00:56:57,000 --> 00:57:03,000 ή αν δεν το πει τι σειρά θα ήθελε να κρυπτογραφήσετε. 819 00:57:03,000 --> 00:57:08,000 Προτροπή για είσοδο, αυτό είναι όπου έχουμε 2 διαφορετικούς μηχανισμούς 820 00:57:08,000 --> 00:57:14,000 για τη λήψη εισόδου στην από το χρήστη, για τη λήψη πληροφοριών από το χρήστη. 821 00:57:14,000 --> 00:57:19,000 Για Πρόβλημα Set 1 είδαμε αυτό GetInt, GetString, GetFloat τρόπο 822 00:57:19,000 --> 00:57:26,000 την παρακίνηση για την είσοδο, και αυτό είναι που ονομάζεται με το πρότυπο ρεύμα εισόδου. 823 00:57:26,000 --> 00:57:28,000 Είναι ελαφρώς διαφορετική. 824 00:57:28,000 --> 00:57:31,000 Είναι κάτι που μπορείτε να κάνετε σε ένα χρόνο, σε αντίθεση με 825 00:57:31,000 --> 00:57:35,000 όταν επικαλούνται το πρόγραμμα, όταν ξεκινάτε το πρόγραμμα που εκτελείται. 826 00:57:35,000 --> 00:57:41,000 Τα επιχειρήματα της γραμμής εντολών όλα καθορίζονται όταν ξεκινάτε τη λειτουργία του προγράμματος. 827 00:57:41,000 --> 00:57:47,000 Έχουμε την ανάμειξη των δύο αυτών. 828 00:57:47,000 --> 00:57:52,000 Όταν χρησιμοποιούμε επιχειρήματα σε μια λειτουργία, είναι σαν τα επιχειρήματα της γραμμής εντολών στην κύρια. 829 00:57:52,000 --> 00:57:56,000 Είναι όταν επικαλούνται τη λειτουργία θα πρέπει να το πείτε 830 00:57:56,000 --> 00:58:05,000 ό, τι ακριβώς χρειάζεται για να εκτελέσει τα καθήκοντά του. 831 00:58:05,000 --> 00:58:08,000 Ένα άλλο καλό πράγμα για να εξετάσει-και εγώ θα σας αφήσει να το δει κανείς στον ελεύθερο χρόνο σας, 832 00:58:08,000 --> 00:58:11,000 και καλύφθηκε στο κουίζ-ήταν αυτή η έννοια του πεδίου εφαρμογής 833 00:58:11,000 --> 00:58:15,000 και σε σχέση με τις τοπικές μεταβλητές καθολικές μεταβλητές. 834 00:58:15,000 --> 00:58:18,000 Κάντε δώσουν προσοχή σε αυτό. 835 00:58:18,000 --> 00:58:23,000 >> Τώρα που παίρνουμε σε αυτό άλλα πράγματα, 836 00:58:23,000 --> 00:58:27,000 στην Εβδομάδα 3 αρχίσαμε να μιλάμε για την αναζήτηση και τη διαλογή. 837 00:58:27,000 --> 00:58:32,000 Αναζήτηση και διαλογή, τουλάχιστον σε CS50, 838 00:58:32,000 --> 00:58:39,000 είναι πάρα πολύ μια εισαγωγή σε μερικά από τα πιο θεωρητικά τμήματα της επιστήμης των υπολογιστών. 839 00:58:39,000 --> 00:58:42,000 Το πρόβλημα της αναζήτησης, το πρόβλημα της διαλογής 840 00:58:42,000 --> 00:58:46,000 είναι μεγάλα, κανονικά προβλήματα. 841 00:58:46,000 --> 00:58:52,000 Πώς μπορείτε να βρείτε ένα συγκεκριμένο αριθμό σε μια σειρά από τα δισεκατομμύρια των ακεραίων; 842 00:58:52,000 --> 00:58:55,000 Πώς μπορείτε να βρείτε ένα συγκεκριμένο όνομα μέσα σε ένα τηλεφωνικό 843 00:58:55,000 --> 00:58:59,000 που είναι αποθηκευμένη στον υπολογιστή σας; 844 00:58:59,000 --> 00:59:04,000 Και έτσι έχουμε εισαγάγει αυτή την έννοια της ασυμπτωτικής ώρες λειτουργίας 845 00:59:04,000 --> 00:59:11,000 να ποσοτικοποιηθούν πραγματικά πόσο καιρό, πόσο σκληρά είναι αυτά τα προβλήματα, 846 00:59:11,000 --> 00:59:14,000 πόσο καιρό θα πάρει για να λύσει. 847 00:59:14,000 --> 00:59:20,000 Σε πιστεύω, κουίζ του 2011 υπάρχει ένα πρόβλημα που πιστεύω ότι αξίζει 848 00:59:20,000 --> 00:59:27,000 καλύπτοντας πολύ γρήγορα, το οποίο είναι αυτό το ένα, το πρόβλημα 12. 849 00:59:27,000 --> 00:59:32,000 O όχι, είναι Ωμέγα. 850 00:59:32,000 --> 00:59:41,000 >> Εδώ μιλάμε για τον ταχύτερο δυνατό χρόνο λειτουργίας 851 00:59:41,000 --> 00:59:46,000 για ένα συγκεκριμένο αλγόριθμο και στη συνέχεια ο πιο αργός δυνατό χρόνο εκτέλεσης. 852 00:59:46,000 --> 00:59:52,000 Αυτή η Omega και O είναι πραγματικά ακριβώς συντομεύσεις. 853 00:59:52,000 --> 00:59:55,000 Είναι συμβολισμούς συντομεύσεις για το ρητό 854 00:59:55,000 --> 00:59:59,000 πόσο γρήγορα στην καλύτερη δυνατή περίπτωση θα τρέχει ο αλγόριθμος μας, 855 00:59:59,000 --> 01:00:06,000 και πόσο αργά στη χειρότερη δυνατή περίπτωση θα τρέξει ο αλγόριθμος μας; 856 01:00:06,000 --> 01:00:10,000 Ας κάνουμε ένα ζευγάρι από αυτά, και αυτά καλύπτονται επίσης 857 01:00:10,000 --> 01:00:13,000 σε σύντομο χρονικό για ασυμπτωτική σημειογραφία, που συστήνω ιδιαίτερα. 858 01:00:13,000 --> 01:00:17,000 Τζάκσον έκανε πραγματικά καλή δουλειά. 859 01:00:17,000 --> 01:00:23,000 Με την δυαδική αναζήτηση, μιλάμε για δυαδική αναζήτηση ως ένας αλγόριθμος, 860 01:00:23,000 --> 01:00:28,000 και συνήθως μιλάμε από την άποψη του μεγάλου του Ο. 861 01:00:28,000 --> 01:00:30,000 Ποια είναι η μεγάλη O; 862 01:00:30,000 --> 01:00:34,000 Ποια είναι η πιο αργή δυνατό χρόνο εκτέλεσης της δυαδικής αναζήτησης; 863 01:00:34,000 --> 01:00:36,000 [Φοιτητικό] Ν ²; 864 01:00:36,000 --> 01:00:41,000 Κλείσιμο, υποθέτω παρόμοια με αυτή. 865 01:00:41,000 --> 01:00:43,000 Είναι πολύ πιο γρήγορα από ό, τι αυτό. 866 01:00:43,000 --> 01:00:45,000 [Φοιτητικό] Binary; >> Ναι, δυαδική αναζήτηση. 867 01:00:45,000 --> 01:00:47,000 [Φοιτητικό] Είναι log n. 868 01:00:47,000 --> 01:00:49,000 Σύνδεση n, έτσι τι κάνει log n σημαίνει; 869 01:00:49,000 --> 01:00:51,000 Είναι τα μισά είναι σε κάθε επανάληψη. 870 01:00:51,000 --> 01:00:56,000 Ακριβώς, έτσι και στο πιο αργή πιθανή περίπτωση, 871 01:00:56,000 --> 01:01:00,000 πείτε εάν έχετε ένα ταξινομημένο πίνακα 872 01:01:00,000 --> 01:01:08,000 από ένα εκατομμύριο ακέραιοι και τον αριθμό που ψάχνετε 873 01:01:08,000 --> 01:01:14,000 είναι είτε το πρώτο στοιχείο στην συστοιχία ή πολύ τον τελευταίο στοιχείο στη συστοιχία. 874 01:01:14,000 --> 01:01:18,000 Θυμηθείτε, η δυαδική αλγόριθμος αναζήτησης λειτουργεί με κοιτάζετε το κέντρο στοιχείο, 875 01:01:18,000 --> 01:01:21,000 να δει αν αυτός είναι ο αγώνας που ψάχνετε. 876 01:01:21,000 --> 01:01:23,000 Αν είναι, τότε μεγάλη, που το βρήκε. 877 01:01:23,000 --> 01:01:27,000 >> Στην καλύτερη δυνατή περίπτωση, πόσο γρήγορα τρέχει κάνει δυαδική αναζήτηση; 878 01:01:27,000 --> 01:01:29,000 [Φοιτητές] 1. 879 01:01:29,000 --> 01:01:32,000 1, είναι σταθερό χρόνο, μεγάλο Ο του 1. Ναι. 880 01:01:32,000 --> 01:01:36,000 [Φοιτητικό] Έχω μια ερώτηση. Όταν λέτε συνδεθείτε του n, που σημαίνει ότι σε σχέση με βάση 2, έτσι δεν είναι; 881 01:01:36,000 --> 01:01:40,000 Ναι, έτσι ώστε να είναι το άλλο πράγμα. 882 01:01:40,000 --> 01:01:44,000 Λέμε n log, και υποθέτω ότι όταν ήμουν στο γυμνάσιο 883 01:01:44,000 --> 01:01:48,000 Πάντα υποτίθεται ότι ήταν ημερολόγιο βάσης 10. 884 01:01:48,000 --> 01:01:57,000 Ναι, ναι, έτσι, log 2 βάσης είναι συνήθως αυτό που χρησιμοποιείτε. 885 01:01:57,000 --> 01:02:02,000 Και πάλι, πηγαίνοντας πίσω στο δυαδική αναζήτηση, αν ψάχνετε για είτε 886 01:02:02,000 --> 01:02:05,000 το στοιχείο στο τέλος ή το στοιχείο στην αρχή, 887 01:02:05,000 --> 01:02:08,000 επειδή ξεκινήσετε στη μέση και στη συνέχεια να απορρίψετε 888 01:02:08,000 --> 01:02:13,000 Όποια κι αν οι μισοί δεν πληροί τα κριτήρια που ψάχνετε, 889 01:02:13,000 --> 01:02:15,000 και πηγαίνετε στο επόμενο εξάμηνο και το επόμενο εξάμηνο και το επόμενο εξάμηνο. 890 01:02:15,000 --> 01:02:19,000 Αν ψάχνω για το μεγαλύτερο στοιχείο του πίνακα εκατομμυρίων ακέραιο 891 01:02:19,000 --> 01:02:25,000 Πάω να το μειώσει κατά το ήμισυ το πολύ log του 1 εκατ. φορές 892 01:02:25,000 --> 01:02:28,000 πριν τελικά τη δοκιμή και να δούμε ότι το στοιχείο που ψάχνω 893 01:02:28,000 --> 01:02:33,000 είναι στο μεγαλύτερο ή στο υψηλότερο δείκτη της συστοιχίας, 894 01:02:33,000 --> 01:02:38,000 και ότι θα λάβει ημερολόγιο του n, συνδεθείτε από 1 εκατομμύριο φορές. 895 01:02:38,000 --> 01:02:40,000 >> Bubble sort. 896 01:02:40,000 --> 01:02:43,000 Μήπως εσείς θυμάστε τον αλγόριθμο ταξινόμησης φυσαλίδας; 897 01:02:43,000 --> 01:02:47,000 Kevin, μπορείτε να μου δώσετε μια γρήγορη ανακεφαλαίωση του τι συνέβη στον αλγόριθμο ταξινόμησης φυσαλίδας; 898 01:02:47,000 --> 01:02:50,000 [Kevin] Βασικά ό, τι περνά από τη λίστα. 899 01:02:50,000 --> 01:02:52,000 Εξετάζει τις δύο πρώτες. 900 01:02:52,000 --> 01:02:55,000 Εάν το πρώτο είναι μεγαλύτερο από το δεύτερο αυτό τους ανταλλαγές. 901 01:02:55,000 --> 01:02:58,000 Στη συνέχεια συγκρίνει δεύτερο και το τρίτο, το ίδιο πράγμα, swaps, 902 01:02:58,000 --> 01:03:00,000 τρίτο και το τέταρτο, σε όλη τη διαδρομή προς τα κάτω. 903 01:03:00,000 --> 01:03:03,000 Μεγαλύτερη αριθμοί θα ακολουθήσουν μέχρι το τέλος. 904 01:03:03,000 --> 01:03:07,000 Και μετά, ωστόσο πολλοί βρόχοι τελειώσατε. 905 01:03:07,000 --> 01:03:11,000 Ακριβώς, έτσι ώστε ό, τι είπε ο Kevin είναι ότι θα παρακολουθήσουν μεγαλύτερους αριθμούς 906 01:03:11,000 --> 01:03:15,000 φούσκα μέχρι το τέλος του πίνακα. 907 01:03:15,000 --> 01:03:19,000 Για παράδειγμα, δεν σας πείραζε τα πόδια μας μέσα από αυτό το παράδειγμα, εάν αυτή είναι η σειρά μας; 908 01:03:19,000 --> 01:03:21,000 [Kevin] Θα πάρετε 2 και 3. 909 01:03:21,000 --> 01:03:23,000 3 είναι μεγαλύτερο από 2, έτσι ώστε να τα ανταλλάξουν. 910 01:03:23,000 --> 01:03:29,000 [Nate Η.] Δεξιά, έτσι ώστε να ανταλλάξουν αυτά, και έτσι έχουμε 2, 3, 6, 4, και 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Στη συνέχεια, μπορείτε να συγκρίνετε τις 3 και 6. 912 01:03:31,000 --> 01:03:33,000 3 είναι μικρότερο από 6, έτσι ώστε να τους αφήσει, 913 01:03:33,000 --> 01:03:37,000 και 6 και 4, που θα τους ανταλλάξουν επειδή 4 είναι μικρότερο από 6. 914 01:03:37,000 --> 01:03:42,000 [Nate Η.] Δεξιά, ώστε να πάρω 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] και 9 είναι μεγαλύτερος από 6, ώστε να μπορείτε να φύγετε. 916 01:03:46,000 --> 01:03:48,000 Και θέλετε να επιστρέψετε ξανά μέσα από αυτό. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H] Είμαι γίνει σε αυτό το σημείο; >> [Kevin] Όχι. 918 01:03:50,000 --> 01:03:52,000 Και γιατί δεν είμαι γίνει σε αυτό το σημείο; 919 01:03:52,000 --> 01:03:54,000 Επειδή μοιάζει σειρά μου είναι ταξινομημένο. Ψάχνω σε αυτό. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Πήγαινε μέσα από αυτό ξανά και βεβαιωθείτε ότι δεν υπάρχουν πλέον swaps 921 01:03:57,000 --> 01:04:00,000 για να μπορέσετε να σταματήσει πλήρως. 922 01:04:00,000 --> 01:04:04,000 Ακριβώς, έτσι πρέπει να συνεχίσουμε, μέσω και βεβαιωθείτε ότι δεν υπάρχουν ανταλλαγές 923 01:04:04,000 --> 01:04:06,000 ότι μπορείτε να κάνετε σε αυτό το σημείο. 924 01:04:06,000 --> 01:04:08,000 Ήταν πραγματικά μόνο τυχερός, όπως είπατε και εσείς, ότι καταλήξαμε 925 01:04:08,000 --> 01:04:12,000 μόνο που έχει να κάνει 1 περνούν και είμαστε ταξινομημένο. 926 01:04:12,000 --> 01:04:16,000 Αλλά για να γίνει αυτό στη γενική περίπτωση θα πρέπει πραγματικά να το κάνετε αυτό ξανά και ξανά. 927 01:04:16,000 --> 01:04:20,000 Και στην πραγματικότητα, αυτό ήταν ένα παράδειγμα του καλύτερου δυνατού περίπτωση, 928 01:04:20,000 --> 01:04:24,000 όπως είδαμε στο πρόβλημα. 929 01:04:24,000 --> 01:04:28,000 Είδαμε ότι η καλύτερη δυνατή περίπτωση το n. 930 01:04:28,000 --> 01:04:32,000 Πήγαμε μέσω του πίνακα 1 φορά. 931 01:04:32,000 --> 01:04:35,000 Ποια είναι η χειρότερη δυνατή περίπτωση για αυτόν τον αλγόριθμο; 932 01:04:35,000 --> 01:04:37,000 [Kevin] Ν ². 933 01:04:37,000 --> 01:04:41,000 Και τι που μοιάζουν; Τι θα δείτε μια σειρά, όπως αυτό θα λάβει n ² χρόνο; 934 01:04:41,000 --> 01:04:43,000 [Kevin] [δεν ακούγεται] ταξινομημένο. 935 01:04:43,000 --> 01:04:51,000 Ακριβώς, οπότε αν είχα τον πίνακα 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 πρώτα το 9 θα φούσκα σε όλη τη διαδρομή επάνω. 937 01:04:54,000 --> 01:04:59,000 Μετά από 1 επανάληψη θα είχαμε 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Στη συνέχεια, το 7 θα φούσκα επάνω, 6, 5, 2, 7, 9, και ούτω καθεξής και ούτω καθεξής. 939 01:05:07,000 --> 01:05:13,000 >> Εμείς θα πρέπει να περάσουν από όλη τη σειρά n φορές, 940 01:05:13,000 --> 01:05:16,000 και μπορείτε πραγματικά να πάρετε λίγο πιο ακριβή από ό, τι αυτό 941 01:05:16,000 --> 01:05:23,000 γιατί από τη στιγμή που έχουμε μετακινηθεί το 9 σε όλη τη διαδρομή μέχρι και σε τελευταία πιθανή θέση του 942 01:05:23,000 --> 01:05:26,000 ξέρουμε ότι ποτέ δεν πρέπει να συγκρίνουμε κατά της εν λόγω στοιχείο και πάλι. 943 01:05:26,000 --> 01:05:29,000 Μόλις αρχίζουμε τη διοχέτευση 7 έως 944 01:05:29,000 --> 01:05:35,000 γνωρίζουμε ότι μπορούμε να σταματήσουμε μια φορά το 7 είναι ακριβώς πριν την 9 945 01:05:35,000 --> 01:05:37,000 αφού έχουμε ήδη την σύγκριση 9 έως αυτό. 946 01:05:37,000 --> 01:05:46,000 Εάν το κάνετε αυτό με έξυπνο τρόπο δεν είναι αληθινά, υποθέτω, ότι ένα μεγάλο μέρος του χρόνου. 947 01:05:46,000 --> 01:05:49,000 Δεν πρόκειται να συγκρίνει όλες τις πιθανές [δεν ακούγεται] συνδυασμούς 948 01:05:49,000 --> 01:05:55,000 κάθε φορά που περνάτε από κάθε επανάληψη. 949 01:05:55,000 --> 01:05:59,000 Αλλά και πάλι, όταν μιλάμε για αυτό το άνω όριο λέμε ότι 950 01:05:59,000 --> 01:06:04,000 ψάχνετε σε n ² συγκρίσεις σε όλη τη διαδρομή μέσω. 951 01:06:04,000 --> 01:06:12,000 >> Ας πάμε πίσω, και από τη στιγμή που αρχίζουμε να πάρει λίγο χρόνο για σύντομο 952 01:06:12,000 --> 01:06:15,000 Θα έλεγα ότι σίγουρα θα πρέπει να περάσει μέσα από το υπόλοιπο αυτού του πίνακα, 953 01:06:15,000 --> 01:06:17,000 συμπληρώστε όλα έξω. 954 01:06:17,000 --> 01:06:20,000 Σκεφτείτε παραδείγματα. Σκεφτείτε συγκεκριμένα παραδείγματα. 955 01:06:20,000 --> 01:06:22,000 Αυτό είναι πολύ βολικό και χρήσιμο να κάνουμε. 956 01:06:22,000 --> 01:06:25,000 Τραβήξτε προς τα έξω. 957 01:06:25,000 --> 01:06:28,000 Αυτό είναι το είδος του πίνακα ότι καθώς περνάτε στην επιστήμη των υπολογιστών 958 01:06:28,000 --> 01:06:32,000 θα πρέπει πραγματικά να αρχίσουν να γνωρίζουν αυτά από την καρδιά. 959 01:06:32,000 --> 01:06:34,000 Αυτά είναι τα είδη των ερωτήσεων μπορείτε να έρθετε σε συνεντεύξεις. 960 01:06:34,000 --> 01:06:36,000 Αυτά είναι τα είδη των πραγμάτων που είναι καλό να γνωρίζουμε, 961 01:06:36,000 --> 01:06:41,000 και να σκεφτούμε αυτές τις περιπτώσεις άκρη, πραγματικά αναφέρονται για το πώς να σκεφτούμε 962 01:06:41,000 --> 01:06:45,000 γνωρίζοντας ότι για φούσκα ταξινομήσετε τη χειρότερη δυνατή σειρά 963 01:06:45,000 --> 01:06:52,000 να ταξινομήσετε με αυτό είναι ένα που είναι σε αντίστροφη σειρά. 964 01:06:52,000 --> 01:06:58,000 >> Δείκτες. Ας μιλήσουμε λίγο για δείκτες. 965 01:06:58,000 --> 01:07:03,000 Κατά τα τελευταία λίγα λεπτά που έχουμε εδώ 966 01:07:03,000 --> 01:07:11,000 Ξέρω ότι αυτό είναι κάτι που, μαζί με το αρχείο I / O που είναι σχετικά νέα. 967 01:07:11,000 --> 01:07:19,000 Όταν μιλάμε για δείκτες το λόγο θέλουμε να μιλήσουμε για δείκτες 968 01:07:19,000 --> 01:07:24,000 οφείλεται στο γεγονός ότι, ένα, όταν δουλεύουμε σε C 969 01:07:24,000 --> 01:07:33,000 είμαστε πραγματικά σε αρκετά χαμηλά επίπεδα σε σύγκριση με τις περισσότερες σύγχρονες γλώσσες προγραμματισμού. 970 01:07:33,000 --> 01:07:38,000 Είμαστε πραγματικά σε θέση να χειριστούν τις μεταβλητές στη μνήμη, 971 01:07:38,000 --> 01:07:43,000 καταλάβω πού είναι στην πραγματικότητα βρίσκεται μέσα μας μνήμη RAM. 972 01:07:43,000 --> 01:07:46,000 Μόλις πάει για να παρακολουθήσει μαθήματα του λειτουργικού συστήματος που θα δείτε 973 01:07:46,000 --> 01:07:48,000 ότι αυτό είναι, και πάλι, το είδος της αφαίρεσης. 974 01:07:48,000 --> 01:07:50,000 Αυτό δεν είναι πραγματικά η περίπτωση. 975 01:07:50,000 --> 01:07:52,000 Έχουμε την εικονική μνήμη που κρύβεται αυτές τις λεπτομέρειες από εμάς. 976 01:07:52,000 --> 01:07:58,000 >> Αλλά για τώρα, μπορείτε να υποθέσετε ότι όταν έχετε ένα πρόγραμμα, 977 01:07:58,000 --> 01:08:02,000 για παράδειγμα, όταν αρχίσει να τρέχει το πρόγραμμα του Καίσαρα-σας cipher 978 01:08:02,000 --> 01:08:06,000 Θα επιστρέψετε στο iPad μου πολύ γρήγορα- 979 01:08:06,000 --> 01:08:12,000 ότι από την αρχή κιόλας το πρόγραμμά σας, αν έχετε, ας πούμε, 980 01:08:12,000 --> 01:08:15,000 4 gigabytes μνήμης RAM για το laptop σας, 981 01:08:15,000 --> 01:08:21,000 έχετε να αναιρέσει αυτό το κομμάτι, και θα καλέσουμε το RAM. 982 01:08:21,000 --> 01:08:25,000 Και αρχίζει σε ένα μέρος θα πάμε να καλέσετε 0, 983 01:08:25,000 --> 01:08:30,000 και καταλήγει σε μια θέση που θα καλέσουμε 4 gigabytes. 984 01:08:30,000 --> 01:08:37,000 Πραγματικά δεν μπορώ να γράψω. Ο άνθρωπος, που είναι hacked. 985 01:08:37,000 --> 01:08:40,000 Όταν εκτελεί το πρόγραμμα σας 986 01:08:40,000 --> 01:08:44,000 το λειτουργικό σύστημα χαράζει επάνω RAM, 987 01:08:44,000 --> 01:08:51,000 και προσδιορίζει διαφορετικά τμήματα για διάφορα μέρη του προγράμματος σας για να ζήσει μέσα 988 01:08:51,000 --> 01:08:58,000 Εδώ κάτω, αυτή η περιοχή είναι ένα είδος γη του κανενός. 989 01:08:58,000 --> 01:09:02,000 Όταν ανεβείτε λίγο μακρύτερα εδώ 990 01:09:02,000 --> 01:09:05,000 έχετε πραγματικά τον τόπο όπου 991 01:09:05,000 --> 01:09:09,000 ο κώδικας για τη ζωή σας πρόγραμμα. 992 01:09:09,000 --> 01:09:13,000 Η πραγματική δυαδικό κώδικα, εκτελέσιμο αρχείο που πραγματικά παίρνει φορτωθεί στη μνήμη 993 01:09:13,000 --> 01:09:17,000 όταν εκτελείτε ένα πρόγραμμα, και ζει στο τμήμα κώδικα. 994 01:09:17,000 --> 01:09:22,000 Και καθώς το πρόγραμμά σας εκτελεί ο επεξεργαστής φαίνεται σε αυτό το τμήμα κώδικα 995 01:09:22,000 --> 01:09:24,000 για να καταλάβουμε ποια είναι η επόμενη εντολή; 996 01:09:24,000 --> 01:09:27,000 Ποια είναι η επόμενη γραμμή του κώδικα που πρέπει να εκτελέσει; 997 01:09:27,000 --> 01:09:31,000 >> Υπάρχει επίσης ένα τμήμα των δεδομένων, και αυτό είναι όπου οι σταθερές συμβολοσειράς 998 01:09:31,000 --> 01:09:34,000 πάρει αποθηκεύονται ότι έχετε χρησιμοποιήσει. 999 01:09:34,000 --> 01:09:42,000 Και τότε μέχρι μακρύτερα υπάρχει αυτό το μέρος που ονομάζεται το σωρό. 1000 01:09:42,000 --> 01:09:46,000 Έχουμε πρόσβαση σε μνήμη εκεί με τη χρήση malloc, 1001 01:09:46,000 --> 01:09:49,000 και στη συνέχεια προς την κορυφή του προγράμματός σας 1002 01:09:49,000 --> 01:09:52,000 υπάρχει η στοίβα, 1003 01:09:52,000 --> 01:09:57,000 και εκεί είναι που έχουμε το παιχνίδι για περισσότερα από την αρχή. 1004 01:09:57,000 --> 01:09:59,000 Αυτό δεν είναι σε κλίμακα ή οτιδήποτε. 1005 01:09:59,000 --> 01:10:03,000 Πολλά από αυτά είναι πολύ εξαρτάται από μηχάνημα, 1006 01:10:03,000 --> 01:10:10,000 εξαρτάται από το λειτουργικό σύστημα, αλλά αυτό είναι το πώς τα πράγματα σχετικά κατατμημένη πάρει επάνω. 1007 01:10:10,000 --> 01:10:17,000 Όταν εκτελείτε ένα πρόγραμμα και δηλώνετε μια μεταβλητή που ονομάζεται x- 1008 01:10:17,000 --> 01:10:27,000 Πάω να συντάξει ένα άλλο κουτί κάτω, και αυτό πρόκειται να είναι μνήμη RAM, καθώς και. 1009 01:10:27,000 --> 01:10:29,000 Και εγώ είμαι πρόκειται να δούμε. 1010 01:10:29,000 --> 01:10:34,000 Θα επιστήσω την ακανόνιστες γραμμές να δείχνουν αυτό είναι μόνο ένα μικρό τμήμα της μνήμης RAM 1011 01:10:34,000 --> 01:10:38,000 και δεν είναι όλοι σαν εφιστούμε στην κορυφή. 1012 01:10:38,000 --> 01:10:43,000 >> Αν Δηλώνω μια ακέραια μεταβλητή που ονομάζεται x, 1013 01:10:43,000 --> 01:10:49,000 τότε αυτό που πραγματικά να πάρει είναι μια χαρτογράφηση 1014 01:10:49,000 --> 01:10:54,000 το οποίο είναι αποθηκευμένο στον πίνακα συμβόλων του προγράμματος μου 1015 01:10:54,000 --> 01:11:00,000 που συνδέει το όνομα x σε αυτήν την περιοχή της μνήμης που έχω σχεδιάσει 1016 01:11:00,000 --> 01:11:03,000 δεξιά εδώ μεταξύ των κατακόρυφων ράβδων. 1017 01:11:03,000 --> 01:11:08,000 Αν έχω μια γραμμή κώδικα στο πρόγραμμά μου, που λέει ότι x = 7 1018 01:11:08,000 --> 01:11:15,000 ο επεξεργαστής γνωρίζει "Ω, εντάξει, ξέρω ότι η ζωή x σε αυτή τη θέση στη μνήμη." 1019 01:11:15,000 --> 01:11:25,000 "Πάω να προχωρήσει και να γράψει ένα 7 εκεί." 1020 01:11:25,000 --> 01:11:28,000 Πώς ξέρεις τι είναι αυτό τοποθεσία στη μνήμη; 1021 01:11:28,000 --> 01:11:30,000 Λοιπόν, αυτό είναι όλα γίνονται κατά τη μεταγλώττιση. 1022 01:11:30,000 --> 01:11:34,000 Ο μεταγλωττιστής φροντίζει για την κατανομή, όπου κάθε μία από τις μεταβλητές που πρόκειται να πάει 1023 01:11:34,000 --> 01:11:40,000 και δημιουργώντας μια ειδική χαρτογράφηση ή μάλλον που συνδέει τις τελείες 1024 01:11:40,000 --> 01:11:43,000 ανάμεσα σε ένα σύμβολο και πού πηγαίνει, το όνομα μιας μεταβλητής 1025 01:11:43,000 --> 01:11:46,000 και όπου πρόκειται να ζήσουν στη μνήμη. 1026 01:11:46,000 --> 01:11:50,000 Αλλά αποδεικνύεται ότι μπορούμε να έχουμε πρόσβαση σε πραγματικά προγράμματα μας, καθώς και. 1027 01:11:50,000 --> 01:11:55,000 Αυτό γίνεται σημαντικό όταν αρχίσουμε να μιλάμε για κάποιες από τις δομές δεδομένων, 1028 01:11:55,000 --> 01:11:58,000 η οποία είναι μια έννοια ότι θα πάμε να εισαγάγει αργότερα. 1029 01:11:58,000 --> 01:12:09,000 >> Αλλά για τώρα, ό, τι μπορείτε να ξέρετε είναι ότι μπορώ να δημιουργήσω ένα δείκτη προς αυτό το σημείο, x. 1030 01:12:09,000 --> 01:12:12,000 Για παράδειγμα, μπορώ να δημιουργήσω μια μεταβλητή δείκτη. 1031 01:12:12,000 --> 01:12:16,000 Όταν δημιουργούμε μια μεταβλητή δείκτη που χρησιμοποιούμε τον συμβολισμό αστέρι. 1032 01:12:16,000 --> 01:12:21,000 Σε αυτήν την περίπτωση, αυτό λέει Πάω να δημιουργήσει ένα δείκτη σε int. 1033 01:12:21,000 --> 01:12:24,000 Είναι ένα είδος ακριβώς όπως οποιοδήποτε άλλο. 1034 01:12:24,000 --> 01:12:27,000 Έχουμε δώσει μια μεταβλητή, όπως y, 1035 01:12:27,000 --> 01:12:32,000 και στη συνέχεια θέτουμε ίση με την διεύθυνση, σε μια διεύθυνση. 1036 01:12:32,000 --> 01:12:38,000 Σε αυτή την περίπτωση, μπορούμε να θέσουμε y στο σημείο να χ 1037 01:12:38,000 --> 01:12:43,000 λαμβάνοντας τη διεύθυνση του x, που κάνουμε με αυτό το εμπορικό, 1038 01:12:43,000 --> 01:12:55,000 και στη συνέχεια θέτουμε y να επισημάνω σε αυτό. 1039 01:12:55,000 --> 01:12:59,000 Αυτό δεν είναι κατ 'ουσίαν, αν κοιτάξουμε RAM μας 1040 01:12:59,000 --> 01:13:02,000 αυτό δημιουργεί μια ξεχωριστή μεταβλητή. 1041 01:13:02,000 --> 01:13:04,000 Είναι πρόκειται να καλέσετε το y, 1042 01:13:04,000 --> 01:13:06,000 και όταν αυτή η γραμμή του κώδικα εκτελεί 1043 01:13:06,000 --> 01:13:13,000 αυτό είναι πραγματικά πρόκειται να δημιουργήσει ένα μικρό δείκτη ο οποίος θα συντάξει συνήθως ως ένα βέλος, 1044 01:13:13,000 --> 01:13:15,000 και θέτει στο σημείο y στο x. 1045 01:13:15,000 --> 01:13:17,000 Ναι. 1046 01:13:17,000 --> 01:13:19,000 [Φοιτητικό] Αν το x είναι ήδη ένας δείκτης, θα σας κάνει μόνο 1047 01:13:19,000 --> 01:13:22,000 int * y = x, αντί να έχει το εμπορικό; 1048 01:13:22,000 --> 01:13:24,000 Ναι. 1049 01:13:24,000 --> 01:13:27,000 Αν το x είναι ήδη ένα δείκτη, τότε μπορείτε να set 2 δείκτες ίσες μεταξύ τους, 1050 01:13:27,000 --> 01:13:30,000 στην οποία περίπτωση y που δεν υποδηλώνει x, 1051 01:13:30,000 --> 01:13:34,000 αλλά θα επισημάνω σε ό, τι χ δείχνει να. 1052 01:13:34,000 --> 01:13:37,000 Δυστυχώς, είμαστε έξω από το χρόνο. 1053 01:13:37,000 --> 01:13:44,000 >> Αυτό που θα ήθελα να πω σε αυτό το σημείο, μπορούμε να μιλήσουμε για αυτό το offline, 1054 01:13:44,000 --> 01:13:49,000 αλλά θα έλεγα να αρχίσει να εργάζεται μέσα από αυτό το πρόβλημα, # 14. 1055 01:13:49,000 --> 01:13:53,000 Μπορείτε να δείτε ότι υπάρχει ήδη λίγο συμπληρωθεί για σας εδώ. 1056 01:13:53,000 --> 01:13:57,000 Μπορείτε να δείτε ότι όταν δηλώνουμε 2 δείκτες, int * x και y *, 1057 01:13:57,000 --> 01:14:01,000 και σημειώστε ότι δείχνει το * δίπλα στην μεταβλητή ήταν κάτι που έγινε πέρυσι. 1058 01:14:01,000 --> 01:14:05,000 Αποδεικνύεται ότι αυτό είναι παρόμοιο με αυτό που κάνουμε φέτος. 1059 01:14:05,000 --> 01:14:11,000 Δεν έχει σημασία, όπου μπορείτε να γράψετε το * όταν είστε δηλώνοντας το δείκτη. 1060 01:14:11,000 --> 01:14:17,000 Αλλά έχουμε γράψει το * δίπλα στον τύπο 1061 01:14:17,000 --> 01:14:24,000 γιατί αυτό καθιστά πολύ σαφές ότι είστε δηλώνοντας μια μεταβλητή δείκτη. 1062 01:14:24,000 --> 01:14:27,000 Μπορείτε να δείτε ότι δηλώνοντας τα 2 δείκτες μας δίνει 2 κουτιά. 1063 01:14:27,000 --> 01:14:31,000 Εδώ όταν θέτουμε x ίσο με malloc 1064 01:14:31,000 --> 01:14:34,000 τι είναι αυτό που λέει η αναίρεση μνήμη στο σωρό. 1065 01:14:34,000 --> 01:14:41,000 Αυτό το μικρό κουτί δεξιά εδώ, αυτός ο κύκλος, βρίσκεται στο σωρό. 1066 01:14:41,000 --> 01:14:43,000 Το Χ είναι οδηγούν σε αυτό. 1067 01:14:43,000 --> 01:14:46,000 Σημειώστε ότι y εξακολουθεί να μην δείχνει σε τίποτα. 1068 01:14:46,000 --> 01:14:50,000 Για να πάρετε μνήμη για να αποθηκεύσετε τον αριθμό σε 42 x 1069 01:14:50,000 --> 01:14:55,000 θα χρησιμοποιήσει ό, τι συμβολισμό; 1070 01:14:55,000 --> 01:14:59,000 [Φοιτητής] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Ακριβώς, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Αυτό σημαίνει ότι ακολουθούν το βέλος και να ρίξει 42 σε εκεί. 1073 01:15:06,000 --> 01:15:09,000 Εδώ όπου θέτουμε y και x έχουμε y επισημαίνοντας x. 1074 01:15:09,000 --> 01:15:13,000 Και πάλι, αυτό είναι ακριβώς όπως αυτό που είπε ο Kevin όπου θέτουμε y ίση με x. 1075 01:15:13,000 --> 01:15:15,000 Υ δεν δείχνει να x. 1076 01:15:15,000 --> 01:15:19,000 Μάλλον, αυτό είναι ό, τι δείχνει προς x δείχνει ως καλά. 1077 01:15:19,000 --> 01:15:24,000 >> Και τελικά σε αυτό το τελευταίο κουτί υπάρχουν 2 πιθανές πράγματα που θα μπορούσαμε να κάνουμε. 1078 01:15:24,000 --> 01:15:28,000 Το ένα είναι θα μπορούσαμε να πούμε * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Το άλλο πράγμα είναι θα μπορούσαμε να πούμε-Άλεξ, ξέρεις τι θα μπορούσαμε να κάνουμε εδώ; 1080 01:15:33,000 --> 01:15:37,000 Θα μπορούσαμε να πούμε * x = 13 ή- 1081 01:15:37,000 --> 01:15:41,000 [Φοιτητικό] Θα μπορούσαμε να πούμε οτιδήποτε int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H] Εάν αυτό αναφέρεται ως μια μεταβλητή int θα μπορούσαμε να το κάνουμε αυτό. 1083 01:15:45,000 --> 01:15:49,000 Θα μπορούσαμε να πούμε επίσης * y = 13 επειδή είναι και οι δύο δείχνουν στο ίδιο μέρος, 1084 01:15:49,000 --> 01:15:51,000 έτσι θα μπορούσαμε να χρησιμοποιήσουμε είτε μεταβλητή για να φτάσει εκεί. 1085 01:15:51,000 --> 01:15:56,000 Ναι. >> [Φοιτητικό] Τι θα μοιάζουν αν απλά λέμε int x είναι 13; 1086 01:15:56,000 --> 01:16:00,000 Αυτό θα πρέπει να κηρύσσει μια νέα μεταβλητή με όνομα x, η οποία δεν θα μπορούσε να λειτουργήσει. 1087 01:16:00,000 --> 01:16:04,000 Θα είχαμε μια σύγκρουση, διότι δηλώσαμε x να είναι ένας δείκτης εδώ. 1088 01:16:04,000 --> 01:16:10,000 [Φοιτητικό] Αν είχαμε ακριβώς αυτή τη δήλωση από μόνη της τι θα μοιάζει με την άποψη του κύκλου; 1089 01:16:10,000 --> 01:16:14,000 Αν είχαμε x = 13 τότε θα είχαμε ένα κουτί, και αντί να έχουν ένα βέλος 1090 01:16:14,000 --> 01:16:16,000 βγαίνει από το κουτί που θα το συντάξει, όπως ακριβώς ένα 13. 1091 01:16:16,000 --> 01:16:19,000 [Φοιτητικό] Στο πλαίσιο. Εντάξει. 1092 01:16:19,000 --> 01:16:24,000 >> Σας ευχαριστώ για την προσοχή, και καλή τύχη στις Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]