1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. MALAN: Εντάξει. 5 00:00:12,230 --> 00:00:16,440 Αυτό είναι CS50, και αυτό είναι το τέλος της εβδομάδας 2. 6 00:00:16,440 --> 00:00:18,480 Έτσι, σήμερα, θα πάμε να συνεχίσει το βλέμμα μας 7 00:00:18,480 --> 00:00:21,150 πώς θα εκπροσωπεί τα πράγματα κάτω από το hood-- κινείται μακριά 8 00:00:21,150 --> 00:00:23,520 από τους αριθμούς, όπως ακέραιοι και τιμές κινητής υποδιαστολής 9 00:00:23,520 --> 00:00:26,810 και εστιάζοντας στις χορδές και τελικά πιο ενδιαφέροντα προγράμματα. 10 00:00:26,810 --> 00:00:30,140 Αλλά, επίσης, θα ρίξουμε μια ματιά σε ένα δυο συγκεκριμένους τομείς problems-- 11 00:00:30,140 --> 00:00:33,620 η πρώτη από τις οποίες θα να αφορούν την κρυπτογραφία, 12 00:00:33,620 --> 00:00:36,570 η τέχνη της κρυπτογράφησης πληροφοριών, στην οποία βλέπετε παραπάνω εδώ 13 00:00:36,570 --> 00:00:41,480 είναι μια εικόνα του Radio Orphan Annie του μυστικό δαχτυλίδι αποκωδικοποιητή από χτες. 14 00:00:41,480 --> 00:00:46,490 >> Αυτό είναι πραγματικά πολύ πρωτόγονη μορφή και το παιδί-φιλική μορφή cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 σύμφωνα με την οποία αυτός ο δακτύλιος έχει δύο disks-- ένα εσωτερικό και ένα εξωτερικό. 16 00:00:50,590 --> 00:00:54,740 Και περιστρέφοντας ένα από αυτά, μπορείτε να ουσιαστικά παρατάξει γράμματα όπως Α 17 00:00:54,740 --> 00:00:59,520 μέσω Z με άλλα γράμματα όπως Β έως Α Με άλλα λόγια, 18 00:00:59,520 --> 00:01:03,730 μπορείτε κυριολεκτικά να περιστρέψετε το αλφάβητο, έτσι έρχονται με μια χαρτογράφηση από 19 00:01:03,730 --> 00:01:07,820 επιστολές σε επιστολές, έτσι ώστε, αν θέλησε να στείλει ένα μυστικό μήνυμα 20 00:01:07,820 --> 00:01:11,820 σε κάποιον σαν Annie, θα μπορούσατε να γράψετε κάτω το μήνυμά σας και, στη συνέχεια, περιστρέψτε 21 00:01:11,820 --> 00:01:15,370 τα γράμματα, σύμφωνα με την οποία, αν εννοείς να πει "Α", μπορείτε αντ 'αυτού να πω "B" 22 00:01:15,370 --> 00:01:17,280 μπορείτε να πω "B" μπορείτε, αντί να πω "C" - 23 00:01:17,280 --> 00:01:20,240 ή κάτι λίγο πιο έξυπνοι από αυτό-- και, στη συνέχεια, τελικά, 24 00:01:20,240 --> 00:01:24,630 εφ 'όσον Annie έχει έναν αποκωδικοποιητή δακτύλιο, που μπορεί να αποκωδικοποιήσει το μήνυμα. 25 00:01:24,630 --> 00:01:28,540 Τώρα, ίσως θυμάστε, στην πραγματικότητα, ότι αυτό χρησιμοποιήθηκε σε μια πολύ γνωστή ταινία ότι 26 00:01:28,540 --> 00:01:31,140 παίζει nauseum διαφημίσεων κατά τη διάρκεια της την περίοδο των Χριστουγέννων. 27 00:01:31,140 --> 00:01:32,650 Ας ρίξουμε μια ματιά εδώ. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Είτε πρόκειται για γνωστό σε όλους στην περίληψη 30 00:01:37,210 --> 00:01:41,000 ότι Ralph Parker διορίζεται ένα μέλος της Μικρής ορφανά Annie Secret 31 00:01:41,000 --> 00:01:44,860 Circle και δικαιούται να επικαλείται όλα τα τιμητικές διακρίσεις και τα οφέλη που συμβαίνουν σ 'αυτό. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (Διήγηση): Υπεγράφη Μικρή ορφανά Annie. 33 00:01:47,410 --> 00:01:50,070 Προσυπογράφονται, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 Σε μελάνι. 35 00:01:51,490 --> 00:01:55,494 Διακρίσεις και τα οφέλη, ήδη στην ηλικία των εννέα. 36 00:01:55,494 --> 00:01:57,402 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO CHATTER] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Έλα. 39 00:02:01,470 --> 00:02:02,344 Ας προχωρήσουμε με αυτό. 40 00:02:02,344 --> 00:02:06,029 Δεν χρειάζεται όλη αυτή η τζαζ για τους λαθρεμπόρους και τους πειρατές. 41 00:02:06,029 --> 00:02:08,820 Εκφωνήτρια σε ραδιοφωνικό σταθμό: Ακούστε αύριο νύχτα για την περιπέτεια καταληκτική 42 00:02:08,820 --> 00:02:11,060 των The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Τώρα, ήρθε η ώρα για την Annie του Μυστικό μήνυμα για εσάς τα μέλη 44 00:02:14,740 --> 00:02:17,110 του Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Θυμηθείτε τα παιδιά, μόνο τα μέλη της Annie μυστικό Circle 46 00:02:20,700 --> 00:02:23,270 μπορεί να αποκωδικοποιήσει το μυστικό μήνυμα της Annie. 47 00:02:23,270 --> 00:02:27,270 >> Θυμηθείτε, η Annie είναι ανάλογα με σας. 48 00:02:27,270 --> 00:02:30,060 Ρυθμίστε τις ακίδες στο Β-2. 49 00:02:30,060 --> 00:02:34,004 Εδώ είναι η message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (Διήγηση): I είμαι στην πρώτη μου μυστική συνάντηση. 51 00:02:36,503 --> 00:02:40,041 RADIO ΝΗΤΗΣ: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (Διήγηση): Ω, Pierre ήταν σε μεγάλη φωνή απόψε. 53 00:02:42,790 --> 00:02:46,110 Θα μπορούσα να πω ότι απόψε το μήνυμα ήταν πολύ σημαντικό. 54 00:02:46,110 --> 00:02:47,930 >> RADIO ΝΗΤΗΣ: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Αυτό είναι ένα μήνυμα από την Annie τον εαυτό της. 56 00:02:49,940 --> 00:02:52,182 Θυμηθείτε, μην το πω σε κανέναν. 57 00:02:52,182 --> 00:02:55,077 >> [Ασθμαίνοντας] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (Διήγηση): Ενενήντα δευτερόλεπτα αργότερα, είμαι 59 00:02:57,285 --> 00:03:00,090 το μόνο δωμάτιο στο σπίτι όπου ένα αγόρι εννέα 60 00:03:00,090 --> 00:03:04,380 θα μπορούσε να καθίσει στην προστασία της ιδιωτικής ζωής και να αποκωδικοποιήσει. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "Β" 63 00:03:05,680 --> 00:03:06,524 >> [Συγκρατημένα γέλια] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (Διήγηση): Πήγα στο επόμενο. 65 00:03:08,684 --> 00:03:09,610 "Ε" 66 00:03:09,610 --> 00:03:11,641 Η πρώτη λέξη είναι το "είναι". 67 00:03:11,641 --> 00:03:12,140 Ναι! 68 00:03:12,140 --> 00:03:14,293 Θα ερχόταν πιο εύκολο τώρα. 69 00:03:14,293 --> 00:03:15,259 "ΚΑ" 70 00:03:15,259 --> 00:03:16,225 >> [Συγκρατημένα γέλια] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Aw, έλα, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Πρέπει να φύγω! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Θα είμαι κάτω, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee σφυρίζω. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "Τ" "Ο" "Να είστε βέβαιος να. "" Να είστε βέβαιος να "τι; 77 00:03:31,220 --> 00:03:33,981 Ποια ήταν Μικρή ορφανά Annie προσπαθώ να πω; "Να είστε βέβαιος να" τι; 78 00:03:33,981 --> 00:03:35,522 ΜΗΤΕΡΑ: Ralphie, Randy έχει να πάει. 79 00:03:35,522 --> 00:03:36,735 Θα σας παρακαλούσα να βγει; 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Εντάξει, μαμά! 81 00:03:38,190 --> 00:03:39,787 Θα είμαι δεξιά έξω! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (Διήγηση): Ήμουν όλο και πιο κοντά τώρα. 83 00:03:41,995 --> 00:03:43,370 Η ένταση ήταν φοβερή. 84 00:03:43,370 --> 00:03:44,794 Τι ήταν αυτό; 85 00:03:44,794 --> 00:03:47,656 Η μοίρα του πλανήτη μπορεί να βρίσκονται σε κίνδυνο. 86 00:03:47,656 --> 00:03:50,518 >> ΜΗΤΕΡΑ: Ralphie, Randy πήρε για να πάει! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Θα ήταν σωστό έξω, για να φωνάξει δυνατά! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Διήγηση): Σχεδόν εκεί! 89 00:03:55,343 --> 00:03:56,520 Τα δάχτυλά μου πέταξε! 90 00:03:56,520 --> 00:03:58,500 Το μυαλό μου ήταν μια παγίδα χάλυβα. 91 00:03:58,500 --> 00:03:59,850 Κάθε πόρων δονείται. 92 00:03:59,850 --> 00:04:01,806 Ήταν σχεδόν σαφές! 93 00:04:01,806 --> 00:04:02,773 Ναι! 94 00:04:02,773 --> 00:04:03,273 Ναι! 95 00:04:03,273 --> 00:04:03,773 Ναι! 96 00:04:03,773 --> 00:04:04,740 Ναι! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Να είστε βέβαιος να πίνουν Ovaltine σας. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine; 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Ένα φτηνό εμπορικό; 101 00:04:17,539 --> 00:04:19,439 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Κάθαρμα. 103 00:04:21,724 --> 00:04:23,460 >> [Γέλια] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. MALAN: Έτσι ώστε, στη συνέχεια, είναι μια ματιά στο τι κρυπτογραφία 105 00:04:27,070 --> 00:04:29,880 μπορεί να είναι για μια Αυτό-- πίνουν από χτες. 106 00:04:29,880 --> 00:04:30,900 Έτσι, μια γρήγορη ανακοίνωση. 107 00:04:30,900 --> 00:04:33,410 Αν είστε ελεύθεροι αυτό Παρασκευή στις 13:15 και θα 108 00:04:33,410 --> 00:04:36,610 ήθελαν να ενωθούν μαζί μας για CS50 μεσημεριανό γεύμα, το κεφάλι σε αυτό το URL εδώ. 109 00:04:36,610 --> 00:04:38,080 Πρώτα έρχονται, πρώτο σερβίς ως συνήθως. 110 00:04:38,080 --> 00:04:41,840 Αλλά με την πάροδο του χρόνου, θα βεβαιωθείτε ότι πιο όποιον θα ήθελε να συμμετάσχει 111 00:04:41,840 --> 00:04:43,640 μπορεί να προγραμματίσει-σοφός. 112 00:04:43,640 --> 00:04:45,170 >> Έτσι χορδές. 113 00:04:45,170 --> 00:04:47,940 Έχουμε Zamyla-- οποίους έχετε συναντήσει τώρα πιο πιθανό 114 00:04:47,940 --> 00:04:50,750 στο πρόβλημα Set 1-- των οποίων ορθογραφία του ονόματος είναι έτσι. 115 00:04:50,750 --> 00:04:53,570 Και ας υποθέσουμε ότι έχετε πληκτρολογήσει το όνομά της σε ένα πρόγραμμα υπολογιστή που είναι 116 00:04:53,570 --> 00:04:55,710 χρησιμοποιώντας κάτι σαν GetString. 117 00:04:55,710 --> 00:04:57,890 Προκειμένου να ανακτηθούν αυτές τις πληκτρολογήσεις, πώς 118 00:04:57,890 --> 00:05:01,620 πάμε για εκπροσωπεί ένα εγχόρδων, μια λέξη, μια παράγραφο, 119 00:05:01,620 --> 00:05:03,960 ή πολλά γράμματα όπως αυτά εδώ; 120 00:05:03,960 --> 00:05:06,790 >> Μιλήσαμε για τελευταία φορά ακέραιοι και προβλήματα 121 00:05:06,790 --> 00:05:09,960 που προκύπτουν με υπερχείλιση ακεραίου και τιμές κινητής υποδιαστολής 122 00:05:09,960 --> 00:05:12,190 και τα προβλήματα που προκύπτουν μέσα στην ακρίβεια. 123 00:05:12,190 --> 00:05:16,080 Με χορδές, εμείς τουλάχιστον έχουν λίγο μεγαλύτερη ευελιξία 124 00:05:16,080 --> 00:05:17,970 επειδή strings-- μόνο στον πραγματικό world-- 125 00:05:17,970 --> 00:05:19,790 μπορεί να είναι ένα αρκετά αυθαίρετο μήκος. 126 00:05:19,790 --> 00:05:21,055 Αρκετά μικρό, πολύ καιρό. 127 00:05:21,055 --> 00:05:23,680 Αλλά ακόμα και τότε, θα πάμε να βρίσκουν ότι οι υπολογιστές μπορεί μερικές φορές να 128 00:05:23,680 --> 00:05:27,200 ξεμείνει από μνήμη και όχι ακόμη αποθηκεύσει ένα αρκετά μεγάλο κορδόνι. 129 00:05:27,200 --> 00:05:30,840 >> Αλλά για τώρα, ας αρχίσουμε να απεικονίσει ένα string ως κάτι σε αυτά τα κουτιά 130 00:05:30,840 --> 00:05:31,340 εδώ. 131 00:05:31,340 --> 00:05:36,410 Έτσι, έξι τέτοια κιβώτια, το καθένα από τα οποία αντιπροσωπεύει ένα χαρακτήρα ή «χαρακτήρας». 132 00:05:36,410 --> 00:05:40,646 Έτσι, υπενθυμίζουν ότι "char" - c-h-a-r-- είναι μία από τις ενσωματωμένες σε τύπους δεδομένων σε C. 133 00:05:40,646 --> 00:05:43,520 Και τι ωραίο είναι ότι μπορείτε να χρησιμοποιήσετε ότι το είδος του ως δομικό στοιχείο, 134 00:05:43,520 --> 00:05:47,880 ένα κομμάτι του παζλ, αν θέλετε, για να σχηματίσει ένα μεγαλύτερο είδος των δεδομένων που θα συνεχίσουν 135 00:05:47,880 --> 00:05:49,410 να καλέσει ένα "string". 136 00:05:49,410 --> 00:05:53,650 >> Τώρα, τι είναι χρήσιμο για τη σκέψη σχετικά με τα πράγματα όπως χορδές με αυτόν τον τρόπο; 137 00:05:53,650 --> 00:05:57,720 Λοιπόν, αποδεικνύεται ότι μπορούμε πραγματικά μόχλευση αυτή τη δομή 138 00:05:57,720 --> 00:06:01,420 να έχουν πρόσβαση στην πραγματικότητα μεμονωμένους χαρακτήρες σε ένα αρκετά απλό τρόπο. 139 00:06:01,420 --> 00:06:04,099 Πάω να πάει μπροστά και να δημιουργήσει ένα αρχείο που ονομάζεται "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 αλλά μπορείτε να καλέσετε ό, τι θέλετε. 141 00:06:05,765 --> 00:06:08,500 Και στην ιστοσελίδα του μαθήματος είναι ήδη το παράδειγμα αυτό εκ των προτέρων, 142 00:06:08,500 --> 00:06:10,430 έτσι ώστε να μην χρειάζεται να πληκτρολογήστε τα πάντα. 143 00:06:10,430 --> 00:06:13,820 >> Και Πάω να προχωρήσει και κάνουμε πρώτα int main κενό. 144 00:06:13,820 --> 00:06:15,980 Και μέσα σε λίγες ημέρες, θα αρχίσουμε να δώσουμε έμφαση, εκτός 145 00:06:15,980 --> 00:06:19,070 τι άκυρο είναι εδώ, γιατί είναι int δίπλα στην κύρια, και ούτω καθεξής. 146 00:06:19,070 --> 00:06:21,180 Αλλά για τώρα, ας συνεχίσουμε να αντιγράψετε επικολλήσετε αυτό. 147 00:06:21,180 --> 00:06:23,455 >> Πάω να κηρύξει μια σειρά που ονομάζεται s. 148 00:06:23,455 --> 00:06:26,920 Και Πάω να επιστρέψει από GetString ανεξάρτητα από τους τύπους χρηστών στο. 149 00:06:26,920 --> 00:06:29,170 Αυτό πρόκειται να είναι μια απλή πρόγραμμα, υπάρχουν οδηγίες, 150 00:06:29,170 --> 00:06:31,336 Είμαι ακριβώς πρόκειται να τυφλά Αναμένουμε ότι ο χρήστης γνωρίζει 151 00:06:31,336 --> 00:06:32,600 τι πρέπει να κάνετε για να το κρατήσετε απλό. 152 00:06:32,600 --> 00:06:34,220 >> Και τώρα θα πάω να έχει ένα βρόχο. 153 00:06:34,220 --> 00:06:37,450 Και στο εσωτερικό του για βρόχο μου, είμαι πρόκειται να έχουν int i παίρνει μηδέν. 154 00:06:37,450 --> 00:06:40,660 Και εγώ είναι, και πάλι, απλά μια σύμβαση, μια μεταβλητή δείκτη για τη μέτρηση, 155 00:06:40,660 --> 00:06:42,350 αλλά θα μπορούσα να ονομάσω αυτό ό, τι θέλω. 156 00:06:42,350 --> 00:06:46,275 Πάω να κάνω εγώ είναι λιγότερο than-- καλά Το όνομά Zamyla είναι μακρύ έξι γράμματα. 157 00:06:46,275 --> 00:06:48,150 Έτσι, Πάω στο σκληρό κώδικα ότι εκεί τώρα. 158 00:06:48,150 --> 00:06:49,730 >> Και τότε εγώ ++. 159 00:06:49,730 --> 00:06:53,190 Και τώρα μέσα από αυτά τα σγουρά τιράντες Πάω να κάνω printf, 160 00:06:53,190 --> 00:06:55,460 και θέλω να εκτυπώσετε ένα χαρακτήρα σε ένα χρόνο. 161 00:06:55,460 --> 00:06:58,227 Έτσι, Πάω να χρησιμοποιήσει% c για ίσως η πρώτη φορά. 162 00:06:58,227 --> 00:07:00,560 Και τότε θέλω να εκτυπώσετε κάθε χαρακτήρα στη δική του γραμμή. 163 00:07:00,560 --> 00:07:02,550 Έτσι, Πάω να θέσει ένα λίγο backslash n εκεί. 164 00:07:02,550 --> 00:07:03,640 Κλείστε απόσπασμα. 165 00:07:03,640 --> 00:07:06,250 >> Και τώρα θέλω να κάνω κάτι εδώ. 166 00:07:06,250 --> 00:07:10,610 Θέλω να εκτυπώσετε το συγκεκριμένο γράμμα στη σειρά, 167 00:07:10,610 --> 00:07:13,670 s, όπως είμαι επανάληψη από μηδέν έως έξι. 168 00:07:13,670 --> 00:07:17,150 Με άλλα λόγια, θέλω να εκτυπώσετε το ί-οστό χαρακτήρα του s. 169 00:07:17,150 --> 00:07:18,420 Τώρα, πώς μπορώ να κάνω αυτό; 170 00:07:18,420 --> 00:07:21,550 >> Καλά μοιάζει πολύ με τα κουτιά αυτή η παράσταση εδώ, 171 00:07:21,550 --> 00:07:25,560 είδος, πλάθω την έννοια του μποξ γράμματα, μπορείτε να το κάνετε, ομοίως, ότι 172 00:07:25,560 --> 00:07:32,630 συντακτικά σε C από απλά διευκρινίζοντας, Θέλω να εκτυπώσετε s του ί-οστό χαρακτήρα. 173 00:07:32,630 --> 00:07:35,640 Χρησιμοποιώντας τις αγκύλες στο πληκτρολόγιο του υπολογιστή σας 174 00:07:35,640 --> 00:07:38,910 ότι σε ένα πληκτρολόγιο ΗΠΑ είναι γενικά πάνω από το πλήκτρο επιστροφής σας. 175 00:07:38,910 --> 00:07:42,630 >> Έτσι, αυτό δεν είναι απόλυτα σωστό αλλά, όπως ίσως έχετε παρατηρήσει. 176 00:07:42,630 --> 00:07:44,780 Αλλά Πάω με το είδος της τυφλά προχωρήσουμε εδώ. 177 00:07:44,780 --> 00:07:47,020 Και Πάω να κάνουν κορδόνι 0. 178 00:07:47,020 --> 00:07:50,860 Αλλά πριν το κάνω αυτό, ας δούμε αν μπορούμε δεν μπορεί να προβλέψει κάποια κοινά λάθη. 179 00:07:50,860 --> 00:07:52,844 Είναι αυτό πρόκειται να καταρτίσει; 180 00:07:52,844 --> 00:07:54,510 Όχι, είμαι λείπει ένα σωρό πράγματα. 181 00:07:54,510 --> 00:07:55,280 Βιβλιοθήκες άκουσα. 182 00:07:55,280 --> 00:07:58,480 >> Έτσι που header αρχεία ίσως θέλω να προσθέσω εδώ; 183 00:07:58,480 --> 00:07:59,205 Ναι. 184 00:07:59,205 --> 00:08:01,580 >> ΚΟΙΝΟ: Χρειάζεται πρότυπο I / O [δεν ακούγεται] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. MALAN: Εξαιρετική. 186 00:08:02,663 --> 00:08:06,060 Γι 'αυτό χρειάζεται πρότυπο I / O. Για ό, τι Σκοπός θέλω πρότυπο I / O; 187 00:08:06,060 --> 00:08:06,670 Για printf. 188 00:08:06,670 --> 00:08:09,220 Έτσι περιλαμβάνουν stdio.h. 189 00:08:09,220 --> 00:08:13,490 Και σας προτείνω επίσης ότι περιλαμβάνουν η βιβλιοθήκη CS50 για ποιο λόγο; 190 00:08:13,490 --> 00:08:14,650 Για να έχουν χορδές. 191 00:08:14,650 --> 00:08:17,780 Έτσι θα δούμε τι Βιβλιοθήκη CS50 είναι να κάνει 192 00:08:17,780 --> 00:08:19,260 για να δημιουργήσει αυτήν την έννοια μιας συμβολοσειράς. 193 00:08:19,260 --> 00:08:21,930 Αλλά για τώρα, μπορείτε να σκεφτείτε μόνο του ως ένα πραγματικό τύπο δεδομένων. 194 00:08:21,930 --> 00:08:23,596 >> Έτσι ώστε να φαίνεται να είναι λίγο καθαριστεί. 195 00:08:23,596 --> 00:08:27,060 Και τώρα είμαι πρόκειται να πάει μπροστά και μάλιστα κάνουν εγχόρδων 0. 196 00:08:27,060 --> 00:08:27,700 Καταρτίζονται. 197 00:08:27,700 --> 00:08:28,370 Έτσι, αυτό είναι καλό. 198 00:08:28,370 --> 00:08:32,799 Έτσι ./string0 επιτρέψτε μου να μεγεθύνετε ώστε να μπορούμε να δείτε πιο προσεκτικά τι συμβαίνει. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Ζ-Α-Μ-Υ-L-Α εισέλθουν. 201 00:08:37,789 --> 00:08:39,440 Και έχουμε εκτυπώνονται στο όνομα Zamyla του. 202 00:08:39,440 --> 00:08:40,409 >> Έτσι, αυτό είναι πολύ καλό. 203 00:08:40,409 --> 00:08:43,220 Έτσι, τώρα ας πάμε μπροστά και να εκτελέστε ξανά το πρόγραμμα αυτό, 204 00:08:43,220 --> 00:08:45,659 και πληκτρολογήστε το πλήρες όνομα Daven του. 205 00:08:45,659 --> 00:08:46,450 Έκπληξη, έκπληξη. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Χμμ. 208 00:08:48,520 --> 00:08:51,750 Δεν έχουν εκτυπωθεί Daven του πλήρες όνομα σωστά. 209 00:08:51,750 --> 00:08:54,250 Τώρα, αυτό πρέπει να είναι προφανές σε Εκ των υστέρων, λόγω του ό, τι, 210 00:08:54,250 --> 00:08:57,010 είδος, ηλίθια απόφαση design; 211 00:08:57,010 --> 00:08:59,590 >> Ναι, εγώ σκληρά κωδικοποιημένους η έξι μέσα μου για βρόχο. 212 00:08:59,590 --> 00:09:01,610 Τώρα το έκανα μόνο και μόνο επειδή Ήξερα όνομα Zamyla του 213 00:09:01,610 --> 00:09:02,776 επρόκειτο να είναι έξι γράμματα. 214 00:09:02,776 --> 00:09:04,720 Αλλά σίγουρα αυτό δεν είναι μια γενική λύση. 215 00:09:04,720 --> 00:09:07,720 Έτσι αποδεικνύεται μπορούμε δυναμικά καταλάβω το μήκος μιας συμβολοσειράς 216 00:09:07,720 --> 00:09:10,440 καλώντας μια συνάρτηση που ονομάζεται strlen. 217 00:09:10,440 --> 00:09:12,840 >> Και πάλι, σκόπιμα συνοπτικά ονομάζεται απλά 218 00:09:12,840 --> 00:09:14,450 για να γίνει πιο βολικό να πληκτρολόγηση. 219 00:09:14,450 --> 00:09:17,170 Αλλά αυτό είναι συνώνυμο με όλο το μήκος μιας συμβολοσειράς. 220 00:09:17,170 --> 00:09:23,190 Πάω να πάει πίσω στο τερματικό μου παράθυρο και επαναληπτικές τον compiler. 221 00:09:23,190 --> 00:09:24,170 Αλλά φωνάζει σε μένα. 222 00:09:24,170 --> 00:09:29,130 Εμμέσως δηλώνοντας τη λειτουργία της βιβλιοθήκης strlen με τον τύπο unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Είμαι χαμένη. 224 00:09:29,780 --> 00:09:30,590 Εντελώς. 225 00:09:30,590 --> 00:09:32,940 >> Έτσι, ειδικά όπως σας τα μάτια αρχίζουν να γλάσο πάνω 226 00:09:32,940 --> 00:09:36,000 με τα μηνύματα λάθους όπως αυτό, εστίαση ειλικρινά για τις πρώτες λίγες λέξεις. 227 00:09:36,000 --> 00:09:38,590 Γνωρίζουμε ότι το πρόβλημα είναι στο γραμμή 8, όπως αναφέρεται εδώ. 228 00:09:38,590 --> 00:09:40,500 Και αυτό είναι το κορδόνι-0.c. 229 00:09:40,500 --> 00:09:43,580 Εμμέσως δηλώνοντας λειτουργία της βιβλιοθήκης strlen. 230 00:09:43,580 --> 00:09:47,000 Έτσι ώστε να είναι γενικά πρόκειται να είναι ένα πρότυπο των μηνυμάτων λάθους. 231 00:09:47,000 --> 00:09:49,190 Εμμέσως δηλώνοντας κάτι. 232 00:09:49,190 --> 00:09:53,250 >> Έτσι, με λίγα λόγια, ό, τι έχω φάνηκε να έχουν γίνει σε σχέση με τη γραμμή 8, εδώ. 233 00:09:53,250 --> 00:09:56,880 Τι θα μπορούσε να είναι η λύση να είναι ακόμη αν δεν έχετε χρησιμοποιήσει ποτέ strlen τον εαυτό σας; 234 00:09:56,880 --> 00:09:58,907 >> ΚΟΙΝΟ: Μέρος της μια διαφορετική βιβλιοθήκη; 235 00:09:58,907 --> 00:10:00,740 DAVID J. MALAN: Μέρος από μια διαφορετική βιβλιοθήκη. 236 00:10:00,740 --> 00:10:02,400 Γι 'αυτό έχει δηλωθεί, να το πω έτσι. 237 00:10:02,400 --> 00:10:07,510 Αναφέρεται σε κάποιο αρχείο εκτός από stdio.h και CS50.h. 238 00:10:07,510 --> 00:10:09,179 Τώρα πού είναι αυτό ορίζεται; 239 00:10:09,179 --> 00:10:12,220 Για να είμαι ειλικρινής, θα πρέπει είτε να απλά το γνωρίζουν αυτό από την κορυφή του κεφαλιού σας, 240 00:10:12,220 --> 00:10:13,640 ή έχετε το Google αυτό και να το μάθετε. 241 00:10:13,640 --> 00:10:18,150 Ή το γνωρίζουν αυτό, έχω ανοίξει το CS50 συσκευής το πρόγραμμα τερματικού, το οποίο 242 00:10:18,150 --> 00:10:22,200 είναι ακριβώς το μεγάλο, έκδοση πλήρους οθόνης της τι είναι στο κάτω μέρος του παραθύρου του gedit. 243 00:10:22,200 --> 00:10:24,970 >> Και αποδεικνύεται ότι υπάρχει μια ομοίως συνοπτική εντολή, που ονομάζεται 244 00:10:24,970 --> 00:10:29,280 άνθρωπος για χειροκίνητη, όπου κι αν πληκτρολογήσετε το όνομα της συνάρτησης και να πατήσετε το Enter, 245 00:10:29,280 --> 00:10:32,240 θα πάρετε πίσω αρκετά απόκρυφες τεκμηρίωση. 246 00:10:32,240 --> 00:10:35,299 Είναι ακριβώς το κείμενο που γενικά μοιάζει λίγο κάτι σαν αυτό. 247 00:10:35,299 --> 00:10:37,090 Είναι λίγο συντριπτική με την πρώτη ματιά. 248 00:10:37,090 --> 00:10:39,048 Αλλά ειλικρινά Πάω να αφήστε τα μάτια μου γλάσο πάνω 249 00:10:39,048 --> 00:10:41,930 και να επικεντρωθεί μόνο στο τμήμα Με νοιάζει προς το παρόν. 250 00:10:41,930 --> 00:10:42,780 >> Ποια είναι αυτή. 251 00:10:42,780 --> 00:10:45,470 Πράγμα που μοιάζει δομικά όπως κάτι που είμαι εξοικειωμένος με. 252 00:10:45,470 --> 00:10:48,080 Πράγματι, η σελίδα man, έτσι να μιλήσει, θα σας πω 253 00:10:48,080 --> 00:10:51,590 σε ποια header αρχείο λειτουργία σαν strlen ορίζεται. 254 00:10:51,590 --> 00:10:54,170 Έτσι, Πάω να επιστρέψω τώρα στο gedit. 255 00:10:54,170 --> 00:10:59,070 Και Πάω να προχωρήσει και προσθέσετε εδώ #include 256 00:10:59,070 --> 00:11:00,480 και να αποθηκεύσετε το αρχείο. 257 00:11:00,480 --> 00:11:04,300 >> Πάω να καθαρίσετε την οθόνη με Έλεγχος L Εάν έχετε αναρωτηθεί. 258 00:11:04,300 --> 00:11:08,210 Και Πάω να ξανατρεχτεί make string.0, καταρτίζει αυτή τη φορά. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Αυτό φάνηκε να λειτουργεί Επιτρέψτε μου να πάω μπροστά και να επαναπροσδιορίζονται με Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 Και αυτό, επίσης, φάνηκε να λειτουργεί. 263 00:11:17,730 --> 00:11:21,220 >> Έτσι, μπορούμε να κάνουμε λίγο καλύτερο από αυτό, όμως, μπορούμε να αρχίσουμε να τακτοποιημένο πράγματα 264 00:11:21,220 --> 00:11:23,257 Κάνε λίγο λίγο. 265 00:11:23,257 --> 00:11:25,590 Και Πάω να πραγματικά εισαγάγει ένα άλλο πράγμα τώρα. 266 00:11:25,590 --> 00:11:28,930 Πάω να προχωρήσει και αποθηκεύσετε αυτή σε ένα διαφορετικό αρχείο. 267 00:11:28,930 --> 00:11:31,770 Και Πάω να καλέσετε Αυτό string1.c αρχείο μόνο 268 00:11:31,770 --> 00:11:34,620 να είναι συνεπής με τον κώδικα θα είστε σε θέση να βρείτε online. 269 00:11:34,620 --> 00:11:37,050 >> Και ας επικεντρωθεί σε σχετικά ακριβώς τον ίδιο κωδικό. 270 00:11:37,050 --> 00:11:39,000 Αποδεικνύεται ότι έχω ήταν το είδος της ανάληψης 271 00:11:39,000 --> 00:11:42,600 δεδομένο το γεγονός ότι το laptop μου, και με τη σειρά της, η συσκευή CS50 272 00:11:42,600 --> 00:11:47,450 έχει πολλή μνήμη, πολλά RAM, πολλά byte του χώρου 273 00:11:47,450 --> 00:11:48,920 στην οποία μπορεί να αποθηκεύσει χορδές. 274 00:11:48,920 --> 00:11:53,560 >> Αλλά η πραγματικότητα αν πληκτρολογήσει καιρό αρκετά, και αρκετές πληκτρολογήσεις, 275 00:11:53,560 --> 00:11:56,170 Θα μπορούσα στον τύπο θεωρία σε περισσότερους χαρακτήρες 276 00:11:56,170 --> 00:11:58,830 από τον υπολογιστή μου έχει φυσική μνήμη. 277 00:11:58,830 --> 00:11:59,830 Και αυτό είναι προβληματικό. 278 00:11:59,830 --> 00:12:03,050 Μοιάζει πολύ με ένα int μπορεί μόνο μετρούν τόσο υψηλή, θεωρητικά, 279 00:12:03,050 --> 00:12:06,600 μπορείτε να χώνω μόνο τόσοι πολλοί χαρακτήρες στη μνήμη RAM του υπολογιστή σας ή Τυχαία 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Έτσι είχα καλύτερη πρόβλεψη Αυτό το πρόβλημα, ακόμα 282 00:12:11,140 --> 00:12:13,660 αν και θα μπορούσε να είναι μια σπάνια περίπτωση γωνία, να το πω έτσι. 283 00:12:13,660 --> 00:12:15,670 Δεν συμβαίνει συχνά, θα μπορούσε να συμβεί. 284 00:12:15,670 --> 00:12:18,815 Και αν αυτό συμβεί και εγώ δεν κάνω πρόβλεψη και πρόγραμμα για την, 285 00:12:18,815 --> 00:12:20,300 το πρόγραμμά μου θα μπορούσε να κάνει ποιος ξέρει τι. 286 00:12:20,300 --> 00:12:22,220 Freeze, κολλάει, επανεκκίνηση, οτιδήποτε. 287 00:12:22,220 --> 00:12:24,490 Κάτι που αναμένεται να συμβεί. 288 00:12:24,490 --> 00:12:27,120 >> Λοιπόν, τι Πάω να κάνουμε τώρα, πλέον πραγματικότητα, 289 00:12:27,120 --> 00:12:31,630 είναι πριν από ποτέ στα τυφλά χρησιμοποιήσετε μια μεταβλητή, όπως s ότι 290 00:12:31,630 --> 00:12:36,790 έχει ανατεθεί η τιμή επιστροφής της κάποια άλλη λειτουργία, όπως GetString, 291 00:12:36,790 --> 00:12:40,200 Πάω να βεβαιωθείτε ότι η αξία της είναι έγκυρη. 292 00:12:40,200 --> 00:12:44,280 Έτσι ξέρω μόνο από την ανάγνωση Τεκμηρίωση CS50 για GetString, 293 00:12:44,280 --> 00:12:49,020 η οποία τελικά θα σας το σημείο στο, ότι GetString επιστρέφει ένα ειδικό σύμβολο 294 00:12:49,020 --> 00:12:53,610 ονομάζεται NULL, Ν-U-L-L σε όλες caps, αν κάτι πάει στραβά. 295 00:12:53,610 --> 00:12:55,650 >> Έτσι, συνήθως, επιστρέφει ένα string. 296 00:12:55,650 --> 00:12:59,700 Αλλά κατά τα άλλα, αν επιστρέφει Ν-U-L-εγώ-- εμείς τελικά θα δούμε τι πραγματικά 297 00:12:59,700 --> 00:13:01,790 means-- ότι μόνο μέσα κάτι κακό συνέβη. 298 00:13:01,790 --> 00:13:05,560 Τώρα, αυτό σημαίνει, όπως ακριβώς και στον Scratch, Μπορώ να ελέγξετε μια κατάσταση εδώ σε C, 299 00:13:05,560 --> 00:13:08,830 αν s δεν είναι ίσο με NULL. 300 00:13:08,830 --> 00:13:11,930 Έτσι, αν δεν έχετε δει αυτό πριν, Αυτό απλά σημαίνει ότι δεν είναι ίσο με. 301 00:13:11,930 --> 00:13:15,290 >> Έτσι είναι το αντίθετο του ίση μεταξύ ίσων, η οποία, υπενθυμίζουμε, 302 00:13:15,290 --> 00:13:18,940 είναι διαφορετικό από ενιαίο ισούται, το οποίο είναι ανάθεση. 303 00:13:18,940 --> 00:13:23,030 Έτσι, αν s δεν είναι ίσο με NULL, μόνο τότε 304 00:13:23,030 --> 00:13:25,980 Θέλω να εκτελέσει αυτές τις γραμμές κώδικα. 305 00:13:25,980 --> 00:13:28,080 Έτσι με άλλα λόγια, πριν βουτήξει σε τυφλά 306 00:13:28,080 --> 00:13:30,919 και την επανάληψη ξεκινήσει πάνω από s, και τη θεραπεία 307 00:13:30,919 --> 00:13:33,710 σαν να είναι μια ακολουθία χαρακτήρες, Πάω να ελέγξει πρώτα, 308 00:13:33,710 --> 00:13:37,900 περιμένετε ένα λεπτό, είναι s σίγουρα δεν ίση προς αυτή την ιδιαίτερη αξία, NULL; 309 00:13:37,900 --> 00:13:40,030 >> Γιατί αν είναι, κακά πράγματα μπορούν να συμβούν. 310 00:13:40,030 --> 00:13:43,080 Και για τώρα, ας υποθέσουμε ότι κακά πράγματα συμβαίνει μέσα κολλάει το πρόγραμμά σας, 311 00:13:43,080 --> 00:13:45,070 και δεν μπορεί απαραίτητα να ανακτήσει. 312 00:13:45,070 --> 00:13:46,800 Έτσι, ειλικρινά, φαίνεται άσχημο. 313 00:13:46,800 --> 00:13:48,660 αυτό είναι το είδος της σύγχυσης τώρα να ρίξετε μια ματιά στο. 314 00:13:48,660 --> 00:13:50,780 Αλλά αυτό θα γίνει πιο εξοικειωμένοι πριν από καιρό. 315 00:13:50,780 --> 00:13:52,920 >> Αλλά Πάω να προτείνει τώρα μια άλλη βελτίωση. 316 00:13:52,920 --> 00:13:54,660 Αυτό είναι μια βελτίωση στην ορθότητα. 317 00:13:54,660 --> 00:13:58,800 Το πρόγραμμά μου είναι τώρα πιο σωστή, διότι στην σπάνια περίπτωση που δεν υπάρχει αρκετή μνήμη 318 00:13:58,800 --> 00:14:01,180 υπάρχει, θα το χειριστεί, και θα κάνω απολύτως τίποτα. 319 00:14:01,180 --> 00:14:02,680 Εγώ τουλάχιστον δεν θα συντριβή. 320 00:14:02,680 --> 00:14:05,000 >> Αλλά ας κάνουμε μια τελική έκδοση εδώ. 321 00:14:05,000 --> 00:14:07,690 Και ένα αρχείο που ονομάζεται string2.c. 322 00:14:07,690 --> 00:14:10,190 Πάω να επικολλήσετε ότι ίδιο κωδικό για μια στιγμή, 323 00:14:10,190 --> 00:14:14,210 και πάω να το τονίσω γραμμή, 11, εδώ, μόνο για μια στιγμή. 324 00:14:14,210 --> 00:14:18,179 Τώρα η πραγματικότητα είναι ότι οι έξυπνοι μεταγλωττιστές όπως Clang θα μπορούσε να το διορθώσω αυτό για μας 325 00:14:18,179 --> 00:14:19,970 πίσω από τα παρασκήνια χωρίς να μας μάθουν ποτέ. 326 00:14:19,970 --> 00:14:24,670 Αλλά ας σκεφτούμε αυτό ουσιαστικά ως ένα προβληματικό σχεδιασμό. 327 00:14:24,670 --> 00:14:29,010 >> Αυτή η γραμμή του κώδικα είναι, φυσικά, λέγοντας, προετοιμασία κάποια μεταβλητή i με 0. 328 00:14:29,010 --> 00:14:30,260 Αυτό είναι αρκετά απλή. 329 00:14:30,260 --> 00:14:34,691 Και τι είναι πάλι αυτό Προσωπικά, εδώ, εγώ ++, κάνει; 330 00:14:34,691 --> 00:14:37,066 Έχουμε δει πριν, αλλά εμείς δεν πραγματικά να μιλήσω γι 'αυτό. 331 00:14:37,066 --> 00:14:37,900 >> ΚΟΙΝΟ: Αύξησης i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. MALAN: Αύξησης i. 333 00:14:39,191 --> 00:14:41,890 Έτσι, σε κάθε επανάληψη μέσα αυτό το βρόχο, σε κάθε κύκλο, 334 00:14:41,890 --> 00:14:43,570 είστε προσαύξηση i κατά ένα. 335 00:14:43,570 --> 00:14:45,740 Έτσι μεγαλώνει και μεγαλύτερες, και μεγαλύτερο μέχρι να τερματιστεί ο βρόχος. 336 00:14:45,740 --> 00:14:46,810 Πώς να τερματίσει; 337 00:14:46,810 --> 00:14:49,430 Λοιπόν υπάρχει αυτό το μεσαίο κατάσταση που έχουμε χρησιμοποιήσει στο παρελθόν. 338 00:14:49,430 --> 00:14:52,500 Έχετε δει και σε περάσματα στο σύνολο P. 339 00:14:52,500 --> 00:14:53,880 >> Αλλά τι είναι αυτό το ρητό; 340 00:14:53,880 --> 00:14:58,352 Κάντε το επόμενο βρόχο, ώστε Όσο i είναι μικρότερο από ό, τι; 341 00:14:58,352 --> 00:14:59,810 ΚΟΙΝΟ: Το μήκος της χορδής. 342 00:14:59,810 --> 00:15:01,518 DAVID J. MALAN: Η το μήκος του string. 343 00:15:01,518 --> 00:15:04,300 Έτσι μεταφράζεται πολύ καθαρά στην αγγλική σε αυτή την έννοια. 344 00:15:04,300 --> 00:15:08,810 Τώρα το πρόβλημα είναι ότι κάθε φορά που επαναλήψεις μέσω αυτού του βρόχου στη θεωρία, 345 00:15:08,810 --> 00:15:10,000 Είμαι αυτή την ερώτηση. 346 00:15:10,000 --> 00:15:12,250 Είναι i μικρότερο από το μήκος της συμβολοσειράς s; 347 00:15:12,250 --> 00:15:14,500 Είναι i μικρότερο από το μήκος της συμβολοσειράς s; 348 00:15:14,500 --> 00:15:18,380 >> Τώρα είναι i αλλάζει σε κάθε επανάληψη; 349 00:15:18,380 --> 00:15:18,880 Είναι. 350 00:15:18,880 --> 00:15:19,629 Λόγω της ++. 351 00:15:19,629 --> 00:15:21,700 Έτσι, κάθε επανάληψη i μεγαλώνει. 352 00:15:21,700 --> 00:15:25,411 Αλλά είναι s να πάρει μεγαλύτερο, ή μικρότερες, ή αλλάζει καθόλου; 353 00:15:25,411 --> 00:15:25,910 Όχι 354 00:15:25,910 --> 00:15:30,240 Έτσι, όσον αφορά το σχεδιασμό, ένας από τους άξονες κατά μήκος του οποίου προσπαθούμε να αξιολογήσει κώδικα 355 00:15:30,240 --> 00:15:32,610 στην τάξη, αυτό αισθάνεται κάπως ανόητο. 356 00:15:32,610 --> 00:15:34,690 >> Όπως είστε κυριολεκτικά, σε κάθε επανάληψη 357 00:15:34,690 --> 00:15:37,110 αυτού του βρόχου ζητά η ίδιο καταραμένο ερώτημα και πάλι, 358 00:15:37,110 --> 00:15:40,770 και ξανά, και ξανά, και κυριολεκτικά αυτό δεν πρόκειται ποτέ να αλλάξει. 359 00:15:40,770 --> 00:15:44,220 Τουλάχιστον αν δεν είμαι αγγίζοντας s και προσπαθεί να αλλάξει το περιεχόμενο του s. 360 00:15:44,220 --> 00:15:46,610 Έτσι μπορώ να κάνω λίγο καλύτερη από ό, τι αυτό. 361 00:15:46,610 --> 00:15:49,530 >> Και τι Πάω να κάνουμε δεν είναι δηλώνουν μόνο μία μεταβλητή i, 362 00:15:49,530 --> 00:15:53,330 αλλά μια δεύτερη μεταβλητή Θα είμαι αυθαίρετα, αλλά συμβατικά, αποκαλούν n. 363 00:15:53,330 --> 00:15:55,940 Εκχώρηση n ίσο με το μήκος του νήματος του s. 364 00:15:55,940 --> 00:15:59,090 Και στη συνέχεια, εδώ, θα πάω να κάνει ένα έξυπνο μικρό βελτιστοποίησης, έτσι 365 00:15:59,090 --> 00:16:03,460 να μιλήσει, ότι στο τέλος της ημέρας όχι πιο σωστή ή όχι λιγότερο σωστό είναι 366 00:16:03,460 --> 00:16:04,260 ό, τι πριν. 367 00:16:04,260 --> 00:16:05,500 Αλλά αυτό είναι ένα καλύτερο σχεδιασμό. 368 00:16:05,500 --> 00:16:09,480 Στο γεγονός ότι είμαι με τη χρήση λιγότερο χρόνο, λιγότερα κύκλους CPU, έτσι 369 00:16:09,480 --> 00:16:14,040 να μιλήσει, να απαντήσει το ίδιο ερώτημα, αλλά μόνο μία φορά. 370 00:16:14,040 --> 00:16:17,870 >> Οποιεσδήποτε ερωτήσεις σχετικά με αυτή τη γενική αρχή της βελτίωσης, 371 00:16:17,870 --> 00:16:21,294 λένε, η αποτελεσματικότητα ενός προγράμματος; 372 00:16:21,294 --> 00:16:21,991 Ναι; 373 00:16:21,991 --> 00:16:23,699 ΚΟΙΝΟ: Γιατί κάνετε χρησιμοποιήστε το [δεν ακούγεται]; 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. MALAN: Καλή ερώτηση. 376 00:16:27,010 --> 00:16:30,690 Γιατί λοιπόν να θέσει το ++ στο τέλος της i αντί από την έναρξη του i; 377 00:16:30,690 --> 00:16:33,070 Σε αυτήν την περίπτωση, έχει Δεν λειτουργικές επιπτώσεις. 378 00:16:33,070 --> 00:16:36,670 Και σε γενικές γραμμές, έχω την τάση να χρησιμοποιήστε το διαχειριστή postfix 379 00:16:36,670 --> 00:16:41,750 έτσι ώστε να είναι λίγο πιο σαφής ως για το πότε η λειτουργία συμβαίνει. 380 00:16:41,750 --> 00:16:46,670 >> Για όσους δεν είναι εξοικειωμένοι, υπάρχει και μια άλλη καταστάσεων σύμφωνα με την οποία θα μπορούσατε να κάνετε ++ i. 381 00:16:46,670 --> 00:16:48,747 Αυτά είναι λειτουργικά ισοδύναμο σε αυτή την περίπτωση 382 00:16:48,747 --> 00:16:51,080 γιατί δεν υπάρχει τίποτα άλλο γύρω από την εν λόγω προσαύξησης. 383 00:16:51,080 --> 00:16:54,435 Αλλά μπορείτε να έρθετε επάνω με περιπτώσεις και γραμμές κώδικα 384 00:16:54,435 --> 00:16:55,810 στην οποία αυτό κάνει τη διαφορά. 385 00:16:55,810 --> 00:16:57,810 Έτσι, σε γενικές γραμμές, εμείς δεν κάνουμε ακόμη και να μιλήσει για αυτό. 386 00:16:57,810 --> 00:17:00,690 Διότι, ειλικρινά, αυτό καθιστά σας Κωδικός σέξι, και το είδος της επιτήδειος, 387 00:17:00,690 --> 00:17:01,776 και λιγότερους χαρακτήρες. 388 00:17:01,776 --> 00:17:04,859 Αλλά η πραγματικότητα είναι ότι είναι πολύ πιο δύσκολο, Νομίζω ότι, ακόμα και για μένα να τυλίξουν το μυαλό μου 389 00:17:04,859 --> 00:17:07,319 γύρω από αυτό μερικές φορές, η σειρά των πράξεων. 390 00:17:07,319 --> 00:17:09,750 Έτσι, ως ένα μέρος, αν Πραγματικά δεν μου αρέσει αυτό, 391 00:17:09,750 --> 00:17:14,650 ακόμα κι αν αυτό είναι το είδος της σέξι ψάχνετε, μπορείτε επίσης να κάνετε i + = 1, 392 00:17:14,650 --> 00:17:18,880 το οποίο είναι το πιο άσχημο έκδοση του ίδια ιδέα για το postfix προσαύξησης. 393 00:17:18,880 --> 00:17:22,250 >> Το λέω αυτό και σας θα πρέπει να κάνουν τη διασκέδαση του, 394 00:17:22,250 --> 00:17:25,140 αλλά θα έρθει για να δείτε τον κωδικό, όπως κάτι όμορφο πριν από καιρό. 395 00:17:25,140 --> 00:17:27,160 >> [Γέλια] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. MALAN: Σωστά; 397 00:17:28,410 --> 00:17:29,360 Ναι. 398 00:17:29,360 --> 00:17:30,480 Ερώτηση στη μέση. 399 00:17:30,480 --> 00:17:32,146 >> ΚΟΙΝΟ: Μήπως πρέπει να πούμε int n; 400 00:17:32,146 --> 00:17:34,020 DAVID J. MALAN: Μπορείτε να το κάνετε Δεν χρειάζεται να πω int n. 401 00:17:34,020 --> 00:17:37,670 Έτσι, γιατί έχουμε ήδη πει int, δεν χρειάζεται να το πω και πάλι. 402 00:17:37,670 --> 00:17:41,820 Η σύλληψη είναι ότι n πρέπει να είναι το ίδιο τύπο δεδομένων, όπως εγώ. 403 00:17:41,820 --> 00:17:43,310 Έτσι, αυτό είναι μια ευκολία εδώ. 404 00:17:43,310 --> 00:17:44,058 Ναι. 405 00:17:44,058 --> 00:17:47,806 >> ΚΟΙΝΟ: Μπορείτε να πάτε πάνω από το βραχίονα χαρακτήρα εκτύπωσης s i και πάλι; 406 00:17:47,806 --> 00:17:48,930 DAVID J. MALAN: Απολύτως. 407 00:17:48,930 --> 00:17:52,110 Έτσι% c, ανάκληση από την τελευταία ώρα, είναι μόνο ένα σύμβολο κράτησης θέσης. 408 00:17:52,110 --> 00:17:53,930 Σημαίνει βάλει ένα char εδώ. 409 00:17:53,930 --> 00:17:56,780 backslash n, φυσικά, μόνο μέσα θέσει ένα διάλειμμα γραμμή εδώ. 410 00:17:56,780 --> 00:17:59,540 Έτσι ώστε μόνο τα φύλλα, τώρα, αυτό το κομμάτι της νέας σύνταξης. 411 00:17:59,540 --> 00:18:03,730 Και αυτό είναι κυριολεκτικά λέγοντας, πιάσε η σειρά που ονομάζεται s και να πάει να πάρει του 412 00:18:03,730 --> 00:18:06,050 ί-οστό χαρακτήρα, να το πω έτσι. 413 00:18:06,050 --> 00:18:10,590 >> Και συνεχίζω λέγοντας ί-οστό χαρακτήρα επειδή σε κάθε επανάληψη αυτού του βρόχου 414 00:18:10,590 --> 00:18:14,540 Είναι σαν να εκτυπώνετε έξω, το πρώτο βραχίονα s 0, 415 00:18:14,540 --> 00:18:15,780 όπως ένας προγραμματιστής θα μπορούσε να πει. 416 00:18:15,780 --> 00:18:18,680 Στη συνέχεια s βραχίονα 1, τότε s στήριγμα 2, τότε 3, τότε 4. 417 00:18:18,680 --> 00:18:21,610 Αλλά φυσικά αυτό είναι μια μεταβλητή, γι 'αυτό ακριβώς το εκφράζουν με i. 418 00:18:21,610 --> 00:18:23,900 >> Βασικά, όμως, είναι να συνειδητοποιήσει, ειδικά αν δεν έχετε 419 00:18:23,900 --> 00:18:26,358 έχουν εγκλιματιστεί σε αυτόν τον κόσμο του προγραμματισμού, όπου όλα 420 00:18:26,358 --> 00:18:28,950 φαίνεται να μετρούν από το μηδέν, το gotta αρχίζουν να μετρούν από το μηδέν τώρα. 421 00:18:28,950 --> 00:18:35,130 Επειδή οι χορδές, πρώτο χαρακτήρα, η z στο Zamyla είναι προς το καλύτερο ή προς το χειρότερο 422 00:18:35,130 --> 00:18:40,490 πρόκειται να ζήσουν στο νούμερο θέση μηδέν. 423 00:18:40,490 --> 00:18:48,210 >> Εντάξει, οπότε επιτρέψτε μου να φέρει μας πίσω εδώ για να Zamyla 424 00:18:48,210 --> 00:18:50,746 και να δούμε τι πραγματικά συμβαίνει για κάτω από την κουκούλα. 425 00:18:50,746 --> 00:18:52,370 Έτσι υπάρχει αυτή η έννοια του τύπου χύτευσης. 426 00:18:52,370 --> 00:18:53,800 Μπορείτε να έχετε πραγματικά έπαιξε με αυτό που ήδη, 427 00:18:53,800 --> 00:18:55,970 ίσως για την χάκερ έκδοση του P που μία. 428 00:18:55,970 --> 00:19:00,320 Αλλά τύπος χύτευσης αναφέρεται μόνο για το ικανότητα σε C και κάποιες άλλες γλώσσες 429 00:19:00,320 --> 00:19:03,170 για τη μετατροπή ενός τύπου δεδομένων σε άλλο. 430 00:19:03,170 --> 00:19:05,450 >> Τώρα, πώς θα μπορούσαμε να δούμε αυτό αρκετά ευθέως; 431 00:19:05,450 --> 00:19:08,530 Έτσι αυτό, ανάκληση, είναι η αρχή της αγγλικής αλφαβήτου. 432 00:19:08,530 --> 00:19:11,265 Και το πλαίσιο, υπενθυμίζουν, από όπως και πριν από μία εβδομάδα είναι ASCII. 433 00:19:11,265 --> 00:19:13,790 Η American Standard Code για Ανταλλαγή Πληροφοριών. 434 00:19:13,790 --> 00:19:17,080 Ποια είναι απλώς ένα πραγματικά μεγάλο δρόμο του λέγοντας ότι μια χαρτογράφηση από γράμματα 435 00:19:17,080 --> 00:19:19,370 σε αριθμούς, και από τους αριθμούς σε γράμματα. 436 00:19:19,370 --> 00:19:22,940 >> Έτσι, ένα από εδώ M, dot dot dot, γραμμές με, ανάκληση, 437 00:19:22,940 --> 00:19:25,582 το δεκαδικό αριθμό 65 προς τα πάνω. 438 00:19:25,582 --> 00:19:27,290 Και εμείς δεν μιλάμε γι 'αυτό ρητά, 439 00:19:27,290 --> 00:19:29,850 αλλά σίγουρα υπάρχει παρόμοια αριθμοί για πεζά γράμματα. 440 00:19:29,850 --> 00:19:30,820 Και πράγματι, υπάρχουν. 441 00:19:30,820 --> 00:19:33,730 Ο κόσμος αποφάσισε μερικά χρόνια Πριν από λίγο ότι ένα, πεζά ένα, 442 00:19:33,730 --> 00:19:35,020 πρόκειται να είναι 97. 443 00:19:35,020 --> 00:19:38,010 Και λίγο β πρόκειται να είναι 98, και ούτω καθεξής. 444 00:19:38,010 --> 00:19:40,200 >> Και για οποιοδήποτε άλλο πλήκτρο πληκτρολογίου σας, υπάρχει 445 00:19:40,200 --> 00:19:42,190 πρόκειται να είναι ένα παρόμοιο μοτίβο των bits. 446 00:19:42,190 --> 00:19:44,540 Ή ισοδύναμα, ένας δεκαδικός αριθμός. 447 00:19:44,540 --> 00:19:47,110 Έτσι, το ερώτημα στο χέρι, Στη συνέχεια, είναι το πώς μπορούμε να 448 00:19:47,110 --> 00:19:49,400 πραγματικά να δείτε αυτό κάτω από την κουκούλα; 449 00:19:49,400 --> 00:19:51,539 Έτσι, Πάω να πάει πάνω στο gedit και πάλι. 450 00:19:51,539 --> 00:19:53,330 Και όχι τύπου αυτό το ένα από το μηδέν, 451 00:19:53,330 --> 00:19:55,330 Πάω να προχωρήσει και μόλις ανοίξει κάτι 452 00:19:55,330 --> 00:19:58,350 από το σημερινό κώδικα που ονομάζεται ASCII μηδέν. 453 00:19:58,350 --> 00:20:01,210 >> Και ASCII μηδέν μοιάζει με αυτό. 454 00:20:01,210 --> 00:20:02,710 Έτσι, ας τυλίξτε το μυαλό μας γύρω από αυτό. 455 00:20:02,710 --> 00:20:04,969 Έτσι, η πρώτη, έχω σχολίασε ο κώδικας, το οποίο είναι ωραίο. 456 00:20:04,969 --> 00:20:07,010 Επειδή είναι κυριολεκτικά μου λέει τι να περιμένουμε, 457 00:20:07,010 --> 00:20:08,950 εμφανίσει μια χαρτογράφηση για κεφαλαία γράμματα. 458 00:20:08,950 --> 00:20:13,690 Τώρα δεν ξέρω ακριβώς τι εννοώ με αυτό, οπότε ας συμπεράνουμε. 459 00:20:13,690 --> 00:20:16,870 >> Στην αγγλική γλώσσα, ίσως κάπως techie Αγγλικά, 460 00:20:16,870 --> 00:20:20,660 τι γραμμή 18 φαίνεται να κάνει για μας; 461 00:20:20,660 --> 00:20:21,500 Απλά γραμμή 18. 462 00:20:21,500 --> 00:20:22,430 Τι είναι αυτό που προκαλεί; 463 00:20:22,430 --> 00:20:25,192 Τι πάει να δώσει το έναυσμα εδώ; 464 00:20:25,192 --> 00:20:26,100 >> ΚΟΙΝΟ: Ένας βρόχος. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. MALAN: Ένας βρόχος. 466 00:20:26,630 --> 00:20:28,463 Και πόσες φορές είναι ότι πρόκειται να επαναλάβει; 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 ΚΟΙΝΟ: [παρεμβάλλοντας ΦΩΝΕΣ] έξι φορές. 469 00:20:33,270 --> 00:20:34,830 DAVID J. MALAN: Δεν έξι φορές. 470 00:20:34,830 --> 00:20:35,840 ΚΟΙΝΟ: 26 φορές. 471 00:20:35,840 --> 00:20:36,560 DAVID J. MALAN: 26 φορές. 472 00:20:36,560 --> 00:20:37,060 Ναι, συγνώμη. 473 00:20:37,060 --> 00:20:37,960 26 φορές. 474 00:20:37,960 --> 00:20:38,460 Γιατί; 475 00:20:38,460 --> 00:20:41,590 Λοιπόν, αυτό είναι λίγο περίεργο, αλλά Έχω αρχίσει να μετράει από 65. 476 00:20:41,590 --> 00:20:43,300 Ποια είναι παράξενο, αλλά δεν είναι λάθος. 477 00:20:43,300 --> 00:20:44,610 Δεν είναι κακό ας πούμε. 478 00:20:44,610 --> 00:20:46,980 Και κάνω ότι μόνο διότι, για αυτό το παράδειγμα, 479 00:20:46,980 --> 00:20:50,455 Είμαι το είδος της πρόβλεψης ότι το κεφάλαιο Α ήταν 65. 480 00:20:50,455 --> 00:20:53,330 Τώρα αυτό δεν είναι το πιο κομψό τρόπος για να το κάνετε αυτό, το είδος των σκληρών κώδικα 481 00:20:53,330 --> 00:20:56,130 εσωτερικές αξίες που κανείς δεν είναι πάντα αναμένεται να θυμόμαστε. 482 00:20:56,130 --> 00:21:00,155 >> Αλλά για τώρα, παρατηρούμε ότι είμαι κάνει αυτό μέσω της 65 συν 26. 483 00:21:00,155 --> 00:21:03,030 Επειδή προφανώς δεν θέλουν καν να κάνει την αριθμητική στο κεφάλι μου. 484 00:21:03,030 --> 00:21:04,440 Γι 'αυτό θα αφήσει ο compiler να το κάνει. 485 00:21:04,440 --> 00:21:08,600 Στη συνέχεια, όμως σε κάθε βρόχο, κάθε επανάληψη του βρόχου, είμαι προσαύξηση i. 486 00:21:08,600 --> 00:21:10,196 >> Μέχρι τώρα αυτό φαίνεται λίγο αινιγματικό. 487 00:21:10,196 --> 00:21:13,320 Αλλά θα πρέπει να έχουμε το βασικό κτίριο μπλοκ με το οποίο για να το καταλάβουμε αυτό. 488 00:21:13,320 --> 00:21:15,510 % C είναι μόνο ένα σύμβολο κράτησης θέσης για μια χαρα. 489 00:21:15,510 --> 00:21:19,010 % I είναι ένα σύμβολο κράτησης θέσης για έναν int. 490 00:21:19,010 --> 00:21:23,310 Και αποδεικνύεται ότι χρησιμοποιώντας αυτό νέα σύνταξη, αυτή η παρενθετική, έτσι 491 00:21:23,310 --> 00:21:26,100 να μιλήσει, έτσι ώστε ένα τύπο δεδομένων μέσα σε παρένθεση, 492 00:21:26,100 --> 00:21:32,270 Μπορώ να αναγκάσει τον compiler για τη θεραπεία i δεν είναι ακέραιος αριθμός, αλλά ως char. 493 00:21:32,270 --> 00:21:35,520 >> Με αυτόν τον τρόπο μου δείχνει το χαρακτήρα ισοδύναμο αυτού του αριθμού. 494 00:21:35,520 --> 00:21:37,986 Τώρα, εδώ κάτω, αυτός ο κώδικας είναι λίγο πολύ ίδια. 495 00:21:37,986 --> 00:21:39,860 Ήθελα απλώς να super ρητά το γεγονός 496 00:21:39,860 --> 00:21:42,095 ότι αρχίζω σε 97, η οποία είναι πεζά ένα. 497 00:21:42,095 --> 00:21:44,080 Με πάνω από 26 περισσότερα γράμματα. 498 00:21:44,080 --> 00:21:46,970 Και είμαι doing-- και πάλι, χύτευση i, να το πω έτσι. 499 00:21:46,970 --> 00:21:49,160 Ή τύπου χύτευσης i, να το πω έτσι. 500 00:21:49,160 --> 00:21:51,420 >> Από int σε char. 501 00:21:51,420 --> 00:21:55,760 Έτσι ώστε το τελικό αποτέλεσμα πρόκειται να είναι, ειλικρινά, πληροφορίες που ήδη γνωρίζουμε. 502 00:21:55,760 --> 00:21:59,411 Πάω να κάνει ascii-0 δεν dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Ανακοίνωση, ίσως έκανε ότι λάθος που έκανα ακριβώς λάθος. 504 00:22:02,160 --> 00:22:03,820 Κάντε ascii-0. 505 00:22:03,820 --> 00:22:06,090 Τώρα πάω να κάνω ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Θα μεγέθυνση, και, δυστυχώς, πρόκειται να κυλούν στην οθόνη. 507 00:22:09,050 --> 00:22:15,060 Αλλά βλέπουμε μια ολόκληρη διάγραμμα όπου μια χάρτες σε 97, β χάρτες σε 98, 508 00:22:15,060 --> 00:22:18,931 και αν μετακινηθείτε προς τα επάνω περαιτέρω Α, φυσικά, χαρτογραφεί στην 65. 509 00:22:18,931 --> 00:22:21,180 Έτσι, αυτό είναι μόνο για να πούμε ότι τι έχουμε κήρυγμα, 510 00:22:21,180 --> 00:22:25,310 υπάρχει αυτή η ισοδυναμία, είναι στην πραγματικότητα η περίπτωση στην πραγματικότητα. 511 00:22:25,310 --> 00:22:28,000 Έτσι, μια γρήγορη τροποποίηση του αυτή. 512 00:22:28,000 --> 00:22:31,220 Επιτρέψτε μου να ανοίξει ascii-1.γ. 513 00:22:31,220 --> 00:22:38,070 Και παρατηρήσετε αυτό το έξυπνο, το είδος της, διευκρίνιση αυτή. 514 00:22:38,070 --> 00:22:41,770 Αυτό είναι ascii-1.γ, και παρατηρήσετε αυτό το τρελό πράγμα. 515 00:22:41,770 --> 00:22:45,120 >> Και αυτό γίνεται πραγματικά με την καρδιά από ποιους υπολογιστές κάνουν. 516 00:22:45,120 --> 00:22:48,150 Ακόμα κι αν εμείς οι άνθρωποι θα δεν μετράνε σε όρους letters-- 517 00:22:48,150 --> 00:22:50,380 Δεν νομίζω να αρχίσουμε να σκεφτόμαστε, εντάξει ένα τότε b, 518 00:22:50,380 --> 00:22:52,590 και να τα χρησιμοποιήσετε για να μετράνε τα φυσικά αντικείμενα. 519 00:22:52,590 --> 00:22:58,680 Μπορείτε σίγουρα να πω ότι θέλω να προετοιμάσει κάποια μεταβλητή που ονομάζεται c-- 520 00:22:58,680 --> 00:23:03,220 αλλά θα μπορούσε να λέγεται αυτό anything-- έτσι γ αρχικοποιείται στο κεφάλαιο Α 521 00:23:03,220 --> 00:23:07,560 >> Διότι στο τέλος της ημέρας, τον υπολογιστή δεν με νοιάζει τι είστε αποθήκευση, 522 00:23:07,560 --> 00:23:10,170 που νοιάζεται μόνο για το πώς θέλετε να παρουσιάσει τις πληροφορίες. 523 00:23:10,170 --> 00:23:13,560 Πώς θέλετε τον υπολογιστή σας για να ερμηνεύσει αυτό το μοτίβο των bits; 524 00:23:13,560 --> 00:23:16,320 Έτσι, αυτό δεν είναι κάτι που Θα πρότεινα γενικά να κάνει. 525 00:23:16,320 --> 00:23:19,500 Είναι πραγματικά ακριβώς ένα παράδειγμα για να μεταφέρω ότι μπορείτε απολύτως 526 00:23:19,500 --> 00:23:22,049 προετοιμάσει έναν ακέραιο αριθμό σε char. 527 00:23:22,049 --> 00:23:24,090 Επειδή κάτω από το κουκούλα ενός char, φυσικά, 528 00:23:24,090 --> 00:23:26,170 είναι απλά ένας αριθμός από 0 έως 255. 529 00:23:26,170 --> 00:23:28,540 >> Έτσι, μπορείτε σίγουρα το βάζουμε μέσα από ένα int. 530 00:23:28,540 --> 00:23:30,890 Και τι είναι αυτό, επίσης, αποδεικνύει είναι ότι εμείς 531 00:23:30,890 --> 00:23:34,040 μπορεί να μετατρέψει από ένα πληκτρολογήστε στο άλλο, εδώ, 532 00:23:34,040 --> 00:23:36,780 τελικά την εκτύπωση το ίδιο πράγμα. 533 00:23:36,780 --> 00:23:44,760 Και στην πραγματικότητα, αυτό που θα καθορίσει online-- ήταν γραφτό να το πω αυτό, και πάλι, εδώ. 534 00:23:44,760 --> 00:23:48,610 Επιτρέψτε μου να καθαρίσει αυτό επάνω σε απευθείας σύνδεση, και θα δείτε σε απευθείας σύνδεση περιδιάβαση, όπως απαιτείται, 535 00:23:48,610 --> 00:23:50,280 τι επρόκειτο εκεί. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Έτσι, το τελευταίο παράδειγμα τώρα συμμετοχή α και β και στη συνέχεια θα 538 00:23:53,892 --> 00:23:54,850 πάρει τα πράγματα επάνω μια εγκοπή. 539 00:23:54,850 --> 00:23:58,330 Έτσι, με ένα και β και γ στην κεφαλαιοποίηση 540 00:23:58,330 --> 00:24:01,560 και η ισοδυναμία τους, ας ρίξτε μια ματιά σε αυτό το παράδειγμα, εδώ. 541 00:24:01,560 --> 00:24:02,752 Ένα άλλο παράδειγμα κώδικα. 542 00:24:02,752 --> 00:24:04,460 Θα ανοίξει ένα που είναι που έχουν ήδη γίνει, γι 'αυτό 543 00:24:04,460 --> 00:24:06,440 Δεν πρέπει να πληκτρολογήσετε όλα από το μηδέν. 544 00:24:06,440 --> 00:24:09,420 >> Και ανακοίνωση στην αναμονή είμαστε με τη χρήση πολλαπλών κεφαλίδα 545 00:24:09,420 --> 00:24:13,240 αρχεία, μεταξύ των οποίων είναι ο νέος μας φίλος, string.h. 546 00:24:13,240 --> 00:24:15,597 Τώρα αυτό φαίνεται, σε πρώτη ματιά, μια μικρή αινιγματική. 547 00:24:15,597 --> 00:24:18,180 Αλλά ας δούμε αν δεν μπορούμε να αιτιολογήσει μέσα από ό, τι συμβαίνει εδώ. 548 00:24:18,180 --> 00:24:21,150 Πρώτα παίρνω ένα string από το χρήστη, και έβαλα αυτό το αλφαριθμητικό σε μια μεταβλητή 549 00:24:21,150 --> 00:24:22,286 ονομάζεται s. 550 00:24:22,286 --> 00:24:24,090 Αντιγράψτε πάστα από πριν. 551 00:24:24,090 --> 00:24:27,250 Στη γραμμή 22, είμαι προφανώς κάνει ακριβώς ό, τι 552 00:24:27,250 --> 00:24:30,760 Το έκανα πριν από λίγο, είμαι επανάληψη πάνω από τους χαρακτήρες στο s. 553 00:24:30,760 --> 00:24:34,780 >> Και τα νέα κόλπα εδώ χρησιμοποιούν μήκος συμβολοσειράς, ο ανήλικος βελτιστοποίηση 554 00:24:34,780 --> 00:24:37,930 αποθηκεύει το μήκος της συμβολοσειράς σε n, παρά καλώντας strlen και πάλι, 555 00:24:37,930 --> 00:24:38,850 και ξανά, και ξανά. 556 00:24:38,850 --> 00:24:41,120 Και απλά ελέγχοντας ότι i είναι μικρότερη από n. 557 00:24:41,120 --> 00:24:43,330 Τώρα εδώ, τα πράγματα παίρνουν λίγο ενδιαφέρον. 558 00:24:43,330 --> 00:24:45,980 Αλλά είναι απλά μια εφαρμογή από αυτήν την ίδια νέα ιδέα. 559 00:24:45,980 --> 00:24:48,470 Τι σε κάνει English s βραχίονα i αντιπροσωπεύει; 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> ΚΟΙΝΟ: Μετρώντας το καθένα χαρακτήρα [δεν ακούγεται]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. MALAN: Μετρώντας κάθε χαρακτήρα. 563 00:24:55,926 --> 00:24:58,680 Και ακόμη πιο συνοπτικά, s βραχίονα i αντιπροσωπεύουν ό, τι; 564 00:24:58,680 --> 00:25:00,950 Θα σας πω. 565 00:25:00,950 --> 00:25:04,084 Δεν είναι για να σας βάλει στο σημείο εδώ. 566 00:25:04,084 --> 00:25:06,375 >> ΚΟΙΝΟ: Well-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. MALAN: Έτσι, αν η λέξη is-- αν το string είναι Zamyla, που starts-- 568 00:25:09,500 --> 00:25:12,380 ΚΟΙΝΟ: --you ασχολούνται με οι χαρακτήρες separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. MALAN: Καλή. 570 00:25:13,690 --> 00:25:14,190 Ακριβώς. 571 00:25:14,190 --> 00:25:17,940 Ο συμβολισμός βραχίονα πλατεία σας επιτρέπει να έχουν πρόσβαση σε κάθε χαρακτήρα ξεχωριστά, 572 00:25:17,940 --> 00:25:21,120 έτσι s βραχίονα 0 πρόκειται να είναι η πρώτο χαρακτήρα της συμβολοσειράς. 573 00:25:21,120 --> 00:25:24,110 s βραχίονα 1 θα είναι το δεύτερο, και ούτω καθεξής. 574 00:25:24,110 --> 00:25:28,050 Έτσι, το ερώτημα που ρωτάω, εδώ, σε αυτή την κατάσταση είναι αυτό; 575 00:25:28,050 --> 00:25:33,984 Είναι το ί-οστό χαρακτήρα του s μεγαλύτερη από ή ίση με πεζά α; 576 00:25:33,984 --> 00:25:36,400 Και τι σημαίνει αυτό, εδώ, με τα διπλά συμπλεκτικά σύμβολα; 577 00:25:36,400 --> 00:25:36,800 ΚΟΙΝΟ (ΜΑΖΙ): Και. 578 00:25:36,800 --> 00:25:37,210 DAVID J. MALAN: Και. 579 00:25:37,210 --> 00:25:38,418 Είναι ακριβώς ισοδύναμο με αυτό. 580 00:25:38,418 --> 00:25:42,310 Και δεν είναι μια λέξη-κλειδί σε C, θα πρέπει να χρήση, ενοχλητικά, εμπορικό και ampersand. 581 00:25:42,310 --> 00:25:47,520 Και αυτό, αντιθέτως, ζητά είναι s-s ί-οστό χαρακτήρα μικρότερη ή ίση 582 00:25:47,520 --> 00:25:49,030 σε πεζά z; 583 00:25:49,030 --> 00:25:52,440 Και πάλι, εδώ είναι όπου κατανόηση της υποκείμενης 584 00:25:52,440 --> 00:25:54,550 εφαρμογή μιας υπολογιστής έχει νόημα. 585 00:25:54,550 --> 00:25:57,330 Παρατηρήστε ότι, ακόμα κι αν έχω το dot dot dot εκεί, 586 00:25:57,330 --> 00:26:04,410 Μοιάζει με ένα από z πεζά είναι όλες οι συνεχόμενες τιμές επάνω από 97 και πάνω. 587 00:26:04,410 --> 00:26:07,820 >> Και για την ίδια κεφαλαία ξεκινώντας 65. 588 00:26:07,820 --> 00:26:10,410 Έτσι, το πακέτο, τότε, είναι ότι στα αγγλικά, 589 00:26:10,410 --> 00:26:12,760 πώς θα περιγράφατε ποια γραμμή 24 κάνει; 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Ναι; 592 00:26:16,728 --> 00:26:21,575 >> ΚΟΙΝΟ: Στις 24 θα έχει τον έλεγχο για να δούμε εάν κάθε χαρακτήρας είναι ένα πεζό. 593 00:26:21,575 --> 00:26:24,700 DAVID J. MALAN: Είναι ελέγχοντας αν κάθε χαρακτήρας είναι ένα πεζό γράμμα. 594 00:26:24,700 --> 00:26:28,590 Έτσι, ακόμη πιο συνοπτικά, είναι η ί-οστό χαρακτήρα του s πεζά; 595 00:26:28,590 --> 00:26:30,690 Αυτό είναι ό, τι είμαστε εκφράζει εδώ λογικά, 596 00:26:30,690 --> 00:26:33,750 λίγο κρυφά, αλλά τελικά αρκετά ευθέως. 597 00:26:33,750 --> 00:26:36,480 Είναι s το ί-οστό χαρακτήρα πεζά; 598 00:26:36,480 --> 00:26:40,130 >> Αν ναι, και εδώ είναι όπου τα πράγματα πάρει λίγο μυαλό κάμψης 599 00:26:40,130 --> 00:26:44,760 για μια στιγμή, αν ναι, πηγαίνετε μπροστά και να εκτυπώσετε ένα χαρακτήρα. 600 00:26:44,760 --> 00:26:47,360 Έτσι, αυτό είναι μόνο ένα σύμβολο κράτησης θέσης, τι αλλά ο χαρακτήρας; 601 00:26:47,360 --> 00:26:53,710 Γιατί να κάνω s βραχίονα i μείον η έκφραση αυτή εδώ; 602 00:26:53,710 --> 00:26:55,110 >> Καλά παρατηρήσετε το μοτίβο εδώ. 603 00:26:55,110 --> 00:26:57,380 Οι πραγματικοί αριθμοί δεν πειράζει τόσο πολύ. 604 00:26:57,380 --> 00:27:02,700 Να σημειωθεί όμως ότι το 97 είναι πόσο μακριά από το 65; 605 00:27:02,700 --> 00:27:03,560 >> ΚΟΙΝΟ: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. MALAN: 32. 607 00:27:04,480 --> 00:27:06,890 Πόσο μακριά είναι 98 από 66; 608 00:27:06,890 --> 00:27:07,740 >> ΚΟΙΝΟ: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. MALAN: Μικρή c από το μεγάλο C; 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Έτσι, υπάρχει 32 λυκίσκου από ένα γράμμα στο άλλο. 612 00:27:14,550 --> 00:27:17,790 Έτσι, ειλικρινά, θα μπορούσε απλουστευθεί αυτή με εκείνη. 613 00:27:17,790 --> 00:27:20,400 Αλλά τότε είμαι το είδος του σκληρά κωδικοποίησης αυτό το χαμηλό επίπεδο κατανόησης 614 00:27:20,400 --> 00:27:21,740 ότι δεν υπάρχει αναγνώστης είναι ποτέ πρόκειται να καταλάβει. 615 00:27:21,740 --> 00:27:25,080 Έτσι, Πάω να το γενικεύσουμε, όπως, I γνωρίζουν τα πεζά γράμματα είναι μεγαλύτερα. 616 00:27:25,080 --> 00:27:28,400 Ξέρω ότι τα κεφαλαία γράμματα είναι μικρότερες τιμές, ειρωνικά. 617 00:27:28,400 --> 00:27:33,216 >> Αλλά αυτό είναι ουσιαστικά ισοδύναμο με λέγοντας αφαιρέσουμε 32 από s βραχίονα i. 618 00:27:33,216 --> 00:27:35,430 Έτσι, στο πλαίσιο της εν λόγω γράμματα, αν το γράμμα 619 00:27:35,430 --> 00:27:38,950 συμβαίνει να είναι ένα, πεζά α, και εγώ αφαιρέσουμε 32, 620 00:27:38,950 --> 00:27:43,442 τι επιπτώσεις έχει αυτό, μαθηματικά, σε πεζά ένα; 621 00:27:43,442 --> 00:27:44,400 ΚΟΙΝΟ: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. MALAN: το κεφαλαίο. 623 00:27:45,691 --> 00:27:48,440 Και πράγματι, αυτός είναι ο λόγος μας πρόγραμμα ονομάζεται αξιοποιήσει το μηδέν. 624 00:27:48,440 --> 00:27:51,590 Αυτό το πρόγραμμα, είτε κεφαλαιοποιεί ένα e-mail, 625 00:27:51,590 --> 00:27:54,580 μετά τον έλεγχο, εφόσον είναι Πράγματι, ένα πεζό γράμμα. 626 00:27:54,580 --> 00:27:59,810 Διαφορετικά, στην γραμμή 30, τι μπορώ να κάνω αν δεν είναι ένα πεζό γράμμα που είμαι 627 00:27:59,810 --> 00:28:02,852 κοιτάζοντας σε ένα συγκεκριμένο επανάληψη του βρόχου. 628 00:28:02,852 --> 00:28:03,890 Απλά εκτυπώσετε. 629 00:28:03,890 --> 00:28:07,010 >> Έτσι, δεν αλλάζουν την ουσία ότι δεν είναι ακόμη πεζά. 630 00:28:07,010 --> 00:28:10,790 Περιορίστε τον εαυτό σας να λίγο ένα με λίγο z. 631 00:28:10,790 --> 00:28:12,730 Τώρα αυτό είναι αρκετά απόκρυφα. 632 00:28:12,730 --> 00:28:15,230 Αλλά στο τέλος της ημέρας, αυτό είναι το πώς εμείς, μια φορά κι έναν καιρό, 633 00:28:15,230 --> 00:28:16,460 έπρεπε να εφαρμόσουν τα πράγματα. 634 00:28:16,460 --> 00:28:19,780 Αν αντί να ανοίγουν κεφαλαιοποιήσει ένα, oh δόξα τω Θεώ. 635 00:28:19,780 --> 00:28:22,320 Υπάρχει μια λειτουργία καλείται να επάνω ότι μπορεί να 636 00:28:22,320 --> 00:28:25,410 κάνουμε ό, τι ακριβώς έκανε σε ένα αρκετά χαμηλό επίπεδο. 637 00:28:25,410 --> 00:28:28,752 >> Τώρα με πάνω είναι ενδιαφέρουσα επειδή έχει κηρυχθεί σε ένα αρχείο, 638 00:28:28,752 --> 00:28:31,210 και θα γνωρίζουν μόνο αυτό από τον έλεγχο της τεκμηρίωσης, 639 00:28:31,210 --> 00:28:35,730 ή να πει, ας πούμε, στην τάξη, όπου υπάρχει, σε ένα αρχείο που ονομάζεται ctype.h. 640 00:28:35,730 --> 00:28:37,630 Έτσι, αυτό είναι ένα άλλο νέο φίλος μας. 641 00:28:37,630 --> 00:28:40,750 Και για να το κάνει πάνω ακριβώς ό, τι υποδηλώνει το όνομά του. 642 00:28:40,750 --> 00:28:44,860 >> Μπορείτε να περάσετε σε, ως επιχείρημα, μεταξύ αυτές οι παρενθέσεις, κάποιες χαρακτήρα. 643 00:28:44,860 --> 00:28:48,390 Πάω να περάσει στην ί-οστό χαρακτήρα του s χρησιμοποιώντας φανταχτερό νέο συμβολισμό μας 644 00:28:48,390 --> 00:28:49,870 συμμετοχή αγκύλες. 645 00:28:49,870 --> 00:28:53,391 Και να μαντέψω, τι είναι η επιστροφή αξία του σε ανώτερο προφανώς θα 646 00:28:53,391 --> 00:28:53,890 να είναι; 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Ένα κεφαλαίο γράμμα. 649 00:28:57,770 --> 00:28:58,620 Ένα κεφαλαίο γράμμα. 650 00:28:58,620 --> 00:29:02,330 >> Έτσι, αν περάσει σε πεζά a, ελπίζω, εξ ορισμού σε ανώτερο, 651 00:29:02,330 --> 00:29:05,600 πρόκειται να επιστρέψει μια κεφαλαία A. Διαφορετικά, 652 00:29:05,600 --> 00:29:08,590 αν αυτό δεν είναι ένα πεζό γράμμα την πρώτη θέση, απλά να το τυπώσετε έξω. 653 00:29:08,590 --> 00:29:10,800 Και πράγματι, η ανακοίνωση ο δεύτερος φίλος εδώ. 654 00:29:10,800 --> 00:29:13,840 Δεν είναι μόνο στην ανώτερη υπάρχει, αλλά είναι χαμηλότερο, η οποία 655 00:29:13,840 --> 00:29:16,200 απαντά στην πραγματικότητα η ερώτηση για μένα. 656 00:29:16,200 --> 00:29:19,730 >> Τώρα όποιος έγραψε αυτά τα πράγματα, 10s χρόνια πριν, ξέρετε τι; 657 00:29:19,730 --> 00:29:23,840 Εφαρμόζεται σε άνω και είναι μειώσει τη χρήση κώδικα όπως αυτό. 658 00:29:23,840 --> 00:29:27,270 Αλλά και πάλι, σύμφωνα με η ιδέα της ανεύρεσης μακριά, 659 00:29:27,270 --> 00:29:29,190 είδος, χαμηλότερο επίπεδο λεπτομέρειες εφαρμογής. 660 00:29:29,190 --> 00:29:32,600 Και στέκεται στους ώμους των ανθρώπων που ήρθαν πριν από εμάς, χρησιμοποιώντας συναρτήσεις 661 00:29:32,600 --> 00:29:36,300 σαν την ανώτερη και είναι χαμηλότερη, η οποία αρκετά θαυμάσια είναι όμορφα 662 00:29:36,300 --> 00:29:40,190 όνομα να πει ό, τι κάνουν, είναι ένα θαυμάσιο παράδειγμα για να υιοθετήσουν. 663 00:29:40,190 --> 00:29:44,040 >> Τώρα, αποδεικνύεται ότι, αν διάβασα η σελίδα man για, ας πούμε, στο ανώτερο, 664 00:29:44,040 --> 00:29:45,010 Μάθω κάτι άλλο. 665 00:29:45,010 --> 00:29:46,890 Έτσι, ο άνθρωπος toupper. 666 00:29:46,890 --> 00:29:48,050 Είναι λίγο συντριπτική. 667 00:29:48,050 --> 00:29:51,110 Αλλά προσέξτε, εδώ είναι η αναφορά του το αρχείο κεφαλίδας που θα πρέπει να χρησιμοποιήσετε. 668 00:29:51,110 --> 00:29:54,460 Παρεμπιπτόντως, επειδή αυτό είναι παραπλανητική, η λειτουργία 669 00:29:54,460 --> 00:29:59,070 χρησιμοποιεί ints αντί των χαρακτήρων για λόγους ελέγχου σφάλματος. 670 00:29:59,070 --> 00:30:01,260 Αλλά θα έρθει ίσως πίσω στο μέλλον. 671 00:30:01,260 --> 00:30:05,910 >> Να σημειωθεί όμως, εδώ, στο ανώτερο μετατρέπει το γράμμα c σε κεφαλαία, αν είναι δυνατόν. 672 00:30:05,910 --> 00:30:07,674 Έτσι ώστε να είναι αρκετά απλή. 673 00:30:07,674 --> 00:30:09,340 Και τώρα ας είμαστε λίγο πιο συγκεκριμένος. 674 00:30:09,340 --> 00:30:12,750 Ας δούμε από την πλευρά της η Σελίδα άνθρωπος κάτω από την αξία επιστροφής. 675 00:30:12,750 --> 00:30:15,420 Η τιμή που επιστρέφεται είναι ότι από την μετατροπή e-mail. 676 00:30:15,420 --> 00:30:18,690 Ή γ, αν η μετατροπή Δεν ήταν δυνατόν, 677 00:30:18,690 --> 00:30:20,250 όπου c είναι η αρχική είσοδος. 678 00:30:20,250 --> 00:30:24,140 Που ξέρω από εδώ, από την το επιχείρημα για την ανώτερη. 679 00:30:24,140 --> 00:30:25,780 >> Έτσι τι είναι το πακέτο αυτό; 680 00:30:25,780 --> 00:30:28,060 Η τιμή που επιστρέφεται είναι ότι από την μετατροπή e-mail, 681 00:30:28,060 --> 00:30:32,110 ή γ, το αρχικό γράμμα, αν η μετατροπή δεν ήταν δυνατή. 682 00:30:32,110 --> 00:30:36,460 Τι βελτίωσης μπορώ, συνεπώς, κάνουν με το σχεδιασμό κωδικό μου; 683 00:30:36,460 --> 00:30:37,146 Ναι; 684 00:30:37,146 --> 00:30:38,810 >> ΚΟΙΝΟ: Μπορείτε να αφαιρέσετε το άλλο. 685 00:30:38,810 --> 00:30:40,810 DAVID J. MALAN: μπορώ αφαιρέσετε τη δήλωση άλλος, 686 00:30:40,810 --> 00:30:42,510 και όχι μόνο η δήλωση αλλού. 687 00:30:42,510 --> 00:30:44,150 >> ΚΟΙΝΟ: Μπορείτε να αφαιρέσετε [δεν ακούγεται]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. MALAN: μπορώ καταργήσετε ολόκληρο το πιρούνι 689 00:30:46,310 --> 00:30:48,209 στο δρόμο, αν ο άλλος συνολικά. 690 00:30:48,209 --> 00:30:50,250 Έτσι, πράγματι, επιτρέψτε μου να ανοίξει η τελική έκδοση του αυτό, 691 00:30:50,250 --> 00:30:55,540 κεφαλαιοποιήσει-2 και να παρατηρήσετε πόσο, αν θα, σέξι, ο κώδικας είναι τώρα να πάρει, 692 00:30:55,540 --> 00:31:00,040 σε ότι έχω μειωθεί από κάποια επτά ή έτσι γραμμές σε μόλις τέσσερις, 693 00:31:00,040 --> 00:31:03,850 η λειτουργικότητα που προορίζονται καλώντας απλά στην ανώτερη, 694 00:31:03,850 --> 00:31:09,410 περνώντας s βραχίονα i, και εκτύπωση έξω, με το σύμβολο κράτησης θέσης% c, 695 00:31:09,410 --> 00:31:11,090 το συγκεκριμένο χαρακτήρα. 696 00:31:11,090 --> 00:31:14,560 >> Τώρα, αναμφισβήτητα, υπάρχει ένα bug, ή τουλάχιστον ο κίνδυνος ενός bug, 697 00:31:14,560 --> 00:31:15,350 σε αυτό το πρόγραμμα. 698 00:31:15,350 --> 00:31:18,200 Έτσι απλά για να επανέλθει σε μια προηγούμενη πακέτο, 699 00:31:18,200 --> 00:31:21,820 τι πρέπει να κάνω πιθανότατα και σε αυτό το πρόγραμμα για να γίνει πιο ισχυρή, 700 00:31:21,820 --> 00:31:24,974 έτσι ώστε δεν υπάρχει κανένας τρόπος που μπορεί να συντριβή, ακόμη και σε σπάνιες περιπτώσεις; 701 00:31:24,974 --> 00:31:26,390 ΚΟΙΝΟ: Βεβαιωθείτε ότι δεν είναι NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. MALAN: Βεβαιωθείτε ότι δεν είναι NULL. 703 00:31:28,056 --> 00:31:31,030 Έτσι, πραγματικά, να κάνει αυτό το σούπερ σωστή, πρέπει να κάνω κάτι σαν, 704 00:31:31,030 --> 00:31:35,300 αν s δεν είναι NULL, τότε να προχωρήσει και να εκτελέσει 705 00:31:35,300 --> 00:31:38,470 αυτές οι γραμμές κώδικα, το οποίο Μπορώ τότε περίπτωση, όπως ότι, 706 00:31:38,470 --> 00:31:39,870 και στη συνέχεια θα τοποθετούνται σε στενή κηδεμόνα μου. 707 00:31:39,870 --> 00:31:41,550 Έτσι, καλό δέσιμο μεταξύ των δύο ιδεών. 708 00:31:41,550 --> 00:31:42,429 Ναι; 709 00:31:42,429 --> 00:31:44,470 ΚΟΙΝΟ: Θα μπορούσατε να χρησιμοποιήσετε ένας κάνει, ενώ βρόχο, αντ 'αυτού; 710 00:31:44,470 --> 00:31:47,270 DAVID J. MALAN: Θα μπορούσε Κάνω ένα do while loop; 711 00:31:47,270 --> 00:31:50,020 ΚΟΙΝΟ: --you θέλετε να βεβαιωθείτε ότι στην πραγματικότητα [δεν ακούγεται]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. MALAN: Θα μπορούσε μπορείτε να χρησιμοποιήσετε ένα do while; 713 00:31:51,728 --> 00:31:52,450 Σύντομη απάντηση, όχι. 714 00:31:52,450 --> 00:31:54,700 Επειδή είστε έτοιμος να εισαγάγει μια άλλη υπόθεση γωνία. 715 00:31:54,700 --> 00:31:56,660 Αν το string είναι μηδενικού μήκους. 716 00:31:56,660 --> 00:31:59,600 Αν, για παράδειγμα, εγώ απλά πατήστε Εισάγετε, χωρίς ποτέ πληκτρολόγηση Zamyla. 717 00:31:59,600 --> 00:32:02,490 Πάω να σας παραδώσει ένα πραγματικό εγχόρδων, όπως θα δούμε τελικά, 718 00:32:02,490 --> 00:32:03,780 ότι έχει μηδενική χαρακτήρες. 719 00:32:03,780 --> 00:32:05,630 Είναι ακόμα ένα string, είναι απλά σούπερ σύντομη. 720 00:32:05,630 --> 00:32:07,960 Αλλά αν μπορείτε να χρησιμοποιήσετε ένα do while, θα πάμε να τυφλά 721 00:32:07,960 --> 00:32:10,050 να προσπαθήσουμε να κάνουμε κάτι με σεβασμό προς την εν λόγω σειρά, 722 00:32:10,050 --> 00:32:12,537 και τίποτα δεν πρόκειται να είναι εκεί. 723 00:32:12,537 --> 00:32:18,607 >> ΚΟΙΝΟ: Λοιπόν, αν κάνατε κάνει [δεν ακούγεται] ενώ S-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. MALAN: Ω βλέπω, να κρατήσει να πάρει μια σειρά από το χρήστη. 725 00:32:21,190 --> 00:32:23,525 Έτσι σύντομη απάντηση, θα θα μπορούσε, και να κρατήσει εχθρική 726 00:32:23,525 --> 00:32:26,150 να σας δώσει μια σειρά που είναι αρκετά μικρή για να χωράει στη μνήμη. 727 00:32:26,150 --> 00:32:26,700 Απολύτως. 728 00:32:26,700 --> 00:32:27,630 Απλά επέλεξε να μην. 729 00:32:27,630 --> 00:32:30,505 Αν δεν μου δίνουν το string I θέλουν, είμαι εγκατάλειψη, δίνω επάνω. 730 00:32:30,505 --> 00:32:33,260 Αλλά απολύτως, για το σκοπό αυτό, θα μπορούσε να κάνει απολύτως αυτό. 731 00:32:33,260 --> 00:32:37,500 >> Έτσι, τα αρχεία header της βιβλιοθήκης ότι είμαστε τώρα εξοικειωμένοι με είναι αυτά, εδώ. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, και υπάρχουν, πράγματι, άλλοι. 733 00:32:41,550 --> 00:32:44,460 Μερικοί από εσάς έχουν ανακαλύψει η βιβλιοθήκη μαθηματικών στο math.h. 734 00:32:44,460 --> 00:32:48,200 Αλλά επιτρέψτε μου να σας παρουσιάσουμε, τώρα, να ο πόρος αυτός που το προσωπικό CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 και Rob, και Gabe ιδιαίτερα έχουν βάλει μαζί. 736 00:32:50,630 --> 00:32:52,630 Αυτό θα συνδέσει σύντομα σε ιστοσελίδα του μαθήματος. 737 00:32:52,630 --> 00:32:54,870 Λέγεται αναφορά CS50. 738 00:32:54,870 --> 00:32:58,230 >> Ποια ακριβώς για να σας δώσει μια γρήγορη γεύση από αυτό, λειτουργεί ως εξής. 739 00:32:58,230 --> 00:33:00,740 Επιτρέψτε μου να πάω να reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Θα δείτε στην αριστερή πλευρά άλλη μια συντριπτική λίστα 741 00:33:02,990 --> 00:33:04,595 των λειτουργιών που έρχονται με το c. 742 00:33:04,595 --> 00:33:07,790 Αλλά αν με νοιάζει, προς το παρόν, περίπου κάτι σαν strlen, 743 00:33:07,790 --> 00:33:08,746 Μπορώ να το πληκτρολογήσετε εκεί. 744 00:33:08,746 --> 00:33:10,870 Φιλτράρει τα κάτω στη λίστα ακριβώς ό, τι με νοιάζει. 745 00:33:10,870 --> 00:33:11,940 Πάω να το κλικ. 746 00:33:11,940 --> 00:33:14,740 Και τώρα για την αριστερά, θα δείτε τι ελπίζουμε 747 00:33:14,740 --> 00:33:18,290 είναι μια πιο απλή, ανθρώπινη φιλική εξήγηση για το πώς 748 00:33:18,290 --> 00:33:19,170 η λειτουργία αυτή λειτουργεί. 749 00:33:19,170 --> 00:33:20,600 >> Επιστρέφει το μήκος μιας συμβολοσειράς. 750 00:33:20,600 --> 00:33:24,060 Εδώ είναι μια σύνοψη, εδώ είναι το πώς θα χρησιμοποιήσετε την άποψη του αρχείου header, 751 00:33:24,060 --> 00:33:27,430 και από την άποψη του τι είναι η λειτουργία Μοιάζει όσον αφορά τα επιχειρήματα της. 752 00:33:27,430 --> 00:33:30,250 Και τότε εδώ, επιστρέφει το μήκος μιας συμβολοσειράς. 753 00:33:30,250 --> 00:33:34,280 Αλλά για όσους από εσάς πιο άνετα, μπορείτε πραγματικά να κάνετε κλικ πιο άνετα, 754 00:33:34,280 --> 00:33:37,070 και τα περιεχόμενα του αυτό σελίδα, τώρα, θα αλλάξουν 755 00:33:37,070 --> 00:33:41,660 να είναι οι προεπιλεγμένες τιμές για το τι μπορείτε να πάρετε χρησιμοποιώντας τη σελίδα man. 756 00:33:41,660 --> 00:33:44,100 >> Με άλλα λόγια, CS50 αναφοράς είναι η απλούστευση 757 00:33:44,100 --> 00:33:46,220 σελίδες man από το προσωπικό, για τους μαθητές. 758 00:33:46,220 --> 00:33:49,320 Ιδιαίτερα, όσοι λιγότερο άνετα και στο μεταξύ, έτσι ώστε να 759 00:33:49,320 --> 00:33:51,660 Δεν πρέπει να προσπαθήσουμε να τυλίξει το μυαλό σας γύρω, ειλικρινά, 760 00:33:51,660 --> 00:33:55,030 κάποια αρκετά αινιγματική σύνταξη και τεκμηρίωση κάποτε. 761 00:33:55,030 --> 00:33:57,650 >> Έτσι, έχετε κατά νου ότι στις μέρες που έρχονται. 762 00:33:57,650 --> 00:33:59,560 Μέχρι εδώ, και πάλι, είναι ένα Zamyla. 763 00:33:59,560 --> 00:34:03,255 Ας ρωτήσουμε τώρα ένα ερώτημα που είναι λίγο πιο ανθρώπινη προσβάσιμα. 764 00:34:03,255 --> 00:34:05,380 Χάρη στο Chang, που είναι ήδη εκτύπωση περισσότερες ελέφαντες 765 00:34:05,380 --> 00:34:07,090 ασταμάτητα για τις τελευταίες ημέρες. 766 00:34:07,090 --> 00:34:09,730 Έχουμε μια ευκαιρία να δώσει τουλάχιστον ένας από τους μακριά. 767 00:34:09,730 --> 00:34:13,239 Εάν θα μπορούσαμε να πάρουμε μόνο ένας εθελοντής να έρθουν σε έως σχεδιάσετε πάνω στην οθόνη. 768 00:34:13,239 --> 00:34:14,530 Πόσο περίπου εδώ; 769 00:34:14,530 --> 00:34:15,340 >> Έλα πάνω. 770 00:34:15,340 --> 00:34:16,720 Ποιο είναι το όνομά σου; 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. MALAN: Alex. 773 00:34:17,760 --> 00:34:18,259 Εντάξει. 774 00:34:18,259 --> 00:34:19,388 Alex, έλα επάνω. 775 00:34:19,388 --> 00:34:21,679 Είμαστε έτοιμοι να δούμε σας χειρογράφου στην οθόνη εδώ. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Εντάξει, ωραίο να σας γνωρίσουμε. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Χάρηκα που σας γνώρισα. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. MALAN: Εντάξει. 780 00:34:27,512 --> 00:34:28,969 Έτσι, super απλή άσκηση. 781 00:34:28,969 --> 00:34:31,440 Bar δεν είναι υψηλό σε πάρετε έναν ελέφαντα σήμερα. 782 00:34:31,440 --> 00:34:33,439 Παίζετε το ρόλο του GetString. 783 00:34:33,439 --> 00:34:35,980 Και Πάω να σας πω ακριβώς το string που έχετε πάρει. 784 00:34:35,980 --> 00:34:38,080 Και ας υποθέσουμε ότι, GetString, έχουν κληθεί. 785 00:34:38,080 --> 00:34:42,480 Και ο άνθρωπος, όπως εγώ, έχει δακτυλογραφημένες σε Zamyla, Ζ-Α-Μ-Υ-L-A. 786 00:34:42,480 --> 00:34:45,650 Απλά πηγαίνετε μπροστά και να γράψει Zamyla για το οθόνη σαν να έχουν πάρει 787 00:34:45,650 --> 00:34:47,250 και αυτό αποθηκεύεται κάπου στη μνήμη. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Φεύγοντας από το δωμάτιο για το τι θα είναι αρκετά άλλα words-- που είναι εντάξει, συνεχίζω. 790 00:34:55,570 --> 00:34:59,620 >> [Γέλια] 791 00:34:59,620 --> 00:35:00,800 >> Έτσι Zamyla, εξαιρετική. 792 00:35:00,800 --> 00:35:04,880 Ας υποθέσουμε ότι, GetString, καλούνται και πάλι. 793 00:35:04,880 --> 00:35:09,350 Και ως εκ τούτου, θα ήθελα να σας παρέχει, κατά το πληκτρολόγιο, με άλλο όνομα, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Εντάξει. 796 00:35:18,060 --> 00:35:22,380 Και τώρα η επόμενη φορά GetString είναι ονομάζεται, θα πληκτρολογήσετε κάτι σαν Gabe, 797 00:35:22,380 --> 00:35:27,560 G-Α-Β-Ε. Είσαι πραγματικά λαμβάνει στην καρδιά μνήμη τυχαίας προσπέλασης. 798 00:35:27,560 --> 00:35:29,631 Ποια είναι αντλώντας τα πάντα εντελώς τυχαία. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Γέλια] 801 00:35:31,104 --> 00:35:32,520 ALEX: Συγγνώμη χειρόγραφό μου είναι κακό. 802 00:35:32,520 --> 00:35:33,770 DAVID J. MALAN: Όχι, αυτό είναι εντάξει. 803 00:35:33,770 --> 00:35:40,480 Και τι γίνεται με τον Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Καλή. 805 00:35:41,020 --> 00:35:43,853 Γι 'αυτό και δεν προβλέπετε θα το είδος του θέσει τα πράγματα με αυτόν τον τρόπο. 806 00:35:43,853 --> 00:35:45,020 Αλλά μπορούμε να κάνουμε αυτό το έργο. 807 00:35:45,020 --> 00:35:48,810 Λοιπόν, πώς θα πάτε για τη θέσπιση από αυτές χαρακτήρες στη μνήμη; 808 00:35:48,810 --> 00:35:51,310 Με άλλα λόγια, αν σκεφτούμε Αυτό ορθογώνια μαύρη οθόνη 809 00:35:51,310 --> 00:35:53,550 καθώς αντιπροσωπεύει ένα υπολογιστή RAM, ή μνήμη. 810 00:35:53,550 --> 00:35:55,850 >> Και υπενθυμίζουν ότι η μνήμη RAM είναι απλά ένα σωρό bytes, 811 00:35:55,850 --> 00:35:57,480 και bytes είναι ένα σωρό κομμάτια. 812 00:35:57,480 --> 00:35:59,350 Και bits είναι κάπως εφαρμοστούν, γενικά 813 00:35:59,350 --> 00:36:01,119 με κάποια μορφή ηλεκτρικής ενέργειας σε hardware. 814 00:36:01,119 --> 00:36:03,160 Έτσι, αυτό είναι το είδος της layering έχουμε μιλήσει για 815 00:36:03,160 --> 00:36:04,510 και μπορεί να πάρει πλέον δεδομένο. 816 00:36:04,510 --> 00:36:07,020 Πώς θα πάτε για την να αποφασίσει πού να γράψει 817 00:36:07,020 --> 00:36:11,634 Rob έναντι Gabe έναντι Belinda έναντι Zamyla; 818 00:36:11,634 --> 00:36:14,020 >> ALEX: έκανα μόνο στο να διατάξει ότι μου είπες. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. MALAN: Και αυτό είναι αλήθεια. 820 00:36:15,650 --> 00:36:20,100 Αλλά αυτό που διέπεται όπου βάζετε Το όνομά Belinda και το όνομα Gabe είναι; 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Τίποτα; 822 00:36:20,764 --> 00:36:22,930 DAVID J. MALAN: [γελάει] Έτσι που λειτουργεί, ότι είναι μια χαρά. 823 00:36:22,930 --> 00:36:25,290 Έτσι, οι υπολογιστές είναι λίγο πιο ομαλή από ό, τι αυτό. 824 00:36:25,290 --> 00:36:29,000 Και έτσι όταν implement-- μείνει εκεί μόνο για ένα moment-- όταν στην πραγματικότητα 825 00:36:29,000 --> 00:36:31,470 εφαρμόσουν κάτι σαν GetString σε έναν υπολογιστή, 826 00:36:31,470 --> 00:36:34,480 Zamyla θα μπορούσε να τοποθετείται λίγο πολύ όπως κάνατε στην οθόνη, εκεί. 827 00:36:34,480 --> 00:36:36,660 >> Και αυτό είναι το κλειδί για να παρατηρήσετε εδώ, τι έκανε ο Alex, 828 00:36:36,660 --> 00:36:40,260 είναι ότι υπάρχει ένα είδος οριοθέτησης ανάμεσα σε κάθε μία από αυτές τις λέξεις, σωστά; 829 00:36:40,260 --> 00:36:46,580 Δεν έχετε γράψει Ζ-Α-Μ-Υ-L-Α-Β-Ε-Ε-Ι-Ν-ϋ-Α-G-Α-B-- 830 00:36:46,580 --> 00:36:49,740 Με άλλα λόγια, υπάρχει κάποιο είδος οριοθέτησης που φαίνεται να είναι, 831 00:36:49,740 --> 00:36:52,370 είδος, τυχαία απόσταση μεταξύ των διαφόρων αυτών λέξεων. 832 00:36:52,370 --> 00:36:54,120 Αλλά αυτό είναι καλό, γιατί εμείς οι άνθρωποι μπορούμε τώρα 833 00:36:54,120 --> 00:36:56,470 απεικονίσει ότι αυτά είναι τέσσερις διαφορετικές χορδές. 834 00:36:56,470 --> 00:36:59,540 Δεν είναι μόνο μία ακολουθία παρτίδων των χαρακτήρων. 835 00:36:59,540 --> 00:37:04,190 Έτσι ένας υπολογιστής, τότε, εν τω μεταξύ, θα μπορούσε να λάβει μια σειρά όπως Zamyla, 836 00:37:04,190 --> 00:37:07,220 που το καθένα από αυτά τα γράμματα μέσα από ένα byte της μνήμης. 837 00:37:07,220 --> 00:37:10,400 Αλλά αυτός ο αριθμός είναι πολύ μεγαλύτερος, φυσικά, από έξι χαρακτήρων. 838 00:37:10,400 --> 00:37:11,690 >> Υπάρχουν ένα σωρό RAM. 839 00:37:11,690 --> 00:37:15,330 Και έτσι πλέον, αυτό πλέγματος κουτιά πρόκειται 840 00:37:15,330 --> 00:37:17,560 να εκπροσωπεί ό, τι Alex μόνο έκανε εδώ στην οθόνη. 841 00:37:17,560 --> 00:37:20,937 Και τώρα, Alex, μπορούμε να σας το προσφέρουμε μπλε ή πορτοκαλί ελέφαντα από Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Θα πάρω μια μπλε ελέφαντα. 843 00:37:22,270 --> 00:37:23,120 DAVID J. MALAN: Ένα μπλε ελέφαντα. 844 00:37:23,120 --> 00:37:25,580 Έτσι, ένα μεγάλο χειροκρότημα, αν μπορούσαμε, για Alex εδώ. 845 00:37:25,580 --> 00:37:26,100 >> [Χειροκρότημα] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Σας ευχαριστώ. 847 00:37:26,766 --> 00:37:28,820 DAVID J. MALAN: Σας ευχαριστώ. 848 00:37:28,820 --> 00:37:36,230 Έτσι, το πακέτο είναι ότι, παρόλο που η μοτίβο είδος αλλάξει με την πάροδο του χρόνου, εδώ 849 00:37:36,230 --> 00:37:40,430 στο διοικητικό συμβούλιο, δεν υπήρχε αυτή η οριοθέτηση μεταξύ των διαφόρων χορδές 850 00:37:40,430 --> 00:37:42,610 ότι ο Alex πήρε για μας. 851 00:37:42,610 --> 00:37:45,230 Τώρα υπολογιστές, ειλικρινά, θα μπορούσε να κάνει το ίδιο πράγμα. 852 00:37:45,230 --> 00:37:48,210 Θα μπορούσαν είδος γδούπο χορδές οπουδήποτε στην μνήμη RAM. 853 00:37:48,210 --> 00:37:50,710 Μέχρι εδώ, εδώ, εδώ κάτω, εδώ κάτω. 854 00:37:50,710 --> 00:37:52,020 >> Θα μπορούσαν να κάνουν ακριβώς αυτό. 855 00:37:52,020 --> 00:37:54,280 Αλλά, φυσικά, αυτό είναι ίσως δεν είναι η καλύτερη σχεδιασμό. 856 00:37:54,280 --> 00:37:54,780 Σωστά; 857 00:37:54,780 --> 00:37:57,340 Αν ρωτούσε Alex να πάρτε τα ονόματα, πιθανότατα ο έπαιρνα 858 00:37:57,340 --> 00:38:01,370 τεθούν κάποια πιο κάτω εδώ, ίσως μέχρι εδώ, εδώ, εδώ, τελικά 859 00:38:01,370 --> 00:38:02,211 εδώ. 860 00:38:02,211 --> 00:38:05,460 Αλλά με λίγο περισσότερο προγραμματισμό, βεβαίως, θα μπορούσε να θέσει τα πράγματα πιο καθαρά. 861 00:38:05,460 --> 00:38:07,350 Και πράγματι, αυτό είναι ό, τι κάνει ένας υπολογιστής. 862 00:38:07,350 --> 00:38:10,720 >> Αλλά η σύλληψη είναι ότι εάν η επόμενη χορδή παίρνω 863 00:38:10,720 --> 00:38:14,050 μετά Zamyla είναι κάτι όπως και η Belinda, 864 00:38:14,050 --> 00:38:17,929 προτείνει, όπου θα μπορούσαμε να γράψει το γράμμα b σε σχέση με αυτό το πλέγμα; 865 00:38:17,929 --> 00:38:18,720 Πού θα πας; 866 00:38:18,720 --> 00:38:21,480 Στα δεξιά του α, κάτω από το Ζ, κάτω από το α; 867 00:38:21,480 --> 00:38:23,204 Ποια θα ήταν το πρώτο ένστικτό σας είναι; 868 00:38:23,204 --> 00:38:24,120 ΚΟΙΝΟ: Κάτω από το z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. MALAN: Έτσι, κάτω από το z. 870 00:38:25,100 --> 00:38:26,530 Και αυτό είναι αρκετά απλό, σωστά; 871 00:38:26,530 --> 00:38:29,321 Είναι το είδος του τακτοποιημένο, είναι ό, τι κάνουμε σε ένα πληκτρολόγιο, όταν έχουμε να πατήσετε το Enter, 872 00:38:29,321 --> 00:38:31,770 ή ένα μήνυμα ηλεκτρονικού ταχυδρομείου όταν κάνετε μια λίστα με κουκκίδες των πραγμάτων. 873 00:38:31,770 --> 00:38:34,310 Αλλά η πραγματικότητα είναι ότι οι υπολογιστές προσπαθούν να είναι πιο αποτελεσματική, 874 00:38:34,310 --> 00:38:37,170 και χώνω σίγουρα όσο δεδομένα στη μνήμη RAM του δυνατού, 875 00:38:37,170 --> 00:38:38,890 έτσι ώστε να μην χάνετε καμία bytes. 876 00:38:38,890 --> 00:38:41,545 Έτσι ώστε να μην χάνετε οποιαδήποτε οθόνη του real estate. 877 00:38:41,545 --> 00:38:44,170 Και το πρόβλημα, όμως, είναι ότι αν βάλουμε κυριολεκτικά το γράμμα 878 00:38:44,170 --> 00:38:49,940 β μετά, πώς θα πάμε να ξέρετε πού τελειώνει όνομα Zamyla του 879 00:38:49,940 --> 00:38:51,840 και αρχίζει το όνομα του Belinda είναι; 880 00:38:51,840 --> 00:38:55,270 Έτσι οι άνθρωποι μόλις πρότεινε, επίσης, χτύπησε το πλήκτρο Enter, κατ 'ουσίαν. 881 00:38:55,270 --> 00:38:56,410 Βάλτε το κάτω. 882 00:38:56,410 --> 00:38:59,750 Ή ακόμα, όπως έκανε ο Alex, μόλις αρχίσετε να γράφετε το επόμενο όνομα κάτω από το προηγούμενο, 883 00:38:59,750 --> 00:39:01,583 και κάτω από εκείνο το ένα, και στη συνέχεια, κάτω από αυτό το ένα. 884 00:39:01,583 --> 00:39:02,510 Αυτή είναι μια οπτική ένδειξη. 885 00:39:02,510 --> 00:39:05,960 >> Οι υπολογιστές έχουν μια άλλη οπτική ένδειξη, αλλά είναι λίγο πιο σύντομη. 886 00:39:05,960 --> 00:39:07,840 Είναι αυτό το funky χαρακτήρα. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, η οποία είναι ίσως θυμίζει backslash n, 888 00:39:11,890 --> 00:39:12,640 και ούτω καθεξής, τώρα. 889 00:39:12,640 --> 00:39:14,120 Οι ειδικές ακολουθίες διαφυγής. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 είναι ο τρόπος της αντιπροσωπεύουν οκτώ bits μηδέν σε μια σειρά. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Ο τρόπος που εκφράζουν ότι δεν είναι χτύπησε τον αριθμό μηδέν στο πληκτρολόγιό σας, 893 00:39:26,130 --> 00:39:28,140 γιατί στην πραγματικότητα η οποία είναι ένα char ASCII. 894 00:39:28,140 --> 00:39:30,990 Μοιάζει με έναν αριθμό, αλλά είναι στην πραγματικότητα ένα δεκαδικό αριθμό 895 00:39:30,990 --> 00:39:35,910 που αντιπροσωπεύει την εγκύκλιο γλύφω, η εγκύκλιος γραμματοσειρά. 896 00:39:35,910 --> 00:39:38,410 Εν τω μεταξύ, backslash μηδέν σημαίνει, κυριολεκτικά 897 00:39:38,410 --> 00:39:40,700 βάλει οκτώ μηδενικά bytes εδώ για μένα. 898 00:39:40,700 --> 00:39:42,136 >> Έτσι, αυτό είναι κάπως αυθαίρετη. 899 00:39:42,136 --> 00:39:44,260 Θα μπορούσα να έχω χρησιμοποιήσει οποιοδήποτε σχέδιο από bits, αλλά ο κόσμος 900 00:39:44,260 --> 00:39:46,610 αποφάσισε μερικά χρόνια πριν, ότι για να αντιπροσωπεύουν 901 00:39:46,610 --> 00:39:49,710 το τέλος ενός string στη μνήμη, απλά βάλτε ένα σωρό μηδενικά. 902 00:39:49,710 --> 00:39:51,000 Επειδή μπορούμε να ανιχνεύσουμε αυτό. 903 00:39:51,000 --> 00:39:54,790 Τώρα αυτό σημαίνει ότι δεν υπάρχει επιστολή του αλφάβητο μπορεί να εκπροσωπείται με μηδενικά. 904 00:39:54,790 --> 00:39:58,480 >> Αλλά αυτό είναι εντάξει, έχουμε ήδη δει ότι είμαστε χρησιμοποιώντας 65 για μέχρι το 97 και πάνω. 905 00:39:58,480 --> 00:40:00,290 Εμείς δεν πάρετε οπουδήποτε κλείσει σε όλα τα μηδενικά. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Έτσι Belinda στη μνήμη ενός υπολογιστή είναι πραγματικά πρόκειται να πάει εδώ. 908 00:40:06,540 --> 00:40:09,764 Έχω συντάξει σε κίτρινο μόνο να επιστήσει την προσοχή μας σε αυτό. 909 00:40:09,764 --> 00:40:11,680 Και προειδοποίηση, πάρα πολύ, αυτό είναι εντελώς αυθαίρετη. 910 00:40:11,680 --> 00:40:12,680 Έχω σχεδιαστεί ως ένα πλέγμα. 911 00:40:12,680 --> 00:40:14,460 Όπως, μνήμη RAM είναι μερικά μόνο φυσικό αντικείμενο. 912 00:40:14,460 --> 00:40:17,300 Δεν έχουν απαραίτητα γραμμές και στήλες, ανά se. 913 00:40:17,300 --> 00:40:20,490 Είναι μόλις πήρε ένα σωρό bytes υλοποιείται σε υλικό με κάποιο τρόπο. 914 00:40:20,490 --> 00:40:22,817 Αλλά αν μετά Belinda I πληκτρολογήσει στο όνομα Gabe του, 915 00:40:22,817 --> 00:40:25,650 ότι πρόκειται να καταλήξουν εδώ στη μνήμη, και αν πληκτρολογήσει το όνομα Daven του, 916 00:40:25,650 --> 00:40:27,316 για παράδειγμα, ότι πρόκειται να καταλήγουν εδώ. 917 00:40:27,316 --> 00:40:29,310 Και μπορώ να συνεχίσω να γράψει ακόμα περισσότερα ονόματα. 918 00:40:29,310 --> 00:40:32,100 >> Δυστυχώς, αν προσπαθώ να γράφετε ένα σούπερ μεγάλο όνομα, 919 00:40:32,100 --> 00:40:33,730 Θα ήθελα να τρέχει τελικά έξω από τη μνήμη. 920 00:40:33,730 --> 00:40:37,810 Σε αυτή την περίπτωση, είναι GetString πρόκειται να επιστρέψει NULL, όπως είπαμε. 921 00:40:37,810 --> 00:40:41,720 Αλλά ευτυχώς, τουλάχιστον σε αυτό το οπτικό εδώ, δεν πήραμε αρκετά τόσο μακριά. 922 00:40:41,720 --> 00:40:45,860 >> Τώρα τι είναι ωραίο είναι ότι αυτό γενική ιδέα της κατεργασίας πραγμάτων 923 00:40:45,860 --> 00:40:49,720 όπως είναι σε κουτιά είναι εκπρόσωπος ενός χαρακτηριστικού από C 924 00:40:49,720 --> 00:40:52,690 και πολλές γλώσσες, γνωστό ως συστοιχία. 925 00:40:52,690 --> 00:40:55,490 Μια συστοιχία είναι ένας άλλος τύπος δεδομένων. 926 00:40:55,490 --> 00:40:57,380 Είναι μια δομή δεδομένων, αν θέλετε. 927 00:40:57,380 --> 00:41:01,160 Δομή, υπό την έννοια της πραγματικά, το είδος του, που αναζητούν σαν ένα κουτί, τουλάχιστον 928 00:41:01,160 --> 00:41:02,320 στο μάτι του μυαλού σας. 929 00:41:02,320 --> 00:41:09,680 Ένας πίνακας είναι ένα συνεχόμενο αλληλουχία των ίδιων τύπων δεδομένων, 930 00:41:09,680 --> 00:41:11,330 πίσω στην πλάτη με πλάτη με πλάτη. 931 00:41:11,330 --> 00:41:14,720 >> Έτσι, ένα κορδόνι, σε άλλες λόγια, είναι μια σειρά από χαρακτήρες. 932 00:41:14,720 --> 00:41:16,120 Μια σειρά από χαρακτήρες. 933 00:41:16,120 --> 00:41:19,070 Αλλά τελικά μπορείτε να έχετε συστοιχίες των σταφυλιών των πραγμάτων. 934 00:41:19,070 --> 00:41:21,870 Στην πραγματικότητα, μπορούμε να βάλουμε ακόμα αριθμούς σε μία συστοιχία. 935 00:41:21,870 --> 00:41:23,920 Έτσι ώστε η μορφή με την οποία θα πάμε για να ξεκινήσει 936 00:41:23,920 --> 00:41:26,590 δηλώνοντας τα δεδομένα δομή που είναι γνωστή ως μία συστοιχία 937 00:41:26,590 --> 00:41:28,250 πρόκειται επίσης να χρησιμοποιήσετε αγκύλες. 938 00:41:28,250 --> 00:41:31,500 Αλλά αυτές οι αγκύλες πρόκειται να έχουν διαφορετική σημασία σε αυτό το πλαίσιο. 939 00:41:31,500 --> 00:41:33,450 >> Και ας το δούμε ως εξής. 940 00:41:33,450 --> 00:41:36,780 Ας υποθέσουμε ότι άνοιξα μέχρι ένα νέο αρχείο εδώ. 941 00:41:36,780 --> 00:41:38,535 Και εγώ να αποθηκεύσετε αυτή ως ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Και εγώ θα σώσει αυτό το φάκελο μου εδώ. 944 00:41:43,470 --> 00:41:46,130 Και τώρα είμαι πρόκειται να πάει μπροστά και να αρχίσετε να πληκτρολογείτε κάτι 945 00:41:46,130 --> 00:41:53,940 όπως περιλαμβάνονται CS50.h, περιλαμβάνουν stdio.h, int κύρια κενό. 946 00:41:53,940 --> 00:41:57,370 Και τότε μέσα από εδώ, θέλω να έχουν πρώτα μια int που ονομάζεται ηλικία. 947 00:41:57,370 --> 00:42:01,371 >> Και Πάω να χρησιμοποιήσετε ότι για να πάρετε μια int από το χρήστη για την ηλικία του. 948 00:42:01,371 --> 00:42:04,620 Αλλά αυτό το πρόγραμμα εννοείται να χρησιμοποιηθεί από πολλά άτομα, για οποιοδήποτε πλαίσιο. 949 00:42:04,620 --> 00:42:05,490 Έχω μια σειρά από ανθρώπους. 950 00:42:05,490 --> 00:42:08,281 Όλα αυτά πρέπει να πληκτρολογήσετε τους ηλικία ίσως για κάποιους, δεν ξέρω, 951 00:42:08,281 --> 00:42:10,530 ανταγωνισμού, ή εκδήλωση ότι έχουν έρθει για. 952 00:42:10,530 --> 00:42:13,030 Έτσι, το επόμενο πρόσωπο, I Χρειάζεται μια άλλη μεταβλητή. 953 00:42:13,030 --> 00:42:15,790 >> Διότι αν εγώ απλά κάνω ηλικία παίρνει getInt, ότι είναι 954 00:42:15,790 --> 00:42:18,500 πρόκειται να κοπανάω, ή να αντικαταστήσετε ηλικία του προηγούμενου ατόμου. 955 00:42:18,500 --> 00:42:19,760 Έτσι, αυτό δεν είναι καλό. 956 00:42:19,760 --> 00:42:21,790 Έτσι το πρώτο μου ένστικτο θα μπορούσε να είναι, ω, εντάξει, 957 00:42:21,790 --> 00:42:26,260 αν θέλω να πάρω πολλούς ανθρώπους του ages-- ας ονομάσουμε αυτό AGE1, 958 00:42:26,260 --> 00:42:31,280 int Age2 παίρνει int, int age3 παίρνει getInt. 959 00:42:31,280 --> 00:42:35,340 Και τώρα θα πάω να χρησιμοποιήσετε μερικά κωδικό ψευδοκώδικα εδώ. 960 00:42:35,340 --> 00:42:37,679 >> Κάντε κάτι με αυτούς τους αριθμούς. 961 00:42:37,679 --> 00:42:40,470 Θα αφήσουμε για μια άλλη μέρα ό, τι κάνουμε εκεί, γιατί μόνο 962 00:42:40,470 --> 00:42:44,200 νοιάζονται για το παρόν για AGE1, Age2, age3. 963 00:42:44,200 --> 00:42:46,450 Δυστυχώς, από τη στιγμή που την κατάρτιση αυτού του προγράμματος 964 00:42:46,450 --> 00:42:51,140 και να βάλουμε μπροστά από πραγματικούς χρήστες, ποια είναι η θεμελιωδώς κακό σχεδιασμό 965 00:42:51,140 --> 00:42:53,890 απόφαση που φαίνεται να έχουν κάνει; 966 00:42:53,890 --> 00:42:54,624 Ναι; 967 00:42:54,624 --> 00:42:55,499 ΚΟΙΝΟ: [δεν ακούγεται] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. MALAN: Ναι, Δεν έχω δοκιμάσει ακόμα 970 00:42:59,820 --> 00:43:02,028 να καταλάβω πόσα ηλικίες μπορώ πραγματικά νοιάζονται για; 971 00:43:02,028 --> 00:43:05,380 Αν έχω λιγότερα από τρία άτομα εδώ, και, συνεπώς, λιγότερες από τρεις αιώνες, 972 00:43:05,380 --> 00:43:07,260 Είμαι ακόμα τυφλά περιμένει τρεις. 973 00:43:07,260 --> 00:43:08,720 Θεός φυλάξοι τέσσερις άνθρωποι εμφανίζονται. 974 00:43:08,720 --> 00:43:10,990 Το πρόγραμμά μου απλά δεν θα τους στηρίξει ακόμα. 975 00:43:10,990 --> 00:43:13,280 >> Και έτσι αυτό, μεγάλη ιστορία Με λίγα λόγια, δεν είναι μια καλή συνήθεια. 976 00:43:13,280 --> 00:43:13,780 Σωστά; 977 00:43:13,780 --> 00:43:16,530 Ήμουν ουσιαστικά αντιγραφή και επικόλληση του κώδικα και μόνο μικροαλλαγές 978 00:43:16,530 --> 00:43:17,430 τα ονόματα των μεταβλητών. 979 00:43:17,430 --> 00:43:22,410 Και, Θεέ μου, αν είχε, δεν είναι τρεις ηλικιών, αλλά 10, ή 100, ή ακόμη και 6500 980 00:43:22,410 --> 00:43:23,820 προπτυχιακούς φοιτητές, για παράδειγμα. 981 00:43:23,820 --> 00:43:26,950 Αυτό δεν πρόκειται να είναι ιδιαίτερα κομψό κώδικα, ή βιώσιμη. 982 00:43:26,950 --> 00:43:29,200 Θα πάμε να πρέπει να ξαναγράψουμε το πρόγραμμα κάθε φορά 983 00:43:29,200 --> 00:43:30,760 τον αριθμό των ανθρώπων αλλαγές. 984 00:43:30,760 --> 00:43:35,090 >> Έτσι, ευτυχώς, στην πραγματική μας ages.c αρχείο για σήμερα, 985 00:43:35,090 --> 00:43:36,970 έχουμε μια πιο έξυπνη λύση. 986 00:43:36,970 --> 00:43:39,800 Πρώτον, Πάω να δανειστεί η κατασκευάσει έχουμε χρησιμοποιήσει μερικές φορές, 987 00:43:39,800 --> 00:43:43,744 Αυτό κάνουμε, ενώ βρόχο, προκειμένου να πάρει ο αριθμός των ατόμων στο δωμάτιο. 988 00:43:43,744 --> 00:43:46,910 Είμαι ακριβώς πρόκειται να ταλαιπωρούν τον χρήστη, και πάλι και πάλι, έως ότου αυτός ή αυτή μου δίνει 989 00:43:46,910 --> 00:43:49,260 μια τιμή του η που είναι ένας θετικός ακέραιος. 990 00:43:49,260 --> 00:43:51,590 >> Θα μπορούσε να χρησιμοποιηθεί, το τελευταίο χρόνο για να πάρει θετικό int. 991 00:43:51,590 --> 00:43:53,720 Αλλά δεν έχουμε ότι για την πραγματική, έτσι πήγα μπροστά 992 00:43:53,720 --> 00:43:55,660 και εκ νέου σε εφαρμογή αυτή την ιδέα. 993 00:43:55,660 --> 00:43:58,410 Τώρα, εδώ κάτω, αυτό είναι το νέο κόλπο. 994 00:43:58,410 --> 00:44:02,260 Στη γραμμή 27, όπως τα σχόλια στη γραμμή 26 υποδεικνύει, 995 00:44:02,260 --> 00:44:05,180 δηλώνουν μια σειρά στην οποία για να αποθηκεύσετε την ηλικία του καθενός. 996 00:44:05,180 --> 00:44:09,320 >> Έτσι, εάν θέλετε να πάρετε, δεν είναι ένα int, δεν δύο ακεραίων, αλλά ένα σωρό από ints. 997 00:44:09,320 --> 00:44:13,800 Συγκεκριμένα n ακέραιοι, ήταν n μπορούσε είναι τρία, θα μπορούσε να είναι 100, θα μπορούσε να είναι 1000. 998 00:44:13,800 --> 00:44:17,570 Η σύνταξη, πολύ απλά, είναι να ας πούμε, τι είδους δεδομένα θέλεις; 999 00:44:17,570 --> 00:44:19,620 Τι θέλετε να καλέσετε ότι κομμάτι της μνήμης; 1000 00:44:19,620 --> 00:44:23,530 Τι θέλετε να καλέσετε το δίκτυο που μοιάζει με αυτό εικονογραφικά; 1001 00:44:23,530 --> 00:44:27,700 >> Και σε παρένθεση εδώ, λες πόσο μεγάλο θέλετε ο πίνακας να είναι. 1002 00:44:27,700 --> 00:44:30,450 Και έτσι νωρίτερα, όταν είπε ότι η σύνταξη είναι λίγο διαφορετικά εδώ, 1003 00:44:30,450 --> 00:44:33,614 είμαστε ακόμα χρησιμοποιώντας αγκύλες, αλλά όταν είμαι δηλώνοντας μια σειρά, 1004 00:44:33,614 --> 00:44:35,530 ο αριθμός εσωτερικό του αγκύλες μέσα 1005 00:44:35,530 --> 00:44:37,610 πόσο μεγάλο θέλετε ο πίνακας να είναι. 1006 00:44:37,610 --> 00:44:42,490 >> Αντίθετα, όταν ήμασταν χρησιμοποιώντας s βραχίονα i πριν από λίγο, s, ένα string, 1007 00:44:42,490 --> 00:44:46,820 Είναι πράγματι μια σειρά από χαρακτήρες, αλλά όταν δεν είστε δηλώνοντας μια μεταβλητή, 1008 00:44:46,820 --> 00:44:49,760 όπως με τη λέξη κλειδί εδώ, είστε απλά να πάρει 1009 00:44:49,760 --> 00:44:54,280 ένα συγκεκριμένο δείκτη, ένα ειδικό στοιχείο από την εν λόγω συστοιχία. 1010 00:44:54,280 --> 00:44:57,090 Αφού γνωρίζουμε ότι, το υπόλοιπο από αυτό είναι απλή. 1011 00:44:57,090 --> 00:45:00,765 Αν το νέο είμαι πρώτος πρόκειται να εκτυπώσετε Ποια είναι η ηλικία του ατόμου αριθμό i. 1012 00:45:00,765 --> 00:45:03,890 Πού μπορώ να πω τον αριθμό ένα άτομο, Αριθμός πρόσωπο δύο, πρόσωπο αριθμό τρία. 1013 00:45:03,890 --> 00:45:06,306 >> Και είμαι ακριβώς κάνει αριθμητική, έτσι ώστε σαν κανονικοί άνθρωποι, 1014 00:45:06,306 --> 00:45:09,030 μετράμε από το ένα για αυτό προγράμματος, και όχι από το μηδέν. 1015 00:45:09,030 --> 00:45:13,620 Στη συνέχεια, καλώ getint, αλλά έχω αποθηκεύσει η απάντηση στις ηλικίες περικλείουν i. 1016 00:45:13,620 --> 00:45:16,610 Ποια είναι η ί-οστό ηλικίας στον πίνακα. 1017 00:45:16,610 --> 00:45:21,640 Έτσι, λαμβάνοντας υπόψη ότι η τελευταία φορά που ήμασταν θεραπεία αυτά τα κιβώτια ως χαρακτήρες για το όνομα Zamyla του, 1018 00:45:21,640 --> 00:45:22,490 και άλλοι. 1019 00:45:22,490 --> 00:45:26,530 Τώρα, αυτά τα κουτιά αντιπροσωπεύουν 32 bits, ή τέσσερα bytes 1020 00:45:26,530 --> 00:45:29,510 στην οποία μπορούμε να αποθηκεύσουμε ένα int, ένας int, ένας int. 1021 00:45:29,510 --> 00:45:31,890 Όλα από τα οποία, και πάλι, είναι το ίδιο τύπο δεδομένων. 1022 00:45:31,890 --> 00:45:33,890 >> Τώρα μπορώ να κάνω κάτι ανόητο, όπως το πέρασμα του χρόνου, απλά 1023 00:45:33,890 --> 00:45:35,510 να δικαιολογήσει γράφοντας αυτό το πρόγραμμα. 1024 00:45:35,510 --> 00:45:40,050 Και στη συνέχεια, εδώ κάτω, εγώ πάλι επαναλήψεις πάνω από τον πίνακα λέγοντας ένα χρόνο από τώρα, 1025 00:45:40,050 --> 00:45:43,090 αριθμό ένα άτομο βούληση είναι κάτι ετών. 1026 00:45:43,090 --> 00:45:45,010 Και για να καταλάβω ότι math-- Εννοώ, αυτό 1027 00:45:45,010 --> 00:45:49,260 Δεν είναι πολύ περίπλοκη arithmetic-- Θα ήθελα να προσθέσω ένα με την ηλικία τους. 1028 00:45:49,260 --> 00:45:51,240 Ακριβώς για να αποδείξει, και πάλι, αυτό. 1029 00:45:51,240 --> 00:45:57,910 >> Ακριβώς όπως μπορώ δείκτης σε μια σειρά, s, έτσι μπορώ δείκτη σε ένα πίνακα των ηλικιών, 1030 00:45:57,910 --> 00:45:59,950 όπως ότι υπάρχει. 1031 00:45:59,950 --> 00:46:03,340 Λοιπόν, πού είναι αυτή η μετάβαση να μας παίρνετε; 1032 00:46:03,340 --> 00:46:07,070 Έτσι θα δούμε, τελικά, ένα Λίγα πράγματα στις μέρες που έρχονται. 1033 00:46:07,070 --> 00:46:09,510 Ένα, όλο αυτό το διάστημα, όταν γράφοντας τα δικά σας προγράμματα, 1034 00:46:09,510 --> 00:46:11,239 όπως Mario, άπληστοι, πιστωτικές. 1035 00:46:11,239 --> 00:46:13,780 Έχετε πληκτρολογώντας το όνομα του το πρόγραμμα και το χτύπημα Enter. 1036 00:46:13,780 --> 00:46:15,610 Και στη συνέχεια να πάρει την είσοδο του χρήστη. 1037 00:46:15,610 --> 00:46:18,137 >> Με GetString, getInt, getLongLong, ή τα παρόμοια. 1038 00:46:18,137 --> 00:46:20,720 Αλλά αποδεικνύεται ότι τα στηρίγματα C κάτι που ονομάζεται γραμμή εντολών 1039 00:46:20,720 --> 00:46:25,740 επιχειρήματα, τα οποία πρόκειται να μας αφήσει πραγματικά να πάρει τα λόγια που πληκτρολογείτε, 1040 00:46:25,740 --> 00:46:28,570 στο αναβοσβήνει εντολών, μετά το όνομα του προγράμματός σας. 1041 00:46:28,570 --> 00:46:31,430 >> Έτσι, στις μέρες που έρχονται, θα να πληκτρολογήσετε κάτι σαν Καίσαρα, 1042 00:46:31,430 --> 00:46:34,950 ή ./caesar αριθμό 13, στη συνέχεια. 1043 00:46:34,950 --> 00:46:36,070 Θα δούμε πώς αυτό λειτουργεί. 1044 00:46:36,070 --> 00:46:37,550 Διότι πράγματι, σε πρόβλημα που δύο, είμαστε 1045 00:46:37,550 --> 00:46:39,383 πρόκειται να σας παρουσιάσουμε σε ένα μικρό κάτι 1046 00:46:39,383 --> 00:46:42,360 θυμίζει Ralphie του αμφισβητήσει νωρίτερα από χαρτογραφίας. 1047 00:46:42,360 --> 00:46:43,970 Η τέχνη της κρυπτογράφησης των πληροφοριών. 1048 00:46:43,970 --> 00:46:46,660 Αυτό, στην πραγματικότητα, είναι πολύ θυμίζει τι έκανε Ralphie. 1049 00:46:46,660 --> 00:46:51,380 >> Αυτό είναι ένα παράδειγμα ενός κρυπτογράφησης αλγόριθμος ονομάζεται rot13, Κ-Ο-Τ 13. 1050 00:46:51,380 --> 00:46:54,910 Πράγμα που σημαίνει απλά περιστρέψτε το γράμματα του αλφαβήτου 13 θέσεις. 1051 00:46:54,910 --> 00:46:58,309 Και αν το κάνετε αυτό, θα δείτε τώρα τι είναι, ίσως, μια γνωστή φράση. 1052 00:46:58,309 --> 00:47:01,100 Αλλά ο τρόπος με τον οποίο πρόκειται να χρησιμοποιήσει αυτό, τελικά, είναι πιο γενικά. 1053 00:47:01,100 --> 00:47:04,390 >> Στην P έθεσε δύο, στην βασική έκδοση, θα εφαρμόσει ένα ζευγάρι από αλγόριθμους κρυπτογράφησης, 1054 00:47:04,390 --> 00:47:06,720 μία που ονομάζεται Καίσαρα, μια που ονομάζεται Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Και οι δύο από αυτούς είναι περιστροφική αλγόριθμους κρυπτογράφησης, στο ότι με κάποιο τρόπο θα 1056 00:47:10,090 --> 00:47:11,826 μετατρέψει ένα γράμμα σε ένα άλλο γράμμα. 1057 00:47:11,826 --> 00:47:12,950 Και ο Καίσαρας είναι εξαιρετικά απλή. 1058 00:47:12,950 --> 00:47:16,220 Μπορείτε να προσθέσετε ένα, μπορείτε να προσθέσετε 13, ή κάποιος αριθμός έως 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere κάνει ότι για ένα ανά επιστολή βάση. 1060 00:47:19,570 --> 00:47:22,140 Έτσι Vigenere, όπως θα δείτε στο spec, είναι πιο ασφαλές. 1061 00:47:22,140 --> 00:47:24,973 >> Αλλά στο τέλος της ημέρας τι θα σας την εφαρμογή και P έθεσε δύο, 1062 00:47:24,973 --> 00:47:29,050 είναι ότι το κλειδί που χρησιμοποιείτε και τις δύο για την κρυπτογράφηση και αποκρυπτογράφηση. 1063 00:47:29,050 --> 00:47:32,160 Αναφερόμενος στην διαδικασία της μετατροπής απλό κείμενο, μερικά αρχικό μήνυμα, 1064 00:47:32,160 --> 00:47:34,490 σε cypher κείμενο, το οποίο Είναι κάτι κρυπτογραφημένα. 1065 00:47:34,490 --> 00:47:36,220 Και στη συνέχεια αποκρυπτογράφηση και πάλι. 1066 00:47:36,220 --> 00:47:38,119 >> Στην έκδοση του χάκερ, Εν τω μεταξύ, θα είναι 1067 00:47:38,119 --> 00:47:40,660 επιφορτισμένη με κάτι παρόμοιο στο πνεύμα, όπου θα σας δώσουμε 1068 00:47:40,660 --> 00:47:44,610 ένα αρχείο, από ένα τυπικό Linux, ή Mac, Unix ή υπολογιστή που ονομάζεται etsy 1069 00:47:44,610 --> 00:47:47,800 κωδικό πρόσβασης, το οποίο περιέχει ένα σύνολο δέσμη των ονομάτων χρηστών και κωδικών πρόσβασης. 1070 00:47:47,800 --> 00:47:50,932 Και αυτοί οι κωδικοί πρόσβασης έχουν όλα κρυπτογραφημένα, ή κατακερματισμένο, 1071 00:47:50,932 --> 00:47:53,140 να το πω έτσι, πιο σωστά όπως θα δείτε στο spec. 1072 00:47:53,140 --> 00:47:57,090 >> Και η έκδοση του χάκερ θα αμφισβητήσουν σας με τη λήψη μια είσοδο, όπως αυτή, 1073 00:47:57,090 --> 00:47:58,800 και πυρόλυση τον κωδικό πρόσβασης. 1074 00:47:58,800 --> 00:48:02,590 Δηλαδή, υπολογίζοντας τι η κωδικό πρόσβασης του ανθρώπου στην πραγματικότητα ήταν. 1075 00:48:02,590 --> 00:48:05,570 Επειδή, μάλιστα, οι κωδικοί πρόσβασης είναι γενικά δεν αποθηκεύονται στο σαφές, 1076 00:48:05,570 --> 00:48:08,260 και γενικά τους κωδικούς πρόσβασης θα πρέπει να είναι δύσκολο να μαντέψει. 1077 00:48:08,260 --> 00:48:09,610 Αυτό δεν είναι συχνά η περίπτωση. 1078 00:48:09,610 --> 00:48:12,110 >> Και ό, τι νόμιζα ότι είχαμε να κάνουμε είναι συνάπτει με ένα ζευγάρι λεπτά 1079 00:48:12,110 --> 00:48:15,160 ματιά σε ένα ιδιαίτερα κακή επιλογή των κωδικών πρόσβασης 1080 00:48:15,160 --> 00:48:17,260 από μια ταινία που θα μπορούσε να ανακαλέσετε στοργικά. 1081 00:48:17,260 --> 00:48:18,915 Και αν όχι, θα πρέπει να νοικιάσετε. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO PLAYBACK] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Μπορείτε δαίμονας, τι συμβαίνει; 1084 00:48:22,320 --> 00:48:24,240 Τι κάνεις στην κόρη μου; 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Μου να εισαγάγει το λαμπρή μικρά πλαστικό χειρουργό, 1086 00:48:28,010 --> 00:48:30,010 Γιατρός Phillip Σλότκιν. 1087 00:48:30,010 --> 00:48:35,020 Η μεγαλύτερη μύτη άνθρωπος εργασίας στην ολόκληρο το σύμπαν και το Μπέβερλι Χιλς. 1088 00:48:35,020 --> 00:48:36,140 >> -Ο Υψηλότατε. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Δουλειά; 1090 00:48:36,820 --> 00:48:37,700 Δεν καταλαβαίνω. 1091 00:48:37,700 --> 00:48:39,070 Έχει ήδη είχε μια εργασία μύτης. 1092 00:48:39,070 --> 00:48:40,800 Ήταν την γλυκιά 16 του παρόντος. 1093 00:48:40,800 --> 00:48:42,590 >> Όχι, δεν είναι αυτό που νομίζετε. 1094 00:48:42,590 --> 00:48:44,490 Είναι πολύ, πολύ χειρότερα. 1095 00:48:44,490 --> 00:48:48,160 Αν δεν μου δώσετε το συνδυασμό με την ασπίδα αέρα, 1096 00:48:48,160 --> 00:48:52,748 Ο γιατρός Σλότκιν θα δώσει σας Η κόρη πίσω παλιά μύτη της. 1097 00:48:52,748 --> 00:48:53,748 - [Λαχανιάζει] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Πού το βρήκες αυτό; 1100 00:48:59,652 --> 00:49:00,640 >> Εντάξει. 1101 00:49:00,640 --> 00:49:02,506 Θα σας πω, εγώ θα πω. 1102 00:49:02,506 --> 00:49:03,498 >> Όχι, μπαμπά, δεν υπάρχει. 1103 00:49:03,498 --> 00:49:04,490 Δεν πρέπει. 1104 00:49:04,490 --> 00:49:06,090 >> -Είσαι Σωστά αγαπητέ μου. 1105 00:49:06,090 --> 00:49:07,390 Θα μου λείψει η νέα μύτη σας. 1106 00:49:07,390 --> 00:49:10,990 Αλλά εγώ δεν θα τους το πει συνδυασμός δεν έχει σημασία τι. 1107 00:49:10,990 --> 00:49:12,450 >> Οι πολύ καλά. 1108 00:49:12,450 --> 00:49:14,830 Γιατρός Σλότκιν, όσο χειρότερα τόσο καλύτερα. 1109 00:49:14,830 --> 00:49:15,744 >> -Το Ευχαρίστηση. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -NO! 1112 00:49:20,800 --> 00:49:22,780 Περιμένετε, περιμένετε. 1113 00:49:22,780 --> 00:49:24,000 Θα το πω. 1114 00:49:24,000 --> 00:49:25,830 Θα το πω. 1115 00:49:25,830 --> 00:49:28,270 >> -I Ήξερε ότι θα μπορούσε να λειτουργήσει. 1116 00:49:28,270 --> 00:49:31,390 Εντάξει, να μου το δώσεις. 1117 00:49:31,390 --> 00:49:36,220 >> -η Συνδυασμός είναι ένα. 1118 00:49:36,220 --> 00:49:36,740 >> -Ένα. 1119 00:49:36,740 --> 00:49:37,473 >> -Ένα. 1120 00:49:37,473 --> 00:49:37,972 -Δύο. 1121 00:49:37,972 --> 00:49:38,471 -Δύο. 1122 00:49:38,471 --> 00:49:39,800 -Δύο. 1123 00:49:39,800 --> 00:49:40,300 -Τρία. 1124 00:49:40,300 --> 00:49:40,800 -Τρία. 1125 00:49:40,800 --> 00:49:41,800 -Τρία. 1126 00:49:41,800 --> 00:49:42,300 -Τέσσερα. 1127 00:49:42,300 --> 00:49:42,800 -Τέσσερα. 1128 00:49:42,800 --> 00:49:44,707 -Τέσσερα. 1129 00:49:44,707 --> 00:49:45,521 -Πέντε. 1130 00:49:45,521 --> 00:49:46,430 -Πέντε. 1131 00:49:46,430 --> 00:49:47,930 -Πέντε. 1132 00:49:47,930 --> 00:49:53,480 -Οπότε Ο συνδυασμός είναι ένας, δύο, τρία, τέσσερα, πέντε. 1133 00:49:53,480 --> 00:49:56,140 Αυτό είναι το πιο χαζό συνδυασμός Έχω ακούσει ποτέ στη ζωή μου. 1134 00:49:56,140 --> 00:49:58,640 Αυτό είναι το είδος των πράγμα που ένας ηλίθιος θα έχει στις αποσκευές του. 1135 00:49:58,640 --> 00:50:00,000 >> -Ευχαριστώ, Υψηλότατε σας. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Τι έκανες; 1138 00:50:02,450 --> 00:50:03,800 >> -I Απενεργοποιήσει το τείχος. 1139 00:50:03,800 --> 00:50:05,010 >> Όχι, δεν το κάνατε, σας απενεργοποιήσει ολόκληρη την ταινία. 1140 00:50:05,010 --> 00:50:06,220 >> -I Must've πάτησε το λάθος κουμπί. 1141 00:50:06,220 --> 00:50:07,064 >> -Λοιπόν, Να επαναφέρει την! 1142 00:50:07,064 --> 00:50:07,910 Βάλτε την ταινία πίσω! 1143 00:50:07,910 --> 00:50:08,300 >> Ναι, κύριε! 1144 00:50:08,300 --> 00:50:08,799 Ναι, κύριε. 1145 00:50:08,799 --> 00:50:09,660 -Πάμε, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Έλα, Γκρέτσεν. 1147 00:50:10,450 --> 00:50:12,533 Φυσικά ξέρετε εγώ θα Πρέπει να σας χρεώσει για αυτό. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 -Λοιπόν; 1150 00:50:17,220 --> 00:50:17,802 Μήπως αυτό το έργο; 1151 00:50:17,802 --> 00:50:18,510 Πού είναι ο βασιλιάς; 1152 00:50:18,510 --> 00:50:20,218 >> -It Εργαστεί, κύριε, εμείς έχουν το συνδυασμό. 1153 00:50:20,218 --> 00:50:20,740 Ωραία. 1154 00:50:20,740 --> 00:50:24,810 Τώρα μπορούμε να πάρουμε και την τελευταία ανάσα φρέσκου αέρα από τον πλανήτη Δρυϊδία. 1155 00:50:24,810 --> 00:50:25,890 Τι είναι ο συνδυασμός; 1156 00:50:25,890 --> 00:50:28,155 >> -Ένα, Δύο, τρία, τέσσερα, πέντε. 1157 00:50:28,155 --> 00:50:29,890 >> -Ένα, Δύο, τρία, τέσσερα, πέντε; 1158 00:50:29,890 --> 00:50:30,390 Ναι. 1159 00:50:30,390 --> 00:50:31,110 -Αυτό Είναι εκπληκτικό. 1160 00:50:31,110 --> 00:50:34,550 Έχω την ίδια συνδυασμό στις αποσκευές μου. 1161 00:50:34,550 --> 00:50:37,160 Προετοιμάστε Spaceball 1 για άμεση αναχώρηση. 1162 00:50:37,160 --> 00:50:38,160 >> Ναι, κύριε. 1163 00:50:38,160 --> 00:50:40,745 >> -Και Αλλάξει η συνδυασμό στις αποσκευές μου. 1164 00:50:40,745 --> 00:50:41,578 [DOOR ΚΛΕΙΣΙΜΟ ΗΧΟΥ] 1165 00:50:41,578 --> 00:50:42,064 [CLINK ΤΩΝ ΘΥΡΩΝ ΧΤΥΠΗΜΑ ΚΡΑΝΟΣ] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [ΤΕΛΟΣ VIDEO PLAYBACK] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. MALAN: Αυτό είναι για CS50, θα τα πούμε την επόμενη εβδομάδα. 1169 00:50:46,700 --> 00:50:49,883 NARRATOR: Και τώρα, Deep Σκέψεις, από Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Κωδικοποίηση σε C είναι πολύ πιο δύσκολο από ό, τι Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch ήταν ένα ψέμα. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [ΓΕΛΙΟ Soundbite] 1175 00:51:01,430 --> 00:51:02,486