1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J. MALAN: Εντάξει. 5 00:00:12,660 --> 00:00:15,590 Αυτό είναι CS50, και αυτό είναι η αρχή των δύο εβδομάδων. 6 00:00:15,590 --> 00:00:19,120 Ας ξεκινήσουμε λοιπόν σήμερα με ένα bug. 7 00:00:19,120 --> 00:00:20,974 Ένα έντομο, φυσικά, είναι ένα λάθος σε ένα πρόγραμμα, 8 00:00:20,974 --> 00:00:22,890 και θα πάρετε πολύ εξοικειωμένοι με την έννοια 9 00:00:22,890 --> 00:00:26,050 αν δεν έχετε προγραμματίσει πριν. pset0 και τώρα pset1. 10 00:00:26,050 --> 00:00:29,280 Αλλά ας αναλογιστούμε κάτι λίγο απλό στην αρχή. 11 00:00:29,280 --> 00:00:32,189 Αυτό το πρόγραμμα εδώ ότι εγώ έριξε μαζί εκ των προτέρων, 12 00:00:32,189 --> 00:00:37,280 και ισχυρίζονται ότι αυτό θα πρέπει να εκτυπώσετε 10 αστέρια στην οθόνη χρησιμοποιώντας printf, 13 00:00:37,280 --> 00:00:41,020 αλλά αυτό είναι προφανώς προβληματικός κατά κάποιο τρόπο. 14 00:00:41,020 --> 00:00:45,370 >> Δεδομένου ότι η προδιαγραφή ότι θα πρέπει να εκτυπώσετε 10 αστέρων, 15 00:00:45,370 --> 00:00:50,230 αλλά αυτό δεν συμβαίνει προφανώς, τι θα ισχυρίζονται είναι το σφάλμα; 16 00:00:50,230 --> 00:00:52,004 Ναι; 17 00:00:52,004 --> 00:00:54,420 Έτσι είναι μια off από ένα λάθος, και τι εννοείτε με αυτό; 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Εξαιρετική. 22 00:01:10,410 --> 00:01:13,930 Έτσι έχουμε καθοριστεί μια ξεκινούν την τιμή μηδέν για i, 23 00:01:13,930 --> 00:01:18,399 και έχουμε ορίσει ένα n αξία των 10, αλλά έχουμε χρησιμοποιήσει λιγότερο από ή ίσο με. 24 00:01:18,399 --> 00:01:21,190 Και ο λόγος ότι αυτό είναι δύο χαρακτήρες και όχι μόνο ένα σύμβολο, 25 00:01:21,190 --> 00:01:22,630 όπως σε ένα βιβλίο μαθηματικών, είναι ότι δεν έχετε 26 00:01:22,630 --> 00:01:24,880 ένας τρόπος έκφρασης της ένα ισοδύναμο χαρακτήρα. 27 00:01:24,880 --> 00:01:28,450 >> Έτσι, αυτό σημαίνει ότι λιγότερο από ό, τι, αλλά αν αρχίζουν να μετρούν από το μηδέν, 28 00:01:28,450 --> 00:01:31,690 αλλά θα μετρήσει σε όλη τη διαδρομή up μέσα και ίσο με 10, 29 00:01:31,690 --> 00:01:34,170 είστε φυσικά πρόκειται να μετράνε 11 πράγματα συνολικά. 30 00:01:34,170 --> 00:01:35,900 Και έτσι θα πάμε για να εκτυπώσετε 11 αστέρων. 31 00:01:35,900 --> 00:01:37,990 Λοιπόν, τι θα μπορούσε να είναι μια λύση για αυτό; 32 00:01:37,990 --> 00:01:39,970 Ναι; 33 00:01:39,970 --> 00:01:43,980 >> Έτσι, απλά ρυθμίστε το λιγότερο από ό, τι ή ίση με απλώς να είναι μικρότερο από, 34 00:01:43,980 --> 00:01:46,250 και υπάρχει, αξιώνω, ίσως μια άλλη λύση, πάρα πολύ. 35 00:01:46,250 --> 00:01:47,210 Τι θα μπορούσε άλλο να κάνεις; 36 00:01:47,210 --> 00:01:48,590 Ναι; 37 00:01:48,590 --> 00:01:53,660 >> Έτσι ξεκινούν ισούται με την τιμή σε 1, και εγκαταλείψουν το λιγότερο από ή ίσο με. 38 00:01:53,660 --> 00:01:56,187 Και ειλικρινά θα μπορούσε να ισχυριστεί ότι, για ένα τυπικό άνθρωπο, 39 00:01:56,187 --> 00:01:57,770 Αυτό είναι ίσως πιο απλή. 40 00:01:57,770 --> 00:02:00,280 Ξεκινήστε μετρώντας 1 και μετρήσει μέχρι έως 10. 41 00:02:00,280 --> 00:02:01,690 Ουσιαστικά κάνουμε ό, τι εννοείτε. 42 00:02:01,690 --> 00:02:04,010 >> Αλλά η πραγματικότητα είναι σε προγραμματισμού, όπως έχουμε δει, 43 00:02:04,010 --> 00:02:07,598 επιστήμονες και προγραμματιστές υπολογιστών γενικά αρχίζουν να μετρούν από το μηδέν. 44 00:02:07,598 --> 00:02:09,389 Και αυτό είναι εντάξει μόλις μπορείτε να το συνηθίσεις. 45 00:02:09,389 --> 00:02:12,640 Η κατάστασή σας θα είναι γενικά είναι κάτι σαν λιγότερο από ό, τι. 46 00:02:12,640 --> 00:02:14,910 Έτσι απλά μια λογική λάθος που θα μπορούσαμε τώρα 47 00:02:14,910 --> 00:02:17,990 καθορίσει και τελικά να μεταγλωττίσετε ξανά αυτό και να πάρει μόλις 10. 48 00:02:17,990 --> 00:02:19,610 >> Λοιπόν τι θα λέγατε για αυτό το bug εδώ; 49 00:02:19,610 --> 00:02:24,200 Εδώ, πάλι, εγώ ισχυρίζομαι ότι έχω ένας στόχος της εκτύπωσης 10 stars-- 50 00:02:24,200 --> 00:02:28,140 μία ανά γραμμή αυτή τη φορά, αλλά αυτό δεν γίνεται. 51 00:02:28,140 --> 00:02:30,940 Πριν σας προτείνουμε ό, τι η λύση είναι, τι κάνει αυτή η 52 00:02:30,940 --> 00:02:34,640 εκτύπωση οπτικά αν ήταν να συντάξει και να τρέξει αυτό το πρόγραμμα νομίζετε; 53 00:02:34,640 --> 00:02:35,140 Ναι; 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Star. 56 00:02:38,860 --> 00:02:41,690 Έτσι, όλα τα αστέρια για το ίδια γραμμή είναι ό, τι άκουσα, 57 00:02:41,690 --> 00:02:43,391 και στη συνέχεια το νέο χαρακτήρα γραμμής. 58 00:02:43,391 --> 00:02:44,140 Οπότε ας προσπαθήσουμε αυτό. 59 00:02:44,140 --> 00:02:48,710 Έτσι κάνουν λάθη-1, εισαγάγετε, και βλέπω την εντολή κλαγγή 60 00:02:48,710 --> 00:02:50,090 ότι μιλήσαμε για τελευταία φορά. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, και μάλιστα βλέπω όλα τα 10 αστέρια στην ίδια γραμμή, ακόμη κι αν ισχυρίζονται 62 00:02:55,180 --> 00:02:58,690 στις προδιαγραφές μου μόνο ένα σχόλιο κορυφή ο κώδικας που είχα την πρόθεση να κάνω μία ανά 63 00:02:58,690 --> 00:02:59,230 γραμμή. 64 00:02:59,230 --> 00:03:00,580 Αλλά αυτό φαίνεται σωστό. 65 00:03:00,580 --> 00:03:04,620 >> Τώρα γραμμή 15 φαίνεται σαν να είμαι εκτύπωση ένα αστέρι, και στη συνέχεια της γραμμής 16 66 00:03:04,620 --> 00:03:06,620 μοιάζει είμαι εκτύπωση ένας χαρακτήρας νέας γραμμής, 67 00:03:06,620 --> 00:03:09,560 και είναι και οι δύο εσοχή έτσι Είμαι εσωτερικό του βρόχου με σαφήνεια. 68 00:03:09,560 --> 00:03:13,610 Έτσι, δεν θα έπρεπε να κάνω αστέρι, νέα γραμμή, αστέρι, νέα γραμμή, αστέρι, νέα γραμμή; 69 00:03:13,610 --> 00:03:14,110 Ναι; 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Ναι, σε αντίθεση με μια γλώσσα, όπως Python, αν είστε εξοικειωμένοι, 72 00:03:21,240 --> 00:03:23,540 οδόντωση δεν σημασία για τον υπολογιστή. 73 00:03:23,540 --> 00:03:25,280 Έχει σημασία μόνο με την ανθρώπινη. 74 00:03:25,280 --> 00:03:29,860 Έτσι, ενώ εδώ έχω εφεύρει γραμμές 15 και 16-- που είναι πανέμορφο, 75 00:03:29,860 --> 00:03:31,330 αλλά ο υπολογιστής δεν με νοιάζει. 76 00:03:31,330 --> 00:03:34,640 Ο υπολογιστής νοιάζεται για στην πραγματικότητα έχουν άγκιστρα 77 00:03:34,640 --> 00:03:36,310 γύρω από αυτές τις γραμμές κώδικα. 78 00:03:36,310 --> 00:03:39,520 >> Έτσι ώστε να είναι clear-- ακριβώς όπως στο Scratch-- ότι αυτές τις δύο γραμμές κώδικα 79 00:03:39,520 --> 00:03:40,450 θα πρέπει να εκτελεστεί. 80 00:03:40,450 --> 00:03:44,390 Όπως και ένα από αυτά τα κίτρινα Scratch παζλ κομμάτια ξανά και ξανά και ξανά. 81 00:03:44,390 --> 00:03:50,920 >> Έτσι τώρα, αν μου εκτελέστε ξανά αυτό program-- ./buggy-2-- Χμ. 82 00:03:50,920 --> 00:03:51,770 Έχω ένα λάθος τώρα. 83 00:03:51,770 --> 00:03:54,212 Τι έκανε ξεχάσω να κάνω; 84 00:03:54,212 --> 00:03:55,420 Ναι, γι 'αυτό δεν το υπολογίσουν. 85 00:03:55,420 --> 00:03:56,740 Έτσι κάνουν λάθη-2. 86 00:03:56,740 --> 00:03:59,840 Δεν υπάρχει τέτοιο αρχείο, επειδή δεν είχα στην πραγματικότητα συγκεντρώνουν τη δεύτερη εκδοχή. 87 00:03:59,840 --> 00:04:04,860 Μέχρι τώρα ενδιαφέρον αδήλωτης δεν variable-- 2. 88 00:04:04,860 --> 00:04:05,510 Κάνουμε 1. 89 00:04:05,510 --> 00:04:11,050 Κάνετε λάθη-1-- ./buggy-1-- και τώρα το καθένα από αυτά είναι στην ίδια γραμμή. 90 00:04:11,050 --> 00:04:13,880 >> Τώρα υπάρχει μια εξαίρεση για αυτή η υποτιθέμενη αξίωση μου 91 00:04:13,880 --> 00:04:15,520 ότι θα πρέπει να έχετε αυτά τα άγκιστρα. 92 00:04:15,520 --> 00:04:20,160 Όταν είναι στην πραγματικότητα OK-- αν έχετε παρατηρείται στο τμήμα ή textbooks-- 93 00:04:20,160 --> 00:04:22,130 για να παραλείψετε τα άγκιστρα; 94 00:04:22,130 --> 00:04:22,630 Ναι; 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Ακριβώς. 97 00:04:26,870 --> 00:04:28,940 Όταν υπάρχει μόνο μία γραμμή κώδικα που εσείς 98 00:04:28,940 --> 00:04:32,830 θέλει να συνδέεται με το βρόχο όπως και στο πρώτο μας παράδειγμα. 99 00:04:32,830 --> 00:04:36,380 Είναι απολύτως θεμιτό για να παραλείψετε τα άγκιστρα 100 00:04:36,380 --> 00:04:40,310 όπως ακριβώς το είδος της ευκολίας από τον compiler σας. 101 00:04:40,310 --> 00:04:40,810 Ναι; 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Καλή ερώτηση. 104 00:04:43,930 --> 00:04:45,500 Θα ήταν να θεωρηθεί ως σφάλμα στυλ; 105 00:04:45,500 --> 00:04:49,340 Θα promote-- όπως στο CS50 Οδηγός στυλ, το URL για το οποίο 106 00:04:49,340 --> 00:04:51,926 είναι σε pset1-- ότι πάντα χρησιμοποιήστε τα άγκιστρα. 107 00:04:51,926 --> 00:04:53,550 Βέβαια, αν είστε νέοι στον προγραμματισμό. 108 00:04:53,550 --> 00:04:56,800 Η πραγματικότητα είναι ότι δεν είμαστε πρόκειται να σας απαγορεύσει 109 00:04:56,800 --> 00:04:58,680 από το να κάνει αυτές τις ανέσεις. 110 00:04:58,680 --> 00:05:00,846 Αλλά αν είστε απλά να πάρει στην ταλάντευση των πραγμάτων, 111 00:05:00,846 --> 00:05:04,020 απολύτως απλά να χρησιμοποιείτε πάντα την σγουρά τιράντες μέχρι να το συνηθίσετε αυτό. 112 00:05:04,020 --> 00:05:04,640 Καλή ερώτηση. 113 00:05:04,640 --> 00:05:05,320 >> Εντάξει. 114 00:05:05,320 --> 00:05:07,660 Έτσι ώστε, στη συνέχεια, ήταν ένα bug. 115 00:05:07,660 --> 00:05:09,190 Τουλάχιστον σε κάτι αρκετά απλό. 116 00:05:09,190 --> 00:05:11,260 Και όμως μπορείτε να σκεφτείτε αυτό είναι αρκετά υποτυπώδης, σωστά; 117 00:05:11,260 --> 00:05:13,635 Αυτό είναι το είδος της πρώτης εβδομάδας της κοιτάζοντας τη γλώσσα 118 00:05:13,635 --> 00:05:14,890 όπως, δείτε τα σφάλματα σας εκεί. 119 00:05:14,890 --> 00:05:17,250 Αλλά η πραγματικότητα αυτά είναι πραγματικά αντιπροσωπευτικό 120 00:05:17,250 --> 00:05:20,310 από μερικές αρκετά τρομακτικό προβλήματα ότι μπορούν να προκύψουν στον πραγματικό κόσμο. 121 00:05:20,310 --> 00:05:23,530 >> Έτσι, κάποιοι από εσάς μπορεί να ανακαλέσετε αν ακολουθήσετε ειδήσεις τεχνολογίας, 122 00:05:23,530 --> 00:05:25,740 ή ίσως ακόμη και αλιεύονται άνεμος από αυτό τον Φεβρουάριο 123 00:05:25,740 --> 00:05:29,434 του περασμένου έτους ότι η Apple είχε έκανε ένα κομμάτι από ένα λάθος σε δύο iOS, 124 00:05:29,434 --> 00:05:31,350 το λειτουργικό σύστημα για τα τηλέφωνά τους, καθώς επίσης και 125 00:05:31,350 --> 00:05:34,220 Mac OS, το λειτουργικό σύστημα για επιτραπέζιους και φορητούς υπολογιστές τους. 126 00:05:34,220 --> 00:05:36,480 Και είδατε τέτοια πρωτοσέλιδα όπως αυτό. 127 00:05:36,480 --> 00:05:41,120 Και εν συνεχεία, η Apple υποσχέθηκε να διορθώσετε αυτό το σφάλμα, 128 00:05:41,120 --> 00:05:45,950 και πολύ γρήγορα έκανε το διορθώσουμε στο iOS, αλλά στη συνέχεια, τελικά, αυτό που καθορίζεται στο Mac OS 129 00:05:45,950 --> 00:05:46,810 καθώς και. 130 00:05:46,810 --> 00:05:50,370 >> Τώρα κανένα από αυτά τα πρωτοσέλιδα και μόνο πραγματικά αποκαλύψει ποιο είναι το βασικό πρόβλημα ήταν, 131 00:05:50,370 --> 00:05:55,640 αλλά το σφάλμα μειώθηκε εν τέλει σε ένα bug στο SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 Και τα πολυλογώ, Αυτό είναι το λογισμικό 133 00:05:57,390 --> 00:06:01,030 ότι τα προγράμματα περιήγησης μας και άλλα λογισμικό που χρησιμοποιείται για να κάνει τι; 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Αν είπα ότι το SSL είναι συμμετέχουν, όποτε 136 00:06:06,860 --> 00:06:13,920 επισκεφτείτε μια διεύθυνση URL που ξεκινά με HTTPS, τότε τι θα μπορούσε SSL να σχετίζεται με? 137 00:06:13,920 --> 00:06:14,580 Κρυπτογράφηση. 138 00:06:14,580 --> 00:06:16,470 Έτσι, θα μιλήσουμε για αυτό τις επόμενες ημέρες. 139 00:06:16,470 --> 00:06:18,750 Κρυπτογράφηση, η τέχνη της κρυπτογράφησης πληροφοριών. 140 00:06:18,750 --> 00:06:22,200 >> Αλλά τα πολυλογώ, η Apple κάποτε είχε κάνει ένα λάθος 141 00:06:22,200 --> 00:06:25,970 στην εφαρμογή της SSL, το λογισμικού που υλοποιεί τελικά 142 00:06:25,970 --> 00:06:30,120 URLs όπως το HTTPS ή max συνδέσεις εκεί. 143 00:06:30,120 --> 00:06:32,850 Το αποτέλεσμα των οποίων είναι ότι σας συνδέσεις θα μπορούσαν δυνητικά 144 00:06:32,850 --> 00:06:33,920 να υποκλαπούν. 145 00:06:33,920 --> 00:06:37,130 Και ήταν οι διασυνδέσεις σου όχι απαραίτητα κρυπτογραφημένο 146 00:06:37,130 --> 00:06:40,350 αν είχατε κάποια κακός στο μεταξύ εσείς και ο δικτυακός τόπος προορισμού που 147 00:06:40,350 --> 00:06:42,170 ήξερε πώς να επωφεληθούν από αυτό. 148 00:06:42,170 --> 00:06:45,090 >> Τώρα, η Apple τελικά δημοσιεύτηκε ένα διορθώσετε για αυτό το τέλος, 149 00:06:45,090 --> 00:06:46,920 και η περιγραφή της fix τους ήταν αυτό. 150 00:06:46,920 --> 00:06:49,878 Ασφαλής μεταφορά απέτυχε να επικυρώσει η αυθεντικότητα της σύνδεσης. 151 00:06:49,878 --> 00:06:52,920 Το θέμα εξετάστηκε από αποκατάσταση της λείπει βήματα επικύρωσης. 152 00:06:52,920 --> 00:06:57,250 >> Έτσι, αυτό είναι μια πολύ χέρι κυματιστό εξήγηση για να πούμε απλώς ότι έχουμε σκάτωσε. 153 00:06:57,250 --> 00:07:00,920 Υπάρχει κυριολεκτικά ένα γραμμή κώδικα που ήταν buggy 154 00:07:00,920 --> 00:07:05,130 στην εφαρμογή τους από SSL, και αν πάτε σε απευθείας σύνδεση και την αναζήτηση για αυτό 155 00:07:05,130 --> 00:07:07,210 μπορείτε πραγματικά να βρείτε το αρχικό πηγαίο κώδικα. 156 00:07:07,210 --> 00:07:11,960 Για παράδειγμα, αυτό είναι ένα στιγμιότυπο οθόνης του μόνο ένα τμήμα του ένα αρκετά μεγάλο αρχείο, 157 00:07:11,960 --> 00:07:15,965 αλλά αυτό είναι μια συνάρτηση προφανώς ονομάζεται SSL επαληθεύσετε βασικό διακομιστή ανταλλαγής. 158 00:07:15,965 --> 00:07:17,840 Και παίρνει ένα σωρό τα επιχειρήματα και τις εισροές. 159 00:07:17,840 --> 00:07:20,298 Και εμείς δεν πρόκειται να επικεντρωθεί πάρα πολύ για λεπτομέρειας εκεί, 160 00:07:20,298 --> 00:07:24,390 αλλά αν επικεντρωθεί σχετικά με τον κώδικα μέσα του εν λόγω ανώτατου function-- ας 161 00:07:24,390 --> 00:07:25,590 ζουμ σε αυτό. 162 00:07:25,590 --> 00:07:28,140 Μπορεί να υποπτεύεται ήδη αυτό το σφάλμα θα μπορούσε 163 00:07:28,140 --> 00:07:31,230 είναι, ακόμη και αν δεν έχετε ιδέα τελικά αυτό που ψάχνετε σε. 164 00:07:31,230 --> 00:07:35,924 Υπάρχει το είδος της ανωμαλίας εδώ, το οποίο είναι ό, τι; 165 00:07:35,924 --> 00:07:38,940 >> Ναι, δεν μου αρέσει πραγματικά η εμφάνιση των δύο goto αποτύχει. 166 00:07:38,940 --> 00:07:42,060 Ειλικρινά, δεν ξέρω πραγματικά τι goto αποτυγχάνουν μέσα, αλλά που έχει δύο από αυτούς 167 00:07:42,060 --> 00:07:42,810 πλάτη με πλάτη. 168 00:07:42,810 --> 00:07:45,290 Αυτό ακριβώς το είδος μου τρίβει πνευματικά με λάθος τρόπο, 169 00:07:45,290 --> 00:07:48,910 και μάλιστα αν εστιάσουμε σε ακριβώς αυτές τις γραμμές, αυτή είναι η C. 170 00:07:48,910 --> 00:07:52,220 >> Έτσι, πολλά από κώδικα της Apple είναι το ίδιο γραμμένο σε C, 171 00:07:52,220 --> 00:07:55,780 και αυτό προφανώς Είναι πραγματικά equivalent-- 172 00:07:55,780 --> 00:07:59,060 Δεν με αυτή την όμορφη εσοχή έκδοση, αλλά αν έχετε αναγνωρίσει το γεγονός 173 00:07:59,060 --> 00:08:02,560 ότι δεν υπάρχει καμία άγκιστρα, τι Η Apple έγραψε πραγματικά ήταν κώδικα που μοιάζει 174 00:08:02,560 --> 00:08:03,540 σαν αυτό. 175 00:08:03,540 --> 00:08:07,080 Έτσι έχω σμίκρυνση και απλά καθόρισε την εσοχή, υπό την έννοια 176 00:08:07,080 --> 00:08:10,690 ότι αν δεν υπάρχουν άγκιστρα, ότι δεύτερη goto αποτυγχάνουν ότι είναι σε κίτρινο 177 00:08:10,690 --> 00:08:12,500 πρόκειται να εκτελέσει δεν έχει σημασία τι. 178 00:08:12,500 --> 00:08:15,540 Δεν είναι συνδεδεμένες με την το αν η κατάσταση πάνω από αυτό. 179 00:08:15,540 --> 00:08:19,590 >> Έτσι, ακόμα και πάλι, αν δεν κάνετε αρκετά καταλάβουμε τι θα μπορούσε αυτό ενδεχομένως να 180 00:08:19,590 --> 00:08:23,230 να κάνουμε, γνωρίζουμε ότι κάθε ένα από αυτά conditions-- κάθε μία από αυτές τις γραμμές 181 00:08:23,230 --> 00:08:26,180 είναι ένα πολύ σημαντικό βήμα στη διαδικασία ελέγχου 182 00:08:26,180 --> 00:08:28,350 αν τα δεδομένα σας είναι στην πραγματικότητα κρυπτογραφημένα. 183 00:08:28,350 --> 00:08:31,710 Έτσι παρακάμπτοντας ένα από αυτά βήματα, δεν είναι η καλύτερη ιδέα. 184 00:08:31,710 --> 00:08:34,840 >> Αλλά γιατί έχουμε αυτή δεύτερη goto αποτύχει σε κίτρινο, 185 00:08:34,840 --> 00:08:36,840 και επειδή από τη στιγμή που το είδος της αισθητικής 186 00:08:36,840 --> 00:08:40,480 μετακινήστε το προς τα αριστερά, όπου λογικά είναι αυτή τη στιγμή, τι 187 00:08:40,480 --> 00:08:43,230 σημαίνει αυτό για την γραμμή του κώδικα κάτω από αυτό το δεύτερο goto 188 00:08:43,230 --> 00:08:46,480 δεν θα νομίζετε; 189 00:08:46,480 --> 00:08:48,860 Είναι πάντα θα πρέπει να παραλείπεται. 190 00:08:48,860 --> 00:08:52,100 Έτσι gotos γενικά αποδοκιμαζόταν για λόγους που δεν θα πραγματικά να πάει στο, 191 00:08:52,100 --> 00:08:54,940 και μάλιστα σε CS50 δεν τείνουν για να διδάξει αυτή τη δήλωση goto, 192 00:08:54,940 --> 00:08:58,130 αλλά μπορείτε να σκεφτείτε goto αποτυγχάνουν ως έννοια go άλμα 193 00:08:58,130 --> 00:08:59,600 σε κάποιο άλλο μέρος του κώδικα. 194 00:08:59,600 --> 00:09:03,120 >> Με άλλα λόγια πηδούν πάνω αυτή η τελευταία γραμμή συνολικά, 195 00:09:03,120 --> 00:09:07,420 και έτσι το αποτέλεσμα αυτής της ανόητο απλό λάθος που ήταν μόλις 196 00:09:07,420 --> 00:09:10,330 ένα αποτέλεσμα πιθανώς κάποιος αντιγραφή και επικόλληση ενός πολύ 197 00:09:10,330 --> 00:09:14,150 πολλές φορές ήταν ότι ολόκληρο ασφάλεια του iOS και Mac OS 198 00:09:14,150 --> 00:09:18,240 ήταν ευάλωτοι σε υποκλοπή από κακούς για αρκετό καιρό. 199 00:09:18,240 --> 00:09:19,940 Μέχρι την Apple σταθερό τέλος αυτό. 200 00:09:19,940 --> 00:09:23,100 >> Τώρα αν κάποιοι από εσάς είναι πραγματικά τρέχουν παλιές εκδόσεις του iOS ή Mac OS, 201 00:09:23,100 --> 00:09:27,250 μπορείτε να πάτε στο gotofail.com που είναι μια ιστοσελίδα ότι κάποιος που έχει συσταθεί 202 00:09:27,250 --> 00:09:29,190 για τον προσδιορισμό, κατ 'ουσίαν προγραμματισμού 203 00:09:29,190 --> 00:09:30,980 αν ο υπολογιστής σας εξακολουθεί να είναι ευάλωτη. 204 00:09:30,980 --> 00:09:33,600 Και ειλικρινά, αν είναι, είναι πιθανώς μια καλή ιδέα 205 00:09:33,600 --> 00:09:36,870 για να ενημερώσετε το τηλέφωνό σας ή Mac σας σε αυτό το σημείο. 206 00:09:36,870 --> 00:09:40,120 Αλλά εκεί, μόνο απόδειξη για το πόσο την εκτίμηση αυτών χαμηλότερο επίπεδο 207 00:09:40,120 --> 00:09:42,400 λεπτομέρειες και δίκαια απλές ιδέες μπορεί πραγματικά 208 00:09:42,400 --> 00:09:44,590 μεταφράζονται σε αποφάσεις και τα προβλήματα που 209 00:09:44,590 --> 00:09:47,320 affected-- σε αυτό case-- εκατομμύρια ανθρώπους. 210 00:09:47,320 --> 00:09:49,107 >> Τώρα, μια λέξη για τη διοίκηση. 211 00:09:49,107 --> 00:09:50,690 Τμήμα θα ξεκινήσει την ερχόμενη Κυριακή. 212 00:09:50,690 --> 00:09:53,360 Θα λάβετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου από το Σαββατοκύριακο για το τμήμα, στο οποίο σημείο 213 00:09:53,360 --> 00:09:55,290 η διαδικασία resectioning θα ξεκινήσει, αν έχετε 214 00:09:55,290 --> 00:09:56,998 συνειδητοποίησε έχετε τώρα κάποιες νέες συγκρούσεις. 215 00:09:56,998 --> 00:10:00,180 Έτσι, αυτό συμβαίνει κάθε χρόνο, και εμείς θα φιλοξενήσει στις μέρες που έρχονται. 216 00:10:00,180 --> 00:10:02,430 >> Office hours-- κάνει να κρατήσει ένα μάτι σε αυτό το πρόγραμμα εδώ. 217 00:10:02,430 --> 00:10:05,100 Αλλάζει λίγο αυτή την εβδομάδα, ιδιαίτερα η ώρα έναρξης 218 00:10:05,100 --> 00:10:08,180 και η θέση, έτσι ώστε να συμβουλευτείτε ότι πριν από τον τίτλο για ώρες γραφείου 219 00:10:08,180 --> 00:10:09,520 οποιαδήποτε από τις επόμενες τέσσερις νύχτες. 220 00:10:09,520 --> 00:10:12,680 Και τώρα μια λέξη σχετικά με την αξιολόγηση, ιδιαίτερα καθώς βουτήξει πρόβλημα 221 00:10:12,680 --> 00:10:14,350 ορίζει μία και πέρα. 222 00:10:14,350 --> 00:10:17,070 >> Έτσι ανά την προδιαγραφή, αυτά είναι γενικά 223 00:10:17,070 --> 00:10:20,360 οι άξονες κατά μήκος των οποίων αξιολογούμε την εργασία σας. 224 00:10:20,360 --> 00:10:23,170 Πεδίο εφαρμογής αναφέρεται σε ό, τι βαθμό υλοποιεί τον κωδικό σας 225 00:10:23,170 --> 00:10:25,690 τα χαρακτηριστικά που απαιτούνται με τις προδιαγραφές μας. 226 00:10:25,690 --> 00:10:28,290 Με άλλα λόγια, πόση ένα κομμάτι που είχε δαγκώσει μακριά. 227 00:10:28,290 --> 00:10:30,440 Κάνατε ένα τρίτο από αυτό, ένα μισό από αυτό, 100% αυτής. 228 00:10:30,440 --> 00:10:33,000 Ακόμα κι αν αυτό δεν είναι σωστό, πόσα θα επιχειρήσει; 229 00:10:33,000 --> 00:10:35,290 Έτσι ώστε να συλλαμβάνει το επίπεδο της προσπάθειας και του ποσού 230 00:10:35,290 --> 00:10:38,260 στην οποία δάγκωσε το προβλήματα πρόβλημα σύνολο του. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- αυτό, να ποιο βαθμό, είναι ο κωδικός σας 232 00:10:40,690 --> 00:10:43,150 συνάδει με μας προδιαγραφές και χωρίς σφάλματα. 233 00:10:43,150 --> 00:10:44,770 Έτσι δουλεύει σωστά; 234 00:10:44,770 --> 00:10:48,700 Αν έχουμε δώσει κάποια στοιχεία, που κάνει να μας δώσει το αποτέλεσμα που περιμένουμε; 235 00:10:48,700 --> 00:10:52,570 Σχέδιο-- τώρα αυτή είναι η πρώτη από τα ιδιαίτερα ποιοτικά αυτά, 236 00:10:52,570 --> 00:10:56,180 ή αυτοί που απαιτούν ανθρώπινη κρίση. 237 00:10:56,180 --> 00:10:59,690 Και πράγματι, αυτός είναι ο λόγος που έχουμε ένα προσωπικό τόσων διδασκαλίας υποτρόφων και φυσικά 238 00:10:59,690 --> 00:11:00,350 βοηθούς. 239 00:11:00,350 --> 00:11:03,480 Σε ποιο βαθμό σας κώδικα γραμμένο καλά; 240 00:11:03,480 --> 00:11:05,810 >> Και πάλι αυτό είναι ένα πολύ ποιοτική αξιολόγηση 241 00:11:05,810 --> 00:11:09,100 ότι θα συνεργαστεί μαζί σας για αμφίδρομα στις εβδομάδες που έρχονται. 242 00:11:09,100 --> 00:11:12,060 Έτσι ώστε, όταν δεν πάρει μόνο αριθμητικά αποτελέσματα, αλλά επίσης 243 00:11:12,060 --> 00:11:16,682 μια γραπτή σκορ, ή δακτυλογραφημένα γνώμη, ή γραπτή ενημέρωση σε αγγλικές λέξεις. 244 00:11:16,682 --> 00:11:19,640 Αυτό είναι αυτό που θα χρησιμοποιήσετε για να οδηγείτε προς την πραγματικότητα γράφοντας καλύτερη κώδικα. 245 00:11:19,640 --> 00:11:23,320 Και στη διάλεξη και ενότητα, θα προσπαθήσουμε να επισημάνω out-- τόσο συχνά όσο εμείς μπορώ-- 246 00:11:23,320 --> 00:11:26,420 τι κάνει ένα πρόγραμμα όχι μόνο σωστή και λειτουργικά καλή, 247 00:11:26,420 --> 00:11:28,200 αλλά και καλά σχεδιασμένη. 248 00:11:28,200 --> 00:11:31,850 Η πιο αποτελεσματική θα μπορούσε να είναι, ή ακόμα και το πιο όμορφο μπορεί να είναι. 249 00:11:31,850 --> 00:11:33,100 >> Πράγμα που μας οδηγεί στο στυλ. 250 00:11:33,100 --> 00:11:36,876 Στυλ είναι τελικά μια αισθητική κρίση. 251 00:11:36,876 --> 00:11:38,750 Μήπως μπορείτε να επιλέξετε καλό ονόματα για τις μεταβλητές σας; 252 00:11:38,750 --> 00:11:40,330 Έχετε εσοχή κωδικό σας σωστά; 253 00:11:40,330 --> 00:11:44,010 Δεν είναι καλή, και, ως εκ τούτου, Είναι εύκολο για ένα άλλο ανθρώπινο ον 254 00:11:44,010 --> 00:11:46,550 να διαβάσετε τις αντίστοιχες σας της ορθότητας της. 255 00:11:46,550 --> 00:11:50,300 >> Τώρα γενικά ανά την εξεταστέα ύλη, που σκοράρει αυτά τα πράγματα σε μια κλίμακα πέντε σημείων. 256 00:11:50,300 --> 00:11:53,640 Και επιτρέψτε μου να καταστήσουμε σαφές το σημείο ότι τρία είναι πράγματι καλή. 257 00:11:53,640 --> 00:11:55,550 Πολύ γρήγορα κάνουν οι λαοί αρχίσει να κάνει αριθμητικές πράξεις. 258 00:11:55,550 --> 00:11:58,133 Όταν πάρετε μια τρεις από πέντε για την ορθότητα για κάποιο το chipset 259 00:11:58,133 --> 00:12:02,040 και σκέφτονται δεκάρα, θα πάω στο 60% το οποίο είναι ουσιαστικά ένα ϋ ή ένα Ε 260 00:12:02,040 --> 00:12:03,980 >> Αυτός δεν είναι ο τρόπος που σκεφτείτε αυτούς τους αριθμούς. 261 00:12:03,980 --> 00:12:06,880 Ένα τριών είναι πράγματι καλό, και τι μπορούμε γενικά αναμένουν στην αρχή 262 00:12:06,880 --> 00:12:09,820 του όρου είναι ότι εάν παίρνετε ένα μάτσο three's-- ίσως ένα ζευγάρι 263 00:12:09,820 --> 00:12:12,540 των εκθέσεων, ένα ζευγάρι από fours-- ή ένα ζευγάρι δυάρια, ένα ζευγάρι των fours-- 264 00:12:12,540 --> 00:12:13,748 αυτό είναι ένα καλό μέρος για να ξεκινήσετε. 265 00:12:13,748 --> 00:12:16,320 Και εφ 'όσον βλέπουμε μια ανοδική τροχιά την πάροδο του χρόνου, 266 00:12:16,320 --> 00:12:18,540 είστε σε ιδιαίτερα καλή θέση. 267 00:12:18,540 --> 00:12:20,752 >> Ο τύπος που χρησιμοποιούμε για να βάρος πράγματα είναι ουσιαστικά 268 00:12:20,752 --> 00:12:22,710 αυτό ανά την εξεταστέα ύλη, που απλά σημαίνει ότι εμείς 269 00:12:22,710 --> 00:12:24,750 δίνουν περισσότερο βάρος στην ορθότητα. 270 00:12:24,750 --> 00:12:27,930 Επειδή είναι πολύ συχνά ορθότητα που παίρνει τον περισσότερο χρόνο. 271 00:12:27,930 --> 00:12:28,760 Πίστεψέ με τώρα. 272 00:12:28,760 --> 00:12:31,190 Θα find-- τουλάχιστον σε ένα pset-- ότι θα 273 00:12:31,190 --> 00:12:36,790 δαπανούν το 90% του χρόνου σας εργάζονται σε 10% του προβλήματος. 274 00:12:36,790 --> 00:12:39,320 >> Και πάντα το είδος των έργων εκτός από μία ή δύο σφάλματα, 275 00:12:39,320 --> 00:12:41,570 και αυτά είναι τα σφάλματα που να σας κρατήσει μέχρι αργά το βράδυ. 276 00:12:41,570 --> 00:12:43,380 Αυτοί είναι εκείνοι που είδος να ξεφύγουν. 277 00:12:43,380 --> 00:12:45,560 Αλλά μετά από τον ύπνο σε αυτό, ή φοιτούν ώρες γραφείου 278 00:12:45,560 --> 00:12:48,844 ή ερωτήσεις σε απευθείας σύνδεση, είναι όταν φτάσουμε σε αυτό το στόχο κατά 100%, 279 00:12:48,844 --> 00:12:50,760 και γι 'αυτό το βάρος ορθότητα της πιο. 280 00:12:50,760 --> 00:12:54,102 Σχεδιάστε ένα λίγο μικρότερο, και το στυλ είναι λίγο μικρότερη από εκείνη. 281 00:12:54,102 --> 00:12:56,060 Αλλά να έχετε κατά mind-- στυλ είναι ίσως το πιο εύκολο 282 00:12:56,060 --> 00:12:58,890 από αυτά να δαγκώσει σύμφωνα με τον οδηγό στυλ. 283 00:12:58,890 --> 00:13:01,580 >> Και τώρα, το πιο σοβαρό σημειώστε την ακαδημαϊκή δεοντολογία. 284 00:13:01,580 --> 00:13:05,000 CS50 έχει το θλιβερό προνόμιο της είναι ο μεγαλύτερος παραγωγός της Ad Board 285 00:13:05,000 --> 00:13:07,330 περιπτώσεις σχεδόν κάθε χρόνο ιστορικά. 286 00:13:07,330 --> 00:13:11,012 Αυτό δεν είναι επειδή οι μαθητές εξαπατήσει σε CS50 πια από ό, τι οποιαδήποτε άλλη κατηγορία, 287 00:13:11,012 --> 00:13:13,720 αλλά επειδή από τη φύση της εργασίας, το γεγονός ότι η ηλεκτρονική, 288 00:13:13,720 --> 00:13:16,636 το γεγονός ότι ψάχνουμε για αυτό, και το γεγονός είμαστε επιστήμονες ηλεκτρονικών υπολογιστών, 289 00:13:16,636 --> 00:13:20,570 Μπορώ να πω ότι, δυστυχώς, πολύ καλοί στο να εντοπίζουν αυτό. 290 00:13:20,570 --> 00:13:22,710 >> Λοιπόν, τι σημαίνει αυτό σε πραγματικούς όρους; 291 00:13:22,710 --> 00:13:24,820 Γι 'αυτό, κατά τη διδακτέα ύλη, Η φιλοσοφία του μαθήματος 292 00:13:24,820 --> 00:13:28,090 πραγματικά βράζει κάτω για να είναι λογικό. 293 00:13:28,090 --> 00:13:31,684 Υπάρχει αυτή η γραμμή μεταξύ να κάνει την εργασία ενός ατόμου για τη δική σας 294 00:13:31,684 --> 00:13:34,100 και να πάρει ένα μικρό κομμάτι της εύλογη βοήθεια από έναν φίλο, 295 00:13:34,100 --> 00:13:38,020 και οριστικές κάνει αυτή τη δουλειά για σας φίλος, ή στέλνοντας το άτομό κωδικό σας 296 00:13:38,020 --> 00:13:41,080 έτσι ώστε αυτός ή αυτή μπορεί απλά να λαμβάνουν ή να το δανειστείτε από δεξιά. 297 00:13:41,080 --> 00:13:43,580 Και που διασχίζει τη γραμμή ότι εμείς που στην τάξη. 298 00:13:43,580 --> 00:13:45,410 >> Δείτε, το αναλυτικό πρόγραμμα τελικά, για τις γραμμές 299 00:13:45,410 --> 00:13:48,209 ότι εφιστούμε όπως είναι λογικό και παράλογη συμπεριφορά, 300 00:13:48,209 --> 00:13:50,000 αλλά το κάνει πραγματικά να βράσει κάτω προς την ουσία 301 00:13:50,000 --> 00:13:53,980 της εργασίας σας χρειάζεται να είναι δική σας στο τέλος. 302 00:13:53,980 --> 00:13:56,230 Τώρα με ότι είπε, υπάρχει μια ευρετική. 303 00:13:56,230 --> 00:13:58,980 Επειδή όπως μπορείτε να imagine-- από τις ώρες γραφείου και τα visuals 304 00:13:58,980 --> 00:14:01,060 και τα βίντεο που έχουμε φαίνεται έτσι far-- CS50 305 00:14:01,060 --> 00:14:04,530 είναι πράγματι γραφτό να γίνει η συνεργατική και ως συνεταιρισμός και η κοινωνική 306 00:14:04,530 --> 00:14:06,450 όσο το δυνατόν. 307 00:14:06,450 --> 00:14:08,570 Όπως συνεργασίας, όπως είναι αυστηρή. 308 00:14:08,570 --> 00:14:11,314 >> Αλλά με αυτό το είπε, η ευρετική, όπως θα δούμε στη διδακτέα ύλη, 309 00:14:11,314 --> 00:14:12,980 είναι ότι όταν έχεις κάποιο πρόβλημα. 310 00:14:12,980 --> 00:14:16,470 Έχετε κάποιο bug στον κώδικα σας ότι έχετε δεν μπορεί να λύσει, είναι λογικό για σας 311 00:14:16,470 --> 00:14:18,039 για να δείξει τον κωδικό σας σε κάποιον άλλο. 312 00:14:18,039 --> 00:14:21,080 Ένας φίλος, ακόμη και στην τάξη, ένας φίλος κάθεται δίπλα σας σε ώρες γραφείου, 313 00:14:21,080 --> 00:14:22,680 ή ένα μέλος του προσωπικού. 314 00:14:22,680 --> 00:14:25,810 Αλλά δεν μπορούν να δείξουν τον κωδικό τους για να σας. 315 00:14:25,810 --> 00:14:27,710 >> Με άλλα λόγια, ένας απαντήσει σε question-- σας 316 00:14:27,710 --> 00:14:29,940 Χρειάζομαι help-- δεν είναι OH, εδώ τον κωδικό μου. 317 00:14:29,940 --> 00:14:32,440 Ρίξτε μια ματιά σε αυτό και συμπεράνουμε από ό, τι θέλετε. 318 00:14:32,440 --> 00:14:34,580 Τώρα, βέβαια, υπάρχει ένας τρόπος με σαφήνεια στο παιχνίδι 319 00:14:34,580 --> 00:14:37,760 αυτό το σύστημα με το οποίο θα σας δείξω κωδικό μου πριν με μια ερώτηση. 320 00:14:37,760 --> 00:14:40,150 Μπορείτε να μου δείξετε τον κωδικό σας μου πριν από έχοντας μια ερώτηση. 321 00:14:40,150 --> 00:14:45,870 Αλλά δείτε το αναλυτικό πρόγραμμα και πάλι για το λεπτότερες λεπτομέρειες για το πού αυτή η γραμμή είναι. 322 00:14:45,870 --> 00:14:50,606 >> Ακριβώς για να ζωγραφίσει τώρα την εικόνα και μοιραστούν όσο το δυνατό διαφανέστερο 323 00:14:50,606 --> 00:14:53,480 όπου βρισκόμαστε τα τελευταία χρόνια, αυτός είναι ο αριθμός των περιπτώσεων Ad Board 324 00:14:53,480 --> 00:14:56,260 ότι CS50 έχει πάνω τα τελευταία επτά χρόνια. 325 00:14:56,260 --> 00:14:58,717 Με 14 περιπτώσεις αυτή η πιο πρόσφατη πτώση. 326 00:14:58,717 --> 00:15:01,300 Όσον αφορά τους μαθητές που συμμετέχουν, ήταν 20 κάποιο περίεργο φοιτητές 327 00:15:01,300 --> 00:15:02,490 αυτή η τελευταία πτώση. 328 00:15:02,490 --> 00:15:05,670 Υπήρξε μια αιχμή του 33 οι μαθητές πριν από μερικά χρόνια. 329 00:15:05,670 --> 00:15:08,830 Πολλοί από τους οποίους είναι, δυστυχώς, δεν είναι πια εδώ στην πανεπιστημιούπολη. 330 00:15:08,830 --> 00:15:13,100 >> Οι μαθητές που συμμετέχουν ως ποσοστό του τάξη έχει ιστορικά κυμαίνονταν από 0% 331 00:15:13,100 --> 00:15:17,300 στο 5,3%, το οποίο είναι μόνο για να πω αυτό είναι κάθε χρόνο μια πρόκληση. 332 00:15:17,300 --> 00:15:20,390 Και προς το σκοπό αυτό, τι θέλουμε να κάνουμε είναι να μεταφέρει ένα 333 00:15:20,390 --> 00:15:24,310 ότι dd-- μόνο FYI-- σύγκριση με η δικαιοσύνη για τους φοιτητές που 334 00:15:24,310 --> 00:15:26,520 είναι μετά από τη γραμμή αναλόγως. 335 00:15:26,520 --> 00:15:29,620 Κάνουμε συγκρίνετε όλες τις τρέχουσες ισχυρισμοί εναντίον όλων των προηγούμενων αποστολών 336 00:15:29,620 --> 00:15:30,840 από τα τελευταία πολλά χρόνια. 337 00:15:30,840 --> 00:15:33,620 >> Γνωρίζουμε πάρα πολύ πώς να το Google γύρω από και βρείτε αποθετήρια κώδικα 338 00:15:33,620 --> 00:15:36,360 σε απευθείας σύνδεση, φόρουμ συζητήσεων σε απευθείας σύνδεση, χώρους εργασίας σε απευθείας σύνδεση. 339 00:15:36,360 --> 00:15:41,580 Εάν ένας φοιτητής μπορεί να βρει, μπορούμε σίγουρα βρείτε όσο εμείς δυστυχώς κάνουμε. 340 00:15:41,580 --> 00:15:45,330 Έτσι, αυτό που θα δείτε στο αναλυτικό πρόγραμμα αν είναι αυτή η ρήτρα λύπη. 341 00:15:45,330 --> 00:15:47,500 Μπορώ σίγουρα εκτιμώ, και όλοι έχει 342 00:15:47,500 --> 00:15:50,870 προσωπικού που έχει κάνει την πορεία, όπως αυτό, ή αυτό το ίδιο ένα πάροδο του χρόνου, 343 00:15:50,870 --> 00:15:53,997 σίγουρα γνωρίζουν τι είναι όπως όταν η ζωή παίρνει με τον τρόπο, όταν έχετε 344 00:15:53,997 --> 00:15:56,080 κάποια αργά τη νύχτα deadline-- όχι μόνο σε αυτή την κατηγορία, 345 00:15:56,080 --> 00:15:58,660 αλλά another-- όταν είστε εντελώς εξαντληθεί, τόνισε, 346 00:15:58,660 --> 00:16:00,659 έχουν υπέρμετρο αριθμό από άλλες δραστηριότητες. 347 00:16:00,659 --> 00:16:03,660 Θα κάνετε κάποια στιγμή στο ζωή σίγουρα μια κακή, ίσως αργά 348 00:16:03,660 --> 00:16:04,620 νύχτα απόφαση. 349 00:16:04,620 --> 00:16:06,520 >> Έτσι, κατά τη διδακτέα ύλη, υπάρχει αυτή η ρήτρα, 350 00:16:06,520 --> 00:16:10,629 όπως ότι αν εντός 72 ωρών από την κάποια κακή απόφαση, έχετε στην κατοχή σας μέχρι να 351 00:16:10,629 --> 00:16:12,670 και να φτάσει σε μένα και ένα από τα κεφάλια του μαθήματος 352 00:16:12,670 --> 00:16:14,300 και θα έχουμε μια συνομιλία. 353 00:16:14,300 --> 00:16:16,220 Θα χειριστούμε τα πράγματα στο εσωτερικό ελπίδες 354 00:16:16,220 --> 00:16:18,770 από αυτό όλο και περισσότερο από ένα διδασκαλίας στιγμή ή μάθημα ζωής, 355 00:16:18,770 --> 00:16:22,120 και όχι κάτι με ιδιαίτερα δραστικές επιπτώσεις 356 00:16:22,120 --> 00:16:24,570 όπως μπορείτε να δείτε σε αυτά τα διαγράμματα εδώ. 357 00:16:24,570 --> 00:16:26,540 >> Έτσι, αυτό είναι ένα πολύ σοβαρό ύφος. 358 00:16:26,540 --> 00:16:29,960 Ας σταματήσουμε για λίγες μόνο δευτερόλεπτα για να σπάσει την ένταση. 359 00:16:29,960 --> 00:16:34,442 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J. MALAN: Εντάξει, έτσι πώς ήταν ότι για ένα segue; 362 00:17:20,250 --> 00:17:22,059 Για την σημερινή πρωτοβάθμια θέματα. 363 00:17:22,059 --> 00:17:23,859 Η πρώτη από τις οποίες είναι η αφαίρεση. 364 00:17:23,859 --> 00:17:26,900 Ένα άλλο από τα οποία πρόκειται να είναι ο αναπαράσταση των δεδομένων, τα οποία ειλικρινά 365 00:17:26,900 --> 00:17:31,640 Είναι ένα πραγματικά στεγνό τρόπος για να πούμε πώς μπορούμε να πάμε για την επίλυση των προβλημάτων και σκέψης 366 00:17:31,640 --> 00:17:33,250 για την επίλυση των προβλημάτων; 367 00:17:33,250 --> 00:17:37,285 Έτσι, έχετε δει στο Scratch, και έχετε δει ίσως ήδη pset1 με C 368 00:17:37,285 --> 00:17:39,930 ότι μπορείτε όχι μόνο να χρησιμοποιούν λειτουργίες, όπως η printf, 369 00:17:39,930 --> 00:17:42,770 ότι οι άλλοι άνθρωποι σε Τα προηγούμενα χρόνια έγραψε για σας. 370 00:17:42,770 --> 00:17:45,340 Μπορείτε επίσης να γράψετε τις δικές σας συναρτήσεις. 371 00:17:45,340 --> 00:17:48,440 >> Και παρόλο που μπορεί να μην έχουν κάνει αυτό σε C, και ειλικρινά σε pset1 372 00:17:48,440 --> 00:17:51,866 δεν χρειάζεται πραγματικά να γράψω σας δική του λειτουργία, διότι το problem-- 373 00:17:51,866 --> 00:17:53,990 ενώ ίσως τρομακτικό σε πρώτη glance-- θα δείτε 374 00:17:53,990 --> 00:17:57,910 μπορεί τελικά να λυθεί με δεν είναι όλοι ότι πολλές γραμμές κώδικα. 375 00:17:57,910 --> 00:18:01,140 Αλλά με ότι είπε, σε όρους του γράφοντας τη δική σας λειτουργία, 376 00:18:01,140 --> 00:18:03,570 συνειδητοποιούν ότι η C δίνει σας αυτή η δυνατότητα. 377 00:18:03,570 --> 00:18:06,940 >> Πάω να πάει στον πηγαίο κώδικα του σήμερα, η οποία είναι ήδη διαθέσιμα σε απευθείας σύνδεση, 378 00:18:06,940 --> 00:18:10,900 και Πάω να πάει μπροστά και ανοιχτό μέχρι ένα πρόγραμμα που ονομάζεται 0.C λειτουργία, 379 00:18:10,900 --> 00:18:14,620 και σε λειτουργία μηδέν θα δούμε μερικά πράγματα. 380 00:18:14,620 --> 00:18:19,160 Στην πρώτη γραμμές 18 και 23 είναι η κύρια λειτουργία μου. 381 00:18:19,160 --> 00:18:22,414 Και τώρα που αρχίζουμε να διαβάσετε κώδικα που δεν είμαστε εγγράφως σχετικά με την πετάξει, 382 00:18:22,414 --> 00:18:25,080 αλλά αντ 'αυτού έχω γράψει εκ των προτέρων ή ότι σας σε ένα πρόβλημα που 383 00:18:25,080 --> 00:18:27,910 μπορεί να λάβει με έχουν γραφτεί εκ των προτέρων. 384 00:18:27,910 --> 00:18:30,040 Ένας καλός τρόπος για να ξεκινήσετε διάβαζα τον κώδικα κάποιου άλλου 385 00:18:30,040 --> 00:18:31,400 είναι να κοιτάξουμε για την κύρια λειτουργία. 386 00:18:31,400 --> 00:18:34,420 Υπολογίστε όπου αυτήν την καταχώρηση σημείο είναι να τρέχει το πρόγραμμα, 387 00:18:34,420 --> 00:18:36,580 και στη συνέχεια να ακολουθήσει λογικά από εκεί. 388 00:18:36,580 --> 00:18:40,190 >> Έτσι, το πρόγραμμα αυτό προφανώς εκτυπώσεις Το όνομά σας ακολουθούμενο από άνω και κάτω τελεία. 389 00:18:40,190 --> 00:18:42,490 Στη συνέχεια, χρησιμοποιήστε GetString από τη βιβλιοθήκη CS50 390 00:18:42,490 --> 00:18:46,050 για να πάρετε μια σειρά, ή μια λέξη ή φράση από τον χρήστη στο πληκτρολόγιο. 391 00:18:46,050 --> 00:18:48,390 Και έπειτα υπάρχει αυτό πράγμα here-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Τώρα PrintName δεν είναι λειτουργία που έρχεται με C. 393 00:18:51,420 --> 00:18:52,970 Δεν είναι στο πρότυπο io.h. 394 00:18:52,970 --> 00:18:55,570 Δεν είναι σε CS50.h. 395 00:18:55,570 --> 00:18:57,880 Είναι μάλλον στο ίδιο αρχείο. 396 00:18:57,880 --> 00:19:01,000 Παρατηρήστε αν μετακινηθείτε προς τα κάτω ένα bit-- γραμμές 25 έως 27-- 397 00:19:01,000 --> 00:19:05,330 Είναι απλά ένα όμορφο τρόπο σχολιασμού κωδικό σας χρησιμοποιώντας τα αστέρια και καθέτους. 398 00:19:05,330 --> 00:19:07,320 Αυτό είναι ένα πολυ-line Σχολιάστε, και αυτό είναι ακριβώς 399 00:19:07,320 --> 00:19:10,570 περιγραφή μου στο γαλάζιο τι κάνει αυτή η λειτουργία. 400 00:19:10,570 --> 00:19:14,530 >> Επειδή στις γραμμές 28 έως 31, Έχω γράψει μια εξαιρετικά απλή λειτουργία 401 00:19:14,530 --> 00:19:16,280 του οποίου το όνομα είναι PrintName. 402 00:19:16,280 --> 00:19:19,560 Παίρνει πόσες επιχειρήματα θα λέγατε; 403 00:19:19,560 --> 00:19:25,120 Έτσι, ένα argument-- επειδή υπάρχει ένα επιχείρημα που αναφέρονται μέσα στις παρενθέσεις. 404 00:19:25,120 --> 00:19:27,000 Ο τύπος του οποίου είναι String. 405 00:19:27,000 --> 00:19:30,240 Ποια είναι να πούμε PrintName Είναι σαν αυτό το μαύρο κουτί 406 00:19:30,240 --> 00:19:32,910 ή λειτουργία που λαμβάνει ως είσοδο ένα string. 407 00:19:32,910 --> 00:19:35,730 >> Και το όνομα αυτού του String βολικά θα Name. 408 00:19:35,730 --> 00:19:37,840 Δεν S, δεν Ν, αλλά Name. 409 00:19:37,840 --> 00:19:41,090 Έτσι τι PrintName κάνει; 410 00:19:41,090 --> 00:19:42,210 Είναι ωραίο απλό. 411 00:19:42,210 --> 00:19:45,390 Ακριβώς όπως μια γραμμή κώδικα για η printf, αλλά προφανώς 412 00:19:45,390 --> 00:19:47,950 εκτυπώνει "Γεια σας," έτσι και έτσι. 413 00:19:47,950 --> 00:19:50,070 Όταν το έτσι και έτσι προέρχεται από το επιχείρημα. 414 00:19:50,070 --> 00:19:52,300 >> Τώρα αυτό δεν είναι μια τεράστια καινοτομία εδώ. 415 00:19:52,300 --> 00:19:56,710 Πραγματικά, έχω πάρει ένα πρόγραμμα που θα μπορούσε έχουν γραφτεί με μία γραμμή κώδικα 416 00:19:56,710 --> 00:20:00,190 από τη θέση αυτή εδώ, και το άλλαξε σε κάτι 417 00:20:00,190 --> 00:20:04,920 που περιλαμβάνει περίπου έξι ή επτά ή έτσι γραμμές κώδικα σε όλη τη διαδρομή προς τα κάτω εδώ. 418 00:20:04,920 --> 00:20:08,190 >> Αλλά είναι η εξάσκηση ενός αρχή που είναι γνωστή ως αφαίρεση. 419 00:20:08,190 --> 00:20:12,550 Το είδος της ενθυλάκωσης εντός ενός νέου λειτουργία που έχει ένα όνομα, και καλύτερα 420 00:20:12,550 --> 00:20:14,590 ακόμη ότι η ονομασία κυριολεκτικά λέει τι κάνει. 421 00:20:14,590 --> 00:20:16,880 Εννοώ printf-- ότι δεν είναι ιδιαίτερα περιγραφικό. 422 00:20:16,880 --> 00:20:18,932 Αν θέλετε να δημιουργήσετε ένα κομμάτι του παζλ, ή αν 423 00:20:18,932 --> 00:20:21,140 θέλετε να δημιουργήσετε μια συνάρτηση που εκτυπώνει το όνομα κάποιου, 424 00:20:21,140 --> 00:20:23,230 η ομορφιά του να κάνει αυτό είναι ότι μπορώ πραγματικά 425 00:20:23,230 --> 00:20:27,170 δοθούν σε αυτή την λειτουργία ένα όνομα που περιγράφει αυτό που κάνει. 426 00:20:27,170 --> 00:20:29,844 >> Τώρα παίρνει στην είσοδο ότι Έχω αυθαίρετα ονομάζεται όνομα, 427 00:20:29,844 --> 00:20:32,760 αλλά ότι επίσης είναι υπέροχα περιγραφικό αντί να είναι λίγο πιο 428 00:20:32,760 --> 00:20:36,140 γενόσημων όπως S. Και άκυρη, για τώρα, απλά σημαίνει 429 00:20:36,140 --> 00:20:38,330 ότι αυτή η λειτουργία δεν Δώσε μου πίσω τίποτα. 430 00:20:38,330 --> 00:20:41,127 Δεν είναι όπως GetString ότι κυριολεκτικά με τα χέρια πίσω ένα string 431 00:20:41,127 --> 00:20:43,960 όπως κάναμε με τα κομμάτια χαρτιού με τους συμμαθητές σας την περασμένη εβδομάδα, 432 00:20:43,960 --> 00:20:45,990 αλλά μάλλον έχει μόνο μια παρενέργεια. 433 00:20:45,990 --> 00:20:48,080 Εκτυπώνει κάτι στην οθόνη. 434 00:20:48,080 --> 00:20:53,880 >> Έτσι, στο τέλος της ημέρας, αν κάνουν τη λειτουργία-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 θα δούμε ότι ζητά για το όνομά μου. 436 00:20:55,450 --> 00:20:58,150 Τύπου Ι David, και οι τύποι από το όνομά μου. 437 00:20:58,150 --> 00:21:01,080 Αν μπορώ να το κάνω και πάλι με τον Rob, πρόκειται να πω "Γεια σας, Rob." 438 00:21:01,080 --> 00:21:04,280 Έτσι, μια απλή ιδέα, αλλά ίσως προεκτείνουν από αυτό διανοητικά 439 00:21:04,280 --> 00:21:06,750 ότι τα προγράμματα σας να πάρετε λίγο πιο περίπλοκη, 440 00:21:06,750 --> 00:21:10,290 και θέλετε να γράψετε ένα κομμάτι της κώδικα και κλήση που code-- επικαλούνται 441 00:21:10,290 --> 00:21:13,270 ότι code-- από κάποιο περιγραφικό ονομάσετε όπως PrintName, 442 00:21:13,270 --> 00:21:15,600 C δεν μας δίνουν αυτή τη δυνατότητα. 443 00:21:15,600 --> 00:21:17,660 >> Εδώ είναι ένα άλλο απλό παράδειγμα. 444 00:21:17,660 --> 00:21:22,940 Για παράδειγμα, αν ανοίξει ένα αρχείο από σήμερα ονομάζεται return.c, 445 00:21:22,940 --> 00:21:24,270 παρατηρήσετε τι έχω κάνει εδώ. 446 00:21:24,270 --> 00:21:26,330 Το μεγαλύτερο μέρος αυτής κύρια λειτουργία είναι printf. 447 00:21:26,330 --> 00:21:30,360 Θέλω πρώτα αυθαίρετα προετοιμάσει ένα μεταβλητή που ονομάζεται x με τον αριθμό 2. 448 00:21:30,360 --> 00:21:34,110 Στη συνέχεια εκτυπώστε "x είναι τώρα % I "περνώντας την τιμή του x. 449 00:21:34,110 --> 00:21:35,500 Έτσι Απλά λέω ό, τι είναι. 450 00:21:35,500 --> 00:21:37,208 >> Τώρα είμαι μόνο με τόλμη υποστηρίζοντας με printf. 451 00:21:37,208 --> 00:21:42,050 Είμαι cubing ότι η τιμή x, και είμαι αυτόν τον τρόπο καλώντας μια συνάρτηση 452 00:21:42,050 --> 00:21:45,590 που ονομάζεται πέρασμα κύβος στο x ως επιχείρημα, 453 00:21:45,590 --> 00:21:49,300 και στη συνέχεια να αποθηκευτεί το αποτέλεσμα στην ίδια την μεταβλητή, x. 454 00:21:49,300 --> 00:21:51,340 Έτσι είμαι clobbering την τιμή του x. 455 00:21:51,340 --> 00:21:53,380 Είμαι επιτακτικό το τιμή του x με ανεξάρτητα 456 00:21:53,380 --> 00:21:56,510 το αποτέλεσμα της κλήσης Αυτή η λειτουργία είναι κύβος. 457 00:21:56,510 --> 00:21:59,530 Και τότε ακριβώς να εκτυπώσετε ορισμένα αφράτα πράγματα εδώ λέει ό, τι έκανα. 458 00:21:59,530 --> 00:22:01,600 >> Έτσι, αυτό που τότε είναι κύβος; 459 00:22:01,600 --> 00:22:03,510 Παρατηρήστε τι είναι θεμελιωδώς διαφορετικά εδώ. 460 00:22:03,510 --> 00:22:05,540 Έχω δώσει την λειτουργία ένα όνομα όπως πριν. 461 00:22:05,540 --> 00:22:08,270 Έχω καθορίσει ένα όνομα για ένα επιχείρημα. 462 00:22:08,270 --> 00:22:11,650 Αυτή τη φορά λέγεται n αντί του ονόματος, αλλά θα μπορούσα να το ονομάσουμε ό, τι θέλω. 463 00:22:11,650 --> 00:22:12,650 Αλλά αυτό είναι διαφορετικό. 464 00:22:12,650 --> 00:22:14,080 Αυτό το πράγμα στην αριστερά. 465 00:22:14,080 --> 00:22:16,290 Προηγουμένως ήταν ποια λέξη-κλειδί; 466 00:22:16,290 --> 00:22:16,870 Αγόρια. 467 00:22:16,870 --> 00:22:18,580 Τώρα είναι προφανώς int. 468 00:22:18,580 --> 00:22:20,630 >> Λοιπόν, τι είναι ίσως το πάρει; 469 00:22:20,630 --> 00:22:24,090 Εκτιμώντας κενό υποδηλώνει το είδος της ανυπαρξία, και αυτή ήταν η περίπτωση. 470 00:22:24,090 --> 00:22:25,970 PrintName επέστρεψε τίποτα. 471 00:22:25,970 --> 00:22:27,942 Θα έκανε κάτι, αλλά δεν μου δώσεις πίσω 472 00:22:27,942 --> 00:22:30,650 κάτι που θα μπορούσε να θέσει σχετικά με την αριστερή πλευρά του το σύμβολο ισότητας 473 00:22:30,650 --> 00:22:32,460 όπως έχω κάνει εδώ στη γραμμή 22. 474 00:22:32,460 --> 00:22:36,780 >> Έτσι, αν πω σε on line 30, Τι είναι αυτό ίσως υπονοεί 475 00:22:36,780 --> 00:22:38,610 για ποιο κύβος κάνει για μένα; 476 00:22:38,610 --> 00:22:41,110 Ναι; 477 00:22:41,110 --> 00:22:42,310 Επιστρέφει έναν ακέραιο. 478 00:22:42,310 --> 00:22:44,590 Γι 'αυτό μου δίνει πίσω, για παράδειγμα, ένα κομμάτι από χαρτί 479 00:22:44,590 --> 00:22:46,580 για την οποία έχει γράψει την απάντηση. 480 00:22:46,580 --> 00:22:50,130 2 κύβους, κύβους ή 3, ή 4 cubed-- ό, τι πέρασα, 481 00:22:50,130 --> 00:22:51,540 και πώς θα γίνει αυτό; 482 00:22:51,540 --> 00:22:54,810 Λοιπόν, ακριβώς n φορές n n φορές είναι το πώς μπορώ να σε κύβους μια αξία. 483 00:22:54,810 --> 00:22:57,110 Έτσι, και πάλι, εξαιρετικά απλή ιδέα, αλλά εκδηλωτικός 484 00:22:57,110 --> 00:23:00,100 τώρα πώς μπορούμε να γράψουμε λειτουργίες ότι στην πραγματικότητα μας είχε πίσω 485 00:23:00,100 --> 00:23:02,380 οι τιμές που μπορεί να έχουν ενδιαφέρον. 486 00:23:02,380 --> 00:23:05,740 >> Ας δούμε ένα τελευταίο παράδειγμα εδώ που ονομάζεται λειτουργία ένα. 487 00:23:05,740 --> 00:23:08,530 Σε αυτό το παράδειγμα, ξεκινά να πάρει πιο συναρπαστικό. 488 00:23:08,530 --> 00:23:12,400 Έτσι, σε μία λειτουργία, αυτό program-- ειδοποίηση τελικά 489 00:23:12,400 --> 00:23:14,920 καλεί μια συνάρτηση που ονομάζεται GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt δεν είναι ένα λειτουργία στη βιβλιοθήκη CS50, 491 00:23:17,800 --> 00:23:20,400 αλλά εμείς αποφασίσαμε Θα ήθελα να υπάρχει. 492 00:23:20,400 --> 00:23:24,550 >> Έτσι, αν μετακινηθείτε προς τα κάτω αργότερα στο αρχείο, παρατηρήσετε πώς πήγα για την εφαρμογή 493 00:23:24,550 --> 00:23:26,560 να πάρει θετικό int, και εγώ λένε ότι είναι πιο συναρπαστικό 494 00:23:26,560 --> 00:23:28,992 γιατί αυτό είναι ένα αξιοπρεπές αριθμός των γραμμών του κώδικα. 495 00:23:28,992 --> 00:23:30,700 Δεν είναι απλά ένα ανόητο μικρό πρόγραμμα παιχνιδιών. 496 00:23:30,700 --> 00:23:33,870 Είναι πραγματικά έχεις κάποιο έλεγχο σφαλμάτων και να κάνουμε κάτι πιο χρήσιμο. 497 00:23:33,870 --> 00:23:38,470 >> Έτσι, αν δεν έχετε δει το πέρασμα βίντεο που έχουμε ενσωματωμένα σε pset1, 498 00:23:38,470 --> 00:23:42,350 ξέρετε ότι αυτό είναι ένα είδος βρόχο C, παρόμοια με το πνεύμα 499 00:23:42,350 --> 00:23:44,270 για τα είδη των πραγμάτων Scratch μπορεί να κάνει. 500 00:23:44,270 --> 00:23:46,320 Και θα το κάνει λέει να το κάνετε αυτό. 501 00:23:46,320 --> 00:23:47,500 Εκτυπώστε αυτό. 502 00:23:47,500 --> 00:23:51,860 Στη συνέχεια, να προχωρήσει και να πάρει n-- πάρετε μια int και να το αποθηκεύσετε στο n, 503 00:23:51,860 --> 00:23:55,760 και συνεχίστε να κάνετε αυτό ξανά και ξανά και πάλι εφ 'όσον η είναι μικρότερη από ένα. 504 00:23:55,760 --> 00:23:58,720 >> Έτσι, n πρόκειται να είναι μικρότερη από ένα μόνο αν ο άνθρωπος δεν είναι συνεργαζόμενοι. 505 00:23:58,720 --> 00:24:01,980 Αν αυτός ή αυτή έχει την πληκτρολόγηση σε 0 ή -1 ή -50, 506 00:24:01,980 --> 00:24:04,790 Αυτή η βρόχος πρόκειται να κρατήσει εκτελεί ξανά και ξανά. 507 00:24:04,790 --> 00:24:07,549 Και τελικά παρατηρήσετε, I απλά επιστρέφει την τιμή. 508 00:24:07,549 --> 00:24:09,590 Έτσι τώρα έχουμε μια συνάρτηση ότι θα πάει ωραίο 509 00:24:09,590 --> 00:24:14,040 αν CS50 θα εφαρμόσει σε CS50.h και CS50.c για σας, 510 00:24:14,040 --> 00:24:16,520 αλλά εδώ μπορούμε τώρα εφαρμόσουν αυτό τον εαυτό μας. 511 00:24:16,520 --> 00:24:19,230 >> Αλλά δύο σχόλια σχετικά με ορισμένα βασικά στοιχεία. 512 00:24:19,230 --> 00:24:24,390 Ένα-- γιατί δηλώνω int n, νομίζετε, στη γραμμή 29 513 00:24:24,390 --> 00:24:27,139 αντί απλά να κάνει Αυτό εδώ, το οποίο είναι 514 00:24:27,139 --> 00:24:28,930 πιο συνεπής με αυτό που κάναμε την περασμένη εβδομάδα; 515 00:24:28,930 --> 00:24:29,430 Ναι; 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Μια καλή σκέψη. 518 00:24:35,110 --> 00:24:37,080 Έτσι, αν ήταν να το βάλει εδώ, είναι σαν να έχουμε 519 00:24:37,080 --> 00:24:39,110 κρατήσει δηλώνοντας ξανά και ξανά. 520 00:24:39,110 --> 00:24:42,000 Αυτό από μόνο του είναι δεν είναι προβληματική, per se, 521 00:24:42,000 --> 00:24:43,940 γιατί χρειαζόμαστε μόνο η αξία άπαξ και έπειτα 522 00:24:43,940 --> 00:24:45,330 θα πάμε να πάρετε ένα νέο ούτως ή άλλως. 523 00:24:45,330 --> 00:24:45,940 Αλλά μια καλή σκέψη. 524 00:24:45,940 --> 00:24:46,440 Ναι; 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Κλείσιμο. 527 00:24:53,330 --> 00:24:59,030 Έτσι, επειδή έχω δηλώσει n για γραμμή 29 έξω από το βρόχο, 528 00:24:59,030 --> 00:25:01,390 είναι προσβάσιμο σε όλη όλη αυτή η λειτουργία. 529 00:25:01,390 --> 00:25:05,400 Δεν είναι οι άλλες λειτουργίες, επειδή η είναι ακόμα μέσα από αυτά τα σγουρά 530 00:25:05,400 --> 00:25:06,470 τιράντες εδώ. 531 00:25:06,470 --> 00:25:07,940 So-- σίγουρος. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Ακριβώς. 534 00:25:12,940 --> 00:25:14,356 Έτσι, αυτό είναι ακόμη περισσότερο στο σημείο. 535 00:25:14,356 --> 00:25:18,600 Αν αντί δηλωθεί n εδώ στη γραμμή 32, 536 00:25:18,600 --> 00:25:22,340 είναι προβληματική, διότι η εικασία πού αλλού θα πρέπει να έχει πρόσβαση; 537 00:25:22,340 --> 00:25:25,620 Στη γραμμή 34, και η απλός κανόνας είναι 538 00:25:25,620 --> 00:25:30,060 ότι μπορείτε να χρησιμοποιήσετε μόνο μια μεταβλητή μέσα από τις πιο πρόσφατες άγκιστρα 539 00:25:30,060 --> 00:25:31,420 στην οποία δήλωσε. 540 00:25:31,420 --> 00:25:35,230 >> Δυστυχώς, γραμμή 34 είναι μια γραμμή πολύ αργά, 541 00:25:35,230 --> 00:25:38,560 γιατί έχω ήδη κλείσει η σγουρά στήριγμα στη γραμμή 33 542 00:25:38,560 --> 00:25:41,220 που αντιστοιχεί στο σγουρά στήριγμα στη γραμμή 30. 543 00:25:41,220 --> 00:25:44,180 Και έτσι αυτό είναι ένας τρόπος για να πούμε ότι αυτή η μεταβλητή int έχει ως πεδίο, 544 00:25:44,180 --> 00:25:46,970 να το πω έτσι, μόνο μέσα από αυτές τις αγκύλες. 545 00:25:46,970 --> 00:25:48,910 Απλά δεν υπάρχει έξω από αυτούς. 546 00:25:48,910 --> 00:25:51,580 >> Έτσι, πράγματι, αν το κάνω αυτό λάθος, επιτρέψτε μου να αποθηκεύσετε τον κωδικό 547 00:25:51,580 --> 00:25:53,530 όπως is-- γραμμένο λάθος. 548 00:25:53,530 --> 00:25:57,990 Επιτρέψτε μου να πάει μπροστά και να κάνουν λειτουργία-1, και notice-- σφάλμα. 549 00:25:57,990 --> 00:26:03,502 Χρήση της αδήλωτης αναγνωριστικό n στη γραμμή 35, η οποία είναι ακριβώς εδώ. 550 00:26:03,502 --> 00:26:05,210 Και αν μετακινηθείτε προς τα επάνω περαιτέρω, ένα άλλο. 551 00:26:05,210 --> 00:26:08,750 Χρήση της αδήλωτης αναγνωριστικό n στη γραμμή 34. 552 00:26:08,750 --> 00:26:11,200 >> Έτσι ο compiler, Clang, έχει παρατηρήσει ότι μόλις 553 00:26:11,200 --> 00:26:13,720 δεν υφίσταται ακόμη και αν σαφώς ότι υπάρχει οπτικά. 554 00:26:13,720 --> 00:26:16,090 Έτσι, μια απλή λύση είναι να δηλώνοντας εκεί. 555 00:26:16,090 --> 00:26:18,790 >> Τώρα, επιτρέψτε μου να μεταβείτε στο η κορυφή του αρχείου. 556 00:26:18,790 --> 00:26:21,080 Αυτό που πηδά έξω σε σας ως είναι λίγο διαφορετικό 557 00:26:21,080 --> 00:26:23,070 από τα πράγματα που κοίταξε την περασμένη εβδομάδα; 558 00:26:23,070 --> 00:26:26,990 Όχι μόνο δεν έχω όνομα, όχι μόνο δεν Έχω κάποια απότομη περιλαμβάνει επάνω στην κορυφή, 559 00:26:26,990 --> 00:26:29,340 Έχω κάτι που είμαι καλώντας ένα πρωτότυπο. 560 00:26:29,340 --> 00:26:36,100 Τώρα που φαίνεται απαίσια παρόμοιο με αυτό που μόλις είδαμε πριν από λίγο στη γραμμή 27. 561 00:26:36,100 --> 00:26:39,230 >> Οπότε ας συμπεράνουμε από μια διαφορετική μήνυμα λάθους γιατί έχω κάνει αυτό. 562 00:26:39,230 --> 00:26:42,050 Επιτρέψτε μου να προχωρήσει και διαγράψετε αυτές τις γραμμές υπάρχει. 563 00:26:42,050 --> 00:26:44,240 Και έτσι δεν ξέρουμε τίποτα για το πρωτότυπο. 564 00:26:44,240 --> 00:26:45,430 Ξανακάνω αυτό το αρχείο. 565 00:26:45,430 --> 00:26:46,890 Κάντε μία λειτουργία. 566 00:26:46,890 --> 00:26:48,090 Και τώρα, γαμώτο, τέσσερα λάθη. 567 00:26:48,090 --> 00:26:50,220 Ας μετακινηθείτε προς τα επάνω με το πρώτο. 568 00:26:50,220 --> 00:26:55,070 >> Σιωπηρή δήλωση της λειτουργίας να πάρει θετικό int είναι άκυρο C99. 569 00:26:55,070 --> 00:26:57,780 C99 σημαίνει μόνο το 1999 εκδοχή της γλώσσας 570 00:26:57,780 --> 00:26:59,710 C, η οποία είναι αυτό που είμαστε πραγματικά χρήση. 571 00:26:59,710 --> 00:27:01,050 Λοιπόν, τι σημαίνει αυτό; 572 00:27:01,050 --> 00:27:05,250 Καλά C-- και πιο συγκεκριμένα C compilers-- είναι αρκετά χαζός προγράμματα. 573 00:27:05,250 --> 00:27:07,420 Το μόνο που ξέρουν τι έχετε Τους είπα, και αυτό είναι 574 00:27:07,420 --> 00:27:08,960 πραγματικά θεματικές από την περασμένη εβδομάδα. 575 00:27:08,960 --> 00:27:12,910 >> Το πρόβλημα είναι ότι αν πάω σχετικά με την εφαρμογή της όνομα μέχρι εδώ, 576 00:27:12,910 --> 00:27:17,640 και καλώ μια λειτουργία που ονομάζεται GetPositiveInt εδώ στη γραμμή 20, 577 00:27:17,640 --> 00:27:22,520 ότι η λειτουργία δεν είναι τεχνικά υπάρχουν μέχρι το compiler βλέπει γραμμή 27. 578 00:27:22,520 --> 00:27:25,450 Δυστυχώς, ο compiler είναι κάνει τα πράγματα επάνω, κάτω, αριστερά, δεξιά, 579 00:27:25,450 --> 00:27:29,580 έτσι γιατί δεν έχει δει το εφαρμογή του GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 αλλά βλέπει προσπαθείς να το χρησιμοποιήσετε μέχρι εδώ, 581 00:27:32,400 --> 00:27:35,810 είναι ακριβώς πρόκειται να bail-- φωνάζεις σας με ένα σφάλμα message-- ίσως 582 00:27:35,810 --> 00:27:38,440 αινιγματικός, και στην πραγματικότητα δεν μεταγλώττιση του αρχείου. 583 00:27:38,440 --> 00:27:41,940 >> Έτσι το λεγόμενο πρωτότυπο επάνω εδώ είναι ομολογουμένως περιττή. 584 00:27:41,940 --> 00:27:47,870 Κυριολεκτικά, πήγα κάτω εδώ και Αντέγραψα και επικολληθεί από αυτό, και το έβαλα εδώ. 585 00:27:47,870 --> 00:27:51,020 Void θα ήταν πιο σωστό, οπότε θα κυριολεκτικά να αντιγράψετε και να επικολλήσετε αυτή τη φορά. 586 00:27:51,020 --> 00:27:52,854 I κυριολεκτικά αντιγραφεί και επικολληθεί αυτό. 587 00:27:52,854 --> 00:27:54,270 Πραγματικά ακριβώς όπως σαν ένα ψίχουλο ψωμιού. 588 00:27:54,270 --> 00:27:56,260 >> Μια μικρή ιδέα για τον compiler. 589 00:27:56,260 --> 00:27:58,860 Δεν ξέρω τι κάνει αυτό ακόμα, αλλά είμαι υπόσχεται να σας 590 00:27:58,860 --> 00:28:00,260 ότι θα υπάρξει τελικά. 591 00:28:00,260 --> 00:28:04,010 Και γι 'αυτό line-- σε γραμμή 16-- τελειώνει με ένα ερωτηματικό. 592 00:28:04,010 --> 00:28:05,486 Είναι περιττό από το σχεδιασμό. 593 00:28:05,486 --> 00:28:05,986 Ναι; 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Εάν δεν έχετε συνδέσει τη βιβλιοθήκη σας να στο-- oh, καλή ερώτηση. 596 00:28:14,360 --> 00:28:17,350 Sharp περιλαμβάνει έγκλειστα αρχείο κεφαλίδας. 597 00:28:17,350 --> 00:28:20,040 Ανάγκη να είναι-- πρέπει σχεδόν πάντα να είναι στην κορυφή 598 00:28:20,040 --> 00:28:23,270 του αρχείου για ένα similar-- για ακριβώς τον ίδιο λόγο, ναι. 599 00:28:23,270 --> 00:28:26,430 Επειδή το πρότυπο io.h είναι κυριολεκτικά μια γραμμή 600 00:28:26,430 --> 00:28:30,560 όπως αυτό, αλλά με τη λέξη printf, και με επιχειρήματα του τύπου και την επιστροφή του. 601 00:28:30,560 --> 00:28:33,310 Και έτσι κάνοντας απότομη περιλαμβάνουν μέχρι Εδώ, αυτό που είστε κυριολεκτικά κάνει 602 00:28:33,310 --> 00:28:36,380 είναι αντιγραφή και επικόλληση τα περιεχόμενα κάποιος άλλος έγραψε επάνω στην κορυφή. 603 00:28:36,380 --> 00:28:39,660 Με αυτόν τον τρόπο cluing τον κωδικό σας, για να το το γεγονός ότι δεν υπάρχουν αυτές οι λειτουργίες. 604 00:28:39,660 --> 00:28:40,160 Ναι; 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Απολύτως. 607 00:28:48,260 --> 00:28:51,690 Έτσι, μια πολύ έξυπνη και σωστή λύση θα ήταν, ξέρετε τι; 608 00:28:51,690 --> 00:28:53,760 Δεν ξέρω τι ένα πρωτότυπο είναι, αλλά ξέρω 609 00:28:53,760 --> 00:28:56,390 αν καταλαβαίνω ότι ο C είναι απλά άλαλος και rethinks πάνω προς τα κάτω. 610 00:28:56,390 --> 00:28:57,820 Λοιπόν ας το δώσουν ό, τι θέλει. 611 00:28:57,820 --> 00:29:01,650 Ας κοπεί εν λόγω κώδικα, επικόλληση επάνω κορυφή, και τώρα ωθήσει κύρια κάτω. 612 00:29:01,650 --> 00:29:03,470 Και αυτό θα λύσει το πρόβλημα. 613 00:29:03,470 --> 00:29:07,409 >> Αλλά θα μπορούσε πολύ εύκολα να καταλήξει σε ένα σενάριο στο οποίο το Α πρέπει να καλέσετε B, 614 00:29:07,409 --> 00:29:10,075 και ίσως Β καλεί πίσω στο A. Αυτό Είναι κάτι που ονομάζεται αναδρομή, 615 00:29:10,075 --> 00:29:11,370 και θα επανέλθω σε αυτό. 616 00:29:11,370 --> 00:29:13,911 Και αυτό μπορεί να είναι ή να μην είναι μια καλή πράγμα, αλλά μπορείτε σίγουρα 617 00:29:13,911 --> 00:29:15,110 να σπάσει αυτή τη λύση. 618 00:29:15,110 --> 00:29:17,690 >> Και επιπλέον, θα ήθελα ισχυρίζονται στυλιστικά, 619 00:29:17,690 --> 00:29:20,760 ειδικά όταν τα προγράμματά σας γίνει αυτή η μεγάλη και αυτό το διάστημα, 620 00:29:20,760 --> 00:29:23,064 είναι απλά σούπερ βολικό να θέσει κύρια στην κορυφή 621 00:29:23,064 --> 00:29:25,730 γιατί αυτό είναι το πράγμα που οι περισσότεροι Οι προγραμματιστές πρόκειται να νοιάζονται για. 622 00:29:25,730 --> 00:29:28,150 Και γι 'αυτό είναι λίγο καθαρότερα, αναμφισβήτητα, να το κάνει με τον τρόπο 623 00:29:28,150 --> 00:29:30,380 Εγώ αρχικά το έκανε με ένα πρωτότυπο ακόμη 624 00:29:30,380 --> 00:29:33,396 αν και φαίνεται λίγο περιττή την πρώτη ματιά. 625 00:29:33,396 --> 00:29:33,895 Ναι; 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Δυστυχώς, μπορεί να σας το πω πιο δυνατά; 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Εάν αλλάξετε τις θέσεις του εφαρμογή και το πρωτότυπο; 630 00:29:49,580 --> 00:29:51,270 Έτσι, αυτό είναι μια καλή ερώτηση. 631 00:29:51,270 --> 00:29:53,780 Αν εκ νέου το δηλώσει τα κάτω Εδώ, ας δούμε τι θα συμβεί. 632 00:29:53,780 --> 00:29:55,530 Έτσι, αν έβαλα αυτό κάτω Εδώ, λες. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Ω, συγγνώμη. 635 00:29:58,360 --> 00:29:58,859 Πιο δυνατά; 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Ακόμα πιο δυνατά. 638 00:30:04,011 --> 00:30:04,760 Αχ, καλή ερώτηση. 639 00:30:04,760 --> 00:30:05,860 Θα το ακυρώσει τη λειτουργία; 640 00:30:05,860 --> 00:30:08,901 Ξέρετε, μετά από όλα αυτά τα χρόνια, έχω έχουν ποτέ τεθεί ένα πρωτότυπο στη συνέχεια. 641 00:30:08,901 --> 00:30:13,810 Ας κάνουν τη λειτουργία-1 μετά από αυτό. 642 00:30:13,810 --> 00:30:15,279 >> [Μουρμουρίζει] 643 00:30:15,279 --> 00:30:16,320 DAVID J. MALAN: Αχ, περιμένετε. 644 00:30:16,320 --> 00:30:17,944 Έχουμε ακόμη να θέσει τα πάντα επάνω στην κορυφή. 645 00:30:17,944 --> 00:30:21,400 Ας κάνουμε αυτό εδώ, αν είμαι κατανόηση ερώτησή σας σωστά. 646 00:30:21,400 --> 00:30:24,700 Βάζω τα πάντα, συμπεριλαμβανομένων των το πρωτότυπο πάνω από την κύρια, 647 00:30:24,700 --> 00:30:28,180 αλλά βάζω το πρωτότυπο κάτω από την εφαρμογή. 648 00:30:28,180 --> 00:30:33,190 >> Έτσι, αν κάνω ένα, παίρνω πίσω ένα error-- αχρησιμοποίητο μεταβλητή n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Ναι, υπάρχει. 651 00:30:37,860 --> 00:30:38,360 Σας ευχαριστώ. 652 00:30:38,360 --> 00:30:39,430 Ας δούμε, μπορούμε να απαλλαγούμε από αυτό. 653 00:30:39,430 --> 00:30:41,304 Αυτό είναι ένα διαφορετικό bug, οπότε ας αγνοήσουμε αυτό. 654 00:30:41,304 --> 00:30:43,910 Ας πραγματικά ξανακάνω γρήγορα αυτό. 655 00:30:43,910 --> 00:30:48,100 >> Εντάξει, έτσι δεν είναι επιχείρημα δεδομένα χρησιμοποιείται από τη μορφή String 656 00:30:48,100 --> 00:30:52,310 n-- Ω, αυτό είναι επειδή Άλλαξα σε αυτά εδώ. 657 00:30:52,310 --> 00:30:55,885 Εντάξει, ξέρουμε ποια είναι η απάντηση πρόκειται να-- εντάξει, πάμε. 658 00:30:55,885 --> 00:31:00,560 Ah, ευχαριστώ για το θετικό. 659 00:31:00,560 --> 00:31:03,430 Εντάξει, εγώ θα διορθώσετε αυτό το κώδικα after-- αγνοήσει αυτό το συγκεκριμένο bug 660 00:31:03,430 --> 00:31:08,300 δεδομένου ότι αυτό was-- που λειτουργεί είναι η απάντηση. 661 00:31:08,300 --> 00:31:11,560 >> Γι 'αυτό δεν θα αντικαταστήσει αυτό που μόλις κάνατε. 662 00:31:11,560 --> 00:31:14,800 Υποψιάζομαι τον compiler είναι γραμμένο με τέτοιο τρόπο 663 00:31:14,800 --> 00:31:18,420 ότι αγνοεί το πρωτότυπο σας επειδή το σώμα, να το πω έτσι, 664 00:31:18,420 --> 00:31:20,922 της η λειτουργία έχει ήδη έχουν εφαρμοστεί πιο ψηλά. 665 00:31:20,922 --> 00:31:23,380 Θα πρέπει να συμβουλευτείτε πραγματικότητα το εγχειρίδιο του compiler 666 00:31:23,380 --> 00:31:26,171 για να καταλάβουμε αν υπάρχει οποιαδήποτε άλλη εμμέσως, αλλά με την πρώτη ματιά 667 00:31:26,171 --> 00:31:29,290 ακριβώς με την προσπάθεια και να πειραματίζεται, Δεν φαίνεται να υπάρχει επίδραση εκεί. 668 00:31:29,290 --> 00:31:30,730 Καλή ερώτηση. 669 00:31:30,730 --> 00:31:33,660 >> Ας προχωρήσουμε τώρα, κινείται μακριά από τις παρενέργειες που 670 00:31:33,660 --> 00:31:36,660 είναι λειτουργίες που κάνουν κάτι σαν οπτικά στην οθόνη με printf, 671 00:31:36,660 --> 00:31:38,090 αλλά δεν επιστρέφει μια τιμή. 672 00:31:38,090 --> 00:31:41,550 Και τις λειτουργίες που έχουν επιστροφή αξίες, όπως μόλις είδαμε μερικά από. 673 00:31:41,550 --> 00:31:45,350 Ήδη είδαμε αυτή την αντίληψη του πεδίου εφαρμογής, και θα δούμε αυτό ξανά και ξανά. 674 00:31:45,350 --> 00:31:47,210 Αλλά για τώρα, και πάλι, χρησιμοποιούν τον κανόνα του αντίχειρα 675 00:31:47,210 --> 00:31:51,410 ότι μια μεταβλητή μπορεί να χρησιμοποιηθεί μόνο μέσα από την πιο πρόσφατα άνοιξε 676 00:31:51,410 --> 00:31:54,350 και κλειστά άγκιστρα, όπως εμείς είδε στο συγκεκριμένο παράδειγμα. 677 00:31:54,350 --> 00:31:56,910 >> Και όπως επισημάνατε, υπάρχει μια ability-- 678 00:31:56,910 --> 00:32:00,040 θα μπορούσε να λύσει μερικά από αυτά τα προβλήματα βάζοντας μια μεταβλητή σε παγκόσμιο επίπεδο 679 00:32:00,040 --> 00:32:01,290 στην κορυφή ενός αρχείου. 680 00:32:01,290 --> 00:32:03,630 Αλλά σε όλες σχεδόν τις περιπτώσεις θα συνοφρύωμα επάνω σε αυτό, 681 00:32:03,630 --> 00:32:06,170 και μάλιστα δεν είναι καν πάει σε αυτή τη λύση για τώρα. 682 00:32:06,170 --> 00:32:09,890 Έτσι, για τώρα, το πακέτο είναι ότι μεταβλητές έχουν αυτή την αντίληψη του πεδίου εφαρμογής. 683 00:32:09,890 --> 00:32:13,430 >> Αλλά τώρα ας ρίξουμε μια ματιά σε ένα άλλο ξηρό τρόπο πραγματικά ψάχνει 684 00:32:13,430 --> 00:32:15,810 σε κάποια αρκετά ενδιαφέροντα λεπτομέρειες εφαρμογής. 685 00:32:15,810 --> 00:32:17,810 Πώς θα μπορούσαν να αντιπροσωπεύουν τις πληροφορίες. 686 00:32:17,810 --> 00:32:20,370 Και έχουμε ήδη εξετάσει αυτό κατά την πρώτη εβδομάδα της τάξης. 687 00:32:20,370 --> 00:32:23,320 Κοιτάζοντας εκτελέσιμα, και θυμηθούμε δεκαδικό. 688 00:32:23,320 --> 00:32:28,310 >> Αλλά ανάκληση από την περασμένη εβδομάδα ότι η C έχει διαφορετικούς τύπους δεδομένων και τσαμπιά περισσότερο, 689 00:32:28,310 --> 00:32:30,600 αλλά οι πιο χρήσιμες αυτές για τώρα μπορεί να είναι αυτά. 690 00:32:30,600 --> 00:32:36,030 Μια χαρα, ή χαρακτήρα, που συμβαίνει να είναι ένα byte, ή οκτώ bits συνολικά. 691 00:32:36,030 --> 00:32:40,060 Και ότι είναι να πούμε ότι το μέγεθος ενός χαρακτήρα είναι μόνο ένα byte. 692 00:32:40,060 --> 00:32:45,370 Ένα byte είναι οκτώ bits, έτσι αυτό σημαίνει ότι μπορούμε να αντιπροσωπεύει τον αριθμό των χαρακτήρων. 693 00:32:45,370 --> 00:32:47,320 Πόσα γράμματα ή σύμβολα στο πληκτρολόγιο 694 00:32:47,320 --> 00:32:49,210 αν έχουμε ένα byte ή οκτώ bits. 695 00:32:49,210 --> 00:32:51,546 Σκεφτείτε πίσω στην εβδομάδα μηδέν. 696 00:32:51,546 --> 00:32:53,420 Αν έχετε οκτώ bits, πόσα τιμές 697 00:32:53,420 --> 00:32:55,503 μπορεί να σας εκπροσωπεί με πρότυπα μηδενικά και μονάδες; 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 Ένα-- περισσότερο από αυτό. 700 00:33:00,260 --> 00:33:03,490 Έτσι, 256 συνολικά, αν αρχίζουν να μετρούν από το μηδέν. 701 00:33:03,490 --> 00:33:07,120 Έτσι, αν έχετε οκτώ bits-- οπότε αν εμείς είχε δυαδικό λαμπτήρες μας εδώ και πάλι, 702 00:33:07,120 --> 00:33:12,180 θα μπορούσαμε να μετατρέψουμε αυτές τις λάμπες φωτός για και ανοικτά σε οποιαδήποτε από τις 256 μοναδικά μοτίβα. 703 00:33:12,180 --> 00:33:13,640 >> Τώρα αυτό είναι λίγο προβληματικό. 704 00:33:13,640 --> 00:33:16,857 Όχι τόσο για τα αγγλικά και λατινογενείς γλώσσες, αλλά σίγουρα 705 00:33:16,857 --> 00:33:19,190 όταν σας παρουσιάσουμε, για παράδειγμα, ασιατικές γλώσσες, η οποία 706 00:33:19,190 --> 00:33:22,580 έχουν πολύ περισσότερα σύμβολα παρά σαν 26 γράμματα της αλφαβήτου. 707 00:33:22,580 --> 00:33:24,390 Είμαστε πραγματικά μπορεί να χρειαστεί περισσότερα από ένα byte. 708 00:33:24,390 --> 00:33:28,240 Και ευτυχώς στην Τα τελευταία χρόνια έχει κοινωνίας 709 00:33:28,240 --> 00:33:31,040 υιοθέτησε άλλα πρότυπα που χρησιμοποιούν περισσότερα από ένα byte ανά φόρτιση. 710 00:33:31,040 --> 00:33:34,210 >> Αλλά για τώρα στη C, η προεπιλογή είναι μόνο ένα byte ή οκτώ bits. 711 00:33:34,210 --> 00:33:38,195 Ένας ακέραιος, εν τω μεταξύ, είναι τέσσερις bytes, αλλιώς γνωστή ως 32 bits. 712 00:33:38,195 --> 00:33:41,320 Πράγμα που σημαίνει ό, τι είναι η μεγαλύτερη δυνατή αριθμός που μπορούμε να εκπροσωπεί με έναν int 713 00:33:41,320 --> 00:33:41,820 προφανώς; 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Με ένα δισεκατομμύριο. 716 00:33:45,050 --> 00:33:46,760 Έτσι είναι τέσσερα δισεκατομμύρια δώσει ή να πάρει. 717 00:33:46,760 --> 00:33:49,840 2 στην 32η δύναμη, αν αναλάβει καμία αρνητική αριθμούς 718 00:33:49,840 --> 00:33:52,530 και να χρησιμοποιήσουν όλα τα θετικά αριθμοί, είναι τέσσερα δισεκατομμύρια 719 00:33:52,530 --> 00:33:53,730 ή να δώσει δυνατότητες. 720 00:33:53,730 --> 00:33:57,890 Ο πλωτήρας, εν τω μεταξύ, είναι ένα διαφορετικό είδος του τύπου δεδομένων σε C. Είναι ακόμα ένας αριθμός, 721 00:33:57,890 --> 00:33:58,990 αλλά είναι ένας πραγματικός αριθμός. 722 00:33:58,990 --> 00:34:00,660 Κάτι με ένα δεκαδικό σημείο. 723 00:34:00,660 --> 00:34:03,000 Και αποδεικνύεται ότι C χρησιμοποιεί τέσσερα bytes 724 00:34:03,000 --> 00:34:05,340 να αντιπροσωπεύουν τιμές κινητής υποδιαστολής. 725 00:34:05,340 --> 00:34:09,420 >> Δυστυχώς, πόσα πλωτά Σημείο τιμές είναι στον κόσμο εκεί; 726 00:34:09,420 --> 00:34:11,582 Πόσοι πραγματικοί αριθμοί υπάρχουν; 727 00:34:11,582 --> 00:34:13,540 Υπάρχει μια άπειρη τον αριθμό, και γι 'αυτό το θέμα 728 00:34:13,540 --> 00:34:15,164 υπάρχει ένας άπειρος αριθμός των ακεραίων. 729 00:34:15,164 --> 00:34:18,070 Έτσι, είμαστε ήδη το είδος των σκάψιμο εαυτούς μας μια τρύπα εδώ. 730 00:34:18,070 --> 00:34:21,780 Όπου προφανώς computers-- σε Τουλάχιστον προγράμματα γραμμένα σε C για them-- 731 00:34:21,780 --> 00:34:24,110 μπορεί μόνο να μετράει ως το τέσσερα δισεκατομμύρια δώσει ή να λάβει, 732 00:34:24,110 --> 00:34:26,260 και τιμές κινητής υποδιαστολής μπορεί μόνο φαινομενικά 733 00:34:26,260 --> 00:34:28,330 έχουν κάποια πεπερασμένη ποσότητα της ακρίβειας. 734 00:34:28,330 --> 00:34:30,810 Μόνο τόσα πολλά ψηφία μετά την υποδιαστολής τους. 735 00:34:30,810 --> 00:34:32,822 >> Επειδή, φυσικά, εάν έχετε μόνο 32 bits, 736 00:34:32,822 --> 00:34:36,030 Δεν ξέρω πώς θα πάμε για να πάει για αντιπροσωπεύουν πραγματικές numbers-- πιθανώς 737 00:34:36,030 --> 00:34:37,409 με διαφορετικούς τύπους μοντέλων. 738 00:34:37,409 --> 00:34:40,030 Αλλά υπάρχει σίγουρα ένα πεπερασμένο αριθμός αυτών των προτύπων, 739 00:34:40,030 --> 00:34:41,830 έτσι και εδώ, αυτό είναι προβληματικό. 740 00:34:41,830 --> 00:34:43,710 >> Τώρα μπορούμε να αποφύγουμε το πρόβλημα ελαφρώς. 741 00:34:43,710 --> 00:34:45,710 Εάν δεν θέλετε να χρησιμοποιήσετε ένα πλωτήρα, μπορείτε να χρησιμοποιήσετε ένα διπλό 742 00:34:45,710 --> 00:34:50,230 σε C, το οποίο σας δίνει οκτώ bytes, το οποίο είναι πολύ πιο πιθανά πρότυπα μηδενικά 743 00:34:50,230 --> 00:34:50,730 και αυτά. 744 00:34:50,730 --> 00:34:55,199 Αλλά είναι ακόμα περιορισμένη, η οποία θα να είναι προβληματική αν γράφετε λογισμικό 745 00:34:55,199 --> 00:34:57,670 για γραφικά ή για φανταχτερά μαθηματικούς τύπους. 746 00:34:57,670 --> 00:35:00,410 Έτσι, ίσως να θέλουν πραγματικά να μετρήσει μέχρι και μεγαλύτερο από αυτό. 747 00:35:00,410 --> 00:35:05,640 Μια μεγάλη long-- βλακωδώς named-- Είναι, επίσης, οκτώ bytes, ή 64 bits, 748 00:35:05,640 --> 00:35:10,260 και αυτό είναι δύο φορές όσο ένα int, και είναι για μεγάλο χρονικό ακέραια τιμή. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- αν ένας int είναι τέσσερα bytes, πόσο καιρό είναι μια μεγάλη σε C συνήθως; 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Επίσης, τέσσερα bytes, αλλά ένα πολύ καιρό είναι οκτώ bytes, 752 00:35:21,560 --> 00:35:23,050 και αυτό είναι για ιστορικούς λόγους. 753 00:35:23,050 --> 00:35:26,450 >> Αλλά το πακέτο τώρα Είναι απλά ότι τα δεδομένα έχει 754 00:35:26,450 --> 00:35:29,625 να εκπροσωπούνται σε ένα computer-- που είναι μια φυσική συσκευή με το ηλεκτρικό ρεύμα, 755 00:35:29,625 --> 00:35:32,190 αυτό είναι γενικά οδήγηση αυτά τα μηδενικά και ones-- 756 00:35:32,190 --> 00:35:34,320 με πεπερασμένες ποσότητες της ακρίβειας. 757 00:35:34,320 --> 00:35:35,620 Έτσι, ποιο είναι το πρόβλημα τότε; 758 00:35:35,620 --> 00:35:37,480 >> Λοιπόν υπάρχει ένα πρόβλημα από υπερχείλιση ακεραίου. 759 00:35:37,480 --> 00:35:39,780 Όχι μόνο σε C, αλλά και σε υπολογιστές γενικότερα. 760 00:35:39,780 --> 00:35:42,590 Για παράδειγμα, εάν αυτό είναι ένα byte αξίζει μια bit-- 761 00:35:42,590 --> 00:35:45,120 οπότε αν αυτό είναι οκτώ bit-- όλα εκ των οποίων είναι το νούμερο ένα. 762 00:35:45,120 --> 00:35:47,300 Τι αριθμός είναι αυτή εκπροσωπούν, αν υποθέσουμε 763 00:35:47,300 --> 00:35:50,730 Είναι όλες θετικές τιμές σε δυαδικό; 764 00:35:50,730 --> 00:35:54,410 >> 255, και δεν είναι 256, διότι μηδέν είναι το χαμηλότερο αριθμό. 765 00:35:54,410 --> 00:35:56,760 Έτσι 255 είναι η υψηλότερη ένα, αλλά το πρόβλημα 766 00:35:56,760 --> 00:36:00,330 είναι ας υποθέσουμε ότι ήθελα να προσαύξηση αυτή μεταβλητή που 767 00:36:00,330 --> 00:36:04,030 χρησιμοποιεί οκτώ bits συνολικά αν θέλω να την αυξήσετε. 768 00:36:04,030 --> 00:36:07,160 >> Λοιπόν, το συντομότερο μπορώ να προσθέσω ένα ένα έως όλα από αυτά τα αυτά, 769 00:36:07,160 --> 00:36:10,500 ίσως μπορείτε να φανταστείτε visually-- μόνο σαν να κουβαλά το ένα χρησιμοποιώντας decimals-- 770 00:36:10,500 --> 00:36:12,300 κάτι που πρόκειται να ρέει προς τα αριστερά. 771 00:36:12,300 --> 00:36:15,590 Και πράγματι, αν μπορώ να προσθέσω τον αριθμό ένας προς αυτό, τι συμβαίνει σε δυαδική 772 00:36:15,590 --> 00:36:17,670 είναι ότι ξεχειλίζει πίσω στο μηδέν. 773 00:36:17,670 --> 00:36:21,730 >> Έτσι, αν δεν use-- μόνο ένα int, αλλά ένα byte για να μετρήσει ακέραιοι 774 00:36:21,730 --> 00:36:27,170 σε ένα πρόγραμμα, με default-- συντομότερο μπορείτε να πάρετε 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 έρχεται μετά από 255, η οποία δεν είναι αυτό που είναι πιθανόν να 776 00:36:32,710 --> 00:36:34,790 ένας χρήστης πρόκειται να περιμένουμε. 777 00:36:34,790 --> 00:36:39,620 >> Τώρα, εν τω μεταξύ σε κινητής υποδιαστολής κόσμο, έχετε επίσης ένα παρόμοιο πρόβλημα. 778 00:36:39,620 --> 00:36:42,670 Όχι τόσο με την μεγαλύτερη number-- αν και αυτό είναι ακόμα ένα ζήτημα. 779 00:36:42,670 --> 00:36:45,360 Αλλά με το ποσό της ακρίβειας ότι μπορείτε να εκπροσωπεί. 780 00:36:45,360 --> 00:36:49,490 Έτσι, ας ρίξουμε μια ματιά σε αυτό το παράδειγμα εδώ και από code-- πηγή σημερινή 781 00:36:49,490 --> 00:36:52,070 float-0.c. 782 00:36:52,070 --> 00:36:54,280 >> Και παρατηρήσετε ότι είναι ένα σούπερ απλό πρόγραμμα το οποίο 783 00:36:54,280 --> 00:36:56,580 πρέπει προφανώς να εκτυπώσετε ό, τι τιμή; 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Τι μπορείτε να στοιχηματίσετε ότι αυτό πρόκειται να εκτυπώσετε παρόλο που υπάρχει ένα κομμάτι της νέας σύνταξης 786 00:37:04,110 --> 00:37:05,540 εδώ; 787 00:37:05,540 --> 00:37:06,700 Έτσι, ελπίζουμε 0.1. 788 00:37:06,700 --> 00:37:10,000 Έτσι, το ισοδύναμο του ενός δεκάτου γιατί κάνω 1 διαιρείται με 10. 789 00:37:10,000 --> 00:37:12,430 Είμαι αποθήκευση την απάντηση σε μια μεταβλητή που ονομάζεται F. 790 00:37:12,430 --> 00:37:15,850 Αυτή η μεταβλητή είναι τύπου float, η οποία είναι μια λέξη-κλειδί που μόλις πρότεινε υπήρχε. 791 00:37:15,850 --> 00:37:18,910 >> Δεν έχω ξαναδεί κάτι τέτοιο, αλλά Αυτό είναι το είδος της ένα τακτοποιημένο τρόπο στην printf 792 00:37:18,910 --> 00:37:22,110 για να καθορίσετε πόσα ψηφία θέλετε να δείτε μετά την υποδιαστολή. 793 00:37:22,110 --> 00:37:25,020 Έτσι, αυτό το συμβολισμό σημαίνει μόνο ότι εδώ είναι ένα σύμβολο κράτησης θέσης. 794 00:37:25,020 --> 00:37:27,900 Είναι ένα πλωτό σημείο αξίας, και OH, από τον τρόπο, 795 00:37:27,900 --> 00:37:31,389 δείχνουν ότι με το δεκαδικό σημείο με ένας αριθμός μετά το δεκαδικό σημείο. 796 00:37:31,389 --> 00:37:33,180 Έτσι, αυτό είναι ο αριθμός σημαντικών ψηφίων, 797 00:37:33,180 --> 00:37:34,650 να το πω έτσι, ότι μπορεί να θέλετε. 798 00:37:34,650 --> 00:37:40,450 >> Έτσι, επιτρέψτε μου να πάει μπροστά και να κάνουμε κάνει float-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 και προφανώς 1 διαιρείται με 10 είναι 0,0. 800 00:37:46,660 --> 00:37:47,760 Τώρα γιατί συμβαίνει αυτό; 801 00:37:47,760 --> 00:37:51,380 >> Πάλι καλά, ο υπολογιστής λαμβάνει μου κυριολεκτικά, και έχω γράψει 1 802 00:37:51,380 --> 00:37:56,680 και έχω γράψει 10, και να μαντέψω τι είναι η υποτιθέμενη τύπο δεδομένων για αυτά τα δύο 803 00:37:56,680 --> 00:37:58,440 τιμές; 804 00:37:58,440 --> 00:38:00,970 Μια int, είναι τεχνικά κάτι λίγο διαφορετικό. 805 00:38:00,970 --> 00:38:04,150 Είναι συνήθως μια μακρά, αλλά είναι τελικά αναπόσπαστο αξία. 806 00:38:04,150 --> 00:38:06,030 Δεν είναι μια Μιατιμήκινητήςυποδιαστολής. 807 00:38:06,030 --> 00:38:09,456 >> Ποια είναι να πούμε ότι, αν αυτό είναι μια int και αυτό είναι ένα int, 808 00:38:09,456 --> 00:38:11,830 το πρόβλημα είναι ότι στον υπολογιστή δεν έχει την ικανότητα 809 00:38:11,830 --> 00:38:13,680 για να αποθηκεύσετε ακόμα και σε αυτό το σημείο δεκαδικό. 810 00:38:13,680 --> 00:38:16,430 Έτσι, όταν κάνετε 1 χωρίζεται 10 από τη χρήση ακεραίων 811 00:38:16,430 --> 00:38:20,950 τόσο για τον αριθμητή και το παρονομαστή, η απάντηση πρέπει να είναι 0,1. 812 00:38:20,950 --> 00:38:24,930 Αλλά η computer-- επειδή αυτά είναι integers-- 813 00:38:24,930 --> 00:38:27,430 δεν ξέρει τι να κάνει με το 0.1. 814 00:38:27,430 --> 00:38:30,010 >> Έτσι τι είναι αυτό που κάνει καθαρά; 815 00:38:30,010 --> 00:38:33,120 Είναι ακριβώς πετάμε, και ό, τι βλέπω, τελικά, 816 00:38:33,120 --> 00:38:38,830 είναι 0,0 μόνο επειδή επέμενα ότι printf δείξε μου ένα δεκαδικό ψηφίο. 817 00:38:38,830 --> 00:38:41,740 Αλλά το πρόβλημα είναι ότι αν διαιρούν έναν ακέραιο από έναν ακέραιο αριθμό, 818 00:38:41,740 --> 00:38:44,347 θα get-- εξ ορισμού από C-- έναν ακέραιο. 819 00:38:44,347 --> 00:38:46,680 Και δεν πρόκειται να κάνουμε κάτι ωραίο και βολική 820 00:38:46,680 --> 00:38:49,040 όπως και γύρω από αυτό μέχρι το πλησιέστερο προς τα πάνω ή προς τα κάτω. 821 00:38:49,040 --> 00:38:51,860 Είναι πρόκειται να περικόψει πάντα μετά την υποδιαστολή. 822 00:38:51,860 --> 00:38:54,030 >> Έτσι απλά διαισθητικά, αυτό είναι πιθανώς μια λύση; 823 00:38:54,030 --> 00:38:55,351 Ποια είναι η πιο απλή λύση εδώ; 824 00:38:55,351 --> 00:38:55,850 Ναι; 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Ακριβώς. 827 00:39:01,100 --> 00:39:04,200 Γιατί δεν μπορούμε απλά τα αντιμετωπίσουμε ως αποτελεσματικά τιμές κινητής υποδιαστολής 828 00:39:04,200 --> 00:39:05,860 μετατρέποντάς τες σε πλωτήρες ή διπλασιάζεται. 829 00:39:05,860 --> 00:39:10,500 Και τώρα αν το κάνω να επιπλέει-0, ή αν συγκεντρώνει άρματα-1, 830 00:39:10,500 --> 00:39:12,570 η οποία είναι πανομοιότυπη με τι ακριβώς προτείνεται. 831 00:39:12,570 --> 00:39:16,400 Και τώρα κάνω άρματα-0, τώρα παίρνω μου 0.1. 832 00:39:16,400 --> 00:39:17,234 >> Τώρα αυτό είναι καταπληκτικό. 833 00:39:17,234 --> 00:39:19,441 Αλλά τώρα θα πάω να κάνω κάτι λίγο διαφορετικό. 834 00:39:19,441 --> 00:39:22,280 Είμαι περίεργος να δω τι είναι πραγματικά συμβαίνει κάτω από το καπό, 835 00:39:22,280 --> 00:39:26,050 και Πάω να εκτυπώσετε αυτό από έως 28 δεκαδικά ψηφία. 836 00:39:26,050 --> 00:39:29,730 Θέλω να δω πραγματικά 0.1000-- ένα infinite-- 837 00:39:29,730 --> 00:39:32,710 [Δεν ακούγεται] 27 μηδενικά μετά από αυτό το 0,1. 838 00:39:32,710 --> 00:39:34,740 >> Λοιπόν ας δούμε αν αυτό είναι τι πραγματικά πάρετε. 839 00:39:34,740 --> 00:39:39,430 Κάντε άρματα-0 ίδιο αρχείο. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Ας μεγεθύνετε την δραματική απάντηση. 842 00:39:44,380 --> 00:39:49,980 Όλο αυτό το διάστημα, θα πάει σκέψης 1 διαιρούμενο με 10 είναι 10%, ή 0,1. 843 00:39:49,980 --> 00:39:50,810 Δεν είναι. 844 00:39:50,810 --> 00:39:53,210 Τουλάχιστον καθόσον η ενδιαφερόμενο υπολογιστή. 845 00:39:53,210 --> 00:39:57,060 >> Τώρα why-- OK, αυτό είναι πλήρης ψέμα 1 διαιρείται με 10 είναι 0,1. 846 00:39:57,060 --> 00:39:59,710 Αλλά why-- ότι δεν είναι σήμερα το πακέτο. 847 00:39:59,710 --> 00:40:04,010 Γιατί λοιπόν ο υπολογιστής νομίζω, σε αντίθεση με όλους εμάς στο δωμάτιο, 848 00:40:04,010 --> 00:40:06,870 ότι 1 διαιρείται με 10 είναι στην πραγματικότητα αυτή η τρελή τιμή; 849 00:40:06,870 --> 00:40:10,620 Τι είναι ο υπολογιστής κάνει τα φαινόμενα; 850 00:40:10,620 --> 00:40:12,490 Τι είναι αυτό; 851 00:40:12,490 --> 00:40:13,785 >> Δεν είναι υπερχείλιση, per se. 852 00:40:13,785 --> 00:40:15,910 Υπερχείλιση είναι συνήθως όταν τυλίξτε γύρω από μια αξία. 853 00:40:15,910 --> 00:40:18,970 Είναι το θέμα της ασάφειας σε ένα Μιατιμήκινητήςυποδιαστολής 854 00:40:18,970 --> 00:40:22,220 όπου έχετε μόνο 32 ή ίσως ακόμη και 64 bit. 855 00:40:22,220 --> 00:40:25,230 Αλλά αν υπάρχει μια άπειρη τον αριθμό των πραγματικών numbers-- 856 00:40:25,230 --> 00:40:27,940 αριθμούς με δεκαδικά σημεία και οι αριθμοί thereafter-- σίγουρα 857 00:40:27,940 --> 00:40:29,380 δεν μπορεί να αντιπροσωπεύει όλα αυτά. 858 00:40:29,380 --> 00:40:32,870 Έτσι, ο υπολογιστής έχει δοθεί μας το πιο κοντινό αγώνα 859 00:40:32,870 --> 00:40:37,090 με την αξία που μπορεί να αντιπροσωπεύουν τη χρήση που πολλά κομμάτια για την τιμή που πραγματικά θέλετε, 860 00:40:37,090 --> 00:40:38,690 η οποία είναι 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Δυστυχώς, αν να αρχίσει να κάνει τα μαθηματικά, ή θα 862 00:40:40,685 --> 00:40:44,360 αρχίσετε τη συμμετοχή αυτού του είδους των πλωτών τιμές σημείο σε σημαντικό programs-- 863 00:40:44,360 --> 00:40:46,770 οικονομικού λογισμικού, στρατιωτική software-- τίποτα 864 00:40:46,770 --> 00:40:49,090 όπου η αντίληψη είναι πιθανώς αρκετά σημαντικό. 865 00:40:49,090 --> 00:40:51,520 Και θα αρχίσετε να προσθέτετε αριθμοί, όπως αυτή, και την έναρξη 866 00:40:51,520 --> 00:40:54,050 που τρέχει το λογισμικό με πολύ μεγάλες εισροές 867 00:40:54,050 --> 00:40:56,890 ή για πολλές ώρες ή παρτίδων ημερών ή πολλά χρόνια, 868 00:40:56,890 --> 00:41:01,060 αυτά τα μικροσκοπικά μικρά λάθη σίγουρα μπορεί να προσθέσει μέχρι την πάροδο του χρόνου. 869 00:41:01,060 --> 00:41:04,252 >> Τώρα, ως ένα μέρος, αν έχετε ποτέ δει Superman 3 ή Office Space 870 00:41:04,252 --> 00:41:05,960 και μπορείτε να ανακαλέσετε πώς αυτοί οι τύποι έκλεψε 871 00:41:05,960 --> 00:41:08,668 πολλά χρήματα από τον υπολογιστή τους χρησιμοποιώντας τιμές κινητής υποδιαστολής 872 00:41:08,668 --> 00:41:11,290 και προσθέτοντας την μικρή κατάλοιπα, ελπίζουμε ότι η ταινία 873 00:41:11,290 --> 00:41:12,390 τώρα περισσότερο νόημα. 874 00:41:12,390 --> 00:41:14,930 Αυτό είναι ό, τι ήταν αναφερόμενος στην εν λόγω ταινία. 875 00:41:14,930 --> 00:41:16,710 Το γεγονός ότι οι περισσότεροι εταιρείες δεν θα δούμε 876 00:41:16,710 --> 00:41:18,600 μετά από ένα ορισμένο αριθμό δεκαδικών ψηφίων, 877 00:41:18,600 --> 00:41:20,009 αλλά αυτά είναι κλάσματα λεπτών. 878 00:41:20,009 --> 00:41:22,550 Έτσι θα αρχίσετε να πρόσθεση, θα αρχίσετε να κάνετε πολλά χρήματα 879 00:41:22,550 --> 00:41:23,424 στον τραπεζικό λογαριασμό σας. 880 00:41:23,424 --> 00:41:25,160 Έτσι, αυτό είναι το Office Space εξήγησε. 881 00:41:25,160 --> 00:41:28,220 >> Τώρα, δυστυχώς, πέρα ​​από Office Space, υπάρχει 882 00:41:28,220 --> 00:41:31,794 είναι μερικά νόμιμα ανησυχητικά και σημαντικές επιπτώσεις 883 00:41:31,794 --> 00:41:33,710 από αυτά τα είδη υποκείμενη αποφάσεις σχεδιασμού, 884 00:41:33,710 --> 00:41:35,990 και μάλιστα ένας από τους λόγους χρησιμοποιούμε C κατά τη διάρκεια 885 00:41:35,990 --> 00:41:39,640 είναι έτσι ώστε να έχετε πραγματικά αυτό το έδαφος μέχρι την κατανόηση του πώς λειτουργούν οι υπολογιστές, 886 00:41:39,640 --> 00:41:42,440 πώς το λογισμικό λειτουργεί, και δεν θεωρούμε τίποτε δεδομένο. 887 00:41:42,440 --> 00:41:45,820 >> Και πράγματι, δυστυχώς, ακόμη και με ότι τα θεμελιώδη κατανόηση, 888 00:41:45,820 --> 00:41:47,370 εμείς οι άνθρωποι κάνουν λάθη. 889 00:41:47,370 --> 00:41:51,310 Και τι σκέφτηκα να μοιραστώ είναι Αυτό οκτώ λεπτών βίντεο που υιοθετείται εδώ 890 00:41:51,310 --> 00:41:56,980 από ένα επεισόδιο σύγχρονα θαύματα, τα οποία είναι μια εκπαιδευτική παράσταση για το πώς λειτουργούν τα πράγματα 891 00:41:56,980 --> 00:42:00,370 ότι ζωγραφίζει δύο εικόνες της, όταν μια ακατάλληλη χρήση 892 00:42:00,370 --> 00:42:02,540 και την κατανόηση των τιμές κινητής υποδιαστολής 893 00:42:02,540 --> 00:42:05,610 οδήγησε σε κάποια σημαντική ατυχή αποτελέσματα. 894 00:42:05,610 --> 00:42:06,363 Ας ρίξουμε μια ματιά. 895 00:42:06,363 --> 00:42:07,029 [VIDEO PLAYBACK] 896 00:42:07,029 --> 00:42:11,290 -Εμείς Τώρα να επιστρέψει στο "Μηχανική Καταστροφές "για σύγχρονα θαύματα. 897 00:42:11,290 --> 00:42:12,940 Υπολογιστές. 898 00:42:12,940 --> 00:42:15,580 Έχουμε όλοι έρχονται να αποδεχθούν το Συχνά τα προβλήματα απογοητευτικό ότι 899 00:42:15,580 --> 00:42:20,960 πήρε με them-- σφάλματα, ιούς, και glitches-- λογισμικού για μικρές τιμές 900 00:42:20,960 --> 00:42:23,100 να πληρώσουν για την ευκολία. 901 00:42:23,100 --> 00:42:27,770 Αλλά σε υψηλής τεχνολογίας και υψηλής ταχύτητας στρατιωτικές και διαστημικές εφαρμογές του προγράμματος, 902 00:42:27,770 --> 00:42:32,780 το μικρότερο πρόβλημα που μπορεί να να μεγεθυνθεί σε καταστροφή. 903 00:42:32,780 --> 00:42:38,880 >> Στις 4 Ιουνίου του 1996, οι επιστήμονες που παρασκευάζονται να ξεκινήσει ένα μη επανδρωμένο πύραυλο Ariane 5. 904 00:42:38,880 --> 00:42:41,190 Μετέφερε την επιστημονική δορυφόροι έχουν σχεδιαστεί 905 00:42:41,190 --> 00:42:44,570 να προσδιοριστεί με ακρίβεια το πώς η Μαγνητικό αλληλεπιδρά πεδίο της Γης 906 00:42:44,570 --> 00:42:47,380 με τους ηλιακούς ανέμους. 907 00:42:47,380 --> 00:42:50,580 Ο πύραυλος χτίστηκε για η Ευρωπαϊκή Υπηρεσία Διαστήματος, 908 00:42:50,580 --> 00:42:54,400 και ανασηκώνεται από την εγκατάσταση του στην ακτή της Γαλλικής Γουιάνας. 909 00:42:54,400 --> 00:42:57,520 >> -Κατά Περίπου 37 δευτερόλεπτα σε η πτήση, που πρώτη 910 00:42:57,520 --> 00:42:59,070 παρατηρήσει κάτι δεν πήγαινε καλά. 911 00:42:59,070 --> 00:43:02,240 Ότι τα ακροφύσια ήταν περιστρεφόμενο με έναν τρόπο που πραγματικά δεν θα έπρεπε. 912 00:43:02,240 --> 00:43:06,550 Περίπου 40 δευτερόλεπτα σε πτήση, σαφώς το όχημα ήταν σε μπελάδες, 913 00:43:06,550 --> 00:43:08,820 και ότι όταν έκαναν η απόφαση να το καταστρέψουν. 914 00:43:08,820 --> 00:43:12,370 Ο ανώτερος υπάλληλος ασφάλειας, με τεράστια κότσια, πατηθεί το κουμπί 915 00:43:12,370 --> 00:43:18,030 και ανατίναξαν τον πύραυλο πριν θα μπορούσε να γίνει ένας κίνδυνος για τη δημόσια ασφάλεια. 916 00:43:18,030 --> 00:43:21,010 >> -Αυτό Ήταν η παρθενική ταξίδι του Ariane 5, 917 00:43:21,010 --> 00:43:23,920 και την καταστροφή του πήρε τοποθετήστε λόγω του ελαττώματος 918 00:43:23,920 --> 00:43:25,932 ενσωματωμένο στο λογισμικό του πυραύλου. 919 00:43:25,932 --> 00:43:27,640 -Το Πρόβλημα για το Ariane ήταν ότι υπάρχει 920 00:43:27,640 --> 00:43:30,500 ήταν ένας αριθμός που απαιτείται 64 bits για να εκφράσουν, 921 00:43:30,500 --> 00:43:33,560 και ήθελαν να μετατρέψουν σε έναν αριθμό 16-bit. 922 00:43:33,560 --> 00:43:36,820 Υπέθεσαν ότι ο αριθμός Ποτέ δεν επρόκειτο να είναι πολύ μεγάλο. 923 00:43:36,820 --> 00:43:40,940 Ότι τα περισσότερα από αυτά τα ψηφία σε ο αριθμός 64-bit ήταν μηδενικά. 924 00:43:40,940 --> 00:43:42,450 Θα ήταν λάθος. 925 00:43:42,450 --> 00:43:45,000 >> -Το Ανικανότητα ενός πρόγραμμα λογισμικού για να δεχθεί 926 00:43:45,000 --> 00:43:49,460 το είδος του αριθμού που παράγεται από άλλος ήταν στη ρίζα της αποτυχίας. 927 00:43:49,460 --> 00:43:54,260 Ανάπτυξη λογισμικού είχε γίνει πολύ δαπανηρό μέρος της νέας τεχνολογίας. 928 00:43:54,260 --> 00:43:57,060 Η Ariane 4 πύραυλος είχε ήταν πολύ επιτυχημένη. 929 00:43:57,060 --> 00:44:01,600 Τόσο μεγάλο μέρος του λογισμικού που δημιουργήθηκε για χρησιμοποιήθηκε επίσης στον Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -Το Βασικό πρόβλημα ήταν ότι η Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Ήταν faster-- επιταχύνεται γρηγορότερα, και το λογισμικό δεν είχαν λάβει υπόψη αυτό. 932 00:44:11,200 --> 00:44:14,910 >> -Το Καταστροφή του πυραύλου ήταν μια τεράστια οικονομική καταστροφή. 933 00:44:14,910 --> 00:44:18,630 Όλα οφείλονται σε ένα λάθος λεπτό λογισμικού. 934 00:44:18,630 --> 00:44:21,160 Αλλά αυτό δεν ήταν το πρώτο χρόνο τα προβλήματα μετατροπής δεδομένων 935 00:44:21,160 --> 00:44:24,770 είχε ταλαιπωρήσει τη σύγχρονη τεχνολογία πυραύλων. 936 00:44:24,770 --> 00:44:28,020 >> -Σε 1991, με την έναρξη του πρώτου Πολέμου του Κόλπου, 937 00:44:28,020 --> 00:44:30,540 η πυραύλων Patriot βιώσει μια παρόμοια είδη 938 00:44:30,540 --> 00:44:32,465 ενός προβλήματος μετατροπής αριθμού. 939 00:44:32,465 --> 00:44:36,760 Και ως αποτέλεσμα 28 people-- 28 American soldiers-- σκοτώθηκαν, 940 00:44:36,760 --> 00:44:39,010 και περίπου εκατό τραυματίες. 941 00:44:39,010 --> 00:44:42,830 Όταν το Patriot, που υποτίθεται για την προστασία από τις εισερχόμενες Σκαντ, 942 00:44:42,830 --> 00:44:45,780 απέτυχε να βάλει φωτιά σε ένα βλήμα. 943 00:44:45,780 --> 00:44:51,610 >> -Όταν Ιράκ εισέβαλε στο Κουβέιτ, και την Αμερική ξεκίνησε Desert Storm στις αρχές του 1991, 944 00:44:51,610 --> 00:44:55,720 Patriot συστοιχίες πυραύλων αναπτύχθηκαν να προστατεύσει τη Σαουδική Αραβία και το Ισραήλ 945 00:44:55,720 --> 00:44:59,180 από το ιρακινό πυραυλικές επιθέσεις Scud. 946 00:44:59,180 --> 00:45:03,080 Το Patriot είναι ένα μεσαίου βεληνεκούς ΗΠΑ επιφάνεια-αέρος σύστημα 947 00:45:03,080 --> 00:45:06,530 κατασκευάζονται από την εταιρεία Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -Το Μέγεθος του Patriot αναχαίτισης itself-- 949 00:45:09,500 --> 00:45:14,705 Είναι μεγάλη για περίπου 20 πόδια, και ζυγίζει περίπου 2.000 κιλά. 950 00:45:14,705 --> 00:45:19,090 Και αυτό φέρνει μια κεφαλή πυραύλου περίπου, Νομίζω ότι είναι περίπου 150 κιλά. 951 00:45:19,090 --> 00:45:23,880 Και η ίδια η κεφαλή είναι ένα υψηλό εκρηκτικό, που 952 00:45:23,880 --> 00:45:26,700 έχει θραύσματα γύρω του. 953 00:45:26,700 --> 00:45:31,630 Έτσι ώστε το περίβλημα του είναι κεφαλή σχεδιασμένο να λειτουργεί σαν ένα σκάγι. 954 00:45:31,630 --> 00:45:34,040 >> -Οι Πύραυλοι μεταφέρονται τέσσερις ανά εμπορευματοκιβώτιο, 955 00:45:34,040 --> 00:45:37,170 και μεταφέρονται από ένα ημι ρυμουλκούμενο. 956 00:45:37,170 --> 00:45:44,880 >> -Το Σύστημα Patriot αντιπυραυλικού πηγαίνει πίσω τουλάχιστον 20 χρόνια τώρα. 957 00:45:44,880 --> 00:45:48,380 Αρχικά είχε σχεδιαστεί ως αντιπυραυλικής άμυνας αέρα 958 00:45:48,380 --> 00:45:50,810 να καταρρίψουν αεροπλάνα του εχθρού. 959 00:45:50,810 --> 00:45:54,410 Στο πρώτο Πόλεμο του Κόλπου όταν ο πόλεμος ήρθε, 960 00:45:54,410 --> 00:45:59,650 ο στρατός ήθελε να το χρησιμοποιήσετε για να καταρρίψουν Σκαντ, όχι αεροπλάνα. 961 00:45:59,650 --> 00:46:03,580 Η Ιρακινή Πολεμική Αεροπορία ήταν δεν είναι τόσο μεγάλο πρόβλημα, 962 00:46:03,580 --> 00:46:06,590 αλλά ο στρατός ήταν ανησυχούν για Σκαντ. 963 00:46:06,590 --> 00:46:10,120 Και έτσι προσπάθησαν να αναβάθμιση του Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Έναν εχθρό πύραυλος ταξιδεύει σε Mach 5 965 00:46:12,740 --> 00:46:15,670 επρόκειτο να είναι αρκετά δύσκολο. 966 00:46:15,670 --> 00:46:18,440 Αλλά όταν το Patriot έσπευσε σε λειτουργία, 967 00:46:18,440 --> 00:46:22,580 ο στρατός δεν γνώριζε Ιρακινός τροποποίηση ότι 968 00:46:22,580 --> 00:46:25,880 έκανε scuds τους σχεδόν αδύνατο σε αυτό. 969 00:46:25,880 --> 00:46:30,690 >> Τι συνέβη είναι ότι τα Σκαντ έρχονταν ήταν ασταθής. 970 00:46:30,690 --> 00:46:32,000 Θα ήταν ταλαντευόμενος. 971 00:46:32,000 --> 00:46:37,210 Ο λόγος για αυτό ήταν οι Iraqis-- προκειμένου να πάρει 600 χιλιόμετρα έξω 972 00:46:37,210 --> 00:46:41,680 από μια σειρά missile-- 300 χιλιομέτρων πήρε το βάρος από την μπροστινή κεφαλή, 973 00:46:41,680 --> 00:46:43,340 και γίνεται η κεφαλή αναπτήρα. 974 00:46:43,340 --> 00:46:48,490 Μέχρι τώρα το Patriot προσπαθεί να έρθει στο Scud, και το μεγαλύτερο μέρος της time-- 975 00:46:48,490 --> 00:46:52,880 η συντριπτική πλειοψηφία των time-- θα πετάξει ακριβώς από το Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Μόλις Τους διαχειριστές συστημάτων Patriot συνειδητοποίησε το Patriot έχασε το στόχο της, 977 00:46:57,120 --> 00:47:01,630 που πυροδότησε κεφαλή του Patriot του να αποφευχθούν πιθανές απώλειες εάν 978 00:47:01,630 --> 00:47:04,440 αφέθηκε να πέσει στο έδαφος. 979 00:47:04,440 --> 00:47:08,700 >> -Αυτό Ήταν αυτό που οι περισσότεροι άνθρωποι έβλεπαν όπως μεγάλες πύρινες σφαίρες στον ουρανό, 980 00:47:08,700 --> 00:47:14,180 και παρερμηνευθεί ως παρακολουθήσεις των Scud κεφαλές. 981 00:47:14,180 --> 00:47:18,020 >> Αν και με τις νυχτερινό ουρανό, πατριώτες φάνηκε να καταστρέφει επιτυχώς 982 00:47:18,020 --> 00:47:23,280 Scuds, στο Νταχράν θα μπορούσε να υπάρξει κανένα λάθος σχετικά με τις επιδόσεις του. 983 00:47:23,280 --> 00:47:27,930 Υπάρχει σύστημα ραντάρ του Patriot του χάσει τα ίχνη της εισερχόμενης Scud 984 00:47:27,930 --> 00:47:30,260 και ποτέ δεν ξεκίνησε λόγω σε ένα ελάττωμα του λογισμικού. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> Ήταν οι Ισραηλινοί που ανακαλύφθηκε για πρώτη φορά ότι το πλέον το σύστημα ήταν σχετικά, 987 00:47:38,880 --> 00:47:41,130 μεγαλύτερη είναι η χρονική διαφορά έγινε. 988 00:47:41,130 --> 00:47:44,770 Οφείλεται σε ένα ρολόι ενσωματωμένο στον υπολογιστή του συστήματος. 989 00:47:44,770 --> 00:47:48,190 >> -Περίπου Δύο εβδομάδες πριν η τραγωδία στο Νταχράν, 990 00:47:48,190 --> 00:47:50,720 οι Ισραηλινοί αναφερθεί το Υπουργείο Άμυνας 991 00:47:50,720 --> 00:47:52,410 ότι το σύστημα είχε χάσει χρόνο. 992 00:47:52,410 --> 00:47:54,410 Μετά από περίπου οκτώ ώρες τρέξιμο, παρατήρησαν 993 00:47:54,410 --> 00:47:57,690 ότι το σύστημα είναι όλο και αισθητά λιγότερο ακριβείς. 994 00:47:57,690 --> 00:48:01,850 Το Υπουργείο Άμυνας ανταποκρίθηκε λέει όλες τις μπαταρίες Patriot 995 00:48:01,850 --> 00:48:04,800 να μην αφήσει τα συστήματα για μεγάλο χρονικό διάστημα. 996 00:48:04,800 --> 00:48:06,980 Ποτέ δεν είπε τι ένα μεγάλο χρονικό διάστημα ήταν. 997 00:48:06,980 --> 00:48:09,140 8 ώρες, 10 ώρες, χιλιάδες ώρες. 998 00:48:09,140 --> 00:48:11,300 Κανείς δεν ήξερε. 999 00:48:11,300 --> 00:48:13,320 >> -Το Μπαταρία Patriot σταθμεύουν στους στρατώνες 1000 00:48:13,320 --> 00:48:18,310 σε Dhahran και λανθασμένη εσωτερική της ρολόι ήταν σε πάνω από 100 ώρες 1001 00:48:18,310 --> 00:48:21,520 το βράδυ της 25ης Φεβρουαρίου. 1002 00:48:21,520 --> 00:48:25,792 >> -Είναι Παρακολουθούνται χρόνο με ακρίβεια από περίπου ένα δέκατο του δευτερολέπτου. 1003 00:48:25,792 --> 00:48:27,950 Τώρα ένα δέκατο του δευτερολέπτου είναι μια ενδιαφέρουσα αριθμός 1004 00:48:27,950 --> 00:48:31,850 επειδή δεν μπορεί να εκφραστεί σε δυαδική ακριβώς, η οποία 1005 00:48:31,850 --> 00:48:36,500 σημαίνει ότι δεν μπορεί να εκφραστεί ακριβώς σε κάθε σύγχρονο ψηφιακό υπολογιστή. 1006 00:48:36,500 --> 00:48:41,070 Είναι δύσκολο να πιστέψει κανείς, αλλά χρησιμοποιήσετε αυτό ως ένα παράδειγμα. 1007 00:48:41,070 --> 00:48:43,420 >> Ας πάρουμε τον αριθμό του ενός τρίτου. 1008 00:48:43,420 --> 00:48:47,330 Ένα τρίτο δεν μπορεί να είναι Εκφράζεται σε δεκαδική ακριβώς. 1009 00:48:47,330 --> 00:48:52,060 Ένα τρίτο είναι 0.333 συνεχίζεται για το άπειρο. 1010 00:48:52,060 --> 00:48:56,420 Δεν υπάρχει τρόπος να το κάνουμε αυτό με απόλυτη ακρίβεια σε ένα δεκαδικό. 1011 00:48:56,420 --> 00:48:59,530 Αυτό είναι ακριβώς το είδος του προβλήματος που συνέβη στο Patriot. 1012 00:48:59,530 --> 00:49:04,040 Το πλέον το σύστημα έτρεξε, η χειρότερα το σφάλμα χρόνου έγινε. 1013 00:49:04,040 --> 00:49:08,840 >> -Μετά 100 ώρες λειτουργίας, η σφάλμα στο χρόνο ήταν μόνο περίπου το ένα τρίτο 1014 00:49:08,840 --> 00:49:10,440 του δευτερολέπτου. 1015 00:49:10,440 --> 00:49:14,150 Αλλά από την άποψη του στόχου για ένα πύραυλος ταξιδεύει σε Mach 5, 1016 00:49:14,150 --> 00:49:18,560 οδήγησε σε ένα εντοπισμού σφάλμα του πάνω από 600 μέτρα. 1017 00:49:18,560 --> 00:49:21,870 Θα ήταν μοιραίο λάθος για τους στρατιώτες στο Νταχράν. 1018 00:49:21,870 --> 00:49:28,455 >> Τι συνέβη είναι μια εκτόξευση Scud ήταν ανιχνεύονται από την έγκαιρη προειδοποίηση των δορυφόρων, 1019 00:49:28,455 --> 00:49:32,710 και ήξεραν ένα Scud ερχόταν στη γενική κατεύθυνσή τους. 1020 00:49:32,710 --> 00:49:35,150 Δεν ξέρω από πού ερχόταν. 1021 00:49:35,150 --> 00:49:38,210 Ήταν τώρα μέχρι το ραντάρ συνιστώσα του συστήματος Patriot 1022 00:49:38,210 --> 00:49:43,150 υπεράσπιση Dhahran για να εντοπίσετε και να κρατήσει κομμάτι της εισερχόμενης εχθρός πυραύλων. 1023 00:49:43,150 --> 00:49:44,561 >> -Το Ραντάρ ήταν πολύ έξυπνος. 1024 00:49:44,561 --> 00:49:46,560 Θα ήταν πραγματικά παρακολουθείτε η θέση του Scud 1025 00:49:46,560 --> 00:49:48,930 και στη συνέχεια να προβλέψουμε, όπου κατά πάσα πιθανότητα θα είναι 1026 00:49:48,930 --> 00:49:51,380 Την επόμενη φορά που ο ραντάρ, έστειλε έναν παλμό έξω. 1027 00:49:51,380 --> 00:49:53,040 Αυτό ονομαζόταν η πύλη φάσμα. 1028 00:49:53,040 --> 00:49:57,620 >> -Τότε Μία φορά την Patriot αποφασίζει αρκετό χρόνο έχει 1029 00:49:57,620 --> 00:50:02,400 περάσει για να πάει πίσω και να ελέγξετε το επόμενο θέση για αυτό το αντικείμενο που εντοπίστηκε 1030 00:50:02,400 --> 00:50:03,550 πηγαίνει πίσω. 1031 00:50:03,550 --> 00:50:07,820 Έτσι, όταν πήγε πίσω στο λάθος θέση, τότε δεν βλέπει κανένα αντικείμενο. 1032 00:50:07,820 --> 00:50:10,360 Και αποφασίζει ότι δεν υπήρχε κανένα αντικείμενο. 1033 00:50:10,360 --> 00:50:13,630 Ότι υπήρχε μια ψευδή ανίχνευση και πέφτει το κομμάτι. 1034 00:50:13,630 --> 00:50:16,970 >> -Το Εισερχόμενη Scud εξαφανίστηκε από την οθόνη του ραντάρ, 1035 00:50:16,970 --> 00:50:20,200 και δευτερόλεπτα αργότερα, συγκρούστηκε με τους στρατώνες. 1036 00:50:20,200 --> 00:50:22,570 Η Scud σκότωσε 28. 1037 00:50:22,570 --> 00:50:26,110 Ήταν η τελευταία καύση κατά τη διάρκεια του πρώτου Πολέμου του Κόλπου. 1038 00:50:26,110 --> 00:50:31,920 Τραγικά, το ενημερωμένο λογισμικό έφτασε τα ξημερώματα της επόμενης ημέρας. 1039 00:50:31,920 --> 00:50:34,870 Το ελάττωμα του λογισμικού είχε ήταν σταθερή, το κλείσιμο 1040 00:50:34,870 --> 00:50:39,150 ένα κεφάλαιο στην ταραγμένη ιστορία των πυραύλων Patriot. 1041 00:50:39,150 --> 00:50:40,030 >> [ΤΕΛΟΣ VIDEO PLAYBACK] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J. MALAN: Αυτό είναι για το CS50. 1043 00:50:41,488 --> 00:50:42,820 Θα σας δούμε την Τετάρτη. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 1046 00:50:50,370 --> 00:54:23,446